1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-12-19 12:00:55 +01:00

Remove TYPE_SEARCH_DIDUPDATEINDEX event

Summary:
Ref T9979. This event had one weird callsite and no known third-party callers. It can be done more cleanly as an extension, now.

This index is used to allow us to "Group By: Project" in Maniphest without joining into the Projects database.

Test Plan:
  - Ran a query with "Group By: Project" in Maniphest.
  - Renamed project "Apples" to "Zebras".
  - Reloaded page.
  - UI properly moved "Zebras" tasks to the bottom of the list.

Reviewers: chad

Reviewed By: chad

Maniphest Tasks: T9979

Differential Revision: https://secure.phabricator.com/D14836
This commit is contained in:
epriestley 2015-12-21 06:55:23 -08:00
parent 02f82c2af5
commit aab1574e33
7 changed files with 27 additions and 82 deletions

View file

@ -1294,9 +1294,9 @@ phutil_register_library_map(array(
'ManiphestHovercardEventListener' => 'applications/maniphest/event/ManiphestHovercardEventListener.php', 'ManiphestHovercardEventListener' => 'applications/maniphest/event/ManiphestHovercardEventListener.php',
'ManiphestInfoConduitAPIMethod' => 'applications/maniphest/conduit/ManiphestInfoConduitAPIMethod.php', 'ManiphestInfoConduitAPIMethod' => 'applications/maniphest/conduit/ManiphestInfoConduitAPIMethod.php',
'ManiphestNameIndex' => 'applications/maniphest/storage/ManiphestNameIndex.php', 'ManiphestNameIndex' => 'applications/maniphest/storage/ManiphestNameIndex.php',
'ManiphestNameIndexEventListener' => 'applications/maniphest/event/ManiphestNameIndexEventListener.php',
'ManiphestPriorityConfigOptionType' => 'applications/maniphest/config/ManiphestPriorityConfigOptionType.php', 'ManiphestPriorityConfigOptionType' => 'applications/maniphest/config/ManiphestPriorityConfigOptionType.php',
'ManiphestPriorityEmailCommand' => 'applications/maniphest/command/ManiphestPriorityEmailCommand.php', 'ManiphestPriorityEmailCommand' => 'applications/maniphest/command/ManiphestPriorityEmailCommand.php',
'ManiphestProjectNameFulltextEngineExtension' => 'applications/maniphest/engineextension/ManiphestProjectNameFulltextEngineExtension.php',
'ManiphestQueryConduitAPIMethod' => 'applications/maniphest/conduit/ManiphestQueryConduitAPIMethod.php', 'ManiphestQueryConduitAPIMethod' => 'applications/maniphest/conduit/ManiphestQueryConduitAPIMethod.php',
'ManiphestQueryStatusesConduitAPIMethod' => 'applications/maniphest/conduit/ManiphestQueryStatusesConduitAPIMethod.php', 'ManiphestQueryStatusesConduitAPIMethod' => 'applications/maniphest/conduit/ManiphestQueryStatusesConduitAPIMethod.php',
'ManiphestRemarkupRule' => 'applications/maniphest/remarkup/ManiphestRemarkupRule.php', 'ManiphestRemarkupRule' => 'applications/maniphest/remarkup/ManiphestRemarkupRule.php',
@ -5338,9 +5338,9 @@ phutil_register_library_map(array(
'ManiphestHovercardEventListener' => 'PhabricatorEventListener', 'ManiphestHovercardEventListener' => 'PhabricatorEventListener',
'ManiphestInfoConduitAPIMethod' => 'ManiphestConduitAPIMethod', 'ManiphestInfoConduitAPIMethod' => 'ManiphestConduitAPIMethod',
'ManiphestNameIndex' => 'ManiphestDAO', 'ManiphestNameIndex' => 'ManiphestDAO',
'ManiphestNameIndexEventListener' => 'PhabricatorEventListener',
'ManiphestPriorityConfigOptionType' => 'PhabricatorConfigJSONOptionType', 'ManiphestPriorityConfigOptionType' => 'PhabricatorConfigJSONOptionType',
'ManiphestPriorityEmailCommand' => 'ManiphestEmailCommand', 'ManiphestPriorityEmailCommand' => 'ManiphestEmailCommand',
'ManiphestProjectNameFulltextEngineExtension' => 'PhabricatorFulltextEngineExtension',
'ManiphestQueryConduitAPIMethod' => 'ManiphestConduitAPIMethod', 'ManiphestQueryConduitAPIMethod' => 'ManiphestConduitAPIMethod',
'ManiphestQueryStatusesConduitAPIMethod' => 'ManiphestConduitAPIMethod', 'ManiphestQueryStatusesConduitAPIMethod' => 'ManiphestConduitAPIMethod',
'ManiphestRemarkupRule' => 'PhabricatorObjectRemarkupRule', 'ManiphestRemarkupRule' => 'PhabricatorObjectRemarkupRule',

View file

@ -38,7 +38,6 @@ final class PhabricatorManiphestApplication extends PhabricatorApplication {
public function getEventListeners() { public function getEventListeners() {
return array( return array(
new ManiphestNameIndexEventListener(),
new ManiphestHovercardEventListener(), new ManiphestHovercardEventListener(),
); );
} }

View file

@ -0,0 +1,25 @@
<?php
final class ManiphestProjectNameFulltextEngineExtension
extends PhabricatorFulltextEngineExtension {
const EXTENSIONKEY = 'maniphest.project.name';
public function getExtensionName() {
return pht('Maniphest Project Name Cache');
}
public function shouldIndexFulltextObject($object) {
return ($object instanceof PhabricatorProject);
}
public function indexFulltextObject(
$object,
PhabricatorSearchAbstractDocument $document) {
ManiphestNameIndex::updateIndex(
$object->getPHID(),
$object->getName());
}
}

View file

@ -1,25 +0,0 @@
<?php
final class ManiphestNameIndexEventListener extends PhabricatorEventListener {
public function register() {
$this->listen(PhabricatorEventType::TYPE_SEARCH_DIDUPDATEINDEX);
}
public function handleEvent(PhutilEvent $event) {
$phid = $event->getValue('phid');
$type = phid_get_type($phid);
// For now, we only index projects.
if ($type != PhabricatorProjectProjectPHIDType::TYPECONST) {
return;
}
$document = $event->getValue('document');
ManiphestNameIndex::updateIndex(
$phid,
$document->getDocumentTitle());
}
}

View file

@ -66,8 +66,6 @@ abstract class PhabricatorSearchDocumentIndexer extends Phobject {
$engine = PhabricatorSearchEngine::loadEngine(); $engine = PhabricatorSearchEngine::loadEngine();
$engine->reindexAbstractDocument($document); $engine->reindexAbstractDocument($document);
$this->dispatchDidUpdateIndexEvent($phid, $document);
return $this; return $this;
} }
@ -99,19 +97,4 @@ abstract class PhabricatorSearchDocumentIndexer extends Phobject {
} }
} }
private function dispatchDidUpdateIndexEvent(
$phid,
PhabricatorSearchAbstractDocument $document) {
$event = new PhabricatorEvent(
PhabricatorEventType::TYPE_SEARCH_DIDUPDATEINDEX,
array(
'phid' => $phid,
'object' => $this->loadDocumentByPHID($phid),
'document' => $document,
));
$event->setUser($this->getViewer());
PhutilEventEngine::dispatchEvent($event);
}
} }

