/**
  * Map URLs to actions
  *
  * @param URLMapper $m path-to-action mapper
  *
  * @return boolean hook value
  */
 public function onRouterInitialized(URLMapper $m)
 {
     $m->connect('group/:nickname/inbox', array('action' => 'groupinbox'), array('nickname' => Nickname::DISPLAY_FMT));
     $m->connect('group/message/:id', array('action' => 'showgroupmessage'), array('id' => '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}'));
     $m->connect('group/:nickname/message/new', array('action' => 'newgroupmessage'), array('nickname' => Nickname::DISPLAY_FMT));
     return true;
 }
 /**
  * Hook for RouterInitialized event.
  *
  * @param URLMapper $m path-to-action mapper
  * @return boolean hook return
  */
 public function onRouterInitialized(URLMapper $m)
 {
     // Discovery actions
     $m->connect('main/amcd.json', array('action' => 'AccountManagementControlDocument'));
     $m->connect('main/amsessionstatus', array('action' => 'AccountManagementSessionStatus'));
     return true;
 }
 /**
  * Add paths to the router table
  *
  * Hook for RouterInitialized event.
  *
  * @param URLMapper $m URL mapper
  *
  * @return boolean hook return
  */
 public function onStartInitializeRouter(URLMapper $m)
 {
     $m->connect(':nickname/detail', array('action' => 'profiledetail'), array('nickname' => Nickname::DISPLAY_FMT));
     $m->connect('/settings/profile/finduser', array('action' => 'Userautocomplete'));
     $m->connect('settings/profile/detail', array('action' => 'profiledetailsettings'));
     return true;
 }
