From b1e42115da24a53136c592e89f8fbec830142abf Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Tue, 4 Jan 2011 19:32:36 -0800 Subject: [PATCH] new menu layout plugin --- plugins/NewMenu/NewMenuPlugin.php | 181 ++++++++++++++++++++++++++++++ 1 file changed, 181 insertions(+) create mode 100644 plugins/NewMenu/NewMenuPlugin.php diff --git a/plugins/NewMenu/NewMenuPlugin.php b/plugins/NewMenu/NewMenuPlugin.php new file mode 100644 index 0000000000..5754e34b7f --- /dev/null +++ b/plugins/NewMenu/NewMenuPlugin.php @@ -0,0 +1,181 @@ +. + * + * @category Sample + * @package StatusNet + * @author Brion Vibber + * @author Evan Prodromou + * @copyright 2010 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); +} + +/** + * Somewhat different menu navigation + * + * We have a new menu layout coming in StatusNet 1.0. This plugin gets + * some of the new navigation in, although third-level menus aren't enabled. + * + * @category NewMenu + * @package StatusNet + * @author Brion Vibber + * @author Evan Prodromou + * @copyright 2010 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 + * @link http://status.net/ + */ +class NewMenuPlugin extends Plugin +{ + /** + * Load related modules when needed + * + * @param string $cls Name of the class to be loaded + * + * @return boolean hook value; true means continue processing, false means stop. + */ + + function onAutoload($cls) + { + $dir = dirname(__FILE__); + + switch ($cls) + { + case 'HelloAction': + include_once $dir . '/' . strtolower(mb_substr($cls, 0, -6)) . '.php'; + return false; + case 'User_greeting_count': + include_once $dir . '/'.$cls.'.php'; + return false; + default: + return true; + } + } + + /** + * Modify the default menu + * + * @param Action $action The current action handler. Use this to + * do any output. + * + * @return boolean hook value; true means continue processing, false means stop. + * + * @see Action + */ + + function onStartPrimaryNav($action) + { + $user = common_current_user(); + + if (!empty($user)) { + $action->menuItem(common_local_url('all', + array('nickname' => $user->nickname)), + _m('Home'), + _m('Friends timeline'), + false, + 'nav_home'); + $action->menuItem(common_local_url('showstream', + array('nickname' => $user->nickname)), + _m('Profile'), + _m('Your profile'), + false, + 'nav_profile'); + $action->menuItem(common_local_url('public'), + _m('Everyone'), + _m('Everyone on this site'), + false, + 'nav_public'); + $action->menuItem(common_local_url('profilesettings'), + _m('Settings'), + _m('Change your personal settings'), + false, + 'nav_account'); + if ($user->hasRight(Right::CONFIGURESITE)) { + $action->menuItem(common_local_url('siteadminpanel'), + _m('Admin'), + _m('Site configuration'), + false, + 'nav_admin'); + } + $action->menuItem(common_local_url('logout'), + _m('Logout'), + _m('Logout from the site'), + false, + 'nav_logout'); + } else { + $action->menuItem(common_local_url('public'), + _m('Everyone'), + _m('Everyone on this site'), + false, + 'nav_public'); + $action->menuItem(common_local_url('login'), + _m('Login'), + _m('Login to the site'), + false, + 'nav_login'); + } + + $action->menuItem(common_local_url('doc', + array('title' => 'help')), + _m('Help'), + _m('Help using this site'), + false, + 'nav_help'); + + if (!empty($user) || !common_config('site', 'private')) { + $action->menuItem(common_local_url('noticesearch'), + _m('Search'), + _m('Search the site'), + false, + 'nav_search'); + } + + Event::handle('EndPrimaryNav', array($action)); + + return false; + } + + /** + * Return version information for this plugin + * + * @param array &$versions Version info; add to this array + * + * @return boolean hook value + */ + + function onPluginVersion(&$versions) + { + $versions[] = array('name' => 'NewMenu', + 'version' => STATUSNET_VERSION, + 'author' => 'Evan Prodromou', + 'homepage' => 'http://status.net/wiki/Plugin:NewMenu', + 'description' => + _m('A preview of the new menu '. + 'layout in StatusNet 1.0.')); + return true; + } +}