From 5e3cb0fbc081bf308a1a88a677fd741bb5f62b7b Mon Sep 17 00:00:00 2001 From: Mingsong Hu <mingsonghu@Mingsongs-MBP.gateway> Date: Fri, 27 Sep 2019 16:47:35 +1000 Subject: [PATCH] Integrate tree configuration feature with menu links --- src/Controller/HmMenuController.php | 3 ++- src/Controller/HmTaxonomyController.php | 6 +++-- src/Form/HmMenuForm.php | 20 +++++++++++++---- src/PluginTypeManager.php | 29 +++++++++++++++++-------- 4 files changed, 42 insertions(+), 16 deletions(-) diff --git a/src/Controller/HmMenuController.php b/src/Controller/HmMenuController.php index d76abfc..77a7b56 100644 --- a/src/Controller/HmMenuController.php +++ b/src/Controller/HmMenuController.php @@ -231,7 +231,8 @@ class HmMenuController extends ControllerBase { * @return NULL|object */ protected function getDisplayPlugin() { - return $this->hmPluginTypeManager->getDisplayPluginInstance('hm_setup_menu'); + $display_profile = $this->hmPluginTypeManager->getDisplayProfile('hm_setup_menu'); + return $this->hmPluginTypeManager->getDisplayPluginInstance($display_profile); } /** diff --git a/src/Controller/HmTaxonomyController.php b/src/Controller/HmTaxonomyController.php index eb70be9..7d28ece 100644 --- a/src/Controller/HmTaxonomyController.php +++ b/src/Controller/HmTaxonomyController.php @@ -112,9 +112,11 @@ class HmTaxonomyController extends ControllerBase { } } } - + + // Display profile. + $display_profile = $this->hmPluginTypeManager->getDisplayProfile('hm_setup_taxonomy'); // Display plugin instance. - $display_plugin = $this->hmPluginTypeManager->getDisplayPluginInstance('hm_setup_taxonomy'); + $display_plugin = $this->hmPluginTypeManager->getDisplayPluginInstance($display_profile); if (empty($display_plugin)) { return new JsonResponse(['result' => 'Display profile has not been set up.']); diff --git a/src/Form/HmMenuForm.php b/src/Form/HmMenuForm.php index 1295c7e..cb55707 100644 --- a/src/Form/HmMenuForm.php +++ b/src/Form/HmMenuForm.php @@ -71,9 +71,14 @@ class HmMenuForm extends MenuForm { * @return NULL|array */ protected function buildOverviewTree(array $form, FormStateInterface $form_state) { - global $base_path; + + $display_profile = $this->hmPluginTypeManager->getDisplayProfile('hm_setup_menu'); + + if (empty($display_profile)) { + return []; + } - $display_plugin_instance = $this->hmPluginTypeManager->getDisplayPluginInstance('hm_setup_menu'); + $display_plugin_instance = $this->hmPluginTypeManager->getDisplayPluginInstance($display_profile); if (!empty($display_plugin_instance)) { if (method_exists($display_plugin_instance, 'getForm')) { @@ -91,8 +96,15 @@ class HmMenuForm extends MenuForm { } // Urls $source_url = Url::fromRoute('hierarchy_manager.menu.tree.json', ['mid' => $mid], ['query' => ['token' => $token, 'destination' => $destination]])->toString(); - $update_url = Url::fromRoute('hierarchy_manager.menu.tree.update', ['mid' => $mid], ['query' => ['token' => $token]])->toString(); - return $display_plugin_instance->getForm($source_url, $update_url, $form, $form_state); + $update_url = Url::fromRoute('hierarchy_manager.menu.tree.update', ['mid' => $mid], ['query' => ['token' => $token]])->toString(); + $config = $display_profile->get("config"); + if (!empty($config)) { + $options = json_decode($config); + } + else { + $options = NULL; + } + return $display_plugin_instance->getForm($source_url, $update_url, $form, $form_state, $options); } } diff --git a/src/PluginTypeManager.php b/src/PluginTypeManager.php index 315d523..5a5ef31 100644 --- a/src/PluginTypeManager.php +++ b/src/PluginTypeManager.php @@ -2,9 +2,11 @@ namespace Drupal\hierarchy_manager; +use Drupal\Core\Config\Entity\ConfigEntityBase; use Drupal\Core\Entity\EntityTypeManagerInterface; use Drupal\hierarchy_manager\Plugin\HmDisplayPluginManager; use Drupal\hierarchy_manager\Plugin\HmSetupPluginManager; +use DrupalCodeGenerator\Command\Drupal_8\Module\ConfigurationEntity; class PluginTypeManager { @@ -65,27 +67,36 @@ class PluginTypeManager { /** * Get a display plugin instance according to a setup plugin. * - * @param string $setup_plugin_id - * setup plugin ID. + * @param \Drupal\Core\Config\Entity\ConfigEntityBase; $display_profile + * Display profile entity. * @return NULL|object * The display plugin instance. */ - public function getDisplayPluginInstance(string $setup_plugin_id) { - // The setup plugin instance. - $setup_plugin = $this->setupManager->createInstance($setup_plugin_id); - // Display profile. - $display_profile = $this->entityTypeManager->getStorage('hm_display_profile')->load($setup_plugin->getDispalyProfileId()); - + public function getDisplayPluginInstance(ConfigEntityBase $display_profile) { if (empty($display_profile)) { return NULL; } - // Display plugin ID. $display_plugin_id = $display_profile->get("plugin"); return $this->displayManager->createInstance($display_plugin_id); } + /** + * Get a display profile entity according to a setup plugin. + * + * @param string $setup_plugin_id + * setup plugin ID. + * @return NULL|\DrupalCodeGenerator\Command\Drupal_8\Module\ConfigurationEntity + * The display profile entity. + */ + public function getDisplayProfile(string $setup_plugin_id) { + // The setup plugin instance. + $setup_plugin = $this->setupManager->createInstance($setup_plugin_id); + // Return the display profile. + return $this->entityTypeManager->getStorage('hm_display_profile')->load($setup_plugin->getDispalyProfileId()); + } + /** * Update the items for a hierarchy * -- GitLab