You are here

public static function MultiversionManager::convertToMultiversionable in Multiversion 8.2

File

src/MultiversionManager.php, line 305

Class

MultiversionManager

Namespace

Drupal\multiversion

Code

public static function convertToMultiversionable($entity_type_id, EntityTypeManagerInterface $entity_type_manager, StateInterface $state, $multiversion_settings, &$sandbox) {
  self::enableIsActive([
    $entity_type_id,
  ]);
  $entity_type_manager
    ->useCaches(FALSE);
  $enabled_entity_types = $multiversion_settings
    ->get('enabled_entity_types') ?: [];

  /** @var \Drupal\multiversion\Entity\Storage\Sql\MultiversionStorageSchemaConverter $schema_converter */
  $schema_converter = \Drupal::service('multiversion.schema_converter_factory')
    ->getStorageSchemaConverter($entity_type_id);
  try {
    $schema_converter
      ->convertToMultiversionable($sandbox);
    if (isset($sandbox[$entity_type_id]['finished']) && $sandbox[$entity_type_id]['finished'] == 1 && !in_array($entity_type_id, $enabled_entity_types)) {
      $enabled_entity_types[] = $entity_type_id;
      $multiversion_settings
        ->set('enabled_entity_types', $enabled_entity_types)
        ->save();

      // Remove the entity from failed to convert entity types, if it's there.
      $failed_entity_types = $state
        ->get('multiversion.failed_entity_types', []);
      if (($key = array_search($entity_type_id, $failed_entity_types)) !== FALSE) {
        unset($failed_entity_types[$key]);
        $state
          ->set('multiversion.failed_entity_types', $failed_entity_types);
      }
    }
  } catch (\Exception $e) {
    $sandbox[$entity_type_id]['failed'] = TRUE;
    $failed_entity_types = $state
      ->get('multiversion.failed_entity_types', []);
    $arguments = Error::decodeException($e) + [
      '%entity_type' => $entity_type_id,
    ];
    \Drupal::logger('multiversion')
      ->warning('Entity type \'%entity_type\' failed to be converted to multiversionable. More info: %type: @message in %function (line %line of %file).', $arguments);
    $failed_entity_types[] = $entity_type_id;
    $state
      ->set('multiversion.failed_entity_types', $failed_entity_types);
  }
}