You are here

function workbench_moderation_install in Workbench Moderation 8

Same name and namespace in other branches
  1. 8.2 workbench_moderation.install \workbench_moderation_install()
  2. 7.3 workbench_moderation.install \workbench_moderation_install()
  3. 7 workbench_moderation.install \workbench_moderation_install()

Implements hook_install().

File

./workbench_moderation.install, line 13
Contains install/update hooks for moderation_state.

Code

function workbench_moderation_install() {

  /** @var \Drupal\workbench_moderation\ModerationInformationInterface $moderation_info */
  $moderation_info = \Drupal::service('workbench_moderation.moderation_information');

  /** @var \Drupal\Core\Entity\EntityFieldManagerInterface $field_manager */
  $field_manager = \Drupal::service('entity_field.manager');
  $entity_definition_update_manager = \Drupal::entityDefinitionUpdateManager();
  $revisionable_entity_defintions = $moderation_info
    ->selectRevisionableEntities(\Drupal::entityTypeManager()
    ->getDefinitions());

  // Some modules, such as Entity Pilot, seem to have a weirdness with their
  // base field definition such that an entity may end up in this list that
  // does not end up selected in EntityTypeInfo::entityTypeAlter().  The result
  // is that the moderation_state field is null, and thus trying to install
  // a field with a null definition explodes (rightly so).
  // Until that oddity is sorted out, we can at least put an extra check in
  // here to filter out such broken entities.
  // @todo Remove when the underlying bug is fixed.
  // @see https://www.drupal.org/node/2674446
  $revisionable_entity_defintions = array_filter($revisionable_entity_defintions, function (ContentEntityTypeInterface $type) use ($field_manager) {
    return !empty($field_manager
      ->getFieldStorageDefinitions($type
      ->id())['moderation_state']);
  });

  /** @var \Drupal\Core\Entity\ContentEntityTypeInterface $type */
  foreach ($revisionable_entity_defintions as $type) {
    $workbench_moderation_definition = $field_manager
      ->getFieldStorageDefinitions($type
      ->id())['moderation_state'];
    $entity_definition_update_manager
      ->installFieldStorageDefinition('moderation_state', $type
      ->id(), 'moderation_state', $workbench_moderation_definition);
  }
}