View file

@ -188,41 +188,6 @@ Data available on this event:
Using @{class@libphutil:PhutilEmailAddress} may be helpful in parsing the query. Using @{class@libphutil:PhutilEmailAddress} may be helpful in parsing the query.
== Search: Did Update Index ==
The constant for this event is
`PhabricatorEventType::TYPE_SEARCH_DIDUPDATEINDEX`.
This event is dispatched from the Search application's indexing engine, after
it indexes a document. It allows you to publish search-like indexes into other
systems.
Note that this event happens after the update is fully complete: you can not
prevent or modify the update. Further, the event may fire significantly later
in real time than the update, as indexing may occur in the background. You
should use other events if you need guarantees about when the event executes.
Finally, this event may fire more than once for a single update. For example,
if the search indexes are rebuilt, this event will fire on objects which have
not actually changed.
So, good use cases for event listeners are:
- Updating secondary search indexes.
Bad use cases are:
- Editing the object or document.
- Anything with side effects, like sending email.
Data available on this event:
- `phid` The PHID of the updated object.
- `object` The object which was updated (like a @{class:ManiphesTask}).
- `document` The @{class:PhabricatorSearchAbstractDocument} which was indexed.
This contains an abstract representation of the object, and may be useful
in populating secondary indexes because it provides a uniform API.
== Test: Did Run Test == == Test: Did Run Test ==
The constant for this event is The constant for this event is

View file

@ -27,6 +27,4 @@ final class PhabricatorEventType extends PhutilEventType {
const TYPE_AUTH_WILLLOGINUSER = 'auth.willLoginUser'; const TYPE_AUTH_WILLLOGINUSER = 'auth.willLoginUser';
const TYPE_AUTH_DIDVERIFYEMAIL = 'auth.didVerifyEmail'; const TYPE_AUTH_DIDVERIFYEMAIL = 'auth.didVerifyEmail';
const TYPE_SEARCH_DIDUPDATEINDEX = 'search.didUpdateIndex';
} }