|
|
@@ -217,6 +217,7 @@ class Api_WfsDataServer extends Api_WfsServerBase {
|
|
|
return $field['isLocal'];
|
|
|
}));
|
|
|
};
|
|
|
+ DBG::log($args, 'array', "\$args");
|
|
|
DBG::log($acl->getFields(), 'array', "\$contextFieldList ACL fields");
|
|
|
if (empty($args['filterFields'])) { // get all local fields
|
|
|
// $contextFieldList = $acl__getLocalFieldNames($acl->getFields());
|
|
|
@@ -249,6 +250,27 @@ class Api_WfsDataServer extends Api_WfsServerBase {
|
|
|
} else {
|
|
|
$fieldName = trim($fieldXPath, '*/');
|
|
|
DBG::log(['$fieldXPath'=>$fieldXPath, '$fieldName'=>$fieldName], 'array', "\$contextFieldList TODO");
|
|
|
+ if (false !== strpos($fieldName, '/')) {
|
|
|
+ $xpathParts = explode('/', $fieldName);
|
|
|
+ DBG::log($xpathParts, 'array', "\$xpathParts recurse TODO");
|
|
|
+ $localFieldName = array_shift($xpathParts);
|
|
|
+ DBG::log($localFieldName, 'array', "\$xpathParts recurse TODO \$localFieldName");
|
|
|
+ if ('*' === end($xpathParts)) array_pop($xpathParts);
|
|
|
+ if (!empty($xpathParts)) {
|
|
|
+ foreach ($xpathParts as $part) {
|
|
|
+ if (false !== strpos($part, ':')) {
|
|
|
+ $fieldNs = str_replace(['__x3A__', ':'], '/', $part);
|
|
|
+ if (!array_key_exists($fieldNs, $schemaCache)) {
|
|
|
+ $schemaCache[$fieldNs] = SchemaFactory::loadDefaultObject('SystemObject')->getItem($fieldNs, [ 'propertyName' => '*,field' ]);
|
|
|
+ DBG::log($schemaCache[$fieldNs], 'array', "\$schemaCache[{$fieldNs}] recurse TODO");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ $contextFieldList[] = $localFieldName . "/" . implode("/", $xpathParts) . "/*";
|
|
|
+ }
|
|
|
+ // 'default_db__x3A__CRM_PROCES:PROCES/ID',
|
|
|
+ // 'default_db__x3A__CRM_PROCES:PROCES/default_db__x3A__CRM_WSKAZNIK:CRM_WSKAZNIK/*',
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -325,6 +347,7 @@ class Api_WfsDataServer extends Api_WfsServerBase {
|
|
|
$xmlWriter->endElement();// {$wfsNs}:{$fldName}
|
|
|
} else if (is_array($item[$fldName])) {// TODO: by struct - REF field
|
|
|
DBG::log([ 'msg'=>">>> loop({$itemKey}) REF item[{$itemKey}][{$fldName}]", '$item'=>$item[$fldName] ]);
|
|
|
+ $xmlWriter->writeComment("DBG: array field... '{$fldName}'"); // TODO: DBG
|
|
|
if (empty($item[$fldName])) {
|
|
|
$xmlWriter->h($fldName);
|
|
|
// } else if (1 == count($item[$fldName]) && !empty($item[$fldName][0]['xlink'])) {
|
|
|
@@ -346,6 +369,7 @@ class Api_WfsDataServer extends Api_WfsServerBase {
|
|
|
// $xmlWriter->writeComment("TODO: ".$acl->getName().".{$itemKey}/{$fldName} ...");
|
|
|
$fieldNs = str_replace(['__x3A__', ':'], '/', $fldName); // substr($xsdType, 4));
|
|
|
if (!array_key_exists($fieldNs, $schemaCache)) {
|
|
|
+ DBG::log($schemaCache, 'array', "Error Processing Request - field is not ref ".$acl->getName().".{$itemKey}/{$fldName}");
|
|
|
$xmlWriter->writeComment("Error Processing Request - field is not ref ".$acl->getName().".{$itemKey}/{$fldName}");
|
|
|
} else {
|
|
|
foreach ($item[$fldName] as $refItem) {
|
|
|
@@ -355,13 +379,22 @@ class Api_WfsDataServer extends Api_WfsServerBase {
|
|
|
$xmlWriter->writeAttribute("xlink:href", $refItem['xlink']);
|
|
|
$xmlWriter->endElement();
|
|
|
} else {
|
|
|
+ $xmlWriter->writeComment("DBG: array field ref ... '{$fldName}'"); // TODO: DBG
|
|
|
$xmlWriter->startElement($schemaCache[$fieldNs]['typeName']);
|
|
|
foreach ($schemaCache[$fieldNs]['field'] as $field) {
|
|
|
- // $xmlWriter->writeComment("REF field ({$field['fieldNamespace']}) value({$refItem[$field['fieldNamespace']]})");
|
|
|
if (array_key_exists($field['fieldNamespace'], $refItem)) {
|
|
|
- $xmlWriter->startElement("{$schemaCache[$fieldNs]['nsPrefix']}:{$field['fieldNamespace']}");
|
|
|
- $xmlWriter->text($refItem[$field['fieldNamespace']]);
|
|
|
- $xmlWriter->endElement();
|
|
|
+ $xmlWriter->writeComment("REF field ({$field['fieldNamespace']}) value({$refItem[$field['fieldNamespace']]}) TODO: get xsdType - TODO: recurse");
|
|
|
+ DBG::log($refItem[$field['fieldNamespace']], 'array', "REF field ({$field['fieldNamespace']}) TODO: get xsdType - TODO: recurse");
|
|
|
+ if (false !== strpos($field['fieldNamespace'], ':')) { // is ref - TODO: better check by xsdType
|
|
|
+ $xmlWriter->startElement($field['fieldNamespace']);
|
|
|
+ $xmlWriter->writeComment("TODO: recurse ...");
|
|
|
+ // $xmlWriter->text($refItem[$field['fieldNamespace']]);
|
|
|
+ $xmlWriter->endElement();
|
|
|
+ } else {
|
|
|
+ $xmlWriter->startElement("{$schemaCache[$fieldNs]['nsPrefix']}:{$field['fieldNamespace']}");
|
|
|
+ $xmlWriter->text($refItem[$field['fieldNamespace']]);
|
|
|
+ $xmlWriter->endElement();
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
$xmlWriter->endElement();
|