| class IDF_Views␊ |
| {␊ |
| /**␊ |
| * The index view.␊ |
| */␊ |
| public function index($request, $match)␊ |
| {␊ |
| // TODO: add a switch here later on to determine whether the project list␊ |
| // or a custom start page should be displayed␊ |
| return $this->listProjects($request, $match);␊ |
| }␊ |
| ␊ |
| /**␊ |
| * List all the projects managed by InDefero.␊ |
| *␊ |
| * Only the public projects are listed or the private with correct␊ |
| * rights.␊ |
| */␊ |
| public function index($request, $match, $api=false)␊ |
| public function listProjects($request, $match, $api=false)␊ |
| {␊ |
| $projects = self::getProjects($request->user);␊ |
| $stats = self::getProjectsStatistics($projects);␊ |
| ␊ |
| if ($api == true) return $projects;␊ |
| return Pluf_Shortcuts_RenderToResponse('idf/index.html',␊ |
| return Pluf_Shortcuts_RenderToResponse('idf/listProjects.html',␊ |
| array('page_title' => __('Projects'),␊ |
| 'projects' => $projects,␊ |
| 'stats' => new Pluf_Template_ContextVars($stats)),␊ |
|
| {␊ |
| $db =& Pluf::db();␊ |
| $false = Pluf_DB_BooleanToDb(false, $db);␊ |
| if ($user->isAnonymous()) {␊ |
| $sql = sprintf('%s=%s', $db->qn('private'), $false);␊ |
| return Pluf::factory('IDF_Project')->getList(array('filter'=> $sql,␊ |
| 'order' => 'name ASC'));␊ |
| }␊ |
| if ($user->administrator) {␊ |
| return Pluf::factory('IDF_Project')->getList(array('order' => 'name ASC'));␊ |
| }␊ |
| // grab the list of projects where the user is admin, member␊ |
| // or authorized␊ |
| $perms = array(␊ |
| Pluf_Permission::getFromString('IDF.project-member'),␊ |
| Pluf_Permission::getFromString('IDF.project-owner'),␊ |
| Pluf_Permission::getFromString('IDF.project-authorized-user')␊ |
| );␊ |
| $sql = new Pluf_SQL("model_class='IDF_Project' AND owner_class='Pluf_User' AND owner_id=%s AND negative=".$false, $user->id);␊ |
| $rows = Pluf::factory('Pluf_RowPermission')->getList(array('filter' => $sql->gen()));␊ |
| $sql = new Pluf_SQL(1);␊ |
| ␊ |
| $sql = sprintf('%s=%s', $db->qn('private'), $false);␊ |
| if ($rows->count() > 0) {␊ |
| $ids = array();␊ |
| foreach ($rows as $row) {␊ |
| $ids[] = $row->model_id;␊ |
| if ($user->isAnonymous())␊ |
| {␊ |
| $authSql = new Pluf_SQL('private=%s', $false);␊ |
| $sql->SAnd($authSql);␊ |
| } else␊ |
| if (!$user->administrator) {␊ |
| // grab the list of projects where the user is admin,␊ |
| // member or authorized␊ |
| $perms = array(␊ |
| Pluf_Permission::getFromString('IDF.project-member'),␊ |
| Pluf_Permission::getFromString('IDF.project-owner'),␊ |
| Pluf_Permission::getFromString('IDF.project-authorized-user')␊ |
| );␊ |
| $permSql = new Pluf_SQL("model_class='IDF_Project' AND owner_class='Pluf_User' AND owner_id=%s AND negative=".$false, $user->id);␊ |
| $rows = Pluf::factory('Pluf_RowPermission')->getList(array('filter' => $permSql->gen()));␊ |
| ␊ |
| $authSql = new Pluf_SQL('private=%s', $false);␊ |
| if ($rows->count() > 0) {␊ |
| $ids = array();␊ |
| foreach ($rows as $row) {␊ |
| $ids[] = $row->model_id;␊ |
| }␊ |
| $authSql->SOr(new Pluf_SQL(sprintf('id IN (%s)', implode(', ', $ids))));␊ |
| }␊ |
| $sql .= sprintf(' OR id IN (%s)', implode(', ', $ids));␊ |
| $sql->SAnd($authSql);␊ |
| }␊ |
| return Pluf::factory('IDF_Project')->getList(array('filter' => $sql,␊ |
| 'order' => 'name ASC'));␊ |
| ␊ |
| return Pluf::factory('IDF_Project')->getList(array(␊ |
| 'filter'=> $sql->gen(),␊ |
| 'view' => 'join_activities',␊ |
| 'order' => 'name ASC'␊ |
| ));␊ |
| }␊ |
| ␊ |
| /**␊ |