From 9477841090ec6100c32040b3d59a242ecd1e27d0 Mon Sep 17 00:00:00 2001
From: Owen Bush <ojb@ukhhf.co.uk>
Date: Fri, 17 May 2019 16:16:15 -0600
Subject: [PATCH] Fixed page title for event instances

---
 ...ay.eventinstance.eventinstance.default.yml | 25 +---------
 recurring_events.routing.yml                  |  1 +
 src/Controller/EventInstanceController.php    | 47 +++++++++++++++++--
 src/Controller/EventSeriesController.php      |  6 +--
 src/Entity/EventInstance.php                  |  3 +-
 5 files changed, 49 insertions(+), 33 deletions(-)

diff --git a/config/install/core.entity_view_display.eventinstance.eventinstance.default.yml b/config/install/core.entity_view_display.eventinstance.eventinstance.default.yml
index 86f89c9b..2fb3cc99 100644
--- a/config/install/core.entity_view_display.eventinstance.eventinstance.default.yml
+++ b/config/install/core.entity_view_display.eventinstance.eventinstance.default.yml
@@ -28,29 +28,6 @@ content:
     label: above
     settings: {  }
     third_party_settings: {  }
-  inherited_title:
-    type: string
-    weight: 0
-    region: content
-    label: above
-    settings:
-      link_to_entity: false
-    third_party_settings: {  }
-  owen_field:
-    type: text_default
-    weight: 3
-    region: content
-    label: above
-    settings: {  }
-    third_party_settings: {  }
-  title:
-    type: string
-    weight: 0
-    region: content
-    label: above
-    settings:
-      link_to_entity: false
-    third_party_settings: {  }
 hidden:
   body: true
-  inherited_description: true
+  title: true
diff --git a/recurring_events.routing.yml b/recurring_events.routing.yml
index b054bd01..8ce08967 100644
--- a/recurring_events.routing.yml
+++ b/recurring_events.routing.yml
@@ -81,6 +81,7 @@ entity.eventinstance.canonical:
   path: '/events/{eventinstance}'
   defaults:
     _entity_view: 'eventinstance'
+    _title_callback: '\Drupal\recurring_events\Controller\EventInstanceController::getTitle'
   requirements:
     _entity_access: 'eventinstance.view'
   options:
diff --git a/src/Controller/EventInstanceController.php b/src/Controller/EventInstanceController.php
index b680e756..46d44d29 100644
--- a/src/Controller/EventInstanceController.php
+++ b/src/Controller/EventInstanceController.php
@@ -12,6 +12,7 @@ use Drupal\recurring_events\EventInterface;
 use Drupal\Component\Utility\Xss;
 use Drupal\Core\Url;
 use Drupal\Core\Link;
+use Drupal\Core\Language\LanguageManagerInterface;
 
 /**
  * The EventInstanceController class.
@@ -39,6 +40,20 @@ class EventInstanceController extends ControllerBase implements ContainerInjecti
    */
   protected $systemManager;
 
+  /**
+   * The language manager service.
+   *
+   * @var \Drupal\Core\Language\LanguageManagerInterface
+   */
+  protected $languageManager;
+
+  /**
+   * The current language code.
+   *
+   * @var string
+   */
+  protected $langCode;
+
   /**
    * Constructs a EventInstanceController object.
    *
@@ -48,11 +63,15 @@ class EventInstanceController extends ControllerBase implements ContainerInjecti
    *   The renderer service.
    * @param \Drupal\system\SystemManager $systemManager
    *   System manager service.
+   * @param Drupal\Core\Language\LanguageManagerInterface $language_manager
+   *   The language manager service.
    */
