Differential D18033 Diff 43374 src/applications/project/engineextension/PhabricatorProjectsMembershipIndexEngineExtension.php
Changeset View
Changeset View
Standalone View
Standalone View
src/applications/project/engineextension/PhabricatorProjectsMembershipIndexEngineExtension.php
| Show All 28 Lines | public function rematerialize(PhabricatorProject $project) { | ||||
| array_unshift($materialize, $project); | array_unshift($materialize, $project); | ||||
| foreach ($materialize as $project) { | foreach ($materialize as $project) { | ||||
| $this->materializeProject($project); | $this->materializeProject($project); | ||||
| } | } | ||||
| } | } | ||||
| private function materializeProject(PhabricatorProject $project) { | private function materializeProject(PhabricatorProject $project) { | ||||
| if ($project->isMilestone()) { | |||||
| return; | |||||
| } | |||||
| $material_type = PhabricatorProjectMaterializedMemberEdgeType::EDGECONST; | $material_type = PhabricatorProjectMaterializedMemberEdgeType::EDGECONST; | ||||
| $member_type = PhabricatorProjectProjectHasMemberEdgeType::EDGECONST; | $member_type = PhabricatorProjectProjectHasMemberEdgeType::EDGECONST; | ||||
| $project_phid = $project->getPHID(); | $project_phid = $project->getPHID(); | ||||
| if ($project->isMilestone()) { | |||||
| $source_phids = array($project->getParentProjectPHID()); | |||||
| $has_subprojects = false; | |||||
| } else { | |||||
| $descendants = id(new PhabricatorProjectQuery()) | $descendants = id(new PhabricatorProjectQuery()) | ||||
| ->setViewer($this->getViewer()) | ->setViewer($this->getViewer()) | ||||
| ->withAncestorProjectPHIDs(array($project->getPHID())) | ->withAncestorProjectPHIDs(array($project->getPHID())) | ||||
| ->withIsMilestone(false) | ->withIsMilestone(false) | ||||
| ->withHasSubprojects(false) | ->withHasSubprojects(false) | ||||
| ->execute(); | ->execute(); | ||||
| $descendant_phids = mpull($descendants, 'getPHID'); | $descendant_phids = mpull($descendants, 'getPHID'); | ||||
| if ($descendant_phids) { | if ($descendant_phids) { | ||||
| $source_phids = $descendant_phids; | $source_phids = $descendant_phids; | ||||
| $has_subprojects = true; | $has_subprojects = true; | ||||
| } else { | } else { | ||||
| $source_phids = array($project->getPHID()); | $source_phids = array($project->getPHID()); | ||||
| $has_subprojects = false; | $has_subprojects = false; | ||||
| } | } | ||||
| } | |||||
epriestley: We could do the `isMilestone()` test earlier and skip this extra query I think -- we know… | |||||
Not Done Inline ActionsJinx, I owe you a coke! amckinley: Jinx, I owe you a coke! | |||||
| $conn_w = $project->establishConnection('w'); | $conn_w = $project->establishConnection('w'); | ||||
| $any_milestone = queryfx_one( | $any_milestone = queryfx_one( | ||||
| $conn_w, | $conn_w, | ||||
Not Done Inline ActionsActually, since milestones can't have sub-milestones, this is probably better written by adding another clause to the existing if statement. amckinley: Actually, since milestones can't have sub-milestones, this is probably better written by adding… | |||||
| 'SELECT id FROM %T | 'SELECT id FROM %T | ||||
| WHERE parentProjectPHID = %s AND milestoneNumber IS NOT NULL | WHERE parentProjectPHID = %s AND milestoneNumber IS NOT NULL | ||||
| LIMIT 1', | LIMIT 1', | ||||
| $project->getTableName(), | $project->getTableName(), | ||||
| $project_phid); | $project_phid); | ||||
| $has_milestones = (bool)$any_milestone; | $has_milestones = (bool)$any_milestone; | ||||
| $project->openTransaction(); | $project->openTransaction(); | ||||
| ▲ Show 20 Lines • Show All 42 Lines • Show Last 20 Lines | |||||
We could do the isMilestone() test earlier and skip this extra query I think -- we know milestones never have subprojects or descendants.