From a1eef8506a1f8ff16573aaeb695aa2717c52c651 Mon Sep 17 00:00:00 2001
From: Dmitry Sukhovoy <artreaktor@gmail.com>
Date: Wed, 13 Apr 2016 02:12:19 +0300
Subject: [PATCH] Add Taxonomy Term Panelizer integration

---
 modules/panelizer/src/Panelizer.php                |  3 +-
 .../src/Plugin/PanelizerEntity/PanelizerTerm.php   | 69 ++++++++++++++++++++++
 2 files changed, 71 insertions(+), 1 deletion(-)
 create mode 100644 modules/panelizer/src/Plugin/PanelizerEntity/PanelizerTerm.php

diff --git a/modules/panelizer/src/Panelizer.php b/modules/panelizer/src/Panelizer.php
index 605df64..cb8b1f9 100644
--- a/modules/panelizer/src/Panelizer.php
+++ b/modules/panelizer/src/Panelizer.php
@@ -246,7 +246,8 @@ public function setPanelsDisplay(FieldableEntityInterface $entity, $view_mode, $
       $panelizer_item->default = $default;
 
       // Create a new revision if possible.
-      if ($entity instanceof RevisionableInterface) {
+      //if ($entity instanceof RevisionableInterface) {
+      if ($entity->getEntityType()->hasKey('revision')) {
         if ($entity->isDefaultRevision()) {
           $entity->setNewRevision(TRUE);
         }
diff --git a/modules/panelizer/src/Plugin/PanelizerEntity/PanelizerTerm.php b/modules/panelizer/src/Plugin/PanelizerEntity/PanelizerTerm.php
new file mode 100644
index 0000000..8d0c813
--- /dev/null
+++ b/modules/panelizer/src/Plugin/PanelizerEntity/PanelizerTerm.php
@@ -0,0 +1,69 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\panelizer\Plugin\PanelizerEntity\PanelizerTerm.
+ */
+
+namespace Drupal\panelizer\Plugin\PanelizerEntity;
+
+use Drupal\Core\Entity\Display\EntityViewDisplayInterface;
+use Drupal\Core\Entity\EntityInterface;
+use Drupal\panelizer\Plugin\PanelizerEntityBase;
+use Drupal\panels\Plugin\DisplayVariant\PanelsDisplayVariant;
+
+/**
+ * Panelizer entity plugin for integrating with nodes.
+ *
+ * @PanelizerEntity("taxonomy_term")
+ */
+class PanelizerTerm extends PanelizerEntityBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getDefaultDisplay(EntityViewDisplayInterface $display, $bundle, $view_mode) {
+    $panels_display = parent::getDefaultDisplay($display, $bundle, $view_mode);
+
+    // @todo: Add an accessor in Panels for this!
+    $configuration = $panels_display->getConfiguration();
+    $configuration['page_title'] = '[taxonomy_term:name]';
+    $panels_display->setConfiguration($configuration);
+
+    // Remove the 'title' block because it's covered already.
+    foreach ($panels_display->getRegionAssignments() as $region => $blocks) {
+      /** @var \Drupal\Core\Block\BlockPluginInterface[] $blocks */
+      foreach ($blocks as $block_id => $block) {
+        if ($block->getPluginId() == 'entity_field:taxonomy_term:name') {
+          $panels_display->removeBlock($block_id);
+        }
+      }
+    }
+
+    if ($display->getComponent('links')) {
+      // @todo: add block for term links.
+    }
+
+    if ($display->getComponent('langcode')) {
+      // @todo: add block for term language.
+    }
+
+    return $panels_display;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function alterBuild(array &$build, EntityInterface $entity, PanelsDisplayVariant $panels_display, $view_mode) {
+    /** @var $entity \Drupal\taxonomy\Entity\Term */
+    parent::alterBuild($build, $entity, $panels_display, $view_mode);
+
+    if ($entity->id()) {
+      $build['#contextual_links']['taxonomy_term'] = array(
+        'route_parameters' =>array('taxonomy_term' => $entity->id()),
+        'metadata' => array('changed' => $entity->getChangedTime()),
+      );
+    }
+  }
+
+}
\ No newline at end of file
-- 
1.9.1

