/** * Add people to the project * * @param void * @return null */ function add_people() { if (!$this->active_project->canEdit($this->logged_user)) { $this->httpError(HTTP_ERR_FORBIDDEN); } // if $project_users = $this->active_project->getUsers(); if (is_foreachable($project_users)) { $exclude_users = objects_array_extract($project_users, 'getId'); } else { $exclude_users = null; } // if $this->smarty->assign(array('exclude_users' => $exclude_users)); if ($this->request->isSubmitted()) { $user_ids = $this->request->post('users'); if (!is_foreachable($user_ids)) { flash_error('No users selected'); $this->redirectToUrl($this->active_project->getViewUrl()); } // if $users = Users::findByIds($user_ids); $project_permissions = $this->request->post('project_permissions'); $role = null; $role_id = (int) array_var($project_permissions, 'role_id'); if ($role_id) { $role = Roles::findById($role_id); } // if if (instance_of($role, 'Role') && $role->getType() == ROLE_TYPE_PROJECT) { $permissions = null; } else { $permissions = array_var($project_permissions, 'permissions'); if (!is_array($permissions)) { $permissions = null; } // if } // if if (is_foreachable($users)) { db_begin_work(); $added = array(); foreach ($users as $user) { $add = $this->active_project->addUser($user, $role, $permissions); if ($add && !is_error($add)) { $added[] = $user->getDisplayName(); } else { db_rollback(); flash_error('Failed to add ":user" to ":project" project', array('user' => $user->getDisplayName(), 'project' => $this->active_project->getName())); $this->redirectToUrl($this->active_project->getAddPeopleUrl()); } // if } // foreach db_commit(); if ($this->request->isApiCall()) { $this->httpOk(); } else { require_once SMARTY_PATH . '/plugins/function.join.php'; flash_success(':users added to :project project', array('users' => smarty_function_join(array('items' => $added)), 'project' => $this->active_project->getName())); $this->redirectToUrl($this->active_project->getPeopleUrl()); } // if } // if } else { if ($this->request->isApiCall()) { $this->httpError(HTTP_ERR_BAD_REQUEST); } // if } // if }
/** * Group objects by milestone * * This function will group any group of object by milestone * * @param array $objects * @param integer $min_state * @param integer $min_visibility * @return array */ function groupByMilestone($objects, $min_state = STATE_VISIBLE, $min_visibility = VISIBILITY_NORMAL) { $result = array(); if (is_foreachable($objects)) { $milestone_ids = objects_array_extract($objects, 'getMilestoneId'); if (is_foreachable($milestone_ids)) { $milestones = Milestones::findByIds($milestone_ids, $min_state, $min_visibility); if (is_foreachable($milestones)) { foreach ($milestones as $milestone) { $result[$milestone->getId()] = array('milestone' => $milestone, 'objects' => array()); } // foreach } // if } // if // For unknown milestone objects $result[0] = array('milestone' => null, 'objects' => array()); foreach ($objects as $object) { if (isset($result[$object->getMilestoneId()])) { $result[$object->getMilestoneId()]['objects'][] = $object; } else { $result[0]['objects'][] = $object; } // if } // foreach } // if return $result; }
/** * Use array of users and organize them by category * * @param array $users * @return array */ function groupByCompany($users) { $result = array(); if (is_foreachable($users)) { $company_ids = array_unique(objects_array_extract($users, 'getCompanyId')); if (is_foreachable($company_ids)) { $companies = Companies::findByIds($company_ids); foreach ($companies as $company) { $result[$company->getId()] = array('company' => $company, 'users' => array()); } // foreach foreach ($users as $user) { $result[$user->getCompanyId()]['users'][] = $user; } // foreach } // if } // if return $result; }