Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
O
org.nlg.buttoncustomizations
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container Registry
Model registry
Operate
Environments
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
extensions
org.nlg.buttoncustomizations
Commits
4f4cbc91
Verified
Commit
4f4cbc91
authored
1 week ago
by
Kevin Cristiano
Browse files
Options
Downloads
Patches
Plain Diff
civix upgrade
parent
b6c2d739
No related branches found
No related tags found
No related merge requests found
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
buttoncustomizations.civix.php
+146
-250
146 additions, 250 deletions
buttoncustomizations.civix.php
buttoncustomizations.php
+9
-8
9 additions, 8 deletions
buttoncustomizations.php
info.xml
+4
-0
4 additions, 0 deletions
info.xml
mixin/polyfill.php
+101
-0
101 additions, 0 deletions
mixin/polyfill.php
with
260 additions
and
258 deletions
buttoncustomizations.civix.php
+
146
−
250
View file @
4f4cbc91
...
...
@@ -3,290 +3,161 @@
// AUTO-GENERATED FILE -- Civix may overwrite any changes made to this file
/**
* (Delegated) Implements hook_civicrm_config().
*
* @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_config
*/
function
_buttoncustomizations_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
);
}
$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
* The ExtensionUtil class provides small stubs for accessing resources of this
* extension.
*/
function
_buttoncustomizations_civix_civicrm_xmlMenu
(
&
$files
)
{
foreach
(
_buttoncustomizations_civix_glob
(
__DIR__
.
'/xml/Menu/*.xml'
)
as
$file
)
{
$files
[]
=
$file
;
class
CRM_Buttoncustomizations_ExtensionUtil
{
const
SHORT_NAME
=
'buttoncustomizations'
;
const
LONG_NAME
=
'org.nlg.buttoncustomizations'
;
const
CLASS_PREFIX
=
'CRM_Buttoncustomizations'
;
/**
* Translate a string using the extension's domain.
*
* If the extension doesn't have a specific translation
* for the string, fallback to the default translations.
*
* @param string $text
* Canonical message text (generally en_US).
* @param array $params
* @return string
* Translated text.
* @see ts
*/
public
static
function
ts
(
$text
,
$params
=
[]):
string
{
if
(
!
array_key_exists
(
'domain'
,
$params
))
{
$params
[
'domain'
]
=
[
self
::
LONG_NAME
,
NULL
];
}
return
ts
(
$text
,
$params
);
}
/**
* Get the URL of a resource file (in this extension).
*
* @param string|NULL $file
* Ex: NULL.
* Ex: 'css/foo.css'.
* @return string
* 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
):
string
{
if
(
$file
===
NULL
)
{
return
rtrim
(
CRM_Core_Resources
::
singleton
()
->
getUrl
(
self
::
LONG_NAME
),
'/'
);
}
return
CRM_Core_Resources
::
singleton
()
->
getUrl
(
self
::
LONG_NAME
,
$file
);
}
}
/**
* Implements hook_civicrm_install().
*
* @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_install
*/
function
_buttoncustomizations_civix_civicrm_install
()
{
_buttoncustomizations_civix_civicrm_config
();
if
(
$upgrader
=
_buttoncustomizations_civix_upgrader
())
{
$upgrader
->
onInstall
();
/**
* 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__
.
(
$file
===
NULL
?
''
:
(
DIRECTORY_SEPARATOR
.
$file
));
}
}
/**
* Implements hook_civicrm_uninstall().
*
* @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_uninstall
*/
function
_buttoncustomizations_civix_civicrm_uninstall
()
{
_buttoncustomizations_civix_civicrm_config
();
if
(
$upgrader
=
_buttoncustomizations_civix_upgrader
())
{
$upgrader
->
onUninstall
();
/**
* Get the name of a class within this extension.
*
* @param string $suffix
* Ex: 'Page_HelloWorld' or 'Page\\HelloWorld'.
* @return string
* Ex: 'CRM_Foo_Page_HelloWorld'.
*/
public
static
function
findClass
(
$suffix
)
{
return
self
::
CLASS_PREFIX
.
'_'
.
str_replace
(
'\\'
,
'_'
,
$suffix
);
}
}
/**
* (Delegated) Implements hook_civicrm_enable().
*
* @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_enable
*/
function
_buttoncustomizations_civix_civicrm_enable
()
{
_buttoncustomizations_civix_civicrm_config
();
if
(
$upgrader
=
_buttoncustomizations_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
*/
function
_buttoncustomizations_civix_civicrm_disable
()
{
_buttoncustomizations_civix_civicrm_config
();
if
(
$upgrader
=
_buttoncustomizations_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
_buttoncustomizations_civix_civicrm_upgrade
(
$op
,
CRM_Queue_Queue
$queue
=
NULL
)
{
if
(
$upgrader
=
_buttoncustomizations_civix_upgrader
())
{
return
$upgrader
->
onUpgrade
(
$op
,
$queue
);
}
}
use
CRM_Buttoncustomizations_ExtensionUtil
as
E
;
/**
* @return CRM_Buttoncustomizations_Upgrader
*/
function
_buttoncustomizations_civix_upgrader
()
{
if
(
!
file_exists
(
__DIR__
.
'/CRM/Buttoncustomizations/Upgrader.php'
))
{
return
NULL
;
}
else
{
return
CRM_Buttoncustomizations_Upgrader_Base
::
instance
();
function
_buttoncustomizations_civix_mixin_polyfill
()
{
if
(
!
class_exists
(
'CRM_Extension_MixInfo'
))
{
$polyfill
=
__DIR__
.
'/mixin/polyfill.php'
;
(
require
$polyfill
)(
E
::
LONG_NAME
,
E
::
SHORT_NAME
,
E
::
path
());
}
}
/**
* 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()
* (Delegated) Implements hook_civicrm_config().
*
* @param $dir string, base dir
* @param $pattern string, glob pattern, eg "*.txt"
* @return array(string)
* @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_config
*/
function
_buttoncustomizations_civix_find_files
(
$dir
,
$pattern
)
{
if
(
is_callable
(
array
(
'CRM_Utils_File'
,
'findFiles'
)))
{
return
CRM_Utils_File
::
findFiles
(
$dir
,
$pattern
);
function
_buttoncustomizations_civix_civicrm_config
(
$config
=
NULL
)
{
static
$configured
=
FALSE
;
if
(
$configured
)
{
return
;
}
$configured
=
TRUE
;
$todos
=
array
(
$dir
);
$result
=
array
();
while
(
!
empty
(
$todos
))
{
$subdir
=
array_shift
(
$todos
);
foreach
(
_buttoncustomizations_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
_buttoncustomizations_civix_civicrm_managed
(
&
$entities
)
{
$mgdFiles
=
_buttoncustomizations_civix_find_files
(
__DIR__
,
'*.mgd.php'
);
foreach
(
$mgdFiles
as
$file
)
{
$es
=
include
$file
;
foreach
(
$es
as
$e
)
{
if
(
empty
(
$e
[
'module'
]))
{
$e
[
'module'
]
=
'org.nlg.buttoncustomizations'
;
}
$entities
[]
=
$e
;
}
}
$extRoot
=
__DIR__
.
DIRECTORY_SEPARATOR
;
$include_path
=
$extRoot
.
PATH_SEPARATOR
.
get_include_path
();
set_include_path
(
$include_path
);
_buttoncustomizations_civix_mixin_polyfill
();
}
/**
* (Delegated) Implements hook_civicrm_caseTypes().
*
* Find any and return any files matching "xml/case/*.xml"
*
* Note: This hook only runs in CiviCRM 4.4+.
* Implements hook_civicrm_install().
*
* @link http://
wiki
.civicrm.org/
confluence/display/CRMDOC
/hook_civicrm_
caseTypes
* @link http
s
://
docs
.civicrm.org/
dev/en/latest/hooks
/hook_civicrm_
install
*/
function
_buttoncustomizations_civix_civicrm_caseTypes
(
&
$caseTypes
)
{
if
(
!
is_dir
(
__DIR__
.
'/xml/case'
))
{
return
;
}
foreach
(
_buttoncustomizations_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'
=>
'org.nlg.buttoncustomizations'
,
'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
_buttoncustomizations_civix_civicrm_angularModules
(
&
$angularModules
)
{
if
(
!
is_dir
(
__DIR__
.
'/ang'
))
{
return
;
}
$files
=
_buttoncustomizations_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'
]
=
'org.nlg.buttoncustomizations'
;
}
$angularModules
[
$name
]
=
$module
;
}
function
_buttoncustomizations_civix_civicrm_install
()
{
_buttoncustomizations_civix_civicrm_config
();
_buttoncustomizations_civix_mixin_polyfill
();
}
/**
* 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.
* (Delegated) Implements hook_civicrm_enable().
*
* @link http://php.net/glob
* @param string $pattern
* @return array, possibly empty
* @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_enable
*/
function
_buttoncustomizations_civix_
glob
(
$pattern
)
{
$result
=
glob
(
$pattern
);
return
is_array
(
$result
)
?
$result
:
array
();
function
_buttoncustomizations_civix_
civicrm_enable
():
void
{
_buttoncustomizations_civix_civicrm_config
(
);
_buttoncustomizations_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 int $parentId - used internally to recurse in the menu structure
* @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
_buttoncustomizations_civix_insert_navigation_menu
(
&
$menu
,
$path
,
$item
,
$parentId
=
NULL
)
{
static
$navId
;
function
_buttoncustomizations_civix_insert_navigation_menu
(
&
$menu
,
$path
,
$item
)
{
// If we are done going down the path, insert menu
if
(
empty
(
$path
))
{
if
(
!
$navId
)
$navId
=
CRM_Core_DAO
::
singleValueQuery
(
"SELECT max(id) FROM civicrm_navigation"
);
$navId
++
;
$menu
[
$navId
]
=
array
(
'attributes'
=>
array_merge
(
$item
,
array
(
'label'
=>
CRM_Utils_Array
::
value
(
'name'
,
$item
),
'active'
=>
1
,
'parentID'
=>
$parentId
,
'navID'
=>
$navId
,
))
);
return
true
;
$menu
[]
=
[
'attributes'
=>
array_merge
([
'label'
=>
$item
[
'name'
]
??
NULL
,
'active'
=>
1
,
],
$item
),
];
return
TRUE
;
}
else
{
// Find an recurse into the next level down
$found
=
false
;
$found
=
FALSE
;
$path
=
explode
(
'/'
,
$path
);
$first
=
array_shift
(
$path
);
foreach
(
$menu
as
$key
=>
&
$entry
)
{
if
(
$entry
[
'attributes'
][
'name'
]
==
$first
)
{
if
(
!
$entry
[
'child'
])
$entry
[
'child'
]
=
array
();
$found
=
_buttoncustomizations_civix_insert_navigation_menu
(
$entry
[
'child'
],
implode
(
'/'
,
$path
),
$item
,
$key
);
if
(
!
isset
(
$entry
[
'child'
]))
{
$entry
[
'child'
]
=
[];
}
$found
=
_buttoncustomizations_civix_insert_navigation_menu
(
$entry
[
'child'
],
implode
(
'/'
,
$path
),
$item
);
}
}
return
$found
;
...
...
@@ -294,19 +165,44 @@ function _buttoncustomizations_civix_insert_navigation_menu(&$menu, $path, $item
}
/**
* (Delegated) Implements hook_civicrm_alterSettingsFolders().
*
* @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_alterSettingsFolders
* (Delegated) Implements hook_civicrm_navigationMenu().
*/
function
_buttoncustomizations_civix_civicrm_alterSettingsFolders
(
&
$metaDataFolders
=
NULL
)
{
static
$configured
=
FALSE
;
if
(
$configured
)
{
return
;
function
_buttoncustomizations_civix_navigationMenu
(
&
$nodes
)
{
if
(
!
is_callable
([
'CRM_Core_BAO_Navigation'
,
'fixNavigationMenu'
]))
{
_buttoncustomizations_civix_fixNavigationMenu
(
$nodes
);
}
$configured
=
TRUE
;
}
$settingsDir
=
__DIR__
.
DIRECTORY_SEPARATOR
.
'settings'
;
if
(
is_dir
(
$settingsDir
)
&&
!
in_array
(
$settingsDir
,
$metaDataFolders
))
{
$metaDataFolders
[]
=
$settingsDir
;
/**
* Given a navigation menu, generate navIDs for any items which are
* missing them.
*/
function
_buttoncustomizations_civix_fixNavigationMenu
(
&
$nodes
)
{
$maxNavID
=
1
;
array_walk_recursive
(
$nodes
,
function
(
$item
,
$key
)
use
(
&
$maxNavID
)
{
if
(
$key
===
'navID'
)
{
$maxNavID
=
max
(
$maxNavID
,
$item
);
}
});
_buttoncustomizations_civix_fixNavigationMenuItems
(
$nodes
,
$maxNavID
,
NULL
);
}
function
_buttoncustomizations_civix_fixNavigationMenuItems
(
&
$nodes
,
&
$maxNavID
,
$parentID
)
{
$origKeys
=
array_keys
(
$nodes
);
foreach
(
$origKeys
as
$origKey
)
{
if
(
!
isset
(
$nodes
[
$origKey
][
'attributes'
][
'parentID'
])
&&
$parentID
!==
NULL
)
{
$nodes
[
$origKey
][
'attributes'
][
'parentID'
]
=
$parentID
;
}
// If no navID, then assign navID and fix key.
if
(
!
isset
(
$nodes
[
$origKey
][
'attributes'
][
'navID'
]))
{
$newKey
=
++
$maxNavID
;
$nodes
[
$origKey
][
'attributes'
][
'navID'
]
=
$newKey
;
$nodes
[
$newKey
]
=
$nodes
[
$origKey
];
unset
(
$nodes
[
$origKey
]);
$origKey
=
$newKey
;
}
if
(
isset
(
$nodes
[
$origKey
][
'child'
])
&&
is_array
(
$nodes
[
$origKey
][
'child'
]))
{
_buttoncustomizations_civix_fixNavigationMenuItems
(
$nodes
[
$origKey
][
'child'
],
$maxNavID
,
$nodes
[
$origKey
][
'attributes'
][
'navID'
]);
}
}
}
This diff is collapsed.
Click to expand it.
buttoncustomizations.php
+
9
−
8
View file @
4f4cbc91
...
...
@@ -33,7 +33,6 @@ function buttoncustomizations_civicrm_config(&$config) {
* @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_xmlMenu
*/
function
buttoncustomizations_civicrm_xmlMenu
(
&
$files
)
{
_buttoncustomizations_civix_civicrm_xmlMenu
(
$files
);
}
/**
...
...
@@ -51,7 +50,6 @@ function buttoncustomizations_civicrm_install() {
* @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_uninstall
*/
function
buttoncustomizations_civicrm_uninstall
()
{
_buttoncustomizations_civix_civicrm_uninstall
();
}
/**
...
...
@@ -69,7 +67,6 @@ function buttoncustomizations_civicrm_enable() {
* @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_disable
*/
function
buttoncustomizations_civicrm_disable
()
{
_buttoncustomizations_civix_civicrm_disable
();
}
/**
...
...
@@ -85,7 +82,7 @@ function buttoncustomizations_civicrm_disable() {
* @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_upgrade
*/
function
buttoncustomizations_civicrm_upgrade
(
$op
,
CRM_Queue_Queue
$queue
=
NULL
)
{
return
_buttoncustomizations_civix_civicrm_upgrade
(
$op
,
$queue
)
;
return
;
}
/**
...
...
@@ -97,7 +94,6 @@ function buttoncustomizations_civicrm_upgrade($op, CRM_Queue_Queue $queue = NULL
* @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_managed
*/
function
buttoncustomizations_civicrm_managed
(
&
$entities
)
{
_buttoncustomizations_civix_civicrm_managed
(
$entities
);
}
/**
...
...
@@ -110,7 +106,6 @@ function buttoncustomizations_civicrm_managed(&$entities) {
* @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_caseTypes
*/
function
buttoncustomizations_civicrm_caseTypes
(
&
$caseTypes
)
{
_buttoncustomizations_civix_civicrm_caseTypes
(
$caseTypes
);
}
/**
...
...
@@ -124,7 +119,6 @@ function buttoncustomizations_civicrm_caseTypes(&$caseTypes) {
* @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_caseTypes
*/
function
buttoncustomizations_civicrm_angularModules
(
&
$angularModules
)
{
_buttoncustomizations_civix_civicrm_angularModules
(
$angularModules
);
}
/**
...
...
@@ -133,7 +127,6 @@ _buttoncustomizations_civix_civicrm_angularModules($angularModules);
* @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_alterSettingsFolders
*/
function
buttoncustomizations_civicrm_alterSettingsFolders
(
&
$metaDataFolders
=
NULL
)
{
_buttoncustomizations_civix_civicrm_alterSettingsFolders
(
$metaDataFolders
);
}
/**
...
...
@@ -150,3 +143,11 @@ function buttoncustomizations_civicrm_preProcess($formName, &$form) {
}
*/
/**
* Implements hook_civicrm_postInstall().
*
* @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_postInstall
*/
function
buttoncustomizations_civicrm_postInstall
()
{
}
This diff is collapsed.
Click to expand it.
info.xml
+
4
−
0
View file @
4f4cbc91
...
...
@@ -23,5 +23,9 @@
<comments>
This is a new module
</comments>
<civix>
<namespace>
CRM/Buttoncustomizations
</namespace>
<format>
25.01.1
</format>
</civix>
<classloader>
<psr4
prefix=
"Civi\"
path=
"Civi"
/>
</classloader>
</extension>
This diff is collapsed.
Click to expand it.
mixin/polyfill.php
0 → 100644
+
101
−
0
View file @
4f4cbc91
<?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
\n
return "
.
var_export
(
$data
,
TRUE
)
.
';'
);
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
);
}
}
};
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment