public function addPolicy($roleId, Policy $policy)
{
$query = $this->handler->createInsertQuery();
$query->insertInto($this->handler->quoteTable('ezpolicy'))->set($this->handler->quoteColumn('id'), $this->handler->getAutoIncrementValue('ezpolicy', 'id'))->set($this->handler->quoteColumn('function_name'), $query->bindValue($policy->function))->set($this->handler->quoteColumn('module_name'), $query->bindValue($policy->module))->set($this->handler->quoteColumn('original_id'), $query->bindValue($policy->originalId ?: 0, null, \PDO::PARAM_INT))->set($this->handler->quoteColumn('role_id'), $query->bindValue($roleId, null, \PDO::PARAM_INT));
$query->prepare()->execute();
$policy->id = $this->handler->lastInsertId($this->handler->getSequenceName('ezpolicy', 'id'));
$policy->roleId = $roleId;
// Handle the only valid non-array value "*" by not inserting
// anything. Still has not been documented by eZ Systems. So we
// assume this is the right way to handle it.
if (is_array($policy->limitations)) {
$this->addPolicyLimitations($policy->id, $policy->limitations);
}
return $policy;
}