/** * 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; }
function mass_update() { if ($this->request->isSubmitted()) { $action = $this->request->post('with_selected'); if (trim($action) == '') { flash_error('Please select what you want to do with selected milestones'); $this->redirectToReferer($this->smarty->get_template_vars('milestoness_url')); } // if $milestone_ids = $this->request->post('milestones'); $milestones = Milestones::findByIds($milestone_ids, STATE_VISIBLE, $this->logged_user->getVisibility()); $updated = 0; if (is_foreachable($milestones)) { // Complete selected milestones if ($action == 'complete') { $message = lang(':count milestones completed'); //BOF:mod 20110617 //BOF:mod 20120917 (reversed by shawn) /* //EOF:mod 20120917 $warning = ''; foreach($milestones as $milestone) { if($milestone->isOpen() && $milestone->canChangeCompleteStatus($this->logged_user)) { $responsible_assignee = $milestone->getResponsibleAssignee(); $created_by_id = $milestone->getCreatedById(); $project_leader = $this->active_project->getLeaderId(); if ( (!is_null($responsible_assignee) && $responsible_assignee->getId()==$this->logged_user->getId()) || $created_by_id==$this->logged_user->getId() || $project_leader==$this->logged_user->getId() || $this->logged_user->isAdministrator() ){ $warning .= ''; } else { $warning .= '"' . $milestone->getName() . '", '; } } } if (!empty($warning)){ $temp = new User(!empty($created_by_id) ? $created_by_id : $project_leader); $warning = 'Project ' . substr($warning, 0, -2) . ' cannot be closed at this time. Please send message to ' . $temp->getName() . ' to close this ticket.'; unset($temp); flash_error($warning, null, true); $this->redirectToReferer($this->smarty->get_template_vars('milestones_url')); } else { //BOF:mod 20120917 (reversed by shawn) */ //EOF:mod 20120917 //EOF:mod 20110617 foreach ($milestones as $milestone) { if ($milestone->isOpen() && $milestone->canChangeCompleteStatus($this->logged_user)) { $complete = $milestone->complete($this->logged_user); if ($complete && !is_error($complete)) { $updated++; } // if } // if } // foreach $this->redirectToReferer($this->smarty->get_template_vars('milestoness_url')); //BOF:mod 20110617 //BOF:mod 20120917 (reversed by shawn) /* //EOF:mod 20120917 } //BOF:mod 20120917 (reversed by shawn) */ //EOF:mod 20120917 //EOF:mod 20110617 // Open selected milestones } elseif ($action == 'open') { $message = lang(':count milestones opened'); foreach ($milestones as $milestone) { if ($milestone->isCompleted() && $milestone->canChangeCompleteStatus($this->logged_user)) { $open = $milestone->open($this->logged_user); if ($open && !is_error($open)) { $updated++; } // if } // if } // foreach $this->redirectToReferer($this->smarty->get_template_vars('milestoness_url')); // Mark object as starred } elseif ($action == 'star') { $message = lang(':count milestones starred'); foreach ($milestones as $milestone) { $star = $milestone->star($this->logged_user); if ($star && !is_error($star)) { $updated++; } // if } // foreach $this->redirectToReferer($this->smarty->get_template_vars('milestoness_url')); // Unstar objects } elseif ($action == 'unstar') { $message = lang(':count milestones unstarred'); foreach ($milestones as $milestone) { $unstar = $milestone->unstar($this->logged_user); if ($unstar && !is_error($unstar)) { $updated++; } // if } // foreach $this->redirectToReferer($this->smarty->get_template_vars('milestoness_url')); // Move selected objects to Trash } elseif ($action == 'trash') { $message = lang(':count milestones moved to Trash'); foreach ($milestones as $milestone) { if ($milestone->canDelete($this->logged_user)) { $delete = $milestone->moveToTrash(); if ($delete && !is_error($delete)) { $updated++; } // if } // if } // foreach $this->redirectToReferer($this->smarty->get_template_vars('milestoness_url')); // Set a selected priority } elseif (str_starts_with($action, 'set_priority')) { $priority = (int) substr($action, 13); $message = lang(':count milestones updated'); foreach ($milestones as $milestone) { if ($milestone->canEdit($this->logged_user)) { $milestone->setPriority($priority); $save = $milestone->save(); if ($save && !is_error($save)) { $updated++; } // if } // if } // foreach $this->redirectToReferer($this->smarty->get_template_vars('milestoness_url')); // Set visibility } elseif (str_starts_with($action, 'set_visibility')) { $visibility = (int) substr($action, 15); $message = lang(':count milestones updated'); foreach ($milestones as $milestone) { if ($milestone->canEdit($this->logged_user)) { $milestone->setVisibility($visibility); $save = $milestone->save(); if ($save && !is_error($save)) { $updated++; } // if } // if } // foreach $this->redirectToReferer($this->smarty->get_template_vars('milestoness_url')); // Move selected milestones to selected category } elseif (str_starts_with($action, 'move_to_category')) { if ($action == 'move_to_category') { $category_id = null; } else { $category_id = (int) substr($action, 17); } // if //$category = $category_id ? Categories::findById($category_id) : null; $message = lang(':count milestones updated'); foreach ($milestones as $milestone) { if ($milestone->canEdit($this->logged_user)) { $milestone->setCategoryId($category_id); $save = $milestone->save(); if ($save && !is_error($save)) { $updated++; } // if } // if } // foreach $this->redirectToReferer($this->smarty->get_template_vars('milestoness_url')); } else { $this->httpError(HTTP_ERR_BAD_REQUEST); } // if } else { flash_error('Please select milestones that you would like to update'); $this->redirectToReferer($this->smarty->get_template_vars('milestones_url')); } // if } else { $this->httpError(HTTP_ERR_BAD_REQUEST); } }