case 'SearchsubsAction':
case 'SearchSubForm':
case 'SearchUnsubForm':
+ case 'SearchSubTrackCommand':
+ case 'SearchSubTrackOffCommand':
+ case 'SearchSubTrackingCommand':
+ case 'SearchSubUntrackCommand':
include_once $dir.'/'.strtolower($cls).'.php';
return false;
default:
}
return true;
}
+
+ /**
+ * Replace the built-in stub track commands with ones that control
+ * search subscriptions.
+ *
+ * @param CommandInterpreter $cmd
+ * @param string $arg
+ * @param User $user
+ * @param Command $result
+ * @return boolean hook result
+ */
+ function onEndInterpretCommand($cmd, $arg, $user, &$result)
+ {
+ if ($result instanceof TrackCommand) {
+ $result = new SearchSubTrackCommand($user, $arg);
+ return false;
+ } else if ($result instanceof TrackOffCommand) {
+ $result = new SearchSubTrackOffCommand($user);
+ return false;
+ } else if ($result instanceof TrackingCommand) {
+ $result = new SearchSubTrackingCommand($user);
+ return false;
+ } else if ($result instanceof UntrackCommand) {
+ $result = new SearchSubUntrackCommand($user, $arg);
+ return false;
+ } else {
+ return true;
+ }
+ }
+
+ function onHelpCommandMessages($cmd, &$commands)
+ {
+ // TRANS: Help message for IM/SMS command "track <word>"
+ $commands["track <word>"] = _m('COMMANDHELP', "Start following notices matching the given search query.");
+ // TRANS: Help message for IM/SMS command "untrack <word>"
+ $commands["untrack <word>"] = _m('COMMANDHELP', "Stop following notices matching the given search query.");
+ // TRANS: Help message for IM/SMS command "track off"
+ $commands["track off"] = _m('COMMANDHELP', "Disable all tracked search subscriptions.");
+ // TRANS: Help message for IM/SMS command "untrack all"
+ $commands["untrack all"] = _m('COMMANDHELP', "Disable all tracked search subscriptions.");
+ // TRANS: Help message for IM/SMS command "tracks"
+ $commands["tracks"] = _m('COMMANDHELP', "List all your search subscriptions.");
+ // TRANS: Help message for IM/SMS command "tracking"
+ $commands["tracking"] = _m('COMMANDHELP', "List all your search subscriptions.");
+ }
}
--- /dev/null
+<?php
+
+class SearchSubTrackCommand extends Command
+{
+ var $keyword = null;
+
+ function __construct($user, $keyword)
+ {
+ parent::__construct($user);
+ $this->keyword = $keyword;
+ }
+
+ function handle($channel)
+ {
+ $cur = $this->user;
+ $searchsub = SearchSub::pkeyGet(array('search' => $this->keyword,
+ 'profile_id' => $cur->id));
+
+ if ($searchsub) {
+ // TRANS: Error text shown a user tries to track a search query they're already subscribed to.
+ $channel->error($cur, sprintf(_m('You are already tracking the search "%s".'), $this->keyword));
+ return;
+ }
+
+ try {
+ 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));
+ 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));
+ }
+}
\ No newline at end of file
--- /dev/null
+<?php
+
+class SearchSubTrackingCommand extends Command
+{
+ function handle($channel)
+ {
+ $cur = $this->user;
+ $all = new SearchSub();
+ $all->profile_id = $cur->id;
+ $all->find();
+
+ if ($all->N == 0) {
+ // TRANS: Error text shown a user tries to disable all a search subscriptions with track off command, but has none.
+ $channel->error($cur, _m('You are not tracking any searches.'));
+ return;
+ }
+
+ $list = array();
+ while ($all->fetch()) {
+ $list[] = $all->search;
+ }
+
+ // TRANS: Message given having disabled all search subscriptions with 'track off'.
+ $channel->output($cur, sprintf(_m('You are tracking searches for: %s'),
+ '"' . implode('", "', $list) . '"'));
+ }
+}
\ No newline at end of file
--- /dev/null
+<?php
+
+class SearchSubTrackoffCommand extends Command
+{
+ function handle($channel)
+ {
+ $cur = $this->user;
+ $all = new SearchSub();
+ $all->profile_id = $cur->id;
+ $all->find();
+
+ if ($all->N == 0) {
+ // TRANS: Error text shown a user tries to disable all a search subscriptions with track off command, but has none.
+ $channel->error($cur, _m('You are not tracking any searches.'));
+ return;
+ }
+
+ $profile = $cur->getProfile();
+ while ($all->fetch()) {
+ try {
+ SearchSub::cancel($profile, $all->search);
+ } catch (Exception $e) {
+ // TRANS: Message given having failed to cancel one of the search subs with 'track off' command.
+ $channel->error($cur, sprintf(_m('Error disabling search subscription for query "%s".'),
+ $all->search));
+ return;
+ }
+ }
+
+ // TRANS: Message given having disabled all search subscriptions with 'track off'.
+ $channel->output($cur, _m('Disabled all your search subscriptions.'));
+ }
+}
\ No newline at end of file
--- /dev/null
+<?php
+
+class SearchSubUntrackCommand extends Command
+{
+ var $keyword = null;
+
+ function __construct($user, $keyword)
+ {
+ parent::__construct($user);
+ $this->keyword = $keyword;
+ }
+
+ function handle($channel)
+ {
+ $cur = $this->user;
+ $searchsub = SearchSub::pkeyGet(array('search' => $this->keyword,
+ 'profile_id' => $cur->id));
+
+ if (!$searchsub) {
+ // TRANS: Error text shown a user tries to untrack a search query they're not subscribed to.
+ $channel->error($cur, sprintf(_m('You are not tracking the search "%s".'), $this->keyword));
+ return;
+ }
+
+ try {
+ SearchSub::cancel($cur->getProfile(), $this->keyword);
+ } catch (Exception $e) {
+ // TRANS: Message given having failed to cancel a search subscription by untrack command.
+ $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.
+ $channel->output($cur, sprintf(_m('You are no longer subscribed to the search "%s".'),
+ $this->keyword));
+ }
+}
\ No newline at end of file