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) {
$m->connect('main/sup/:seconds', array('action' => 'sup'),
array('seconds' => '[0-9]+'));
- $m->connect('main/tagother/:id', array('action' => 'tagother'));
+ $m->connect('main/tagprofile', array('action' => 'tagprofile'));
+ $m->connect('main/tagprofile/:id', array('action' => 'tagprofile'),
+ array('id' => '[0-9]+'));
$m->connect('main/oembed',
array('action' => 'oembed'));
// 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'));
}
$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));
$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}'));
-
- $m->connect('peopletag/:tag',
- array('action' => 'peopletag'),
- array('tag' => '[a-zA-Z0-9]+'));
+ array('tag' => self::REGEX_TAG));
// groups
$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));
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]+'));
// 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::INPUT_FMT,
- 'format' => '(xml|json|rss|atom)'));
+ '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::INPUT_FMT,
- 'format' => '(xml|json|rss|atom)'));
+ '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::INPUT_FMT,
- 'format' => '(xml|json|rss|atom)'));
+ '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::INPUT_FMT,
- 'format' => '(xml|json|rss|atom)'));
+ '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::INPUT_FMT,
- 'format' => '(xml|json|rss|atom)'));
+ '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',
$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::INPUT_FMT,
- 'format' => '(xml|json|rss|atom)'));
+ 'format' => '(xml|json|rss|atom|as)'));
$m->connect('api/favorites/create/:id.:format',
array('action' => 'ApiFavoriteCreate',
$m->connect('api/statusnet/groups/timeline/:id.:format',
array('action' => 'ApiTimelineGroup',
'id' => Nickname::INPUT_FMT,
- 'format' => '(xml|json|rss|atom)'));
+ 'format' => '(xml|json|rss|atom|as)'));
$m->connect('api/statusnet/groups/show.:format',
array('action' => 'ApiGroupShow',
$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)'));
+
+ // Lists (people tags)
+
+ $m->connect('api/lists/memberships.:format',
+ array('action' => 'ApiListMemberships',
+ 'format' => '(xml|json)'));
+
+ $m->connect('api/:user/lists/memberships.:format',
+ array('action' => 'ApiListMemberships',
+ 'user' => '[a-zA-Z0-9]+',
+ 'format' => '(xml|json)'));
+
+ $m->connect('api/lists/subscriptions.:format',
+ array('action' => 'ApiListSubscriptions',
+ 'format' => '(xml|json)'));
+
+ $m->connect('api/:user/lists/subscriptions.:format',
+ array('action' => 'ApiListSubscriptions',
+ 'user' => '[a-zA-Z0-9]+',
+ 'format' => '(xml|json)'));
+ $m->connect('api/lists.:format',
+ array('action' => 'ApiLists',
+ 'format' => '(xml|json)'));
+
+ $m->connect('api/:user/lists.:format',
+ array('action' => 'ApiLists',
+ 'user' => '[a-zA-Z0-9]+',
+ 'format' => '(xml|json)'));
+
+ $m->connect('api/:user/lists/:id.:format',
+ array('action' => 'ApiList',
+ 'user' => '[a-zA-Z0-9]+',
+ 'id' => '[a-zA-Z0-9]+',
+ 'format' => '(xml|json)'));
+
+ $m->connect('api/:user/lists/:id/statuses.:format',
+ array('action' => 'ApiTimelineList',
+ 'user' => '[a-zA-Z0-9]+',
+ 'id' => '[a-zA-Z0-9]+',
+ 'format' => '(xml|json|rss|atom)'));
+
+ $m->connect('api/:user/:list_id/members.:format',
+ array('action' => 'ApiListMembers',
+ 'user' => '[a-zA-Z0-9]+',
+ 'list_id' => '[a-zA-Z0-9]+',
+ 'format' => '(xml|json)'));
+
+ $m->connect('api/:user/:list_id/subscribers.:format',
+ array('action' => 'ApiListSubscribers',
+ 'user' => '[a-zA-Z0-9]+',
+ 'list_id' => '[a-zA-Z0-9]+',
+ 'format' => '(xml|json)'));
+
+ $m->connect('api/:user/:list_id/members/:id.:format',
+ array('action' => 'ApiListMember',
+ 'user' => '[a-zA-Z0-9]+',
+ 'list_id' => '[a-zA-Z0-9]+',
+ 'id' => '[a-zA-Z0-9]+',
+ 'format' => '(xml|json)'));
+
+ $m->connect('api/:user/:list_id/subscribers/:id.:format',
+ array('action' => 'ApiListSubscriber',
+ 'user' => '[a-zA-Z0-9]+',
+ 'list_id' => '[a-zA-Z0-9]+',
+ '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(
// 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'),
$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) {
$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',
array('nickname' => Nickname::DISPLAY_FMT));
}
+ // people tags
+
+ $m->connect('peopletags', array('action' => 'publicpeopletagcloud'));
+
+ $m->connect('peopletag/:tag', array('action' => 'peopletag',
+ 'tag' => self::REGEX_TAG));
+
+ $m->connect('selftag/:tag', array('action' => 'selftag',
+ 'tag' => self::REGEX_TAG));
+
+ $m->connect('main/addpeopletag', array('action' => 'addpeopletag'));
+
+ $m->connect('main/removepeopletag', array('action' => 'removepeopletag'));
+
+ $m->connect('main/profilecompletion', array('action' => 'profilecompletion'));
+
+ $m->connect('main/peopletagautocomplete', array('action' => 'peopletagautocomplete'));
+
+ $m->connect(':nickname/peopletags',
+ array('action' => 'peopletagsbyuser',
+ 'nickname' => Nickname::DISPLAY_FMT));
+
+ $m->connect(':nickname/peopletags/private',
+ array('action' => 'peopletagsbyuser',
+ 'nickname' => Nickname::DISPLAY_FMT,
+ 'private' => 1));
+
+ $m->connect(':nickname/peopletags/public',
+ array('action' => 'peopletagsbyuser',
+ 'nickname' => Nickname::DISPLAY_FMT,
+ 'public' => 1));
+
+ $m->connect(':nickname/othertags',
+ array('action' => 'peopletagsforuser',
+ 'nickname' => Nickname::DISPLAY_FMT));
+
+ $m->connect(':nickname/peopletagsubscriptions',
+ array('action' => 'peopletagsubscriptions',
+ 'nickname' => Nickname::DISPLAY_FMT));
+
+ $m->connect(':tagger/all/:tag/subscribers',
+ array('action' => 'peopletagsubscribers',
+ 'tagger' => Nickname::DISPLAY_FMT,
+ 'tag' => self::REGEX_TAG));
+
+ $m->connect(':tagger/all/:tag/tagged',
+ array('action' => 'peopletagged',
+ 'tagger' => Nickname::DISPLAY_FMT,
+ 'tag' => self::REGEX_TAG));
+
+ $m->connect(':tagger/all/:tag/edit',
+ array('action' => 'editpeopletag',
+ 'tagger' => Nickname::DISPLAY_FMT,
+ 'tag' => self::REGEX_TAG));
+
+ foreach(array('subscribe', 'unsubscribe') as $v) {
+ $m->connect('peopletag/:id/'.$v,
+ array('action' => $v.'peopletag',
+ 'id' => '[0-9]{1,64}'));
+ }
+ $m->connect('user/:tagger_id/profiletag/:id/id',
+ array('action' => 'profiletagbyid',
+ 'tagger_id' => '[0-9]+',
+ 'id' => '[0-9]+'));
+
+ $m->connect(':tagger/all/:tag',
+ array('action' => 'showprofiletag',
+ 'tagger' => Nickname::DISPLAY_FMT,
+ 'tag' => self::REGEX_TAG));
+
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));
}
$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'),
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));