|
|
@@ -108,7 +108,6 @@ class Api_WfsDataServer extends Api_WfsServerBase {
|
|
|
DBG::log("typeName({$args['xsd:type']})");
|
|
|
$acl = $this->getAclFromTypeName($args['xsd:type']);
|
|
|
DBG::log([ 'msg'=>"typeName({$args['xsd:type']}) - acl(".get_class($acl).")", '$acl'=>$acl ]);
|
|
|
- $fldList = $this->_getFieldListFromAcl($acl);
|
|
|
|
|
|
$baseNsUri = Api_WfsNs::getBaseWfsUri();
|
|
|
$rootWfsNs = 'p5';
|
|
|
@@ -117,16 +116,6 @@ class Api_WfsDataServer extends Api_WfsServerBase {
|
|
|
$wfsNsUri = "{$baseNsUri}/" . ('p5_' == substr($args['typePrefix'], 0, 3)) ? substr($args['typePrefix'], 3) : $args['typePrefix'];
|
|
|
$featureTypeUri = $this->getBaseUri() . "?SERVICE=WFS&VERSION=1.0.0&TYPENAME={$args['xsd:type']}&REQUEST=DescribeFeatureType";
|
|
|
|
|
|
- // get BBox from geom_field (only one geom fld is allowed)
|
|
|
- $geomFld = null;
|
|
|
- {
|
|
|
- foreach ($fldList as $fldName) {
|
|
|
- if ($acl->isGeomField($fldName)) {
|
|
|
- $geomFld = $fldName;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
DBG::log("ogcFilter(" . strlen($args['ogc:filter']) . "): {$args['ogc:filter']}");
|
|
|
$searchParams = array();
|
|
|
$searchParams['limit'] = $args['limit'];
|
|
|
@@ -168,7 +157,6 @@ class Api_WfsDataServer extends Api_WfsServerBase {
|
|
|
DBG::log("typeName({$args['xsd:type']})");
|
|
|
$acl = $this->getAclFromTypeName($args['xsd:type']);
|
|
|
DBG::log([ 'msg'=>"typeName({$args['xsd:type']}) - acl(".get_class($acl).")", '$acl'=>$acl ]);
|
|
|
- $fldList = $this->_getFieldListFromAcl($acl);
|
|
|
|
|
|
$baseNsUri = Api_WfsNs::getBaseWfsUri();
|
|
|
$rootWfsNs = 'p5';
|
|
|
@@ -177,16 +165,6 @@ class Api_WfsDataServer extends Api_WfsServerBase {
|
|
|
$wfsNsUri = "{$baseNsUri}/" . str_replace('__x3A__', '/', ('p5_' === substr($args['typePrefix'], 0, 3) ? substr($args['typePrefix'], 3) : $args['typePrefix']));
|
|
|
$featureTypeUri = $this->getBaseUri() . "?SERVICE=WFS&VERSION=1.0.0&TYPENAME={$args['xsd:type']}&REQUEST=DescribeFeatureType";
|
|
|
|
|
|
- // get BBox from geom_field (only one geom fld is allowed)
|
|
|
- $geomFld = null;
|
|
|
- {
|
|
|
- foreach ($fldList as $fldName) {
|
|
|
- if ($acl->isGeomField($fldName)) {
|
|
|
- $geomFld = $fldName;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
DBG::log("ogcFilter(" . strlen($args['ogc:filter']) . "): {$args['ogc:filter']}");
|
|
|
$searchParams = array();
|
|
|
$searchParams['limit'] = $args['limit'];
|
|
|
@@ -275,6 +253,7 @@ class Api_WfsDataServer extends Api_WfsServerBase {
|
|
|
}
|
|
|
}
|
|
|
DBG::log($contextFieldList, 'array', "\$contextFieldList");
|
|
|
+ DBG::log(array_keys($schemaCache), 'array', "\$schemaCache keys");
|
|
|
|
|
|
$searchParams['cols'] = $contextFieldList;
|
|
|
} catch (Exception $e) {
|
|
|
@@ -282,11 +261,10 @@ class Api_WfsDataServer extends Api_WfsServerBase {
|
|
|
throw $e;
|
|
|
}
|
|
|
|
|
|
- DBG::log([ 'msg'=>'getItems - $searchParams', '$searchParams'=>$searchParams ]);
|
|
|
- if($DBG){echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">get_total (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($jsonData->total);echo'</pre>';}
|
|
|
+ DBG::log($searchParams, 'string', 'getItems - $searchParams');
|
|
|
$queryFeatures = $acl->buildQuery($searchParams);
|
|
|
$items = $queryFeatures->getItems();
|
|
|
- DBG::log([ 'msg'=>'getItems - $items', '$items'=>$items ]);
|
|
|
+ DBG::log($items, 'array', 'getItems - $items');
|
|
|
|
|
|
|
|
|
header('Content-type: application/xml; charset=utf-8');
|
|
|
@@ -327,110 +305,15 @@ class Api_WfsDataServer extends Api_WfsServerBase {
|
|
|
if (!empty($geomFld)) DBG::log(['msg'=>"item[{$itemKey}] ({$geomFld})isEmpty(".empty($item[$geomFld])."):", '$item['.$geomFld.']'=>$item[$geomFld]]);
|
|
|
DBG::log([ 'msg'=>">>> loop({$itemKey})", '$item'=>$item ]);
|
|
|
$xmlWriter->startElement('gml:featureMember');
|
|
|
- $xmlWriter->startElement("{$wfsNs}:{$type}");
|
|
|
- $xmlWriter->writeAttribute('fid', "{$type}.{$itemKey}");
|
|
|
- if (!$simple) $xmlWriter->writeAttribute("{$rootWfsNs}:web_link", Request::getPathUri() . "index.php?_route=ViewTableAjax&namespace=" . $acl->getNamespace() . "#EDIT/{$itemKey}");
|
|
|
- foreach ($fldList as $idZasob => $fldName) {
|
|
|
- if(V::get('DBG_LOOP','',$_GET))DBG::log([ 'msg'=>">>> loop({$itemKey}) item({$item['ID']}) fld({$fldName})", '$item'=>$item[$fldName] ]);
|
|
|
- $fldType = $acl->getXsdFieldType($fldName);
|
|
|
- if (!$acl->canReadObjectField($fldName, (object)$item)) continue;
|
|
|
-
|
|
|
- if ($geomFld != null && $fldName == $geomFld) {
|
|
|
- $xmlWriter->startElement("{$wfsNs}:{$fldName}");
|
|
|
- if (!$simple && !$acl->canReadObjectField($fldName, (object)$item)) {
|
|
|
- $xmlWriter->writeAttribute("{$rootWfsNs}:allow_read", "false");
|
|
|
- }
|
|
|
- if (!$simple && $acl->canWriteObjectField($fldName, (object)$item)) {
|
|
|
- $xmlWriter->writeAttribute("{$rootWfsNs}:allow_write", "true");
|
|
|
- }
|
|
|
- $this->_typeConverter->createGmlFromWkt_xmlWriter($item[$fldName], $xmlWriter);
|
|
|
- $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'])) {
|
|
|
- // $xlink = $item[$fldName][0]['xlink'];
|
|
|
- // $xlinkParts = explode(':', $xlink);
|
|
|
- // if (2 != count($xlinkParts)) throw new Exception("Error Processing Request - wrong xlink format for ".$acl->getName().".{$itemKey}/{$fldName}");
|
|
|
- // $xlinkParts[0] = Api_WfsNs::getNsUri($xlinkParts[0]);
|
|
|
- // $xlink = implode('#', $xlinkParts);
|
|
|
- // $xmlWriter->startElement("{$wfsNs}:{$fldName}");
|
|
|
- // if (!$simple && !$acl->canReadObjectField($fldName, (object)$item)) {
|
|
|
- // $xmlWriter->writeAttribute("{$rootWfsNs}:allow_read", "false");
|
|
|
- // }
|
|
|
- // if (!$simple && $acl->canWriteObjectField($fldName, (object)$item)) {
|
|
|
- // $xmlWriter->writeAttribute("{$rootWfsNs}:allow_write", "true");
|
|
|
- // }
|
|
|
- // $xmlWriter->writeAttribute('xlink:href', $xlink);
|
|
|
- // $xmlWriter->endElement();// {$wfsNs}:{$fldName}
|
|
|
- } else {
|
|
|
- // $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) {
|
|
|
- DBG::log($refItem, 'array', "\$refItem fld({$fldName})");
|
|
|
- if (1 == count($refItem) && !empty($refItem['xlink'])) {
|
|
|
- $xmlWriter->startElement($schemaCache[$fieldNs]['typeName']);
|
|
|
- $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) {
|
|
|
- if (array_key_exists($field['fieldNamespace'], $refItem)) {
|
|
|
- $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();
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- } else if ('xsd:base64Binary' === $acl->getXsdFieldType($fldName)) {
|
|
|
- if (empty($item[$fldName]) && '0' !== $item[$fldName]) continue;
|
|
|
- $xmlWriter->startElement("{$wfsNs}:{$fldName}");
|
|
|
- if (!$simple && !$acl->canReadObjectField($fldName, (object)$item)) {
|
|
|
- $xmlWriter->writeAttribute("{$rootWfsNs}:allow_read", "false");
|
|
|
- }
|
|
|
- if (!$simple && $acl->canWriteObjectField($fldName, (object)$item)) {
|
|
|
- $xmlWriter->writeAttribute("{$rootWfsNs}:allow_write", "true");
|
|
|
- }
|
|
|
- $xmlWriter->text(base64_encode($item[$fldName]));
|
|
|
- $xmlWriter->endElement();// {$wfsNs}:{$fldName}
|
|
|
- } else {
|
|
|
- $value = str_replace('&', '&', $item[$fldName]);
|
|
|
- if (empty($value) && '0' !== $value) {
|
|
|
- continue;
|
|
|
- } else {
|
|
|
- $xmlWriter->startElement("{$wfsNs}:{$fldName}");
|
|
|
- if (!$simple && !$acl->canReadObjectField($fldName, (object)$item)) {
|
|
|
- $xmlWriter->writeAttribute("{$rootWfsNs}:allow_read", "false");
|
|
|
- }
|
|
|
- if (!$simple && $acl->canWriteObjectField($fldName, (object)$item)) {
|
|
|
- $xmlWriter->writeAttribute("{$rootWfsNs}:allow_write", "true");
|
|
|
- }
|
|
|
- $xmlWriter->text($value);
|
|
|
- $xmlWriter->endElement();// {$wfsNs}:{$fldName}
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- $xmlWriter->endElement();// {$wfsNs}:{$type}
|
|
|
+ Lib::loadClass('Api_Wfs_GetFeature');
|
|
|
+ Api_Wfs_GetFeature::printXmlFeatureRecurse($xmlWriter, $acl, $item, $tagName = "{$wfsNs}:{$type}", array_merge(
|
|
|
+ [
|
|
|
+ 'fid' => "{$type}.{$itemKey}",
|
|
|
+ ],
|
|
|
+ (!$simple)
|
|
|
+ ? [ "{$rootWfsNs}:web_link" => Request::getPathUri() . "index.php?_route=ViewTableAjax&namespace=" . $acl->getNamespace() . "#EDIT/{$itemKey}" ]
|
|
|
+ : []
|
|
|
+ ), $showAdvancedAttrs = !$simple, $schemaCache);
|
|
|
$xmlWriter->endElement();// gml:featureMember
|
|
|
}
|
|
|
$xmlWriter->endElement();// wfs:FeatureCollection
|