function build_link($pid) { // $module = new ModuleObject(); // $controller = new ModuleComponent(); // $permission = new Permission(); $module = DataObjectFactory::Factory('ModuleObject'); $controller = DataObjectFactory::Factory('ModuleComponent'); $permission = DataObjectFactory::Factory('Permission'); $permission->load($pid); $link = array(); if (!$permission->loaded) { return FALSE; } $link['pid'] = $pid; $module_id = $permission->module_id; // any standard link must have a module_id if it's a new format one if (!empty($module_id)) { switch ($permission->type) { case 'a': $link['action'] = $permission->permission; $link['controller'] = str_replace('controller', '', $controller->load_identifier_value($permission->component_id)); $link['module'] = $module->load_identifier_value($permission->module_id); break; case 'c': $link['controller'] = str_replace('controller', '', $controller->load_identifier_value($permission->component_id)); $link['module'] = $module->load_identifier_value($permission->module_id); break; case 'm': $link['module'] = $module->load_identifier_value($permission->module_id); break; } } // we may also have additional parameters to appent to the link if ($permission->has_parameters == 't') { $parameters = new PermissionParametersCollection(); $sh = new SearchHandler($parameters, FALSE); $sh->addConstraint(new Constraint('permissionsid', '=', $permission->id)); $parameters->load($sh); $data = $parameters->getArray(); if (!empty($data)) { // loop through any parameters, append to the link array foreach ($data as $item) { $link[$item['name']] = $item['value']; } } } return $link; }
public function save() { $db = DB::Instance(); $db->StartTrans(); $flash = Flash::Instance(); $permission = new Permission(); $modules = new ModuleObject(); $module_components = new ModuleComponent(); $errors = ''; $messages = ''; // we're echoing JSON, so lets tell the browser // this is required for $.ajax to be able to intelligently guess what the dataType is header('Content-type: application/json'); // for standard permissions we need to work out the permission type switch ($this->_data['PermissionData']['type']) { case 'standard': foreach (array('m' => 'module', 'c' => 'controller', 'a' => 'action') as $key => $type) { if (!empty($this->_data['PermissionData'][$type])) { $this->_data['Permission']['type'] = $key; } } break; case 'group': $this->_data['Permission']['type'] = 'g'; break; case 'custom': $this->_data['Permission']['type'] = 'x'; break; } // make sure we have a valid type set if (!in_array($this->_data['Permission']['type'], array_keys($permission->getEnumOptions('type')))) { echo json_encode(array('success' => FALSE, 'errors' => 'Invalid permission type')); exit; } // we may also need to genrate the permission field based on the permission type if (!isset($this->_data['Permission']['permission']) || empty($this->_data['Permission']['permission'])) { switch ($this->_data['Permission']['type']) { case 'm': $this->_data['Permission']['permission'] = $modules->load_identifier_value($this->_data['PermissionData']['module']); break; case 'c': $this->_data['Permission']['permission'] = str_replace('controller', '', $module_components->load_identifier_value($this->_data['PermissionData']['controller'])); break; case 'a': $this->_data['Permission']['permission'] = $this->_data['PermissionData']['action']; break; } } // ensure we're dealing with a lowercase permission value $this->_data['Permission']['permission'] = strtolower($this->_data['Permission']['permission']); if ($this->_data['PermissionData']['type'] === 'standard') { switch ($this->_data['Permission']['type']) { case 'm': $this->_data['Permission']['module_id'] = $this->_data['PermissionData']['module']; break; case 'c': case 'a': $this->_data['Permission']['module_id'] = $this->_data['PermissionData']['module']; $this->_data['Permission']['component_id'] = $this->_data['PermissionData']['controller']; break; } } // make sure we've got a title if (!isset($this->_data['Permission']['title']) && empty($this->_data['Permission']['title'])) { $errors .= '<li>A title is required</li>'; } // before we proceed to save, do a quick error check if (!empty($errors)) { echo json_encode(array('success' => FALSE, 'errors' => $errors)); exit; } // save the model, saving the returned success variable $result = parent::save('Permission'); // get the values from flash $flash->save(); foreach ($flash->__get('errors') as $error) { $errors .= '<li>' . $error . '</li>'; } foreach ($flash->__get('messages') as $message) { $messages .= '<li>' . $message . '</li>'; } $flash->clear(); if ($result) { // save permission parameters $saved_permission = $this->saved_model; $parameter = new PermissionParameters(); $parameters = new PermissionParametersCollection($parameter); $sh = new SearchHandler($parameters, FALSE); $sh->addConstraint(new Constraint('permissionsid', '=', $saved_permission->id)); $parameters->load($sh); foreach ($parameters as $value) { $value->delete(); } $parameters_to_save = FALSE; if (!empty($this->_data['PermissionData']['extra'])) { // trim off excess whitespace off the whole $text = trim($this->_data['PermissionData']['extra']); // explode all separate lines into an array $textAr = explode("\n", $text); // trim all lines contained in the array. $textAr = array_filter($textAr, 'trim'); // loop through the lines foreach ($textAr as $line) { $parts = explode("=", $line); if (count($parts) === 2) { $parameters_to_save = TRUE; $parameter = new PermissionParameters(); $parameter->permissionsid = $saved_permission->id; $parameter->name = $parts[0]; $parameter->value = $parts[1]; $save_result = $parameter->save(); if ($save_result === FALSE) { $errors .= '<li>Failed to save parameters</li>'; continue; } } } } if (!$permission->update($saved_permission->id, 'has_parameters', $parameters_to_save === TRUE)) { $errors .= '<li>Error setting parameter flag on permission</li>'; } } if (empty($errors)) { $db->CompleteTrans(); echo json_encode(array('success' => TRUE, 'messages' => $messages)); } else { $db->FailTrans(); $db->CompleteTrans(); echo json_encode(array('success' => FALSE, 'errors' => $errors)); } }