[ROUTES] Allow accept-header specification during router creation

Router:
- Fix calls to connect, most of them were misusing the function's params

URLMapper:
- Minor fixes
- Documentation
- Add support for accept-header specification

Plugins/*:
- Fix calls to connect
This commit is contained in:
brunoccast 2019-07-11 19:14:03 +01:00 committed by Diogo Cordeiro
parent 2032c7c1f7
commit 5c0a3102ff
48 changed files with 1023 additions and 871 deletions

116
extlib/AcceptHeader.php Normal file
View File

@ -0,0 +1,116 @@
<?php
/**
* Note : Code is released under the GNU LGPL
*
* Please do not change the header of this file
*
* This library is free software; you can redistribute it and/or modify it under the terms of the GNU
* Lesser General Public License as published by the Free Software Foundation; either version 2 of
* the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
* See the GNU Lesser General Public License for more details.
*/
/**
* The AcceptHeader page will parse and sort the different
* allowed types for the content negociations
*
* @author Pierrick Charron <pierrick@webstart.fr>
*/
class AcceptHeader extends \ArrayObject
{
/**
* Constructor
*
* @param string $header Value of the Accept header
* @return void
*/
public function __construct($header)
{
$acceptedTypes = $this->_parse($header);
usort($acceptedTypes, [$this, '_compare']);
parent::__construct($acceptedTypes);
}
/**
* Parse the accept header and return an array containing
* all the informations about the Accepted types
*
* @param string $data Value of the Accept header
* @return array
*/
private function _parse($data)
{
$array = [];
$items = explode(',', $data);
foreach ($items as $item) {
$elems = explode(';', $item);
$acceptElement = [];
$mime = current($elems);
list($type, $subtype) = explode('/', $mime);
$acceptElement['type'] = trim($type);
$acceptElement['subtype'] = trim($subtype);
$acceptElement['raw'] = $mime;
$acceptElement['params'] = [];
while (next($elems)) {
list($name, $value) = explode('=', current($elems));
$acceptElement['params'][trim($name)] = trim($value);
}
$array[] = $acceptElement;
}
return $array;
}
/**
* Compare two Accepted types with their parameters to know
* if one media type should be used instead of an other
*
* @param array $a The first media type and its parameters
* @param array $b The second media type and its parameters
* @return int
*/
private function _compare($a, $b)
{
$a_q = isset($a['params']['q']) ? floatval($a['params']['q']) : 1.0;
$b_q = isset($b['params']['q']) ? floatval($b['params']['q']) : 1.0;
if ($a_q === $b_q) {
$a_count = count($a['params']);
$b_count = count($b['params']);
if ($a_count === $b_count) {
if ($r = $this->_compareSubType($a['subtype'], $b['subtype'])) {
return $r;
} else {
return $this->_compareSubType($a['type'], $b['type']);
}
} else {
return $a_count < $b_count;
}
} else {
return $a_q < $b_q;
}
}
/**
* Compare two subtypes
*
* @param string $a First subtype to compare
* @param string $b Second subtype to compare
* @return int
*/
private function _compareSubType($a, $b)
{
if ($a === '*' && $b !== '*') {
return 1;
} elseif ($b === '*' && $a !== '*') {
return -1;
} else {
return 0;
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -60,12 +60,35 @@ class URLMapper
protected $reverse = []; protected $reverse = [];
protected $allpaths = []; protected $allpaths = [];
public function connect($path, $args, $paramPatterns = array()) /**
* Route creation.
* $acceptHeaders should be set to true when, for whatever reason,
* a path is being re-connected. The $headers list is still optional,
* in this case, given that being empty means "accept everything".
*
* @author Evan Prodromou <evan@status.net>
* @author Bruno Casteleiro <brunoccast@fc.up.pt>
* @param string $path route path
* @param array $args route action and, if needed, action settings
* @param array $paramPatterns regex patterns for path's parameters
* @param bool $acceptHeaders whether a path is being re-connected
* @param array $headers headers that should be set for route creation
* @return void
*/
public function connect(string $path, array $args, array $paramPatterns = [], bool $acceptHeaders = false, array $headers = [])
{ {
if (!array_key_exists(self::ACTION, $args)) { if (!array_key_exists(self::ACTION, $args)) {
throw new Exception(sprintf("Can't connect %s; path has no action.", $path)); throw new Exception(sprintf("Can't connect %s; path has no action.", $path));
} }
$should = true;
if ($acceptHeaders) {
// even if it shouldn't be used as a route, we still want
// to store some information to allow common_local_url
// to generate urls
$should = empty($headers) || self::should($headers);
}
$this->allpaths[] = $path; $this->allpaths[] = $path;
$action = $args[self::ACTION]; $action = $args[self::ACTION];
@ -75,15 +98,12 @@ class URLMapper
if (empty($paramNames)) { if (empty($paramNames)) {
$this->statics[$path] = $args; $this->statics[$path] = $args;
if (array_key_exists($action, $this->reverse)) { if (array_key_exists($action, $this->reverse)) {
$this->reverse[$args[self::ACTION]][] = [$args, $path]; $this->reverse[$action][] = [$args, $path];
} else { } else {
$this->reverse[$args[self::ACTION]] = [[$args, $path]]; $this->reverse[$action] = [[$args, $path]];
} }
} else { } else {
// fix for the code that still make improper use of this function's params
// Eff if I understand why some go here and some go there.
// Anyways, fixup my preconceptions
foreach ($paramNames as $name) { foreach ($paramNames as $name) {
if (!array_key_exists($name, $paramPatterns) && if (!array_key_exists($name, $paramPatterns) &&
array_key_exists($name, $args)) { array_key_exists($name, $args)) {
@ -92,16 +112,26 @@ class URLMapper
} }
} }
$regex = self::makeRegex($path, $paramPatterns); // $variables is used for path matching, so we can't store invalid routes
if ($should) {
$regex = self::makeRegex($path, $paramPatterns);
$this->variables[] = [$args, $regex, $paramNames]; if (isset($this->variables[$regex]) || !$acceptHeaders) {
$this->variables[$regex] = [$args, $paramNames];
} else {
// URLs that differ only in the attribute names will generate
// different regexes, so in order to avoid the wrong one (oldest)
// to be matched first, fresh regexes are stored at the front
$this->variables = [$regex => [$args, $paramNames]] + $this->variables;
}
}
$format = $this->makeFormat($path, $paramPatterns); $format = $this->makeFormat($path);
if (array_key_exists($action, $this->reverse)) { if (array_key_exists($action, $this->reverse)) {
$this->reverse[$args[self::ACTION]][] = [$args, $format, $paramNames]; $this->reverse[$action][] = [$args, $format, $paramNames];
} else { } else {
$this->reverse[$args[self::ACTION]] = [[$args, $format, $paramNames]]; $this->reverse[$action] = [[$args, $format, $paramNames]];
} }
} }
} }
@ -112,8 +142,8 @@ class URLMapper
return $this->statics[$path]; return $this->statics[$path];
} }
foreach ($this->variables as $pattern) { foreach ($this->variables as $regex => $pattern) {
list($args, $regex, $paramNames) = $pattern; list($args, $paramNames) = $pattern;
if (preg_match($regex, $path, $match)) { if (preg_match($regex, $path, $match)) {
$results = $args; $results = $args;
foreach ($paramNames as $name) { foreach ($paramNames as $name) {
@ -220,7 +250,7 @@ class URLMapper
return $regex; return $regex;
} }
protected function makeFormat($path, $paramPatterns) protected function makeFormat($path)
{ {
$format = preg_replace('/(:\w+)/', '%s', $path); $format = preg_replace('/(:\w+)/', '%s', $path);
@ -229,7 +259,33 @@ class URLMapper
public function getPaths() public function getPaths()
{ {
return $this->allpaths; return array_unique($this->allpaths);
}
/**
* Determines whether the route should or not be overwrited.
* If ACCEPT header isn't set, false will be returned.
*
* @author Diogo Cordeiro <diogo@fc.up.pt>
* @param array $headers accept-headers that should be set to
* mark the route for overwrite. This array must be associative
* and contain the headers in the value-set.
* @return bool true if should overwrite, false otherwise
*/
public static function should(array $headers): bool
{
if (!isset($_SERVER['HTTP_ACCEPT'])) {
return false;
}
$acceptHeader = new AcceptHeader($_SERVER['HTTP_ACCEPT']);
foreach ($acceptHeader as $ah) {
if (isset($headers[$ah['raw']])) {
return true;
}
}
return false;
} }
} }

View File

@ -52,9 +52,9 @@ class AccountManagerPlugin extends Plugin
{ {
// Discovery actions // Discovery actions
$m->connect('main/amcd.json', $m->connect('main/amcd.json',
array('action' => 'AccountManagementControlDocument')); ['action' => 'AccountManagementControlDocument']);
$m->connect('main/amsessionstatus', $m->connect('main/amsessionstatus',
array('action' => 'AccountManagementSessionStatus')); ['action' => 'AccountManagementSessionStatus']);
return true; return true;
} }

View File

@ -185,11 +185,13 @@ class ActivitySpamPlugin extends Plugin
public function onRouterInitialized(URLMapper $m) public function onRouterInitialized(URLMapper $m)
{ {
$m->connect('main/train/spam', $m->connect('main/train/spam',
array('action' => 'train', 'category' => 'spam')); ['action' => 'train',
'category' => 'spam']);
$m->connect('main/train/ham', $m->connect('main/train/ham',
array('action' => 'train', 'category' => 'ham')); ['action' => 'train',
'category' => 'ham']);
$m->connect('main/spam', $m->connect('main/spam',
array('action' => 'spam')); ['action' => 'spam']);
return true; return true;
} }

View File

@ -50,7 +50,8 @@ class AutocompletePlugin extends Plugin
function onRouterInitialized($m) function onRouterInitialized($m)
{ {
$m->connect('main/autocomplete/suggest', array('action'=>'autocomplete')); $m->connect('main/autocomplete/suggest',
['action' => 'autocomplete']);
} }
function onPluginVersion(array &$versions) function onPluginVersion(array &$versions)

View File

@ -169,7 +169,7 @@ class BitlyUrlPlugin extends UrlShortenerPlugin
public function onRouterInitialized(URLMapper $m) public function onRouterInitialized(URLMapper $m)
{ {
$m->connect('panel/bitly', $m->connect('panel/bitly',
array('action' => 'bitlyadminpanel')); ['action' => 'bitlyadminpanel']);
return true; return true;
} }

View File

@ -251,7 +251,8 @@ class BlacklistPlugin extends Plugin
*/ */
public function onRouterInitialized(URLMapper $m) public function onRouterInitialized(URLMapper $m)
{ {
$m->connect('panel/blacklist', array('action' => 'blacklistadminpanel')); $m->connect('panel/blacklist',
['action' => 'blacklistadminpanel']);
return true; return true;
} }

View File

@ -114,43 +114,44 @@ class BookmarkPlugin extends MicroAppPlugin
if (common_config('singleuser', 'enabled')) { if (common_config('singleuser', 'enabled')) {
$nickname = User::singleUserNickname(); $nickname = User::singleUserNickname();
$m->connect('bookmarks', $m->connect('bookmarks',
array('action' => 'bookmarks', 'nickname' => $nickname)); ['action' => 'bookmarks',
'nickname' => $nickname]);
$m->connect('bookmarks/rss', $m->connect('bookmarks/rss',
array('action' => 'bookmarksrss', 'nickname' => $nickname)); ['action' => 'bookmarksrss',
'nickname' => $nickname]);
} else { } else {
$m->connect(':nickname/bookmarks', $m->connect(':nickname/bookmarks',
array('action' => 'bookmarks'), ['action' => 'bookmarks'],
array('nickname' => Nickname::DISPLAY_FMT)); ['nickname' => Nickname::DISPLAY_FMT]);
$m->connect(':nickname/bookmarks/rss', $m->connect(':nickname/bookmarks/rss',
array('action' => 'bookmarksrss'), ['action' => 'bookmarksrss'],
array('nickname' => Nickname::DISPLAY_FMT)); ['nickname' => Nickname::DISPLAY_FMT]);
} }
$m->connect('api/bookmarks/:id.:format', $m->connect('api/bookmarks/:id.:format',
array('action' => 'ApiTimelineBookmarks', ['action' => 'ApiTimelineBookmarks'],
'id' => Nickname::INPUT_FMT, ['id' => Nickname::INPUT_FMT,
'format' => '(xml|json|rss|atom|as)')); 'format' => '(xml|json|rss|atom|as)']);
$m->connect('main/bookmark/new', $m->connect('main/bookmark/new',
array('action' => 'newbookmark'), ['action' => 'newbookmark']);
array('id' => '[0-9]+'));
$m->connect('main/bookmark/popup', $m->connect('main/bookmark/popup',
array('action' => 'bookmarkpopup')); ['action' => 'bookmarkpopup']);
$m->connect('main/bookmark/import', $m->connect('main/bookmark/import',
array('action' => 'importdelicious')); ['action' => 'importdelicious']);
$m->connect('main/bookmark/forurl', $m->connect('main/bookmark/forurl',
array('action' => 'bookmarkforurl')); ['action' => 'bookmarkforurl']);
$m->connect('bookmark/:id', $m->connect('bookmark/:id',
array('action' => 'showbookmark'), ['action' => 'showbookmark'],
array('id' => '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}')); ['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', $m->connect('notice/by-url/:id',
array('action' => 'noticebyurl'), ['action' => 'noticebyurl'],
array('id' => '[0-9]+')); ['id' => '[0-9]+']);
return true; return true;
} }

View File

@ -26,7 +26,7 @@ class ChooseThemePlugin extends Plugin {
const PLUGIN_VERSION = '0.1.0'; const PLUGIN_VERSION = '0.1.0';
public function onRouterInitialized(URLMapper $m) { public function onRouterInitialized(URLMapper $m) {
$m->connect('main/choosethemesettings', array('action' => 'choosethemesettings')); $m->connect('main/choosethemesettings', ['action' => 'choosethemesettings']);
} }
public function onPluginVersion(array &$versions) { public function onPluginVersion(array &$versions) {

View File

@ -51,7 +51,8 @@ class ClientSideShortenPlugin extends Plugin
function onRouterInitialized($m) function onRouterInitialized($m)
{ {
if (common_logged_in()) { if (common_logged_in()) {
$m->connect('plugins/ClientSideShorten/shorten', array('action'=>'shorten')); $m->connect('plugins/ClientSideShorten/shorten',
['action'=>'shorten']);
} }
} }

View File

@ -36,23 +36,25 @@ class DirectMessagePlugin extends Plugin
public function onRouterInitialized(URLMapper $m) public function onRouterInitialized(URLMapper $m)
{ {
// web front-end actions // web front-end actions
$m->connect('message/new', array('action' => 'newmessage')); $m->connect('message/new', ['action' => 'newmessage']);
$m->connect('message/new?to=:to', array('action' => 'newmessage'), array('to' => Nickname::DISPLAY_FMT)); $m->connect('message/new?to=:to',
['action' => 'newmessage'],
['to' => Nickname::DISPLAY_FMT]);
$m->connect('message/:message', $m->connect('message/:message',
array('action' => 'showmessage'), ['action' => 'showmessage'],
array('message' => '[0-9]+')); ['message' => '[0-9]+']);
// direct messages // direct messages
$m->connect('api/direct_messages.:format', $m->connect('api/direct_messages.:format',
array('action' => 'ApiDirectMessage', ['action' => 'ApiDirectMessage'],
'format' => '(xml|json|rss|atom)')); ['format' => '(xml|json|rss|atom)']);
$m->connect('api/direct_messages/sent.:format', $m->connect('api/direct_messages/sent.:format',
array('action' => 'ApiDirectMessage', ['action' => 'ApiDirectMessage',
'format' => '(xml|json|rss|atom)', 'sent' => true],
'sent' => true)); ['format' => '(xml|json|rss|atom)']);
$m->connect('api/direct_messages/new.:format', $m->connect('api/direct_messages/new.:format',
array('action' => 'ApiDirectMessageNew', ['action' => 'ApiDirectMessageNew'],
'format' => '(xml|json)')); ['format' => '(xml|json)']);
return true; return true;
} }

View File

@ -81,62 +81,42 @@ class DirectoryPlugin extends Plugin
public function onRouterInitialized(URLMapper $m) public function onRouterInitialized(URLMapper $m)
{ {
$m->connect( $m->connect('directory/users/:filter/sort_by/:sort/reverse/:reverse',
'directory/users/:filter/sort_by/:sort/reverse/:reverse', ['action' => 'userdirectory'],
array('action' => 'userdirectory'), ['filter' => '[0-9a-zA-Z]|(0-9)',
array('filter' => '[0-9a-zA-Z]|(0-9)'), 'sort' => '[a-z]+',
array('sort' => '[a-z]+'), 'reverse' => '[0-9]']);
array('reverse' => '[0-9]')
);
$m->connect( $m->connect('directory/users/:filter/sort_by/:sort',
'directory/users/:filter/sort_by/:sort', ['action' => 'userdirectory'],
array('action' => 'userdirectory'), ['filter' => '[0-9a-zA-Z]|(0-9)',
array('filter' => '[0-9a-zA-Z]|(0-9)'), 'sort' => '[a-z]+']);
array('sort' => '[a-z]+')
);
$m->connect('directory/users/:filter',
$m->connect( ['action' => 'userdirectory'],
'directory/users/:filter', ['filter' => '[0-9a-zA-Z]|(0-9)']);
array('action' => 'userdirectory'),
array('filter' => '[0-9a-zA-Z]|(0-9)')
);
$m->connect( $m->connect('directory/users/sort_by/:sort/reverse/:reverse',
'directory/users/sort_by/:sort/reverse/:reverse', ['action' => 'userdirectory'],
array('action' => 'userdirectory'), ['sort' => '[a-z]+',
array('sort' => '[a-z]+'), 'reverse' => '[0-9]']);
array('reverse' => '[0-9]')
);
$m->connect( $m->connect('directory/users/sort_by/:sort',
'directory/users/sort_by/:sort', ['action' => 'userdirectory'],
array('action' => 'userdirectory'), ['sort' => '[a-z]+']);
array('sort' => '[a-z]+')
);
$m->connect( $m->connect('directory/users',
'directory/users', ['action' => 'userdirectory']);
array('action' => 'userdirectory')
);
$m->connect( $m->connect('groups/:filter',
'groups/:filter', ['action' => 'groupdirectory'],
array('action' => 'groupdirectory'), ['filter' => '[0-9a-zA-Z]|(0-9)']);
array('filter' => '[0-9a-zA-Z]|(0-9)')
);
$m->connect( $m->connect('groups',
'groups', ['action' => 'groupdirectory']);
array('action' => 'groupdirectory')
);
$m->connect(
'groups/all',
array('action' => 'groupdirectory')
);
$m->connect('groups/all',
['action' => 'groupdirectory']);
return true; return true;
} }

View File

@ -131,7 +131,7 @@ class DomainStatusNetworkPlugin extends Plugin
if (common_config('globalapi', 'enabled')) { if (common_config('globalapi', 'enabled')) {
foreach (array('register', 'login', 'recover') as $method) { foreach (array('register', 'login', 'recover') as $method) {
$m->connect('api/statusnet/global/'.$method, $m->connect('api/statusnet/global/'.$method,
array('action' => 'global'.$method)); ['action' => 'global'.$method]);
} }
} }
return true; return true;

View File

@ -78,24 +78,24 @@ class EventPlugin extends ActivityVerbHandlerPlugin
public function onRouterInitialized(URLMapper $m) public function onRouterInitialized(URLMapper $m)
{ {
$m->connect('main/event/new', $m->connect('main/event/new',
array('action' => 'newevent')); ['action' => 'newevent']);
$m->connect('main/event/rsvp', $m->connect('main/event/rsvp',
array('action' => 'rsvp')); ['action' => 'rsvp']);
$m->connect('main/event/rsvp/:rsvp', // this will probably change to include event notice id $m->connect('main/event/rsvp/:rsvp', // this will probably change to include event notice id
array('action' => 'rsvp'), ['action' => 'rsvp'],
array('rsvp' => '[a-z]+')); ['rsvp' => '[a-z]+']);
$m->connect('event/:id', $m->connect('event/:id',
array('action' => 'showevent'), ['action' => 'showevent'],
array('id' => '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}')); ['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', $m->connect('rsvp/:id',
array('action' => 'showrsvp'), ['action' => 'showrsvp'],
array('id' => '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}')); ['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', $m->connect('main/event/updatetimes',
array('action' => 'timelist')); ['action' => 'timelist']);
$m->connect(':nickname/events', $m->connect(':nickname/events',
array('action' => 'events'), ['action' => 'events'],
array('nickname' => Nickname::DISPLAY_FMT)); ['nickname' => Nickname::DISPLAY_FMT]);
return true; return true;
} }

View File

@ -114,72 +114,77 @@ class FavoritePlugin extends ActivityVerbHandlerPlugin
public function onRouterInitialized(URLMapper $m) public function onRouterInitialized(URLMapper $m)
{ {
// Web UI actions // Web UI actions
$m->connect('main/favor', array('action' => 'favor')); $m->connect('main/favor',
$m->connect('main/disfavor', array('action' => 'disfavor')); ['action' => 'favor']);
$m->connect('main/disfavor',
['action' => 'disfavor']);
if (common_config('singleuser', 'enabled')) { if (common_config('singleuser', 'enabled')) {
$nickname = User::singleUserNickname(); $nickname = User::singleUserNickname();
$m->connect('favorites', $m->connect('favorites',
array('action' => 'showfavorites', ['action' => 'showfavorites',
'nickname' => $nickname)); 'nickname' => $nickname]);
$m->connect('favoritesrss', $m->connect('favoritesrss',
array('action' => 'favoritesrss', ['action' => 'favoritesrss',
'nickname' => $nickname)); 'nickname' => $nickname]);
} else { } else {
$m->connect('favoritedrss', array('action' => 'favoritedrss')); $m->connect('favoritedrss',
$m->connect('favorited/', array('action' => 'favorited')); ['action' => 'favoritedrss']);
$m->connect('favorited', array('action' => 'favorited')); $m->connect('favorited/',
['action' => 'favorited']);
$m->connect('favorited',
['action' => 'favorited']);
$m->connect(':nickname/favorites', $m->connect(':nickname/favorites',
array('action' => 'showfavorites'), ['action' => 'showfavorites'],
array('nickname' => Nickname::DISPLAY_FMT)); ['nickname' => Nickname::DISPLAY_FMT]);
$m->connect(':nickname/favorites/rss', $m->connect(':nickname/favorites/rss',
array('action' => 'favoritesrss'), ['action' => 'favoritesrss'],
array('nickname' => Nickname::DISPLAY_FMT)); ['nickname' => Nickname::DISPLAY_FMT]);
} }
// Favorites for API // Favorites for API
$m->connect('api/favorites/create.:format', $m->connect('api/favorites/create.:format',
array('action' => 'ApiFavoriteCreate'), ['action' => 'ApiFavoriteCreate'],
array('format' => '(xml|json)')); ['format' => '(xml|json)']);
$m->connect('api/favorites/destroy.:format', $m->connect('api/favorites/destroy.:format',
array('action' => 'ApiFavoriteDestroy'), ['action' => 'ApiFavoriteDestroy'],
array('format' => '(xml|json)')); ['format' => '(xml|json)']);
$m->connect('api/favorites/list.:format', $m->connect('api/favorites/list.:format',
array('action' => 'ApiTimelineFavorites'), ['action' => 'ApiTimelineFavorites'],
array('format' => '(xml|json|rss|atom|as)')); ['format' => '(xml|json|rss|atom|as)']);
$m->connect('api/favorites/:id.:format', $m->connect('api/favorites/:id.:format',
array('action' => 'ApiTimelineFavorites'), ['action' => 'ApiTimelineFavorites'],
array('id' => Nickname::INPUT_FMT, ['id' => Nickname::INPUT_FMT,
'format' => '(xml|json|rss|atom|as)')); 'format' => '(xml|json|rss|atom|as)']);
$m->connect('api/favorites.:format', $m->connect('api/favorites.:format',
array('action' => 'ApiTimelineFavorites'), ['action' => 'ApiTimelineFavorites'],
array('format' => '(xml|json|rss|atom|as)')); ['format' => '(xml|json|rss|atom|as)']);
$m->connect('api/favorites/create/:id.:format', $m->connect('api/favorites/create/:id.:format',
array('action' => 'ApiFavoriteCreate'), ['action' => 'ApiFavoriteCreate'],
array('id' => '[0-9]+', ['id' => '[0-9]+',
'format' => '(xml|json)')); 'format' => '(xml|json)']);
$m->connect('api/favorites/destroy/:id.:format', $m->connect('api/favorites/destroy/:id.:format',
array('action' => 'ApiFavoriteDestroy'), ['action' => 'ApiFavoriteDestroy'],
array('id' => '[0-9]+', ['id' => '[0-9]+',
'format' => '(xml|json)')); 'format' => '(xml|json)']);
// AtomPub API // AtomPub API
$m->connect('api/statusnet/app/favorites/:profile/:notice.atom', $m->connect('api/statusnet/app/favorites/:profile/:notice.atom',
array('action' => 'AtomPubShowFavorite'), ['action' => 'AtomPubShowFavorite'],
array('profile' => '[0-9]+', ['profile' => '[0-9]+',
'notice' => '[0-9]+')); 'notice' => '[0-9]+']);
$m->connect('api/statusnet/app/favorites/:profile.atom', $m->connect('api/statusnet/app/favorites/:profile.atom',
array('action' => 'AtomPubFavoriteFeed'), ['action' => 'AtomPubFavoriteFeed'],
array('profile' => '[0-9]+')); ['profile' => '[0-9]+']);
// Required for qvitter API // Required for qvitter API
$m->connect('api/statuses/favs/:id.:format', $m->connect('api/statuses/favs/:id.:format',
array('action' => 'ApiStatusesFavs'), ['action' => 'ApiStatusesFavs'],
array('id' => '[0-9]+', ['id' => '[0-9]+',
'format' => '(xml|json)')); 'format' => '(xml|json)']);
} }
// FIXME: Set this to abstract public in lib/activityhandlerplugin.php ddwhen all plugins have migrated! // FIXME: Set this to abstract public in lib/activityhandlerplugin.php ddwhen all plugins have migrated!

View File

@ -46,8 +46,8 @@ class GNUsocialPhotoPlugin extends MicroAppPlugin
function onRouterInitialized($m) function onRouterInitialized($m)
{ {
$m->connect('main/photo/new', array('action' => 'newphoto')); $m->connect('main/photo/new', ['action' => 'newphoto']);
$m->connect('main/photo/:id', array('action' => 'showphoto')); $m->connect('main/photo/:id', ['action' => 'showphoto']);
return true; return true;
} }

View File

@ -46,11 +46,11 @@ class GNUsocialPhotosPlugin extends Plugin
function onRouterInitialized($m) function onRouterInitialized($m)
{ {
$m->connect(':nickname/photos', array('action' => 'photos')); $m->connect(':nickname/photos', ['action' => 'photos']);
$m->connect(':nickname/photos/:albumid', array('action' => 'photos')); $m->connect(':nickname/photos/:albumid', ['action' => 'photos']);
$m->connect('main/uploadphoto', array('action' => 'photoupload')); $m->connect('main/uploadphoto', ['action' => 'photoupload']);
$m->connect('photo/:photoid', array('action' => 'photo')); $m->connect('photo/:photoid', ['action' => 'photo']);
$m->connect('editphoto/:photoid', array('action' => 'editphoto')); $m->connect('editphoto/:photoid', ['action' => 'editphoto']);
return true; return true;
} }

View File

@ -45,9 +45,9 @@ class GNUsocialProfileExtensionsPlugin extends Plugin
function onRouterInitialized($m) function onRouterInitialized($m)
{ {
$m->connect(':nickname/bio', array('action' => 'bio')); $m->connect(':nickname/bio', ['action' => 'bio']);
$m->connect('admin/profilefields', array('action' => 'profilefieldsAdminPanel')); $m->connect('admin/profilefields', ['action' => 'profilefieldsAdminPanel']);
$m->connect('notice/respond', array('action' => 'newresponse')); $m->connect('notice/respond', ['action' => 'newresponse']);
return true; return true;
} }

View File

@ -46,8 +46,8 @@ class GNUsocialVideoPlugin extends MicroAppPlugin
function onRouterInitialized($m) function onRouterInitialized($m)
{ {
$m->connect('main/postvideo', array('action' => 'postvideo')); $m->connect('main/postvideo', ['action' => 'postvideo']);
$m->connect('showvideo/:id', array('action' => 'showvideo')); $m->connect('showvideo/:id', ['action' => 'showvideo']);
return true; return true;
} }

View File

@ -37,8 +37,8 @@ class GroupFavoritedPlugin extends Plugin
function onRouterInitialized(URLMapper $m) function onRouterInitialized(URLMapper $m)
{ {
$m->connect('group/:nickname/favorited', $m->connect('group/:nickname/favorited',
array('action' => 'groupfavorited'), ['action' => 'groupfavorited'],
array('nickname' => '[a-zA-Z0-9]+')); ['nickname' => '[a-zA-Z0-9]+']);
return true; return true;
} }

View File

@ -79,16 +79,16 @@ class GroupPrivateMessagePlugin extends Plugin
public function onRouterInitialized(URLMapper $m) public function onRouterInitialized(URLMapper $m)
{ {
$m->connect('group/:nickname/inbox', $m->connect('group/:nickname/inbox',
array('action' => 'groupinbox'), ['action' => 'groupinbox'],
array('nickname' => Nickname::DISPLAY_FMT)); ['nickname' => Nickname::DISPLAY_FMT]);
$m->connect('group/message/:id', $m->connect('group/message/:id',
array('action' => 'showgroupmessage'), ['action' => 'showgroupmessage'],
array('id' => '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}')); ['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', $m->connect('group/:nickname/message/new',
array('action' => 'newgroupmessage'), ['action' => 'newgroupmessage'],
array('nickname' => Nickname::DISPLAY_FMT)); ['nickname' => Nickname::DISPLAY_FMT]);
return true; return true;
} }

View File

@ -338,8 +338,10 @@ class LinkbackPlugin extends Plugin
public function onRouterInitialized(URLMapper $m) public function onRouterInitialized(URLMapper $m)
{ {
$m->connect('main/linkback/webmention', array('action' => 'webmention')); $m->connect('main/linkback/webmention',
$m->connect('main/linkback/pingback', array('action' => 'pingback')); ['action' => 'webmention']);
$m->connect('main/linkback/pingback',
['action' => 'pingback']);
} }
public function onStartShowHTML($action) public function onStartShowHTML($action)

View File

@ -66,11 +66,11 @@ class MapstractionPlugin extends Plugin
function onRouterInitialized($m) function onRouterInitialized($m)
{ {
$m->connect(':nickname/all/map', $m->connect(':nickname/all/map',
array('action' => 'allmap'), ['action' => 'allmap'],
array('nickname' => Nickname::DISPLAY_FMT)); ['nickname' => Nickname::DISPLAY_FMT]);
$m->connect(':nickname/map', $m->connect(':nickname/map',
array('action' => 'usermap'), ['action' => 'usermap'],
array('nickname' => Nickname::DISPLAY_FMT)); ['nickname' => Nickname::DISPLAY_FMT]);
return true; return true;
} }

View File

@ -10,19 +10,11 @@ class NodeinfoPlugin extends Plugin
public function onRouterInitialized($m) public function onRouterInitialized($m)
{ {
$m->connect( $m->connect('.well-known/nodeinfo',
'.well-known/nodeinfo', ['action' => 'nodeinfojrd']);
array(
'action' => 'nodeinfojrd'
)
);
$m->connect( $m->connect('main/nodeinfo/2.0',
'main/nodeinfo/2.0', ['action' => 'nodeinfo_2_0']);
array(
'action' => 'nodeinfo_2_0'
)
);
return true; return true;
} }

View File

@ -42,44 +42,48 @@ class OStatusPlugin extends Plugin
{ {
// Discovery actions // Discovery actions
$m->connect('main/ostatustag', $m->connect('main/ostatustag',
array('action' => 'ostatustag')); ['action' => 'ostatustag']);
$m->connect('main/ostatustag?nickname=:nickname', $m->connect('main/ostatustag?nickname=:nickname',
array('action' => 'ostatustag'), array('nickname' => '[A-Za-z0-9_-]+')); ['action' => 'ostatustag'],
['nickname' => '[A-Za-z0-9_-]+']);
$m->connect('main/ostatus/nickname/:nickname', $m->connect('main/ostatus/nickname/:nickname',
array('action' => 'ostatusinit'), array('nickname' => '[A-Za-z0-9_-]+')); ['action' => 'ostatusinit'],
['nickname' => '[A-Za-z0-9_-]+']);
$m->connect('main/ostatus/group/:group', $m->connect('main/ostatus/group/:group',
array('action' => 'ostatusinit'), array('group' => '[A-Za-z0-9_-]+')); ['action' => 'ostatusinit'],
['group' => '[A-Za-z0-9_-]+']);
$m->connect('main/ostatus/peopletag/:peopletag/tagger/:tagger', $m->connect('main/ostatus/peopletag/:peopletag/tagger/:tagger',
array('action' => 'ostatusinit'), array('tagger' => '[A-Za-z0-9_-]+', ['action' => 'ostatusinit'],
'peopletag' => '[A-Za-z0-9_-]+')); ['tagger' => '[A-Za-z0-9_-]+',
'peopletag' => '[A-Za-z0-9_-]+']);
$m->connect('main/ostatus', $m->connect('main/ostatus',
array('action' => 'ostatusinit')); ['action' => 'ostatusinit']);
// Remote subscription actions // Remote subscription actions
$m->connect('main/ostatussub', $m->connect('main/ostatussub',
array('action' => 'ostatussub')); ['action' => 'ostatussub']);
$m->connect('main/ostatusgroup', $m->connect('main/ostatusgroup',
array('action' => 'ostatusgroup')); ['action' => 'ostatusgroup']);
$m->connect('main/ostatuspeopletag', $m->connect('main/ostatuspeopletag',
array('action' => 'ostatuspeopletag')); ['action' => 'ostatuspeopletag']);
// WebSub actions // WebSub actions
$m->connect('main/push/hub', array('action' => 'pushhub')); $m->connect('main/push/hub', ['action' => 'pushhub']);
$m->connect('main/push/callback/:feed', $m->connect('main/push/callback/:feed',
array('action' => 'pushcallback'), ['action' => 'pushcallback'],
array('feed' => '[0-9]+')); ['feed' => '[0-9]+']);
// Salmon endpoint // Salmon endpoint
$m->connect('main/salmon/user/:id', $m->connect('main/salmon/user/:id',
array('action' => 'usersalmon'), ['action' => 'usersalmon'],
array('id' => '[0-9]+')); ['id' => '[0-9]+']);
$m->connect('main/salmon/group/:id', $m->connect('main/salmon/group/:id',
array('action' => 'groupsalmon'), ['action' => 'groupsalmon'],
array('id' => '[0-9]+')); ['id' => '[0-9]+']);
$m->connect('main/salmon/peopletag/:id', $m->connect('main/salmon/peopletag/:id',
array('action' => 'peopletagsalmon'), ['action' => 'peopletagsalmon'],
array('id' => '[0-9]+')); ['id' => '[0-9]+']);
return true; return true;
} }

View File

@ -84,7 +84,7 @@ class OembedPlugin extends Plugin
*/ */
public function onRouterInitialized(URLMapper $m) public function onRouterInitialized(URLMapper $m)
{ {
$m->connect('main/oembed', array('action' => 'oembed')); $m->connect('main/oembed', ['action' => 'oembed']);
} }
/** /**

View File

@ -54,7 +54,7 @@ class OfflineBackupPlugin extends Plugin
function onRouterInitialized($m) function onRouterInitialized($m)
{ {
$m->connect('main/backupaccount', $m->connect('main/backupaccount',
array('action' => 'offlinebackup')); ['action' => 'offlinebackup']);
return true; return true;
} }

View File

@ -178,7 +178,7 @@ ENDOFSCRIPT;
function onRouterInitialized($m) function onRouterInitialized($m)
{ {
$m->connect('panel/openx', $m->connect('panel/openx',
array('action' => 'openxadminpanel')); ['action' => 'openxadminpanel']);
return true; return true;
} }

View File

@ -10,7 +10,8 @@ class OpportunisticQMPlugin extends Plugin {
public function onRouterInitialized($m) public function onRouterInitialized($m)
{ {
$m->connect('main/runqueue', array('action' => 'runqueue')); $m->connect('main/runqueue',
['action' => 'runqueue']);
} }
/** /**

View File

@ -92,33 +92,23 @@ class PollPlugin extends MicroAppPlugin
*/ */
public function onRouterInitialized(URLMapper $m) public function onRouterInitialized(URLMapper $m)
{ {
$m->connect( $m->connect('main/poll/new',
'main/poll/new', ['action' => 'newpoll']);
array('action' => 'newpoll')
);
$m->connect( $m->connect('main/poll/:id',
'main/poll/:id', ['action' => 'showpoll'],
array('action' => 'showpoll'), ['id' => '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}']);
array('id' => '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}')
);
$m->connect( $m->connect('main/poll/response/:id',
'main/poll/response/:id', ['action' => 'showpollresponse'],
array('action' => 'showpollresponse'), ['id' => '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}']);
array('id' => '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}')
);
$m->connect( $m->connect('main/poll/:id/respond',
'main/poll/:id/respond', ['action' => 'respondpoll'],
array('action' => 'respondpoll'), ['id' => '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}']);
array('id' => '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}')
);
$m->connect( $m->connect('settings/poll',
'settings/poll', ['action' => 'pollsettings']);
array('action' => 'pollsettings')
);
return true; return true;
} }

View File

@ -85,42 +85,35 @@ class QnAPlugin extends MicroAppPlugin
{ {
$UUIDregex = '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}'; $UUIDregex = '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}';
$m->connect( $m->connect('main/qna/newquestion',
'main/qna/newquestion', ['action' => 'qnanewquestion']);
array('action' => 'qnanewquestion')
); $m->connect('answer/qna/closequestion',
$m->connect( ['action' => 'qnaclosequestion']);
'answer/qna/closequestion',
array('action' => 'qnaclosequestion') $m->connect('main/qna/newanswer',
); ['action' => 'qnanewanswer']);
$m->connect(
'main/qna/newanswer', $m->connect('main/qna/reviseanswer',
array('action' => 'qnanewanswer') ['action' => 'qnareviseanswer']);
);
$m->connect( $m->connect('question/vote/:id',
'main/qna/reviseanswer', ['action' => 'qnavote',
array('action' => 'qnareviseanswer') 'type' => 'question'],
); ['id' => $UUIDregex]);
$m->connect(
'question/vote/:id', $m->connect('question/:id',
array('action' => 'qnavote', 'type' => 'question'), ['action' => 'qnashowquestion'],
array('id' => $UUIDregex) ['id' => $UUIDregex]);
);
$m->connect( $m->connect('answer/vote/:id',
'question/:id', ['action' => 'qnavote',
array('action' => 'qnashowquestion'), 'type' => 'answer'],
array('id' => $UUIDregex) ['id' => $UUIDregex]);
);
$m->connect( $m->connect('answer/:id',
'answer/vote/:id', ['action' => 'qnashowanswer'],
array('action' => 'qnavote', 'type' => 'answer'), ['id' => $UUIDregex]);
array('id' => $UUIDregex)
);
$m->connect(
'answer/:id',
array('action' => 'qnashowanswer'),
array('id' => $UUIDregex)
);
return true; return true;
} }

View File

@ -105,7 +105,7 @@ class RSSCloudPlugin extends Plugin
function onRouterInitialized($m) function onRouterInitialized($m)
{ {
$m->connect('/main/rsscloud/request_notify', $m->connect('/main/rsscloud/request_notify',
array('action' => 'RSSCloudRequestNotify')); ['action' => 'RSSCloudRequestNotify']);
// XXX: This is just for end-to-end testing. Uncomment if you need to pretend // XXX: This is just for end-to-end testing. Uncomment if you need to pretend
// to be a cloud hub for some reason. // to be a cloud hub for some reason.

View File

@ -77,11 +77,11 @@ class RealtimePlugin extends Plugin
public function onRouterInitialized(URLMapper $m) public function onRouterInitialized(URLMapper $m)
{ {
$m->connect('main/channel/:channelkey/keepalive', $m->connect('main/channel/:channelkey/keepalive',
array('action' => 'keepalivechannel'), ['action' => 'keepalivechannel'],
array('channelkey' => '[a-z0-9]{32}')); ['channelkey' => '[a-z0-9]{32}']);
$m->connect('main/channel/:channelkey/close', $m->connect('main/channel/:channelkey/close',
array('action' => 'closechannel'), ['action' => 'closechannel'],
array('channelkey' => '[a-z0-9]{32}')); ['channelkey' => '[a-z0-9]{32}']);
return true; return true;
} }

View File

@ -94,8 +94,8 @@ class RegisterThrottlePlugin extends Plugin
public function onRouterInitialized(URLMapper $m) public function onRouterInitialized(URLMapper $m)
{ {
$m->connect('main/ipregistrations/:ipaddress', $m->connect('main/ipregistrations/:ipaddress',
array('action' => 'ipregistrations'), ['action' => 'ipregistrations'],
array('ipaddress' => '[0-9a-f\.\:]+')); ['ipaddress' => '[0-9a-f\.\:]+']);
} }
/** /**

View File

@ -84,8 +84,8 @@ class RequireValidatedEmailPlugin extends Plugin
public function onRouterInitialized(URLMapper $m) public function onRouterInitialized(URLMapper $m)
{ {
$m->connect('main/confirmfirst/:code', $m->('main/confirmfirst/:code',
array('action' => 'confirmfirstemail')); ['action' => 'confirmfirstemail']);
return true; return true;
} }

View File

@ -191,7 +191,7 @@ class SamplePlugin extends Plugin
public function onRouterInitialized(URLMapper $m) public function onRouterInitialized(URLMapper $m)
{ {
$m->connect('main/hello', $m->connect('main/hello',
array('action' => 'hello')); ['action' => 'hello']);
return true; return true;
} }

View File

@ -70,14 +70,14 @@ class SearchSubPlugin extends Plugin
public function onRouterInitialized(URLMapper $m) public function onRouterInitialized(URLMapper $m)
{ {
$m->connect('search/:search/subscribe', $m->connect('search/:search/subscribe',
array('action' => 'searchsub'), ['action' => 'searchsub'],
array('search' => Router::REGEX_TAG)); ['search' => Router::REGEX_TAG]);
$m->connect('search/:search/unsubscribe', $m->connect('search/:search/unsubscribe',
array('action' => 'searchunsub'), ['action' => 'searchunsub'],
array('search' => Router::REGEX_TAG)); ['search' => Router::REGEX_TAG]);
$m->connect(':nickname/search-subscriptions', $m->connect(':nickname/search-subscriptions',
array('action' => 'searchsubs'), ['action' => 'searchsubs'],
array('nickname' => Nickname::DISPLAY_FMT)); ['nickname' => Nickname::DISPLAY_FMT]);
return true; return true;
} }

View File

@ -49,7 +49,7 @@ class SensitiveContentPlugin extends Plugin
public function onRouterInitialized(URLMapper $m) public function onRouterInitialized(URLMapper $m)
{ {
$m->connect('settings/sensitivecontent', $m->connect('settings/sensitivecontent',
array('action' => 'sensitivecontentsettings')); ['action' => 'sensitivecontentsettings']);
} }

View File

@ -53,30 +53,30 @@ class SharePlugin extends ActivityVerbHandlerPlugin
public function onRouterInitialized(URLMapper $m) public function onRouterInitialized(URLMapper $m)
{ {
// Web UI actions // Web UI actions
$m->connect('main/repeat', array('action' => 'repeat')); $m->connect('main/repeat', ['action' => 'repeat']);
// Share for Twitter API ("Retweet") // Share for Twitter API ("Retweet")
$m->connect('api/statuses/retweeted_by_me.:format', $m->connect('api/statuses/retweeted_by_me.:format',
array('action' => 'ApiTimelineRetweetedByMe', ['action' => 'ApiTimelineRetweetedByMe'],
'format' => '(xml|json|atom|as)')); ['format' => '(xml|json|atom|as)']);
$m->connect('api/statuses/retweeted_to_me.:format', $m->connect('api/statuses/retweeted_to_me.:format',
array('action' => 'ApiTimelineRetweetedToMe', ['action' => 'ApiTimelineRetweetedToMe'],
'format' => '(xml|json|atom|as)')); ['format' => '(xml|json|atom|as)']);
$m->connect('api/statuses/retweets_of_me.:format', $m->connect('api/statuses/retweets_of_me.:format',
array('action' => 'ApiTimelineRetweetsOfMe', ['action' => 'ApiTimelineRetweetsOfMe'],
'format' => '(xml|json|atom|as)')); ['format' => '(xml|json|atom|as)']);
$m->connect('api/statuses/retweet/:id.:format', $m->connect('api/statuses/retweet/:id.:format',
array('action' => 'ApiStatusesRetweet', ['action' => 'ApiStatusesRetweet'],
'id' => '[0-9]+', ['id' => '[0-9]+',
'format' => '(xml|json)')); 'format' => '(xml|json)']);
$m->connect('api/statuses/retweets/:id.:format', $m->connect('api/statuses/retweets/:id.:format',
array('action' => 'ApiStatusesRetweets', ['action' => 'ApiStatusesRetweets'],
'id' => '[0-9]+', ['id' => '[0-9]+',
'format' => '(xml|json)')); 'format' => '(xml|json)']);
} }
// FIXME: Set this to abstract public in lib/activityhandlerplugin.php when all plugins have migrated! // FIXME: Set this to abstract public in lib/activityhandlerplugin.php when all plugins have migrated!

View File

@ -77,24 +77,24 @@ class SitemapPlugin extends Plugin
public function onRouterInitialized(URLMapper $m) public function onRouterInitialized(URLMapper $m)
{ {
$m->connect('sitemapindex.xml', $m->connect('sitemapindex.xml',
array('action' => 'sitemapindex')); ['action' => 'sitemapindex']);
$m->connect('notice-sitemap-:year-:month-:day-:index.xml', $m->connect('notice-sitemap-:year-:month-:day-:index.xml',
array('action' => 'noticesitemap'), ['action' => 'noticesitemap'],
array('year' => '[0-9]{4}', ['year' => '[0-9]{4}',
'month' => '[01][0-9]', 'month' => '[01][0-9]',
'day' => '[0123][0-9]', 'day' => '[0123][0-9]',
'index' => '[1-9][0-9]*')); 'index' => '[1-9][0-9]*']);
$m->connect('user-sitemap-:year-:month-:day-:index.xml', $m->connect('user-sitemap-:year-:month-:day-:index.xml',
array('action' => 'usersitemap'), ['action' => 'usersitemap'),
array('year' => '[0-9]{4}', ['year' => '[0-9]{4}',
'month' => '[01][0-9]', 'month' => '[01][0-9]',
'day' => '[0123][0-9]', 'day' => '[0123][0-9]',
'index' => '[1-9][0-9]*')); 'index' => '[1-9][0-9]*']);
$m->connect('panel/sitemap', $m->connect('panel/sitemap',
array('action' => 'sitemapadminpanel')); ['action' => 'sitemapadminpanel']);
return true; return true;
} }

View File

@ -60,8 +60,8 @@ class SlicedFavoritesPlugin extends Plugin
public function onRouterInitialized(URLMapper $m) public function onRouterInitialized(URLMapper $m)
{ {
$m->connect('favorited/:slice', $m->connect('favorited/:slice',
array('action' => 'favoritedslice'), ['action' => 'favoritedslice'],
array('slice' => '[a-zA-Z0-9]+')); ['slice' => '[a-zA-Z0-9]+']);
return true; return true;
} }

View File

@ -36,14 +36,14 @@ class SubMirrorPlugin extends Plugin
public function onRouterInitialized(URLMapper $m) public function onRouterInitialized(URLMapper $m)
{ {
$m->connect('settings/mirror', $m->connect('settings/mirror',
array('action' => 'mirrorsettings')); ['action' => 'mirrorsettings']);
$m->connect('settings/mirror/add/:provider', $m->connect('settings/mirror/add/:provider',
array('action' => 'mirrorsettings'), ['action' => 'mirrorsettings'],
array('provider' => '[A-Za-z0-9_-]+')); ['provider' => '[A-Za-z0-9_-]+']);
$m->connect('settings/mirror/add', $m->connect('settings/mirror/add',
array('action' => 'addmirror')); ['action' => 'addmirror']);
$m->connect('settings/mirror/edit', $m->connect('settings/mirror/edit',
array('action' => 'editmirror')); ['action' => 'editmirror']);
return true; return true;
} }

View File

@ -17,10 +17,10 @@ class TagCloudPlugin extends Plugin {
public function onRouterInitialized(URLMapper $m) public function onRouterInitialized(URLMapper $m)
{ {
$m->connect('tags/', array('action' => 'publictagcloud')); $m->connect('tags/', ['action' => 'publictagcloud']);
$m->connect('tag/', array('action' => 'publictagcloud')); $m->connect('tag/', ['action' => 'publictagcloud']);
$m->connect('tags', array('action' => 'publictagcloud')); $m->connect('tags', ['action' => 'publictagcloud']);
$m->connect('tag', array('action' => 'publictagcloud')); $m->connect('tag', ['action' => 'publictagcloud']);
} }
public function onEndPublicGroupNav(Menu $menu) public function onEndPublicGroupNav(Menu $menu)

View File

@ -69,22 +69,18 @@ class TagSubPlugin extends Plugin
*/ */
public function onRouterInitialized(URLMapper $m) public function onRouterInitialized(URLMapper $m)
{ {
$m->connect( $m->connect('tag/:tag/subscribe',
'tag/:tag/subscribe', ['action' => 'tagsub'],
array('action' => 'tagsub'), ['tag' => Router::REGEX_TAG]);
array('tag' => Router::REGEX_TAG)
); $m->connect('tag/:tag/unsubscribe',
$m->connect( ['action' => 'tagunsub'],
'tag/:tag/unsubscribe', ['tag' => Router::REGEX_TAG]);
array('action' => 'tagunsub'),
array('tag' => Router::REGEX_TAG) $m->connect(':nickname/tag-subscriptions',
); ['action' => 'tagsubs'],
['nickname' => Nickname::DISPLAY_FMT]);
$m->connect(
':nickname/tag-subscriptions',
array('action' => 'tagsubs'),
array('nickname' => Nickname::DISPLAY_FMT)
);
return true; return true;
} }

View File

@ -111,23 +111,17 @@ class TwitterBridgePlugin extends Plugin
*/ */
public function onRouterInitialized(URLMapper $m) public function onRouterInitialized(URLMapper $m)
{ {
$m->connect('panel/twitter', array('action' => 'twitteradminpanel')); $m->connect('panel/twitter', ['action' => 'twitteradminpanel']);
if (self::hasKeys()) { if (self::hasKeys()) {
$m->connect( $m->connect('twitter/authorization',
'twitter/authorization', ['action' => 'twitterauthorization']);
array('action' => 'twitterauthorization') $m->connect('settings/twitter',
); ['action' => 'twittersettings']);
$m->connect(
'settings/twitter', array(
'action' => 'twittersettings'
)
);
if (common_config('twitter', 'signin')) { if (common_config('twitter', 'signin')) {
$m->connect( $m->connect('main/twitterlogin',
'main/twitterlogin', ['action' => 'twitterlogin']);
array('action' => 'twitterlogin')
);
} }
} }

View File

@ -75,9 +75,9 @@ class UserFlagPlugin extends Plugin
*/ */
public function onRouterInitialized(URLMapper $m) public function onRouterInitialized(URLMapper $m)
{ {
$m->connect('main/flag/profile', array('action' => 'flagprofile')); $m->connect('main/flag/profile', ['action' => 'flagprofile']);
$m->connect('main/flag/clear', array('action' => 'clearflag')); $m->connect('main/flag/clear', ['action' => 'clearflag']);
$m->connect('panel/profile/flag', array('action' => 'adminprofileflag')); $m->connect('panel/profile/flag', ['action' => 'adminprofileflag']);
return true; return true;
} }

View File

@ -39,16 +39,16 @@ class WebFingerPlugin extends Plugin
public function onRouterInitialized(URLMapper $m) public function onRouterInitialized(URLMapper $m)
{ {
$m->connect('.well-known/host-meta', array('action' => 'hostmeta')); $m->connect('.well-known/host-meta', ['action' => 'hostmeta']);
$m->connect('.well-known/host-meta.:format', $m->connect('.well-known/host-meta.:format',
array('action' => 'hostmeta', ['action' => 'hostmeta'],
'format' => '(xml|json)')); ['format' => '(xml|json)']);
// the resource GET parameter can be anywhere, so don't mention it here // the resource GET parameter can be anywhere, so don't mention it here
$m->connect('.well-known/webfinger', array('action' => 'webfinger')); $m->connect('.well-known/webfinger', ['action' => 'webfinger']);
$m->connect('.well-known/webfinger.:format', $m->connect('.well-known/webfinger.:format',
array('action' => 'webfinger', ['action' => 'webfinger'],
'format' => '(xml|json)')); ['format' => '(xml|json)']);
$m->connect('main/ownerxrd', array('action' => 'ownerxrd')); $m->connect('main/ownerxrd', ['action' => 'ownerxrd']);
return true; return true;
} }