X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=CRM%2FUtils%2FHook.php;h=6b70eadf012ea1636ca10407621d9b3eac810e43;hb=a2a7ed3744688b2e96276a81f0d148209d4b1b74;hp=9a48148b9f1b81f42013f887814da337e4e1c893;hpb=06b81c212973e394498456d4a243aac6cbdd7570;p=civicrm-core.git diff --git a/CRM/Utils/Hook.php b/CRM/Utils/Hook.php index 9a48148b9f..6b70eadf01 100644 --- a/CRM/Utils/Hook.php +++ b/CRM/Utils/Hook.php @@ -50,7 +50,12 @@ abstract class CRM_Utils_Hook { const SUMMARY_REPLACE = 3; /** - * @var ojbect + * Object to pass when an object is required to be passed by params. + * + * This is supposed to be a convenience but note that it is a bad + * pattern as it can get contaminated & result in hard-to-diagnose bugs. + * + * @var null */ public static $_nullObject = NULL; @@ -58,7 +63,7 @@ abstract class CRM_Utils_Hook { * We only need one instance of this object. So we use the singleton * pattern and cache the instance in this variable * - * @var object + * @var CRM_Utils_Hook */ static private $_singleton = NULL; @@ -82,7 +87,7 @@ abstract class CRM_Utils_Hook { * * @param bool $fresh * - * @return self + * @return CRM_Utils_Hook * An instance of $config->userHookClass */ public static function singleton($fresh = FALSE) { @@ -96,6 +101,8 @@ abstract class CRM_Utils_Hook { /** * CRM_Utils_Hook constructor. + * + * @throws \CRM_Core_Exception */ public function __construct() { $this->cache = CRM_Utils_Cache::create([ @@ -239,17 +246,20 @@ abstract class CRM_Utils_Hook { } /** - * @param $civiModules - * @param $fnSuffix - * @param array $numParams - * @param $arg1 - * @param $arg2 - * @param $arg3 - * @param $arg4 - * @param $arg5 - * @param $arg6 + * Run hooks. + * + * @param array $civiModules + * @param string $fnSuffix + * @param int $numParams + * @param mixed $arg1 + * @param mixed $arg2 + * @param mixed $arg3 + * @param mixed $arg4 + * @param mixed $arg5 + * @param mixed $arg6 * * @return array|bool + * @throws \Exception */ public function runHooks( $civiModules, $fnSuffix, $numParams, @@ -592,6 +602,63 @@ abstract class CRM_Utils_Hook { ); } + /** + * A theme is a set of CSS files which are loaded on CiviCRM pages. To register a new + * theme, add it to the $themes array. Use these properties: + * + * - ext: string (required) + * The full name of the extension which defines the theme. + * Ex: "org.civicrm.themes.greenwich". + * - title: string (required) + * Visible title. + * - help: string (optional) + * Description of the theme's appearance. + * - url_callback: mixed (optional) + * A function ($themes, $themeKey, $cssExt, $cssFile) which returns the URL(s) for a CSS resource. + * Returns either an array of URLs or PASSTHRU. + * Ex: \Civi\Core\Themes\Resolvers::simple (default) + * Ex: \Civi\Core\Themes\Resolvers::none + * - prefix: string (optional) + * A prefix within the extension folder to prepend to the file name. + * - search_order: array (optional) + * A list of themes to search. + * Generally, the last theme should be "*fallback*" (Civi\Core\Themes::FALLBACK). + * - excludes: array (optional) + * A list of files (eg "civicrm:css/bootstrap.css" or "$ext:$file") which should never + * be returned (they are excluded from display). + * + * @param array $themes + * List of themes, keyed by name. + * @return null + * the return value is ignored + */ + public static function themes(&$themes) { + return self::singleton()->invoke(1, $themes, + self::$_nullObject, self::$_nullObject, self::$_nullObject, self::$_nullObject, self::$_nullObject, + 'civicrm_themes' + ); + } + + /** + * The activeTheme hook determines which theme is active. + * + * @param string $theme + * The identifier for the theme. Alterable. + * Ex: 'greenwich'. + * @param array $context + * Information about the current page-request. Includes some mix of: + * - page: the relative path of the current Civi page (Ex: 'civicrm/dashboard'). + * - themes: an instance of the Civi\Core\Themes service. + * @return null + * the return value is ignored + */ + public static function activeTheme(&$theme, $context) { + return self::singleton()->invoke(array('theme', 'context'), $theme, $context, + self::$_nullObject, self::$_nullObject, self::$_nullObject, self::$_nullObject, + 'civicrm_activeTheme' + ); + } + /** * This hook is called for declaring managed entities via API. * @@ -768,6 +835,21 @@ abstract class CRM_Utils_Hook { ); } + /** + * This hook allows modification of the admin panels + * + * @param array $panels + * Associated array of admin panels + * + * @return mixed + */ + public static function alterAdminPanel(&$panels) { + return self::singleton()->invoke(array('panels'), $panels, + self::$_nullObject, self::$_nullObject, self::$_nullObject, self::$_nullObject, self::$_nullObject, + 'civicrm_alterAdminPanel' + ); + } + /** * This hook is called when sending an email / printing labels to get the values for all the * tokens returned by the 'tokens' hook @@ -1879,7 +1961,7 @@ abstract class CRM_Utils_Hook { } /** - * @param CRM_Core_ExceptionObject $exception + * @param CRM_Core_Exception $exception * @param mixed $request * Reserved for future use. */ @@ -1891,7 +1973,7 @@ abstract class CRM_Utils_Hook { /** * This hook is called for declaring managed entities via API. * - * Note: This is a preboot hook. It will dispatch via the extension/module + * Note: This is a pre-boot hook. It will dispatch via the extension/module * subsystem but *not* the Symfony EventDispatcher. * * @param array[] $entityTypes @@ -2457,7 +2539,7 @@ abstract class CRM_Utils_Hook { /** * This hook is called before an inbound SMS is processed. * - * @param \CRM_SMS_MessageObject $message + * @param \CRM_SMS_Message $message * An SMS message received * @return mixed */