]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - lib/router.php
Merge branch '1.0.x' of git://gitorious.org/statusnet/mainline into 1.0.x
[quix0rs-gnu-social.git] / lib / router.php
index ca895c8bb67f3ef05c5c6c0b3f1e5f6e894c11e4..efbd2c6cddee3003010b0b709b539d23b8bfa121 100644 (file)
@@ -116,6 +116,8 @@ class Router
     static $bare = array('requesttoken', 'accesstoken', 'userauthorization',
                          'postnotice', 'updateprofile', 'finishremotesubscribe');
 
+    const REGEX_TAG = '[^\/]+'; // [\pL\pN_\-\.]{1,64} better if we can do unicode regexes
+
     static function get()
     {
         if (!Router::$inst) {
@@ -160,7 +162,16 @@ class Router
     
     static function cacheKey()
     {
-        return Cache::codeKey('router');
+        $parts = array('router');
+
+        // Many router paths depend on this setting.
+        if (common_config('singleuser', 'enabled')) {
+            $parts[] = '1user';
+        } else {
+            $parts[] = 'multi';
+        }
+
+        return Cache::codeKey(implode(':', $parts));
     }
     
     function initialize()
@@ -199,6 +210,9 @@ class Router
                           'deleteuser',
                           'geocode',
                           'version',
+                          'backupaccount',
+                          'deleteaccount',
+                          'restoreaccount',
             );
 
             foreach ($main as $a) {
@@ -243,7 +257,7 @@ class Router
             // settings
 
             foreach (array('profile', 'avatar', 'password', 'im', 'oauthconnections',
-                           'oauthapps', 'email', 'sms', 'userdesign', 'other') as $s) {
+                           'oauthapps', 'email', 'sms', 'userdesign', 'url') as $s) {
                 $m->connect('settings/'.$s, array('action' => $s.'settings'));
             }
 
@@ -319,6 +333,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));
@@ -336,14 +353,14 @@ class Router
             $m->connect('tag', array('action' => 'publictagcloud'));
             $m->connect('tag/:tag/rss',
                         array('action' => 'tagrss'),
-                        array('tag' => '[\pL\pN_\-\.]{1,64}'));
+                        array('tag' => self::REGEX_TAG));
             $m->connect('tag/:tag',
                         array('action' => 'tag'),
-                        array('tag' => '[\pL\pN_\-\.]{1,64}'));
+                        array('tag' => self::REGEX_TAG));
 
             $m->connect('peopletag/:tag',
                         array('action' => 'peopletag'),
-                        array('tag' => '[a-zA-Z0-9]+'));
+                        array('tag' => self::REGEX_TAG));
 
             // groups
 
@@ -393,66 +410,71 @@ class Router
 
             // statuses API
 
