public function _new()
 {
     parent::_new();
     $permissions = new PermissionCollection(new Permission());
     $sh = new SearchHandler($permissions, FALSE);
     $sh->addConstraint(new Constraint('parent_id', 'is', 'NULL'));
     $sh->setOrderby('title');
     $permissions->load($sh);
     $systemcompany = $this->_uses[$this->modeltype];
     if ($systemcompany->isLoaded()) {
         $companypermissions = new CompanypermissionCollection(new Companypermission());
         $checked = $companypermissions->getPermissionIDs($systemcompany->id);
         $this->view->set('checked', $checked);
         $debug = DebugOption::getCompanyOption($systemcompany->id);
         $this->view->set('debug_id', $debug->id);
         $this->view->set('selected_options', $debug->getOptions());
         foreach ($permissions as $permission) {
             $permission->setAdditional('permissions');
             if (isset($checked[$permission->id])) {
                 $permission->permissions = TRUE;
             } else {
                 $permission->permissions = FALSE;
             }
         }
     }
     $this->view->set('permissions', $permissions);
     $debug = new DebugOption();
     $this->view->set('debug_options', $debug->getEnumOptions('options'));
 }
Example #2
0
 function getPermissionTree($permissions = array(), $parent = null)
 {
     $nextlevel = new PermissionCollection();
     $sh = new SearchHandler($nextlevel, false);
     if (!empty($permissions)) {
         $sh->addConstraint(new Constraint('id', 'in', '(' . implode($permissions, ',') . ')'));
     }
     if (empty($parent)) {
         $sh->addConstraint(new Constraint('parent_id', 'is', 'NULL'));
     } else {
         $sh->addConstraint(new Constraint('parent_id', '=', $parent));
     }
     $sh->setOrderby('position');
     $rows = $nextlevel->load($sh, null, RETURN_ROWS);
     $tree = array();
     if (!empty($rows)) {
         foreach ($rows as $permission) {
             $tree[$permission['id']] = $permission;
             $tree[$permission['id']]['children'] = $this->getPermissionTree($permissions, $permission['id']);
         }
     }
     return $tree;
 }
Example #3
0
 private function get_related_menu_items()
 {
     $menu_items = array();
     if (!isset($_GET['pid'])) {
         $ao = AccessObject::Instance();
         $pid = $ao->getPermission($_GET['module'], $_GET['controller'], $_GET['action']);
     } else {
         $pid = $_GET['pid'];
     }
     $permission = new Permission();
     $permissions = new PermissionCollection();
     $sh = new SearchHandler($permissions, FALSE);
     $sh->addConstraint(new Constraint('parent_id', '=', $pid));
     $sh->addConstraint(new Constraint('display_in_sidebar', 'IS', 'true'));
     $data = $permissions->load($sh, null, RETURN_ROWS);
     if (!empty($data)) {
         foreach ($data as $item) {
             $link_array = array();
             foreach ($permission->build_link($item['id']) as $key => $value) {
                 $link_array[$key] = $value;
             }
             $menu_items[] = array('tag' => $item['title'], 'link' => $link_array);
         }
     }
     if (!empty($menu_items)) {
         $this->addList('Related Menu Items', $menu_items);
     }
 }
Example #4
0
 public function update()
 {
     $db = DB::Instance();
     $db->StartTrans();
     $new_position = $this->_data['position'];
     // load sibling permissions
     $permissions = new PermissionCollection(new Permission());
     $sh = new SearchHandler($permissions, FALSE);
     // build the query based on whether a parent_id is available
     if (isset($this->_data['parent_id']) && !empty($this->_data['parent_id'])) {
         $sh->addConstraint(new Constraint('parent_id', '=', $this->_data['parent_id']));
     } else {
         $this->_data['parent_id'] = 'null';
         $sh->addConstraint(new Constraint('parent_id', 'IS', 'NULL'));
     }
     // finally, always ignore the current permission
     $sh->addConstraint(new Constraint('id', '!=', $this->_data['permission_id']));
     $permissions->load($sh);
     //***********************************
     // CHECK + UPDATE SIBLING PERMISSIONS
     $count = 0;
     $position_errors = FALSE;
     foreach ($permissions as $model) {
         // normal increment
         $count++;
         if ($new_position == $count) {
             // we've come across our new item
             // increment again, so we make a gap for the new permission
             $count++;
         }
         // there's no point in updating the record if it's already in the correct position
         if ($model->position != $count) {
             if (!$model->update($model->id, array('position'), array($count))) {
                 $position_errors = TRUE;
                 continue;
             }
         }
     }
     // no point in proceeding is we've got errors
     if ($position_errors === TRUE) {
         $db->FailTrans();
         $db->CompleteTrans();
         echo json_encode(array('success' => FALSE, 'errors' => '<li>Error updating sibling positions</li>'));
         exit;
     }
     $permission = new Permission();
     // update the current permission position
     if (!$permission->update($this->_data['permission_id'], array('position', 'parent_id'), array($new_position, $this->_data['parent_id']))) {
         $db->FailTrans();
         $db->CompleteTrans();
         echo json_encode(array('success' => FALSE, 'errors' => '<li>Error updating desired position</li>'));
         exit;
     }
     // must have been successful
     $db->CompleteTrans();
     echo json_encode(array('success' => TRUE));
     exit;
 }