/** * Show groups index page * * @param void * @return null */ function index() { $project_groups = ProjectGroups::findAll($this->logged_user); if ($this->request->getFormat() == FORMAT_HTML) { $this->smarty->assign(array('project_groups' => $project_groups, 'can_add_project_group' => ProjectGroup::canAdd($this->logged_user))); } else { $this->serveData($project_groups, 'project_groups'); } // if }
/** * Select project group helper * * Params: * * - value - ID of selected group * - optional - boolean * - can_create_new - Should this select box offer option to create a new * company from within the list * * @param array $params * @param Smarty $smarty * @return string */ function smarty_function_select_project_group($params, &$smarty) { static $ids = array(); $optional = array_var($params, 'optional', true, true); $value = array_var($params, 'value', null, true); $can_create_new = array_var($params, 'can_create_new', true, true); $id = array_var($params, 'id', null, true); if (empty($id)) { $counter = 1; do { $id = "select_project_group_dropdown_{$counter}"; $counter++; } while (in_array($id, $ids)); } // if $ids[] = $id; $params['id'] = $id; $groups = ProjectGroups::findAll($smarty->get_template_vars('logged_user'), true); if ($optional) { $options = array(option_tag(lang('-- None --'), ''), option_tag('', '')); } else { $options = array(); } // if if (is_foreachable($groups)) { foreach ($groups as $group) { $option_attributes = array('class' => 'object_option'); if ($value == $group->getId()) { $option_attributes['selected'] = true; } // if $options[] = option_tag($group->getName(), $group->getId(), $option_attributes); } // foreach } // if if ($can_create_new) { $params['add_object_url'] = assemble_url('project_groups_quick_add'); $params['object_name'] = 'project_group'; $params['add_object_message'] = lang('Please insert new project group name'); $logged_user = get_logged_user(); if (instance_of($logged_user, 'User') && ProjectGroup::canAdd($logged_user)) { $options[] = option_tag('', ''); $options[] = option_tag(lang('New Project Group...'), '', array('class' => 'new_object_option')); } // if } // if return select_box($options, $params) . '<script type="text/javascript">$("#' . $id . '").new_object_from_select();</script>'; }
/** * Return all groups ordered by name * * This function will return only groups visible to given user * * If $return_all is set to true all groups will be loaded and returned. * This is used in situations where we need all of them regardels of user * previous assignments (like select project group helper) * * @param User $user * @param boolean $return_all * @return array */ function findAll($user, $return_all = false) { if ($return_all || $user->isAdministrator() || $user->isProjectManager()) { return ProjectGroups::find(array('order' => 'name')); } // if $project_ids = Projects::findProjectIdsByUser($user); if (is_foreachable($project_ids)) { $projects_table = TABLE_PREFIX . 'projects'; $project_groups_table = TABLE_PREFIX . 'project_groups'; return ProjectGroups::findBySQL("SELECT DISTINCT {$project_groups_table}.* FROM {$projects_table}, {$project_groups_table} WHERE {$project_groups_table}.id = {$projects_table}.group_id AND {$projects_table}.id IN (?) ORDER BY {$project_groups_table}.name", array($project_ids)); } else { return null; } // if }
/** * Projects listing * */ function index() { $per_page = 10; $page = (int) $this->request->get('page'); if ($page < 1) { $page = 1; } // if $group = null; $group_id = $this->request->getId('group_id'); if ($group_id) { $group = ProjectGroups::findById($group_id); } // if if (instance_of($group, 'ProjectGroup')) { list($projects, $pagination) = Projects::paginateByUserAndGroup($this->logged_user, $group, array(PROJECT_STATUS_ACTIVE), $page, $per_page); } else { list($projects, $pagination) = Projects::paginateByUser($this->logged_user, array(PROJECT_STATUS_ACTIVE), $page, $per_page); } // if $this->smarty->assign(array('groups' => ProjectGroups::findAll($this->logged_user), 'selected_group_id' => $group_id, 'pagination' => $pagination, 'projects' => $projects, 'page_title' => lang('Projects'), 'paginator_url' => assemble_url('mobile_access_projects'))); }
/** * Render select project template widget * * @param array $params * @param Smarty $smarty * @return string */ function smarty_function_select_project_template($params, &$smarty) { $options = array(option_tag(lang('-- Create a Blank Project --'), ''), option_tag('', '')); $value = array_var($params, 'value', null, true); $projects_loaded = false; $group_id = ConfigOptions::getValue('project_templates_group'); if ($group_id) { $group = ProjectGroups::findById($group_id); if (instance_of($group, 'ProjectGroup')) { $projects = Projects::findByGroup($group); $projects_loaded = true; if (is_foreachable($projects)) { foreach ($projects as $project) { $option_attributes = $project->getId() == $value ? array('selected' => true) : null; $options[] = option_tag($project->getName(), $project->getId(), $option_attributes); } // if } // if } // if } // if if (!$projects_loaded) { $projects = Projects::findNamesByUser($smarty->get_template_vars('logged_user')); if (is_foreachable($projects)) { foreach ($projects as $k => $v) { $option_attributes = $k == $value ? array('selected' => true) : null; $options[] = option_tag($v, $k, $option_attributes); } // foreach } // if } // if return select_box($options, $params); }
/** * Return true if $user can delete this group * * @param User $user * @return boolean */ function canDelete($user) { return ($user->isProjectManager() || $user->isAdministrator()) && $this->getProjectsCount() == 0 && ProjectGroups::count() > 1; }
/** * Projects Arhive * * @param void * @return null */ function archive() { if ($this->request->isApiCall()) { $this->serveData(Projects::findByUser($this->logged_user), 'projects'); } // if $per_page = 10; $page = (int) $this->request->get('page'); if ($page < 1) { $page = 1; } // if if (!$this->logged_user->isOwner()) { $group_by = 'group'; } else { $group_by = $this->request->get('group_by'); if ($group_by != 'client') { $group_by = 'group'; } // if } // if $filter_by_status = $this->request->get('filter'); if (is_null($filter_by_status)) { $filter_by_status = 'all'; } // if switch ($filter_by_status) { case 'all': $statuses = array(PROJECT_STATUS_COMPLETED, PROJECT_STATUS_CANCELED, PROJECT_STATUS_PAUSED); break; case 'completed': $statuses = array(PROJECT_STATUS_COMPLETED); break; case 'paused': $statuses = array(PROJECT_STATUS_PAUSED); break; case 'canceled': $statuses = array(PROJECT_STATUS_CANCELED); break; default: $statuses = array(PROJECT_STATUS_COMPLETED, PROJECT_STATUS_CANCELED, PROJECT_STATUS_PAUSED); break; } // switch project status filter $this->smarty->assign(array('group_by' => $group_by, 'filter' => $filter_by_status)); if ($group_by == 'group') { $group = null; $group_id = $this->request->getId('group_id'); if ($group_id) { $group = ProjectGroups::findById($group_id); } // if if (instance_of($group, 'ProjectGroup')) { list($projects, $pagination) = Projects::paginateByUserAndGroup($this->logged_user, $group, $statuses, $page, $per_page, true); } else { list($projects, $pagination) = Projects::paginateByUser($this->logged_user, $statuses, $page, $per_page, true); } // if $this->smarty->assign(array('projects' => $projects, 'pagination' => $pagination, 'groups' => ProjectGroups::findAll($this->logged_user), 'selected_group' => $group)); } else { $company = null; $company_id = $this->request->getId('company_id'); if ($company_id) { $company = Companies::findById($company_id); } // if if (!instance_of($company, 'Company')) { $company = $this->owner_company; } // if list($projects, $pagination) = Projects::paginateByUserAndCompany($this->logged_user, $company, $statuses, $page, $per_page, true); $this->smarty->assign(array('projects' => $projects, 'pagination' => $pagination, 'companies' => Companies::findClients($this->logged_user), 'selected_company' => $company)); } // if }
/** * Get parent project group * * @param void * @return ProjectGroup */ function getGroup() { if ($this->group === false) { if ($this->getGroupId() == 0) { $this->group = null; } else { $this->group = ProjectGroups::findById($this->getGroupId()); } // if } // if return $this->group; }