+            $m->connect('api',
+                        array('action' => 'Redirect',
+                              'nextAction' => 'doc',
+                              'args' => array('title' => 'api')));
+
             $m->connect('api/statuses/public_timeline.:format',
                         array('action' => 'ApiTimelinePublic',
-                              'format' => '(xml|json|rss|atom)'));
+                              'format' => '(xml|json|rss|atom|as)'));
 
             $m->connect('api/statuses/friends_timeline.:format',
                         array('action' => 'ApiTimelineFriends',
-                              'format' => '(xml|json|rss|atom)'));
+                              'format' => '(xml|json|rss|atom|as)'));
 
             $m->connect('api/statuses/friends_timeline/:id.:format',
                         array('action' => 'ApiTimelineFriends',
-                              'id' => Nickname::DISPLAY_FMT,
-                              'format' => '(xml|json|rss|atom)'));
+                              'id' => Nickname::INPUT_FMT,
+                              'format' => '(xml|json|rss|atom|as)'));
 
             $m->connect('api/statuses/home_timeline.:format',
                         array('action' => 'ApiTimelineHome',
-                              'format' => '(xml|json|rss|atom)'));
+                              'format' => '(xml|json|rss|atom|as)'));
 
             $m->connect('api/statuses/home_timeline/:id.:format',
                         array('action' => 'ApiTimelineHome',
-                              'id' => Nickname::DISPLAY_FMT,
-                              'format' => '(xml|json|rss|atom)'));
+                              'id' => Nickname::INPUT_FMT,
+                              'format' => '(xml|json|rss|atom|as)'));
 
             $m->connect('api/statuses/user_timeline.:format',
                         array('action' => 'ApiTimelineUser',
-                              'format' => '(xml|json|rss|atom)'));
+                              'format' => '(xml|json|rss|atom|as)'));
 
             $m->connect('api/statuses/user_timeline/:id.:format',
                         array('action' => 'ApiTimelineUser',
-                              'id' => Nickname::DISPLAY_FMT,
-                              'format' => '(xml|json|rss|atom)'));
+                              'id' => Nickname::INPUT_FMT,
+                              'format' => '(xml|json|rss|atom|as)'));
 
             $m->connect('api/statuses/mentions.:format',
                         array('action' => 'ApiTimelineMentions',
-                              'format' => '(xml|json|rss|atom)'));
+                              'format' => '(xml|json|rss|atom|as)'));
 
             $m->connect('api/statuses/mentions/:id.:format',
                         array('action' => 'ApiTimelineMentions',
-                              'id' => Nickname::DISPLAY_FMT,
-                              'format' => '(xml|json|rss|atom)'));
+                              'id' => Nickname::INPUT_FMT,
+                              'format' => '(xml|json|rss|atom|as)'));
 
             $m->connect('api/statuses/replies.:format',
                         array('action' => 'ApiTimelineMentions',
-                              'format' => '(xml|json|rss|atom)'));
+                              'format' => '(xml|json|rss|atom|as)'));
 
             $m->connect('api/statuses/replies/:id.:format',
                         array('action' => 'ApiTimelineMentions',
-                              'id' => Nickname::DISPLAY_FMT,
-                              'format' => '(xml|json|rss|atom)'));
+                              'id' => Nickname::INPUT_FMT,
+                              'format' => '(xml|json|rss|atom|as)'));
 
             $m->connect('api/statuses/retweeted_by_me.:format',
                         array('action' => 'ApiTimelineRetweetedByMe',
-                              'format' => '(xml|json|atom)'));
+                              'format' => '(xml|json|atom|as)'));
 
             $m->connect('api/statuses/retweeted_to_me.:format',
                         array('action' => 'ApiTimelineRetweetedToMe',
-                              'format' => '(xml|json|atom)'));
+                              'format' => '(xml|json|atom|as)'));
 
             $m->connect('api/statuses/retweets_of_me.:format',
                         array('action' => 'ApiTimelineRetweetsOfMe',
-                              'format' => '(xml|json|atom)'));
+                              'format' => '(xml|json|atom|as)'));
 
             $m->connect('api/statuses/friends.:format',
                         array('action' => 'ApiUserFriends',
@@ -460,7 +482,7 @@ class Router
 
             $m->connect('api/statuses/friends/:id.:format',
                         array('action' => 'ApiUserFriends',
-                              'id' => Nickname::DISPLAY_FMT,
+                              'id' => Nickname::INPUT_FMT,
                               'format' => '(xml|json)'));
 
             $m->connect('api/statuses/followers.:format',
@@ -469,7 +491,7 @@ class Router
 
             $m->connect('api/statuses/followers/:id.:format',
                         array('action' => 'ApiUserFollowers',
-                              'id' => Nickname::DISPLAY_FMT,
+                              'id' => Nickname::INPUT_FMT,
                               'format' => '(xml|json)'));
 
             $m->connect('api/statuses/show.:format',
@@ -512,7 +534,12 @@ class Router
 
             $m->connect('api/users/show/:id.:format',
                         array('action' => 'ApiUserShow',
-                              'id' => Nickname::DISPLAY_FMT,
+                              'id' => Nickname::INPUT_FMT,
+                              'format' => '(xml|json)'));
+
+            $m->connect('api/users/profile_image/:screen_name.:format',
+                        array('action' => 'ApiUserProfileImage',
+                              'screen_name' => Nickname::DISPLAY_FMT,
                               'format' => '(xml|json)'));
 
             // direct messages
@@ -550,12 +577,12 @@ class Router
 
             $m->connect('api/friendships/create/:id.:format',
                         array('action' => 'ApiFriendshipsCreate',
-                              'id' => Nickname::DISPLAY_FMT,
+                              'id' => Nickname::INPUT_FMT,
                               'format' => '(xml|json)'));
 
             $m->connect('api/friendships/destroy/:id.:format',
                         array('action' => 'ApiFriendshipsDestroy',
-                              'id' => Nickname::DISPLAY_FMT,
+                              'id' => Nickname::INPUT_FMT,
                               'format' => '(xml|json)'));
 
             // Social graph
@@ -608,21 +635,21 @@ class Router
 
             $m->connect('api/favorites.:format',
                         array('action' => 'ApiTimelineFavorites',
-                              'format' => '(xml|json|rss|atom)'));
+                              'format' => '(xml|json|rss|atom|as)'));
 
             $m->connect('api/favorites/:id.:format',
                         array('action' => 'ApiTimelineFavorites',
-                              'id' => Nickname::DISPLAY_FMT,
-                              'format' => '(xml|json|rss|atom)'));
+                              'id' => Nickname::INPUT_FMT,
+                              'format' => '(xml|json|rss|atom|as)'));
 
             $m->connect('api/favorites/create/:id.:format',
                         array('action' => 'ApiFavoriteCreate',
-                              'id' => Nickname::DISPLAY_FMT,
+                              'id' => '[0-9]+',
                               'format' => '(xml|json)'));
 
             $m->connect('api/favorites/destroy/:id.:format',
                         array('action' => 'ApiFavoriteDestroy',
-                              'id' => Nickname::DISPLAY_FMT,
+                              'id' => '[0-9]+',
                               'format' => '(xml|json)'));
             // blocks
 
