Path: blob/master/src/infrastructure/customfield/engineextension/PhabricatorCustomFieldSearchEngineExtension.php
12242 views
<?php12final class PhabricatorCustomFieldSearchEngineExtension3extends PhabricatorSearchEngineExtension {45const EXTENSIONKEY = 'customfield';67public function isExtensionEnabled() {8return true;9}1011public function getExtensionName() {12return pht('Support for Custom Fields');13}1415public function supportsObject($object) {16return ($object instanceof PhabricatorCustomFieldInterface);17}1819public function getExtensionOrder() {20return 9000;21}2223public function getSearchFields($object) {24$engine = $this->getSearchEngine();25$custom_fields = $this->getCustomFields($object);2627$fields = array();28foreach ($custom_fields as $field) {29$fields[] = id(new PhabricatorSearchCustomFieldProxyField())30->setSearchEngine($engine)31->setCustomField($field);32}3334return $fields;35}3637public function applyConstraintsToQuery(38$object,39$query,40PhabricatorSavedQuery $saved,41array $map) {4243$engine = $this->getSearchEngine();44$fields = $this->getCustomFields($object);4546foreach ($fields as $field) {47$field->applyApplicationSearchConstraintToQuery(48$engine,49$query,50$saved->getParameter('custom:'.$field->getFieldIndex()));51}52}5354private function getCustomFields($object) {55$fields = PhabricatorCustomField::getObjectFields(56$object,57PhabricatorCustomField::ROLE_APPLICATIONSEARCH);58$fields->setViewer($this->getViewer());5960return $fields->getFields();61}6263public function getFieldSpecificationsForConduit($object) {64$fields = PhabricatorCustomField::getObjectFields(65$object,66PhabricatorCustomField::ROLE_CONDUIT);6768$map = array();69foreach ($fields->getFields() as $field) {70$key = $field->getModernFieldKey();7172// TODO: These should have proper types.73$map[] = id(new PhabricatorConduitSearchFieldSpecification())74->setKey($key)75->setType('wild')76->setDescription($field->getFieldDescription());77}7879return $map;80}8182public function loadExtensionConduitData(array $objects) {83$viewer = $this->getViewer();8485$field_map = array();86foreach ($objects as $object) {87$object_phid = $object->getPHID();8889$fields = PhabricatorCustomField::getObjectFields(90$object,91PhabricatorCustomField::ROLE_CONDUIT);9293$fields94->setViewer($viewer)95->readFieldsFromObject($object);9697$field_map[$object_phid] = $fields;98}99100$all_fields = array();101foreach ($field_map as $field_list) {102foreach ($field_list->getFields() as $field) {103$all_fields[] = $field;104}105}106107id(new PhabricatorCustomFieldStorageQuery())108->addFields($all_fields)109->execute();110111return array(112'fields' => $field_map,113);114}115116public function getFieldValuesForConduit($object, $data) {117$fields = $data['fields'][$object->getPHID()];118119$map = array();120foreach ($fields->getFields() as $field) {121$key = $field->getModernFieldKey();122$map[$key] = $field->getConduitDictionaryValue();123}124125return $map;126}127128}129130131