|
|
@@ -5,7 +5,7 @@ Lib::loadClass('AntAclBase');
|
|
|
|
|
|
class ACL {
|
|
|
|
|
|
- public static $REF_TABLE_VERSION = 1;
|
|
|
+ public static $REF_TABLE_VERSION = 2;
|
|
|
|
|
|
/**
|
|
|
* Ids List of Proces Init for given tabel (skip filters)
|
|
|
@@ -219,7 +219,6 @@ class ACL {
|
|
|
|
|
|
public static function getRefTable($rootObjectNamespace, $childName) { // CRM_REF_CONFIG
|
|
|
static $cacheRefTables = array();
|
|
|
- if ($recurseCounter > 1) throw new Exception("BUG loop in ref config (SOURCE = 'backRef') for ns({$rootObjectNamespace}) child({$childName})");
|
|
|
|
|
|
DBG::log("DBG get ref table ({$rootObjectNamespace}, {$childName}) ...");
|
|
|
$rootObjectNamespace = ACL::getBaseNamespace($rootObjectNamespace);
|
|
|
@@ -255,6 +254,7 @@ class ACL {
|
|
|
, `A_LAST_ACTION_DATE` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
|
|
, KEY `PRIMARY_KEY` (`PRIMARY_KEY`)
|
|
|
, KEY `REMOTE_PRIMARY_KEY` (`REMOTE_PRIMARY_KEY`)
|
|
|
+ , KEY `TRANSACTION_ID` (`TRANSACTION_ID`)
|
|
|
) ENGINE=MyISAM DEFAULT CHARSET=latin2 COMMENT='{$rootObjectNamespace} #REF $childName ({$childNamespace})';
|
|
|
");
|
|
|
$refInfo['A_STATUS'] = "NORMAL";
|
|
|
@@ -268,6 +268,10 @@ class ACL {
|
|
|
throw new Exception("Not Implemented ref SOURCE = '{$refInfo['SOURCE']}'");
|
|
|
}
|
|
|
|
|
|
+ DBG::log($refInfo, 'array', "DBG XXXX");
|
|
|
+ if ($refInfo['VERSION'] < self::$REF_TABLE_VERSION) {
|
|
|
+ if (1 == $refInfo['VERSION']) $refInfo = self::upgradeRefConfigFrom1to2($refInfo);
|
|
|
+ }
|
|
|
if ($refInfo['VERSION'] < self::$REF_TABLE_VERSION) throw new Exception("TODO: ref table {$refInfo['ID']} require upgrade - field '{$childName}' in object '{$rootObjectNamespace}'");
|
|
|
|
|
|
$cacheRefTables[$cacheKey] = $refTableName;
|
|
|
@@ -545,6 +549,24 @@ class ACL {
|
|
|
if (!$refInfo['ID']) throw new Exception("Ref table not found in ref config table for field '{$childName}' in object '{$rootObjectNamespace}'");
|
|
|
return $refInfo;
|
|
|
}
|
|
|
+ public static function upgradeRefConfigFrom1to2($refInfo) {
|
|
|
+ if (1 == $refInfo['VERSION']) {
|
|
|
+ if ('table' === $refInfo['SOURCE'] && 'NORMAL' == $refInfo['A_STATUS']) {
|
|
|
+ $refTableName = "CRM__#REF_TABLE__{$refInfo['ID']}";
|
|
|
+ try {
|
|
|
+ DB::getPDO()->execSql(" CREATE INDEX `TRANSACTION_ID` ON `{$refTableName}` (`TRANSACTION_ID`) ");
|
|
|
+ } catch (Exception $e) {
|
|
|
+ DBG::log($e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ $affected = DB::getPDO()->update("CRM_REF_CONFIG", 'ID', $refInfo['ID'], [
|
|
|
+ 'VERSION' => 2
|
|
|
+ ]);
|
|
|
+ }
|
|
|
+ return array_merge($refInfo, [
|
|
|
+ 'VERSION' => 2
|
|
|
+ ]);
|
|
|
+ }
|
|
|
public static function getBackRefList($namespace) {
|
|
|
if (!$namespace) throw new Exception("Missing namespace");
|
|
|
$nsParts = explode('/', $namespace);
|