Przeglądaj źródła

fixed missing timestamp field type

Piotr Labudda 9 lat temu
rodzic
commit
ae1c3e7e8b
2 zmienionych plików z 712 dodań i 0 usunięć
  1. 30 0
      SE/se-lib/TableAcl.php
  2. 682 0
      wfs-api-doc--fix.md

+ 30 - 0
SE/se-lib/TableAcl.php

@@ -523,6 +523,21 @@ class TableAcl extends Core_AclBase {
 				$html->attrs['type'] = 'time';
 			}
 		}
+		else if ($colType['type'] == 'timestamp') {
+			$testDatePicker = true;
+			if ($testDatePicker) {
+				$html->attrs['type'] = 'text';
+				$html->_params[] = 'date';
+				$html->attrs['class'][] = 'se_type-datetime';// datetimepicker';
+				$html->attrs['data-format'] = 'yyyy-MM-dd hh:mm';
+				$html->attrs['maxlength'] = 19;
+				if (substr($html->attrs['value'], 0, 10) == '0000-00-00') {
+					$html->attrs['value'] = '';
+				}
+			} else {
+				$html->attrs['type'] = 'date';
+			}
+		}
 		else if (substr($colType['type'], 0, 4) == 'enum') {
 			unset($html->attrs['type']);
 			unset($html->attrs['value']);
@@ -770,6 +785,21 @@ class TableAcl extends Core_AclBase {
 				$html->attrs['type'] = 'time';
 			}
 		}
