diff --git a/plugins/SearchSub/SearchSub.php b/plugins/SearchSub/SearchSub.php index cbf64d39cc..b903e88e2e 100644 --- a/plugins/SearchSub/SearchSub.php +++ b/plugins/SearchSub/SearchSub.php @@ -120,6 +120,7 @@ class SearchSub extends Managed_DataObject $ts->profile_id = $profile->id; $ts->created = common_sql_now(); $ts->insert(); + self::blow('searchsub:by_profile:%d', $profile->id); return $ts; } @@ -135,6 +136,34 @@ class SearchSub extends Managed_DataObject 'profile_id' => $profile->id)); if ($ts) { $ts->delete(); + self::blow('searchsub:by_profile:%d', $profile->id); } } + + static function forProfile(Profile $profile) + { + $searches = array(); + + $keypart = sprintf('searchsub:by_profile:%d', $profile->id); + $searchstring = self::cacheGet($keypart); + + if ($searchstring !== false && !empty($searchstring)) { + $searches = explode(',', $searchstring); + } else { + $searchsub = new SearchSub(); + $searchsub->profile_id = $profile->id; + + if ($searchsub->find()) { + while ($searchsub->fetch()) { + if (!empty($searchsub->search)) { + $searches[] = $searchsub->search; + } + } + } + + self::cacheSet($keypart, implode(',', $searches)); + } + + return $searches; + } } diff --git a/plugins/SearchSub/SearchSubPlugin.php b/plugins/SearchSub/SearchSubPlugin.php index c07f7695da..813b8290d8 100644 --- a/plugins/SearchSub/SearchSubPlugin.php +++ b/plugins/SearchSub/SearchSubPlugin.php @@ -80,6 +80,7 @@ class SearchSubPlugin extends Plugin case 'SearchunsubAction': case 'SearchsubsAction': case 'SearchSubForm': + case 'SearchSubMenu': case 'SearchUnsubForm': case 'SearchSubTrackCommand': case 'SearchSubTrackOffCommand': @@ -318,4 +319,19 @@ class SearchSubPlugin extends Plugin // TRANS: Help message for IM/SMS command "tracking" $commands["tracking"] = _m('COMMANDHELP', "List all your search subscriptions."); } + + function onEndDefaultLocalNav($menu, $user) + { + $user = common_current_user(); + + $searches = SearchSub::forProfile($user->getProfile()); + + if (!empty($searches) && count($searches) > 0) { + $searchSubMenu = new SearchSubMenu($menu->out, $user, $searches); + $menu->submenu(_m('Searches'), $searchSubMenu); + } + + return true; + } + } diff --git a/plugins/SearchSub/searchsubmenu.php b/plugins/SearchSub/searchsubmenu.php new file mode 100644 index 0000000000..684f5c7db2 --- /dev/null +++ b/plugins/SearchSub/searchsubmenu.php @@ -0,0 +1,78 @@ +. + * + * @category Menu + * @package StatusNet + * @author Evan Prodromou + * @copyright 2011 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 + * @link http://status.net/ + */ + +if (!defined('STATUSNET')) { + // This check helps protect against security problems; + // your code file can't be executed directly from the web. + exit(1); +} + +/** + * Class comment + * + * @category General + * @package StatusNet + * @author Evan Prodromou + * @copyright 2011 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 + * @link http://status.net/ + */ + +class SearchSubMenu extends Menu +{ + protected $user; + protected $searches; + + function __construct($out, $user, $searches) + { + parent::__construct($out); + $this->user = $user; + $this->searches = $searches; + } + + function show() + { + $this->out->elementStart('ul', array('class' => 'nav')); + + foreach ($this->searches as $search) { + if (!empty($search)) { + $this->out->menuItem(common_local_url('noticesearch', + array('q' => $search)), + sprintf('"%s"', $search), + sprintf(_('Notices including %s'), $search), + $this->actionName == 'noticesearch' && $this->action->arg('q') == $search, + 'nav_streams_search_'.$search); + } + } + + $this->out->elementEnd('ul'); + } + +}