Merge pull request #22173 from colemanw/domainStuff
[civicrm-core.git] / ext / search_kit / search_kit.php
1 <?php
2
3 require_once 'search_kit.civix.php';
4
5 /**
6 * Implements hook_civicrm_config().
7 *
8 * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_config/
9 */
10 function search_kit_civicrm_config(&$config) {
11 _search_kit_civix_civicrm_config($config);
12 Civi::dispatcher()->addListener('hook_civicrm_alterAngular', ['\Civi\Search\AfformSearchMetadataInjector', 'preprocess'], 1000);
13 }
14
15 /**
16 * @param \Symfony\Component\DependencyInjection\ContainerBuilder $container
17 */
18 function search_kit_civicrm_container($container) {
19 $container->getDefinition('dispatcher')
20 ->addMethodCall('addListener', [
21 'civi.api4.authorizeRecord::SavedSearch',
22 ['CRM_Search_BAO_SearchDisplay', 'savedSearchCheckAccessByDisplay'],
23 ]);
24 }
25
26 /**
27 * Implements hook_civicrm_alterApiRoutePermissions().
28 *
29 * Allow anonymous users to run a search display. Permissions are checked internally.
30 *
31 * @see CRM_Utils_Hook::alterApiRoutePermissions
32 */
33 function search_kit_civicrm_alterApiRoutePermissions(&$permissions, $entity, $action) {
34 if ($entity === 'SearchDisplay') {
35 if ($action === 'run' || $action === 'download' || $action === 'getSearchTasks') {
36 $permissions = CRM_Core_Permission::ALWAYS_ALLOW_PERMISSION;
37 }
38 }
39 }
40
41 /**
42 * Implements hook_civicrm_xmlMenu().
43 *
44 * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_xmlMenu
45 */
46 function search_kit_civicrm_xmlMenu(&$files) {
47 _search_kit_civix_civicrm_xmlMenu($files);
48 }
49
50 /**
51 * Implements hook_civicrm_managed().
52 *
53 * Generate a list of entities to create/deactivate/delete when this module
54 * is installed, disabled, uninstalled.
55 *
56 * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_managed
57 */
58 function search_kit_civicrm_managed(&$entities) {
59 _search_kit_civix_civicrm_managed($entities);
60 }
61
62 /**
63 * Implements hook_civicrm_angularModules().
64 *
65 * Generate a list of Angular modules.
66 *
67 * Note: This hook only runs in CiviCRM 4.5+. It may
68 * use features only available in v4.6+.
69 *
70 * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_angularModules
71 */
72 function search_kit_civicrm_angularModules(&$angularModules) {
73 _search_kit_civix_civicrm_angularModules($angularModules);
74 // Fetch all search tasks provided by extensions and add their Angular modules as crmSearchTasks dependencies
75 $tasks = [];
76 $null = NULL;
77 $checkPermissions = FALSE;
78 \CRM_Utils_Hook::singleton()->invoke(['tasks', 'checkPermissions', 'userId'],
79 $tasks, $checkPermissions, $null,
80 $null, $null, $null, 'civicrm_searchKitTasks'
81 );
82 foreach ($tasks as $entityTasks) {
83 foreach ($entityTasks as $task) {
84 if (isset($task['module']) && $task['module'] !== 'crmSearchTasks' &&
85 !in_array($task['module'], $angularModules['crmSearchTasks']['requires'], TRUE)
86 ) {
87 $angularModules['crmSearchTasks']['requires'][] = $task['module'];
88 }
89 }
90 }
91 }
92
93 /**
94 * Implements hook_civicrm_alterSettingsFolders().
95 *
96 * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_alterSettingsFolders
97 */
98 function search_kit_civicrm_alterSettingsFolders(&$metaDataFolders = NULL) {
99 _search_kit_civix_civicrm_alterSettingsFolders($metaDataFolders);
100 }
101
102 /**
103 * Implements hook_civicrm_entityTypes().
104 *
105 * Declare entity types provided by this module.
106 *
107 * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_entityTypes
108 */
109 function search_kit_civicrm_entityTypes(&$entityTypes) {
110 _search_kit_civix_civicrm_entityTypes($entityTypes);
111 }
112
113 /**
114 * Implements hook_civicrm_themes().
115 */
116 function search_kit_civicrm_themes(&$themes) {
117 _search_kit_civix_civicrm_themes($themes);
118 }
119
120 /**
121 * Implements hook_civicrm_pre().
122 */
123 function search_kit_civicrm_pre($op, $entity, $id, &$params) {
124 // Supply default name/label when creating new SearchDisplay
125 if ($entity === 'SearchDisplay' && $op === 'create') {
126 if (empty($params['label'])) {
127 $params['label'] = $params['name'];
128 }
129 elseif (empty($params['name'])) {
130 $params['name'] = \CRM_Utils_String::munge($params['label']);
131 }
132 }
133 // When deleting a saved search, also delete the displays
134 // This would happen anyway in sql because of the ON DELETE CASCADE foreign key,
135 // But this ensures that pre and post hooks are called
136 if ($entity === 'SavedSearch' && $op === 'delete') {
137 \Civi\Api4\SearchDisplay::delete(FALSE)
138 ->addWhere('saved_search_id', '=', $id)
139 ->execute();
140 }
141 }