]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - lib/router.php
Merge branch 'twitter-bridge-fixes'
[quix0rs-gnu-social.git] / lib / router.php
index 7f17f2d0a5145f683e398a47a781be60e842e8ab..606b30e91640dc53930183a1c0f2225351b0c4ef 100644 (file)
@@ -31,73 +31,6 @@ if (!defined('STATUSNET') && !defined('LACONICA')) {
     exit(1);
 }
 
-require_once 'Net/URL/Mapper.php';
-
-class StatusNet_URL_Mapper extends Net_URL_Mapper
-{
-    private static $_singleton = null;
-    private $_actionToPath = array();
-
-    private function __construct()
-    {
-    }
-    
-    public static function getInstance($id = '__default__')
-    {
-        if (empty(self::$_singleton)) {
-            self::$_singleton = new StatusNet_URL_Mapper();
-        }
-        return self::$_singleton;
-    }
-
-    public function connect($path, $defaults = array(), $rules = array())
-    {
-        $result = null;
-        if (Event::handle('StartConnectPath', array(&$path, &$defaults, &$rules, &$result))) {
-            $result = parent::connect($path, $defaults, $rules);
-            if (array_key_exists('action', $defaults)) {
-                $action = $defaults['action'];
-            } elseif (array_key_exists('action', $rules)) {
-                $action = $rules['action'];
-            } else {
-                $action = null;
-            }
-            $this->_mapAction($action, $result);
-            Event::handle('EndConnectPath', array($path, $defaults, $rules, $result));
-        }
-        return $result;
-    }
-    
-    protected function _mapAction($action, $path)
-    {
-        if (!array_key_exists($action, $this->_actionToPath)) {
-            $this->_actionToPath[$action] = array();
-        }
-        $this->_actionToPath[$action][] = $path;
-        return;
-    }
-    
-    public function generate($values = array(), $qstring = array(), $anchor = '')
-    {
-        if (!array_key_exists('action', $values)) {
-            return parent::generate($values, $qstring, $anchor);
-        }
-       
-        $action = $values['action'];
-
-        if (!array_key_exists($action, $this->_actionToPath)) {
-            return parent::generate($values, $qstring, $anchor);
-        }
-       
-        $oldPaths    = $this->paths;
-        $this->paths = $this->_actionToPath[$action];
-        $result      = parent::generate($values, $qstring, $anchor);
-        $this->paths = $oldPaths;
-
-        return $result;
-    }
-}
-
 /**
  * URL Router
  *
@@ -113,8 +46,6 @@ class Router
 {
     var $m = null;
     static $inst = null;
-    static $bare = array('requesttoken', 'accesstoken', 'userauthorization',
-                         'postnotice', 'updateprofile', 'finishremotesubscribe');
 
     const REGEX_TAG = '[^\/]+'; // [\pL\pN_\-\.]{1,64} better if we can do unicode regexes
 
@@ -126,40 +57,37 @@ class Router
         return Router::$inst;
     }
 
+    /**
+     * Clear the global singleton instance for this class.
+     * Needed to ensure reset when switching site configurations.
+     */
+    static function clear()
+    {
+        Router::$inst = null;
+    }
+
     function __construct()
     {
         if (empty($this->m)) {
-            if (!common_config('router', 'cache')) {
-                $this->m = $this->initialize();
-            } else {
-                $k = self::cacheKey();
-                $c = Cache::instance();
-                $m = $c->get($k);
-                if (!empty($m)) {
-                    $this->m = $m;
-                } else {
-                    $this->m = $this->initialize();
-                    $c->set($k, $this->m);
-                }
-            }
+            $this->m = $this->initialize();
         }
     }
 
     /**
      * Create a unique hashkey for the router.
-     * 
+     *
      * The router's url map can change based on the version of the software
      * you're running and the plugins that are enabled. To avoid having bad routes
      * get stuck in the cache, the key includes a list of plugins and the software
      * version.
      * 
-     * There can still be problems with a) differences in versions of the plugins and 
+    * There can still be problems with a) differences in versions of the plugins and
      * b) people running code between official versions, but these tend to be more
      * sophisticated users who can grok what's going on and clear their caches.
-     * 
+     *
      * @return string cache key string that should uniquely identify a router
      */
