public function ConfigEntityRevisionsConverterBase::convert in Config Entity Revisions 1.x
Same name and namespace in other branches
- 8.2 src/ConfigEntityRevisionsConverterBase.php \Drupal\config_entity_revisions\ConfigEntityRevisionsConverterBase::convert()
- 8 src/ConfigEntityRevisionsConverterBase.php \Drupal\config_entity_revisions\ConfigEntityRevisionsConverterBase::convert()
Converts path variables to their corresponding objects.
Parameters
mixed $value: The raw value.
mixed $definition: The parameter definition provided in the route options.
string $name: The name of the parameter.
array $defaults: The route defaults array.
Return value
mixed|null The converted parameter value.
Overrides EntityConverter::convert
File
- src/
ConfigEntityRevisionsConverterBase.php, line 67
Class
- ConfigEntityRevisionsConverterBase
- Parameter converter for upcasting entity IDs to full objects.
Namespace
Drupal\config_entity_revisionsCode
public function convert($value, $definition, $name, array $defaults) {
$entity_type_id = $this
->getEntityTypeFromDefaults($definition, $name, $defaults);
$storage = $this->entityTypeManager
->getStorage($entity_type_id);
/* @var $entity \Drupal\config_entity_revisions\ConfigEntityRevisionsInterface */
$entity = $storage
->load($value);
if (!$entity) {
return NULL;
}
// Get the config_entity_revisions entity, if one exists.
$revisionsID = $entity
->getContentEntityID();
if (!$revisionsID) {
return $entity;
}
/* @var $storage ConfigEntityRevisionsStorageInterface */
$storage = $this->entityTypeManager
->getStorage('config_entity_revisions');
// If a specific revision is provided or implied by a submission ID, use it.
$specific_revision = FALSE;
if (!empty($defaults['revision_id'])) {
$specific_revision = $defaults['revision_id'];
}
elseif ($entity
->has_own_content() && !empty($defaults[$entity
->revisions_entity_name()])) {
// Load the content entity and get the config entity revision from it (if any).
$content_storage = $this->entityTypeManager
->getStorage($entity
->revisions_entity_name());
$content = $content_storage
->load($defaults[$entity
->content_parameter_name()]);
if ($content->{$entity
->content_parent_reference_field()}) {
$specific_revision = $content->{$entity
->content_parent_reference_field()}->target_id;
}
}
// If no specific revision has been given, check to see whether we should
// use the latest revision or the latest published revision.
/* @var $revisionsEntity ConfigEntityRevisionsEntityInterface */
$revisionsEntity = NULL;
if ($specific_revision) {
$revisionsEntity = $storage
->loadRevision($specific_revision);
}
elseif (array_key_exists('load_latest_revision', $definition)) {
$revisionsEntity = $storage
->getLatestRevision($revisionsID);
}
else {
$revisionsEntity = $storage
->getLatestPublishedRevision($revisionsID);
// If there's no latest published revision and the user has admin
// permissions, get the latest revision instead.
if (\Drupal::currentUser()
->hasPermission($entity
->admin_permission()) && is_null($revisionsEntity)) {
$revisionsEntity = $storage
->getLatestRevision($revisionsID);
}
}
if (is_null($revisionsEntity)) {
return NULL;
}
$entity = \Drupal::getContainer()
->get('serializer')
->deserialize($revisionsEntity
->get('configuration')->value, get_class($entity), 'json');
// The result of serialising and then deserialising is not an exact
// copy of the original. This causes problems downstream if we don't fix
// a few attributes here.
$entity
->set('settingsOriginal', $entity
->get('settings'));
$entity
->set('enforceIsNew', FALSE);
// Record the revision ID in the config entity so we can quickly and
// easily access the revision record if needed (eg for edit form revision
// message).
$entity
->updateLoadedRevisionId($revisionsEntity
->getRevisionId());
return $entity;
}