|
|
@@ -4,6 +4,7 @@ Lib::loadClass('Api_WfsServerBase');
|
|
|
Lib::loadClass('Api_WfsException');
|
|
|
Lib::loadClass('Api_WfsGeomTypeConverter');
|
|
|
Lib::loadClass('Api_WfsNs');
|
|
|
+Lib::loadClass('DBG');
|
|
|
|
|
|
class Api_WfsDataServer extends Api_WfsServerBase {
|
|
|
|
|
|
@@ -99,9 +100,9 @@ class Api_WfsDataServer extends Api_WfsServerBase {
|
|
|
}
|
|
|
|
|
|
public function getTotalFeatures($args, $simple = true) {
|
|
|
- $DBG = (V::get('DBG_GEO', '', $_GET) > 0);// TODO: Profiler
|
|
|
- if($DBG){echo "typeName({$args['xsd:type']})\n";}
|
|
|
+ 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();
|
|
|
@@ -121,7 +122,7 @@ class Api_WfsDataServer extends Api_WfsServerBase {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- if($DBG){echo "ogcFilter(" . strlen($args['ogc:filter']) . "): {$args['ogc:filter']}\n";}
|
|
|
+ DBG::log("ogcFilter(" . strlen($args['ogc:filter']) . "): {$args['ogc:filter']}");
|
|
|
$searchParams = array();
|
|
|
$searchParams['limit'] = $args['limit'];
|
|
|
$searchParams['limitstart'] = $args['offset'];
|
|
|
@@ -135,9 +136,9 @@ class Api_WfsDataServer extends Api_WfsServerBase {
|
|
|
if (!empty($args['filterFields'])) $searchParams['cols'] = $args['filterFields'];// propertyName
|
|
|
if (!empty($args['primaryKey'])) $searchParams['primaryKey'] = $args['primaryKey'];// featureID
|
|
|
if (!empty($args['bbox'])) $searchParams['f_the_geom'] = "BBOX:{$args['bbox']}";
|
|
|
- if($DBG){echo 'getItems() searchParams:';print_r($searchParams);echo "\n";}
|
|
|
+ DBG::log([ 'msg'=>"getTotal() - searchParams", '$searchParams'=>$searchParams ]);
|
|
|
$totalItems = $acl->getTotal($searchParams);
|
|
|
- if($DBG){echo 'totalItems:';print_r($totalItems);echo "\n";}
|
|
|
+ DBG::log([ 'msg'=>"getTotal() - total", '$totalItems'=>$totalItems ]);
|
|
|
|
|
|
$xmlWriter = new XMLWriter();
|
|
|
if (!$xmlWriter) throw new HttpException("Error no XMLWriter", 404);
|
|
|
@@ -159,11 +160,10 @@ class Api_WfsDataServer extends Api_WfsServerBase {
|
|
|
}
|
|
|
|
|
|
public function getFeatures($args, $simple = true) {
|
|
|
- $DBG = (V::get('DBG_GEO', '', $_GET) > 0);// TODO: Profiler
|
|
|
- $DBG_DS = V::get('DBG_DS', 0, $_GET, 'int');
|
|
|
$type = $args['typeName'];
|
|
|
- if($DBG){echo "typeName({$args['xsd:type']})\n";}
|
|
|
+ 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();
|
|
|
@@ -183,7 +183,7 @@ class Api_WfsDataServer extends Api_WfsServerBase {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- if($DBG){echo "ogcFilter(" . strlen($args['ogc:filter']) . "): {$args['ogc:filter']}\n";}
|
|
|
+ DBG::log("ogcFilter(" . strlen($args['ogc:filter']) . "): {$args['ogc:filter']}");
|
|
|
$searchParams = array();
|
|
|
$searchParams['limit'] = $args['limit'];
|
|
|
$searchParams['limitstart'] = $args['offset'];
|
|
|
@@ -197,8 +197,9 @@ class Api_WfsDataServer extends Api_WfsServerBase {
|
|
|
if (!empty($args['filterFields'])) $searchParams['cols'] = $args['filterFields'];// PropertyName
|
|
|
if (!empty($args['primaryKey'])) $searchParams['primaryKey'] = $args['primaryKey'];// featureID
|
|
|
if (!empty($args['bbox'])) $searchParams['f_the_geom'] = "BBOX:{$args['bbox']}";
|
|
|
- if($DBG){echo 'getItems:';print_r($searchParams);echo "\n";}
|
|
|
+ DBG::log([ 'msg'=>'getItems - $searchParams', '$searchParams'=>$searchParams ]);
|
|
|
$items = $acl->getItems($searchParams);
|
|
|
+ DBG::log([ 'msg'=>'getItems - $items', '$items'=>$items ]);
|
|
|
|
|
|
header('Content-type: application/xml; charset=utf-8');
|
|
|
$xmlWriter = new XMLWriter();
|
|
|
@@ -219,20 +220,20 @@ class Api_WfsDataServer extends Api_WfsServerBase {
|
|
|
if (!$simple) $xmlWriter->writeAttribute("xmlns:{$rootWfsNs}", $rootWfsNsUri);
|
|
|
$xmlWriter->writeAttribute('xsi:schemaLocation', "{$wfsNsUri} {$featureTypeUri}");
|
|
|
|
|
|
- if($DBG){echo '(geomFld: '.$geomFld.'):';print_r($acl->getFieldType($geomFld));echo "\n";}
|
|
|
+ DBG::log([ 'msg'=>'$geomFld - getFieldType', 'getFieldType'=>$acl->getFieldType($geomFld) ]);
|
|
|
$tblName = $acl->getName();
|
|
|
foreach ($items as $itemKey => $item) {
|
|
|
if (!is_array($item)) $item = (array)$item;
|
|
|
|
|
|
- if($DBG && !empty($geomFld)){echo 'item['.$itemKey.'] ('.$geomFld.')isEmpty('.empty($item[$geomFld]).'):';print_r($item[$geomFld]);echo "\n";}
|
|
|
- if($DBG_DS){echo ">>> loop({$itemKey}) item: ";print_r($item);echo "\n";}
|
|
|
+ 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($DBG_DS){echo ">>> loop({$itemKey}) item({$item['ID']}) fld({$fldName}): ";var_dump($item[$fldName]);echo"\n";}
|
|
|
+ DBG::log([ 'msg'=>">>> loop({$itemKey}) item({$item['ID']}) fld({$fldName})", '$item'=>$item[$fldName] ]);
|
|
|
$fldType = $acl->getXsdFieldType($fldName);
|
|
|
if (!$acl->canReadObjectField($fldName, (object)$item)) continue;
|
|
|
|
|
|
@@ -247,7 +248,7 @@ class Api_WfsDataServer extends Api_WfsServerBase {
|
|
|
$this->_typeConverter->createGmlFromWkt_xmlWriter($item[$fldName], $xmlWriter);
|
|
|
$xmlWriter->endElement();// {$wfsNs}:{$fldName}
|
|
|
} else if (is_array($item[$fldName])) {// TODO: by struct - REF field
|
|
|
- if($DBG_DS){echo">>> TODO({$fldName}) REF item[{$itemKey}][{$fldName}]: ";print_r($item[$fldName]);echo "\n";}
|
|
|
+ DBG::log([ 'msg'=>">>> loop({$itemKey}) REF item[{$itemKey}][{$fldName}]", '$item'=>$item[$fldName] ]);
|
|
|
if (1 == count($item[$fldName])) {
|
|
|
$xlink = $item[$fldName][0]['xlink'];
|
|
|
$xlinkParts = explode(':', $xlink);
|