-    
+
     static function cacheKey()
     {
         $parts = array('router');
@@ -173,10 +101,10 @@ class Router
 
         return Cache::codeKey(implode(':', $parts));
     }
-    
+
     function initialize()
     {
-        $m = StatusNet_URL_Mapper::getInstance();
+        $m = new URLMapper();
 
         if (Event::handle('StartInitializeRouter', array(&$m))) {
 
@@ -199,7 +127,8 @@ class Router
             // main stuff is repetitive
 
             $main = array('login', 'logout', 'register', 'subscribe',
-                          'unsubscribe', 'confirmaddress', 'recoverpassword',
+                          'unsubscribe', 'cancelsubscription', 'approvesub',
+                          'confirmaddress', 'recoverpassword',
                           'invite', 'favor', 'disfavor', 'sup',
                           'block', 'unblock', 'subedit',
                           'groupblock', 'groupunblock',
@@ -247,19 +176,10 @@ class Router
                 $m->connect('main/'.$c.'/:code', array('action' => $c));
             }
 
-            // exceptional
-
-            $m->connect('main/remote', array('action' => 'remotesubscribe'));
-            $m->connect('main/remote?nickname=:nickname', array('action' => 'remotesubscribe'), array('nickname' => '[A-Za-z0-9_-]+'));
-
-            foreach (Router::$bare as $action) {
-                $m->connect('index.php?action=' . $action, array('action' => $action));
-            }
-
             // settings
 
             foreach (array('profile', 'avatar', 'password', 'im', 'oauthconnections',
-                           'oauthapps', 'email', 'sms', 'userdesign', 'url') as $s) {
+                           'oauthapps', 'email', 'sms', 'url') as $s) {
                 $m->connect('settings/'.$s, array('action' => $s.'settings'));
             }
 
@@ -335,6 +255,9 @@ class Router
             $m->connect('conversation/:id',
                         array('action' => 'conversation'),
                         array('id' => '[0-9]+'));
+            $m->connect('conversation/:id/replies',
+                        array('action' => 'conversationreplies'),
+                        array('id' => '[0-9]+'));
 
             $m->connect('message/new', array('action' => 'newmessage'));
             $m->connect('message/new?to=:to', array('action' => 'newmessage'), array('to' => Nickname::DISPLAY_FMT));
@@ -361,7 +284,7 @@ class Router
 
             $m->connect('group/new', array('action' => 'newgroup'));
 
-            foreach (array('edit', 'join', 'leave', 'delete') as $v) {
+            foreach (array('edit', 'join', 'leave', 'delete', 'cancel', 'approve') as $v) {
                 $m->connect('group/:nickname/'.$v,
                             array('action' => $v.'group'),
                             array('nickname' => Nickname::DISPLAY_FMT));
@@ -370,7 +293,7 @@ class Router
                             array('id' => '[0-9]+'));
             }
 
-            foreach (array('members', 'logo', 'rss', 'designsettings') as $n) {
+            foreach (array('members', 'logo', 'rss') as $n) {
                 $m->connect('group/:nickname/'.$n,
                             array('action' => 'group'.$n),
                             array('nickname' => Nickname::DISPLAY_FMT));
@@ -388,6 +311,10 @@ class Router
                         array('action' => 'makeadmin'),
                         array('nickname' => Nickname::DISPLAY_FMT));
 
+            $m->connect('group/:nickname/members/pending',
+                        array('action' => 'groupqueue'),
+                        array('nickname' => Nickname::DISPLAY_FMT));
+
             $m->connect('group/:id/id',
                         array('action' => 'groupbyid'),
                         array('id' => '[0-9]+'));
@@ -609,12 +536,6 @@ class Router
             $m->connect('api/account/update_profile_image.:format',
                         array('action' => 'ApiAccountUpdateProfileImage'));
 
-            $m->connect('api/account/update_profile_background_image.:format',
-                        array('action' => 'ApiAccountUpdateProfileBackgroundImage'));
-
-            $m->connect('api/account/update_profile_colors.:format',
-                        array('action' => 'ApiAccountUpdateProfileColors'));
-
             $m->connect('api/account/update_delivery_device.:format',
                         array('action' => 'ApiAccountUpdateDeliveryDevice'));
 
@@ -763,6 +684,11 @@ class Router
                         array('action' => 'ApiGroupProfileUpdate',
                               'id' => '[a-zA-Z0-9]+',
                               'format' => '(xml|json)'));
+                              
+            $m->connect('api/statusnet/conversation/:id.:format',
+                        array('action' => 'apiconversation',
+                              'id' => '[0-9]+',
+                              'format' => '(xml|json|rss|atom|as)'));
 
             // Lists (people tags)
 
@@ -858,7 +784,6 @@ class Router
             // Admin
 
             $m->connect('panel/site', array('action' => 'siteadminpanel'));
-            $m->connect('panel/design', array('action' => 'designadminpanel'));
             $m->connect('panel/user', array('action' => 'useradminpanel'));
                $m->connect('panel/access', array('action' => 'accessadminpanel'));
             $m->connect('panel/paths', array('action' => 'pathsadminpanel'));
@@ -886,8 +811,8 @@ class Router
                 $nickname = User::singleUserNickname();
 
                 foreach (array('subscriptions', 'subscribers',
-                               'all', 'foaf', 'xrds',
-                               'replies', 'microsummary', 'hcard') as $a) {
+                               'all', 'foaf', 'replies',
+                               'microsummary', 'hcard') as $a) {
                     $m->connect($a,
                                 array('action' => $a,
                                       'nickname' => $nickname));
@@ -900,6 +825,10 @@ class Router
                                 array('tag' => self::REGEX_TAG));
                 }
 
