X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=CRM%2FUtils%2FHook.php;h=b84ec7ac87139bc43129b02204c2059567acfc67;hb=80ea84640a08b3063492eae480502c5ddb218dfa;hp=caf374bea0e47c332d22b7ce48a21b1cf6d04a01;hpb=76f7a8b859656ae44823c29002f1d9e76c0f9146;p=civicrm-core.git diff --git a/CRM/Utils/Hook.php b/CRM/Utils/Hook.php index caf374bea0..b84ec7ac87 100644 --- a/CRM/Utils/Hook.php +++ b/CRM/Utils/Hook.php @@ -57,7 +57,7 @@ abstract class CRM_Utils_Hook { private $commonIncluded = FALSE; /** - * @var array(string) + * @var array|string */ private $commonCiviModules = []; @@ -159,6 +159,7 @@ abstract class CRM_Utils_Hook { // quantities of low-importance data or the table not having an id field, which could cause a fatal error. // Instead of not calling any hooks we only call those we know to be frequently important - if a particular extension wanted // to avoid this they could do an early return on CRM_Core_Config::singleton()->isUpgradeMode + // Futther discussion is happening at https://lab.civicrm.org/dev/core/issues/1460 $upgradeFriendlyHooks = ['civicrm_alterSettingsFolders', 'civicrm_alterSettingsMetaData', 'civicrm_triggerInfo', 'civicrm_alterLogTables', 'civicrm_container']; if (CRM_Core_Config::singleton()->isUpgradeMode() && !in_array($fnSuffix, $upgradeFriendlyHooks)) { return; @@ -248,7 +249,7 @@ abstract class CRM_Utils_Hook { * @param mixed $arg6 * * @return array|bool - * @throws \Exception + * @throws \CRM_Core_Exception */ public function runHooks( $civiModules, $fnSuffix, $numParams, @@ -306,8 +307,7 @@ abstract class CRM_Utils_Hook { break; default: - CRM_Core_Error::fatal(ts('Invalid hook invocation')); - break; + throw new CRM_Core_Exception(ts('Invalid hook invocation')); } if (!empty($fResult) && @@ -355,6 +355,11 @@ abstract class CRM_Utils_Hook { * the return value is ignored */ public static function pre($op, $objectName, $id, &$params) { + // Dev/core#1449 DO not dispatch hook_civicrm_pre if we are in an upgrade as this cases the upgrade to fail + // Futher discussion is happening at https://lab.civicrm.org/dev/core/issues/1460 + if (CRM_Core_Config::singleton()->isUpgradeMode()) { + return; + } $event = new \Civi\Core\Event\PreEvent($op, $objectName, $id, $params); \Civi::dispatcher()->dispatch('hook_civicrm_pre', $event); return $event->getReturnValues(); @@ -377,6 +382,11 @@ abstract class CRM_Utils_Hook { * an error message which aborts the operation */ public static function post($op, $objectName, $objectId, &$objectRef = NULL) { + // Dev/core#1449 DO not dispatch hook_civicrm_post if we are in an upgrade as this cases the upgrade to fail + // Futher discussion is happening at https://lab.civicrm.org/dev/core/issues/1460 + if (CRM_Core_Config::singleton()->isUpgradeMode()) { + return; + } $event = new \Civi\Core\Event\PostEvent($op, $objectName, $objectId, $objectRef); \Civi::dispatcher()->dispatch('hook_civicrm_post', $event); return $event->getReturnValues(); @@ -2233,6 +2243,10 @@ abstract class CRM_Utils_Hook { * - js: array, list of JS files or globs. * - css: array, list of CSS files or globs. * - partials: array, list of base-dirs containing HTML. + * - partialsCallback: mixed, a callback function which generates a list of HTML + * function(string $moduleName, array $moduleDefn) => array(string $file => string $html) + * For future-proofing, use a serializable callback (e.g. string/array). + * See also: Civi\Core\Resolver. * - requires: array, list of required Angular modules. * - basePages: array, uncondtionally load this module onto the given Angular pages. [v4.7.21+] * If omitted, default to "array('civicrm/a')" for backward compat.