]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - plugins/Directory/DirectoryPlugin.php
Reorder directory router connections / fix regex
[quix0rs-gnu-social.git] / plugins / Directory / DirectoryPlugin.php
index 0ff2ea76bf7c240eb77a037b402b37ca68338613..5979bb0e806107cd49d59d6696d20389fac53730 100644 (file)
@@ -44,6 +44,8 @@ if (!defined('STATUSNET')) {
  */
 class DirectoryPlugin extends Plugin
 {
+    private $dir = null;
+
     /**
      * Initializer for this plugin
      *
@@ -76,13 +78,14 @@ class DirectoryPlugin extends Plugin
      */
     function onAutoload($cls)
     {
-        $dir = dirname(__FILE__);
-
         // common_debug("class = $cls");
 
+        $dir = dirname(__FILE__);
+
         switch ($cls)
         {
         case 'UserdirectoryAction':
+        case 'GroupdirectoryAction':
             include_once $dir
                 . '/actions/' . strtolower(mb_substr($cls, 0, -6)) . '.php';
             return false;
@@ -90,6 +93,11 @@ class DirectoryPlugin extends Plugin
             include_once $dir
                 . '/lib/' . strtolower($cls) . '.php';
             return false;
+        case 'SortableSubscriptionList':
+        case 'SortableGroupList':
+            include_once $dir
+                . '/lib/' . strtolower($cls) . '.php';
+            return false;
         default:
             return true;
         }
@@ -105,11 +113,108 @@ class DirectoryPlugin extends Plugin
      */
     function onRouterInitialized($m)
     {
+
         $m->connect(
-            'main/directory',
+            'directory/users/:filter',
+            array('action' => 'userdirectory'),
+            array('filter' => '[0-9a-zA-Z]|(0-9)')
+        );
+
+        $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')
+        );
+
+        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;
+    }
+
+    /**
+     * Link in a styelsheet for the onboarding actions
+     *
+     * @param Action $action Action being shown
+     *
+     * @return boolean hook flag
+     */
+    function onEndShowStatusNetStyles($action)
+    {
+        if (in_array(
+            $action->trimmed('action'),
+            array('userdirectory', 'groupdirectory'))
+        ) {
+            $action->cssLink($this->path('css/directory.css'));
+        }
+
+        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;
     }
 
@@ -132,8 +237,10 @@ class DirectoryPlugin extends Plugin
 
         $nav->out->menuItem(
             common_local_url('userdirectory'),
-            _('Directory'),
-            _('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'
         );
@@ -151,6 +258,7 @@ class DirectoryPlugin extends Plugin
             'version' => STATUSNET_VERSION,
             'author' => 'Zach Copley',
             'homepage' => 'http://status.net/wiki/Plugin:Directory',
+            // TRANS: Plugin description.
             'rawdescription' => _m('Add a user directory.')
         );