define('GNUSOCIAL_ENGINE', 'GNU social');
define('GNUSOCIAL_ENGINE_URL', 'https://www.gnu.org/software/social/');
-define('GNUSOCIAL_BASE_VERSION', '1.20.2');
+define('GNUSOCIAL_BASE_VERSION', '1.20.3');
define('GNUSOCIAL_LIFECYCLE', 'release'); // 'dev', 'alpha[0-9]+', 'beta[0-9]+', 'rc[0-9]+', 'release'
define('GNUSOCIAL_VERSION', GNUSOCIAL_BASE_VERSION . '-' . GNUSOCIAL_LIFECYCLE);
/** Action object using us. */
var $action = null;
- // FIXME: Directory plugin sends a User_group here, but should send a Profile and handle User_group specifics itself
- function __construct($target, HTMLOutputter $action)
+ // FIXME: Directory plugin sends a User_group here, but should send a Profile and handle User_group specifics itself?
+ function __construct($target, HTMLOutputter $action, Profile $owner = null)
{
parent::__construct($action);
$this->target = $target;
- $this->profile = $this->target;
- $this->action = $action;
+ if ($owner !== null) {
+ $this->profile = $owner;
+ } else {
+ $this->profile = $this->target;
+ }
+ $this->action = $action;
}
function getTarget()
{
$user = common_current_user();
if (!empty($user)) {
- if ($user->id == $this->profile->id) {
+ if ($user->id == $this->profile->getID()) {
$tags = new SelftagsWidget($this->out, $user, $this->profile);
$tags->show();
} else if ($user->getProfile()->canTag($this->profile)) {
/** Owner of this list */
var $owner = null;
- public function __construct(Profile $profile, $owner=null, $action=null)
+ public function __construct($profile, $owner=null, $action=null)
{
parent::__construct($profile, $action);
/** Owner of this list */
var $owner = null;
- function __construct(Profile $profile, $owner, $action)
+ // FIXME: TagSubs plugin sends a TagSub here, but should send a Profile and handle TagSub specifics itself?
+ function __construct($target, $owner, HTMLOutputter $action)
{
- parent::__construct($profile, $action);
+ if ($owner instanceof Profile) {
+ parent::__construct($target, $action, $owner);
+ } else {
+ parent::__construct($target, $action);
+ }
$this->owner = $owner;
}
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-06-11 18:37+0100\n"
+"POT-Creation-Date: 2019-06-17 15:27+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
*/
class TagSubPlugin extends Plugin
{
- const PLUGIN_VERSION = '0.1.0';
+ const PLUGIN_VERSION = '0.1.1';
/**
* Database schema setup
*
+ * @return bool hook value; true means continue processing, false means stop.
* @see Schema
*
- * @return boolean hook value; true means continue processing, false means stop.
*/
- function onCheckSchema()
+ public function onCheckSchema()
{
$schema = Schema::get();
$schema->ensureTable('tagsub', TagSub::schemaDef());
*/
public function onRouterInitialized(URLMapper $m)
{
- $m->connect('tag/:tag/subscribe',
- array('action' => 'tagsub'),
- array('tag' => Router::REGEX_TAG));
- $m->connect('tag/:tag/unsubscribe',
- array('action' => 'tagunsub'),
- array('tag' => Router::REGEX_TAG));
-
- $m->connect(':nickname/tag-subscriptions',
- array('action' => 'tagsubs'),
- array('nickname' => Nickname::DISPLAY_FMT));
+ $m->connect(
+ 'tag/:tag/subscribe',
+ array('action' => 'tagsub'),
+ array('tag' => Router::REGEX_TAG)
+ );
+ $m->connect(
+ 'tag/:tag/unsubscribe',
+ array('action' => 'tagunsub'),
+ array('tag' => Router::REGEX_TAG)
+ );
+
+ $m->connect(
+ ':nickname/tag-subscriptions',
+ array('action' => 'tagsubs'),
+ array('nickname' => Nickname::DISPLAY_FMT)
+ );
return true;
}
*
* @param array &$versions array of version data
*
- * @return value
+ * @return bool true hook value
*/
- function onPluginVersion(array &$versions)
+ public function onPluginVersion(array &$versions)
{
- $versions[] = array('name' => 'TagSub',
- 'version' => self::PLUGIN_VERSION,
- 'author' => 'Brion Vibber',
- 'homepage' => 'https://git.gnu.io/gnu/gnu-social/tree/master/plugins/TagSub',
- 'rawdescription' =>
- // TRANS: Plugin description.
- _m('Plugin to allow following all messages with a given tag.'));
+ $versions[] = ['name' => 'TagSub',
+ 'version' => self::PLUGIN_VERSION,
+ 'author' => 'Brion Vibber',
+ 'homepage' => 'https://git.gnu.io/gnu/gnu-social/tree/master/plugins/TagSub',
+ 'rawdescription' =>
+ // TRANS: Plugin description.
+ _m('Plugin to allow following all messages with a given tag.')];
return true;
}
* @param array $ni in/out map of profile IDs to inbox constants
* @return boolean hook result
*/
- function onStartNoticeWhoGets(Notice $notice, array &$ni)
+ public function onStartNoticeWhoGets(Notice $notice, array &$ni)
{
foreach ($notice->getTags() as $tag) {
$tagsub = new TagSub();
* @param TagAction $action
* @return boolean hook result
*/
- function onStartTagShowContent(TagAction $action)
+ public function onStartTagShowContent(TagAction $action)
{
$user = common_current_user();
if ($user) {
$tag = $action->trimmed('tag');
$tagsub = TagSub::pkeyGet(array('tag' => $tag,
- 'profile_id' => $user->id));
+ 'profile_id' => $user->id));
if ($tagsub) {
$form = new TagUnsubForm($action, $tag);
} else {
* @param Widget $widget Widget being executed
*
* @return boolean hook return
+ * @throws Exception
*/
- function onEndSubGroupNav($widget)
+ public function onEndSubGroupNav($widget)
{
$action = $widget->out;
$action_name = $action->trimmed('action');
- $action->menuItem(common_local_url('tagsubs', array('nickname' => $action->user->nickname)),
- // TRANS: SubMirror plugin menu item on user settings page.
- _m('MENU', 'Tags'),
- // TRANS: SubMirror plugin tooltip for user settings menu item.
- _m('Configure tag subscriptions'),
- $action_name == 'tagsubs' && $action->arg('nickname') == $action->user->nickname);
+ $action->menuItem(
+ common_local_url('tagsubs', array('nickname' => $action->user->nickname)),
+ // TRANS: SubMirror plugin menu item on user settings page.
+ _m('MENU', 'Tags'),
+ // TRANS: SubMirror plugin tooltip for user settings menu item.
+ _m('Configure tag subscriptions'),
+ $action_name == 'tagsubs' && $action->arg('nickname') == $action->user->nickname
+ );
return true;
}
- function onEndDefaultLocalNav($menu, $user)
+ public function onEndDefaultLocalNav($menu, $user)
{
- $user = common_current_user();
+ $user = $user ? $user : common_current_user();
if (!empty($user)) {
-
$tags = TagSub::forProfile($user->getProfile());
if (!empty($tags) && count($tags) > 0) {
*/
class TagsubAction extends Action
{
- var $user;
- var $tag;
+ public $user;
+ public $tag;
/**
* Check pre-requisites and instantiate attributes
* @param Array $args array of arguments (URL, GET, POST)
*
* @return boolean success flag
+ * @throws ClientException
*/
- function prepare(array $args = array())
+ public function prepare(array $args = array())
{
parent::prepare($args);
if ($this->boolean('ajax')) {
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
*
* Does the subscription and returns results.
*
- * @param Array $args unused.
- *
* @return void
+ * @throws ClientException
*/
- function handle()
+ public function handle()
{
// Throws exception on error
- TagSub::start($this->user->getProfile(),
- $this->tag);
+ TagSub::start(
+ $this->user->getProfile(),
+ $this->tag
+ );
if ($this->boolean('ajax')) {
$this->startHTML('text/xml;charset=utf-8');
$this->elementEnd('body');
$this->endHTML();
} else {
- $url = common_local_url('tag',
- array('tag' => $this->tag));
+ $url = common_local_url(
+ 'tag',
+ array('tag' => $this->tag)
+ );
common_redirect($url, 303);
}
}
* @link http://status.net/
*/
-if (!defined('GNUSOCIAL')) { exit(1); }
+if (!defined('GNUSOCIAL')) {
+ exit(1);
+}
/**
* A list of the user's subscriptions
*/
class TagSubsAction extends GalleryAction
{
- function title()
+ public function title()
{
if ($this->page == 1) {
// TRANS: Header for subscriptions overview for a user (first page).
} 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 tag subscriptions, page %2$d'),
- $this->getTarget()->getNickname(),
- $this->page);
+ return sprintf(
+ _m('%1$s\'s tag 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 tag subscriptions
- // TRANS: of the logged in user's own profile.
- _m('You have subscribed to receive all notices on this site containing the following tags:'));
+ $this->element(
+ 'p',
+ null,
+ // TRANS: Page notice for page with an overview of all tag subscriptions
+ // TRANS: of the logged in user's own profile.
+ _m('You have subscribed to receive all notices on this site containing the following tags:')
+ );
} 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 containing the following tags:'),
- $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 containing the following tags:'),
+ $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;
$this->showEmptyListMessage();
}
- $this->pagination($this->page > 1, $cnt > PROFILES_PER_PAGE,
- $this->page, 'tagsubs',
- array('nickname' => $this->getTarget()->getNickname()));
+ $this->pagination(
+ $this->page > 1,
+ $cnt > PROFILES_PER_PAGE,
+ $this->page,
+ 'tagsubs',
+ 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: Tag subscription list text when the logged in user has no tag subscriptions.
$message = _m('You are not listening to any hash tags right now. You can push the "Subscribe" button ' .
- 'on any hashtag page to automatically receive any public messages on this site that use that ' .
- 'tag, even if you are not subscribed to the poster.');
+ 'on any hashtag page to automatically receive any public messages on this site that use that ' .
+ 'tag, even if you are not subscribed to the poster.');
} else {
// TRANS: Tag subscription list text when looking at the subscriptions for a of a user other
// TRANS: than the logged in user that has no tag subscriptions. %s is the user nickname.
$message = sprintf(_m('%s is not following any tags.'), $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 following any tags.'), $this->getTarget()->getNickname());
class TagSubscriptionsList extends SubscriptionList
{
- function newListItem(Profile $tagsub)
+ public function newListItem($tagsub)
{
return new TagSubscriptionsListItem($tagsub, $this->owner, $this->action);
}
class TagSubscriptionsListItem extends SubscriptionListItem
{
- function startItem()
+ public function startItem()
{
$this->out->elementStart('li', array('class' => 'tagsub'));
}
- function showProfile()
+ public function showProfile()
{
- $tagsub = $this->profile;
+ $tagsub = $this->getTarget();
$tag = $tagsub->tag;
// Relevant portion!
$url = common_local_url('tag', array('tag' => $tag));
// TRANS: %1$s is a URL to a tag, %2$s is a tag,
// TRANS: %3$s a date string.
- $linkline = sprintf(_m('#<a href="%1$s">%2$s</a> since %3$s'),
- htmlspecialchars($url),
- htmlspecialchars($tag),
- common_date_string($tagsub->created));
+ $linkline = sprintf(
+ _m('#<a href="%1$s">%2$s</a> since %3$s'),
+ htmlspecialchars($url),
+ htmlspecialchars($tag),
+ common_date_string($tagsub->created)
+ );
$this->out->elementStart('div', 'tagsub-item');
$this->out->raw($linkline);
$this->out->elementEnd('div');
}
- function showActions()
+ public function showActions()
{
}
- function showOwnerControls()
+ public function showOwnerControls()
{
$this->out->elementStart('div', 'entity_actions');
- $tagsub = $this->profile; // ?
+ $tagsub = $this->target;
$form = new TagUnsubForm($this->out, $tagsub->tag);
$form->show();
*
* Does the subscription and returns results.
*
- * @param Array $args unused.
- *
* @return void
+ * @throws ClientException
*/
- function handle()
+ public function handle()
{
// Throws exception on error
- TagSub::cancel($this->user->getProfile(),
- $this->tag);
+ TagSub::cancel(
+ $this->user->getProfile(),
+ $this->tag
+ );
if ($this->boolean('ajax')) {
$this->startHTML('text/xml;charset=utf-8');
$this->elementEnd('body');
$this->endHTML();
} else {
- $url = common_local_url('tag',
- array('tag' => $this->tag));
+ $url = common_local_url(
+ 'tag',
+ array('tag' => $this->tag)
+ );
common_redirect($url, 303);
}
}
* @param string $tag subscribee
* @return TagSub
*/
- static function start(Profile $profile, $tag)
+ public static function start(Profile $profile, $tag)
{
$ts = new TagSub();
$ts->tag = $tag;
* @param profile $profile subscriber
* @param string $tag subscribee
*/
- static function cancel(Profile $profile, $tag)
+ public static function cancel(Profile $profile, $tag)
{
$ts = TagSub::pkeyGet(array('tag' => $tag,
- 'profile_id' => $profile->id));
+ 'profile_id' => $profile->id));
if ($ts) {
$ts->delete();
self::blow('tagsub:by_profile:%d', $profile->id);
}
}
- static function forProfile(Profile $profile)
+ public static function forProfile(Profile $profile)
{
$tags = array();
$keypart = sprintf('tagsub:by_profile:%d', $profile->id);
$tagstring = self::cacheGet($keypart);
-
+
if ($tagstring !== false) { // cache hit
- if (!empty($tagstring)) {
- $tags = explode(',', $tagstring);
- }
+ if (!empty($tagstring)) {
+ $tags = explode(',', $tagstring);
+ }
} else {
- $tagsub = new TagSub();
+ $tagsub = new TagSub();
$tagsub->profile_id = $profile->id;
$tagsub->selectAdd();
$tagsub->selectAdd('tag');
if ($tagsub->find()) {
- $tags = $tagsub->fetchAll('tag');
+ $tags = $tagsub->fetchAll('tag');
}
self::cacheSet($keypart, implode(',', $tags));
/**
* Name of tag to subscribe to
*/
- var $tag = '';
+ public $tag = '';
/**
* Constructor
*
- * @param HTMLOutputter $out output channel
- * @param string $tag name of tag to subscribe to
+ * @param HTMLOutputter $out output channel
+ * @param string $tag name of tag to subscribe to
*/
- function __construct($out=null, $tag=null)
+ public function __construct($out = null, $tag = null)
{
parent::__construct($out);
*
* @return int ID of the form
*/
- function id()
+ public function id()
{
return 'tag-subscribe-' . $this->tag;
}
*
* @return string of the form class
*/
- function formClass()
+ public function formClass()
{
// class to match existing styles...
return 'form_user_subscribe ajax';
*
* @return string URL of the action
*/
- function action()
+ public function action()
{
return common_local_url('tagsub', array('tag' => $this->tag));
}
* 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 tag'));
*
* @return void
*/
- function formData()
+ public function formData()
{
- $this->out->hidden('subscribeto-' . $this->tag,
- $this->tag,
- 'subscribeto');
+ $this->out->hidden(
+ 'subscribeto-' . $this->tag,
+ $this->tag,
+ 'subscribeto'
+ );
}
/**
* Action elements
*
* @return void
+ * @throws Exception
*/
- function formActions()
+ public function formActions()
{
// TRANS: Submit button text to subscribe to a tag.
- $this->out->submit('submit', _m('BUTTON','Subscribe'),
- // TRANS: Submit button title to subscribe to a tag.
- 'submit', null, _m('Subscribe to this tag.'));
+ $this->out->submit(
+ 'submit',
+ _m('BUTTON', 'Subscribe'),
+ // TRANS: Submit button title to subscribe to a tag.
+ 'submit',
+ null,
+ _m('Subscribe to this tag.')
+ );
}
}
*
* @return int ID of the form
*/
- function id()
+ public function id()
{
return 'tag-unsubscribe-' . $this->tag;
}
*
* @return string of the form class
*/
- function formClass()
+ public function formClass()
{
// class to match existing styles...
return 'form_user_unsubscribe ajax';
*
* @return string URL of the action
*/
- function action()
+ public function action()
{
return common_local_url('tagunsub', array('tag' => $this->tag));
}
* 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 tag'));
* Action elements
*
* @return void
+ * @throws Exception
*/
- function formActions()
+ public function formActions()
{
// TRANS: Submit button text to unsubscribe from a tag.
- $this->out->submit('submit', _m('BUTTON','Unsubscribe'),
- // TRANS: Submit button title to unsubscribe from a tag.
- 'submit', null, _m('Unsubscribe from this tag.'));
+ $this->out->submit(
+ 'submit',
+ _m('BUTTON', 'Unsubscribe'),
+ // TRANS: Submit button title to unsubscribe from a tag.
+ 'submit',
+ null,
+ _m('Unsubscribe from this tag.')
+ );
}
}
protected $user;
protected $tags;
- function __construct($out, $user, $tags)
+ public function __construct($out, $user, $tags)
{
parent::__construct($out);
$this->user = $user;
$this->tags = $tags;
}
- function getItems()
+ public function getItems()
{
$items = array();
-
+
foreach ($this->tags as $tag) {
if (!empty($tag)) {
$items[] = array('tag',
- array('tag' => $tag),
- sprintf('#%s', $tag),
- // TRANS: Menu item title. %s is a tag.
- sprintf(_('Notices tagged with "%s".'), $tag));
+ array('tag' => $tag),
+ sprintf('#%s', $tag),
+ // TRANS: Menu item title. %s is a tag.
+ sprintf(_('Notices tagged with "%s".'), $tag));
}
}
return $items;
}
- function tag()
+ public function tag()
{
return 'tagsubs';
}
-
- function seeAllItem()
+
+ public function seeAllItem()
{
return array('tagsubs',
- array('nickname' => $this->user->nickname),
- _('See all'),
- _('See all tags you are following'));
+ array('nickname' => $this->user->nickname),
+ _('See all'),
+ _('See all tags you are following'));
}
}
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-06-08 18:20+0100\n"
+"POT-Creation-Date: 2019-06-13 00:46+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
#. TRANS: Header for subscriptions overview for a user (first page).
#. TRANS: %s is a user nickname.
-#: actions/tagsubs.php:49
+#: actions/tagsubs.php:51
#, php-format
msgid "%s's tag subscriptions"
msgstr ""
-#. TRANS: Header for subscriptions overview for a user (not first page).
-#. TRANS: %1$s is a user nickname, %2$d is the page number.
-#: actions/tagsubs.php:53
+#: actions/tagsubs.php:56
#, php-format
msgid "%1$s's tag subscriptions, page %2$d"
msgstr ""
#. TRANS: Page notice for page with an overview of all tag subscriptions
#. TRANS: of the logged in user's own profile.
-#: actions/tagsubs.php:65
+#: actions/tagsubs.php:71
msgid ""
"You have subscribed to receive all notices on this site containing the "
"following tags:"
msgstr ""
-#. 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.
-#: actions/tagsubs.php:70
+#: actions/tagsubs.php:80
#, php-format
msgid ""
"%s has subscribed to receive all notices on this site containing the "
msgstr ""
#. TRANS: Tag subscription list text when the logged in user has no tag subscriptions.
-#: actions/tagsubs.php:114
+#: actions/tagsubs.php:130
msgid ""
"You are not listening to any hash tags right now. You can push the "
"\"Subscribe\" button on any hashtag page to automatically receive any public "
#. TRANS: than the logged in user that has no tag subscriptions. %s is the user nickname.
#. 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.
-#: actions/tagsubs.php:120 actions/tagsubs.php:126
+#: actions/tagsubs.php:136 actions/tagsubs.php:141
#, php-format
msgid "%s is not following any tags."
msgstr ""
-#. TRANS: %1$s is a URL to a tag, %2$s is a tag,
-#. TRANS: %3$s a date string.
-#: actions/tagsubs.php:166
+#: actions/tagsubs.php:182
#, php-format
msgid "#<a href=\"%1$s\">%2$s</a> since %3$s"
msgstr ""
#. TRANS: Client error displayed trying to perform any request method other than POST.
#. TRANS: Do not translate POST.
-#: actions/tagsub.php:78
+#: actions/tagsub.php:79
msgid "This action only accepts POST requests."
msgstr ""
#. TRANS: Client error displayed when the session token is not okay.
-#: actions/tagsub.php:87
+#: actions/tagsub.php:88
msgid "There was a problem with your session token. Try again, please."
msgstr ""
#. TRANS: Error message displayed when trying to perform an action that requires a logged in user.
-#: actions/tagsub.php:97
+#: actions/tagsub.php:98
msgid "Not logged in."
msgstr ""
#. TRANS: Client error displayed trying to subscribe to a non-existing profile.
-#: actions/tagsub.php:106
+#: actions/tagsub.php:107
msgid "No such profile."
msgstr ""
#. TRANS: Page title when tag subscription succeeded.
-#: actions/tagsub.php:132
+#: actions/tagsub.php:134
msgid "Subscribed"
msgstr ""
#. TRANS: Page title when tag unsubscription succeeded.
-#: actions/tagunsub.php:76
+#: actions/tagunsub.php:77
msgid "Unsubscribed"
msgstr ""
#. TRANS: Plugin description.
-#: TagSubPlugin.php:100
+#: TagSubPlugin.php:106
msgid "Plugin to allow following all messages with a given tag."
msgstr ""
#. TRANS: SubMirror plugin menu item on user settings page.
-#: TagSubPlugin.php:173
+#: TagSubPlugin.php:181
msgctxt "MENU"
msgid "Tags"
msgstr ""
#. TRANS: SubMirror plugin tooltip for user settings menu item.
-#: TagSubPlugin.php:175
+#: TagSubPlugin.php:183
msgid "Configure tag subscriptions"
msgstr ""
#. TRANS: Menu item text for tags submenu.
-#: TagSubPlugin.php:192
+#: TagSubPlugin.php:200
msgid "Tags"
msgstr ""
#. TRANS: Form legend.
-#: forms/tagsub.php:108
+#: forms/tagsub.php:109
msgid "Subscribe to this tag"
msgstr ""
-#. TRANS: Submit button text to subscribe to a tag.
-#: forms/tagsub.php:131
+#: forms/tagsub.php:137
msgctxt "BUTTON"
msgid "Subscribe"
msgstr ""
-#. TRANS: Submit button title to subscribe to a tag.
-#: forms/tagsub.php:133
+#: forms/tagsub.php:141
msgid "Subscribe to this tag."
msgstr ""
#. TRANS: Form legend.
-#: forms/tagunsub.php:90
+#: forms/tagunsub.php:91
msgid "Unsubscribe from this tag"
msgstr ""
-#. TRANS: Submit button text to unsubscribe from a tag.
-#: forms/tagunsub.php:101
+#: forms/tagunsub.php:105
msgctxt "BUTTON"
msgid "Unsubscribe"
msgstr ""
-#. TRANS: Submit button title to unsubscribe from a tag.
-#: forms/tagunsub.php:103
+#: forms/tagunsub.php:109
msgid "Unsubscribe from this tag."
msgstr ""