-  public function __construct(DateFormatterInterface $date_formatter, RendererInterface $renderer, SystemManager $systemManager) {
+  public function __construct(DateFormatterInterface $date_formatter, RendererInterface $renderer, SystemManager $systemManager, LanguageManagerInterface $language_manager) {
     $this->dateFormatter = $date_formatter;
     $this->renderer = $renderer;
     $this->systemManager = $systemManager;
+    $this->languageManager = $language_manager;
+    $this->langCode = $this->languageManager->getCurrentLanguage()->getId();
   }
 
   /**
@@ -62,15 +81,33 @@ class EventInstanceController extends ControllerBase implements ContainerInjecti
     return new static(
       $container->get('date.formatter'),
       $container->get('renderer'),
-      $container->get('system.manager')
+      $container->get('system.manager'),
+      $container->get('language_manager')
     );
   }
 
+  /**
+   * Get the page title for an eventinstance.
+   *
+   * @param \Drupal\recurring_events\EventInterface $eventinstance
+   *   A eventinstance object.
+   *
+   * @return string
+   *   The title of the page.
+   */
+  public function getTitle(EventInterface $eventinstance) {
+    $title = $eventinstance->title->value;
+    if ($eventinstance->hasTranslation($this->langCode)) {
+      $title = $eventinstance->getTranslation($this->langCode)->title->value;
+    }
+    return $title;
+  }
+
   /**
    * Displays an eventinstance revision.
    *
    * @param int $eventinstance_revision
-   *   The Default entity  revision ID.
+   *   The eventinstance revision ID.
    *
    * @return array
    *   An array suitable for drupal_render().
@@ -86,7 +123,7 @@ class EventInstanceController extends ControllerBase implements ContainerInjecti
    * Page title callback for an eventinstance revision.
    *
    * @param int $eventinstance_revision
-   *   The Default entity  revision ID.
+   *   The eventinstance revision ID.
    *
    * @return string
    *   The page title.
@@ -103,7 +140,7 @@ class EventInstanceController extends ControllerBase implements ContainerInjecti
    * Generates an overview table of older revisions of an eventinstance.
    *
    * @param \Drupal\recurring_events\EventInterface $eventinstance
-   *   A Default entity  object.
+   *   A eventinstance object.
    *
    * @return array
    *   An array as expected by drupal_render().
diff --git a/src/Controller/EventSeriesController.php b/src/Controller/EventSeriesController.php
index a1e49a0e..ff7e5dec 100644
--- a/src/Controller/EventSeriesController.php
+++ b/src/Controller/EventSeriesController.php
@@ -84,7 +84,7 @@ class EventSeriesController extends ControllerBase implements ContainerInjection
    * Displays an eventseries revision.
    *
    * @param int $eventseries_revision
-   *   The Default entity  revision ID.
+   *   The eventseries revision ID.
    *
    * @return array
    *   An array suitable for drupal_render().
@@ -100,7 +100,7 @@ class EventSeriesController extends ControllerBase implements ContainerInjection
    * Page title callback for an eventseries revision.
    *
    * @param int $eventseries_revision
-   *   The Default entity  revision ID.
+   *   The eventseries revision ID.
    *
    * @return string
    *   The page title.
@@ -117,7 +117,7 @@ class EventSeriesController extends ControllerBase implements ContainerInjection
    * Generates an overview table of older revisions of an eventseries.
    *
    * @param \Drupal\recurring_events\EventInterface $eventseries
-   *   A Default entity  object.
+   *   A eventseries object.
    *
    * @return array
    *   An array as expected by drupal_render().
diff --git a/src/Entity/EventInstance.php b/src/Entity/EventInstance.php
index cdb17a97..5c085037 100644
--- a/src/Entity/EventInstance.php
+++ b/src/Entity/EventInstance.php
@@ -101,7 +101,8 @@ use Drupal\user\UserInterface;
  *     "revision" = "vid",
  *     "published" = "status",
  *     "langcode" = "langcode",
- *     "uuid" = "uuid"
+ *     "uuid" = "uuid",
+ *     "label" = "title"
  *   },
  *   revision_metadata_keys = {
  *     "revision_user" = "revision_uid",
-- 
GitLab