Преглед изворни кода

added next and previous attributes in wfs:FeatureCollection

Piotr Labudda пре 8 година
родитељ
комит
18117aecd8
2 измењених фајлова са 26 додато и 0 уклоњено
  1. 12 0
      SE/se-lib/Api/WfsDataServer.php
  2. 14 0
      SE/se-lib/Request.php

+ 12 - 0
SE/se-lib/Api/WfsDataServer.php

@@ -241,6 +241,18 @@ class Api_WfsDataServer extends Api_WfsServerBase {
 		$xmlWriter->writeAttribute('numberMatched', 'unknown'); // TODO: return total items if simple query (without prefix, small total number, maxFeatures set, etc.)
 		// NOTE: for client: if numberMatched == 'unknown' then request with resultType = 'hits'
 		$xmlWriter->writeAttribute('numberReturned', count($items));
+		if ($searchParams['limit'] > 0) {
+			$xmlWriter->writeAttribute('next', Request::merge(Request::getUrl(), [ 'startIndex' => $searchParams['limitstart'] + $searchParams['limit'] ]));
+		}
+		if ($searchParams['limit'] > 0 && $searchParams['limitstart'] >= $searchParams['limit']) {
+			$xmlWriter->writeAttribute('previous', Request::merge(Request::getUrl(), [ 'startIndex' => $searchParams['limitstart'] - $searchParams['limit'] ]));
+		}
+		if ($searchParams['limit'] > 0 && $searchParams['limitstart'] > 0 && $searchParams['limitstart'] < $searchParams['limit']) {
+			$xmlWriter->writeAttribute('previous', Request::merge(Request::getUrl(), [
+				'startIndex' => 0,
+				'maxFeatures' => $searchParams['limitstart']
+			]));
+		}
 
 		$tblName = $acl->getName();
 		$primaryKeyField = $acl->getPrimaryKeyField();

+ 14 - 0
SE/se-lib/Request.php

@@ -136,4 +136,18 @@ class Request {
 		return V::get('HTTP_REFERER', '', $_SERVER);
 	}
 
+	public static function getUrl() {
+		return self::getScriptUri() .
+			( !empty($_SERVER['QUERY_STRING']) ? "?{$_SERVER['QUERY_STRING']}" : '' )
+		;
+	}
+
+	public static function merge($url, array $args) {
+		$oldArgs = [];
+		$query = (false !== strpos($url, '?')) ? substr($url, strpos($url, '?') + 1) : '';
+		// parse_str($_SERVER['QUERY_STRING'], $oldArgs);
+		parse_str($query, $oldArgs);
+		return self::getScriptUri() . '?' . http_build_query(array_merge($oldArgs, $args));
+	}
+
 }