diff --git a/src/Controller/TaxonomiesController.php b/src/Controller/TaxonomiesController.php index 50aa309e152b2fdb9dd352f15ca7421f3f4a8382..678101bbc5e79f7f8fce3436e23fe8de8a3a0db1 100755 --- a/src/Controller/TaxonomiesController.php +++ b/src/Controller/TaxonomiesController.php @@ -6,20 +6,37 @@ use Drupal\structure_sync\StructureSyncHelper; use Drupal\Core\Form\FormStateInterface; use Drupal\taxonomy\Entity\Term; +use Drupal\Core\Entity\EntityFieldManagerInterface; +use Symfony\Component\DependencyInjection\ContainerInterface; /** * Controller for syncing taxonomy terms. */ class TaxonomiesController extends ControllerBase { + /** + * The entity field manager. + * + * @var \Drupal\Core\Entity\EntityFieldManagerInterface + */ + protected $entityFieldManager; + private $config; /** * Constructor for taxonomies controller. */ - public function __construct() { + public function __construct(EntityFieldManagerInterface $entity_field_manager) { $this->config = $this->getEditableConfig(); $this->entityTypeManager(); + $this->entityFieldManager = $entity_field_manager; + } + + /** + * {@inheritdoc} + */ + public static function create(ContainerInterface $container) { + return new static($container->get('entity_field.manager')); } /** @@ -101,8 +118,7 @@ public function exportTaxonomies(array $form = NULL, FormStateInterface $form_st $entity_field_names = []; $all_term_fields = $entity->getFields(); foreach ($all_term_fields as $field_name => $field) { - $is_custom_field = 'field_' === substr($field_name, 0, 6); - if ($is_custom_field) { + if ($this->isCustomField($vocabulary, $field_name)) { $entity_field_names[] = $field_name; } } @@ -212,18 +228,18 @@ public function importTaxonomies(array $form, FormStateInterface $form_state = N switch ($style) { case 'full': self::deleteDeletedTaxonomies($taxonomies, $context); - self::importTaxonomiesFull($taxonomies, $context); + $this->importTaxonomiesFull($taxonomies, $context); self::taxonomiesImportFinishedCallback(NULL, NULL, NULL); break; case 'safe': - self::importTaxonomiesSafe($taxonomies, $context); + $this->importTaxonomiesSafe($taxonomies, $context); self::taxonomiesImportFinishedCallback(NULL, NULL, NULL); break; case 'force': self::deleteTaxonomies($context); - self::importTaxonomiesForce($taxonomies, $context); + $this->importTaxonomiesForce($taxonomies, $context); self::taxonomiesImportFinishedCallback(NULL, NULL, NULL); break; } @@ -322,7 +338,7 @@ public static function deleteDeletedTaxonomies($taxonomies, &$context) { * Basically a safe import with update actions for already existing taxonomy * terms. */ - public static function importTaxonomiesFull($taxonomies, &$context) { + public function importTaxonomiesFull($taxonomies, &$context) { $uuidsInConfig = []; foreach ($taxonomies as $voc) { foreach ($voc as $taxonomy) { @@ -363,8 +379,7 @@ public static function importTaxonomiesFull($taxonomies, &$context) { // terms. $entity_fields = []; foreach ($taxonomy as $field_name => $field_value) { - $is_custom_field = 'field_' === substr($field_name, 0, 6); - if ($is_custom_field) { + if ($this->isCustomField($vid, $field_name)) { $not_term_reference = empty($field_value[0]['vid']); if ($not_term_reference) { @@ -486,7 +501,7 @@ public static function importTaxonomiesFull($taxonomies, &$context) { StructureSyncHelper::logMessage('Running additional full import' . ' after all terms have been created in order to identify missing ' . ' TIDs for term reference fields.'); - Self::importTaxonomiesFull($taxonomies, $context); + $this->importTaxonomiesFull($taxonomies, $context); } $firstRun = FALSE; @@ -510,7 +525,7 @@ public static function importTaxonomiesFull($taxonomies, &$context) { * Safely meaning that it should only add what isn't already there and not * delete and/or update any terms. */ - public static function importTaxonomiesSafe($taxonomies, &$context) { + public function importTaxonomiesSafe($taxonomies, &$context) { $tidsDone = []; $tidsLeft = []; $newTids = []; @@ -553,8 +568,7 @@ public static function importTaxonomiesSafe($taxonomies, &$context) { // terms. $entity_fields = []; foreach ($taxonomy as $field_name => $field_value) { - $is_custom_field = 'field_' === substr($field_name, 0, 6); - if ($is_custom_field) { + if ($this->isCustomField($vid, $field_name)) { $not_term_reference = empty($field_value[0]['vid']); if ($not_term_reference) { @@ -654,7 +668,7 @@ public static function importTaxonomiesSafe($taxonomies, &$context) { StructureSyncHelper::logMessage('Running additional full import' . ' after all terms have been created in order to identify missing ' . ' TIDs for term reference fields.'); - Self::importTaxonomiesFull($taxonomies, $context); + $this->importTaxonomiesFull($taxonomies, $context); } $firstRun = FALSE; @@ -683,7 +697,7 @@ public static function deleteTaxonomies(&$context) { /** * Function to import (create) all taxonomies that need to be imported. */ - public static function importTaxonomiesForce($taxonomies, &$context) { + public function importTaxonomiesForce($taxonomies, &$context) { $tidsDone = []; $tidsLeft = []; $newTids = []; @@ -720,8 +734,7 @@ public static function importTaxonomiesForce($taxonomies, &$context) { // terms. $entity_fields = []; foreach ($taxonomy as $field_name => $field_value) { - $is_custom_field = 'field_' === substr($field_name, 0, 6); - if ($is_custom_field) { + if ($this->isCustomField($vid, $field_name)) { $not_term_reference = empty($field_value[0]['vid']); if ($not_term_reference) { @@ -804,7 +817,7 @@ public static function importTaxonomiesForce($taxonomies, &$context) { StructureSyncHelper::logMessage('Running additional full import' . ' after all terms have been created in order to identify missing ' . ' TIDs for term reference fields.'); - Self::importTaxonomiesFull($taxonomies, $context); + $this->importTaxonomiesFull($taxonomies, $context); } $firstRun = FALSE; @@ -822,4 +835,14 @@ public static function taxonomiesImportFinishedCallback($success, $results, $ope drupal_set_message(t('Successfully imported taxonomies')); } + /** + * Determines if the field name is a custom field. + */ + private function isCustomField($entity_bundle_id, $field_name) { + $base_field_definitions = $this->entityFieldManager->getBaseFieldDefinitions('taxonomy_term'); + $field_definitions = $this->entityFieldManager->getFieldDefinitions('taxonomy_term', $entity_bundle_id); + + return isset($field_definitions[$field_name]) && !isset($base_field_definitions[$field_name]); + } + } diff --git a/src/StructureSyncHelper.php b/src/StructureSyncHelper.php index 678a6031a9c51b93a232f589e1b8be9eb8e914ba..b6f35eb0f1ca9f292f247b626a75bf0f04e8ab75 100755 --- a/src/StructureSyncHelper.php +++ b/src/StructureSyncHelper.php @@ -16,7 +16,7 @@ class StructureSyncHelper { * Function to export taxonomy terms. */ public static function exportTaxonomies(array $form = NULL, FormStateInterface $form_state = NULL) { - $taxonomiesController = new TaxonomiesController(); + $taxonomiesController = TaxonomiesController::create(\Drupal::getContainer()); $taxonomiesController->exportTaxonomies($form, $form_state); } @@ -44,7 +44,7 @@ public static function exportMenuLinks(array $form = NULL, FormStateInterface $f * 'safe' or 'force' to apply that import style. */ public static function importTaxonomies(array $form, FormStateInterface $form_state = NULL) { - $taxonomiesController = new TaxonomiesController(); + $taxonomiesController = TaxonomiesController::create(\Drupal::getContainer()); $taxonomiesController->importTaxonomies($form, $form_state); }