Commit 9ec89c27 authored by Seamus Lee's avatar Seamus Lee
Browse files

Implements standard caching mechanism and bumps version on editor and updates...

Implements standard caching mechanism and bumps version on editor and updates to latest civix version
parent 7bbf7dbb
......@@ -14,12 +14,11 @@
<url desc="Support">https://github.com/JMAConsulting/biz.jmaconsulting.lineitemedit/issues</url>
<url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url>
</urls>
<releaseDate>2018-03-06</releaseDate>
<version>2.1</version>
<releaseDate>2019-06-24</releaseDate>
<version>2.2</version>
<develStage>stable</develStage>
<compatibility>
<ver>4.7</ver>
<ver>5.11</ver>
<ver>5.13</ver>
</compatibility>
<comments>This extension allows a backend user to add, edit and cancel line item(s) associated with a Contribution.
</comments>
......
......@@ -2,10 +2,87 @@
// AUTO-GENERATED FILE -- Civix may overwrite any changes made to this file
/**
* The ExtensionUtil class provides small stubs for accessing resources of this
* extension.
*/
class CRM_Lineitemedit_ExtensionUtil {
const SHORT_NAME = "lineitemedit";
const LONG_NAME = "biz.jmaconsulting.lineitemedit";
const CLASS_PREFIX = "CRM_Lineitemedit";
/**
* 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 = array()) {
if (!array_key_exists('domain', $params)) {
$params['domain'] = array(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) {
if ($file === NULL) {
return rtrim(CRM_Core_Resources::singleton()->getUrl(self::LONG_NAME), '/');
}
return CRM_Core_Resources::singleton()->getUrl(self::LONG_NAME, $file);
}
/**
* 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));
}
/**
* 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);
}
}
use CRM_Lineitemedit_ExtensionUtil as E;
/**
* (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 _lineitemedit_civix_civicrm_config(&$config = NULL) {
static $configured = FALSE;
......@@ -19,14 +96,14 @@ function _lineitemedit_civix_civicrm_config(&$config = NULL) {
$extRoot = dirname(__FILE__) . DIRECTORY_SEPARATOR;
$extDir = $extRoot . 'templates';
if ( is_array( $template->template_dir ) ) {
array_unshift( $template->template_dir, $extDir );
if (is_array($template->template_dir)) {
array_unshift($template->template_dir, $extDir);
}
else {
$template->template_dir = array( $extDir, $template->template_dir );
$template->template_dir = array($extDir, $template->template_dir);
}
$include_path = $extRoot . PATH_SEPARATOR . get_include_path( );
$include_path = $extRoot . PATH_SEPARATOR . get_include_path();
set_include_path($include_path);
}
......@@ -35,7 +112,7 @@ function _lineitemedit_civix_civicrm_config(&$config = NULL) {
*
* @param $files array(string)
*
* @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_xmlMenu
* @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_xmlMenu
*/
function _lineitemedit_civix_civicrm_xmlMenu(&$files) {
foreach (_lineitemedit_civix_glob(__DIR__ . '/xml/Menu/*.xml') as $file) {
......@@ -46,7 +123,7 @@ function _lineitemedit_civix_civicrm_xmlMenu(&$files) {
/**
* 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 _lineitemedit_civix_civicrm_install() {
_lineitemedit_civix_civicrm_config();
......@@ -55,10 +132,24 @@ function _lineitemedit_civix_civicrm_install() {
}
}
/**
* Implements hook_civicrm_postInstall().
*
* @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_postInstall
*/
function _lineitemedit_civix_civicrm_postInstall() {
_lineitemedit_civix_civicrm_config();
if ($upgrader = _lineitemedit_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
* @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_uninstall
*/
function _lineitemedit_civix_civicrm_uninstall() {
_lineitemedit_civix_civicrm_config();
......@@ -70,7 +161,7 @@ function _lineitemedit_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 _lineitemedit_civix_civicrm_enable() {
_lineitemedit_civix_civicrm_config();
......@@ -84,7 +175,7 @@ function _lineitemedit_civix_civicrm_enable() {
/**
* (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 _lineitemedit_civix_civicrm_disable() {
......@@ -105,7 +196,7 @@ function _lineitemedit_civix_civicrm_disable() {
* @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 _lineitemedit_civix_civicrm_upgrade($op, CRM_Queue_Queue $queue = NULL) {
if ($upgrader = _lineitemedit_civix_upgrader()) {
......@@ -117,7 +208,7 @@ function _lineitemedit_civix_civicrm_upgrade($op, CRM_Queue_Queue $queue = NULL)
* @return CRM_Lineitemedit_Upgrader
*/
function _lineitemedit_civix_upgrader() {
if (!file_exists(__DIR__.'/CRM/Lineitemedit/Upgrader.php')) {
if (!file_exists(__DIR__ . '/CRM/Lineitemedit/Upgrader.php')) {
return NULL;
}
else {
......@@ -153,7 +244,8 @@ function _lineitemedit_civix_find_files($dir, $pattern) {
while (FALSE !== ($entry = readdir($dh))) {
$path = $subdir . DIRECTORY_SEPARATOR . $entry;
if ($entry{0} == '.') {
} elseif (is_dir($path)) {
}
elseif (is_dir($path)) {
$todos[] = $path;
}
}
......@@ -167,15 +259,19 @@ function _lineitemedit_civix_find_files($dir, $pattern) {
*
* Find any *.mgd.php files, merge their content, and return.
*
* @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_managed
* @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_managed
*/
function _lineitemedit_civix_civicrm_managed(&$entities) {
$mgdFiles = _lineitemedit_civix_find_files(__DIR__, '*.mgd.php');
sort($mgdFiles);
foreach ($mgdFiles as $file) {
$es = include $file;
foreach ($es as $e) {
if (empty($e['module'])) {
$e['module'] = 'biz.jmaconsulting.lineitemedit';
$e['module'] = E::LONG_NAME;
}
if (empty($e['params']['version'])) {
$e['params']['version'] = '3';
}
$entities[] = $e;
}
......@@ -189,7 +285,7 @@ function _lineitemedit_civix_civicrm_managed(&$entities) {
*
* Note: This hook only runs in CiviCRM 4.4+.
*
* @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_caseTypes
* @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_caseTypes
*/
function _lineitemedit_civix_civicrm_caseTypes(&$caseTypes) {
if (!is_dir(__DIR__ . '/xml/case')) {
......@@ -204,7 +300,7 @@ function _lineitemedit_civix_civicrm_caseTypes(&$caseTypes) {
// throw new CRM_Core_Exception($errorMessage);
}
$caseTypes[$name] = array(
'module' => 'biz.jmaconsulting.lineitemedit',
'module' => E::LONG_NAME,
'name' => $name,
'file' => $file,
);
......@@ -212,14 +308,14 @@ function _lineitemedit_civix_civicrm_caseTypes(&$caseTypes) {
}
/**
* (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
*/
* (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 https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_angularModules
*/
function _lineitemedit_civix_civicrm_angularModules(&$angularModules) {
if (!is_dir(__DIR__ . '/ang')) {
return;
......@@ -230,12 +326,31 @@ function _lineitemedit_civix_civicrm_angularModules(&$angularModules) {
$name = preg_replace(':\.ang\.php$:', '', basename($file));
$module = include $file;
if (empty($module['ext'])) {
$module['ext'] = 'biz.jmaconsulting.lineitemedit';
$module['ext'] = E::LONG_NAME;
}
$angularModules[$name] = $module;
}
}
/**
* (Delegated) Implements hook_civicrm_themes().
*
* Find any and return any files matching "*.theme.php"
*/
function _lineitemedit_civix_civicrm_themes(&$themes) {
$files = _lineitemedit_civix_glob(__DIR__ . '/*.theme.php');
foreach ($files as $file) {
$themeMeta = include $file;
if (empty($themeMeta['name'])) {
$themeMeta['name'] = preg_replace(':\.theme\.php$:', '', basename($file));
}
if (empty($themeMeta['ext'])) {
$themeMeta['ext'] = E::LONG_NAME;
}
$themes[$themeMeta['name']] = $themeMeta;
}
}
/**
* Glob wrapper which is guaranteed to return an array.
*
......@@ -257,35 +372,32 @@ function _lineitemedit_civix_glob($pattern) {
* 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)
*/
function _lineitemedit_civix_insert_navigation_menu(&$menu, $path, $item, $parentId = NULL) {
static $navId;
function _lineitemedit_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(
$menu[] = array(
'attributes' => array_merge(array(
'label' => CRM_Utils_Array::value('name', $item),
'active' => 1,
'parentID' => $parentId,
'navID' => $navId,
))
), $item),
);
return true;
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();
if (!isset($entry['child'])) {
$entry['child'] = array();
}
$found = _lineitemedit_civix_insert_navigation_menu($entry['child'], implode('/', $path), $item, $key);
}
}
......@@ -293,20 +405,70 @@ function _lineitemedit_civix_insert_navigation_menu(&$menu, $path, $item, $paren
}
}
/**
* (Delegated) Implements hook_civicrm_navigationMenu().
*/
function _lineitemedit_civix_navigationMenu(&$nodes) {
if (!is_callable(array('CRM_Core_BAO_Navigation', 'fixNavigationMenu'))) {
_lineitemedit_civix_fixNavigationMenu($nodes);
}
}
/**
* Given a navigation menu, generate navIDs for any items which are
* missing them.
*/
function _lineitemedit_civix_fixNavigationMenu(&$nodes) {
$maxNavID = 1;
array_walk_recursive($nodes, function($item, $key) use (&$maxNavID) {
if ($key === 'navID') {
$maxNavID = max($maxNavID, $item);
}
});
_lineitemedit_civix_fixNavigationMenuItems($nodes, $maxNavID, NULL);
}
function _lineitemedit_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'])) {
_lineitemedit_civix_fixNavigationMenuItems($nodes[$origKey]['child'], $maxNavID, $nodes[$origKey]['attributes']['navID']);
}
}
}
/**
* (Delegated) Implements hook_civicrm_alterSettingsFolders().
*
* @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_alterSettingsFolders
* @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_alterSettingsFolders
*/
function _lineitemedit_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)) {
if (!in_array($settingsDir, $metaDataFolders) && is_dir($settingsDir)) {
$metaDataFolders[] = $settingsDir;
}
}
/**
* (Delegated) Implements hook_civicrm_entityTypes().
*
* Find any *.entityType.php files, merge their content, and return.
*
* @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_entityTypes
*/
function _lineitemedit_civix_civicrm_entityTypes(&$entityTypes) {
$entityTypes = array_merge($entityTypes, array (
));
}
......@@ -103,6 +103,21 @@ function lineitemedit_civicrm_alterSettingsFolders(&$metaDataFolders = NULL) {
_lineitemedit_civix_civicrm_alterSettingsFolders($metaDataFolders);
}
/**
* Implements hook_civicrm_container().
*/
function lineitemedit_civicrm_container(\Symfony\Component\DependencyInjection\ContainerBuilder $container) {
$container->setDefinition("cache.lineitemEditor", new Symfony\Component\DependencyInjection\Definition(
'CRM_Utils_Cache_Interface',
[
[
'name' => 'lineitem-editor',
'type' => ['*memory*', 'SqlGroup', 'ArrayCache'],
],
]
))->setFactory('CRM_Utils_Cache::create');
}
function lineitemedit_civicrm_buildForm($formName, &$form) {
if ($formName == 'CRM_Contribute_Form_Contribution') {
$contributionID = NULL;
......@@ -272,7 +287,7 @@ function lineitemedit_civicrm_pre($op, $entity, $entityID, &$params) {
$taxAmount,
TRUE, TRUE
);
CRM_Core_BAO_Cache::setItem($contriParams, 'lineitem-editor', $entityID);
Civi::cache('lineitemEditor')->set($entityID, $contriParams);
// record financial item on addition of lineitem
if ($trxn) {
......@@ -291,11 +306,11 @@ function lineitemedit_civicrm_pre($op, $entity, $entityID, &$params) {
function lineitemedit_civicrm_post($op, $entity, $entityID, &$obj) {
if ($entity == 'Contribution' && $op == 'edit') {
$contriParams = CRM_Core_BAO_Cache::getItem('lineitem-editor', $entityID);
$contriParams = Civi::cache('lineitemEditor')->get($entityID);
if (!empty($contriParams)) {
$obj->copyValues($contriParams);
$obj->save();
CRM_Core_BAO_Cache::deleteGroup('lineitem-editor', $entityID);
Civi::cache('lineitemEditor')->delete($entityID);
}
}
}
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment