protected function EntityAPIController::saveRevision in Entity API 7
Saves an entity revision.
Parameters
Entity $entity: Entity revision to save.
1 call to EntityAPIController::saveRevision()
- EntityAPIController::save in includes/
entity.controller.inc - Implements EntityAPIControllerInterface.
File
- includes/
entity.controller.inc, line 500 - Provides a controller building upon the core controller but providing more features like full CRUD functionality.
Class
- EntityAPIController
- A controller implementing EntityAPIControllerInterface for the database.
Code
protected function saveRevision($entity) {
// Convert the entity into an array as it might not have the same properties
// as the entity, it is just a raw structure.
$record = (array) $entity;
// File fields assumes we are using $entity->revision instead of
// $entity->is_new_revision, so we also support it and make sure it's set to
// the same value.
$entity->is_new_revision = !empty($entity->is_new_revision) || !empty($entity->revision) || $entity->is_new;
$entity->revision =& $entity->is_new_revision;
$entity->{$this->defaultRevisionKey} = !empty($entity->{$this->defaultRevisionKey}) || $entity->is_new;
// When saving a new revision, set any existing revision ID to NULL so as to
// ensure that a new revision will actually be created.
if ($entity->is_new_revision && isset($record[$this->revisionKey])) {
$record[$this->revisionKey] = NULL;
}
if ($entity->is_new_revision) {
drupal_write_record($this->revisionTable, $record);
$update_default_revision = $entity->{$this->defaultRevisionKey};
}
else {
drupal_write_record($this->revisionTable, $record, $this->revisionKey);
// @todo Fix original entity to be of the same revision and check whether
// the default revision key has been set.
$update_default_revision = $entity->{$this->defaultRevisionKey} && $entity->{$this->revisionKey} != $entity->original->{$this->revisionKey};
}
// Make sure to update the new revision key for the entity.
$entity->{$this->revisionKey} = $record[$this->revisionKey];
// Mark this revision as the default one.
if ($update_default_revision) {
db_update($this->entityInfo['base table'])
->fields(array(
$this->revisionKey => $record[$this->revisionKey],
))
->condition($this->idKey, $entity->{$this->idKey})
->execute();
}
return $entity->is_new_revision ? SAVED_NEW : SAVED_UPDATED;
}