mirror of
https://we.phorge.it/source/phorge.git
synced 2025-01-20 11:41:08 +01:00
b902005bed
Summary: Ref T603. Killing this class is cool because the classes that replace it are policy-aware. Tried to keep my wits about me as I did this and fixed a few random things along the way. (Ones I remember right now are pulling a query outside of a foreach loop in Releeph and fixing the text in UIExample to note that the ace of hearts if "a powerful" card and not the "most powerful" card (Q of spades gets that honor IMO)) Test Plan: tested the first few changes (execute, executeOne X handle, object) then got real mechanical / careful with the other changes. Reviewers: epriestley Reviewed By: epriestley CC: Korvin, aran, FacebookPOC Maniphest Tasks: T603 Differential Revision: https://secure.phabricator.com/D6941
127 lines
3.8 KiB
PHP
127 lines
3.8 KiB
PHP
<?php
|
|
|
|
/**
|
|
* @group maniphest
|
|
*/
|
|
final class ManiphestSearchIndexer
|
|
extends PhabricatorSearchDocumentIndexer {
|
|
|
|
public function getIndexableObject() {
|
|
return new ManiphestTask();
|
|
}
|
|
|
|
protected function buildAbstractDocumentByPHID($phid) {
|
|
$task = $this->loadDocumentByPHID($phid);
|
|
|
|
$doc = new PhabricatorSearchAbstractDocument();
|
|
$doc->setPHID($task->getPHID());
|
|
$doc->setDocumentType(ManiphestPHIDTypeTask::TYPECONST);
|
|
$doc->setDocumentTitle($task->getTitle());
|
|
$doc->setDocumentCreated($task->getDateCreated());
|
|
$doc->setDocumentModified($task->getDateModified());
|
|
|
|
$doc->addField(
|
|
PhabricatorSearchField::FIELD_BODY,
|
|
$task->getDescription());
|
|
|
|
$doc->addRelationship(
|
|
PhabricatorSearchRelationship::RELATIONSHIP_AUTHOR,
|
|
$task->getAuthorPHID(),
|
|
PhabricatorPeoplePHIDTypeUser::TYPECONST,
|
|
$task->getDateCreated());
|
|
|
|
if ($task->getStatus() == ManiphestTaskStatus::STATUS_OPEN) {
|
|
$doc->addRelationship(
|
|
PhabricatorSearchRelationship::RELATIONSHIP_OPEN,
|
|
$task->getPHID(),
|
|
ManiphestPHIDTypeTask::TYPECONST,
|
|
time());
|
|
}
|
|
|
|
$transactions = id(new ManiphestTransaction())->loadAllWhere(
|
|
'taskID = %d',
|
|
$task->getID());
|
|
|
|
$current_ccs = $task->getCCPHIDs();
|
|
$touches = array();
|
|
$owner = null;
|
|
$ccs = array();
|
|
foreach ($transactions as $transaction) {
|
|
if ($transaction->hasComments()) {
|
|
$doc->addField(
|
|
PhabricatorSearchField::FIELD_COMMENT,
|
|
$transaction->getComments());
|
|
}
|
|
|
|
$author = $transaction->getAuthorPHID();
|
|
|
|
// Record the most recent time they touched this object.
|
|
$touches[$author] = $transaction->getDateCreated();
|
|
|
|
switch ($transaction->getTransactionType()) {
|
|
case ManiphestTransactionType::TYPE_OWNER:
|
|
$owner = $transaction;
|
|
break;
|
|
case ManiphestTransactionType::TYPE_CCS:
|
|
// For users who are still CC'd, record the first time they were
|
|
// added to CC.
|
|
foreach ($transaction->getNewValue() as $added_cc) {
|
|
if (in_array($added_cc, $current_ccs)) {
|
|
if (empty($ccs[$added_cc])) {
|
|
$ccs[$added_cc] = $transaction->getDateCreated();
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
foreach ($task->getProjectPHIDs() as $phid) {
|
|
$doc->addRelationship(
|
|
PhabricatorSearchRelationship::RELATIONSHIP_PROJECT,
|
|
$phid,
|
|
PhabricatorProjectPHIDTypeProject::TYPECONST,
|
|
$task->getDateModified()); // Bogus.
|
|
}
|
|
|
|
if ($owner && $owner->getNewValue()) {
|
|
$doc->addRelationship(
|
|
PhabricatorSearchRelationship::RELATIONSHIP_OWNER,
|
|
$owner->getNewValue(),
|
|
PhabricatorPeoplePHIDTypeUser::TYPECONST,
|
|
$owner->getDateCreated());
|
|
} else {
|
|
$doc->addRelationship(
|
|
PhabricatorSearchRelationship::RELATIONSHIP_OWNER,
|
|
ManiphestTaskOwner::OWNER_UP_FOR_GRABS,
|
|
PhabricatorPHIDConstants::PHID_TYPE_MAGIC,
|
|
$owner
|
|
? $owner->getDateCreated()
|
|
: $task->getDateCreated());
|
|
}
|
|
|
|
foreach ($touches as $touch => $time) {
|
|
$doc->addRelationship(
|
|
PhabricatorSearchRelationship::RELATIONSHIP_TOUCH,
|
|
$touch,
|
|
PhabricatorPeoplePHIDTypeUser::TYPECONST,
|
|
$time);
|
|
}
|
|
|
|
// We need to load handles here since non-users may subscribe (mailing
|
|
// lists, e.g.)
|
|
$handles = id(new PhabricatorHandleQuery())
|
|
->setViewer(PhabricatorUser::getOmnipotentUser())
|
|
->withPHIDs(array_keys($ccs))
|
|
->execute();
|
|
foreach ($ccs as $cc => $time) {
|
|
$doc->addRelationship(
|
|
PhabricatorSearchRelationship::RELATIONSHIP_SUBSCRIBER,
|
|
$handles[$cc]->getPHID(),
|
|
$handles[$cc]->getType(),
|
|
$time);
|
|
}
|
|
|
|
return $doc;
|
|
}
|
|
}
|