/**
  * 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;
 }
Esempio n. 3
0
 /**
  * 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;
 }