/**
*
*
* @return bool
*/
public function insertPermissionTable()
{
// $this->LoadState();
// Clear the permission table in case the step was only half done before.
$this->SQL->delete('Permission', array('RoleID <>' => 0));
// Grab all of the permission columns.
$PM = new PermissionModel();
$GlobalColumns = array_filter($PM->permissionColumns());
unset($GlobalColumns['PermissionID']);
$JunctionColumns = array_filter($PM->permissionColumns('Category', 'PermissionCategoryID'));
unset($JunctionColumns['PermissionID']);
$JunctionColumns = array_merge(array('JunctionTable' => 'Category', 'JunctionColumn' => 'PermissionCategoryID', 'JunctionID' => -1), $JunctionColumns);
if ($this->importExists('Permission', 'JunctionTable')) {
$ColumnSets = array(array_merge($GlobalColumns, $JunctionColumns));
$ColumnSets[0]['JunctionTable'] = null;
$ColumnSets[0]['JunctionColumn'] = null;
$ColumnSets[0]['JunctionID'] = null;
} else {
$ColumnSets = array($GlobalColumns, $JunctionColumns);
}
$Data = $this->SQL->get('zPermission')->resultArray();
foreach ($Data as $Row) {
$Presets = array_map('trim', explode(',', val('_Permissions', $Row)));
foreach ($ColumnSets as $ColumnSet) {
$Set = array();
$Set['RoleID'] = $Row['RoleID'];
foreach ($Presets as $Preset) {
if (strpos($Preset, '.') !== false) {
// This preset is a specific permission.
if (array_key_exists($Preset, $ColumnSet)) {
$Set["`{$Preset}`"] = 1;
}
continue;
}
$Preset = strtolower($Preset);
foreach ($ColumnSet as $ColumnName => $Default) {
if (isset($Row[$ColumnName])) {
$Value = $Row[$ColumnName];
} elseif (strpos($ColumnName, '.') === false) {
$Value = $Default;
} elseif ($Preset == 'all') {
$Value = 1;
} elseif ($Preset == 'view') {
$Value = StringEndsWith($ColumnName, 'View', true) && !in_array($ColumnName, array('Garden.Settings.View'));
} elseif ($Preset == $ColumnName) {
$Value = 1;
} else {
$Value = $Default & 1;
}
$Set["`{$ColumnName}`"] = $Value;
}
}
$this->SQL->insert('Permission', $Set);
unset($Set);
}
}
return true;
}