+                $m->connect('subscribers/pending',
+                            array('action' => 'subqueue',
+                                  'nickname' => $nickname));
+
                 foreach (array('rss', 'groups') as $a) {
                     $m->connect($a,
                                 array('action' => 'user'.$a,
@@ -950,12 +879,15 @@ class Router
                 $m->connect('rsd.xml', array('action' => 'rsd'));
 
                 foreach (array('subscriptions', 'subscribers',
-                               'nudge', 'all', 'foaf', 'xrds',
-                               'replies', 'inbox', 'outbox', 'microsummary', 'hcard') as $a) {
+                               'nudge', 'all', 'foaf', 'replies',
+                               'inbox', 'outbox', 'microsummary', 'hcard') as $a) {
                     $m->connect(':nickname/'.$a,
                                 array('action' => $a),
                                 array('nickname' => Nickname::DISPLAY_FMT));
                 }
+                $m->connect(':nickname/subscribers/pending',
+                            array('action' => 'subqueue'),
+                            array('nickname' => Nickname::DISPLAY_FMT));
 
                 // people tags
 
@@ -1128,7 +1060,7 @@ class Router
     {
         try {
             $match = $this->m->match($path);
-        } catch (Net_URL_Mapper_InvalidException $e) {
+        } catch (Exception $e) {
             common_log(LOG_ERR, "Problem getting route for $path - " .
                        $e->getMessage());
             // TRANS: Client error on action trying to visit a non-existing page.
@@ -1150,7 +1082,6 @@ class Router
         }
 
         $url = $this->m->generate($args, $params, $fragment);
-
         // Due to a bug in the Net_URL_Mapper code, the returned URL may
         // contain a malformed query of the form ?p1=v1?p2=v2?p3=v3. We
         // repair that here rather than modifying the upstream code...