X-Git-Url: http://www.aleph1.co.uk/gitweb/?p=yaffs-website;a=blobdiff_plain;f=web%2Fmodules%2Fcontrib%2Fdrupalmoduleupgrader%2Fsrc%2FRouting%2FDrupal7%2FRouteWrapper.php;fp=web%2Fmodules%2Fcontrib%2Fdrupalmoduleupgrader%2Fsrc%2FRouting%2FDrupal7%2FRouteWrapper.php;h=655420eb2e13f726c7816825c75a8f7675764297;hp=0000000000000000000000000000000000000000;hb=8acec36f19c470dfcda1ae2336826a782f41874c;hpb=e0411c4e83ba0d079034db83c3f7f55be24a0e35 diff --git a/web/modules/contrib/drupalmoduleupgrader/src/Routing/Drupal7/RouteWrapper.php b/web/modules/contrib/drupalmoduleupgrader/src/Routing/Drupal7/RouteWrapper.php new file mode 100644 index 000000000..655420eb2 --- /dev/null +++ b/web/modules/contrib/drupalmoduleupgrader/src/Routing/Drupal7/RouteWrapper.php @@ -0,0 +1,257 @@ +path = new PathUtility($path); + + // Merge in hook_menu() defaults to normalize things. + $item += [ + 'title callback' => 't', + 'title arguments' => [], + 'access callback' => 'user_access', + 'access arguments' => [], + 'page arguments' => [], + 'type' => 'MENU_NORMAL_ITEM', + ]; + parent::__construct($item); + } + + /** + * {@inheritdoc} + */ + public function getIdentifier() { + return $this->getPath()->__toString(); + } + + /** + * {@inheritdoc} + */ + public function getPath() { + return $this->path; + } + + /** + * {@inheritdoc} + */ + public function hasParent() { + return isset($this->parent); + } + + /** + * {@inheritdoc} + */ + public function getParent() { + return $this->parent; + } + + /** + * {@inheritdoc} + */ + public function unwrap() { + return $this->toArray(); + } + + /** + * {@inheritdoc} + */ + public function onRouterBuilt(RouterBuiltEvent $event) { + $this->router = $event->getRouter(); + + $my_path = $this->getPath(); + $my_length = sizeof($my_path); + $my_path = (string) $my_path; + + // If trying to get the parent raises an exception, we're going to + // bail out. But we don't need the parent in order to find our own + // children, so search for them before searching for the parent. + $this->children = $this->router + ->filter(function(RouteWrapper $route) use ($my_path, $my_length) { + $path = $route->getPath(); + // $path needs to be explicitly cast to a string, 'cause strPos() won't do + // it, even though trim() and similar functions will. + return (sizeof($path) == ($my_length + 1) && strPos((string) $path, $my_path) === 0); + }) + ->ofType('MENU_LOCAL_TASK, MENU_DEFAULT_LOCAL_TASK, MENU_LOCAL_ACTION'); + + try { + $parent = $this->getPath()->getParent(); + $this->parent = $this->router->get($parent->__toString()); + } + catch (\LengthException $e) { + // Because there's no parent path, we can't effectively search for siblings. + // Time to die. + return; + } + + $this->siblings = $this->router + ->filter(function(RouteWrapper $route) use ($parent, $my_path, $my_length) { + $path = $route->getPath(); + // strPos(), in its wisdom, won't cast to string. + return ($path !== $my_path && sizeof($path) == $my_length && strPos((string) $path, (string) $parent) === 0); + }); + } + + /** + * Returns if this route has an absolute access flag (TRUE or FALSE). + * + * @return boolean + */ + public function isAbsoluteAccess() { + return is_bool($this->get('access callback')); + } + + /** + * Returns if this route has permission-based access. + * + * @return boolean + */ + public function isPermissionBased() { + return ($this->get('access callback') == 'user_access'); + } + + /** + * Returns if this route exposes a link of any kind. + * + * @return boolean + */ + public function hasLink() { + return ($this->isLink() || $this->isLocalTask() || $this->isDefaultLocalTask() || $this->isLocalAction()); + } + + /** + * Returns if this route is a normal link. + * + * @return boolean + */ + public function isLink() { + return $this->get('type') == 'MENU_NORMAL_ITEM'; + } + + /** + * Returns if this route is a local task (NOT a default local task). + * + * @return boolean + */ + public function isLocalTask() { + return $this->get('type') == 'MENU_LOCAL_TASK'; + } + + /** + * Gets the closest default local task, if there is one. + * + * @return static|NULL + */ + public function getDefaultTask() { + if ($this->hasSiblings()) { + return $this->getSiblings()->ofType('MENU_DEFAULT_LOCAL_TASK')->first(); + } + } + + /** + * Returns if this route is a default local task. + * + * @return boolean + */ + public function isDefaultLocalTask() { + return $this->get('type') == 'MENU_DEFAULT_LOCAL_TASK'; + } + + /** + * Returns if this route is a local action. + * + * @return boolean + */ + public function isLocalAction() { + return $this->get('type') == 'MENU_LOCAL_ACTION'; + } + + /** + * Returns if this route is a contextual link. + * + * @return boolean + */ + public function isContextualLink() { + return ($this->isLocalAction() && $this->containsKey('context') && $this->get('context') == 'MENU_CONTEXT_INLINE'); + } + + /** + * Returns if this route has children. + * + * @return boolean + */ + public function hasChildren() { + return $this->getChildren()->count() > 0; + } + + /** + * Returns the immediate children of this route. + * + * @return \Drupal\drupalmoduleupgrader\Routing\Drupal7\Router + */ + public function getChildren() { + return $this->children; + } + + /** + * Returns if this route has siblings. + * + * @return boolean + */ + public function hasSiblings() { + return $this->getSiblings()->count() > 0; + } + + /** + * Gets the siblings of this route. + * + * @return \Drupal\drupalmoduleupgrader\Routing\Drupal7\Router + */ + public function getSiblings() { + return $this->siblings; + } + +}