|
|
@@ -234,9 +234,26 @@ class Api_WfsDataServer extends Api_WfsServerBase {
|
|
|
foreach ($fldList as $idZasob => $fldName) {
|
|
|
if($DBG_DS){echo ">>> loop({$itemKey}) item({$item['ID']}) fld({$fldName}): ";var_dump($item[$fldName]);echo"\n";}
|
|
|
$fldType = $acl->getXsdFieldType($fldName);
|
|
|
- $canReadRecord = $acl->canReadObjectField($fldName, (object)$item);
|
|
|
- if ($canReadRecord) {
|
|
|
- if ($geomFld != null && $fldName == $geomFld) {
|
|
|
+ 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
|
|
|
+ if($DBG_DS){echo">>> TODO({$fldName}) REF item[{$itemKey}][{$fldName}]: ";print_r($item[$fldName]);echo "\n";}
|
|
|
+ if (1 == count($item[$fldName])) {
|
|
|
+ $xlink = $item[$fldName][0]['xlink'];
|
|
|
+ $xlinkParts = explode(':', $xlink);
|
|
|
+ if (2 != count($xlinkParts)) throw new Exception("Error Processing Reques - 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");
|
|
|
@@ -244,43 +261,25 @@ class Api_WfsDataServer extends Api_WfsServerBase {
|
|
|
if (!$simple && !$acl->canWriteObjectField($fldName, (object)$item)) {
|
|
|
$xmlWriter->writeAttribute("{$rootWfsNs}:allow_write", "true");
|
|
|
}
|
|
|
- $this->_typeConverter->createGmlFromWkt_xmlWriter($item[$fldName], $xmlWriter);
|
|
|
+ $xmlWriter->writeAttribute('xlink:href', $xlink);
|
|
|
$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";}
|
|
|
- if (1 == count($item[$fldName])) {
|
|
|
- $xlink = $item[$fldName][0]['xlink'];
|
|
|
- $xlinkParts = explode(':', $xlink);
|
|
|
- if (2 != count($xlinkParts)) throw new Exception("Error Processing Reques - 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 {
|
|
|
- throw new Exception("Error Processing Request - too many refs for ".$acl->getName().".{$itemKey}/{$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}
|
|
|
- }
|
|
|
+ throw new Exception("Error Processing Request - too many refs for ".$acl->getName().".{$itemKey}/{$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}
|
|
|
}
|
|
|
}
|
|
|
}
|