public function ConfigEntityRevisionsRevisionStorageHandler::createUpdateRevision in Config Entity Revisions 8.2
Create revision when a new config entity version is saved.
Parameters
\Drupal\config_entity_revisions\ConfigEntityRevisionsConfigEntityInterface $config_entity: The configuration entity.
Throws
\Drupal\Core\Entity\EntityStorageException
Overrides ConfigEntityRevisionsRevisionStorageHandlerInterface::createUpdateRevision
File
- src/
Entity/ Handler/ ConfigEntityRevisionsRevisionStorageHandler.php, line 340
Class
- ConfigEntityRevisionsRevisionStorageHandler
- Class ConfigEntityRevisionsRevisionStorageHandler.
Namespace
Drupal\config_entity_revisions\Entity\HandlerCode
public function createUpdateRevision(ConfigEntityRevisionsConfigEntityInterface $config_entity) {
/* @var $revisionsEntity \Drupal\config_entity_revisions\ConfigEntityRevisionsConfigEntityInterface */
$revisionsEntity = NULL;
$previous_state = FALSE;
$moderated = FALSE;
if (!empty($config_entity
->getRevisionId())) {
$revisionsEntity = $config_entity
->contentEntityStorage()
->loadRevision($config_entity
->getRevisionID());
$moderated = $revisionsEntity
->hasField('moderation_state');
if ($moderated) {
$previous_state = $revisionsEntity->moderation_state->value;
}
}
else {
$contentID = $config_entity
->getContentEntityID();
if (is_null($contentID)) {
// No related content entity yet.
return;
}
$revisionsEntity = $config_entity
->contentEntityStorage()
->load($contentID);
}
$revisionsEntity
->set('configuration', $this->serialiser
->serialize($config_entity, 'json'));
$revisionsEntity
->setRevisionUserId($this->currentUser
->id());
$revisionsEntity
->setRevisionCreationTime($this->dateTimeService
->getRequestTime());
$new_message = $config_entity
->get('revision_log_message')[0]['value'];
$new_revision = $config_entity
->get('revision');
$moderation_state = $moderated ? $config_entity->moderation_state->value : NULL;
$published = NULL;
if (!is_null($moderation_state)) {
$published = $moderation_state == 'published';
}
if (is_null($moderation_state) && is_null($new_revision)) {
$new_revision = FALSE;
}
if (!is_null($new_message)) {
$revisionsEntity
->setRevisionLogMessage($config_entity
->get('revision_log_message')[0]['value']);
}
$revisionsEntity
->setNewRevision($new_revision);
if (!is_null($moderation_state)) {
$revisionsEntity->moderation_state = $moderation_state;
}
if (!is_null($published)) {
if ($published) {
$revisionsEntity
->setPublished();
}
else {
$revisionsEntity
->setUnpublished();
}
// @TODO Published <> default?
$revisionsEntity
->isDefaultRevision($published);
}
$revisionsEntity
->save();
if (($previous_state == 'published') !== $published) {
// Modify another revision to be published and default if possible.
$this
->resetDefaultRevision($revisionsEntity);
}
return $revisionsEntity
->getRevisionId();
}