Path: blob/master/src/applications/maniphest/view/ManiphestTaskResultListView.php
12256 views
<?php12final class ManiphestTaskResultListView extends ManiphestView {34private $tasks;5private $savedQuery;6private $canBatchEdit;7private $showBatchControls;89public function setSavedQuery(PhabricatorSavedQuery $query) {10$this->savedQuery = $query;11return $this;12}1314public function setTasks(array $tasks) {15$this->tasks = $tasks;16return $this;17}1819public function setCanBatchEdit($can_batch_edit) {20$this->canBatchEdit = $can_batch_edit;21return $this;22}2324public function setShowBatchControls($show_batch_controls) {25$this->showBatchControls = $show_batch_controls;26return $this;27}2829public function render() {30$viewer = $this->getUser();31$tasks = $this->tasks;32$query = $this->savedQuery;3334// If we didn't match anything, just pick up the default empty state.35if (!$tasks) {36return id(new PHUIObjectItemListView())37->setUser($viewer)38->setNoDataString(pht('No tasks found.'));39}4041$group_parameter = nonempty($query->getParameter('group'), 'priority');42$order_parameter = nonempty($query->getParameter('order'), 'priority');4344$handles = ManiphestTaskListView::loadTaskHandles($viewer, $tasks);45$groups = $this->groupTasks(46$tasks,47$group_parameter,48$handles);4950$result = array();5152$lists = array();53foreach ($groups as $group => $list) {54$task_list = new ManiphestTaskListView();55$task_list->setShowBatchControls($this->showBatchControls);56$task_list->setUser($viewer);57$task_list->setTasks($list);58$task_list->setHandles($handles);5960$header = id(new PHUIHeaderView())61->addSigil('task-group')62->setMetadata(array('priority' => head($list)->getPriority()))63->setHeader(pht('%s (%s)', $group, phutil_count($list)));6465$lists[] = id(new PHUIObjectBoxView())66->setHeader($header)67->setObjectList($task_list);6869}7071return array(72$lists,73$this->showBatchControls ? $this->renderBatchEditor($query) : null,74);75}767778private function groupTasks(array $tasks, $group, array $handles) {79assert_instances_of($tasks, 'ManiphestTask');80assert_instances_of($handles, 'PhabricatorObjectHandle');8182$groups = $this->getTaskGrouping($tasks, $group);8384$results = array();85foreach ($groups as $label_key => $tasks) {86$label = $this->getTaskLabelName($group, $label_key, $handles);87$results[$label][] = $tasks;88}89foreach ($results as $label => $task_groups) {90$results[$label] = array_mergev($task_groups);91}9293return $results;94}9596private function getTaskGrouping(array $tasks, $group) {97switch ($group) {98case 'priority':99return mgroup($tasks, 'getPriority');100case 'status':101return mgroup($tasks, 'getStatus');102case 'assigned':103return mgroup($tasks, 'getOwnerPHID');104case 'project':105return mgroup($tasks, 'getGroupByProjectPHID');106default:107return array(pht('Tasks') => $tasks);108}109}110111private function getTaskLabelName($group, $label_key, array $handles) {112switch ($group) {113case 'priority':114return ManiphestTaskPriority::getTaskPriorityName($label_key);115case 'status':116return ManiphestTaskStatus::getTaskStatusFullName($label_key);117case 'assigned':118if ($label_key) {119return $handles[$label_key]->getFullName();120} else {121return pht('(Not Assigned)');122}123case 'project':124if ($label_key) {125return $handles[$label_key]->getFullName();126} else {127// This may mean "No Projects", or it may mean the query has project128// constraints but the task is only in constrained projects (in this129// case, we don't show the group because it would always have all130// of the tasks). Since distinguishing between these two cases is131// messy and the UI is reasonably clear, label generically.132return pht('(Ungrouped)');133}134default:135return pht('Tasks');136}137}138139private function renderBatchEditor(PhabricatorSavedQuery $saved_query) {140$user = $this->getUser();141142if (!$this->canBatchEdit) {143return null;144}145146if (!$user->isLoggedIn()) {147// Don't show the batch editor for logged-out users.148return null;149}150151Javelin::initBehavior(152'maniphest-batch-selector',153array(154'selectAll' => 'batch-select-all',155'selectNone' => 'batch-select-none',156'submit' => 'batch-select-submit',157'status' => 'batch-select-status-cell',158'idContainer' => 'batch-select-id-container',159'formID' => 'batch-select-form',160));161162$select_all = javelin_tag(163'a',164array(165'href' => '#',166'mustcapture' => true,167'class' => 'button button-grey',168'id' => 'batch-select-all',169),170pht('Select All'));171172$select_none = javelin_tag(173'a',174array(175'href' => '#',176'mustcapture' => true,177'class' => 'button button-grey',178'id' => 'batch-select-none',179),180pht('Clear Selection'));181182$submit = phutil_tag(183'button',184array(185'id' => 'batch-select-submit',186'disabled' => 'disabled',187'class' => 'disabled',188),189pht("Bulk Edit Selected \xC2\xBB"));190191$hidden = phutil_tag(192'div',193array(194'id' => 'batch-select-id-container',195),196'');197198$editor = hsprintf(199'<table class="maniphest-batch-editor-layout">'.200'<tr>'.201'<td>%s%s</td>'.202'<td id="batch-select-status-cell">%s</td>'.203'<td class="batch-select-submit-cell">%s%s</td>'.204'</tr>'.205'</table>',206$select_all,207$select_none,208'',209$submit,210$hidden);211212$editor = phabricator_form(213$user,214array(215'method' => 'POST',216'action' => '/maniphest/bulk/',217'id' => 'batch-select-form',218),219$editor);220221$box = id(new PHUIObjectBoxView())222->setHeaderText(pht('Batch Task Editor'))223->appendChild($editor);224225$content = phutil_tag_div('maniphest-batch-editor', $box);226227return $content;228}229}230231232