Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • extensions/contributionpagecustomfield
  • artur.smigielski/contributionpagecustomfield
  • jtwyman/contributionpagecustomfield
3 results
Show changes
Commits on Source (10)
# Contribution Page Custom Field
#### biz.jmaconsulting.contributionpagecustomfield
## Overview
This extension allows to create custom field for a contribution page.
This extension enables creating custom fields for a contribution page.
## Installation
......
{
"name": "jmaconsulting/contributionpagecustomfield",
"type": "civicrm-ext",
"description": "CiviCRM Extension to allow custom fields on Contribution Pages"
}
......@@ -7,9 +7,9 @@
* extension.
*/
class CRM_Contributionpagecustomfield_ExtensionUtil {
const SHORT_NAME = "contributionpagecustomfield";
const LONG_NAME = "biz.jmaconsulting.contributionpagecustomfield";
const CLASS_PREFIX = "CRM_Contributionpagecustomfield";
const SHORT_NAME = 'contributionpagecustomfield';
const LONG_NAME = 'biz.jmaconsulting.contributionpagecustomfield';
const CLASS_PREFIX = 'CRM_Contributionpagecustomfield';
/**
* Translate a string using the extension's domain.
......@@ -24,9 +24,9 @@ class CRM_Contributionpagecustomfield_ExtensionUtil {
* Translated text.
* @see ts
*/
public static function ts($text, $params = array()) {
public static function ts($text, $params = []): string {
if (!array_key_exists('domain', $params)) {
$params['domain'] = array(self::LONG_NAME, NULL);
$params['domain'] = [self::LONG_NAME, NULL];
}
return ts($text, $params);
}
......@@ -41,7 +41,7 @@ class CRM_Contributionpagecustomfield_ExtensionUtil {
* Ex: 'http://example.org/sites/default/ext/org.example.foo'.
* Ex: 'http://example.org/sites/default/ext/org.example.foo/css/foo.css'.
*/
public static function url($file = NULL) {
public static function url($file = NULL): string {
if ($file === NULL) {
return rtrim(CRM_Core_Resources::singleton()->getUrl(self::LONG_NAME), '/');
}
......@@ -79,291 +79,71 @@ class CRM_Contributionpagecustomfield_ExtensionUtil {
use CRM_Contributionpagecustomfield_ExtensionUtil as E;
function _contributionpagecustomfield_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 _contributionpagecustomfield_civix_civicrm_config(&$config = NULL) {
function _contributionpagecustomfield_civix_civicrm_config($config = NULL) {
static $configured = FALSE;
if ($configured) {
return;
}
$configured = TRUE;
$template =& CRM_Core_Smarty::singleton();
$extRoot = dirname(__FILE__) . 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);
}
$extRoot = __DIR__ . DIRECTORY_SEPARATOR;
$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 _contributionpagecustomfield_civix_civicrm_xmlMenu(&$files) {
foreach (_contributionpagecustomfield_civix_glob(__DIR__ . '/xml/Menu/*.xml') as $file) {
$files[] = $file;
}
_contributionpagecustomfield_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 _contributionpagecustomfield_civix_civicrm_install() {
_contributionpagecustomfield_civix_civicrm_config();
if ($upgrader = _contributionpagecustomfield_civix_upgrader()) {
$upgrader->onInstall();
}
}
/**
* Implements hook_civicrm_postInstall().
*
* @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_postInstall
*/
function _contributionpagecustomfield_civix_civicrm_postInstall() {
_contributionpagecustomfield_civix_civicrm_config();
if ($upgrader = _contributionpagecustomfield_civix_upgrader()) {
if (is_callable(array($upgrader, 'onPostInstall'))) {
$upgrader->onPostInstall();
}
}
}
/**
* Implements hook_civicrm_uninstall().
*
* @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_uninstall
*/
function _contributionpagecustomfield_civix_civicrm_uninstall() {
_contributionpagecustomfield_civix_civicrm_config();
if ($upgrader = _contributionpagecustomfield_civix_upgrader()) {
$upgrader->onUninstall();
}
_contributionpagecustomfield_civix_mixin_polyfill();
}
/**
* (Delegated) Implements hook_civicrm_enable().
*
* @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_enable
*/
function _contributionpagecustomfield_civix_civicrm_enable() {
_contributionpagecustomfield_civix_civicrm_config();
if ($upgrader = _contributionpagecustomfield_civix_upgrader()) {
if (is_callable(array($upgrader, 'onEnable'))) {
$upgrader->onEnable();
}
}
}
/**
* (Delegated) Implements hook_civicrm_disable().
*
* @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_disable
* @return mixed
* @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_enable
*/
function _contributionpagecustomfield_civix_civicrm_disable() {
function _contributionpagecustomfield_civix_civicrm_enable(): void {
_contributionpagecustomfield_civix_civicrm_config();
if ($upgrader = _contributionpagecustomfield_civix_upgrader()) {
if (is_callable(array($upgrader, 'onDisable'))) {
$upgrader->onDisable();
}
}
}
/**
* (Delegated) Implements hook_civicrm_upgrade().
*
* @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
*
* @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_upgrade
*/
function _contributionpagecustomfield_civix_civicrm_upgrade($op, CRM_Queue_Queue $queue = NULL) {
if ($upgrader = _contributionpagecustomfield_civix_upgrader()) {
return $upgrader->onUpgrade($op, $queue);
}
}
/**
* @return CRM_Contributionpagecustomfield_Upgrader
*/
function _contributionpagecustomfield_civix_upgrader() {
if (!file_exists(__DIR__ . '/CRM/Contributionpagecustomfield/Upgrader.php')) {
return NULL;
}
else {
return CRM_Contributionpagecustomfield_Upgrader_Base::instance();
}
}
/**
* 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 _contributionpagecustomfield_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 (_contributionpagecustomfield_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 _contributionpagecustomfield_civix_civicrm_managed(&$entities) {
$mgdFiles = _contributionpagecustomfield_civix_find_files(__DIR__, '*.mgd.php');
foreach ($mgdFiles as $file) {
$es = include $file;
foreach ($es as $e) {
if (empty($e['module'])) {
$e['module'] = E::LONG_NAME;
}
$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 _contributionpagecustomfield_civix_civicrm_caseTypes(&$caseTypes) {
if (!is_dir(__DIR__ . '/xml/case')) {
return;
}
foreach (_contributionpagecustomfield_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' => E::LONG_NAME,
'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 _contributionpagecustomfield_civix_civicrm_angularModules(&$angularModules) {
if (!is_dir(__DIR__ . '/ang')) {
return;
}
$files = _contributionpagecustomfield_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'] = E::LONG_NAME;
}
$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 _contributionpagecustomfield_civix_glob($pattern) {
$result = glob($pattern);
return is_array($result) ? $result : array();
_contributionpagecustomfield_civix_mixin_polyfill();
}
/**
* 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 _contributionpagecustomfield_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(
'label' => CRM_Utils_Array::value('name', $item),
'active' => 1,
), $item),
);
$menu[] = [
'attributes' => array_merge([
'label' => $item['name'] ?? NULL,
'active' => 1,
], $item),
];
return TRUE;
}
else {
......@@ -374,9 +154,9 @@ function _contributionpagecustomfield_civix_insert_navigation_menu(&$menu, $path
foreach ($menu as $key => &$entry) {
if ($entry['attributes']['name'] == $first) {
if (!isset($entry['child'])) {
$entry['child'] = array();
$entry['child'] = [];
}
$found = _contributionpagecustomfield_civix_insert_navigation_menu($entry['child'], implode('/', $path), $item, $key);
$found = _contributionpagecustomfield_civix_insert_navigation_menu($entry['child'], implode('/', $path), $item);
}
}
return $found;
......@@ -387,7 +167,7 @@ function _contributionpagecustomfield_civix_insert_navigation_menu(&$menu, $path
* (Delegated) Implements hook_civicrm_navigationMenu().
*/
function _contributionpagecustomfield_civix_navigationMenu(&$nodes) {
if (!is_callable(array('CRM_Core_BAO_Navigation', 'fixNavigationMenu'))) {
if (!is_callable(['CRM_Core_BAO_Navigation', 'fixNavigationMenu'])) {
_contributionpagecustomfield_civix_fixNavigationMenu($nodes);
}
}
......@@ -425,21 +205,3 @@ function _contributionpagecustomfield_civix_fixNavigationMenuItems(&$nodes, &$ma
}
}
}
/**
* (Delegated) Implements hook_civicrm_alterSettingsFolders().
*
* @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_alterSettingsFolders
*/
function _contributionpagecustomfield_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;
}
}
......@@ -12,15 +12,6 @@ function contributionpagecustomfield_civicrm_config(&$config) {
_contributionpagecustomfield_civix_civicrm_config($config);
}
/**
* Implements hook_civicrm_xmlMenu().
*
* @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_xmlMenu
*/
function contributionpagecustomfield_civicrm_xmlMenu(&$files) {
_contributionpagecustomfield_civix_civicrm_xmlMenu($files);
}
/**
* Implements hook_civicrm_install().
*
......@@ -30,24 +21,6 @@ function contributionpagecustomfield_civicrm_install() {
_contributionpagecustomfield_civix_civicrm_install();
}
/**
* Implements hook_civicrm_postInstall().
*
* @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_postInstall
*/
function contributionpagecustomfield_civicrm_postInstall() {
_contributionpagecustomfield_civix_civicrm_postInstall();
}
/**
* Implements hook_civicrm_uninstall().
*
* @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_uninstall
*/
function contributionpagecustomfield_civicrm_uninstall() {
_contributionpagecustomfield_civix_civicrm_uninstall();
}
/**
* Implements hook_civicrm_enable().
*
......@@ -57,24 +30,6 @@ function contributionpagecustomfield_civicrm_enable() {
_contributionpagecustomfield_civix_civicrm_enable();
}
/**
* Implements hook_civicrm_disable().
*
* @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_disable
*/
function contributionpagecustomfield_civicrm_disable() {
_contributionpagecustomfield_civix_civicrm_disable();
}
/**
* Implements hook_civicrm_upgrade().
*
* @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_upgrade
*/
function contributionpagecustomfield_civicrm_upgrade($op, CRM_Queue_Queue $queue = NULL) {
return _contributionpagecustomfield_civix_civicrm_upgrade($op, $queue);
}
/**
* Implements hook_civicrm_managed().
*
......@@ -84,7 +39,6 @@ function contributionpagecustomfield_civicrm_upgrade($op, CRM_Queue_Queue $queue
* @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_managed
*/
function contributionpagecustomfield_civicrm_managed(&$entities) {
_contributionpagecustomfield_civix_civicrm_managed($entities);
$entities[] = [
'module' => 'biz.jmaconsulting.contributionpagecustomfield',
'name' => 'contributionpagecustomfield',
......@@ -101,42 +55,6 @@ function contributionpagecustomfield_civicrm_managed(&$entities) {
];
}
/**
* Implements hook_civicrm_caseTypes().
*
* Generate a list of case-types.
*
* Note: This hook only runs in CiviCRM 4.4+.
*
* @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_caseTypes
*/
function contributionpagecustomfield_civicrm_caseTypes(&$caseTypes) {
_contributionpagecustomfield_civix_civicrm_caseTypes($caseTypes);
}
/**
* 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_angularModules
*/
function contributionpagecustomfield_civicrm_angularModules(&$angularModules) {
_contributionpagecustomfield_civix_civicrm_angularModules($angularModules);
}
/**
* Implements hook_civicrm_alterSettingsFolders().
*
* @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_alterSettingsFolders
*/
function contributionpagecustomfield_civicrm_alterSettingsFolders(&$metaDataFolders = NULL) {
_contributionpagecustomfield_civix_civicrm_alterSettingsFolders($metaDataFolders);
}
/**
* Implements hook_civicrm_preProcess().
*
......
......@@ -9,19 +9,27 @@
<email>support@jmaconsulting.biz</email>
</maintainer>
<urls>
<url desc="Main Extension Page">https://github.com/JMAConsulting/biz.jmaconsulting.contributionpagecustomfield/blob/master/README.md</url>
<url desc="Documentation">https://github.com/JMAConsulting/biz.jmaconsulting.contributionpagecustomfield/blob/master/README.md</url>
<url desc="Support">https://github.com/JMAConsulting/biz.jmaconsulting.contributionpagecustomfield/issues</url>
<url desc="Main Extension Page">https://lab.civicrm.org/extensions/contributionpagecustomfield/blob/master/README.md</url>
<url desc="Documentation">https://lab.civicrm.org/extensions/contributionpagecustomfield/blob/master/README.md</url>
<url desc="Support">https://lab.civicrm.org/extensions/contributionpagecustomfield/issues</url>
<url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url>
</urls>
<releaseDate>2018-01-09</releaseDate>
<version>1.0</version>
<releaseDate>2024-06-07</releaseDate>
<version>1.1</version>
<develStage>beta</develStage>
<compatibility>
<ver>4.7</ver>
<ver>5.27</ver>
<ver>5.63</ver>
</compatibility>
<comments>Many thanks to EHC(Environmental Health Coalition) for sponsoring the development of this extension.</comments>
<civix>
<namespace>CRM/Contributionpagecustomfield</namespace>
<format>23.02.1</format>
</civix>
<mixins>
<mixin>smarty-v2@1.0.1</mixin>
</mixins>
<classloader>
<psr4 prefix="Civi\" path="Civi"/>
</classloader>
</extension>
<?php
/**
* When deploying on systems that lack mixin support, fake it.
*
* @mixinFile polyfill.php
*
* This polyfill does some (persnickity) deduplication, but it doesn't allow upgrades or shipping replacements in core.
*
* Note: The polyfill.php is designed to be copied into extensions for interoperability. Consequently, this file is
* not used 'live' by `civicrm-core`. However, the file does need a canonical home, and it's convenient to keep it
* adjacent to the actual mixin files.
*
* @param string $longName
* @param string $shortName
* @param string $basePath
*/
return function ($longName, $shortName, $basePath) {
// Construct imitations of the mixin services. These cannot work as well (e.g. with respect to
// number of file-reads, deduping, upgrading)... but they should be OK for a few months while
// the mixin services become available.
// List of active mixins; deduped by version
$mixinVers = [];
foreach ((array) glob($basePath . '/mixin/*.mixin.php') as $f) {
[$name, $ver] = explode('@', substr(basename($f), 0, -10));
if (!isset($mixinVers[$name]) || version_compare($ver, $mixinVers[$name], '>')) {
$mixinVers[$name] = $ver;
}
}
$mixins = [];
foreach ($mixinVers as $name => $ver) {
$mixins[] = "$name@$ver";
}
// Imitate CRM_Extension_MixInfo.
$mixInfo = new class() {
/**
* @var string
*/
public $longName;
/**
* @var string
*/
public $shortName;
public $_basePath;
public function getPath($file = NULL) {
return $this->_basePath . ($file === NULL ? '' : (DIRECTORY_SEPARATOR . $file));
}
public function isActive() {
return \CRM_Extension_System::singleton()->getMapper()->isActiveModule($this->shortName);
}
};
$mixInfo->longName = $longName;
$mixInfo->shortName = $shortName;
$mixInfo->_basePath = $basePath;
// Imitate CRM_Extension_BootCache.
$bootCache = new class() {
public function define($name, $callback) {
$envId = \CRM_Core_Config_Runtime::getId();
$oldExtCachePath = \Civi::paths()->getPath("[civicrm.compile]/CachedExtLoader.{$envId}.php");
$stat = stat($oldExtCachePath);
$file = Civi::paths()->getPath('[civicrm.compile]/CachedMixin.' . md5($name . ($stat['mtime'] ?? 0)) . '.php');
if (file_exists($file)) {
return include $file;
}
else {
$data = $callback();
file_put_contents($file, '<' . "?php\nreturn " . var_export($data, 1) . ';');
return $data;
}
}
};
// Imitate CRM_Extension_MixinLoader::run()
// Parse all live mixins before trying to scan any classes.
global $_CIVIX_MIXIN_POLYFILL;
foreach ($mixins as $mixin) {
// If the exact same mixin is defined by multiple exts, just use the first one.
if (!isset($_CIVIX_MIXIN_POLYFILL[$mixin])) {
$_CIVIX_MIXIN_POLYFILL[$mixin] = include_once $basePath . '/mixin/' . $mixin . '.mixin.php';
}
}
foreach ($mixins as $mixin) {
// If there's trickery about installs/uninstalls/resets, then we may need to register a second time.
if (!isset(\Civi::$statics[$longName][$mixin])) {
\Civi::$statics[$longName][$mixin] = 1;
$func = $_CIVIX_MIXIN_POLYFILL[$mixin];
$func($mixInfo, $bootCache);
}
}
};
<?php
/**
* Auto-register "templates/" folder.
*
* @mixinName smarty-v2
* @mixinVersion 1.0.1
* @since 5.59
*
* @param CRM_Extension_MixInfo $mixInfo
* On newer deployments, this will be an instance of MixInfo. On older deployments, Civix may polyfill with a work-a-like.
* @param \CRM_Extension_BootCache $bootCache
* On newer deployments, this will be an instance of MixInfo. On older deployments, Civix may polyfill with a work-a-like.
*/
return function ($mixInfo, $bootCache) {
$dir = $mixInfo->getPath('templates');
if (!file_exists($dir)) {
return;
}
$register = function() use ($dir) {
// This implementation has a theoretical edge-case bug on older versions of CiviCRM where a template could
// be registered more than once.
CRM_Core_Smarty::singleton()->addTemplateDir($dir);
};
// Let's figure out what environment we're in -- so that we know the best way to call $register().
if (!empty($GLOBALS['_CIVIX_MIXIN_POLYFILL'])) {
// Polyfill Loader (v<=5.45): We're already in the middle of firing `hook_config`.
if ($mixInfo->isActive()) {
$register();
}
return;
}
if (CRM_Extension_System::singleton()->getManager()->extensionIsBeingInstalledOrEnabled($mixInfo->longName)) {
// New Install, Standard Loader: The extension has just been enabled, and we're now setting it up.
// System has already booted. New templates may be needed for upcoming installation steps.
$register();
return;
}
// Typical Pageview, Standard Loader: Defer the actual registration for a moment -- to ensure that Smarty is online.
\Civi::dispatcher()->addListener('hook_civicrm_config', function() use ($mixInfo, $register) {
if ($mixInfo->isActive()) {
$register();
}
});
};