Merge pull request #17462 from eileenmcnaughton/526ex
[civicrm-core.git] / CRM / Contact / BAO / Query / Hook.php
CommitLineData
99e9587a
DS
1<?php
2/*
3 +--------------------------------------------------------------------+
bc77d7c0 4 | Copyright CiviCRM LLC. All rights reserved. |
99e9587a 5 | |
bc77d7c0
TO
6 | This work is published under the GNU AGPLv3 license with some |
7 | permitted exceptions and without any warranty. For full license |
8 | and copyright information, see https://civicrm.org/licensing |
99e9587a 9 +--------------------------------------------------------------------+
d25dd0ee 10 */
99e9587a
DS
11
12/**
13 *
14 * @package CRM
ca5cec67 15 * @copyright CiviCRM LLC https://civicrm.org/licensing
99e9587a
DS
16 */
17
18/**
c037736a 19 * Delegate query functions based on hook system.
99e9587a
DS
20 */
21class CRM_Contact_BAO_Query_Hook {
2efcf0c2 22
99e9587a 23 /**
e97c66ff 24 * Query objects.
25 *
26 * @var CRM_Contact_BAO_Query_Interface[]
99e9587a
DS
27 */
28 protected $_queryObjects = NULL;
29
30 /**
fe482240 31 * Singleton function used to manage this object.
99e9587a
DS
32 *
33 * @return object
99e9587a
DS
34 */
35 public static function singleton() {
36 static $singleton = NULL;
37 if (!$singleton) {
38 $singleton = new CRM_Contact_BAO_Query_Hook();
39 }
40 return $singleton;
41 }
42
353ffa53 43 /**
c037736a 44 * Get or build the list of search objects (via hook).
353ffa53
TO
45 *
46 * @return array
16b10e64 47 * Array of CRM_Contact_BAO_Query_Interface objects
353ffa53 48 */
99e9587a
DS
49 public function getSearchQueryObjects() {
50 if ($this->_queryObjects === NULL) {
be2fb01f 51 $this->_queryObjects = [];
c3e3dd65 52 CRM_Utils_Hook::queryObjects($this->_queryObjects, 'Contact');
99e9587a
DS
53 }
54 return $this->_queryObjects;
55 }
2efcf0c2 56
86538308
EM
57 /**
58 * @return array
59 */
99e9587a 60 public function &getFields() {
be2fb01f 61 $extFields = [];
99e9587a
DS
62 foreach (self::getSearchQueryObjects() as $obj) {
63 $flds = $obj->getFields();
64 $extFields = array_merge($extFields, $flds);
65 }
66 return $extFields;
67 }
2efcf0c2 68
86538308
EM
69 /**
70 * @param $apiEntities
71 * @param $fieldOptions
72 */
6a5f199e
TO
73 public function alterSearchBuilderOptions(&$apiEntities, &$fieldOptions) {
74 foreach (self::getSearchQueryObjects() as $obj) {
75 $obj->alterSearchBuilderOptions($apiEntities, $fieldOptions);
76 }
77 }
78
86538308 79 /**
c037736a 80 * Alter search query.
81 *
82 * @param string $query
100fef9d 83 * @param string $fnName
86538308 84 */
99e9587a
DS
85 public function alterSearchQuery(&$query, $fnName) {
86 foreach (self::getSearchQueryObjects() as $obj) {
87 $obj->$fnName($query);
88 }
89 }
2efcf0c2 90
86538308 91 /**
100fef9d 92 * @param string $fieldName
86538308
EM
93 * @param $mode
94 * @param $side
95 *
96 * @return string
97 */
99e9587a
DS
98 public function buildSearchfrom($fieldName, $mode, $side) {
99 $from = '';
100 foreach (self::getSearchQueryObjects() as $obj) {
101 $from .= $obj->from($fieldName, $mode, $side);
102 }
103 return $from;
104 }
efa3a566 105
86538308
EM
106 /**
107 * @param $tables
108 */
efa3a566
DS
109 public function setTableDependency(&$tables) {
110 foreach (self::getSearchQueryObjects() as $obj) {
111 $obj->setTableDependency($tables);
112 }
113 }
114
86538308
EM
115 /**
116 * @param $panes
117 */
efa3a566
DS
118 public function registerAdvancedSearchPane(&$panes) {
119 foreach (self::getSearchQueryObjects() as $obj) {
120 $obj->registerAdvancedSearchPane($panes);
121 }
122 }
123
86538308
EM
124 /**
125 * @param $panes
126 */
066b4d4a
DS
127 public function getPanesMapper(&$panes) {
128 foreach (self::getSearchQueryObjects() as $obj) {
129 $obj->getPanesMapper($panes);
130 }
131 }
132
86538308 133 /**
c490a46a 134 * @param CRM_Core_Form $form
86538308
EM
135 * @param $type
136 */
efa3a566
DS
137 public function buildAdvancedSearchPaneForm(&$form, $type) {
138 foreach (self::getSearchQueryObjects() as $obj) {
139 $obj->buildAdvancedSearchPaneForm($form, $type);
140 }
141 }
142
86538308
EM
143 /**
144 * @param $paneTemplatePathArray
145 * @param $type
146 */
efa3a566
DS
147 public function setAdvancedSearchPaneTemplatePath(&$paneTemplatePathArray, $type) {
148 foreach (self::getSearchQueryObjects() as $obj) {
149 $obj->setAdvancedSearchPaneTemplatePath($paneTemplatePathArray, $type);
150 }
151 }
96025800 152
232624b1 153}