|
@@ -174,7 +174,19 @@ class ACL {
|
|
|
return $acl;
|
|
return $acl;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ public static function getBaseNamespace($namespace) {
|
|
|
|
|
+ // map SystemObjects__x3A__{parent}/{name} to default_objects/{name}
|
|
|
|
|
+ if ('SystemObjects/' === substr($namespace, 0, strlen('SystemObjects/'))) {
|
|
|
|
|
+ $exNs = explode('/', $namespace);
|
|
|
|
|
+ if (3 === count($exNs)) {
|
|
|
|
|
+ return "default_objects/{$exNs[2]}";
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ return $namespace;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
public static function getAclByNamespace($namespace, $forceTblAclInit = false) {
|
|
public static function getAclByNamespace($namespace, $forceTblAclInit = false) {
|
|
|
|
|
+ $namespace = ACL::getBaseNamespace($namespace);
|
|
|
return Core_AclHelper::getAclByNamespace($namespace, $forceTblAclInit);
|
|
return Core_AclHelper::getAclByNamespace($namespace, $forceTblAclInit);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -208,6 +220,7 @@ class ACL {
|
|
|
public static function getRefTable($rootObjectNamespace, $childName) { // CRM_REF_CONFIG
|
|
public static function getRefTable($rootObjectNamespace, $childName) { // CRM_REF_CONFIG
|
|
|
static $cacheRefTables = array();
|
|
static $cacheRefTables = array();
|
|
|
DBG::log("DBG get ref table ({$rootObjectNamespace}, {$childName}) ...");
|
|
DBG::log("DBG get ref table ({$rootObjectNamespace}, {$childName}) ...");
|
|
|
|
|
+ $rootObjectNamespace = ACL::getBaseNamespace($rootObjectNamespace);
|
|
|
$cacheKey = "{$rootObjectNamespace}/{$childName}";
|
|
$cacheKey = "{$rootObjectNamespace}/{$childName}";
|
|
|
if (array_key_exists($cacheKey, $cacheRefTables)) return $cacheRefTables[$cacheKey];
|
|
if (array_key_exists($cacheKey, $cacheRefTables)) return $cacheRefTables[$cacheKey];
|
|
|
|
|
|
|
@@ -255,6 +268,7 @@ class ACL {
|
|
|
return $refTableName;
|
|
return $refTableName;
|
|
|
}
|
|
}
|
|
|
public static function getRefSource($rootObjectNamespace, $childName) { // CRM_REF_CONFIG
|
|
public static function getRefSource($rootObjectNamespace, $childName) { // CRM_REF_CONFIG
|
|
|
|
|
+ $rootObjectNamespace = ACL::getBaseNamespace($rootObjectNamespace);
|
|
|
$refInfo = self::getRefConfig($rootObjectNamespace, $childName);
|
|
$refInfo = self::getRefConfig($rootObjectNamespace, $childName);
|
|
|
return V::get('SOURCE', 'table', $refInfo);
|
|
return V::get('SOURCE', 'table', $refInfo);
|
|
|
}
|
|
}
|
|
@@ -379,6 +393,7 @@ class ACL {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
$sqlWhereFromRestrictions = (!empty($sqlWhereFromRestrictions)) ? implode(" and ", $sqlWhereFromRestrictions) : "1=1";
|
|
$sqlWhereFromRestrictions = (!empty($sqlWhereFromRestrictions)) ? implode(" and ", $sqlWhereFromRestrictions) : "1=1";
|
|
|
|
|
+ $sqlChildFieldName = $childAcl->getSqlFieldName($appInfoRootFieldName);
|
|
|
$sql = "
|
|
$sql = "
|
|
|
select root.{$rootPrimaryKeyField} as PRIMARY_KEY
|
|
select root.{$rootPrimaryKeyField} as PRIMARY_KEY
|
|
|
, child.{$childPrimaryKeyField} as REMOTE_PRIMARY_KEY
|
|
, child.{$childPrimaryKeyField} as REMOTE_PRIMARY_KEY
|
|
@@ -387,7 +402,7 @@ class ACL {
|
|
|
, 0 as TRANSACTION_ID
|
|
, 0 as TRANSACTION_ID
|
|
|
, {$lastActionDateField} as A_LAST_ACTION_DATE
|
|
, {$lastActionDateField} as A_LAST_ACTION_DATE
|
|
|
from `{$rootTableName}` root
|
|
from `{$rootTableName}` root
|
|
|
- join `{$childTableName}` child on(child.{$appInfoRootFieldName} = root.{$appInfoChildFieldName})
|
|
|
|
|
|
|
+ join `{$childTableName}` child on(child.{$sqlChildFieldName} = root.{$appInfoChildFieldName})
|
|
|
where {$sqlWhereFromRestrictions}
|
|
where {$sqlWhereFromRestrictions}
|
|
|
";
|
|
";
|
|
|
DBG::log($sql, 'sql', "generateRefSelectSqlByFlatRelationCache");
|
|
DBG::log($sql, 'sql', "generateRefSelectSqlByFlatRelationCache");
|
|
@@ -408,6 +423,7 @@ class ACL {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
public static function getRefConfig($rootObjectNamespace, $childName, $childNamespace = null) { // CRM_REF_CONFIG
|
|
public static function getRefConfig($rootObjectNamespace, $childName, $childNamespace = null) { // CRM_REF_CONFIG
|
|
|
|
|
+ $rootObjectNamespace = ACL::getBaseNamespace($rootObjectNamespace);
|
|
|
if (!$childNamespace) {
|
|
if (!$childNamespace) {
|
|
|
$rootAcl = self::getAclByNamespace($rootObjectNamespace);
|
|
$rootAcl = self::getAclByNamespace($rootObjectNamespace);
|
|
|
$childXsdType = $rootAcl->getXsdFieldType($childName);
|
|
$childXsdType = $rootAcl->getXsdFieldType($childName);
|
|
@@ -458,6 +474,20 @@ class ACL {
|
|
|
'CHILD_NS' => $childNamespace
|
|
'CHILD_NS' => $childNamespace
|
|
|
]);
|
|
]);
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ // { // TODO: fix source if ref for `SystemObjects__x3A__*` and defined flat_relation_cache - move to AclReinstall?
|
|
|
|
|
+ // if ('SystemObjects__x3A__' === substr($childNamespace, 0, strlen('SystemObjects__x3A__'))) {
|
|
|
|
|
+ // if ('table' === $refInfo['SOURCE']) {
|
|
|
|
|
+ // $toUpdate = [
|
|
|
|
|
+ // 'SOURCE' => 'view',
|
|
|
|
|
+ // 'A_STATUS' => 'WAITING',
|
|
|
|
|
+ // ];
|
|
|
|
|
+ // DB::getPDO()->update('CRM_REF_CONFIG', 'ID', $refInfo['ID'], $toUpdate);
|
|
|
|
|
+ // $refInfo = array_merge($refInfo, $toUpdate);
|
|
|
|
|
+ // }
|
|
|
|
|
+ // }
|
|
|
|
|
+ // }
|
|
|
|
|
+
|
|
|
if (!$refInfo['ID']) throw new Exception("Ref table not found in ref config table for field '{$childName}' in object '{$rootObjectNamespace}'");
|
|
if (!$refInfo['ID']) throw new Exception("Ref table not found in ref config table for field '{$childName}' in object '{$rootObjectNamespace}'");
|
|
|
return $refInfo;
|
|
return $refInfo;
|
|
|
}
|
|
}
|
|
@@ -479,6 +509,7 @@ class ACL {
|
|
|
]);
|
|
]);
|
|
|
}
|
|
}
|
|
|
public static function getChildRefFullList($namespace) {
|
|
public static function getChildRefFullList($namespace) {
|
|
|
|
|
+ $namespace = ACL::getBaseNamespace($namespace);
|
|
|
if (!$namespace) throw new Exception("Missing namespace");
|
|
if (!$namespace) throw new Exception("Missing namespace");
|
|
|
return DB::getPDO()->fetchAll("
|
|
return DB::getPDO()->fetchAll("
|
|
|
select c.CHILD_NAME as namespace
|
|
select c.CHILD_NAME as namespace
|