|
|
@@ -54,7 +54,22 @@ class Schema_SystemObjectFieldStorageAcl extends Core_AclSimpleSchemaBase {
|
|
|
KEY `isActive` (isActive)
|
|
|
) ENGINE=MyISAM DEFAULT CHARSET=latin2
|
|
|
");
|
|
|
+ // DB::getPDO()->execSql(" drop table if exists `{$this->_rootTableName}_enum` ");// TODO: DBG
|
|
|
+ DB::getPDO()->execSql("
|
|
|
+ create table if not exists `{$this->_rootTableName}_enum` (
|
|
|
+ `namespace` varchar(255) DEFAULT '' COMMENT 'concat obj ns / field ns / value',
|
|
|
+ `fieldNamespace` varchar(255) DEFAULT '',
|
|
|
+ `objectNamespace` varchar(255) DEFAULT '',
|
|
|
+ `value` varchar(255) DEFAULT '',
|
|
|
+ `label` varchar(255) DEFAULT '',
|
|
|
+ `isActive` tinyint(1) NOT NULL DEFAULT 0 COMMENT 'installed',
|
|
|
+ KEY `objectNamespace` (`objectNamespace`),
|
|
|
+ KEY `fieldNamespace` (`fieldNamespace`),
|
|
|
+ KEY `isActive` (isActive)
|
|
|
+ ) ENGINE=MyISAM DEFAULT CHARSET=latin2
|
|
|
+ ");
|
|
|
DB::getPDO()->update($this->_rootTableName, 'objectNamespace', $namespace, ['isActive' => 0]);
|
|
|
+ DB::getPDO()->update("{$this->_rootTableName}_enum", 'objectNamespace', $namespace, ['isActive' => 0]);
|
|
|
$sysObjectStorage = SchemaFactory::loadDefaultObject('SystemObject');
|
|
|
if (!$namespace) throw new Exception("Missing namespace '{$namespace}'");
|
|
|
$objectItem = $sysObjectStorage->getItem($namespace);
|
|
|
@@ -176,6 +191,11 @@ class Schema_SystemObjectFieldStorageAcl extends Core_AclSimpleSchemaBase {
|
|
|
DBG::nicePrint($xsdType, '$xsdType');
|
|
|
if (empty($xsdType['struct'])) throw new Exception("Field list not found for '{$item['namespace']}'");
|
|
|
foreach ($xsdType['struct'] as $fieldName => $x) {
|
|
|
+ $listEnum = [];
|
|
|
+ if (!empty($x['restrictions']['enumeration'])) {
|
|
|
+ $listEnum = $x['restrictions']['enumeration'];
|
|
|
+ unset($x['restrictions']['enumeration']);
|
|
|
+ }
|
|
|
DB::getPDO()->insertOrUpdate($this->_rootTableName, [
|
|
|
'namespace' => "{$item['namespace']}/{$fieldName}",
|
|
|
'objectNamespace' => $item['namespace'],
|
|
|
@@ -188,6 +208,19 @@ class Schema_SystemObjectFieldStorageAcl extends Core_AclSimpleSchemaBase {
|
|
|
'maxOccurs' => $x['maxOccurs'],
|
|
|
'isActive' => 1
|
|
|
]);
|
|
|
+ if (!empty($listEnum)) {
|
|
|
+ DBG::nicePrint($listEnum, '$listEnum');
|
|
|
+ foreach ($listEnum as $value => $label) {
|
|
|
+ DB::getPDO()->insertOrUpdate("{$this->_rootTableName}_enum", [
|
|
|
+ 'namespace' => "{$item['namespace']}/{$fieldName}/@{$value}",
|
|
|
+ 'fieldNamespace' => $fieldName,
|
|
|
+ 'objectNamespace' => $item['namespace'],
|
|
|
+ 'value' => $value,
|
|
|
+ 'label' => $label,
|
|
|
+ 'isActive' => 1
|
|
|
+ ]);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
SchemaFactory::loadDefaultObject('SystemObject')->updateItem([
|
|
|
'namespace' => $item['namespace'],
|
|
|
@@ -235,6 +268,11 @@ class Schema_SystemObjectFieldStorageAcl extends Core_AclSimpleSchemaBase {
|
|
|
DBG::nicePrint($xsdInfo, '$xsdInfo');
|
|
|
|
|
|
foreach ($xsdInfo as $fieldName => $x) {
|
|
|
+ $listEnum = [];
|
|
|
+ if (!empty($x['restrictions']['enumeration'])) {
|
|
|
+ $listEnum = $x['restrictions']['enumeration'];
|
|
|
+ unset($x['restrictions']['enumeration']);
|
|
|
+ }
|
|
|
DB::getPDO()->insertOrUpdate($this->_rootTableName, [
|
|
|
'namespace' => "{$item['namespace']}/{$fieldName}",
|
|
|
'fieldNamespace' => $fieldName,
|
|
|
@@ -245,6 +283,19 @@ class Schema_SystemObjectFieldStorageAcl extends Core_AclSimpleSchemaBase {
|
|
|
'xsdType' => $x['type'],
|
|
|
'xsdRestrictions' => json_encode($x['restrictions']),
|
|
|
]);
|
|
|
+ if (!empty($listEnum)) {
|
|
|
+ DBG::nicePrint($listEnum, '$listEnum');
|
|
|
+ foreach ($listEnum as $value => $label) {
|
|
|
+ DB::getPDO()->insertOrUpdate("{$this->_rootTableName}_enum", [
|
|
|
+ 'namespace' => "{$item['namespace']}/{$fieldName}/@{$value}",
|
|
|
+ 'fieldNamespace' => $fieldName,
|
|
|
+ 'objectNamespace' => $item['namespace'],
|
|
|
+ 'value' => $value,
|
|
|
+ 'label' => $label,
|
|
|
+ 'isActive' => 1
|
|
|
+ ]);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
SchemaFactory::loadDefaultObject('SystemObject')->updateItem([
|
|
|
'namespace' => $item['namespace'],
|
|
|
@@ -453,6 +504,20 @@ class Schema_SystemObjectFieldStorageAcl extends Core_AclSimpleSchemaBase {
|
|
|
}
|
|
|
|
|
|
public function buildFeatureFromSqlRow($item) {
|
|
|
+ if ('p5:enum' == V::get('xsdType', '', $item)) {
|
|
|
+ $xsdRestrictions = @json_decode($item['xsdRestrictions'], $assoc = true);
|
|
|
+ $xsdRestrictions['enumeration'] = [];
|
|
|
+ foreach (DB::getPDO()->fetchAll("
|
|
|
+ select t.value, t.label
|
|
|
+ from `{$this->_rootTableName}_enum` t
|
|
|
+ where t.objectNamespace = '{$item['objectNamespace']}'
|
|
|
+ and t.fieldNamespace = '{$item['fieldNamespace']}'
|
|
|
+ and t.isActive = 1
|
|
|
+ ") as $enum) {
|
|
|
+ $xsdRestrictions['enumeration'][ $enum['value'] ] = $enum['label'];
|
|
|
+ }
|
|
|
+ $item['xsdRestrictions'] = json_encode($xsdRestrictions);
|
|
|
+ }
|
|
|
return $item;
|
|
|
}
|
|
|
|