|
|
@@ -225,16 +225,13 @@ class ACL {
|
|
|
if (array_key_exists($cacheKey, $cacheRefTables)) return $cacheRefTables[$cacheKey];
|
|
|
|
|
|
$rootAcl = self::getAclByNamespace($rootObjectNamespace);
|
|
|
- $childXsdType = $rootAcl->getXsdFieldType($childName);
|
|
|
- list($typePrefix, $childNamespace) = explode(':', $childXsdType, 2);
|
|
|
- DBG::log(['$childXsdType' => $childXsdType, '$typePrefix' => $typePrefix, '$childNamespace' => $childNamespace], 'array', "DBG get ref table ...");
|
|
|
- switch ($typePrefix) {
|
|
|
- case 'ref_uri': $childAcl = self::getAclByNamespace($childNamespace); break;
|
|
|
- case 'ref': $childAcl = self::getAclByTypeName($childNamespace); break;
|
|
|
- default: throw new Exception("Expected ref type for field '{$childName}' in object '{$rootObjectNamespace}'");
|
|
|
- }
|
|
|
|
|
|
- $refConfig = RefConfig::fetch($rootObjectNamespace, $childName, $childNamespace);
|
|
|
+ $refConfig = RefConfig::fetch($rootObjectNamespace, $childName);
|
|
|
+
|
|
|
+ // TODO: CASE: Obj: A, B not installed, Ref: A->B; Install A / cannot install Ref A->B / require install B first / then go back and reinstall A
|
|
|
+ // TODO: What if primaryKey type != int ?
|
|
|
+ // TODO: require 2 pass for Install every object - first install all base Obj, then reinstall fixes Ref config
|
|
|
+ // \--- TODO: or split Reinstall obj action to: 1. Reinstall base Obj and 2. Install Ref tables
|
|
|
|
|
|
if ('view' === $refConfig->source) {
|
|
|
$refTableName = "CRM__#REF_TABLE__{$refConfig->id}_VIEW"; // view created by ACL::generateRefSelectSqlByFlatRelationCache
|
|
|
@@ -243,7 +240,7 @@ class ACL {
|
|
|
$fieldInfo = $rootAcl->_getField($childName);
|
|
|
$typeField = Type_Field::build($fieldInfo);
|
|
|
RefConfig::installRefView($rootObjectNamespace, $childName, $typeField, $refConfig);
|
|
|
- $refConfig = RefConfig::fetch($rootObjectNamespace, $childName, $childNamespace);
|
|
|
+ $refConfig = RefConfig::fetch($rootObjectNamespace, $childName);
|
|
|
}
|
|
|
} else if ('backRef' === $refConfig->source) {
|
|
|
$refTableName = "CRM__#REF_TABLE__{$refConfig->id}_VIEW"; // view created by ACL::generateRefSelectSqlByFlatRelationCache
|
|
|
@@ -253,13 +250,13 @@ class ACL {
|
|
|
// $fieldInfo = $rootAcl->_getField($childName);
|
|
|
// $typeField = Type_Field::build($fieldInfo);
|
|
|
// RefConfig::installRefView($rootObjectNamespace, $childName, $typeField, $refConfig);
|
|
|
- // $refConfig = RefConfig::fetch($rootObjectNamespace, $childName, $childNamespace);
|
|
|
+ // $refConfig = RefConfig::fetch($rootObjectNamespace, $childName);
|
|
|
}
|
|
|
} else if ('table' === $refConfig->source) {
|
|
|
$refTableName = "CRM__#REF_TABLE__{$refConfig->id}";
|
|
|
if ('WAITING' == $refConfig->status) {
|
|
|
RefConfig::createRefTable($rootObjectNamespace, $childName);
|
|
|
- $refConfig = RefConfig::fetch($rootObjectNamespace, $childName, $childNamespace);
|
|
|
+ $refConfig = RefConfig::fetch($rootObjectNamespace, $childName);
|
|
|
}
|
|
|
} else {
|
|
|
throw new Exception("Not Implemented ref SOURCE = '{$refConfig->source}'");
|
|
|
@@ -272,7 +269,7 @@ class ACL {
|
|
|
if ($refConfig->version < RefConfig::$REF_TABLE_VERSION) {
|
|
|
if (1 == $refConfig->version) {
|
|
|
RefConfig::createRefTable($rootObjectNamespace, $childName);
|
|
|
- $refConfig = RefConfig::fetch($rootObjectNamespace, $childName, $childNamespace);
|
|
|
+ $refConfig = RefConfig::fetch($rootObjectNamespace, $childName);
|
|
|
}
|
|
|
}
|
|
|
if ($refConfig->version < RefConfig::$REF_TABLE_VERSION) throw new Exception("TODO: ref table {$refConfig->id} require upgrade - field '{$childName}' in object '{$rootObjectNamespace}'");
|
|
|
@@ -426,24 +423,6 @@ class ACL {
|
|
|
DBG::log($sql, 'sql', "generateRefSelectSqlByFlatRelationCache");
|
|
|
return $sql;
|
|
|
}
|
|
|
- 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);
|