Просмотр исходного кода

Merge branch 'master' of ssh://biuro.biall-net.pl:2222/plabudda/se

a.binder 8 лет назад
Родитель
Сommit
6baf418c13
1 измененных файлов с 24 добавлено и 2 удалено
  1. 24 2
      SE/se-lib/ACL.php

+ 24 - 2
SE/se-lib/ACL.php

@@ -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);