X-Git-Url: http://www.aleph1.co.uk/gitweb/?p=yaffs-website;a=blobdiff_plain;f=web%2Fmodules%2Fcontrib%2Fdrupalmoduleupgrader%2Fsrc%2FRouting%2FLinkBinding%2FLocalTaskLinkBinding.php;fp=web%2Fmodules%2Fcontrib%2Fdrupalmoduleupgrader%2Fsrc%2FRouting%2FLinkBinding%2FLocalTaskLinkBinding.php;h=39ae82b2571312b0bcce32d510e20a18a36338f8;hp=0000000000000000000000000000000000000000;hb=8acec36f19c470dfcda1ae2336826a782f41874c;hpb=e0411c4e83ba0d079034db83c3f7f55be24a0e35 diff --git a/web/modules/contrib/drupalmoduleupgrader/src/Routing/LinkBinding/LocalTaskLinkBinding.php b/web/modules/contrib/drupalmoduleupgrader/src/Routing/LinkBinding/LocalTaskLinkBinding.php new file mode 100644 index 000000000..39ae82b25 --- /dev/null +++ b/web/modules/contrib/drupalmoduleupgrader/src/Routing/LinkBinding/LocalTaskLinkBinding.php @@ -0,0 +1,86 @@ +linkManager = $link_manager; + } + + /** + * {@inheritdoc} + */ + public function build() { + $link = parent::build(); + + $source = $this->getSource(); + + if ($source->isDefaultLocalTask()) { + $link['base_route'] = $link['route_name']; + } + elseif ($source->isLocalTask()) { + $default_task = $source->getDefaultTask(); + if ($default_task) { + $path = $default_task->getPath()->__toString(); + + if ($this->index->containsKey($path)) { + $link['base_route'] = $this->index[$path]->getDestination()->getIdentifier(); + } + } + } + + if ($source->hasParent()) { + $parent = $source->getParent(); + + if ($parent->isLocalTask() || $parent->isDefaultLocalTask()) { + $parent_id = $this->getParentID(); + + if ($parent_id) { + unset($link['base_route']); + $link['parent_id'] = $parent_id; + } + } + } + + return $link; + } + + /** + * Gets the parent task's link ID, if any. + * + * @return string|NULL + */ + public function getParentID() { + $path = $this->getSource()->getParent()->getPath()->__toString(); + + if ($this->index->containsKey($path)) { + return $this->index[$path]->getIdentifier(); + } + + $parent = $this->getDestination()->getParent()->getIdentifier(); + + foreach ($this->linkManager->getDefinitions() as $id => $link) { + if ($link['route_name'] == $parent) { + return $id; + } + } + } + +}