X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=plugins%2FDirectory%2FDirectoryPlugin.php;h=7ac0f9326588684d1dc61b9d383f7db513f7251c;hb=c94d9994d898eddf654121ac45d455891954e830;hp=cba75802e5f3ad235af2488c5302af8dfd6b7c9a;hpb=1e73ba00bdd37f46415eb45b1b904dc894fb801c;p=quix0rs-gnu-social.git diff --git a/plugins/Directory/DirectoryPlugin.php b/plugins/Directory/DirectoryPlugin.php index cba75802e5..7ac0f93265 100644 --- a/plugins/Directory/DirectoryPlugin.php +++ b/plugins/Directory/DirectoryPlugin.php @@ -44,7 +44,6 @@ if (!defined('STATUSNET')) { */ class DirectoryPlugin extends Plugin { - private $dir = null; /** @@ -69,61 +68,116 @@ class DirectoryPlugin extends Plugin return true; } - /** - * 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) - { - // common_debug("class = $cls"); - - $dir = dirname(__FILE__); - - switch ($cls) - { - case 'UserdirectoryAction': - include_once $dir - . '/actions/' . strtolower(mb_substr($cls, 0, -6)) . '.php'; - return false; - case 'AlphaNav': - include_once $dir - . '/lib/' . strtolower($cls) . '.php'; - return false; - case 'SortableSubscriptionList': - include_once $dir - . '/lib/' . strtolower($cls) . '.php'; - return false; - default: - return true; - } - } - /** * Map URLs to actions * - * @param Net_URL_Mapper $m path-to-action mapper + * @param URLMapper $m path-to-action mapper * * @return boolean hook value; true means continue processing, * false means stop. */ - function onRouterInitialized($m) + public function onRouterInitialized(URLMapper $m) { + $m->connect( - 'directory/users', + 'directory/users/:filter/sort_by/:sort/reverse/:reverse', array('action' => 'userdirectory'), - array('filter' => 'all') + array('filter' => '[0-9a-zA-Z]|(0-9)'), + array('sort' => '[a-z]+'), + array('reverse' => '[0-9]') ); + $m->connect( + 'directory/users/:filter/sort_by/:sort', + array('action' => 'userdirectory'), + array('filter' => '[0-9a-zA-Z]|(0-9)'), + array('sort' => '[a-z]+') + ); + + $m->connect( 'directory/users/:filter', array('action' => 'userdirectory'), - array('filter' => '([0-9a-zA-Z_]{1,64}|0-9)') + array('filter' => '[0-9a-zA-Z]|(0-9)') + ); + + $m->connect( + 'directory/users/sort_by/:sort/reverse/:reverse', + array('action' => 'userdirectory'), + array('sort' => '[a-z]+'), + array('reverse' => '[0-9]') + ); + + $m->connect( + 'directory/users/sort_by/:sort', + array('action' => 'userdirectory'), + array('sort' => '[a-z]+') + ); + + $m->connect( + 'directory/users', + array('action' => 'userdirectory') + ); + + $m->connect( + 'groups/:filter', + array('action' => 'groupdirectory'), + array('filter' => '[0-9a-zA-Z]|(0-9)') + ); + + $m->connect( + 'groups', + array('action' => 'groupdirectory') ); + $m->connect( + 'groups/all', + array('action' => 'groupdirectory') + ); + + + return true; + } + + /** + * Hijack the routing (URL -> Action) for the normal directory page + * and substitute our group directory action + * + * @param string $path path to connect + * @param array $defaults path defaults + * @param array $rules path rules + * @param array $result unused + * + * @return boolean hook return + */ + function onStartConnectPath(&$path, &$defaults, &$rules, &$result) + { + if (in_array($path, array('group', 'group/', 'groups', 'groups/'))) { + $defaults['action'] = 'groupdirectory'; + return true; + } + return true; + } + + // The following three function are to replace the existing groups + // list page with the directory plugin's group directory page + + /** + * Hijack the mapping (Action -> URL) and return the URL to our + * group directory page instead of the normal groups page + * + * @param Action $action action to find a path for + * @param array $params parameters to pass to the action + * @param string $fragment any url fragement + * @param boolean $addSession whether to add session variable + * @param string $url resulting URL to local resource + * + * @return string the local URL + */ + function onEndLocalURL(&$action, &$params, &$fragment, &$addSession, &$url) { + if (in_array($action, array('group', 'group/', 'groups', 'groups/'))) { + $url = common_local_url('groupdirectory'); + } return true; } @@ -134,11 +188,11 @@ class DirectoryPlugin extends Plugin * * @return boolean hook flag */ - function onEndShowStatusNetStyles($action) + public function onEndShowStylesheets(Action $action) { if (in_array( $action->trimmed('action'), - array('userdirectory')) + array('userdirectory', 'groupdirectory')) ) { $action->cssLink($this->path('css/directory.css')); } @@ -146,6 +200,24 @@ class DirectoryPlugin extends Plugin return true; } + /** + * Fool the public nav into thinking it's on the regular + * group page when it's actually on our injected group + * directory page. This way "Groups" gets hilighted when + * when we're on the groups directory page. + * + * @param type $action the current action + * + * @return boolean hook flag + */ + function onStartPublicGroupNav($action) + { + if ($action->trimmed('action') == 'groupdirectory') { + $action->actionName = 'groups'; + } + return true; + } + /** * Modify the public local nav to add a link to the user directory * @@ -165,8 +237,10 @@ class DirectoryPlugin extends Plugin $nav->out->menuItem( common_local_url('userdirectory'), - _m('Directory'), - _m('User Directory'), + // TRANS: Menu item text for user directory. + _m('MENU','Directory'), + // TRANS: Menu item title for user directory. + _m('User Directory.'), $actionName == 'userdirectory', 'nav_directory' ); @@ -181,9 +255,10 @@ class DirectoryPlugin extends Plugin { $versions[] = array( 'name' => 'Directory', - 'version' => STATUSNET_VERSION, + 'version' => GNUSOCIAL_VERSION, 'author' => 'Zach Copley', 'homepage' => 'http://status.net/wiki/Plugin:Directory', + // TRANS: Plugin description. 'rawdescription' => _m('Add a user directory.') );