public function save($Values, $SaveGlobal = false)
{
// Get the list of columns that are available for permissions.
$PermissionColumns = Gdn::permissionModel()->defineSchema()->Fields();
if (isset($Values['Role'])) {
$PermissionColumns['Role'] = true;
}
$Values = array_intersect_key($Values, $PermissionColumns);
// Figure out how to find the existing permission.
if (array_key_exists('PermissionID', $Values)) {
$Where = array('PermissionID' => $Values['PermissionID']);
unset($Values['PermissionID']);
$this->SQL->update('Permission', $this->_Backtick($Values), $Where)->put();
} else {
$Where = array();
if (array_key_exists('RoleID', $Values)) {
$Where['RoleID'] = $Values['RoleID'];
unset($Values['RoleID']);
} elseif (array_key_exists('Role', $Values)) {
// Get the RoleID.
$RoleID = $this->SQL->getWhere('Role', array('Name' => $Values['Role']))->value('RoleID');
if (!$RoleID) {
return;
}
$Where['RoleID'] = $RoleID;
unset($Values['Role']);
} else {
$Where['RoleID'] = 0;
// default role.
}
if (array_key_exists('JunctionTable', $Values)) {
$Where['JunctionTable'] = $Values['JunctionTable'];
// If the junction table was given then so must the other values.
if (array_key_exists('JunctionColumn', $Values)) {
$Where['JunctionColumn'] = $Values['JunctionColumn'];
}
$Where['JunctionID'] = $Values['JunctionID'];
} else {
$Where['JunctionTable'] = null;
// no junction table.
$Where['JunctionColumn'] = null;
$Where['JunctionID'] = null;
}
unset($Values['JunctionTable'], $Values['JunctionColumn'], $Values['JunctionID']);
$this->SQL->replace('Permission', $this->_Backtick($Values), $Where, true);
if ($SaveGlobal && !is_null($Where['JunctionTable'])) {
// Save these permissions with the global permissions.
$Where['JunctionTable'] = null;
// no junction table.
$Where['JunctionColumn'] = null;
$Where['JunctionID'] = null;
$this->SQL->replace('Permission', $this->_Backtick($Values), $Where, true);
}
}
$this->ClearPermissions();
}