diff --git a/donorsearch.civix.php b/donorsearch.civix.php index b2d38e4..07dedbc 100644 --- a/donorsearch.civix.php +++ b/donorsearch.civix.php @@ -1,14 +1,15 @@ getUrl(self::LONG_NAME), '/'); + } return CRM_Core_Resources::singleton()->getUrl(self::LONG_NAME, $file); } @@ -46,13 +52,15 @@ public static function url($file = NULL) { * Get the path of a resource file (in this extension). * * @param string|NULL $file + * Ex: NULL. * Ex: 'css/foo.css'. * @return string + * Ex: '/var/www/example.org/sites/default/ext/org.example.foo'. * Ex: '/var/www/example.org/sites/default/ext/org.example.foo/css/foo.css'. */ public static function path($file = NULL) { // return CRM_Core_Resources::singleton()->getPath(self::LONG_NAME, $file); - return __DIR__ . ($path === NULL ? '' : (DIRECTORY_SEPARATOR . $file)); + return __DIR__ . ($file === NULL ? '' : (DIRECTORY_SEPARATOR . $file)); } /** @@ -71,10 +79,17 @@ public static function findClass($suffix) { use CRM_DonorSearch_ExtensionUtil as E; +function _donorsearch_civix_mixin_polyfill() { + if (!class_exists('CRM_Extension_MixInfo')) { + $polyfill = __DIR__ . '/mixin/polyfill.php'; + (require $polyfill)(E::LONG_NAME, E::SHORT_NAME, E::path()); + } +} + /** * (Delegated) Implements hook_civicrm_config(). * - * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_config + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_config */ function _donorsearch_civix_civicrm_config(&$config = NULL) { static $configured = FALSE; @@ -83,56 +98,45 @@ function _donorsearch_civix_civicrm_config(&$config = NULL) { } $configured = TRUE; - $template =& CRM_Core_Smarty::singleton(); + $template = CRM_Core_Smarty::singleton(); - $extRoot = dirname(__FILE__) . DIRECTORY_SEPARATOR; + $extRoot = __DIR__ . DIRECTORY_SEPARATOR; $extDir = $extRoot . 'templates'; if (is_array($template->template_dir)) { array_unshift($template->template_dir, $extDir); } else { - $template->template_dir = array($extDir, $template->template_dir); + $template->template_dir = [$extDir, $template->template_dir]; } $include_path = $extRoot . PATH_SEPARATOR . get_include_path(); set_include_path($include_path); -} - -/** - * (Delegated) Implements hook_civicrm_xmlMenu(). - * - * @param $files array(string) - * - * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_xmlMenu - */ -function _donorsearch_civix_civicrm_xmlMenu(&$files) { - foreach (_donorsearch_civix_glob(__DIR__ . '/xml/Menu/*.xml') as $file) { - $files[] = $file; - } + _donorsearch_civix_mixin_polyfill(); } /** * Implements hook_civicrm_install(). * - * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_install + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_install */ function _donorsearch_civix_civicrm_install() { _donorsearch_civix_civicrm_config(); if ($upgrader = _donorsearch_civix_upgrader()) { $upgrader->onInstall(); } + _donorsearch_civix_mixin_polyfill(); } /** * Implements hook_civicrm_postInstall(). * - * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_postInstall + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_postInstall */ function _donorsearch_civix_civicrm_postInstall() { _donorsearch_civix_civicrm_config(); if ($upgrader = _donorsearch_civix_upgrader()) { - if (is_callable(array($upgrader, 'onPostInstall'))) { + if (is_callable([$upgrader, 'onPostInstall'])) { $upgrader->onPostInstall(); } } @@ -141,9 +145,9 @@ function _donorsearch_civix_civicrm_postInstall() { /** * Implements hook_civicrm_uninstall(). * - * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_uninstall + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_uninstall */ -function _donorsearch_civix_civicrm_uninstall() { +function _donorsearch_civix_civicrm_uninstall(): void { _donorsearch_civix_civicrm_config(); if ($upgrader = _donorsearch_civix_upgrader()) { $upgrader->onUninstall(); @@ -153,27 +157,28 @@ function _donorsearch_civix_civicrm_uninstall() { /** * (Delegated) Implements hook_civicrm_enable(). * - * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_enable + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_enable */ -function _donorsearch_civix_civicrm_enable() { +function _donorsearch_civix_civicrm_enable(): void { _donorsearch_civix_civicrm_config(); if ($upgrader = _donorsearch_civix_upgrader()) { - if (is_callable(array($upgrader, 'onEnable'))) { + if (is_callable([$upgrader, 'onEnable'])) { $upgrader->onEnable(); } } + _donorsearch_civix_mixin_polyfill(); } /** * (Delegated) Implements hook_civicrm_disable(). * - * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_disable + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_disable * @return mixed */ -function _donorsearch_civix_civicrm_disable() { +function _donorsearch_civix_civicrm_disable(): void { _donorsearch_civix_civicrm_config(); if ($upgrader = _donorsearch_civix_upgrader()) { - if (is_callable(array($upgrader, 'onDisable'))) { + if (is_callable([$upgrader, 'onDisable'])) { $upgrader->onDisable(); } } @@ -185,10 +190,11 @@ function _donorsearch_civix_civicrm_disable() { * @param $op string, the type of operation being performed; 'check' or 'enqueue' * @param $queue CRM_Queue_Queue, (for 'enqueue') the modifiable list of pending up upgrade tasks * - * @return mixed based on op. for 'check', returns array(boolean) (TRUE if upgrades are pending) - * for 'enqueue', returns void + * @return mixed + * based on op. for 'check', returns array(boolean) (TRUE if upgrades are pending) + * for 'enqueue', returns void * - * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_upgrade + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_upgrade */ function _donorsearch_civix_civicrm_upgrade($op, CRM_Queue_Queue $queue = NULL) { if ($upgrader = _donorsearch_civix_upgrader()) { @@ -208,154 +214,26 @@ function _donorsearch_civix_upgrader() { } } -/** - * Search directory tree for files which match a glob pattern - * - * Note: Dot-directories (like "..", ".git", or ".svn") will be ignored. - * Note: In Civi 4.3+, delegate to CRM_Utils_File::findFiles() - * - * @param $dir string, base dir - * @param $pattern string, glob pattern, eg "*.txt" - * @return array(string) - */ -function _donorsearch_civix_find_files($dir, $pattern) { - if (is_callable(array('CRM_Utils_File', 'findFiles'))) { - return CRM_Utils_File::findFiles($dir, $pattern); - } - - $todos = array($dir); - $result = array(); - while (!empty($todos)) { - $subdir = array_shift($todos); - foreach (_donorsearch_civix_glob("$subdir/$pattern") as $match) { - if (!is_dir($match)) { - $result[] = $match; - } - } - if ($dh = opendir($subdir)) { - while (FALSE !== ($entry = readdir($dh))) { - $path = $subdir . DIRECTORY_SEPARATOR . $entry; - if ($entry[0] == '.') { - } - elseif (is_dir($path)) { - $todos[] = $path; - } - } - closedir($dh); - } - } - return $result; -} -/** - * (Delegated) Implements hook_civicrm_managed(). - * - * Find any *.mgd.php files, merge their content, and return. - * - * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_managed - */ -function _donorsearch_civix_civicrm_managed(&$entities) { - $mgdFiles = _donorsearch_civix_find_files(__DIR__, '*.mgd.php'); - foreach ($mgdFiles as $file) { - $es = include $file; - foreach ($es as $e) { - if (empty($e['module'])) { - $e['module'] = 'com.greenleafadvancement.donorsearch'; - } - $entities[] = $e; - if (empty($e['params']['version'])) { - $e['params']['version'] = '3'; - } - } - } -} - -/** - * (Delegated) Implements hook_civicrm_caseTypes(). - * - * Find any and return any files matching "xml/case/*.xml" - * - * Note: This hook only runs in CiviCRM 4.4+. - * - * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_caseTypes - */ -function _donorsearch_civix_civicrm_caseTypes(&$caseTypes) { - if (!is_dir(__DIR__ . '/xml/case')) { - return; - } - - foreach (_donorsearch_civix_glob(__DIR__ . '/xml/case/*.xml') as $file) { - $name = preg_replace('/\.xml$/', '', basename($file)); - if ($name != CRM_Case_XMLProcessor::mungeCaseType($name)) { - $errorMessage = sprintf("Case-type file name is malformed (%s vs %s)", $name, CRM_Case_XMLProcessor::mungeCaseType($name)); - CRM_Core_Error::fatal($errorMessage); - // throw new CRM_Core_Exception($errorMessage); - } - $caseTypes[$name] = array( - 'module' => 'com.greenleafadvancement.donorsearch', - 'name' => $name, - 'file' => $file, - ); - } -} - -/** - * (Delegated) Implements hook_civicrm_angularModules(). - * - * Find any and return any files matching "ang/*.ang.php" - * - * Note: This hook only runs in CiviCRM 4.5+. - * - * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_angularModules - */ -function _donorsearch_civix_civicrm_angularModules(&$angularModules) { - if (!is_dir(__DIR__ . '/ang')) { - return; - } - - $files = _donorsearch_civix_glob(__DIR__ . '/ang/*.ang.php'); - foreach ($files as $file) { - $name = preg_replace(':\.ang\.php$:', '', basename($file)); - $module = include $file; - if (empty($module['ext'])) { - $module['ext'] = 'com.greenleafadvancement.donorsearch'; - } - $angularModules[$name] = $module; - } -} - -/** - * Glob wrapper which is guaranteed to return an array. - * - * The documentation for glob() says, "On some systems it is impossible to - * distinguish between empty match and an error." Anecdotally, the return - * result for an empty match is sometimes array() and sometimes FALSE. - * This wrapper provides consistency. - * - * @link http://php.net/glob - * @param string $pattern - * @return array, possibly empty - */ -function _donorsearch_civix_glob($pattern) { - $result = glob($pattern); - return is_array($result) ? $result : array(); -} - /** * Inserts a navigation menu item at a given place in the hierarchy. * * @param array $menu - menu hierarchy - * @param string $path - path where insertion should happen (ie. Administer/System Settings) - * @param array $item - menu you need to insert (parent/child attributes will be filled for you) + * @param string $path - path to parent of this item, e.g. 'my_extension/submenu' + * 'Mailing', or 'Administer/System Settings' + * @param array $item - the item to insert (parent/child attributes will be + * filled for you) + * + * @return bool */ function _donorsearch_civix_insert_navigation_menu(&$menu, $path, $item) { // If we are done going down the path, insert menu if (empty($path)) { - $menu[] = array( - 'attributes' => array_merge(array( + $menu[] = [ + 'attributes' => array_merge([ 'label' => CRM_Utils_Array::value('name', $item), 'active' => 1, - ), $item), - ); + ], $item), + ]; return TRUE; } else { @@ -366,9 +244,9 @@ function _donorsearch_civix_insert_navigation_menu(&$menu, $path, $item) { foreach ($menu as $key => &$entry) { if ($entry['attributes']['name'] == $first) { if (!isset($entry['child'])) { - $entry['child'] = array(); + $entry['child'] = []; } - $found = _donorsearch_civix_insert_navigation_menu($entry['child'], implode('/', $path), $item, $key); + $found = _donorsearch_civix_insert_navigation_menu($entry['child'], implode('/', $path), $item); } } return $found; @@ -379,7 +257,7 @@ function _donorsearch_civix_insert_navigation_menu(&$menu, $path, $item) { * (Delegated) Implements hook_civicrm_navigationMenu(). */ function _donorsearch_civix_navigationMenu(&$nodes) { - if (!is_callable(array('CRM_Core_BAO_Navigation', 'fixNavigationMenu'))) { + if (!is_callable(['CRM_Core_BAO_Navigation', 'fixNavigationMenu'])) { _donorsearch_civix_fixNavigationMenu($nodes); } } @@ -419,19 +297,12 @@ function _donorsearch_civix_fixNavigationMenuItems(&$nodes, &$maxNavID, $parentI } /** - * (Delegated) Implements hook_civicrm_alterSettingsFolders(). + * (Delegated) Implements hook_civicrm_entityTypes(). + * + * Find any *.entityType.php files, merge their content, and return. * - * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_alterSettingsFolders + * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_entityTypes */ -function _donorsearch_civix_civicrm_alterSettingsFolders(&$metaDataFolders = NULL) { - static $configured = FALSE; - if ($configured) { - return; - } - $configured = TRUE; - - $settingsDir = __DIR__ . DIRECTORY_SEPARATOR . 'settings'; - if (is_dir($settingsDir) && !in_array($settingsDir, $metaDataFolders)) { - $metaDataFolders[] = $settingsDir; - } +function _donorsearch_civix_civicrm_entityTypes(&$entityTypes) { + $entityTypes = array_merge($entityTypes, []); } diff --git a/donorsearch.php b/donorsearch.php index 520710f..6aaa0e1 100644 --- a/donorsearch.php +++ b/donorsearch.php @@ -14,15 +14,6 @@ function donorsearch_civicrm_config(&$config) { _donorsearch_civix_civicrm_config($config); } -/** - * Implements hook_civicrm_xmlMenu(). - * - * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_xmlMenu - */ -function donorsearch_civicrm_xmlMenu(&$files) { - _donorsearch_civix_civicrm_xmlMenu($files); -} - /** * Implements hook_civicrm_install(). * @@ -218,18 +209,6 @@ function donorsearch_civicrm_upgrade($op, CRM_Queue_Queue $queue = NULL) { return _donorsearch_civix_civicrm_upgrade($op, $queue); } -/** - * Implements hook_civicrm_managed(). - * - * Generate a list of entities to create/deactivate/delete when this module - * is installed, disabled, uninstalled. - * - * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_managed - */ -function donorsearch_civicrm_managed(&$entities) { - _donorsearch_civix_civicrm_managed($entities); -} - /** * Implements hook_civicrm_entityTypes(). */ @@ -268,29 +247,6 @@ function donorsearch_civicrm_check(&$messages) { } } -/** - * Implements hook_civicrm_angularModules(). - * - * Generate a list of Angular modules. - * - * Note: This hook only runs in CiviCRM 4.5+. It may - * use features only available in v4.6+. - * - * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_caseTypes - */ -function donorsearch_civicrm_angularModules(&$angularModules) { - _donorsearch_civix_civicrm_angularModules($angularModules); -} - -/** - * Implements hook_civicrm_alterSettingsFolders(). - * - * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_alterSettingsFolders - */ -function donorsearch_civicrm_alterSettingsFolders(&$metaDataFolders = NULL) { - _donorsearch_civix_civicrm_alterSettingsFolders($metaDataFolders); -} - /** * Functions below this ship commented out. Uncomment as required. * @@ -300,9 +256,8 @@ function donorsearch_civicrm_alterSettingsFolders(&$metaDataFolders = NULL) { * * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_preProcess * -function donorsearch_civicrm_preProcess($formName, &$form) { -} // */ + // */ /** * Implements hook_civicrm_navigationMenu(). diff --git a/info.xml b/info.xml index 143ebaa..2fe370f 100644 --- a/info.xml +++ b/info.xml @@ -21,14 +21,21 @@ http://www.gnu.org/licenses/agpl-3.0.html https://github.com/greenleafadvancement/com.greenleafadvancement.donorsearch/issues - 2021-03-08 - 1.1.6 + 2023-08-01 + 1.2 stable - 4.7 + 5.56.0 - DonorSearch provides a comprehensive research and analytics platform to segment and identify an organization’s top donor prospects. With this integration, users can pull in, search on, and report on over 20 wealth and philanthropy data points about their constituents right from within CiviCRM, supercharging annual, major, and planned giving programs. Please contact civi@donorsearch.net to request the free limited-license API key required to connect this extension with the DonorSearch service. + DonorSearch provides a comprehensive research and analytics platform to segment and identify an organization’s top donor prospects. With this integration, users can pull in, search on, and report on over 20 wealth and philanthropy data points about their constituents right from within CiviCRM, supercharging annual, major, and planned giving programs. Please contact civi@donorsearch.net to request the free limited-license API key required to connect this extension with the DonorSearch service. CRM/DonorSearch + 22.10.0 + + menu-xml@1.0.0 + + + +