ViewRevisionsRevisionStorage.php in Config Entity Revisions 8.2
File
modules/view_revisions/src/ViewRevisionsRevisionStorage.php
View source
<?php
namespace Drupal\view_revisions;
use Drupal\config_entity_revisions\ConfigEntityRevisionsRevisionStorageHandler;
use Drupal\Core\Entity\EntityInterface;
class ViewRevisionsRevisionStorage extends ConfigEntityRevisionsRevisionStorageHandler {
public function loadRevision($revision_id) {
$this
->ensure_revision_states_loaded();
$content_entity_record = array_pop(array_filter($this->revision_states, function ($item) use ($revision_id) {
return $item->revision == $revision_id;
}));
$content_entity_record = $content_entity_record->configuration;
if (!$content_entity_record) {
return NULL;
}
$entity = \Drupal::getContainer()
->get('serializer')
->deserialize($content_entity_record, $this
->getEntityType()
->getClass(), 'json');
$entity
->set('settingsOriginal', $entity
->get('settings'));
$entity
->set('enforceIsNew', FALSE);
$entity
->updateLoadedRevisionId($revision_id);
return $entity;
}
public function save(EntityInterface $config_entity) {
$id = $config_entity
->id();
if ($id === NULL || $id === '') {
throw new EntityMalformedException('The entity does not have an ID.');
}
if (strlen($config_entity
->get($this->idKey)) > self::MAX_ID_LENGTH) {
throw new ConfigEntityIdLengthException("Configuration entity ID {$config_entity->get($this->idKey)} exceeds maximum allowed length of " . self::MAX_ID_LENGTH . " characters.");
}
$contentEntityStorage = $config_entity
->contentEntityStorage();
$contentEntityStorage
->setConfigEntity($config_entity);
$next_choice_id = $contentEntityStorage
->getLatestPublishedRevisionOrLatestId($config_entity
->getRevisionId());
$new_moderation_state = $config_entity
->get('moderation_state');
$new_moderation_state = $new_moderation_state ? $new_moderation_state[0]['value'] : 'published';
$new_default = $new_moderation_state == 'published' || $config_entity
->getRevisionId() == $next_choice_id;
if ($new_default) {
$result = parent::save($config_entity);
}
else {
$next_choice_revision = $contentEntityStorage
->loadRevision($next_choice_id);
$next_choice = $contentEntityStorage
->getConfigEntity($next_choice_revision);
$result = parent::save($next_choice);
}
$contentEntityStorage
->createUpdateRevision($config_entity);
return $result;
}
}