@@ -632,7 +659,7 @@ class Router
 
             $m->connect('api/blocks/create/:id.:format',
                         array('action' => 'ApiBlockCreate',
-                              'id' => Nickname::DISPLAY_FMT,
+                              'id' => Nickname::INPUT_FMT,
                               'format' => '(xml|json)'));
 
             $m->connect('api/blocks/destroy.:format',
@@ -641,7 +668,7 @@ class Router
 
             $m->connect('api/blocks/destroy/:id.:format',
                         array('action' => 'ApiBlockDestroy',
-                              'id' => Nickname::DISPLAY_FMT,
+                              'id' => Nickname::INPUT_FMT,
                               'format' => '(xml|json)'));
             // help
 
@@ -677,8 +704,8 @@ class Router
 
             $m->connect('api/statusnet/groups/timeline/:id.:format',
                         array('action' => 'ApiTimelineGroup',
-                              'id' => Nickname::DISPLAY_FMT,
-                              'format' => '(xml|json|rss|atom)'));
+                              'id' => Nickname::INPUT_FMT,
+                              'format' => '(xml|json|rss|atom|as)'));
 
             $m->connect('api/statusnet/groups/show.:format',
                         array('action' => 'ApiGroupShow',
@@ -686,12 +713,12 @@ class Router
 
             $m->connect('api/statusnet/groups/show/:id.:format',
                         array('action' => 'ApiGroupShow',
-                              'id' => Nickname::DISPLAY_FMT,
+                              'id' => Nickname::INPUT_FMT,
                               'format' => '(xml|json)'));
 
             $m->connect('api/statusnet/groups/join.:format',
                         array('action' => 'ApiGroupJoin',
-                              'id' => Nickname::DISPLAY_FMT,
+                              'id' => Nickname::INPUT_FMT,
                               'format' => '(xml|json)'));
 
             $m->connect('api/statusnet/groups/join/:id.:format',
@@ -700,7 +727,7 @@ class Router
 
             $m->connect('api/statusnet/groups/leave.:format',
                         array('action' => 'ApiGroupLeave',
-                              'id' => Nickname::DISPLAY_FMT,
+                              'id' => Nickname::INPUT_FMT,
                               'format' => '(xml|json)'));
 
             $m->connect('api/statusnet/groups/leave/:id.:format',
@@ -717,7 +744,7 @@ class Router
 
             $m->connect('api/statusnet/groups/list/:id.:format',
                         array('action' => 'ApiGroupList',
-                              'id' => Nickname::DISPLAY_FMT,
+                              'id' => Nickname::INPUT_FMT,
                               'format' => '(xml|json|rss|atom)'));
 
             $m->connect('api/statusnet/groups/list_all.:format',
@@ -730,16 +757,22 @@ class Router
 
             $m->connect('api/statusnet/groups/membership/:id.:format',
                         array('action' => 'ApiGroupMembership',
-                              'id' => Nickname::DISPLAY_FMT,
+                              'id' => Nickname::INPUT_FMT,
                               'format' => '(xml|json)'));
 
             $m->connect('api/statusnet/groups/create.:format',
                         array('action' => 'ApiGroupCreate',
                               'format' => '(xml|json)'));
+
+            $m->connect('api/statusnet/groups/update/:id.:format',
+                        array('action' => 'ApiGroupProfileUpdate',
+                              'id' => '[a-zA-Z0-9]+',
+                              'format' => '(xml|json)'));
+
             // Tags
             $m->connect('api/statusnet/tags/timeline/:tag.:format',
                         array('action' => 'ApiTimelineTag',
-                              'format' => '(xml|json|rss|atom)'));
+                              'format' => '(xml|json|rss|atom|as)'));
 
             // media related
             $m->connect(
@@ -761,24 +794,25 @@ class Router
             $m->connect('api/oauth/authorize',
                         array('action' => 'ApiOauthAuthorize'));
 
-            $m->connect('api/statusnet/app/service/:id.xml',
-                        array('action' => 'ApiAtomService',
-                              'id' => Nickname::DISPLAY_FMT));
-
-            $m->connect('api/statusnet/app/service.xml',
-                        array('action' => 'ApiAtomService'));
-
             // Admin
 
-            $m->connect('admin/site', array('action' => 'siteadminpanel'));
-            $m->connect('admin/design', array('action' => 'designadminpanel'));
-            $m->connect('admin/user', array('action' => 'useradminpanel'));
-               $m->connect('admin/access', array('action' => 'accessadminpanel'));
-            $m->connect('admin/paths', array('action' => 'pathsadminpanel'));
-            $m->connect('admin/sessions', array('action' => 'sessionsadminpanel'));
-            $m->connect('admin/sitenotice', array('action' => 'sitenoticeadminpanel'));
-            $m->connect('admin/snapshot', array('action' => 'snapshotadminpanel'));
-            $m->connect('admin/license', array('action' => 'licenseadminpanel'));
+            $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'));
+            $m->connect('panel/sessions', array('action' => 'sessionsadminpanel'));
+            $m->connect('panel/sitenotice', array('action' => 'sitenoticeadminpanel'));
+            $m->connect('panel/snapshot', array('action' => 'snapshotadminpanel'));
+            $m->connect('panel/license', array('action' => 'licenseadminpanel'));
+
+            $m->connect('panel/plugins', array('action' => 'pluginsadminpanel'));
+            $m->connect('panel/plugins/enable/:plugin',
+                        array('action' => 'pluginenable'),
+                        array('plugin' => '[A-Za-z0-9_]+'));
+            $m->connect('panel/plugins/disable/:plugin',
+                        array('action' => 'plugindisable'),
+                        array('plugin' => '[A-Za-z0-9_]+'));
 
             $m->connect('getfile/:filename',
                         array('action' => 'getfile'),
@@ -802,7 +836,7 @@ class Router
                     $m->connect($a.'/:tag',
                                 array('action' => $a,
                                       'nickname' => $nickname),
-                                array('tag' => '[a-zA-Z0-9]+'));
+                                array('tag' => self::REGEX_TAG));
                 }
 
                 foreach (array('rss', 'groups') as $a) {
@@ -829,12 +863,12 @@ class Router
                 $m->connect('tag/:tag/rss',
                             array('action' => 'userrss',
                                   'nickname' => $nickname),
-                            array('tag' => '[\pL\pN_\-\.]{1,64}'));
+                            array('tag' => self::REGEX_TAG));
 
                 $m->connect('tag/:tag',
                             array('action' => 'showstream',
                                   'nickname' => $nickname),
-                            array('tag' => '[\pL\pN_\-\.]{1,64}'));
+                            array('tag' => self::REGEX_TAG));
 
                 $m->connect('rsd.xml',
                             array('action' => 'rsd',
@@ -865,7 +899,7 @@ class Router
                 foreach (array('subscriptions', 'subscribers') as $a) {
                     $m->connect(':nickname/'.$a.'/:tag',
                                 array('action' => $a),
-                                array('tag' => '[a-zA-Z0-9]+',
+                                array('tag' => self::REGEX_TAG,
                                       'nickname' => Nickname::DISPLAY_FMT));
                 }
 
@@ -893,12 +927,12 @@ class Router
                 $m->connect(':nickname/tag/:tag/rss',
                             array('action' => 'userrss'),
                             array('nickname' => Nickname::DISPLAY_FMT),
-                            array('tag' => '[\pL\pN_\-\.]{1,64}'));
+                            array('tag' => self::REGEX_TAG));
 
                 $m->connect(':nickname/tag/:tag',
                             array('action' => 'showstream'),
                             array('nickname' => Nickname::DISPLAY_FMT),
-                            array('tag' => '[\pL\pN_\-\.]{1,64}'));
+                            array('tag' => self::REGEX_TAG));
 
                 $m->connect(':nickname/rsd.xml',
                             array('action' => 'rsd'),
@@ -909,6 +943,48 @@ class Router
                             array('nickname' => Nickname::DISPLAY_FMT));
             }
 
+            // AtomPub API
+
+            $m->connect('api/statusnet/app/service/:id.xml',
+                        array('action' => 'ApiAtomService'),
+                        array('id' => Nickname::DISPLAY_FMT));
+
+            $m->connect('api/statusnet/app/service.xml',
+                        array('action' => 'ApiAtomService'));
+
+            $m->connect('api/statusnet/app/subscriptions/:subscriber/:subscribed.atom',
+                        array('action' => 'AtomPubShowSubscription'),
+                        array('subscriber' => '[0-9]+',
+                              'subscribed' => '[0-9]+'));
+
+            $m->connect('api/statusnet/app/subscriptions/:subscriber.atom',
+                        array('action' => 'AtomPubSubscriptionFeed'),
+                        array('subscriber' => '[0-9]+'));
+
+            $m->connect('api/statusnet/app/favorites/:profile/:notice.atom',
+                        array('action' => 'AtomPubShowFavorite'),
+                        array('profile' => '[0-9]+',
+                              'notice' => '[0-9]+'));
+
+            $m->connect('api/statusnet/app/favorites/:profile.atom',
+                        array('action' => 'AtomPubFavoriteFeed'),
+                        array('profile' => '[0-9]+'));
+
+            $m->connect('api/statusnet/app/memberships/:profile/:group.atom',
+                        array('action' => 'AtomPubShowMembership'),
+                        array('profile' => '[0-9]+',
+                              'group' => '[0-9]+'));
+
+            $m->connect('api/statusnet/app/memberships/:profile.atom',
+                        array('action' => 'AtomPubMembershipFeed'),
+                        array('profile' => '[0-9]+'));
+
+            // URL shortening
+
+            $m->connect('url/:id',
+                        array('action' => 'redirecturl',
+                              'id' => '[0-9]+'));
+
             // user stuff
 
             Event::handle('RouterInitialized', array($m));