-require_once 'Net/URL/Mapper.php';
-
-class StatusNet_URL_Mapper extends Net_URL_Mapper
-{
- private static $_singleton = null;
- private $_actionToPath = array();
-
- private function __construct()
- {
- }
-
- public static function getInstance($id = '__default__')
- {
- if (empty(self::$_singleton)) {
- self::$_singleton = new StatusNet_URL_Mapper();
- }
- return self::$_singleton;
- }
-
- public function connect($path, $defaults = array(), $rules = array())
- {
- $result = null;
- if (Event::handle('StartConnectPath', array(&$path, &$defaults, &$rules, &$result))) {
- $result = parent::connect($path, $defaults, $rules);
- if (array_key_exists('action', $defaults)) {
- $action = $defaults['action'];
- } elseif (array_key_exists('action', $rules)) {
- $action = $rules['action'];
- } else {
- $action = null;
- }
- $this->_mapAction($action, $result);
- Event::handle('EndConnectPath', array($path, $defaults, $rules, $result));
- }
- return $result;
- }
-
- protected function _mapAction($action, $path)
- {
- if (!array_key_exists($action, $this->_actionToPath)) {
- $this->_actionToPath[$action] = array();
- }
- $this->_actionToPath[$action][] = $path;
- return;
- }
-
- public function generate($values = array(), $qstring = array(), $anchor = '')
- {
- if (!array_key_exists('action', $values)) {
- return parent::generate($values, $qstring, $anchor);
- }
-
- $action = $values['action'];
-
- if (!array_key_exists($action, $this->_actionToPath)) {
- return parent::generate($values, $qstring, $anchor);
- }
-
- $oldPaths = $this->paths;
- $this->paths = $this->_actionToPath[$action];
- $result = parent::generate($values, $qstring, $anchor);
- $this->paths = $oldPaths;
-
- return $result;
- }
-}
-