Created
June 3, 2020 10:40
-
-
Save d0t15t/d942abe9f70e7f6101e5984afd7fe20e to your computer and use it in GitHub Desktop.
Delete and manipulate drupal entities in hook_update_N().
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <?php | |
| /** | |
| * Reset fields from dev. | |
| * | |
| * @param $sandbox | |
| */ | |
| function loom_solr_multisite_update_8010(&$sandbox) { | |
| /** @var MultisiteSearchService $multisite */ | |
| $multisite = Drupal::service('loom.solr_multisite.utility'); | |
| _loom_solr_multi_dev_reset($multisite); | |
| } | |
| /** | |
| * Add facet fields with config. | |
| * | |
| * @param $sandbox | |
| */ | |
| function loom_solr_multisite_update_8011(&$sandbox) { | |
| \Drupal::service('config.installer')->installDefaultConfig('module', 'loom_solr_multisite'); | |
| } | |
| /** | |
| * Add facet fields. | |
| * | |
| * @param $sandbox | |
| */ | |
| function loom_solr_multisite_update_8011(&$sandbox) { | |
| /** @var MultisiteSearchService $multisite */ | |
| $multisite = Drupal::service('loom.solr_multisite.utility'); | |
| // Add field storage. | |
| _loom_add_field_storage($multisite::FACET_FIELD_TYPE, $multisite); | |
| _loom_add_field_storage($multisite::FACET_FIELD_LANG, $multisite); | |
| // Add field config. | |
| foreach($multisite->getIndexedTypes() as $content_type) { | |
| $field_name = $multisite::FACET_FIELD_TYPE; | |
| $label = 'Multisearch facet: type'; | |
| $description = 'Facet id: <b>multisearch_facet_type</b>.'; | |
| $settings = []; | |
| _loom_add_field_config($field_name, $content_type, $label, $description, $settings, $multisite); | |
| $field_name = $multisite::FACET_FIELD_LANG; | |
| $label = 'Multisearch facet: language'; | |
| $description = 'Facet id: <b>multisearch_facet_lang</b>.'; | |
| $settings = []; | |
| // $settings = [ | |
| // 'handler' => 'default', | |
| // 'handler_settings' => [], | |
| // ]; | |
| _loom_add_field_config($field_name, $content_type, $label, $description, $settings, $multisite); | |
| } | |
| } | |
| /** | |
| * @param $field_name | |
| * @param $multisite | |
| * | |
| */ | |
| function _loom_add_field_storage($field_name, $multisite) { | |
| if (!FieldStorageConfig::loadByName('node', $field_name)) { | |
| try { | |
| $field_storage = FieldStorageConfig::create([ | |
| 'field_name' => $field_name, | |
| 'type' => 'string', | |
| 'entity_type' => 'node', | |
| 'cardinality' => 1, | |
| ]); | |
| if ($field_storage->save()) { | |
| $message = sprintf('Successfully added field storage: %s.', $field_name); | |
| $multisite->logger->notice($message); | |
| } | |
| } | |
| catch (EntityStorageException $exception) { | |
| $message = sprintf('There was a problem creating field: %s with exception: %s', $field_name, $exception->getMessage()); | |
| $multisite->logger->error($message); | |
| } | |
| } | |
| } | |
| /** | |
| * @param string $field_name | |
| * @param string $content_type | |
| * @param string $label | |
| * @param string $description | |
| * @param array $settings | |
| * @param MultisiteSearchService $multisite | |
| */ | |
| function _loom_add_field_config($field_name, $content_type, $label, $description, $settings, $multisite) { | |
| if (FieldConfig::loadByName('node', $content_type, $field_name)) { | |
| $message = sprintf('Field %s already exists on content type %s', $field_name, $content_type); | |
| $multisite->logger->notice($message); | |
| } | |
| else { | |
| try { | |
| $field = FieldConfig::create([ | |
| 'field_name' => $field_name, | |
| 'entity_type' => 'node', | |
| 'bundle' => $content_type, | |
| 'label' => $label, | |
| 'description' => $description, | |
| 'settings' => $settings, | |
| ]); | |
| if ($field->save()) { | |
| $message = sprintf('Successfully added field: %s on content type: %s', $field_name, $content_type); | |
| $multisite->logger->notice($message); | |
| } | |
| } | |
| catch (EntityStorageException $exception) { | |
| $message = sprintf('There was a problem creating field: %s on content types "%s" with exception: %s', $field_name, $content_type, $exception->getMessage()); | |
| $multisite->logger->error($message); | |
| } | |
| } | |
| } | |
| /** | |
| * @param MultisiteSearchService $multisite | |
| */ | |
| function _loom_solr_multi_dev_reset($multisite) { | |
| _loom_delete_field($multisite::FACET_FIELD_KEY_TYPE, $multisite); | |
| _loom_delete_field($multisite::FACET_FIELD_KEY_LANG, $multisite); | |
| _loom_delete_field($multisite::FACET_FIELD_TYPE, $multisite); | |
| _loom_delete_field($multisite::FACET_FIELD_LANG, $multisite); | |
| _loom_delete_vocab($multisite::FACET_ID_TYPE, $multisite); | |
| _loom_delete_vocab($multisite::FACET_ID_LANG, $multisite); | |
| $table = sprintf('node__%s', $multisite::FACET_FIELD_KEY_TYPE); | |
| _loom_delete_field_table($table, $multisite); | |
| $table = sprintf('node_revision__%s', $multisite::FACET_FIELD_KEY_TYPE); | |
| _loom_delete_field_table($table, $multisite); | |
| $table = sprintf('node__%s', $multisite::FACET_FIELD_KEY_LANG); | |
| _loom_delete_field_table($table, $multisite); | |
| $table = sprintf('node_revision__%s', $multisite::FACET_FIELD_KEY_LANG); | |
| _loom_delete_field_table($table, $multisite); | |
| $table = sprintf('node__%s', $multisite::FACET_FIELD_TYPE); | |
| _loom_delete_field_table($table, $multisite); | |
| $table = sprintf('node_revision__%s', $multisite::FACET_FIELD_TYPE); | |
| _loom_delete_field_table($table, $multisite); | |
| $table = sprintf('node__%s', $multisite::FACET_FIELD_LANG); | |
| _loom_delete_field_table($table, $multisite); | |
| $table = sprintf('node_revision__%s', $multisite::FACET_FIELD_LANG); | |
| _loom_delete_field_table($table, $multisite); | |
| }; | |
| /** | |
| * @param string $table | |
| * @param MultisiteSearchService $multisite | |
| */ | |
| function _loom_delete_field_table($table, $multisite) { | |
| $connection = Drupal::database(); | |
| try { | |
| $connection->schema()->dropTable($table); | |
| $message = sprintf('Successfully emptied truncated table: %s', $table); | |
| $multisite->logger->notice($message); | |
| } | |
| catch (\Drupal\Core\Database\DatabaseExceptionWrapper $exception) { | |
| $message = sprintf('Unable to delete table: %s', $table); | |
| $multisite->logger->warning($message); | |
| } | |
| } | |
| /** | |
| * @param string $field_name | |
| * @param $multisite | |
| */ | |
| function _loom_delete_field($field_name, $multisite) { | |
| $types = $multisite->getIndexedTypes(); | |
| foreach ($types as $type) { | |
| if ($field = FieldConfig::loadByName('node', $type, $field_name)) { | |
| try { | |
| $field->delete(); | |
| $message = sprintf('Deleted field %s on %s.', $field_name, $type); | |
| $multisite->logger->notice($message); | |
| } | |
| catch (Exception $exception) {} | |
| }; | |
| } | |
| if ($field_storage = FieldStorageConfig::loadByName('node', $field_name)) { | |
| try { | |
| $field_storage->delete(); | |
| $message = sprintf('Field storage %s was deleted.', $field_name); | |
| $multisite->logger->notice($message); | |
| } | |
| catch (Exception $exception) {} | |
| } | |
| }; | |
| /** | |
| * @param $vid | |
| * @param MultisiteSearchService $multisite | |
| */ | |
| function _loom_delete_vocab($vid, $multisite) { | |
| try { | |
| $termStorage = $multisite->etm->getStorage('taxonomy_term'); | |
| $termStorage->delete($termStorage->loadByProperties(['vid' => $vid])); | |
| $message = sprintf('Deleted terms for: %s.', $vid); | |
| $multisite->logger->notice($message); | |
| } | |
| catch (Exception $exception) {} | |
| try { | |
| $vocabStorage = $multisite->etm->getStorage('taxonomy_vocabulary'); | |
| $vocabStorage->delete($vocabStorage->loadByProperties(['vid' => $vid])); | |
| $message = sprintf('Deleted vocab: %s.', $vid); | |
| $multisite->logger->notice($message); | |
| } | |
| catch (Exception $exception) {} | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment