Beispiel #1
0
 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));
     }
 }