|
@@ -6,8 +6,6 @@ Lib::loadClass('RefConfig');
|
|
|
|
|
|
|
|
class ACL {
|
|
class ACL {
|
|
|
|
|
|
|
|
- public static $REF_TABLE_VERSION = 2;
|
|
|
|
|
-
|
|
|
|
|
/**
|
|
/**
|
|
|
* Ids List of Proces Init for given tabel (skip filters)
|
|
* Ids List of Proces Init for given tabel (skip filters)
|
|
|
*/
|
|
*/
|
|
@@ -218,7 +216,7 @@ class ACL {
|
|
|
return Core_AclHelper::parseNamespaceUrl($namespace);
|
|
return Core_AclHelper::parseNamespaceUrl($namespace);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- public static function getRefTable($rootObjectNamespace, $childName) { // CRM_REF_CONFIG
|
|
|
|
|
|
|
+ public static function getRefTable($rootObjectNamespace, $childName) { // TODO: mv to RefConfig
|
|
|
static $cacheRefTables = array();
|
|
static $cacheRefTables = array();
|
|
|
|
|
|
|
|
DBG::log("DBG get ref table ({$rootObjectNamespace}, {$childName}) ...");
|
|
DBG::log("DBG get ref table ({$rootObjectNamespace}, {$childName}) ...");
|
|
@@ -236,55 +234,56 @@ class ACL {
|
|
|
default: throw new Exception("Expected ref type for field '{$childName}' in object '{$rootObjectNamespace}'");
|
|
default: throw new Exception("Expected ref type for field '{$childName}' in object '{$rootObjectNamespace}'");
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- $refInfo = self::getRefConfig($rootObjectNamespace, $childName, $childNamespace);
|
|
|
|
|
-
|
|
|
|
|
- if ('view' === $refInfo['SOURCE']) {
|
|
|
|
|
- $refTableName = "CRM__#REF_TABLE__{$refInfo['ID']}_VIEW"; // view created by ACL::generateRefSelectSqlByFlatRelationCache
|
|
|
|
|
- } else if ('backRef' === $refInfo['SOURCE']) {
|
|
|
|
|
- $refTableName = "CRM__#REF_TABLE__{$refInfo['ID']}_VIEW"; // view created by ACL::generateRefSelectSqlByFlatRelationCache
|
|
|
|
|
- } else if ('table' === $refInfo['SOURCE']) {
|
|
|
|
|
- $refTableName = "CRM__#REF_TABLE__{$refInfo['ID']}";
|
|
|
|
|
- if ('WAITING' == $refInfo['A_STATUS']) {
|
|
|
|
|
- DB::getPDO()->execSql("
|
|
|
|
|
- CREATE TABLE IF NOT EXISTS `{$refTableName}` (
|
|
|
|
|
- `PRIMARY_KEY` int(11) NOT NULL
|
|
|
|
|
- , `REMOTE_PRIMARY_KEY` int(11) NOT NULL
|
|
|
|
|
- , `REMOTE_TYPENAME` varchar(255) NOT NULL DEFAULT ''
|
|
|
|
|
- , `A_STATUS` enum('WAITING', 'NORMAL', 'DELETED') NOT NULL DEFAULT 'WAITING'
|
|
|
|
|
- , `TRANSACTION_ID` int(11) NOT NULL
|
|
|
|
|
- , `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";
|
|
|
|
|
- $refInfo['VERSION'] = self::$REF_TABLE_VERSION;
|
|
|
|
|
- $affected = DB::getPDO()->update("CRM_REF_CONFIG", 'ID', $refInfo['ID'], [
|
|
|
|
|
- 'A_STATUS' => $refInfo['A_STATUS'],
|
|
|
|
|
- 'VERSION' => $refInfo['VERSION']
|
|
|
|
|
- ]);
|
|
|
|
|
|
|
+ $refConfig = RefConfig::fetch($rootObjectNamespace, $childName, $childNamespace);
|
|
|
|
|
+
|
|
|
|
|
+ if ('view' === $refConfig->source) {
|
|
|
|
|
+ $refTableName = "CRM__#REF_TABLE__{$refConfig->id}_VIEW"; // view created by ACL::generateRefSelectSqlByFlatRelationCache
|
|
|
|
|
+ if ('WAITING' == $refConfig->status) {
|
|
|
|
|
+ if (!($rootAcl instanceof AntAclBase)) throw new Exception("Ref allowed only for AntAcl objects");
|
|
|
|
|
+ $fieldInfo = $rootAcl->_getField($childName);
|
|
|
|
|
+ $typeField = Type_Field::build($fieldInfo);
|
|
|
|
|
+ RefConfig::installRefView($rootObjectNamespace, $childName, $typeField, $refConfig);
|
|
|
|
|
+ $refConfig = RefConfig::fetch($rootObjectNamespace, $childName, $childNamespace);
|
|
|
|
|
+ }
|
|
|
|
|
+ } else if ('backRef' === $refConfig->source) {
|
|
|
|
|
+ $refTableName = "CRM__#REF_TABLE__{$refConfig->id}_VIEW"; // view created by ACL::generateRefSelectSqlByFlatRelationCache
|
|
|
|
|
+ if ('WAITING' == $refConfig->status) {
|
|
|
|
|
+ throw new Exception("Install backRef view for '{$rootObjectNamespace}' to '{$childName}'");
|
|
|
|
|
+ // if (!($rootAcl instanceof AntAclBase)) throw new Exception("Ref allowed only for AntAcl objects");
|
|
|
|
|
+ // $fieldInfo = $rootAcl->_getField($childName);
|
|
|
|
|
+ // $typeField = Type_Field::build($fieldInfo);
|
|
|
|
|
+ // RefConfig::installRefView($rootObjectNamespace, $childName, $typeField, $refConfig);
|
|
|
|
|
+ // $refConfig = RefConfig::fetch($rootObjectNamespace, $childName, $childNamespace);
|
|
|
|
|
+ }
|
|
|
|
|
+ } 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);
|
|
|
}
|
|
}
|
|
|
} else {
|
|
} else {
|
|
|
- throw new Exception("Not Implemented ref SOURCE = '{$refInfo['SOURCE']}'");
|
|
|
|
|
|
|
+ throw new Exception("Not Implemented ref SOURCE = '{$refConfig->source}'");
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- if ('0' === (string)$refInfo['VERSION']) {
|
|
|
|
|
- DBG::log($refInfo, 'array', "BUG RefConfig VERSION = 0 (ID: {$refInfo['VERSION']})");
|
|
|
|
|
|
|
+ if ('0' === (string)$refConfig->version) {
|
|
|
|
|
+ DBG::log($refConfig, 'array', "BUG RefConfig VERSION = 0 (ID: {$refConfig->version})");
|
|
|
throw new Exception("Wystąpiły błędy w konfiguracji tabeli powiązań - zainstaluj ponownie obiekt");
|
|
throw new Exception("Wystąpiły błędy w konfiguracji tabeli powiązań - zainstaluj ponownie obiekt");
|
|
|
}
|
|
}
|
|
|
- if ($refInfo['VERSION'] < self::$REF_TABLE_VERSION) {
|
|
|
|
|
- if (1 == $refInfo['VERSION']) $refInfo = self::upgradeRefConfigFrom1to2($refInfo);
|
|
|
|
|
|
|
+ if ($refConfig->version < RefConfig::$REF_TABLE_VERSION) {
|
|
|
|
|
+ if (1 == $refConfig->version) {
|
|
|
|
|
+ RefConfig::createRefTable($rootObjectNamespace, $childName);
|
|
|
|
|
+ $refConfig = RefConfig::fetch($rootObjectNamespace, $childName, $childNamespace);
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
- if ($refInfo['VERSION'] < self::$REF_TABLE_VERSION) throw new Exception("TODO: ref table {$refInfo['ID']} require upgrade - field '{$childName}' in object '{$rootObjectNamespace}'");
|
|
|
|
|
|
|
+ if ($refConfig->version < RefConfig::$REF_TABLE_VERSION) throw new Exception("TODO: ref table {$refConfig->id} require upgrade - field '{$childName}' in object '{$rootObjectNamespace}'");
|
|
|
|
|
|
|
|
$cacheRefTables[$cacheKey] = $refTableName;
|
|
$cacheRefTables[$cacheKey] = $refTableName;
|
|
|
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);
|
|
$rootObjectNamespace = ACL::getBaseNamespace($rootObjectNamespace);
|
|
|
- $refInfo = self::getRefConfig($rootObjectNamespace, $childName);
|
|
|
|
|
- return V::get('SOURCE', 'table', $refInfo);
|
|
|
|
|
|
|
+ $refConfig = RefConfig::fetch($rootObjectNamespace, $childName);
|
|
|
|
|
+ return $refConfig->source;
|
|
|
}
|
|
}
|
|
|
public static function decodeAppInfoJson($appInfoJsonString) {
|
|
public static function decodeAppInfoJson($appInfoJsonString) {
|
|
|
$appInfo = @json_decode($appInfoJsonString, $assoc = true);
|
|
$appInfo = @json_decode($appInfoJsonString, $assoc = true);
|
|
@@ -427,15 +426,6 @@ class ACL {
|
|
|
DBG::log($sql, 'sql', "generateRefSelectSqlByFlatRelationCache");
|
|
DBG::log($sql, 'sql', "generateRefSelectSqlByFlatRelationCache");
|
|
|
return $sql;
|
|
return $sql;
|
|
|
}
|
|
}
|
|
|
- public static function getRefConfig($rootObjectNamespace, $childName, $childNamespace = null) { // CRM_REF_CONFIG
|
|
|
|
|
- $refConfig = RefConfig::fetch($rootObjectNamespace, $childName, $childNamespace)->toArray();
|
|
|
|
|
- return [
|
|
|
|
|
- 'ID' => $refConfig['id'],
|
|
|
|
|
- 'A_STATUS' => $refConfig['status'],
|
|
|
|
|
- 'VERSION' => $refConfig['version'],
|
|
|
|
|
- 'SOURCE' => $refConfig['source']
|
|
|
|
|
- ];
|
|
|
|
|
- }
|
|
|
|
|
public static function upgradeRefConfigFrom1to2($refInfo) {
|
|
public static function upgradeRefConfigFrom1to2($refInfo) {
|
|
|
if (1 == $refInfo['VERSION']) {
|
|
if (1 == $refInfo['VERSION']) {
|
|
|
if ('table' === $refInfo['SOURCE'] && 'NORMAL' == $refInfo['A_STATUS']) {
|
|
if ('table' === $refInfo['SOURCE'] && 'NORMAL' == $refInfo['A_STATUS']) {
|