diff --git a/src/applications/project/engine/PhabricatorBoardRenderingEngine.php b/src/applications/project/engine/PhabricatorBoardRenderingEngine.php index ca8b0633da..d76497bc21 100644 --- a/src/applications/project/engine/PhabricatorBoardRenderingEngine.php +++ b/src/applications/project/engine/PhabricatorBoardRenderingEngine.php @@ -1,144 +1,146 @@ viewer = $viewer; return $this; } public function getViewer() { return $this->viewer; } public function setObjects(array $objects) { $this->objects = mpull($objects, null, 'getPHID'); return $this; } public function getObjects() { return $this->objects; } public function setExcludedProjectPHIDs(array $phids) { $this->excludedProjectPHIDs = $phids; return $this; } public function getExcludedProjectPHIDs() { return $this->excludedProjectPHIDs; } public function setEditMap(array $edit_map) { $this->editMap = $edit_map; return $this; } public function getEditMap() { return $this->editMap; } public function renderCard($phid) { $this->willRender(); $viewer = $this->getViewer(); $object = idx($this->getObjects(), $phid); $card = id(new ProjectBoardTaskCard()) ->setViewer($viewer) ->setTask($object) ->setCanEdit($this->getCanEdit($phid)); $owner_phid = $object->getOwnerPHID(); if ($owner_phid) { $owner_handle = $this->handles[$owner_phid]; $card->setOwner($owner_handle); } $project_phids = $object->getProjectPHIDs(); $project_handles = array_select_keys($this->handles, $project_phids); if ($project_handles) { - $card->setProjectHandles($project_handles); + $card + ->setHideArchivedProjects(true) + ->setProjectHandles($project_handles); } $cover_phid = $object->getCoverImageThumbnailPHID(); if ($cover_phid) { $cover_file = idx($this->coverFiles, $cover_phid); if ($cover_file) { $card->setCoverImageFile($cover_file); } } return $card; } private function willRender() { if ($this->loaded) { return; } $phids = array(); foreach ($this->objects as $object) { $owner_phid = $object->getOwnerPHID(); if ($owner_phid) { $phids[$owner_phid] = $owner_phid; } foreach ($object->getProjectPHIDs() as $phid) { $phids[$phid] = $phid; } } if ($this->excludedProjectPHIDs) { foreach ($this->excludedProjectPHIDs as $excluded_phid) { unset($phids[$excluded_phid]); } } $viewer = $this->getViewer(); $handles = $viewer->loadHandles($phids); $handles = iterator_to_array($handles); $this->handles = $handles; $cover_phids = array(); foreach ($this->objects as $object) { $cover_phid = $object->getCoverImageThumbnailPHID(); if ($cover_phid) { $cover_phids[$cover_phid] = $cover_phid; } } if ($cover_phids) { $cover_files = id(new PhabricatorFileQuery()) ->setViewer($viewer) ->withPHIDs($cover_phids) ->execute(); $cover_files = mpull($cover_files, null, 'getPHID'); } else { $cover_files = array(); } $this->coverFiles = $cover_files; $this->loaded = true; } private function getCanEdit($phid) { if ($this->editMap === null) { return true; } return idx($this->editMap, $phid); } } diff --git a/src/applications/project/view/ProjectBoardTaskCard.php b/src/applications/project/view/ProjectBoardTaskCard.php index 1a6807ec45..3a7016ca74 100644 --- a/src/applications/project/view/ProjectBoardTaskCard.php +++ b/src/applications/project/view/ProjectBoardTaskCard.php @@ -1,150 +1,162 @@ viewer = $viewer; return $this; } public function getViewer() { return $this->viewer; } public function setProjectHandles(array $handles) { $this->projectHandles = $handles; return $this; } public function getProjectHandles() { return $this->projectHandles; } public function setCoverImageFile(PhabricatorFile $cover_image_file) { $this->coverImageFile = $cover_image_file; return $this; } public function getCoverImageFile() { return $this->coverImageFile; } + public function setHideArchivedProjects($hide_archived_projects) { + $this->hideArchivedProjects = $hide_archived_projects; + return $this; + } + + public function getHideArchivedProjects() { + return $this->hideArchivedProjects; + } + public function setTask(ManiphestTask $task) { $this->task = $task; return $this; } public function getTask() { return $this->task; } public function setOwner(PhabricatorObjectHandle $owner = null) { $this->owner = $owner; return $this; } public function getOwner() { return $this->owner; } public function setCanEdit($can_edit) { $this->canEdit = $can_edit; return $this; } public function getCanEdit() { return $this->canEdit; } public function getItem() { $task = $this->getTask(); $owner = $this->getOwner(); $can_edit = $this->getCanEdit(); $viewer = $this->getViewer(); $color_map = ManiphestTaskPriority::getColorMap(); $bar_color = idx($color_map, $task->getPriority(), 'grey'); $card = id(new PHUIObjectItemView()) ->setObject($task) ->setUser($viewer) ->setObjectName('T'.$task->getID()) ->setHeader($task->getTitle()) ->setGrippable($can_edit) ->setHref('/T'.$task->getID()) ->addSigil('project-card') ->setDisabled($task->isClosed()) ->addAction( id(new PHUIListItemView()) ->setName(pht('Edit')) ->setIcon('fa-pencil') ->addSigil('edit-project-card') ->setHref('/maniphest/task/edit/'.$task->getID().'/')) ->setBarColor($bar_color); if ($owner) { $card->addHandleIcon($owner, $owner->getName()); } $cover_file = $this->getCoverImageFile(); if ($cover_file) { $card->setCoverImage($cover_file->getBestURI()); } if (ManiphestTaskPoints::getIsEnabled()) { $points = $task->getPoints(); if ($points !== null) { $points_tag = id(new PHUITagView()) ->setType(PHUITagView::TYPE_SHADE) ->setColor(PHUITagView::COLOR_GREY) ->setSlimShady(true) ->setName($points) ->addClass('phui-workcard-points'); $card->addAttribute($points_tag); } } $subtype = $task->newSubtypeObject(); if ($subtype && $subtype->hasTagView()) { $subtype_tag = $subtype->newTagView() ->setSlimShady(true); $card->addAttribute($subtype_tag); } if ($task->isClosed()) { $icon = ManiphestTaskStatus::getStatusIcon($task->getStatus()); $icon = id(new PHUIIconView()) ->setIcon($icon.' grey'); $card->addAttribute($icon); $card->setBarColor('grey'); } $project_handles = $this->getProjectHandles(); // Remove any archived projects from the list. - if ($project_handles) { - foreach ($project_handles as $key => $handle) { - if ($handle->getStatus() == PhabricatorObjectHandle::STATUS_CLOSED) { - unset($project_handles[$key]); + if ($this->hideArchivedProjects) { + if ($project_handles) { + foreach ($project_handles as $key => $handle) { + if ($handle->getStatus() == PhabricatorObjectHandle::STATUS_CLOSED) { + unset($project_handles[$key]); + } } } } if ($project_handles) { $project_handles = array_reverse($project_handles); $tag_list = id(new PHUIHandleTagListView()) ->setSlim(true) ->setHandles($project_handles); $card->addAttribute($tag_list); } $card->addClass('phui-workcard'); return $card; } }