From f451e3d995c1bb4e37ebfa21e12a839d1262c481 Mon Sep 17 00:00:00 2001
From: Alex Pott <alex.a.pott@googlemail.com>
Date: Wed, 12 Feb 2014 20:42:43 +0000
Subject: [PATCH] Issue #2188915 by tim.plunkett: Stop appending paths to
 Entity::getSystemPath().

---
 .../config_translation.module                 | 35 +++++++++++--------
 .../Plugin/views/field/TranslationLink.php    |  2 +-
 .../lib/Drupal/field/Entity/FieldInstance.php |  3 ++
 core/modules/system/entity.api.php            |  3 +-
 4 files changed, 25 insertions(+), 18 deletions(-)

diff --git a/core/modules/config_translation/config_translation.module b/core/modules/config_translation/config_translation.module
index 558841a3067c..858659a6bec8 100644
--- a/core/modules/config_translation/config_translation.module
+++ b/core/modules/config_translation/config_translation.module
@@ -85,21 +85,29 @@ function config_translation_theme() {
 }
 
 /**
- * Implements hook_entity_info().
+ * Implements hook_entity_info_alter().
  */
-function config_translation_entity_info($entity_info) {
+function config_translation_entity_info_alter($entity_info) {
   /** @var $entity_info \Drupal\Core\Entity\EntityTypeInterface[] */
   foreach ($entity_info as $entity_type_id => $entity_type) {
-    if ($entity_type_id == 'block') {
-      $class = 'Drupal\config_translation\Controller\ConfigTranslationBlockListController';
-    }
-    elseif ($entity_type_id == 'field_instance') {
-      $class = 'Drupal\config_translation\Controller\ConfigTranslationFieldInstanceListController';
-    }
-    else {
-      $class = 'Drupal\config_translation\Controller\ConfigTranslationEntityListController';
+    if ($entity_type->isSubclassOf('Drupal\Core\Config\Entity\ConfigEntityInterface')) {
+      if ($entity_type_id == 'block') {
+        $class = 'Drupal\config_translation\Controller\ConfigTranslationBlockListController';
+      }
+      elseif ($entity_type_id == 'field_instance') {
+        $class = 'Drupal\config_translation\Controller\ConfigTranslationFieldInstanceListController';
+        // Will be filled in dynamically, see \Drupal\field\Entity\FieldInstance::linkTemplates().
+        $entity_type->setLinkTemplate('drupal:config-translation-overview', 'config_translation.item.overview.');
+      }
+      else {
+        $class = 'Drupal\config_translation\Controller\ConfigTranslationEntityListController';
+      }
+      $entity_type->setControllerClass('config_translation_list', $class);
+
+      if ($entity_type->hasLinkTemplate('edit-form')) {
+        $entity_type->setLinkTemplate('drupal:config-translation-overview', 'config_translation.item.overview.' . $entity_type->getLinkTemplate('edit-form'));
+      }
     }
-    $entity_type->setControllerClass('config_translation_list', $class);
   }
 }
 
@@ -169,13 +177,10 @@ function config_translation_config_translation_info(&$info) {
  */
 function config_translation_entity_operation_alter(array &$operations, EntityInterface $entity) {
   if (\Drupal::currentUser()->hasPermission('translate configuration')) {
-    $uri = $entity->urlInfo();
     $operations['translate'] = array(
       'title' => t('Translate'),
-      'href' => $entity->getSystemPath() . '/translate',
-      'options' => $uri['options'],
       'weight' => 50,
-    );
+    ) + $entity->urlInfo('drupal:config-translation-overview');
   }
 }
 
diff --git a/core/modules/content_translation/lib/Drupal/content_translation/Plugin/views/field/TranslationLink.php b/core/modules/content_translation/lib/Drupal/content_translation/Plugin/views/field/TranslationLink.php
index 176d3f615e4b..999abf45e47a 100644
--- a/core/modules/content_translation/lib/Drupal/content_translation/Plugin/views/field/TranslationLink.php
+++ b/core/modules/content_translation/lib/Drupal/content_translation/Plugin/views/field/TranslationLink.php
@@ -64,7 +64,7 @@ protected function renderLink(EntityInterface $entity, ResultRow $values) {
       $text = !empty($this->options['text']) ? $this->options['text'] : t('translate');
 
       $this->options['alter']['make_link'] = TRUE;
-      $this->options['alter']['path'] = $entity->getSystemPath() . '/translations';
+      $this->options['alter']['path'] = $entity->getSystemPath('drupal:content-translation-overview');
 
       return $text;
     }
diff --git a/core/modules/field/lib/Drupal/field/Entity/FieldInstance.php b/core/modules/field/lib/Drupal/field/Entity/FieldInstance.php
index 26c43b6f05a5..f83e45ac60e0 100644
--- a/core/modules/field/lib/Drupal/field/Entity/FieldInstance.php
+++ b/core/modules/field/lib/Drupal/field/Entity/FieldInstance.php
@@ -511,6 +511,9 @@ protected function linkTemplates() {
     $link_templates = parent::linkTemplates();
     if (\Drupal::moduleHandler()->moduleExists('field_ui')) {
       $link_templates['edit-form'] = 'field_ui.instance_edit_' . $this->entity_type;
+      if (isset($link_templates['drupal:config-translation-overview'])) {
+        $link_templates['drupal:config-translation-overview'] .= $link_templates['edit-form'];
+      }
     }
     return $link_templates;
   }
diff --git a/core/modules/system/entity.api.php b/core/modules/system/entity.api.php
index 852f7f9e7779..1a3973dd329c 100644
--- a/core/modules/system/entity.api.php
+++ b/core/modules/system/entity.api.php
@@ -730,9 +730,8 @@ function hook_entity_field_info_alter(&$info, $entity_type_id) {
 function hook_entity_operation_alter(array &$operations, \Drupal\Core\Entity\EntityInterface $entity) {
   $operations['translate'] = array(
     'title' => t('Translate'),
-    'href' => $entity->getSystemPath() . '/translate',
     'weight' => 50,
-  );
+  ) + $entity->urlInfo('my-custom-link-template');
 }
 
 /**
-- 
GitLab