Example #4
0
 /**
  * Map URLs to actions
  *
  * @param URLMapper $m path-to-action mapper
  *
  * @return boolean hook value; true means continue processing, false means stop.
  */
 public function onRouterInitialized(URLMapper $m)
 {
     $m->connect('tag/:tag/subscribe', array('action' => 'tagsub'), array('tag' => Router::REGEX_TAG));
     $m->connect('tag/:tag/unsubscribe', array('action' => 'tagunsub'), array('tag' => Router::REGEX_TAG));
     $m->connect(':nickname/tag-subscriptions', array('action' => 'tagsubs'), array('nickname' => Nickname::DISPLAY_FMT));
     return true;
 }
 /**
  * Map URLs to actions
  *
  * @param URLMapper $m path-to-action mapper
  *
  * @return boolean hook value; true means continue processing, false means stop.
  */
 public function onRouterInitialized(URLMapper $m)
 {
     $m->connect('search/:search/subscribe', array('action' => 'searchsub'), array('search' => Router::REGEX_TAG));
     $m->connect('search/:search/unsubscribe', array('action' => 'searchunsub'), array('search' => Router::REGEX_TAG));
     $m->connect(':nickname/search-subscriptions', array('action' => 'searchsubs'), array('nickname' => Nickname::DISPLAY_FMT));
     return true;
 }
 /**
  * Add our actions to the URL router
  *
  * @param URLMapper $m URL mapper for this hit
  *
  * @return boolean hook return
  */
 public function onRouterInitialized(URLMapper $m)
 {
     $m->connect('main/flag/profile', array('action' => 'flagprofile'));
     $m->connect('main/flag/clear', array('action' => 'clearflag'));
     $m->connect('panel/profile/flag', array('action' => 'adminprofileflag'));
     return true;
 }
 /**
  * Hook for RouterInitialized event.
  *
  * @param URLMapper $m path-to-action mapper
  * @return boolean hook return
  */
 public function onRouterInitialized(URLMapper $m)
 {
     $m->connect('settings/mirror', array('action' => 'mirrorsettings'));
     $m->connect('settings/mirror/add/:provider', array('action' => 'mirrorsettings'), array('provider' => '[A-Za-z0-9_-]+'));
     $m->connect('settings/mirror/add', array('action' => 'addmirror'));
     $m->connect('settings/mirror/edit', array('action' => 'editmirror'));
     return true;
 }
 /**
  * Map URLs to actions
  *
  * @param URLMapper $m path-to-action mapper
  *
  * @return boolean hook value; true means continue processing,
  *         false means stop.
  */
 public function onRouterInitialized(URLMapper $m)
 {
     $m->connect('directory/users/:filter/sort_by/:sort/reverse/:reverse', array('action' => 'userdirectory'), 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]|(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;
 }
Example #9
0
 /**
  * Map URLs to actions
  *
  * @param URLMapper $m path-to-action mapper
  *
  * @return boolean hook value; true means continue processing, false means stop.
  */
 public function onRouterInitialized(URLMapper $m)
 {
     $UUIDregex = '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}';
     $m->connect('main/qna/newquestion', array('action' => 'qnanewquestion'));
     $m->connect('answer/qna/closequestion', array('action' => 'qnaclosequestion'));
     $m->connect('main/qna/newanswer', array('action' => 'qnanewanswer'));
     $m->connect('main/qna/reviseanswer', array('action' => 'qnareviseanswer'));
     $m->connect('question/vote/:id', array('action' => 'qnavote', 'type' => 'question'), array('id' => $UUIDregex));
     $m->connect('question/:id', array('action' => 'qnashowquestion'), array('id' => $UUIDregex));
     $m->connect('answer/vote/:id', array('action' => 'qnavote', 'type' => 'answer'), array('id' => $UUIDregex));
     $m->connect('answer/:id', array('action' => 'qnashowanswer'), array('id' => $UUIDregex));
     return true;
 }
Example #10
0
 /**
  * Add OpenID-related paths to the router table
  *
  * Hook for RouterInitialized event.
  *
  * @param URLMapper $m URL mapper
  *
  * @return boolean hook return
  */
 public function onStartInitializeRouter(URLMapper $m)
 {
     $m->connect('main/openid', array('action' => 'openidlogin'));
     $m->connect('main/openidtrust', array('action' => 'openidtrust'));
     $m->connect('settings/openid', array('action' => 'openidsettings'));
     $m->connect('index.php?action=finishopenidlogin', array('action' => 'finishopenidlogin'));
     $m->connect('index.php?action=finishaddopenid', array('action' => 'finishaddopenid'));
     $m->connect('main/openidserver', array('action' => 'openidserver'));
     $m->connect('panel/openid', array('action' => 'openidadminpanel'));
     return true;
 }
Example #11
0
 /**
  * Map URLs to actions
  *
  * @param URLMapper $m path-to-action mapper
  *
  * @return boolean hook value; true means continue processing, false means stop.
  */
 public function onRouterInitialized(URLMapper $m)
 {
     $m->connect('main/event/new', array('action' => 'newevent'));
     $m->connect('main/event/rsvp', array('action' => 'newrsvp'));
     $m->connect('main/event/rsvp/cancel', array('action' => 'cancelrsvp'));
     $m->connect('event/:id', array('action' => 'showevent'), array('id' => '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}'));
     $m->connect('rsvp/:id', array('action' => 'showrsvp'), array('id' => '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}'));
     $m->connect('main/event/updatetimes', array('action' => 'timelist'));
     $m->connect(':nickname/events', array('action' => 'events'), array('nickname' => Nickname::DISPLAY_FMT));
     return true;
 }
Example #12
0
 public function onRouterInitialized(URLMapper $m)
 {
     // Web UI actions
     $m->connect('main/repeat', array('action' => 'repeat'));
     // Share for Twitter API ("Retweet")
     $m->connect('api/statuses/retweeted_by_me.:format', array('action' => 'ApiTimelineRetweetedByMe', 'format' => '(xml|json|atom|as)'));
     $m->connect('api/statuses/retweeted_to_me.:format', array('action' => 'ApiTimelineRetweetedToMe', 'format' => '(xml|json|atom|as)'));
     $m->connect('api/statuses/retweets_of_me.:format', array('action' => 'ApiTimelineRetweetsOfMe', 'format' => '(xml|json|atom|as)'));
     $m->connect('api/statuses/retweet/:id.:format', array('action' => 'ApiStatusesRetweet', 'id' => '[0-9]+', 'format' => '(xml|json)'));
     $m->connect('api/statuses/retweets/:id.:format', array('action' => 'ApiStatusesRetweets', 'id' => '[0-9]+', 'format' => '(xml|json)'));
 }
 public function onRouterInitialized(URLMapper $m)
 {
     // web front-end actions
     $m->connect('message/new', array('action' => 'newmessage'));
     $m->connect('message/new?to=:to', array('action' => 'newmessage'), array('to' => Nickname::DISPLAY_FMT));
     $m->connect('message/:message', array('action' => 'showmessage'), array('message' => '[0-9]+'));
     // direct messages
     $m->connect('api/direct_messages.:format', array('action' => 'ApiDirectMessage', 'format' => '(xml|json|rss|atom)'));
     $m->connect('api/direct_messages/sent.:format', array('action' => 'ApiDirectMessage', 'format' => '(xml|json|rss|atom)', 'sent' => true));
     $m->connect('api/direct_messages/new.:format', array('action' => 'ApiDirectMessageNew', 'format' => '(xml|json)'));
     return true;
 }
 /**
  * Add Twitter-related paths to the router table
  *
  * Hook for RouterInitialized event.
  *
  * @param URLMapper $m path-to-action mapper
  *
  * @return boolean hook return
  */
 public function onRouterInitialized(URLMapper $m)
 {
     $m->connect('panel/twitter', array('action' => 'twitteradminpanel'));
     if (self::hasKeys()) {
         $m->connect('twitter/authorization', array('action' => 'twitterauthorization'));
         $m->connect('settings/twitter', array('action' => 'twittersettings'));
         if (common_config('twitter', 'signin')) {
             $m->connect('main/twitterlogin', array('action' => 'twitterlogin'));
         }
     }
     return true;
 }
 /**
  * Hook for RouterInitialized event.
  *
  * @param URLMapper $m path-to-action mapper
  * @return boolean hook return
  */
 public function onRouterInitialized(URLMapper $m)
 {
     $m->connect('main/channel/:channelkey/keepalive', array('action' => 'keepalivechannel'), array('channelkey' => '[a-z0-9]{32}'));
     $m->connect('main/channel/:channelkey/close', array('action' => 'closechannel'), array('channelkey' => '[a-z0-9]{32}'));
     return true;
 }
Example #16
0
 /**
  * Map URLs to actions
  *
  * This event handler lets the plugin map URLs on the site to actions (and
  * thus an action handler class). Note that the action handler class for an
  * action will be named 'FoobarAction', where action = 'foobar'. The class
  * must be loaded in the onAutoload() method.
  *
  * @param URLMapper $m path-to-action mapper
  *
  * @return boolean hook value; true means continue processing, false means stop.
  */
 public function onRouterInitialized(URLMapper $m)
 {
     $m->connect('main/hello', array('action' => 'hello'));
     return true;
 }
 /**
  * Map URLs to actions
  *
  * @param URLMapper $m path-to-action mapper
  *
  * @return boolean hook value; true means continue processing, false means stop.
  */
 public function onRouterInitialized(URLMapper $m)
 {
     $m->connect('main/train/spam', array('action' => 'train', 'category' => 'spam'));
     $m->connect('main/train/ham', array('action' => 'train', 'category' => 'ham'));
     $m->connect('main/spam', array('action' => 'spam'));
     return true;
 }
 /**
  * Hook for RouterInitialized event.
  *
  * @param URLMapper $m URL mapper
  *
  * @return boolean hook return
  */
 public function onStartInitializeRouter(URLMapper $m)
 {
     $m->connect('main/oembed/proxy', array('action' => 'oembedproxy'));
     return true;
 }
Example #19
0
 /**
  * Map URLs to actions
  *
  * @param URLMapper $m path-to-action mapper
  *
  * @return boolean hook value; true means continue processing, false means stop.
  */
 public function onRouterInitialized(URLMapper $m)
 {
     $m->connect('main/poll/new', array('action' => 'newpoll'));
     $m->connect('main/poll/:id', array('action' => 'showpoll'), array('id' => '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}'));
     $m->connect('main/poll/response/:id', array('action' => 'showpollresponse'), array('id' => '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}'));
     $m->connect('main/poll/:id/respond', array('action' => 'respondpoll'), array('id' => '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}'));
     $m->connect('settings/poll', array('action' => 'pollsettings'));
     return true;
 }
 public function onRouterInitialized(URLMapper $m)
 {
     $m->connect('main/choosethemesettings', array('action' => 'choosethemesettings'));
 }
Example #21
0
 /**
  * Hook for RouterInitialized event.
  *
  * @param URLMapper $m path-to-action mapper
  * @return boolean hook return
  */
 public function onRouterInitialized(URLMapper $m)
 {
     // Discovery actions
     $m->connect('main/ostatustag', array('action' => 'ostatustag'));
     $m->connect('main/ostatustag?nickname=:nickname', array('action' => 'ostatustag'), array('nickname' => '[A-Za-z0-9_-]+'));
     $m->connect('main/ostatus/nickname/:nickname', array('action' => 'ostatusinit'), array('nickname' => '[A-Za-z0-9_-]+'));
     $m->connect('main/ostatus/group/:group', array('action' => 'ostatusinit'), array('group' => '[A-Za-z0-9_-]+'));
     $m->connect('main/ostatus/peopletag/:peopletag/tagger/:tagger', array('action' => 'ostatusinit'), array('tagger' => '[A-Za-z0-9_-]+', 'peopletag' => '[A-Za-z0-9_-]+'));
     $m->connect('main/ostatus', array('action' => 'ostatusinit'));
     // Remote subscription actions
     $m->connect('main/ostatussub', array('action' => 'ostatussub'));
     $m->connect('main/ostatusgroup', array('action' => 'ostatusgroup'));
     $m->connect('main/ostatuspeopletag', array('action' => 'ostatuspeopletag'));
     // PuSH actions
     $m->connect('main/push/hub', array('action' => 'pushhub'));
     $m->connect('main/push/callback/:feed', array('action' => 'pushcallback'), array('feed' => '[0-9]+'));
     // Salmon endpoint
     $m->connect('main/salmon/user/:id', array('action' => 'usersalmon'), array('id' => '[0-9]+'));
     $m->connect('main/salmon/group/:id', array('action' => 'groupsalmon'), array('id' => '[0-9]+'));
     $m->connect('main/salmon/peopletag/:id', array('action' => 'peopletagsalmon'), array('id' => '[0-9]+'));
     return true;
 }
 /**
  * Map URLs to actions
  *
  * @param URLMapper $m path-to-action mapper
  *
  * @return boolean hook value; true means continue processing, false means stop.
  */
 public function onRouterInitialized(URLMapper $m)
 {
     // Always add the admin panel route
     $m->connect('panel/facebook', array('action' => 'facebookadminpanel'));
     $m->connect('main/facebooklogin', array('action' => 'facebooklogin'));
     $m->connect('main/facebookfinishlogin', array('action' => 'facebookfinishlogin'));
     $m->connect('settings/facebook', array('action' => 'facebooksettings'));
     $m->connect('facebook/deauthorize', array('action' => 'facebookdeauthorize'));
     return true;
 }
Example #23
0
 public function onRouterInitialized(URLMapper $m)
 {
     $m->connect('main/oembed', array('action' => 'oembed'));
 }
Example #24
0
 /**
  * Map URLs to actions
  *
  * @param URLMapper $m path-to-action mapper
  *
  * @return boolean hook value; true means continue processing, false means stop.
  */
 public function onRouterInitialized(URLMapper $m)
 {
     if (common_config('singleuser', 'enabled')) {
         $nickname = User::singleUserNickname();
         $m->connect('bookmarks', array('action' => 'bookmarks', 'nickname' => $nickname));
         $m->connect('bookmarks/rss', array('action' => 'bookmarksrss', 'nickname' => $nickname));
     } else {
         $m->connect(':nickname/bookmarks', array('action' => 'bookmarks'), array('nickname' => Nickname::DISPLAY_FMT));
         $m->connect(':nickname/bookmarks/rss', array('action' => 'bookmarksrss'), array('nickname' => Nickname::DISPLAY_FMT));
     }
     $m->connect('api/bookmarks/:id.:format', array('action' => 'ApiTimelineBookmarks', 'id' => Nickname::INPUT_FMT, 'format' => '(xml|json|rss|atom|as)'));
     $m->connect('main/bookmark/new', array('action' => 'newbookmark'), array('id' => '[0-9]+'));
     $m->connect('main/bookmark/popup', array('action' => 'bookmarkpopup'));
     $m->connect('main/bookmark/import', array('action' => 'importdelicious'));
     $m->connect('main/bookmark/forurl', array('action' => 'bookmarkforurl'));
     $m->connect('bookmark/:id', array('action' => 'showbookmark'), array('id' => '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}'));
     $m->connect('notice/by-url/:id', array('action' => 'noticebyurl'), array('id' => '[0-9]+'));
     return true;
 }
Example #25
0
 function initialize()
 {
     $m = new URLMapper();
     if (Event::handle('StartInitializeRouter', array(&$m))) {
         $m->connect('robots.txt', array('action' => 'robotstxt'));
         $m->connect('opensearch/people', array('action' => 'opensearch', 'type' => 'people'));
         $m->connect('opensearch/notice', array('action' => 'opensearch', 'type' => 'notice'));
         // docs
         $m->connect('doc/:title', array('action' => 'doc'));
         $m->connect('main/otp/:user_id/:token', array('action' => 'otp'), array('user_id' => '[0-9]+', 'token' => '.+'));
         // these take a code; before the main part
         foreach (array('register', 'confirmaddress', 'recoverpassword') as $c) {
             $m->connect('main/' . $c . '/:code', array('action' => $c));
         }
         // Also need a block variant accepting ID on URL for mail links
         $m->connect('main/block/:profileid', array('action' => 'block'), array('profileid' => '[0-9]+'));
         $m->connect('main/sup/:seconds', array('action' => 'sup'), array('seconds' => '[0-9]+'));
         // main stuff is repetitive
         $main = array('login', 'logout', 'register', 'subscribe', 'unsubscribe', 'cancelsubscription', 'approvesub', 'confirmaddress', 'recoverpassword', 'invite', 'favor', 'disfavor', 'sup', 'block', 'unblock', 'subedit', 'groupblock', 'groupunblock', 'sandbox', 'unsandbox', 'silence', 'unsilence', 'grantrole', 'revokerole', 'repeat', 'deleteuser', 'geocode', 'version', 'backupaccount', 'deleteaccount', 'restoreaccount', 'top');
         foreach ($main as $a) {
             $m->connect('main/' . $a, array('action' => $a));
         }
         $m->connect('main/tagprofile/:id', array('action' => 'tagprofile'), array('id' => '[0-9]+'));
         $m->connect('main/tagprofile', array('action' => 'tagprofile'));
         $m->connect('main/oembed', array('action' => 'oembed'));
         $m->connect('main/xrds', array('action' => 'publicxrds'));
         $m->connect('.well-known/host-meta', array('action' => 'hostmeta'));
         $m->connect('main/xrd', array('action' => 'userxrd'));
         // settings
         foreach (array('profile', 'avatar', 'password', 'im', 'oauthconnections', 'oauthapps', 'email', 'sms', 'url') as $s) {
             $m->connect('settings/' . $s, array('action' => $s . 'settings'));
         }
         if (common_config('oldschool', 'enabled')) {
             $m->connect('settings/oldschool', array('action' => 'oldschoolsettings'));
         }
         $m->connect('settings/oauthapps/show/:id', array('action' => 'showapplication'), array('id' => '[0-9]+'));
         $m->connect('settings/oauthapps/new', array('action' => 'newapplication'));
         $m->connect('settings/oauthapps/edit/:id', array('action' => 'editapplication'), array('id' => '[0-9]+'));
         $m->connect('settings/oauthapps/delete/:id', array('action' => 'deleteapplication'), array('id' => '[0-9]+'));
         // search
         foreach (array('group', 'people', 'notice') as $s) {
             $m->connect('search/' . $s . '?q=:q', array('action' => $s . 'search'), array('q' => '.+'));
             $m->connect('search/' . $s, array('action' => $s . 'search'));
         }
         // The second of these is needed to make the link work correctly
         // when inserted into the page. The first is needed to match the
         // route on the way in. Seems to be another Net_URL_Mapper bug to me.
         $m->connect('search/notice/rss?q=:q', array('action' => 'noticesearchrss'), array('q' => '.+'));
         $m->connect('search/notice/rss', array('action' => 'noticesearchrss'));
         $m->connect('attachment/:attachment', array('action' => 'attachment'), array('attachment' => '[0-9]+'));
         $m->connect('attachment/:attachment/ajax', array('action' => 'attachment_ajax'), array('attachment' => '[0-9]+'));
         $m->connect('attachment/:attachment/thumbnail', array('action' => 'attachment_thumbnail'), array('attachment' => '[0-9]+'));
         $m->connect('notice/new?replyto=:replyto&inreplyto=:inreplyto', array('action' => 'newnotice'), array('replyto' => Nickname::DISPLAY_FMT), array('inreplyto' => '[0-9]+'));
         $m->connect('notice/new?replyto=:replyto', array('action' => 'newnotice'), array('replyto' => Nickname::DISPLAY_FMT));
         $m->connect('notice/new', array('action' => 'newnotice'));
         $m->connect('notice/:notice/file', array('action' => 'file'), array('notice' => '[0-9]+'));
         $m->connect('notice/:notice', array('action' => 'shownotice'), array('notice' => '[0-9]+'));
         $m->connect('notice/delete/:notice', array('action' => 'deletenotice'), array('notice' => '[0-9]+'));
         $m->connect('notice/delete', array('action' => 'deletenotice'));
         $m->connect('bookmarklet/new', array('action' => 'bookmarklet'));
         // conversation
         $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('message/:message', array('action' => 'showmessage'), array('message' => '[0-9]+'));
         $m->connect('user/:id', array('action' => 'userbyid'), array('id' => '[0-9]+'));
         if (!common_config('performance', 'high')) {
             $m->connect('tags/', array('action' => 'publictagcloud'));
             $m->connect('tag/', array('action' => 'publictagcloud'));
             $m->connect('tags', array('action' => 'publictagcloud'));
             $m->connect('tag', array('action' => 'publictagcloud'));
         }
         $m->connect('tag/:tag/rss', array('action' => 'tagrss'), array('tag' => self::REGEX_TAG));
         $m->connect('tag/:tag', array('action' => 'tag'), array('tag' => self::REGEX_TAG));
         // groups
         $m->connect('group/new', array('action' => 'newgroup'));
         foreach (array('edit', 'join', 'leave', 'delete', 'cancel', 'approve') as $v) {
             $m->connect('group/:nickname/' . $v, array('action' => $v . 'group'), array('nickname' => Nickname::DISPLAY_FMT));
             $m->connect('group/:id/id/' . $v, array('action' => $v . 'group'), array('id' => '[0-9]+'));
         }
         foreach (array('members', 'logo', 'rss') as $n) {
             $m->connect('group/:nickname/' . $n, array('action' => 'group' . $n), array('nickname' => Nickname::DISPLAY_FMT));
         }
         $m->connect('group/:nickname/foaf', array('action' => 'foafgroup'), array('nickname' => Nickname::DISPLAY_FMT));
         $m->connect('group/:nickname/blocked', array('action' => 'blockedfromgroup'), array('nickname' => Nickname::DISPLAY_FMT));
         $m->connect('group/:nickname/makeadmin', 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]+'));
         $m->connect('group/:nickname', array('action' => 'showgroup'), array('nickname' => Nickname::DISPLAY_FMT));
         $m->connect('group/:nickname/', array('action' => 'showgroup'), array('nickname' => Nickname::DISPLAY_FMT));
         $m->connect('group/', array('action' => 'groups'));
         $m->connect('group', array('action' => 'groups'));
         $m->connect('groups/', array('action' => 'groups'));
         $m->connect('groups', array('action' => 'groups'));
         // Twitter-compatible API
         // 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|as)'));
         $m->connect('api/statuses/friends_timeline/:id.:format', array('action' => 'ApiTimelineFriends', 'id' => Nickname::INPUT_FMT, 'format' => '(xml|json|rss|atom|as)'));
         $m->connect('api/statuses/friends_timeline.:format', array('action' => 'ApiTimelineFriends', '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|as)'));
         $m->connect('api/statuses/home_timeline.:format', array('action' => 'ApiTimelineHome', '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|as)'));
         $m->connect('api/statuses/user_timeline.:format', array('action' => 'ApiTimelineUser', '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|as)'));
         $m->connect('api/statuses/mentions.:format', array('action' => 'ApiTimelineMentions', '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|as)'));
         $m->connect('api/statuses/replies.:format', array('action' => 'ApiTimelineMentions', 'format' => '(xml|json|rss|atom|as)'));
         $m->connect('api/statuses/retweeted_by_me.:format', array('action' => 'ApiTimelineRetweetedByMe', 'format' => '(xml|json|atom|as)'));
         $m->connect('api/statuses/retweeted_to_me.:format', array('action' => 'ApiTimelineRetweetedToMe', 'format' => '(xml|json|atom|as)'));
         $m->connect('api/statuses/retweets_of_me.:format', array('action' => 'ApiTimelineRetweetsOfMe', 'format' => '(xml|json|atom|as)'));
         $m->connect('api/statuses/friends/:id.:format', array('action' => 'ApiUserFriends', 'id' => Nickname::INPUT_FMT, 'format' => '(xml|json)'));
         $m->connect('api/statuses/friends.:format', array('action' => 'ApiUserFriends', 'format' => '(xml|json)'));
         $m->connect('api/statuses/followers/:id.:format', array('action' => 'ApiUserFollowers', 'id' => Nickname::INPUT_FMT, 'format' => '(xml|json)'));
         $m->connect('api/statuses/followers.:format', array('action' => 'ApiUserFollowers', 'format' => '(xml|json)'));
         $m->connect('api/statuses/show/:id.:format', array('action' => 'ApiStatusesShow', 'id' => '[0-9]+', 'format' => '(xml|json|atom)'));
         $m->connect('api/statuses/show.:format', array('action' => 'ApiStatusesShow', 'format' => '(xml|json|atom)'));
         $m->connect('api/statuses/update.:format', array('action' => 'ApiStatusesUpdate', 'format' => '(xml|json)'));
         $m->connect('api/statuses/destroy/:id.:format', array('action' => 'ApiStatusesDestroy', 'id' => '[0-9]+', 'format' => '(xml|json)'));
         $m->connect('api/statuses/destroy.:format', array('action' => 'ApiStatusesDestroy', 'format' => '(xml|json)'));
         $m->connect('api/statuses/retweet/:id.:format', array('action' => 'ApiStatusesRetweet', 'id' => '[0-9]+', 'format' => '(xml|json)'));
         $m->connect('api/statuses/retweets/:id.:format', array('action' => 'ApiStatusesRetweets', 'id' => '[0-9]+', 'format' => '(xml|json)'));
         // users
         $m->connect('api/users/show/:id.:format', array('action' => 'ApiUserShow', 'id' => Nickname::INPUT_FMT, 'format' => '(xml|json)'));
         $m->connect('api/users/show.:format', array('action' => 'ApiUserShow', '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
         $m->connect('api/direct_messages.:format', array('action' => 'ApiDirectMessage', 'format' => '(xml|json|rss|atom)'));
         $m->connect('api/direct_messages/sent.:format', array('action' => 'ApiDirectMessage', 'format' => '(xml|json|rss|atom)', 'sent' => true));
         $m->connect('api/direct_messages/new.:format', array('action' => 'ApiDirectMessageNew', 'format' => '(xml|json)'));
         // friendships
         $m->connect('api/friendships/show.:format', array('action' => 'ApiFriendshipsShow', 'format' => '(xml|json)'));
         $m->connect('api/friendships/exists.:format', array('action' => 'ApiFriendshipsExists', 'format' => '(xml|json)'));
         $m->connect('api/friendships/create/:id.:format', array('action' => 'ApiFriendshipsCreate', 'id' => Nickname::INPUT_FMT, 'format' => '(xml|json)'));
         $m->connect('api/friendships/create.:format', array('action' => 'ApiFriendshipsCreate', 'format' => '(xml|json)'));
         $m->connect('api/friendships/destroy/:id.:format', array('action' => 'ApiFriendshipsDestroy', 'id' => Nickname::INPUT_FMT, 'format' => '(xml|json)'));
         $m->connect('api/friendships/destroy.:format', array('action' => 'ApiFriendshipsDestroy', 'format' => '(xml|json)'));
         // Social graph
         $m->connect('api/friends/ids/:id.:format', array('action' => 'ApiUserFriends', 'ids_only' => true));
         $m->connect('api/followers/ids/:id.:format', array('action' => 'ApiUserFollowers', 'ids_only' => true));
         $m->connect('api/friends/ids.:format', array('action' => 'ApiUserFriends', 'ids_only' => true));
         $m->connect('api/followers/ids.:format', array('action' => 'ApiUserFollowers', 'ids_only' => true));
         // account
         $m->connect('api/account/verify_credentials.:format', array('action' => 'ApiAccountVerifyCredentials'));
         $m->connect('api/account/update_profile.:format', array('action' => 'ApiAccountUpdateProfile'));
         $m->connect('api/account/update_profile_image.:format', array('action' => 'ApiAccountUpdateProfileImage'));
         $m->connect('api/account/update_delivery_device.:format', array('action' => 'ApiAccountUpdateDeliveryDevice'));
         // special case where verify_credentials is called w/out a format
         $m->connect('api/account/verify_credentials', array('action' => 'ApiAccountVerifyCredentials'));
         $m->connect('api/account/rate_limit_status.:format', array('action' => 'ApiAccountRateLimitStatus'));
         // favorites
         $m->connect('api/favorites/:id.:format', array('action' => 'ApiTimelineFavorites', 'id' => Nickname::INPUT_FMT, 'format' => '(xml|json|rss|atom|as)'));
         $m->connect('api/favorites.:format', array('action' => 'ApiTimelineFavorites', 'format' => '(xml|json|rss|atom|as)'));
         $m->connect('api/favorites/create/:id.:format', array('action' => 'ApiFavoriteCreate', 'id' => '[0-9]+', 'format' => '(xml|json)'));
         $m->connect('api/favorites/destroy/:id.:format', array('action' => 'ApiFavoriteDestroy', 'id' => '[0-9]+', 'format' => '(xml|json)'));
         // blocks
         $m->connect('api/blocks/create/:id.:format', array('action' => 'ApiBlockCreate', 'id' => Nickname::INPUT_FMT, 'format' => '(xml|json)'));
         $m->connect('api/blocks/create.:format', array('action' => 'ApiBlockCreate', 'format' => '(xml|json)'));
         $m->connect('api/blocks/destroy/:id.:format', array('action' => 'ApiBlockDestroy', 'id' => Nickname::INPUT_FMT, 'format' => '(xml|json)'));
         $m->connect('api/blocks/destroy.:format', array('action' => 'ApiBlockDestroy', 'format' => '(xml|json)'));
         // help
         $m->connect('api/help/test.:format', array('action' => 'ApiHelpTest', 'format' => '(xml|json)'));
         // statusnet
         $m->connect('api/statusnet/version.:format', array('action' => 'ApiStatusnetVersion', 'format' => '(xml|json)'));
         $m->connect('api/statusnet/config.:format', array('action' => 'ApiStatusnetConfig', 'format' => '(xml|json)'));
         // For older methods, we provide "laconica" base action
         $m->connect('api/laconica/version.:format', array('action' => 'ApiStatusnetVersion', 'format' => '(xml|json)'));
         $m->connect('api/laconica/config.:format', array('action' => 'ApiStatusnetConfig', 'format' => '(xml|json)'));
         // Groups and tags are newer than 0.8.1 so no backward-compatibility
         // necessary
         // Groups
         //'list' has to be handled differently, as php will not allow a method to be named 'list'
         $m->connect('api/statusnet/groups/timeline/:id.:format', array('action' => 'ApiTimelineGroup', 'id' => Nickname::INPUT_FMT, 'format' => '(xml|json|rss|atom|as)'));
         $m->connect('api/statusnet/groups/show/:id.:format', array('action' => 'ApiGroupShow', 'id' => Nickname::INPUT_FMT, 'format' => '(xml|json)'));
         $m->connect('api/statusnet/groups/show.:format', array('action' => 'ApiGroupShow', 'format' => '(xml|json)'));
         $m->connect('api/statusnet/groups/join/:id.:format', array('action' => 'ApiGroupJoin', 'format' => '(xml|json)'));
         $m->connect('api/statusnet/groups/join.:format', array('action' => 'ApiGroupJoin', 'id' => Nickname::INPUT_FMT, 'format' => '(xml|json)'));
         $m->connect('api/statusnet/groups/leave/:id.:format', array('action' => 'ApiGroupLeave', 'format' => '(xml|json)'));
         $m->connect('api/statusnet/groups/leave.:format', array('action' => 'ApiGroupLeave', 'id' => Nickname::INPUT_FMT, 'format' => '(xml|json)'));
         $m->connect('api/statusnet/groups/is_member.:format', array('action' => 'ApiGroupIsMember', 'format' => '(xml|json)'));
         $m->connect('api/statusnet/groups/list/:id.:format', array('action' => 'ApiGroupList', 'id' => Nickname::INPUT_FMT, 'format' => '(xml|json|rss|atom)'));
         $m->connect('api/statusnet/groups/list.:format', array('action' => 'ApiGroupList', 'format' => '(xml|json|rss|atom)'));
         $m->connect('api/statusnet/groups/list_all.:format', array('action' => 'ApiGroupListAll', 'format' => '(xml|json|rss|atom)'));
         $m->connect('api/statusnet/groups/membership/:id.:format', array('action' => 'ApiGroupMembership', 'id' => Nickname::INPUT_FMT, 'format' => '(xml|json)'));
         $m->connect('api/statusnet/groups/membership.:format', array('action' => 'ApiGroupMembership', '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)'));
         $m->connect('api/statusnet/conversation/:id.:format', array('action' => 'apiconversation', 'id' => '[0-9]+', 'format' => '(xml|json|rss|atom|as)'));
         // 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/:id.:format', array('action' => 'ApiList', 'user' => '[a-zA-Z0-9]+', 'id' => '[a-zA-Z0-9]+', '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/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/: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/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/:id.:format', array('action' => 'ApiListSubscriber', '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.:format', array('action' => 'ApiListSubscribers', 'user' => '[a-zA-Z0-9]+', 'list_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|as)'));
         $m->connect('api/statusnet/tags/timeline.:format', array('action' => 'ApiTimelineTag', 'format' => '(xml|json|rss|atom|as)'));
         // media related
         /*
                     $m->connect(
                         'api/statusnet/media/upload',
                         array('action' => 'ApiMediaUpload')
                     );*/
         $m->connect('api/statusnet/media/upload.:format', array('action' => 'ApiMediaUpload', 'format' => '(xml|json)'));
         // search
         $m->connect('api/search.atom', array('action' => 'ApiSearchAtom'));
         $m->connect('api/search.json', array('action' => 'ApiSearchJSON'));
         $m->connect('api/trends.json', array('action' => 'ApiTrends'));
         $m->connect('api/oauth/request_token', array('action' => 'ApiOauthRequestToken'));
         $m->connect('api/oauth/access_token', array('action' => 'ApiOauthAccessToken'));
         $m->connect('api/oauth/authorize', array('action' => 'ApiOauthAuthorize'));
         // Admin
         $m->connect('panel/site', array('action' => 'siteadminpanel'));
         $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'), array('filename' => '[A-Za-z0-9._-]+'));
         // Common people-tag stuff
         $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'));
         // In the "root"
         if (common_config('singleuser', 'enabled')) {
             $nickname = User::singleUserNickname();
             foreach (array('subscriptions', 'subscribers', 'all', 'foaf', 'replies', 'microsummary') as $a) {
                 $m->connect($a, array('action' => $a, 'nickname' => $nickname));
             }
             foreach (array('subscriptions', 'subscribers') as $a) {
                 $m->connect($a . '/:tag', array('action' => $a, 'nickname' => $nickname), 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, 'nickname' => $nickname));
             }
             foreach (array('all', 'replies', 'favorites') as $a) {
                 $m->connect($a . '/rss', array('action' => $a . 'rss', 'nickname' => $nickname));
             }
             $m->connect('favorites', array('action' => 'showfavorites', 'nickname' => $nickname));
             $m->connect('avatar/:size', array('action' => 'avatarbynickname', 'nickname' => $nickname), array('size' => '(original|96|48|24)'));
             $m->connect('tag/:tag/rss', array('action' => 'userrss', 'nickname' => $nickname), array('tag' => self::REGEX_TAG));
             $m->connect('tag/:tag', array('action' => 'showstream', 'nickname' => $nickname), array('tag' => self::REGEX_TAG));
             $m->connect('rsd.xml', array('action' => 'rsd', 'nickname' => $nickname));
             $m->connect('', array('action' => 'showstream', 'nickname' => $nickname));
             // peopletags
             $m->connect('peopletags', array('action' => 'peopletagsbyuser'));
             $m->connect('peopletags/private', array('action' => 'peopletagsbyuser', 'private' => 1));
             $m->connect('peopletags/public', array('action' => 'peopletagsbyuser', 'public' => 1));
             $m->connect('othertags', array('action' => 'peopletagsforuser'));
             $m->connect('peopletagsubscriptions', array('action' => 'peopletagsubscriptions'));
             $m->connect('all/:tag/subscribers', array('action' => 'peopletagsubscribers', 'tag' => self::REGEX_TAG));
             $m->connect('all/:tag/tagged', array('action' => 'peopletagged', 'tag' => self::REGEX_TAG));
             $m->connect('all/:tag/edit', array('action' => 'editpeopletag', '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('all/:tag', array('action' => 'showprofiletag', 'tag' => self::REGEX_TAG));
             foreach (array('subscriptions', 'subscribers') as $a) {
                 $m->connect($a . '/:tag', array('action' => $a), array('tag' => self::REGEX_TAG));
             }
         } else {
             $m->connect('', array('action' => 'public'));
             $m->connect('rss', array('action' => 'publicrss'));
             $m->connect('featuredrss', array('action' => 'featuredrss'));
             $m->connect('favoritedrss', array('action' => 'favoritedrss'));
             $m->connect('featured/', array('action' => 'featured'));
             $m->connect('featured', array('action' => 'featured'));
             $m->connect('favorited/', array('action' => 'favorited'));
             $m->connect('favorited', array('action' => 'favorited'));
             $m->connect('rsd.xml', array('action' => 'rsd'));
             foreach (array('subscriptions', 'subscribers', 'nudge', 'all', 'foaf', 'replies', 'inbox', 'outbox', 'microsummary') 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
             $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' => self::REGEX_TAG, 'nickname' => Nickname::DISPLAY_FMT));
             }
             foreach (array('rss', 'groups') as $a) {
                 $m->connect(':nickname/' . $a, array('action' => 'user' . $a), array('nickname' => Nickname::DISPLAY_FMT));
             }
             foreach (array('all', 'replies', 'favorites') as $a) {
                 $m->connect(':nickname/' . $a . '/rss', array('action' => $a . 'rss'), array('nickname' => Nickname::DISPLAY_FMT));
             }
             $m->connect(':nickname/favorites', array('action' => 'showfavorites'), array('nickname' => Nickname::DISPLAY_FMT));
             $m->connect(':nickname/avatar/:size', array('action' => 'avatarbynickname'), array('size' => '(original|96|48|24)', 'nickname' => Nickname::DISPLAY_FMT));
             $m->connect(':nickname/tag/:tag/rss', array('action' => 'userrss'), array('nickname' => Nickname::DISPLAY_FMT), array('tag' => self::REGEX_TAG));
             $m->connect(':nickname/tag/:tag', array('action' => 'showstream'), array('nickname' => Nickname::DISPLAY_FMT), array('tag' => self::REGEX_TAG));
             $m->connect(':nickname/rsd.xml', array('action' => 'rsd'), array('nickname' => Nickname::DISPLAY_FMT));
             $m->connect(':nickname', array('action' => 'showstream'), array('nickname' => Nickname::DISPLAY_FMT));
             $m->connect(':nickname/', array('action' => 'showstream'), 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));
     }
     return $m;
 }
 public function onRouterInitialized(URLMapper $m)
 {
     $m->connect('main/confirmfirst/:code', array('action' => 'confirmfirstemail'));
     return true;
 }
 /**
  * Hook for RouterInitialized event.
  *
  * @param URLMapper $m path-to-action mapper
  * @return boolean hook return
  */
 public function onRouterInitialized(URLMapper $m)
 {
     $m->connect('favorited/:slice', array('action' => 'favoritedslice'), array('slice' => '[a-zA-Z0-9]+'));
     return true;
 }
 /**
  * Add our actions to the URL router
  *
  * @param URLMapper $m URL mapper for this hit
  *
  * @return boolean hook return
  */
 public function onRouterInitialized(URLMapper $m)
 {
     $m->connect('panel/blacklist', array('action' => 'blacklistadminpanel'));
     return true;
 }
 public function onRouterInitialized(URLMapper $m)
 {
     // Web UI actions
     $m->connect('main/favor', array('action' => 'favor'));
     $m->connect('main/disfavor', array('action' => 'disfavor'));
     if (common_config('singleuser', 'enabled')) {
         $nickname = User::singleUserNickname();
         $m->connect('favorites', array('action' => 'showfavorites', 'nickname' => $nickname));
         $m->connect('favoritesrss', array('action' => 'favoritesrss', 'nickname' => $nickname));
     } else {
         $m->connect('favoritedrss', array('action' => 'favoritedrss'));
         $m->connect('favorited/', array('action' => 'favorited'));
         $m->connect('favorited', array('action' => 'favorited'));
         $m->connect(':nickname/favorites', array('action' => 'showfavorites'), array('nickname' => Nickname::DISPLAY_FMT));
         $m->connect(':nickname/favorites/rss', array('action' => 'favoritesrss'), array('nickname' => Nickname::DISPLAY_FMT));
     }
     // Favorites for API
     $m->connect('api/favorites/create.:format', array('action' => 'ApiFavoriteCreate'), array('format' => '(xml|json)'));
     $m->connect('api/favorites/destroy.:format', array('action' => 'ApiFavoriteDestroy'), array('format' => '(xml|json)'));
     $m->connect('api/favorites/list.:format', array('action' => 'ApiTimelineFavorites'), array('format' => '(xml|json|rss|atom|as)'));
     $m->connect('api/favorites/:id.:format', array('action' => 'ApiTimelineFavorites'), array('id' => Nickname::INPUT_FMT, 'format' => '(xml|json|rss|atom|as)'));
     $m->connect('api/favorites.:format', array('action' => 'ApiTimelineFavorites'), array('format' => '(xml|json|rss|atom|as)'));
     $m->connect('api/favorites/create/:id.:format', array('action' => 'ApiFavoriteCreate'), array('id' => '[0-9]+', 'format' => '(xml|json)'));
     $m->connect('api/favorites/destroy/:id.:format', array('action' => 'ApiFavoriteDestroy'), array('id' => '[0-9]+', 'format' => '(xml|json)'));
     // AtomPub API
     $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]+'));
     // Required for qvitter API
     $m->connect('api/statuses/favs/:id.:format', array('action' => 'ApiStatusesFavs'), array('id' => '[0-9]+', 'format' => '(xml|json)'));
 }
 public function onStartInitializeRouter(URLMapper $m)
 {
     $m->connect('settings/linkback', array('action' => 'linkbacksettings'));
     return true;
 }