[SearchSub][README] No longer is a default plugin since 8614cd77

This commit is contained in:
Diogo Cordeiro 2019-08-11 04:11:27 +01:00 committed by Diogo Peralta Cordeiro
parent 0c6d94fca8
commit 8d848683ad
13 changed files with 469 additions and 476 deletions

View File

@ -2,7 +2,7 @@ The SearchSub plugin allows following all messages with a given search.
Installation
============
This plugin is enabled by default
- Edit your `config.php` to include `addModule("SearchSub");`
Settings
========

View File

@ -1,46 +1,29 @@
<?php
/**
* StatusNet - the distributed open-source microblogging tool
* Copyright (C) 2011, StatusNet, Inc.
*
* A plugin to enable local tab subscription
*
* PHP version 5
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* @category SearchSubPlugin
* @package StatusNet
* @author Brion Vibber <brion@status.net>
* @copyright 2011 StatusNet, Inc.
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
* @link http://status.net/
*/
// This file is part of GNU social - https://www.gnu.org/software/social
//
// GNU social is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// GNU social is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with GNU social. If not, see <http://www.gnu.org/licenses/>.
if (!defined('STATUSNET')) {
exit(1);
}
defined('GNUSOCIAL') || die();
/**
* SearchSub plugin main class
*
* @category SearchSubPlugin
* @package StatusNet
* @category Plugin
* @package SearchSubPlugin
* @author Brion Vibber <brionv@status.net>
* @copyright 2011 StatusNet, Inc.
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
* @link http://status.net/
* @copyright 2011-2019 Free Software Foundation, Inc http://www.fsf.org
* @license https://www.gnu.org/licenses/agpl.html GNU AGPL v3 or later
*/
class SearchSubPlugin extends Plugin
{
@ -49,11 +32,12 @@ class SearchSubPlugin extends Plugin
/**
* Database schema setup
*
* @return bool hook value; true means continue processing, false means stop.
* @throws PEAR_Exception
* @see Schema
*
* @return boolean hook value; true means continue processing, false means stop.
*/
function onCheckSchema()
public function onCheckSchema(): bool
{
$schema = Schema::get();
$schema->ensureTable('searchsub', SearchSub::schemaDef());
@ -65,38 +49,46 @@ class SearchSubPlugin extends Plugin
*
* @param URLMapper $m path-to-action mapper
*
* @return boolean hook value; true means continue processing, false means stop.
* @return bool hook value; true means continue processing, false means stop.
* @throws Exception
*/
public function onRouterInitialized(URLMapper $m)
public function onRouterInitialized(URLMapper $m): bool
{
$m->connect('search/:search/subscribe',
['action' => 'searchsub'],
['search' => Router::REGEX_TAG]);
$m->connect('search/:search/unsubscribe',
['action' => 'searchunsub'],
['search' => Router::REGEX_TAG]);
$m->connect(':nickname/search-subscriptions',
['action' => 'searchsubs'],
['nickname' => Nickname::DISPLAY_FMT]);
$m->connect(
'search/:search/subscribe',
['action' => 'searchsub'],
['search' => Router::REGEX_TAG]
);
$m->connect(
'search/:search/unsubscribe',
['action' => 'searchunsub'],
['search' => Router::REGEX_TAG]
);
$m->connect(
':nickname/search-subscriptions',
['action' => 'searchsubs'],
['nickname' => Nickname::DISPLAY_FMT]
);
return true;
}
/**
* Plugin version data
* Module version data
*
* @param array &$versions array of version data
*
* @return value
* @return bool
* @throws Exception
*/
public function onPluginVersion(array &$versions): bool
{
$versions[] = array('name' => 'SearchSub',
'version' => self::PLUGIN_VERSION,
'author' => 'Brion Vibber',
'homepage' => 'https://git.gnu.io/gnu/gnu-social/tree/master/plugins/SearchSub',
'rawdescription' =>
// TRANS: Plugin description.
_m('Plugin to allow following all messages with a given search.'));
'version' => self::PLUGIN_VERSION,
'author' => 'Brion Vibber',
'homepage' => 'https://git.gnu.io/gnu/gnu-social/tree/master/plugins/SearchSub',
'rawdescription' =>
// TRANS: Module description.
_m('Module to allow following all messages with a given search.'));
return true;
}
@ -110,9 +102,9 @@ class SearchSubPlugin extends Plugin
*
* @param Notice $notice
* @param array $ni in/out map of profile IDs to inbox constants
* @return boolean hook result
* @return bool hook result
*/
function onStartNoticeWhoGets(Notice $notice, array &$ni)
public function onStartNoticeWhoGets(Notice $notice, array &$ni): bool
{
// Warning: this is potentially very slow
// with a lot of searches!
@ -148,9 +140,9 @@ class SearchSubPlugin extends Plugin
*
* @param Notice $notice
* @param string $search
* @return boolean
* @return bool
*/
function matchSearch(Notice $notice, $search)
public function matchSearch(Notice $notice, $search): bool
{
return (mb_stripos($notice->content, $search) !== false);
}
@ -160,15 +152,15 @@ class SearchSubPlugin extends Plugin
* @param NoticeSearchAction $action
* @param string $q
* @param Notice $notice
* @return boolean hook result
* @return bool hook result
*/
function onStartNoticeSearchShowResults($action, $q, $notice)
public function onStartNoticeSearchShowResults($action, $q, $notice): bool
{
$user = common_current_user();
if ($user) {
$search = $q;
$searchsub = SearchSub::pkeyGet(array('search' => $search,
'profile_id' => $user->id));
'profile_id' => $user->id));
if ($searchsub) {
$form = new SearchUnsubForm($action, $search);
} else {
@ -190,19 +182,22 @@ class SearchSubPlugin extends Plugin
*
* @param Widget $widget Widget being executed
*
* @return boolean hook return
* @return bool hook return
* @throws Exception
*/
function onEndSubGroupNav($widget)
public function onEndSubGroupNav($widget): bool
{
$action = $widget->out;
$action_name = $action->trimmed('action');
$action->menuItem(common_local_url('searchsubs', array('nickname' => $action->user->nickname)),
// TRANS: SearchSub plugin menu item on user settings page.
_m('MENU', 'Searches'),
// TRANS: SearchSub plugin tooltip for user settings menu item.
_m('Configure search subscriptions'),
$action_name == 'searchsubs' && $action->arg('nickname') == $action->user->nickname);
$action->menuItem(
common_local_url('searchsubs', array('nickname' => $action->user->nickname)),
// TRANS: SearchSub plugin menu item on user settings page.
_m('MENU', 'Searches'),
// TRANS: SearchSub plugin tooltip for user settings menu item.
_m('Configure search subscriptions'),
$action_name == 'searchsubs' && $action->arg('nickname') == $action->user->nickname
);
return true;
}
@ -215,20 +210,20 @@ class SearchSubPlugin extends Plugin
* @param string $arg
* @param User $user
* @param Command $result
* @return boolean hook result
* @return bool hook result
*/
function onEndInterpretCommand($cmd, $arg, $user, &$result)
public function onEndInterpretCommand($cmd, $arg, $user, &$result): bool
{
if ($result instanceof TrackCommand) {
$result = new SearchSubTrackCommand($user, $arg);
return false;
} else if ($result instanceof TrackOffCommand) {
} elseif ($result instanceof TrackOffCommand) {
$result = new SearchSubTrackOffCommand($user);
return false;
} else if ($result instanceof TrackingCommand) {
} elseif ($result instanceof TrackingCommand) {
$result = new SearchSubTrackingCommand($user);
return false;
} else if ($result instanceof UntrackCommand) {
} elseif ($result instanceof UntrackCommand) {
$result = new SearchSubUntrackCommand($user, $arg);
return false;
} else {
@ -236,7 +231,7 @@ class SearchSubPlugin extends Plugin
}
}
function onHelpCommandMessages($cmd, &$commands)
public function onHelpCommandMessages($cmd, &$commands): void
{
// TRANS: Help message for IM/SMS command "track <word>"
$commands["track <word>"] = _m('COMMANDHELP', "Start following notices matching the given search query.");
@ -252,7 +247,7 @@ class SearchSubPlugin extends Plugin
$commands["tracking"] = _m('COMMANDHELP', "List all your search subscriptions.");
}
function onEndDefaultLocalNav($menu, $user)
public function onEndDefaultLocalNav($menu, $user): bool
{
$user = common_current_user();
@ -262,7 +257,7 @@ class SearchSubPlugin extends Plugin
if (!empty($searches) && count($searches) > 0) {
$searchSubMenu = new SearchSubMenu($menu->out, $user, $searches);
// TRANS: Sub menu for searches.
$menu->submenu(_m('MENU','Searches'), $searchSubMenu);
$menu->submenu(_m('MENU', 'Searches'), $searchSubMenu);
}
}

View File

@ -1,37 +1,20 @@
<?php
/**
* StatusNet - the distributed open-source microblogging tool
* Copyright (C) 2008-2011, StatusNet, Inc.
*
* Search subscription action.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* PHP version 5
*
* @category Action
* @package StatusNet
* @author Brion Vibber <brion@status.net>
* @author Evan Prodromou <evan@status.net>
* @copyright 2008-2010 StatusNet, Inc.
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3
* @link http://status.net/
*/
// This file is part of GNU social - https://www.gnu.org/software/social
//
// GNU social is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// GNU social is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with GNU social. If not, see <http://www.gnu.org/licenses/>.
if (!defined('STATUSNET')) {
exit(1);
}
defined('GNUSOCIAL') || die();
/**
* Search subscription action
@ -43,27 +26,27 @@ if (!defined('STATUSNET')) {
*
* Only works if the current user is logged in.
*
* @category Action
* @package StatusNet
* @category Plugin
* @package SearchSubPlugin
* @author Evan Prodromou <evan@status.net>
* @author Brion Vibber <brion@status.net>
* @copyright 2008-2011 StatusNet, Inc.
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3
* @link http://status.net/
* @copyright 2011-2019 Free Software Foundation, Inc http://www.fsf.org
* @license https://www.gnu.org/licenses/agpl.html GNU AGPL v3 or later
*/
class SearchsubAction extends Action
{
var $user;
var $search;
public $user;
public $search;
/**
* Check pre-requisites and instantiate attributes
*
* @param Array $args array of arguments (URL, GET, POST)
* @param array $args array of arguments (URL, GET, POST)
*
* @return boolean success flag
* @return bool success flag
* @throws ClientException
*/
function prepare(array $args = array())
public function prepare(array $args = [])
{
parent::prepare($args);
if ($this->boolean('ajax')) {
@ -84,8 +67,8 @@ class SearchsubAction extends Action
if (!$token || $token != common_session_token()) {
// TRANS: Client error displayed when the session token is not okay.
$this->clientError(_m('There was a problem with your session token.'.
' Try again, please.'));
$this->clientError(_m('There was a problem with your session token.' .
' Try again, please.'));
}
// Only for logged-in users
@ -114,16 +97,17 @@ class SearchsubAction extends Action
*
* Does the subscription and returns results.
*
* @param Array $args unused.
*
* @return void
* @throws ClientException
*/
function handle()
public function handle()
{
// Throws exception on error
SearchSub::start($this->user->getProfile(),
$this->search);
SearchSub::start(
$this->user->getProfile(),
$this->search
);
if ($this->boolean('ajax')) {
$this->startHTML('text/xml;charset=utf-8');
@ -137,8 +121,10 @@ class SearchsubAction extends Action
$this->elementEnd('body');
$this->endHTML();
} else {
$url = common_local_url('search',
array('search' => $this->search));
$url = common_local_url(
'search',
array('search' => $this->search)
);
common_redirect($url, 303);
}
}

View File

@ -1,47 +1,33 @@
<?php
/**
* StatusNet, the distributed open-source microblogging tool
*
* List of a user's subscriptions
*
* PHP version 5
*
* LICENCE: This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* @category Social
* @package StatusNet
* @author Evan Prodromou <evan@status.net>
* @author Sarven Capadisli <csarven@status.net>
* @copyright 2008-2009 StatusNet, Inc.
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://status.net/
*/
// This file is part of GNU social - https://www.gnu.org/software/social
//
// GNU social is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// GNU social is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with GNU social. If not, see <http://www.gnu.org/licenses/>.
if (!defined('GNUSOCIAL')) { exit(1); }
defined('GNUSOCIAL') || die();
/**
* A list of the user's subscriptions
*
* @category Social
* @package StatusNet
* @author Evan Prodromou <evan@status.net>
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://status.net/
* @category Plugin
* @package SearchSubPlugin
* @author Evan Prodromou <evan@status.net>
* @copyright 2011-2019 Free Software Foundation, Inc http://www.fsf.org
* @license https://www.gnu.org/licenses/agpl.html GNU AGPL v3 or later
*/
class SearchSubsAction extends GalleryAction
{
function title()
public function title()
{
if ($this->page == 1) {
// TRANS: Header for subscriptions overview for a user (first page).
@ -50,35 +36,45 @@ class SearchSubsAction extends GalleryAction
} else {
// TRANS: Header for subscriptions overview for a user (not first page).
// TRANS: %1$s is a user nickname, %2$d is the page number.
return sprintf(_m('%1$s\'s search subscriptions, page %2$d'),
$this->getTarget()->getNickname(),
$this->page);
return sprintf(
_m('%1$s\'s search subscriptions, page %2$d'),
$this->getTarget()->getNickname(),
$this->page
);
}
}
function showPageNotice()
public function showPageNotice()
{
if ($this->scoped instanceof Profile && $this->scoped->sameAs($this->getTarget())) {
$this->element('p', null,
// TRANS: Page notice for page with an overview of all search subscriptions
// TRANS: of the logged in user's own profile.
_m('You have subscribed to receive all notices on this site matching the following searches:'));
$this->element(
'p',
null,
// TRANS: Page notice for page with an overview of all search subscriptions
// TRANS: of the logged in user's own profile.
_m('You have subscribed to receive all notices on this site matching the following searches:')
);
} else {
$this->element('p', null,
// TRANS: Page notice for page with an overview of all subscriptions of a user other
// TRANS: than the logged in user. %s is the user nickname.
sprintf(_m('%s has subscribed to receive all notices on this site matching the following searches:'),
$this->getTarget()->getNickname()));
$this->element(
'p',
null,
// TRANS: Page notice for page with an overview of all subscriptions of a user other
// TRANS: than the logged in user. %s is the user nickname.
sprintf(
_m('%s has subscribed to receive all notices on this site matching the following searches:'),
$this->getTarget()->getNickname()
)
);
}
}
function showContent()
public function showContent()
{
if (Event::handle('StartShowTagSubscriptionsContent', array($this))) {
parent::showContent();
$offset = ($this->page-1) * PROFILES_PER_PAGE;
$limit = PROFILES_PER_PAGE + 1;
$offset = ($this->page - 1) * PROFILES_PER_PAGE;
$limit = PROFILES_PER_PAGE + 1;
$cnt = 0;
@ -97,30 +93,33 @@ class SearchSubsAction extends GalleryAction
$this->showEmptyListMessage();
}
$this->pagination($this->page > 1, $cnt > PROFILES_PER_PAGE,
$this->page, 'searchsubs',
array('nickname' => $this->getTarget()->getNickname()));
$this->pagination(
$this->page > 1,
$cnt > PROFILES_PER_PAGE,
$this->page,
'searchsubs',
array('nickname' => $this->getTarget()->getNickname())
);
Event::handle('EndShowTagSubscriptionsContent', array($this));
}
}
function showEmptyListMessage()
public function showEmptyListMessage()
{
if (common_logged_in()) {
if ($this->scoped->sameAs($this->getTarget())) {
// TRANS: Search subscription list text when the logged in user has no search subscriptions.
$message = _m('You are not subscribed to any text searches right now. You can push the "Subscribe" button ' .
'on any notice text search to automatically receive any public messages on this site that match that ' .
'search, even if you are not subscribed to the poster.');
'on any notice text search to automatically receive any public messages on this site that match that ' .
'search, even if you are not subscribed to the poster.');
} else {
// TRANS: Search subscription list text when looking at the subscriptions for a of a user other
// TRANS: than the logged in user that has no search subscriptions. %s is the user nickname.
$message = sprintf(_m('%s is not subscribed to any searches.'), $this->getTarget()->getNickname());
}
}
else {
} else {
// TRANS: Subscription list text when looking at the subscriptions for a of a user that has none
// TRANS: as an anonymous user. %s is the user nickname.
$message = sprintf(_m('%s is not subscribed to any searches.'), $this->getTarget()->getNickname());
@ -136,7 +135,7 @@ class SearchSubsAction extends GalleryAction
class SearchSubscriptionsList extends SubscriptionList
{
function newListItem(Profile $searchsub)
public function newListItem(Profile $searchsub)
{
return new SearchSubscriptionsListItem($searchsub, $this->owner, $this->action);
}
@ -144,12 +143,12 @@ class SearchSubscriptionsList extends SubscriptionList
class SearchSubscriptionsListItem extends SubscriptionListItem
{
function startItem()
public function startItem()
{
$this->out->elementStart('li', array('class' => 'searchsub'));
}
function showProfile()
public function showProfile()
{
$searchsub = $this->profile;
$search = $searchsub->search;
@ -163,10 +162,12 @@ class SearchSubscriptionsListItem extends SubscriptionListItem
$url = common_local_url('noticesearch', array('q' => $search));
// TRANS: Search subscription list item. %1$s is a URL to a notice search,
// TRANS: %2$s are the search criteria, %3$s is a datestring.
$linkline = sprintf(_m('"<a href="%1$s">%2$s</a>" since %3$s'),
htmlspecialchars($url),
htmlspecialchars($search),
common_date_string($searchsub->created));
$linkline = sprintf(
_m('"<a href="%1$s">%2$s</a>" since %3$s'),
htmlspecialchars($url),
htmlspecialchars($search),
common_date_string($searchsub->created)
);
$this->out->elementStart('div', 'searchsub-item');
$this->out->raw($linkline);
@ -174,11 +175,11 @@ class SearchSubscriptionsListItem extends SubscriptionListItem
$this->out->elementEnd('div');
}
function showActions()
public function showActions()
{
}
function showOwnerControls()
public function showOwnerControls()
{
$this->out->elementStart('div', 'entity_actions');

View File

@ -1,37 +1,20 @@
<?php
/**
* StatusNet - the distributed open-source microblogging tool
* Copyright (C) 2008-2011, StatusNet, Inc.
*
* Search subscription action.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* PHP version 5
*
* @category Action
* @package StatusNet
* @author Brion Vibber <brion@status.net>
* @author Evan Prodromou <evan@status.net>
* @copyright 2008-2010 StatusNet, Inc.
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3
* @link http://status.net/
*/
// This file is part of GNU social - https://www.gnu.org/software/social
//
// GNU social is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// GNU social is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with GNU social. If not, see <http://www.gnu.org/licenses/>.
if (!defined('STATUSNET')) {
exit(1);
}
defined('GNUSOCIAL') || die();
/**
* Search unsubscription action
@ -43,13 +26,12 @@ if (!defined('STATUSNET')) {
*
* Only works if the current user is logged in.
*
* @category Action
* @package StatusNet
* @category Plugin
* @package SearchSubPlugin
* @author Evan Prodromou <evan@status.net>
* @author Brion Vibber <brion@status.net>
* @copyright 2008-2011 StatusNet, Inc.
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3
* @link http://status.net/
* @copyright 2011-2019 Free Software Foundation, Inc http://www.fsf.org
* @license https://www.gnu.org/licenses/agpl.html GNU AGPL v3 or later
*/
class SearchunsubAction extends SearchsubAction
{
@ -58,16 +40,17 @@ class SearchunsubAction extends SearchsubAction
*
* Does the subscription and returns results.
*
* @param Array $args unused.
*
* @return void
* @throws ClientException
*/
function handle()
public function handle()
{
// Throws exception on error
SearchSub::cancel($this->user->getProfile(),
$this->search);
SearchSub::cancel(
$this->user->getProfile(),
$this->search
);
if ($this->boolean('ajax')) {
$this->startHTML('text/xml;charset=utf-8');
@ -81,8 +64,10 @@ class SearchunsubAction extends SearchsubAction
$this->elementEnd('body');
$this->endHTML();
} else {
$url = common_local_url('search',
array('search' => $this->search));
$url = common_local_url(
'search',
array('search' => $this->search)
);
common_redirect($url, 303);
}
}

View File

@ -1,48 +1,40 @@
<?php
// This file is part of GNU social - https://www.gnu.org/software/social
//
// GNU social is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// GNU social is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with GNU social. If not, see <http://www.gnu.org/licenses/>.
/**
* Data class to store local search subscriptions
*
* PHP version 5
*
* @category SearchSubPlugin
* @package StatusNet
* @author Brion Vibber <brion@status.net>
* @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
* @link http://status.net/
*
* StatusNet - the distributed open-source microblogging tool
* Copyright (C) 2011, StatusNet, Inc.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* @category Plugin
* @package SearchSubPlugin
* @author Brion Vibber <brion@status.net>
* @copyright 2011-2019 Free Software Foundation, Inc http://www.fsf.org
* @license https://www.gnu.org/licenses/agpl.html GNU AGPL v3 or later
*/
if (!defined('STATUSNET')) {
exit(1);
}
defined('GNUSOCIAL') || die();
/**
* For storing the search subscriptions
*
* @category PollPlugin
* @package StatusNet
* @author Brion Vibber <brion@status.net>
* @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
* @link http://status.net/
* @author Brion Vibber <brion@status.net>
* @copyright 2011-2019 Free Software Foundation, Inc http://www.fsf.org
* @license https://www.gnu.org/licenses/agpl.html GNU AGPL v3 or later
*
* @see DB_DataObject
*/
class SearchSub extends Managed_DataObject
{
public $__table = 'searchsub'; // table name
@ -80,7 +72,7 @@ class SearchSub extends Managed_DataObject
* @param string $search subscribee
* @return SearchSub
*/
static function start(Profile $profile, $search)
public static function start(Profile $profile, $search)
{
$ts = new SearchSub();
$ts->search = $search;
@ -97,27 +89,27 @@ class SearchSub extends Managed_DataObject
* @param profile $profile subscriber
* @param string $search subscribee
*/
static function cancel(Profile $profile, $search)
public static function cancel(Profile $profile, $search)
{
$ts = SearchSub::pkeyGet(array('search' => $search,
'profile_id' => $profile->id));
'profile_id' => $profile->id));
if ($ts) {
$ts->delete();
self::blow('searchsub:by_profile:%d', $profile->id);
}
}
static function forProfile(Profile $profile)
public static function forProfile(Profile $profile)
{
$searches = array();
$keypart = sprintf('searchsub:by_profile:%d', $profile->id);
$searchstring = self::cacheGet($keypart);
if ($searchstring !== false) {
if (!empty($searchstring)) {
$searches = explode(',', $searchstring);
}
if (!empty($searchstring)) {
$searches = explode(',', $searchstring);
}
} else {
$searchsub = new SearchSub();
$searchsub->profile_id = $profile->id;

View File

@ -1,48 +1,31 @@
<?php
/**
* StatusNet, the distributed open-source microblogging tool
*
* Form for subscribing to a search
*
* PHP version 5
*
* LICENCE: This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* @category SearchSubPlugin
* @package StatusNet
* @author Brion Vibber <brion@status.net>
* @author Evan Prodromou <evan@status.net>
* @author Sarven Capadisli <csarven@status.net>
* @copyright 2009-2011 StatusNet, Inc.
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://status.net/
*/
// This file is part of GNU social - https://www.gnu.org/software/social
//
// GNU social is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// GNU social is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with GNU social. If not, see <http://www.gnu.org/licenses/>.
if (!defined('STATUSNET') && !defined('LACONICA')) {
exit(1);
}
defined('GNUSOCIAL') || die();
/**
* Form for subscribing to a user
*
* @category SearchSubPlugin
* @package StatusNet
* @author Brion Vibber <brion@status.net>
* @author Evan Prodromou <evan@status.net>
* @author Sarven Capadisli <csarven@status.net>
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://status.net/
* @category Plugin
* @package SearchSubPlugin
* @author Brion Vibber <brion@status.net>
* @author Evan Prodromou <evan@status.net>
* @author Sarven Capadisli <csarven@status.net>
* @copyright 2011-2019 Free Software Foundation, Inc http://www.fsf.org
* @license https://www.gnu.org/licenses/agpl.html GNU AGPL v3 or later
*
* @see UnsubscribeForm
*/
@ -51,15 +34,15 @@ class SearchSubForm extends Form
/**
* Name of search to subscribe to
*/
var $search = '';
public $search = '';
/**
* Constructor
*
* @param HTMLOutputter $out output channel
* @param string $search name of search to subscribe to
* @param Action $out output channel (usually HTMLOutputter)
* @param string $search name of search to subscribe to
*/
function __construct($out=null, $search=null)
public function __construct($out = null, $search = null)
{
parent::__construct($out);
@ -71,7 +54,7 @@ class SearchSubForm extends Form
*
* @return int ID of the form
*/
function id()
public function id()
{
return 'search-subscribe-' . $this->search;
}
@ -82,7 +65,7 @@ class SearchSubForm extends Form
*
* @return string of the form class
*/
function formClass()
public function formClass()
{
// class to match existing styles...
return 'form_user_subscribe ajax';
@ -94,7 +77,7 @@ class SearchSubForm extends Form
*
* @return string URL of the action
*/
function action()
public function action()
{
return common_local_url('searchsub', array('search' => $this->search));
}
@ -103,8 +86,9 @@ class SearchSubForm extends Form
* Legend of the Form
*
* @return void
* @throws Exception
*/
function formLegend()
public function formLegend()
{
// TRANS: Form legend.
$this->out->element('legend', null, _m('Subscribe to this search'));
@ -115,26 +99,31 @@ class SearchSubForm extends Form
*
* @return void
*/
function formData()
public function formData()
{
$this->out->hidden('subscribeto-' . $this->search,
$this->search,
'subscribeto');
$this->out->hidden(
'subscribeto-' . $this->search,
$this->search,
'subscribeto'
);
}
/**
* Action elements
*
* @return void
* @throws Exception
*/
function formActions()
public function formActions()
{
$this->out->submit('submit',
// TRANS: Button text for subscribing to a search.
_m('BUTTON','Subscribe'),
'submit',
null,
// TRANS: Button title for subscribing to a search.
_m('Subscribe to this search.'));
$this->out->submit(
'submit',
// TRANS: Button text for subscribing to a search.
_m('BUTTON', 'Subscribe'),
'submit',
null,
// TRANS: Button title for subscribing to a search.
_m('Subscribe to this search.')
);
}
}

View File

@ -1,48 +1,31 @@
<?php
/**
* StatusNet, the distributed open-source microblogging tool
*
* Form for subscribing to a search
*
* PHP version 5
*
* LICENCE: This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* @category SearchSubPlugin
* @package StatusNet
* @author Brion Vibber <brion@status.net>
* @author Evan Prodromou <evan@status.net>
* @author Sarven Capadisli <csarven@status.net>
* @copyright 2009-2011 StatusNet, Inc.
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://status.net/
*/
// This file is part of GNU social - https://www.gnu.org/software/social
//
// GNU social is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// GNU social is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with GNU social. If not, see <http://www.gnu.org/licenses/>.
if (!defined('STATUSNET') && !defined('LACONICA')) {
exit(1);
}
defined('GNUSOCIAL') || die();
/**
* Form for subscribing to a user
*
* @category SearchSubPlugin
* @package StatusNet
* @author Brion Vibber <brion@status.net>
* @author Evan Prodromou <evan@status.net>
* @author Sarven Capadisli <csarven@status.net>
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://status.net/
* @category Plugin
* @package SearchSubPlugin
* @author Brion Vibber <brion@status.net>
* @author Evan Prodromou <evan@status.net>
* @author Sarven Capadisli <csarven@status.net>
* @copyright 2011-2019 Free Software Foundation, Inc http://www.fsf.org
* @license https://www.gnu.org/licenses/agpl.html GNU AGPL v3 or later
*
* @see UnsubscribeForm
*/
@ -53,7 +36,7 @@ class SearchUnsubForm extends SearchSubForm
*
* @return int ID of the form
*/
function id()
public function id()
{
return 'search-unsubscribe-' . $this->search;
}
@ -63,7 +46,7 @@ class SearchUnsubForm extends SearchSubForm
*
* @return string of the form class
*/
function formClass()
public function formClass()
{
// class to match existing styles...
return 'form_user_unsubscribe ajax';
@ -74,7 +57,7 @@ class SearchUnsubForm extends SearchSubForm
*
* @return string URL of the action
*/
function action()
public function action()
{
return common_local_url('searchunsub', array('search' => $this->search));
}
@ -83,8 +66,9 @@ class SearchUnsubForm extends SearchSubForm
* Legend of the Form
*
* @return void
* @throws Exception
*/
function formLegend()
public function formLegend()
{
// TRANS: Form legend.
$this->out->element('legend', null, _m('Unsubscribe from this search'));
@ -94,15 +78,18 @@ class SearchUnsubForm extends SearchSubForm
* Action elements
*
* @return void
* @throws Exception
*/
function formActions()
public function formActions()
{
$this->out->submit('submit',
// TRANS: Button text for unsubscribing from a text search.
_m('BUTTON','Unsubscribe'),
'submit',
null,
// TRANS: Button title for unsubscribing from a text search.
_m('Unsubscribe from this search.'));
$this->out->submit(
'submit',
// TRANS: Button text for unsubscribing from a text search.
_m('BUTTON', 'Unsubscribe'),
'submit',
null,
// TRANS: Button title for unsubscribing from a text search.
_m('Unsubscribe from this search.')
);
}
}

View File

@ -1,92 +1,73 @@
<?php
/**
* StatusNet - the distributed open-source microblogging tool
* Copyright (C) 2011, StatusNet, Inc.
*
* Menu to show searches you're subscribed to
*
* PHP version 5
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* @category Menu
* @package StatusNet
* @author Evan Prodromou <evan@status.net>
* @copyright 2011 StatusNet, Inc.
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
* @link http://status.net/
*/
// This file is part of GNU social - https://www.gnu.org/software/social
//
// GNU social is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// GNU social is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with GNU social. If not, see <http://www.gnu.org/licenses/>.
if (!defined('STATUSNET')) {
// This check helps protect against security problems;
// your code file can't be executed directly from the web.
exit(1);
}
defined('GNUSOCIAL') || die();
/**
* Class comment
*
* @category General
* @package StatusNet
* @category Plugin
* @package SearchSubPlugin
* @author Evan Prodromou <evan@status.net>
* @copyright 2011 StatusNet, Inc.
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
* @link http://status.net/
* @copyright 2011-2019 Free Software Foundation, Inc http://www.fsf.org
* @license https://www.gnu.org/licenses/agpl.html GNU AGPL v3 or later
*/
class SearchSubMenu extends MoreMenu
{
protected $user;
protected $searches;
function __construct($out, $user, $searches)
public function __construct($out, $user, $searches)
{
parent::__construct($out);
$this->user = $user;
$this->searches = $searches;
}
function tag()
public function tag()
{
return 'searchsubs';
}
function seeAllItem()
public function seeAllItem()
{
return array('searchsubs',
array('nickname' => $this->user->nickname),
_('See all'),
_('See all searches you are following'));
array('nickname' => $this->user->nickname),
_('See all'),
_('See all searches you are following'));
}
function getItems()
public function getItems()
{
$items = array();
foreach ($this->searches as $search) {
if (!empty($search)) {
$items[] = array('noticesearch',
array('q' => $search),
sprintf('"%s"', $search),
sprintf(_('Notices including %s'), $search));;
array('q' => $search),
sprintf('"%s"', $search),
sprintf(_('Notices including %s'), $search));;
}
}
return $items;
}
}
function item($actionName, array $args, $label, $description, $id=null, $cls=null)
public function item($actionName, array $args, $label, $description, $id = null, $cls = null)
{
if (empty($id)) {
$id = $this->menuItemID($actionName, $args);
@ -99,12 +80,13 @@ class SearchSubMenu extends MoreMenu
$url = common_local_url($actionName, $args);
}
$this->out->menuItem($url,
$label,
$description,
$this->isCurrent($actionName, $args),
$id,
$cls);
$this->out->menuItem(
$url,
$label,
$description,
$this->isCurrent($actionName, $args),
$id,
$cls
);
}
}

View File

@ -1,20 +1,36 @@
<?php
// This file is part of GNU social - https://www.gnu.org/software/social
//
// GNU social is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// GNU social is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with GNU social. If not, see <http://www.gnu.org/licenses/>.
defined('GNUSOCIAL') || die();
class SearchSubTrackCommand extends Command
{
var $keyword = null;
public $keyword = null;
function __construct($user, $keyword)
public function __construct($user, $keyword)
{
parent::__construct($user);
$this->keyword = $keyword;
}
function handle($channel)
public function handle($channel)
{
$cur = $this->user;
$searchsub = SearchSub::pkeyGet(array('search' => $this->keyword,
'profile_id' => $cur->id));
'profile_id' => $cur->id));
if ($searchsub) {
// TRANS: Error text shown a user tries to track a search query they're already subscribed to.
@ -26,13 +42,17 @@ class SearchSubTrackCommand extends Command
SearchSub::start($cur->getProfile(), $this->keyword);
} catch (Exception $e) {
// TRANS: Message given having failed to set up a search subscription by track command.
$channel->error($cur, sprintf(_m('Could not start a search subscription for query "%s".'),
$this->keyword));
$channel->error($cur, sprintf(
_m('Could not start a search subscription for query "%s".'),
$this->keyword
));
return;
}
// TRANS: Message given having added a search subscription by track command.
$channel->output($cur, sprintf(_m('You are subscribed to the search "%s".'),
$this->keyword));
$channel->output($cur, sprintf(
_m('You are subscribed to the search "%s".'),
$this->keyword
));
}
}
}

View File

@ -1,8 +1,24 @@
<?php
// This file is part of GNU social - https://www.gnu.org/software/social
//
// GNU social is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// GNU social is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with GNU social. If not, see <http://www.gnu.org/licenses/>.
defined('GNUSOCIAL') || die();
class SearchSubTrackingCommand extends Command
{
function handle($channel)
public function handle($channel)
{
$cur = $this->user;
$all = new SearchSub();
@ -21,11 +37,13 @@ class SearchSubTrackingCommand extends Command
}
// TRANS: Separator for list of tracked searches.
$separator = _m('SEPARATOR','", "');
$separator = _m('SEPARATOR', '", "');
// TRANS: Message given having disabled all search subscriptions with 'track off'.
// TRANS: %s is a list of searches. Separator default is '", "'.
$channel->output($cur, sprintf(_m('You are tracking searches for: "%s".'),
implode($separator, $list)));
$channel->output($cur, sprintf(
_m('You are tracking searches for: "%s".'),
implode($separator, $list)
));
}
}

View File

@ -1,8 +1,24 @@
<?php
// This file is part of GNU social - https://www.gnu.org/software/social
//
// GNU social is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// GNU social is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with GNU social. If not, see <http://www.gnu.org/licenses/>.
defined('GNUSOCIAL') || die();
class SearchSubTrackoffCommand extends Command
{
function handle($channel)
public function handle($channel)
{
$cur = $this->user;
$all = new SearchSub();
@ -22,8 +38,10 @@ class SearchSubTrackoffCommand extends Command
} catch (Exception $e) {
// TRANS: Message given having failed to cancel one of the search subs with 'track off' command.
// TRANS: %s is the search for which the subscription removal failed.
$channel->error($cur, sprintf(_m('Error disabling search subscription for query "%s".'),
$all->search));
$channel->error($cur, sprintf(
_m('Error disabling search subscription for query "%s".'),
$all->search
));
return;
}
}

View File

@ -1,20 +1,36 @@
<?php
// This file is part of GNU social - https://www.gnu.org/software/social
//
// GNU social is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// GNU social is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with GNU social. If not, see <http://www.gnu.org/licenses/>.
defined('GNUSOCIAL') || die();
class SearchSubUntrackCommand extends Command
{
var $keyword = null;
public $keyword = null;
function __construct($user, $keyword)
public function __construct($user, $keyword)
{
parent::__construct($user);
$this->keyword = $keyword;
}
function handle($channel)
public function handle($channel)
{
$cur = $this->user;
$searchsub = SearchSub::pkeyGet(array('search' => $this->keyword,
'profile_id' => $cur->id));
'profile_id' => $cur->id));
if (!$searchsub) {
// TRANS: Error text shown a user tries to untrack a search query they're not subscribed to.
@ -28,14 +44,18 @@ class SearchSubUntrackCommand extends Command
} catch (Exception $e) {
// TRANS: Message given having failed to cancel a search subscription by untrack command.
// TRANS: %s is the keyword for the query.
$channel->error($cur, sprintf(_m('Could not end a search subscription for query "%s".'),
$this->keyword));
$channel->error($cur, sprintf(
_m('Could not end a search subscription for query "%s".'),
$this->keyword
));
return;
}
// TRANS: Message given having removed a search subscription by untrack command.
// TRANS: %s is the keyword for the search.
$channel->output($cur, sprintf(_m('You are no longer subscribed to the search "%s".'),
$this->keyword));
$channel->output($cur, sprintf(
_m('You are no longer subscribed to the search "%s".'),
$this->keyword
));
}
}