Changeset View
Changeset View
Standalone View
Standalone View
src/applications/project/state/PhabricatorWorkboardViewState.php
| <?php | <?php | ||||
| final class PhabricatorWorkboardViewState | final class PhabricatorWorkboardViewState | ||||
| extends Phobject { | extends Phobject { | ||||
| private $viewer; | private $viewer; | ||||
| private $project; | private $project; | ||||
| private $requestState = array(); | private $requestState = array(); | ||||
| private $savedQuery; | private $savedQuery; | ||||
| private $searchEngine; | private $searchEngine; | ||||
| private $layoutEngine; | |||||
| private $objects; | |||||
| public function setProject(PhabricatorProject $project) { | public function setProject(PhabricatorProject $project) { | ||||
| $this->project = $project; | $this->project = $project; | ||||
| return $this; | return $this; | ||||
| } | } | ||||
| public function getProject() { | public function getProject() { | ||||
| return $this->project; | return $this->project; | ||||
| ▲ Show 20 Lines • Show All 188 Lines • ▼ Show 20 Lines | private function getDefaultQueryKey() { | ||||
| return 'open'; | return 'open'; | ||||
| } | } | ||||
| public function getQueryParameters() { | public function getQueryParameters() { | ||||
| return $this->requestState; | return $this->requestState; | ||||
| } | } | ||||
| public function getLayoutEngine() { | |||||
| if ($this->layoutEngine === null) { | |||||
| $this->layoutEngine = $this->newLayoutEngine(); | |||||
| } | |||||
| return $this->layoutEngine; | |||||
| } | |||||
| private function newLayoutEngine() { | |||||
| $project = $this->getProject(); | |||||
| $viewer = $this->getViewer(); | |||||
| $board_phid = $project->getPHID(); | |||||
| $objects = $this->getObjects(); | |||||
| // Regardless of display order, pass tasks to the layout engine in ID order | |||||
| // so layout is consistent. | |||||
| $objects = msort($objects, 'getID'); | |||||
| $layout_engine = id(new PhabricatorBoardLayoutEngine()) | |||||
| ->setViewer($viewer) | |||||
| ->setObjectPHIDs(array_keys($objects)) | |||||
| ->setBoardPHIDs(array($board_phid)) | |||||
| ->setFetchAllBoards(true) | |||||
| ->executeLayout(); | |||||
| return $layout_engine; | |||||
| } | |||||
| public function getBoardContainerPHIDs() { | |||||
| $project = $this->getProject(); | |||||
| $viewer = $this->getViewer(); | |||||
| $container_phids = array($project->getPHID()); | |||||
| if ($project->getHasSubprojects() || $project->getHasMilestones()) { | |||||
| $descendants = id(new PhabricatorProjectQuery()) | |||||
| ->setViewer($viewer) | |||||
| ->withAncestorProjectPHIDs($container_phids) | |||||
| ->execute(); | |||||
| foreach ($descendants as $descendant) { | |||||
| $container_phids[] = $descendant->getPHID(); | |||||
| } | |||||
| } | |||||
| return $container_phids; | |||||
| } | |||||
| public function getObjects() { | |||||
| if ($this->objects === null) { | |||||
| $this->objects = $this->newObjects(); | |||||
| } | |||||
| return $this->objects; | |||||
| } | |||||
| private function newObjects() { | |||||
| $viewer = $this->getViewer(); | |||||
| $saved_query = $this->getSavedQuery(); | |||||
| $search_engine = $this->getSearchEngine(); | |||||
| $container_phids = $this->getBoardContainerPHIDs(); | |||||
| $task_query = $search_engine->buildQueryFromSavedQuery($saved_query) | |||||
| ->setViewer($viewer) | |||||
| ->withEdgeLogicPHIDs( | |||||
| PhabricatorProjectObjectHasProjectEdgeType::EDGECONST, | |||||
| PhabricatorQueryConstraint::OPERATOR_ANCESTOR, | |||||
| array($container_phids)); | |||||
| $tasks = $task_query->execute(); | |||||
| $tasks = mpull($tasks, null, 'getPHID'); | |||||
| return $tasks; | |||||
| } | |||||
| } | } | ||||