/** * @param $permissions array * @return boolean * * Takes an array of $permission_id=>'on' pairs and adds permissions for the company */ public function setPermissions($permissions, &$errors = array()) { $db = DB::Instance(); $db->StartTrans(); $result = true; // Save the Company Permissions $companypermission = DataObjectFactory::Factory('Companypermission'); $delete_permissions = $companypermission->getAll(); $current_permissions = count($delete_permissions); if (empty($delete_permissions)) { foreach ($permissions as $permission_id => $on) { $delete_permissions[] = $permission_id; } } // 1) if item is selected, do not delete it [unset($delete_permissions[$id])] // 2) if item is selected and it already exists in Company Permissions [$current_permissions>0] // we do not need to insert it [unset($permissions[$permissionid])] $deleteHasPermissions = false; foreach ($delete_permissions as $id => $permissionid) { if (isset($permissions[$permissionid]['permissions'])) { unset($delete_permissions[$id]); if ($current_permissions > 0) { unset($permissions[$permissionid]); } $deleteHasPermissions = true; } } // delete the company permissions where the input is deselected if (!empty($delete_permissions)) { $companypermissions = new CompanypermissionCollection($companypermission); $sh = new SearchHandler($companypermissions, false, false); if (!empty($delete_permissions)) { $sh->addConstraint(new Constraint('permissionid', 'in', '(' . implode(',', $delete_permissions) . ')')); } $companypermissions->delete($sh); } foreach ($permissions as $permission_id => $on) { if (isset($on['permissions'])) { $data['permissionid'] = $permission_id; $cp = DataObject::Factory($data, $errors, 'Companypermission'); if (count($errors) > 0 || !$cp->save()) { $errors[] = 'Failed to save Company Permissions'; $db->FailTrans(); $result = false; break; } } } // only delete role permissions for deselected lines // if not all lines deselected if (count($errors) == 0 && $deleteHasPermissions) { foreach ($delete_permissions as $permission_id) { $this->deleteHasPermissions($permission_id, $errors); } } $db->CompleteTrans(); return $result; }
public function view() { if (!$this->loadData()) { $this->dataError(); sendBack(); } $systemcompany = $this->_uses[$this->modeltype]; $this->addSidebar($systemcompany); $company = new Company(); $company->load($systemcompany->company_id, TRUE); $this->view->set('company', $company); $permissions = new CompanypermissionCollection(new Companypermission()); $permissions->getPermissions($systemcompany->id); $this->view->set('permissions', $permissions); $this->view->set('page_title', $this->getPageName('system_company')); }