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')); }
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; }
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); } }
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; }