Further modules included.
[yaffs-website] / web / modules / contrib / drupalmoduleupgrader / src / Routing / LinkBinding / LocalTaskLinkBinding.php
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 (file)
index 0000000..39ae82b
--- /dev/null
@@ -0,0 +1,86 @@
+<?php
+
+namespace Drupal\drupalmoduleupgrader\Routing\LinkBinding;
+
+use Drupal\Component\Plugin\PluginManagerInterface;
+use Drupal\drupalmoduleupgrader\Routing\Drupal7\RouteWrapper as Drupal7Route;
+use Drupal\drupalmoduleupgrader\Routing\Drupal8\RouteWrapper as Drupal8Route;
+
+/**
+ * Represents a local task or default local task.
+ */
+class LocalTaskLinkBinding extends LinkBinding {
+
+  /**
+   * @var PluginManagerInterface
+   */
+  private $linkManager;
+
+  /**
+   * Constructs a LinkBinding object.
+   */
+  public function __construct(Drupal7Route $source, Drupal8Route $destination, PluginManagerInterface $link_manager) {
+    parent::__construct($source, $destination);
+    $this->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;
+      }
+    }
+  }
+
+}