Skip to content

Instantly share code, notes, and snippets.

@d0t15t
Created June 3, 2020 10:40
Show Gist options
  • Select an option

  • Save d0t15t/d942abe9f70e7f6101e5984afd7fe20e to your computer and use it in GitHub Desktop.

Select an option

Save d0t15t/d942abe9f70e7f6101e5984afd7fe20e to your computer and use it in GitHub Desktop.
Delete and manipulate drupal entities in hook_update_N().
<?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