/** * * * @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; }