public function createRole(Role $role)
{
// Role original ID is set when creating a draft from an existing role
if ($role->status === Role::STATUS_DRAFT && $role->id) {
$roleOriginalId = $role->id;
} elseif ($role->status === Role::STATUS_DRAFT) {
// Not using a constant here as this is legacy storage engine specific.
// -1 means "Newly created role".
$roleOriginalId = -1;
} else {
// Role::STATUS_DEFINED value is 0, which is the expected value for version column for this status.
$roleOriginalId = Role::STATUS_DEFINED;
}
$query = $this->handler->createInsertQuery();
$query->insertInto($this->handler->quoteTable('ezrole'))->set($this->handler->quoteColumn('id'), $this->handler->getAutoIncrementValue('ezrole', 'id'))->set($this->handler->quoteColumn('is_new'), 0)->set($this->handler->quoteColumn('name'), $query->bindValue($role->identifier))->set($this->handler->quoteColumn('value'), 0)->set($this->handler->quoteColumn('version'), $query->bindValue($roleOriginalId));
$query->prepare()->execute();
if (!isset($role->id) || (int) $role->id < 1 || $role->status === Role::STATUS_DRAFT) {
$role->id = $this->handler->lastInsertId($this->handler->getSequenceName('ezrole', 'id'));
}
$role->originalId = $roleOriginalId;
}