+		else if ($colType['type'] == 'timestamp') {
+			$testDatePicker = true;
+			if ($testDatePicker) {
+				$html->attrs['type'] = 'text';
+				$html->_params[] = 'date';
+				$html->attrs['class'][] = 'se_type-datetime';// datetimepicker';
+				$html->attrs['data-format'] = 'yyyy-MM-dd hh:mm';
+				$html->attrs['maxlength'] = 19;
+				if (substr($html->attrs['value'], 0, 10) == '0000-00-00') {
+					$html->attrs['value'] = '';
+				}
+			} else {
+				$html->attrs['type'] = 'date';
+			}
+		}
 		else if (substr($colType['type'], 0, 4) == 'enum') {
 			unset($html->attrs['type']);
 			unset($html->attrs['value']);

+ 682 - 0
wfs-api-doc--fix.md

@@ -0,0 +1,682 @@
+# Spis treści:
+
+* [Adresy i wersje API] (#adresy-i-wersje-api)
+* [Struktura danych] (#struktura-danych)
+    * [Lista dostępnych tabel i funkcji - GetCapabilities] (#getcapabilities)
+    * [Struktura tabeli - DescribeFeatureType] (#describefeaturetype)
+    * [Struktura tabeli z dodatkowymi atrybutami - DescribeFeatureTypeAdvanced] (#describefeaturetypeadvanced)
+    * [Struktury wielu tabel] (#multiple-describefeaturetype)
+* [Pobieranie danych] (#pobieranie-danych)
+    *  [GetFeature] (#getfeature)
+    *  [Filtry] (#getfeature-filtry)
+        * [Filtr ogc:PropertyIsEqualTo] (#getfeature-filtr-ogcpropertyisequalto)
+        * [Filtr ogc:PropertyIsLike] (#getfeature-filtr-ogcpropertyislike)
+        * [Filtr ogc:PropertyIsNull] (#getfeature-filtr-ogcpropertyisnull)
+        * [Filtr ogc:Function] (#getfeature-filtr-ogcfunction)
+        * [Filtr ogc: IsLessThan, IsGreaterThen] (#getfeature-filtr-ogc-islessthan-isgreaterthen)
+        * [Error - Not implemented tag] (#error-not-implemented-tag)
+        * [Request-URI Too Long - ogc:Filter z POST] (#request-uri-too-long-ogcfilter-z-post)
+    *  [GetFeatureAdvanced] (#getfeatureadvanced)
+    *  [GetFeature - Hits] (#getfeature-hits)
+* [Modyfikacja danych] (#modyfikacja-danych)
+    * [Edycja danych] (#edycja-danych)
+    * [Wprowadzanie danych] (#wprowadzanie-danych)
+    * [Modyfikacja wielu danych] (#modyfikacja-wielu-danych)
+    * [Usuwanie danych] (#usuwanie-danych)
+    * [Wynik operacji] (#wynik-operacji)
+* [Pliki] (#pliki)
+    * [Pliki - download] (#pliki-download)
+    * [Pliki - upload] (#pliki-upload)
+    * [Pliki - wgranie pliku wraz z przypisaniem do obiektu] (#pliki-wgranie-pliku-wraz-z-przypisaniem-do-obiektu)
+
+# Adresy i wersje API
+
+- Wersja Data (ze wszystkimi danymi): `/wfs-data.php/default_db/`
+- Wersja QGIS (tyko rekordy z geom): `/wfs-qgis.php/default_db/`
+- Poprzedni link (wersja QGIS): `/wfs.php/xml/wfs/default_db/`
+- Uprawnienia wg procesu:
+    - wersja Data - proces 5040: `/wfs-data.php/filtr_proces_5040/default_db/`
+    - wersja QGIS - proces 5040: `/wfs-qgis.php/filtr_proces_5040/default_db/`
+
+API BIALL-NET:
+- Wersja ze wszystkimi danymi: https://biuro.biall-net.pl/SE/version-git/wfs-data.php/default_db/
+- Wersja QGIS (tyko rekordy z geom): https://biuro.biall-net.pl/SE/version-git/wfs-qgis.php/default_db/
+- Poprzedni link (wersja QGIS): https://biuro.biall-net.pl/SE/version-git/wfs.php/xml/wfs/default_db/
+
+
+### Examples
+- [Postman Collection](https://biuro.biall-net.pl/gitlab/plabudda/procesy5-wfs-api-doc/raw/master/Postman.wfs-server-data.json)
+
+
+# Struktura danych
+
+## GetCapabilities:
+```
+?SERVICE=WFS&REQUEST=GetCapabilities&VERSION=1.0.0
+```
+
+## DescribeFeatureType
+Struktura danych dla tabeli TEST_PERMS (namespace: "p5_default_db:TEST_PERMS")
+```
+?SERVICE=WFS&VERSION=1.0.0&TYPENAME=p5_default_db:TEST_PERMS&REQUEST=DescribeFeatureType
+```
+
+## DescribeFeatureTypeAdvanced
+Polskie nazwy kolumn oraz informacje o uprawnieniach:
+
+https://biuro.biall-net.pl/SE/version-git/wfs-data.php/default_db/?SERVICE=WFS&VERSION=1.0.0&TYPENAME=p5_default_db:TEST_PERMS&REQUEST=DescribeFeatureTypeAdvanced
+
+- każde pole dostaje id zasobu w @p5:id_zasobu
+- ładniejsza nazwa w @p5:label (z pola `DESC_PL` jeśli jest określona)
+- opis w @p5:description (z pola `OPIS` jeśli jest określone)
+- enumy rozdzielone do osobnych nazwanych typów
+- @atrybut p5:allow_create="true" - możliwość tworzenia nowego rekordu z tą kolumną
+- @atrybut p5:allow_write="true" - możliwość edycji tej kolumny
+- @atrybut p5:allow_read="false" - brak uprawnień do odczytania zawartości tej kolumny
+
+```xml
+  <xsd:element name="ID" minOccurs="1" maxOccurs="1" nillable="true" type="xsd:integer" p5:id_zasob="13052" p5:label="Nr"/>
+  <xsd:element name="A_STATUS" minOccurs="0" maxOccurs="1" nillable="true" type="p5_default_db:A_STATUSType" p5:id_zasob="21835" p5:label="Status" p5:allow_write="true" p5:allow_create="true"/>
+  <xsd:element name="ADM_PASSWD" minOccurs="0" maxOccurs="1" nillable="true" type="xsd:string" p5:id_zasob="22266" p5:allow_write="true" p5:allow_create="true" p5:allow_read="false"/>
+```
+
+## Multiple DescribeFeatureType
+Struktury wielu tabel
+
+POST na adres `?REQUEST=DescribeFeatureType&version=1.0.0&service=WFS`
+<!--
+lub `?REQUEST=DescribeFeatureTypeAdvanced&version=1.0.0&service=WFS`
+-->
+
+```xml
+<DescribeFeatureType xmlns="http://www.opengis.net/wfs/2.0"
+	xmlns:p5_default_db="https://biuro.biall-net.pl/wfs/default_db"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	service="WFS"
+	version="2.0.2"
+	xsi:schemaLocation="http://www.opengis.net/wfs/2.0 http://schemas.opengis.net/wfs/2.0/wfs.xsd">
+	<TypeName>p5_default_db:Rozdzielcza_rurociag_wsg84</TypeName>
+	<TypeName>p5_default_db:TEST_PERMS</TypeName>
+</DescribeFeatureType>
+```
+
+
+# Pobieranie danych
+
+## GetFeature
+
+Parametry url:
+
+- **Limit**: `count` (WFS 2.0.0) lub `maxFeatures` (for earlier WFS versions)
+- **Offset**: `startIndex`
+- **Sort**: `sortBy` np. sortBy=ID+D,columnName+A
+- **Kolumny**: `propertyName` np. propertyName=ID,test_date,A_STATUS
+- **Filtry** `ogc:Filter`: parametr `Filter`, więcej na [API-WFS-ogc-Filter](https://biuro.biall-net.pl/gitlab/plabudda/procesy5-wfs-api-doc/wikis/API-WFS-ogc-Filter)
+- **featureID**: `featureID`: np. featureID=TEST_PERMS.12
+
+
+## Przykład - tylko 5 rekordów (MAXFEATURES=5):
+```
+?SERVICE=WFS&VERSION=1.0.0&REQUEST=GetFeature&TYPENAME=p5_default_db:TEST_PERMS&SRSNAME=EPSG:3003&MAXFEATURES=5
+```
+- parametr MAXFEATURES - limit
+- ID rekordu w atrybucie fid="TEST_PERMS.26"
+
+```xml
+    <wfs:FeatureCollection xmlns:wfs="http://www.opengis.net/wfs" ... >
+      <gml:featureMember>
+        <p5_default_db_TEST_PERMS:TEST_PERMS fid="TEST_PERMS.26">
+          <p5_default_db_TEST_PERMS:ID>26</p5_default_db_TEST_PERMS:ID>
+          <p5_default_db_TEST_PERMS:OPIS>testowy opis</p5_default_db_TEST_PERMS:OPIS>
+```
+
+## Pobieranie danych (tylko zawierające dane geometryczne na potrzeby QGIS)
+
+Przykład - tylko 5 rekordów (MAXFEATURES=5):
+```
+?SERVICE=WFS&VERSION=1.0.0&REQUEST=GetFeature&TYPENAME=p5_default_db:TEST_PERMS&SRSNAME=EPSG:3003&MAXFEATURES=5
+```
+- parametr MAXFEATURES - limit
+- ID rekordu w atrybucie fid="TEST_PERMS.26"
+
+```xml
+    <wfs:FeatureCollection xmlns:wfs="http://www.opengis.net/wfs" ... >
+      <gml:featureMember>
+        <p5_default_db_TEST_PERMS:TEST_PERMS fid="TEST_PERMS.26">
+          <p5_default_db_TEST_PERMS:ID>26</p5_default_db_TEST_PERMS:ID>
+          <p5_default_db_TEST_PERMS:OPIS>testowy opis</p5_default_db_TEST_PERMS:OPIS>
+```
+
+
+## GetFeature Filtry
+```
+?SERVICE=WFS&VERSION=1.0.0&REQUEST=GetFeature&TYPENAME=p5_default_db:TEST_PERMS&SRSNAME=EPSG:3003&Filter=<ogc:Filter>...
+```
+
+https://biuro.biall-net.pl/SE/version-git/wfs-data.php/default_db/?SERVICE=WFS&VERSION=1.0.0&REQUEST=GetFeature&TYPENAME=p5_default_db:TEST_PERMS&SRSNAME=EPSG:3003&Filter=%3Cogc:Filter%3E%3Cogc:Or%3E%3Cogc:PropertyIsEqualTo%3E%3Cogc:PropertyName%3EA_STATUS%3C/ogc:PropertyName%3E%3Cogc:Literal%3ENORMAL%3C/ogc:Literal%3E%3C/ogc:PropertyIsEqualTo%3E%3Cogc:PropertyIsEqualTo%3E%3Cogc:PropertyName%3EA_STATUS%3C/ogc:PropertyName%3E%3Cogc:Literal%3EWARNING%3C/ogc:Literal%3E%3C/ogc:PropertyIsEqualTo%3E%3C/ogc:Or%3E%3C/ogc:Filter%3E
+
+```
+https://biuro.biall-net.pl/SE/version-git/wfs-data.php/default_db/?SERVICE=WFS
+&VERSION=1.0.0
+&REQUEST=GetFeature
+&TYPENAME=p5_default_db:TEST_PERMS
+&SRSNAME=EPSG:3003
+&Filter=<ogc:Filter><ogc:Or><ogc:PropertyIsEqualTo><ogc:PropertyName>A_STATUS</ogc:PropertyName><ogc:Literal>NORMAL</ogc:Literal></ogc:PropertyIsEqualTo><ogc:PropertyIsEqualTo><ogc:PropertyName>A_STATUS</ogc:PropertyName><ogc:Literal>WARNING</ogc:Literal></ogc:PropertyIsEqualTo></ogc:Or></ogc:Filter>
+```
+
+### GetFeature - Filtr ogc:PropertyIsEqualTo
+```
+?SERVICE=WFS&VERSION=1.0.0&REQUEST=GetFeature&TYPENAME=p5_default_db:TEST_PERMS&SRSNAME=EPSG:3003&Filter=<ogc:Filter>...
+```
+
+Sql Filtr:
+```sql
+  `A_STATUS` in('NORMAL','WAITING')
+```
+```xml
+	<ogc:Filter>
+		<ogc:Or>
+			<ogc:PropertyIsEqualTo>
+				<ogc:PropertyName>A_STATUS</ogc:PropertyName>
+				<ogc:Literal>NORMAL</ogc:Literal>
+			</ogc:PropertyIsEqualTo>
+			<ogc:PropertyIsEqualTo>
+				<ogc:PropertyName>A_STATUS</ogc:PropertyName>
+				<ogc:Literal>WAITING</ogc:Literal>
+			</ogc:PropertyIsEqualTo>
+		</ogc:Or>
+	</ogc:Filter>
+```
+
+### GetFeature - Filtr ogc:PropertyIsLike
+Sql Filtr:
+```sql
+  `A_STATUS` like '%O_MA%' or `A_STATUS` like '%ARNING'
+```
+```xml
+	<ogc:Filter>
+		<ogc:Or>
+			<ogc:PropertyIsLike wildCard="*" singleChar="#" escapeChar="!">
+				<ogc:PropertyName>A_STATUS</ogc:PropertyName>
+				<ogc:Literal>*O#MA*</ogc:Literal>
+			</ogc:PropertyIsLike>
+			<ogc:PropertyIsLike wildCard="*" singleChar="#" escapeChar="!">
+				<ogc:PropertyName>A_STATUS</ogc:PropertyName>
+				<ogc:Literal>*ARNING</ogc:Literal>
+			</ogc:PropertyIsLike>
+		</ogc:Or>
+	</ogc:Filter>
+```
+
+### GetFeature - Filtr ogc:PropertyIsNull
+```sql
+  ( ! (`t`.`the_geom` is null) or `t`.`ID` = '2' )
+```
+```xml
+<ogc:Filter>
+  <ogc:Or>
+    <ogc:Not>
+      <ogc:PropertyIsNull>
+        <ogc:PropertyName>the_geom</ogc:PropertyName>
+      </ogc:PropertyIsNull>
+    </ogc:Not>
+    <ogc:PropertyIsEqualTo>
+      <ogc:PropertyName>ID</ogc:PropertyName>
+      <ogc:Literal>2</ogc:Literal>
+    </ogc:PropertyIsEqualTo>
+  </ogc:Or>
+</ogc:Filter>
+```
+
+### GetFeature - Filtr ogc:Function
+```sql
+ (  ! (`t`.`the_geom` is null)  or GeometryType(`t`.`the_geom`) = 'POLYGON' )
+```
+
+```xml
+<ogc:Filter>
+  <ogc:Or>
+    <ogc:Not>
+      <ogc:PropertyIsNull>
+        <ogc:PropertyName>the_geom</ogc:PropertyName>
+      </ogc:PropertyIsNull>
+    </ogc:Not>
+    <ogc:PropertyIsEqualTo>
+      <ogc:Function name="GeometryType">
+        <ogc:PropertyName>the_geom</ogc:PropertyName>
+      </ogc:Function>
+      <ogc:Literal>POLYGON</ogc:Literal>
+    </ogc:PropertyIsEqualTo>
+  </ogc:Or>
+</ogc:Filter>
+```
+
+### GetFeature - Filtr ogc IsLessThan, IsGreaterThen
+```sql
+(
+  ( `t`.`A_RECORD_CREATE_DATE` < '2015-12-01' or `t`.`A_RECORD_CREATE_DATE` <= '2015-12-01' )
+  and  ( `t`.`A_RECORD_UPDATE_DATE` > '2016-06-01' or `t`.`A_RECORD_UPDATE_DATE` >= '2016-06-01' )
+)
+```
+
+POST na `wfs-data.php/default_db/?SERVICE=WFS&VERSION=1.0.0&REQUEST=GetFeature&TYPENAME=p5_default_db:TEST_PERMS&SRSNAME=EPSG:3003`
+```xml
+<GetFeature xmlns="http://www.opengis.net/wfs/2.0"
+	xmlns:ogc="http://www.opengis.net/ogc"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	service="WFS"
+	version="2.0.2"
+	xsi:schemaLocation="http://www.opengis.net/wfs/2.0 http://schemas.opengis.net/wfs/2.0/wfs.xsd">
+  <ogc:Filter>
+    <ogc:And>
+      <ogc:Or>
+        <ogc:PropertyIsLessThan>
+          <ogc:PropertyName>A_RECORD_CREATE_DATE</ogc:PropertyName>
+          <ogc:Literal>2015-12-01</ogc:Literal>
+        </ogc:PropertyIsLessThan>
+        <ogc:PropertyIsLessThanOrEqualTo>
+          <ogc:PropertyName>A_RECORD_CREATE_DATE</ogc:PropertyName>
+          <ogc:Literal>2015-12-01</ogc:Literal>
+        </ogc:PropertyIsLessThanOrEqualTo>
+      </ogc:Or>
+      <ogc:Or>
+        <ogc:PropertyIsGreaterThan>
+          <ogc:PropertyName>A_RECORD_UPDATE_DATE</ogc:PropertyName>
+          <ogc:Literal>2016-06-01</ogc:Literal>
+        </ogc:PropertyIsGreaterThan>
+        <ogc:PropertyIsGreaterThanOrEqualTo>
+          <ogc:PropertyName>A_RECORD_UPDATE_DATE</ogc:PropertyName>
+          <ogc:Literal>2016-06-01</ogc:Literal>
+        </ogc:PropertyIsGreaterThanOrEqualTo>
+      </ogc:Or>
+    </ogc:And>
+  </ogc:Filter>
+</GetFeature>
+```
+
+### Error - Not implemented tag
+```xml
+	<ogc:Filter>
+		<ogc:Or>
+			<ogc:UnsupportedTag>
+				<ogc:PropertyName>A_STATUS</ogc:PropertyName>
+				<ogc:Literal>*O%23MA*</ogc:Literal>
+			</ogc:UnsupportedTag>
+		</ogc:Or>
+	</ogc:Filter>
+```
+Result:
+```xml
+<?xml version="1.0" encoding="UTF-8"?>
+<ServiceExceptionReport
+    xmlns="http://www.opengis.net/ogc"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://www.opengis.net/ogc http://schemas.opengis.net/wfs/1.0.0/OGC-exception.xsd" version="1.2.0">
+    <ServiceException code="NotImplementedOgcTag" locator="request">Not Implemented tag 'ogc:UnsupportedTag'</ServiceException>
+</ServiceExceptionReport>
+```
+
+### Request-URI Too Long - ogc:Filter z POST
+Odczytuje ogc:Filter z Request. Przydatne w przypadku długich filtrów nie mieszczących się w limicie długości URI.
+
+Przykład - POST na: `/wfs-data.php/default_db/?SERVICE=WFS&VERSION=1.0.0&REQUEST=GetFeature&TYPENAME=p5_default_db:TEST_PERMS&SRSNAME=EPSG:3003`
+
+```xml
+<GetFeature xmlns="http://www.opengis.net/wfs/2.0"
+	xmlns:p5_default_db="https://biuro.biall-net.pl/wfs/default_db"
+	xmlns:ogc="http://www.opengis.net/ogc"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	service="WFS"
+	version="2.0.2"
+	xsi:schemaLocation="http://www.opengis.net/wfs/2.0 http://schemas.opengis.net/wfs/2.0/wfs.xsd">
+  <ogc:Filter>
+    <ogc:Or>
+      <ogc:PropertyIsLike wildCard="*" singleChar="%23" escapeChar="!">
+        <ogc:PropertyName>A_STATUS</ogc:PropertyName>
+        <ogc:Literal>*O%23MA*</ogc:Literal>
+      </ogc:PropertyIsLike>
+      <ogc:PropertyIsLike wildCard="*" singleChar="%23" escapeChar="!">
+        <ogc:PropertyName>A_STATUS</ogc:PropertyName>
+        <ogc:Literal>*ARNING</ogc:Literal>
+      </ogc:PropertyIsLike>
+    </ogc:Or>
+  </ogc:Filter>
+</GetFeature>
+```
+
+## GetFeatureAdvanced
+Dodatkowe atrybuty z informają o uprawnieniach:
+
+- @atrybut p5:allow_create="true" - możliwość tworzenia nowego rekordu z tą kolumną
+- @atrybut p5:allow_write="true" - możliwość edycji tej kolumny
+- @atrybut p5:allow_read="false" - brak uprawnień do odczytania zawartości tej kolumny
+
+
+## GetFeature - Hits
+
+Parametr url dla GetFeature i GetFeatureAdvanced:
+
+- **resultType=hits**: zwraca liczbę pasujących rekordów do zapytania
+
+Przykład:
+```
+/wfs-data.php/default_db/?SERVICE=WFS&VERSION=1.0.0&SRSNAME=EPSG:3003
+  &REQUEST=GetFeatureAdvanced
+  &TYPENAME=p5_default_db:TEST_PERMS
+  &resultType=hits
+```
+
+Wynik:
+```xml
+<?xml version="1.0" encoding="UTF-8"?>
+<wfs:FeatureCollection
+    xmlns:wfs="http://www.opengis.net/wfs/2.0"
+    xmlns="http://www.opengis.net/wfs/2.0"
+    xmlns:gml="http://www.opengis.net/gml"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" numberMatched="39" numberReturned="0"/>
+```
+
+
+# Modyfikacja danych
+
+## Edycja danych
+POST na adres `?SERVICE=WFS&VERSION=1.0.0&SRSNAME=EPSG:3003&`
+
+```xml
+    <Transaction xmlns="http://www.opengis.net/wfs"
+      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+      version="1.0.0"
+      xmlns:p5_default_db="https://biuro.biall-net.pl/"
+      service="WFS"
+      xmlns:gml="http://www.opengis.net/gml">
+      <Update xmlns="http://www.opengis.net/wfs" typeName="p5_default_db:TEST_PERMS">
+        <Property xmlns="http://www.opengis.net/wfs">
+          <Name xmlns="http://www.opengis.net/wfs">OPIS</Name>
+          <Value xmlns="http://www.opengis.net/wfs">testowy opis</Value>
+        </Property>
+        <Filter xmlns="http://www.opengis.net/ogc"><FeatureId xmlns="http://www.opengis.net/ogc" fid="TEST_PERMS.25"/></Filter>
+      </Update>
+    </Transaction>
+```
+
+## Wprowadzanie danych
+POST na adres `?SERVICE=WFS&VERSION=1.0.0&SRSNAME=EPSG:3003&`
+
+```xml
+<Transaction
+  xmlns="http://www.opengis.net/wfs"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  version="1.0.0"
+  service="WFS"
+  xmlns:p5_default_db="https://biuro.biall-net.pl/wfs/default_db"
+  xmlns:gml="http://www.opengis.net/gml">
+  <Insert xmlns="http://www.opengis.net/wfs">
+    <TEST_PERMS xmlns="https://biuro.biall-net.pl/wfs/default_db/TEST_PERMS">
+      <OPIS xmlns="https://biuro.biall-net.pl/wfs/default_db/TEST_PERMS">test</OPIS>
+      <the_geom xmlns="https://biuro.biall-net.pl/wfs/default_db/TEST_PERMS">
+        <gml:Polygon srsName="EPSG:4326">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+                <gml:coordinates cs="," ts=" ">18.44569262058692871,54.36867274376898251 18.44884659456100096,54.35193242036815064 18.48208462798003637,54.34368356535905065 18.44569262058692871,54.36867274376898251</gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+      </the_geom>
+    </TEST_PERMS>
+  </Insert>
+</Transaction>
+```
+
+Jeśli zostanie wysłana również wartość dla klucza (ID) to zostanie wykonana operacja **Update**
+`<ID xmlns="https://biuro.biall-net.pl/wfs/default_db">24</ID>`
+
+```xml
+<Transaction
+  xmlns="http://www.opengis.net/wfs"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  version="1.0.0"
+  service="WFS"
+  xmlns:p5_default_db="https://biuro.biall-net.pl/wfs/default_db"
+  xmlns:gml="http://www.opengis.net/gml">
+  <Insert xmlns="http://www.opengis.net/wfs">
+    <TEST_PERMS xmlns="https://biuro.biall-net.pl/wfs/default_db/TEST_PERMS">
+      <ID xmlns="https://biuro.biall-net.pl/wfs/default_db/TEST_PERMS">24</ID>
+      <OPIS xmlns="https://biuro.biall-net.pl/wfs/default_db/TEST_PERMS">test</OPIS>
+      <the_geom xmlns="https://biuro.biall-net.pl/wfs/default_db/TEST_PERMS">
+        <gml:Polygon srsName="EPSG:4326">
+          <gml:outerBoundaryIs>
+            <gml:LinearRing>
+                <gml:coordinates cs="," ts=" ">18.44569262058692871,54.36867274376898251 18.44884659456100096,54.35193242036815064 18.48208462798003637,54.34368356535905065 18.44569262058692871,54.36867274376898251</gml:coordinates>
+            </gml:LinearRing>
+          </gml:outerBoundaryIs>
+        </gml:Polygon>
+      </the_geom>
+    </TEST_PERMS>
+  </Insert>
+</Transaction>
+```
+
+## Modyfikacja wielu danych
+POST na adres `?SERVICE=WFS&VERSION=1.0.0&SRSNAME=EPSG:3003&`
+
+Przykład - wprowadzenie trzech rekrodów do tabeli TEST_GEOM_LINESTRING:
+```xml
+<Transaction xmlns="http://www.opengis.net/wfs"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    version="1.0.0"
+    service="WFS"
+    xmlns:p5_default_db="https://biuro.biall-net.pl/wfs/default_db"
+    xmlns:gml="http://www.opengis.net/gml">
+    <Insert xmlns="http://www.opengis.net/wfs">
+        <TEST_GEOM_LINESTRING xmlns="https://biuro.biall-net.pl/wfs/default_db">
+            <OPIS xmlns="https://biuro.biall-net.pl/wfs/default_db">test1z3</OPIS>
+            <the_geom xmlns="https://biuro.biall-net.pl/wfs/default_db">
+                <gml:LineString srsName="EPSG:4326">
+                    <gml:coordinates cs="," ts=" ">18.25240580856418049,54.48879768607960017 18.27014261382555915,54.46219247818753217</gml:coordinates>
+                </gml:LineString>
+            </the_geom>
+        </TEST_GEOM_LINESTRING>
+    </Insert>
+    <Insert xmlns="http://www.opengis.net/wfs">
+        <TEST_GEOM_LINESTRING xmlns="https://biuro.biall-net.pl/wfs/default_db">
+            <OPIS xmlns="https://biuro.biall-net.pl/wfs/default_db">test2z3</OPIS>
+            <the_geom xmlns="https://biuro.biall-net.pl/wfs/default_db">
+                <gml:LineString srsName="EPSG:4326">
+                    <gml:coordinates cs="," ts=" ">18.2629370366881254,54.43447871996662712 18.28621659359368223,54.40621068658131065</gml:coordinates>
+                </gml:LineString>
+            </the_geom>
+        </TEST_GEOM_LINESTRING>
+    </Insert>
+    <Insert xmlns="http://www.opengis.net/wfs">
+        <TEST_GEOM_LINESTRING xmlns="https://biuro.biall-net.pl/wfs/default_db">
+            <OPIS xmlns="https://biuro.biall-net.pl/wfs/default_db">test3z3</OPIS>
+            <the_geom xmlns="https://biuro.biall-net.pl/wfs/default_db">
+                <gml:LineString srsName="EPSG:4326">
+                    <gml:coordinates cs="," ts=" ">18.26404558701696246,54.39512518329294721 18.29841064721088273,54.39179953230643605</gml:coordinates>
+                </gml:LineString>
+            </the_geom>
+        </TEST_GEOM_LINESTRING>
+    </Insert>
+</Transaction>
+```
+Wynik:
+```
+<?xml version="1.0" encoding="UTF-8"?>
+<wfs:WFS_TransactionResponse version="1.0.0"
+		xmlns:wfs="http://www.opengis.net/wfs"
+		xmlns:ogc="http://www.opengis.net/ogc"
+		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <wfs:InsertResult>
+    <ogc:FeatureId fid="TEST_GEOM_LINESTRING.522" xmlns:ogc="http://www.opengis.net/ogc"/>
+    <ogc:FeatureId fid="TEST_GEOM_LINESTRING.523" xmlns:ogc="http://www.opengis.net/ogc"/>
+    <ogc:FeatureId fid="TEST_GEOM_LINESTRING.524" xmlns:ogc="http://www.opengis.net/ogc"/>
+  </wfs:InsertResult>
+  <wfs:TransactionResult>
+    <wfs:Status>
+      <wfs:SUCCESS/>
+    </wfs:Status>
+  </wfs:TransactionResult>
+</wfs:WFS_TransactionResponse>
+```
+ID rekordów podane w tagu `<wfs:InsertResult>` w takiej samej kolejności jak w treści zapytania.
+
+Czyli rekord 522 ma OPIS = test1z3, 523 ma OPIS = test2z3, 524 ma OPIS = test3z3
+
+
+## Usuwanie danych
+POST na adres `?SERVICE=WFS&VERSION=1.0.0&SRSNAME=EPSG:3003&`
+
+Usuwanie rekordów 1 i 2 z tabeli TEST_GEOM_POINT
+```xml
+<Transaction xmlns="http://www.opengis.net/wfs" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0.0" service="WFS" xmlns:p5_default_db="https://biuro.biall-net.pl/wfs/default_db" xsi:schemaLocation="https://biuro.biall-net.pl/wfs/default_db https://biuro.biall-net.pl/dev-pl/se-master/wfs-qgis.php/default_db/?SERVICE=WFS&amp;VERSION=1.0.0&amp;REQUEST=DescribeFeatureType&amp;TYPENAME=p5_default_db:TEST_GEOM_POINT&amp;SRSNAME=EPSG:4326" xmlns:gml="http://www.opengis.net/gml">
+    <Delete xmlns="http://www.opengis.net/wfs" typeName="p5_default_db:TEST_GEOM_POINT">
+        <Filter xmlns="http://www.opengis.net/ogc">
+            <FeatureId xmlns="http://www.opengis.net/ogc" fid="TEST_GEOM_POINT.2" />
+            <FeatureId xmlns="http://www.opengis.net/ogc" fid="TEST_GEOM_POINT.1" />
+        </Filter>
+    </Delete>
+</Transaction>
+```
+
+## Wynik operacji
+```xml
+    <?xml version="1.0" encoding="UTF-8"?>
+    <wfs:WFS_TransactionResponse version="1.0.0"
+        xmlns:wfs="http://www.opengis.net/wfs"
+        xmlns:ogc="http://www.opengis.net/ogc"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+        <wfs:InsertResult>
+            <ogc:FeatureId fid="TEST_PERMS.40" xmlns:ogc="http://www.opengis.net/ogc"/>
+            <ogc:FeatureId fid="TEST_PERMS.41" xmlns:ogc="http://www.opengis.net/ogc"/>
+            <!-- w takiej samej kolejności jak wysłano -->
+        </wfs:InsertResult>
+        <wfs:TransactionResult>
+            <wfs:Status>
+                <wfs:SUCCESS/>
+            </wfs:Status>
+        </wfs:TransactionResult>
+    </wfs:WFS_TransactionResponse>
+```
+
+# Pliki
+typeName: `p5_objects:File`
+
+Obecnie działa:
+- DescribeFeatureTypeAdvanced - file content is `xsd:base64Binary`
+- GetFeatureAdvanced - file content returned as base64
+- AddFeature
+
+## Pliki - download
+```
+https://biuro.biall-net.pl/SE/version-git/wfs-data.php/default_db/?SERVICE=WFS
+&VERSION=1.0.0
+&REQUEST=GetFeatureAdvanced
+&TYPENAME=p5_objects:File
+&SRSNAME=EPSG:3003
+&Filter=<ogc:Filter><ogc:PropertyIsEqualTo><ogc:PropertyName>id</ogc:PropertyName><ogc:Literal>35</ogc:Literal></ogc:Filter>
+```
+
+Wynik:
+```xml
+<?xml version="1.0" encoding="utf-8"?>
+<wfs:FeatureCollection
+    xmlns:wfs="http://www.opengis.net/wfs"
+    xmlns="http://www.opengis.net/wfs"
+    xmlns:gml="http://www.opengis.net/gml"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:p5_objects="https://biuro.biall-net.pl/wfs/objects"
+    xmlns:p5="https://biuro.biall-net.pl/wfs"
+    xsi:schemaLocation="https://biuro.biall-net.pl/wfs/objects https://biuro.biall-net.pl/dev-pl/se-master/wfs-data.php/default_db/?SERVICE=WFS&amp;VERSION=1.0.0&amp;TYPENAME=p5_objects:File&amp;REQUEST=DescribeFeatureType">
+    <gml:featureMember>
+        <p5_objects:File fid="File.35">
+            <p5_objects:id>35</p5_objects:id>
+            <p5_objects:name>blank-test-wfs.gif</p5_objects:name>
+            <p5_objects:size>64</p5_objects:size>
+            <p5_objects:mimeType>image/gif</p5_objects:mimeType>
+            <p5_objects:version>0</p5_objects:version>
+            <p5_objects:content>R0lGODlhAQABAIAAAP///////yH+EUNyZWF0ZWQgd2l0aCBHSU1QACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==</p5_objects:content>
+        </p5_objects:File>
+    </gml:featureMember>
+</wfs:FeatureCollection>
+```
+
+## Pliki - upload
+
+POST na: `wfs-data.php/default_db/?SERVICE=WFS&VERSION=1.0.0&SRSNAME=EPSG:3003`
+```xml
+<Transaction
+  xmlns="http://www.opengis.net/wfs"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  version="1.0.0"
+  service="WFS"
+  xmlns:p5_objects="https://biuro.biall-net.pl/wfs/objects"
+  xmlns:gml="http://www.opengis.net/gml">
+  <Insert xmlns="http://www.opengis.net/wfs">
+    <File xmlns="https://biuro.biall-net.pl/wfs/objects">
+      <name xmlns="https://biuro.biall-net.pl/wfs/objects">blank.gif</name>
+      <content xmlns="https://biuro.biall-net.pl/wfs/objects">R0lGODlhAQABAIAAAP///////yH+EUNyZWF0ZWQgd2l0aCBHSU1QACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==</content>
+    </File>
+  </Insert>
+</Transaction>
+```
+
+Wynik:
+```xml
+<?xml version="1.0" encoding="UTF-8"?>
+<wfs:WFS_TransactionResponse version="1.0.0"
+    xmlns:wfs="http://www.opengis.net/wfs"
+    xmlns:ogc="http://www.opengis.net/ogc"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+    <wfs:InsertResult>
+        <ogc:FeatureId fid="File.35" xmlns:ogc="http://www.opengis.net/ogc"/>
+    </wfs:InsertResult>
+    <wfs:TransactionResult>
+        <wfs:Status>
+            <wfs:SUCCESS/>
+        </wfs:Status>
+    </wfs:TransactionResult>
+</wfs:WFS_TransactionResponse>
+```
+
+## Pliki - wgranie pliku wraz z przypisaniem do obiektu
+
+POST na: `wfs-data.php/default_db/?SERVICE=WFS&VERSION=1.0.0&SRSNAME=EPSG:3003`
+```xml
+<Transaction
+  xmlns="http://www.opengis.net/wfs"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  version="1.0.0"
+  service="WFS"
+  xmlns:p5_objects="https://biuro.biall-net.pl/wfs/objects"
+  xmlns:gml="http://www.opengis.net/gml">
+  <Insert xmlns="http://www.opengis.net/wfs">
+    <TestPerms xmlns="https://biuro.biall-net.pl/wfs/objects">
+      <OPIS xmlns="https://biuro.biall-net.pl/wfs/objects">test addFeature p5_objects:TestPerms with p5_objects:File</OPIS>
+      <A_STATUS xmlns="https://biuro.biall-net.pl/wfs/objects">NORMAL</A_STATUS>
+      <p5_objects:File>
+        <p5_objects:name>blank-wfs.gif</p5_objects:name>
+        <p5_objects:content>R0lGODlhAQABAIAAAP///////yH+EUNyZWF0ZWQgd2l0aCBHSU1QACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==</p5_objects:content>
+      </p5_objects:File>
+      <ADM_NAME xmlns="https://biuro.biall-net.pl/wfs/objects">Test Name</ADM_NAME>
+    </TestPerms>
+  </Insert>
+</Transaction>
+```
+
+Wynik:
+```xml
+<?xml version="1.0" encoding="UTF-8"?>
+<wfs:WFS_TransactionResponse version="1.0.0"
+  xmlns:wfs="http://www.opengis.net/wfs"
+  xmlns:ogc="http://www.opengis.net/ogc"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <wfs:InsertResult>
+    <ogc:FeatureId fid="TestPerms.49" xmlns:ogc="http://www.opengis.net/ogc"/>
+  </wfs:InsertResult>
+  <wfs:TransactionResult>
+    <wfs:Status>
+      <wfs:SUCCESS/>
+    </wfs:Status>
+  </wfs:TransactionResult>
+</wfs:WFS_TransactionResponse>
+```