/** * {@inheritdoc} */ public function applyUpdates() { foreach ($this->getChangeList() as $entity_type_id => $change_list) { // Process entity type definition changes. if (!empty($change_list['entity_type']) && $change_list['entity_type'] == static::DEFINITION_UPDATED) { $entity_type = $this->entityManager->getDefinition($entity_type_id); $original = $this->entityManager->getLastInstalledDefinition($entity_type_id); $this->entityManager->onEntityTypeUpdate($entity_type, $original); } // Process field storage definition changes. if (!empty($change_list['field_storage_definitions'])) { $storage_definitions = $this->entityManager->getFieldStorageDefinitions($entity_type_id); $original_storage_definitions = $this->entityManager->getLastInstalledFieldStorageDefinitions($entity_type_id); foreach ($change_list['field_storage_definitions'] as $field_name => $change) { switch ($change) { case static::DEFINITION_CREATED: $this->entityManager->onFieldStorageDefinitionCreate($storage_definitions[$field_name]); break; case static::DEFINITION_UPDATED: $this->entityManager->onFieldStorageDefinitionUpdate($storage_definitions[$field_name], $original_storage_definitions[$field_name]); break; case static::DEFINITION_DELETED: $this->entityManager->onFieldStorageDefinitionDelete($original_storage_definitions[$field_name]); break; } } } } }
/** * Executes field storage definition updates if needed. * * @param array $entity_types * A list of entity type definitions to be processed. */ public function updateDefinitions(array $entity_types) { // Handle field storage definition creation, if needed. // @todo Generalize this code in https://www.drupal.org/node/2346013. // @todo Handle initial values in https://www.drupal.org/node/2346019. if ($this->updateManager->needsUpdates()) { foreach ($entity_types as $entity_type_id => $entity_type) { $storage_definitions = $this->entityManager->getFieldStorageDefinitions($entity_type_id); $installed_storage_definitions = $this->entityManager->getLastInstalledFieldStorageDefinitions($entity_type_id); foreach (array_diff_key($storage_definitions, $installed_storage_definitions) as $storage_definition) { /** @var $storage_definition \Drupal\Core\Field\FieldStorageDefinitionInterface */ if ($storage_definition->getProvider() == 'content_translation') { $this->entityManager->onFieldStorageDefinitionCreate($storage_definition); } } } } }
/** * Performs a field storage definition update. * * @param string $op * The operation to perform, possible values are static::DEFINITION_CREATED, * static::DEFINITION_UPDATED or static::DEFINITION_DELETED. * @param array|null $storage_definition * The new field storage definition. * @param array|null $original_storage_definition * The original field storage definition. */ protected function doFieldUpdate($op, $storage_definition = NULL, $original_storage_definition = NULL) { switch ($op) { case static::DEFINITION_CREATED: $this->entityManager->onFieldStorageDefinitionCreate($storage_definition); break; case static::DEFINITION_UPDATED: $this->entityManager->onFieldStorageDefinitionUpdate($storage_definition, $original_storage_definition); break; case static::DEFINITION_DELETED: $this->entityManager->onFieldStorageDefinitionDelete($original_storage_definition); break; } }
/** * {@inheritdoc} */ public function applyUpdates() { $change_list = $this->getChangeList(); if ($change_list) { // getChangeList() only disables the cache and does not invalidate. // In case there are changes, explicitly invalidate caches. $this->entityManager->clearCachedDefinitions(); } foreach ($change_list as $entity_type_id => $change_list) { // Process entity type definition changes before storage definitions ones // this is necessary when you change an entity type from non-revisionable // to revisionable and at the same time add revisionable fields to the // entity type. if (!empty($change_list['entity_type'])) { $entity_type = $this->entityManager->getDefinition($entity_type_id); switch ($change_list['entity_type']) { case static::DEFINITION_CREATED: $this->entityManager->onEntityTypeCreate($entity_type); break; case static::DEFINITION_UPDATED: $original = $this->entityManager->getLastInstalledDefinition($entity_type_id); $this->entityManager->onEntityTypeUpdate($entity_type, $original); break; } } // Process field storage definition changes. if (!empty($change_list['field_storage_definitions'])) { $storage_definitions = $this->entityManager->getFieldStorageDefinitions($entity_type_id); $original_storage_definitions = $this->entityManager->getLastInstalledFieldStorageDefinitions($entity_type_id); foreach ($change_list['field_storage_definitions'] as $field_name => $change) { switch ($change) { case static::DEFINITION_CREATED: $this->entityManager->onFieldStorageDefinitionCreate($storage_definitions[$field_name]); break; case static::DEFINITION_UPDATED: $this->entityManager->onFieldStorageDefinitionUpdate($storage_definitions[$field_name], $original_storage_definitions[$field_name]); break; case static::DEFINITION_DELETED: $this->entityManager->onFieldStorageDefinitionDelete($original_storage_definitions[$field_name]); break; } } } } }
/** * {@inheritdoc} */ public function onFieldStorageDefinitionCreate(FieldStorageDefinitionInterface $storage_definition) { $this->entityManager->onFieldStorageDefinitionCreate($storage_definition); }