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

Gui xml - convert gui xml to php file; restrict access to schema folder

Piotr Labudda пре 10 година
родитељ
комит
5ecdcca975

+ 18 - 0
SE/schema/gui/Makefile

@@ -0,0 +1,18 @@
+
+testConvertGuiXmlToFilters-test_perms:
+	xsltproc testConvertGuiXmlToFilters.xsl default_db/test_perms.gui.xml |grep -v '^[[:space:]]*$$'
+
+testConvertGuiXmlToFilters-test_perms-no-dbg:
+	xsltproc testConvertGuiXmlToFilters.xsl default_db/test_perms.gui.xml |grep -v '^[[:space:]]*$$'|grep -v '^#'
+
+testConvertGuiXmlToFilters-test_perms-save:
+	xsltproc testConvertGuiXmlToFilters.xsl default_db/test_perms.gui.xml |grep -v '^[[:space:]]*$$' > tmp.test_perms.php
+	echo "cat tmp.test_perms.php"
+	cat tmp.test_perms.php
+
+all: testConvertGuiXmlToFilters-test_perms
+
+clean:
+	rm tmp.* class.*.php
+
+

+ 0 - 146
SE/schema/gui/default_db/test_perms.gui.xml

@@ -2,117 +2,6 @@
 <ui_table xmlns="https://biuro.biall-net.pl/SE/version-git/schema/gui/table.gui.xsd"
 					xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 					xmlns:ogc="http://www.opengis.net/ogc">
-<!-- from Data_Source
-sf_Problemy
-		$fltrs['Problemy'] = new stdClass();
-		$fltrs['Problemy']->icon = 'glyphicon glyphicon-warning-sign';
-		$fltrs['Problemy']->btns = array();
-		$fltrs['Problemy']->btns['PROBLEMY'] = (object)array('value'=>'PROBLEM');
-		$fltrs['Problemy']->btns['OSTRZEZENIA'] = (object)array('value'=>'WARNING');
-		$fltrs['Problemy']->btns['BEZ_PROBLEM.'] = (object)array('value'=>'NORMAL');
-sf_Status
-		$fltrs['Status'] = new stdClass();
-		$fltrs['Status']->icon = 'glyphicon glyphicon-question-sign';
-		$fltrs['Status']->btns = array();
-		$fltrs['Status']->btns['OCZEKUJACY'] = (object)array('value'=>'WAITING');
-		$fltrs['Status']->btns['AKTYWNI'] = (object)array('value'=>'AKTYWNI');
-sf_Spotkania
-		$fltrs['Spotkania'] = new stdClass();
-		$fltrs['Spotkania']->icon = 'glyphicon glyphicon-calendar';
-		$fltrs['Spotkania']->btns = array();
-		$fltrs['Spotkania']->btns['STARE'] = (object)array('value'=>'OLD');
-		$fltrs['Spotkania']->btns['ZARAZ'] = (object)array('value'=>'NOW');
-		$fltrs['Spotkania']->btns['DZISIAJ'] = (object)array('value'=>'TODAY');
-		$fltrs['Spotkania']->btns['BRAK'] = (object)array('value'=>'BRAK');
-sf_Access
-		$fltrs['Access'] = new stdClass();
-		$fltrs['Access']->icon = 'glyphicon glyphicon-lock';
-		$fltrs['Access']->btns = array();
-		$fltrs['Access']->btns['Pokaż'] = (object)array('value'=>'SHOW');
--->
-<!-- from Data_Source
-sf_Problemy
-			case 'Problemy':
-				if (array_key_exists('A_PROBLEM', $this->_cols)) {
-					switch ($value) {
-						case 'PROBLEM':
-							$sqlFltr = " t.`A_PROBLEM`!='' ";
-							break;
-						case 'WARNING':
-							$sqlFltr = " t.`A_PROBLEM`='WARNING' ";
-							break;
-						case 'NORMAL':
-							$sqlFltr = " t.`A_PROBLEM`='' ";
-							break;
-					}
-				}
-				break;
-			case 'Status':
-				if (array_key_exists('A_STATUS', $this->_cols)) {
-					switch ($value) {
-						case 'WAITING':
-							$sqlFltr = " t.`A_STATUS`='WAITING' ";
-							break;
-						case 'AKTYWNI':
-							$sqlFltr = " t.`A_STATUS` in('NORMAL', 'WARNING') ";
-			// TODO: $_SESSION['USERS_FILTER_STATUS_SQL']="and (( $thiss->DETECT_TABLE_NAME.A_STATUS='NORMAL' or $thiss->DETECT_TABLE_NAME.A_STATUS='WARNING'  ) or ( $thiss->DETECT_TABLE_NAME.A_STATUS='OFF_SOFT' and $thiss->DETECT_TABLE_NAME.A_PROBLEM_DESC not like '%odla%fizy%' and $thiss->DETECT_TABLE_NAME.A_PROBLEM!='' ) or ( $thiss->DETECT_TABLE_NAME.A_STATUS='OFF_SOFT' and $thiss->DETECT_TABLE_NAME.A_PROBLEM='' )) ";
-			// if ($thiss->DETECT_TABLE_NAME == 'KSIEG_DOKUMENTY') $_SESSION['USERS_FILTER_STATUS_SQL']="and ( $thiss->DETECT_TABLE_NAME.A_STATUS='NORMAL' or $thiss->DETECT_TABLE_NAME.A_STATUS='WARNING'  )  ";
-							break;
-					}
-				}
-				break;
-			case 'Spotkania':
-				if (array_key_exists('L_APPOITMENT_DATE', $this->_cols)) {
-					switch ($value) {
-						case 'OLD':
-							$sqlFltr = " UNIX_TIMESTAMP(t.`L_APPOITMENT_DATE`)<UNIX_TIMESTAMP(now()) and t.`L_APPOITMENT_DATE`!='' ";
-							break;
-						case 'NOW':
-							$sqlFltr = " UNIX_TIMESTAMP(t.`L_APPOITMENT_DATE`)<UNIX_TIMESTAMP(now())+3600 and UNIX_TIMESTAMP(t.`L_APPOITMENT_DATE`)>UNIX_TIMESTAMP(now())-3600 ";
-							break;
-						case 'TODAY':
-							$start = mktime(0,0,0, date("m"), date("d"), date("Y"));
-							$end = mktime(0,0,0, date("m"), date("d") + 1, date("Y"));
-							$sqlFltr = " UNIX_TIMESTAMP(t.`L_APPOITMENT_DATE`)>'{$start}' and UNIX_TIMESTAMP(t.`L_APPOITMENT_DATE`)<'{$end}' ";
-							break;
-						case 'TOMORROW':
-							$start = mktime(0,0,0, date("m"), date("d") + 1, date("Y"));
-							$end = mktime(0,0,0, date("m"), date("d") + 2, date("Y"));
-							$sqlFltr = " UNIX_TIMESTAMP(t.`L_APPOITMENT_DATE`)>'{$start}' and UNIX_TIMESTAMP(t.`L_APPOITMENT_DATE`)<'{$end}' ";
-							break;
-						case 'YESTERDAY':
-							$start = mktime(0,0,0, date("m"), date("d") - 1, date("Y"));
-							$end = mktime(0,0,0, date("m"), date("d") - 2, date("Y"));
-							$sqlFltr = " UNIX_TIMESTAMP(t.`L_APPOITMENT_DATE`)>'{$start}' and UNIX_TIMESTAMP(t.`L_APPOITMENT_DATE`)<'{$end}' ";
-							break;
-						case 'BRAK':
-							$start = mktime(0,0,0, date("m"), date("d") - 1, date("Y"));
-							$end = mktime(0,0,0, date("m"), date("d") - 2, date("Y"));
-							$sqlFltr = " t.`L_APPOITMENT_DATE`='' ";
-							break;
-					}
-				}
-				break;
-			case 'Access':
-				if ('SHOW' != $value && $this->isAccessFltrAllowed()) {
-					$userLogin = User::getLogin();
-					$usrAclGroups = User::getLdapGroupsNames();
-					$usrAclGroups[] = '';// TODO: allow empty for everyone?
-					$sqlUsrAclGroups = "'" . implode("','", $usrAclGroups) . "'";
-					$sqlFltr = "
-						t.`{$this->_fieldGroupWrite}` in({$sqlUsrAclGroups})
-						and t.`{$this->_fieldGroupRead}` in({$sqlUsrAclGroups})
-					";
-					if (array_key_exists('L_APPOITMENT_USER', $this->_cols)) {
-						$sqlFltr = "
-							(
-								({$sqlFltr})
-								or t.`L_APPOITMENT_USER`='{$userLogin}'
-							)
-						";
-					}
-				}
--->
 	<filters>
 		<filter>
 			<label>Status</label>
@@ -122,7 +11,6 @@ sf_Problemy
 				<filter_button>
 					<name>OCZEKUJACY</name>
 					<value>WAITING</value>
-					<!-- $sqlFltr = " t.`A_STATUS`='WAITING' "; -->
 					<ogc:Filter>
 						<ogc:PropertyIsEqualTo>
 							<ogc:PropertyName>A_STATUS</ogc:PropertyName>
@@ -133,10 +21,7 @@ sf_Problemy
 				<filter_button>
 					<name>AKTYWNI</name>
 					<value>AKTYWNI</value>
-					<!-- $sqlFltr = " t.`A_STATUS` in('NORMAL', 'WARNING') "; -->
-					<!-- $sqlFltr = " (t.`A_STATUS`='NORMAL' or t.`A_STATUS`='WARNING') "; -->
 					<ogc:Filter>
-						<!-- in('NORMAL', 'WARNING') -->
 						<ogc:Or>
 							<ogc:PropertyIsEqualTo>
 								<ogc:PropertyName>A_STATUS</ogc:PropertyName>
@@ -150,37 +35,6 @@ sf_Problemy
 							</ogc:PropertyIsEqualTo>
 						</ogc:Or>
 					</ogc:Filter>
-<!-- ogc:Filter example:
-<ogc:Filter>
-		<ogc:And>
-				<ogc:Or>
-						<ogc:PropertyIsEqualTo>
-								<ogc:PropertyName>ID</ogc:PropertyName>
-								<ogc:Literal>98400005701</ogc:Literal>
-						</ogc:PropertyIsEqualTo>
-						<ogc:PropertyIsEqualTo>
-								<ogc:PropertyName>ID</ogc:PropertyName>
-								<ogc:Literal>-1</ogc:Literal>
-						</ogc:PropertyIsEqualTo>
-				</ogc:Or>
-				<ogc:And>
-						<ogc:PropertyIsLessThanOrEqualTo>
-								<ogc:PropertyName>MH_DATUM_INGANG</ogc:PropertyName>
-								<ogc:Literal>2015-02-27T00:00:00Z</ogc:Literal>
-						</ogc:PropertyIsLessThanOrEqualTo>
-						<ogc:Or>
-								<ogc:PropertyIsGreaterThanOrEqualTo>
-										<ogc:PropertyName>MH_DATUM_EINDE</ogc:PropertyName>
-										<ogc:Literal>2015-02-27T00:00:00Z</ogc:Literal>
-								</ogc:PropertyIsGreaterThanOrEqualTo>
-								<ogc:PropertyIsNull>
-										<ogc:PropertyName>MH_DATUM_EINDE</ogc:PropertyName>
-								</ogc:PropertyIsNull>
-						</ogc:Or>
-				</ogc:And>
-		</ogc:And>
-</ogc:Filter>
--->
 				</filter_button>
 			</filter_buttons>
 		</filter>

+ 259 - 0
SE/schema/gui/testConvertGuiXmlToFilters.xsl

@@ -0,0 +1,259 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet version="1.0"
+								xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+								xmlns:ui_table="https://biuro.biall-net.pl/SE/version-git/schema/gui/table.gui.xsd"
+								xmlns:ogc="http://www.opengis.net/ogc"
+								>
+<!--								xmlns:p5_36_TEST_PERMS="https://biuro.biall-net.pl/api/36/TEST_PERMS" -->
+<!-- import namespaces from xsd xmlns:p5_36_TEST_PERMS="https://biuro.biall-net.pl/api/36/TEST_PERMS" -->
+	<xsl:output method="text" omit-xml-declaration="yes" indent="no"/>
+
+<!-- from Data_Source
+sf_Problemy
+		$fltrs['Problemy'] = new stdClass();
+		$fltrs['Problemy']->icon = 'glyphicon glyphicon-warning-sign';
+		$fltrs['Problemy']->btns = array();
+		$fltrs['Problemy']->btns['PROBLEMY'] = (object)array('value'=>'PROBLEM');
+		$fltrs['Problemy']->btns['OSTRZEZENIA'] = (object)array('value'=>'WARNING');
+		$fltrs['Problemy']->btns['BEZ_PROBLEM.'] = (object)array('value'=>'NORMAL');
+sf_Status
+		$fltrs['Status'] = new stdClass();
+		$fltrs['Status']->icon = 'glyphicon glyphicon-question-sign';
+		$fltrs['Status']->btns = array();
+		$fltrs['Status']->btns['OCZEKUJACY'] = (object)array('value'=>'WAITING');
+		$fltrs['Status']->btns['AKTYWNI'] = (object)array('value'=>'AKTYWNI');
+sf_Spotkania
+		$fltrs['Spotkania'] = new stdClass();
+		$fltrs['Spotkania']->icon = 'glyphicon glyphicon-calendar';
+		$fltrs['Spotkania']->btns = array();
+		$fltrs['Spotkania']->btns['STARE'] = (object)array('value'=>'OLD');
+		$fltrs['Spotkania']->btns['ZARAZ'] = (object)array('value'=>'NOW');
+		$fltrs['Spotkania']->btns['DZISIAJ'] = (object)array('value'=>'TODAY');
+		$fltrs['Spotkania']->btns['BRAK'] = (object)array('value'=>'BRAK');
+sf_Access
+		$fltrs['Access'] = new stdClass();
+		$fltrs['Access']->icon = 'glyphicon glyphicon-lock';
+		$fltrs['Access']->btns = array();
+		$fltrs['Access']->btns['Pokaż'] = (object)array('value'=>'SHOW');
+-->
+<!-- from Data_Source
+sf_Problemy
+			case 'Problemy':
+				if (array_key_exists('A_PROBLEM', $this->_cols)) {
+					switch ($value) {
+						case 'PROBLEM':
+							$sqlFltr = " t.`A_PROBLEM`!='' ";
+							break;
+						case 'WARNING':
+							$sqlFltr = " t.`A_PROBLEM`='WARNING' ";
+							break;
+						case 'NORMAL':
+							$sqlFltr = " t.`A_PROBLEM`='' ";
+							break;
+					}
+				}
+				break;
+			case 'Status':
+				if (array_key_exists('A_STATUS', $this->_cols)) {
+					switch ($value) {
+						case 'WAITING':
+							$sqlFltr = " t.`A_STATUS`='WAITING' ";
+							break;
+						case 'AKTYWNI':
+							$sqlFltr = " t.`A_STATUS` in('NORMAL', 'WARNING') ";
+			// TODO: $_SESSION['USERS_FILTER_STATUS_SQL']="and (( $thiss->DETECT_TABLE_NAME.A_STATUS='NORMAL' or $thiss->DETECT_TABLE_NAME.A_STATUS='WARNING'  ) or ( $thiss->DETECT_TABLE_NAME.A_STATUS='OFF_SOFT' and $thiss->DETECT_TABLE_NAME.A_PROBLEM_DESC not like '%odla%fizy%' and $thiss->DETECT_TABLE_NAME.A_PROBLEM!='' ) or ( $thiss->DETECT_TABLE_NAME.A_STATUS='OFF_SOFT' and $thiss->DETECT_TABLE_NAME.A_PROBLEM='' )) ";
+			// if ($thiss->DETECT_TABLE_NAME == 'KSIEG_DOKUMENTY') $_SESSION['USERS_FILTER_STATUS_SQL']="and ( $thiss->DETECT_TABLE_NAME.A_STATUS='NORMAL' or $thiss->DETECT_TABLE_NAME.A_STATUS='WARNING'  )  ";
+							break;
+					}
+				}
+				break;
+			case 'Spotkania':
+				if (array_key_exists('L_APPOITMENT_DATE', $this->_cols)) {
+					switch ($value) {
+						case 'OLD':
+							$sqlFltr = " UNIX_TIMESTAMP(t.`L_APPOITMENT_DATE`)<UNIX_TIMESTAMP(now()) and t.`L_APPOITMENT_DATE`!='' ";
+							break;
+						case 'NOW':
+							$sqlFltr = " UNIX_TIMESTAMP(t.`L_APPOITMENT_DATE`)<UNIX_TIMESTAMP(now())+3600 and UNIX_TIMESTAMP(t.`L_APPOITMENT_DATE`)>UNIX_TIMESTAMP(now())-3600 ";
+							break;
+						case 'TODAY':
+							$start = mktime(0,0,0, date("m"), date("d"), date("Y"));
+							$end = mktime(0,0,0, date("m"), date("d") + 1, date("Y"));
+							$sqlFltr = " UNIX_TIMESTAMP(t.`L_APPOITMENT_DATE`)>'{$start}' and UNIX_TIMESTAMP(t.`L_APPOITMENT_DATE`)<'{$end}' ";
+							break;
+						case 'TOMORROW':
+							$start = mktime(0,0,0, date("m"), date("d") + 1, date("Y"));
+							$end = mktime(0,0,0, date("m"), date("d") + 2, date("Y"));
+							$sqlFltr = " UNIX_TIMESTAMP(t.`L_APPOITMENT_DATE`)>'{$start}' and UNIX_TIMESTAMP(t.`L_APPOITMENT_DATE`)<'{$end}' ";
+							break;
+						case 'YESTERDAY':
+							$start = mktime(0,0,0, date("m"), date("d") - 1, date("Y"));
+							$end = mktime(0,0,0, date("m"), date("d") - 2, date("Y"));
+							$sqlFltr = " UNIX_TIMESTAMP(t.`L_APPOITMENT_DATE`)>'{$start}' and UNIX_TIMESTAMP(t.`L_APPOITMENT_DATE`)<'{$end}' ";
+							break;
+						case 'BRAK':
+							$start = mktime(0,0,0, date("m"), date("d") - 1, date("Y"));
+							$end = mktime(0,0,0, date("m"), date("d") - 2, date("Y"));
+							$sqlFltr = " t.`L_APPOITMENT_DATE`='' ";
+							break;
+					}
+				}
+				break;
+			case 'Access':
+				if ('SHOW' != $value && $this->isAccessFltrAllowed()) {
+					$userLogin = User::getLogin();
+					$usrAclGroups = User::getLdapGroupsNames();
+					$usrAclGroups[] = '';// TODO: allow empty for everyone?
+					$sqlUsrAclGroups = "'" . implode("','", $usrAclGroups) . "'";
+					$sqlFltr = "
+						t.`{$this->_fieldGroupWrite}` in({$sqlUsrAclGroups})
+						and t.`{$this->_fieldGroupRead}` in({$sqlUsrAclGroups})
+					";
+					if (array_key_exists('L_APPOITMENT_USER', $this->_cols)) {
+						$sqlFltr = "
+							(
+								({$sqlFltr})
+								or t.`L_APPOITMENT_USER`='{$userLogin}'
+							)
+						";
+					}
+				}
+-->
+					<!-- $sqlFltr = " t.`A_STATUS`='WAITING' "; -->
+					<!-- $sqlFltr = " t.`A_STATUS` in('NORMAL', 'WARNING') "; -->
+					<!-- $sqlFltr = " (t.`A_STATUS`='NORMAL' or t.`A_STATUS`='WARNING') "; -->
+						<!-- in('NORMAL', 'WARNING') -->
+<!-- ogc:Filter example:
+<ogc:Filter>
+		<ogc:And>
+				<ogc:Or>
+						<ogc:PropertyIsEqualTo>
+								<ogc:PropertyName>ID</ogc:PropertyName>
+								<ogc:Literal>98400005701</ogc:Literal>
+						</ogc:PropertyIsEqualTo>
+						<ogc:PropertyIsEqualTo>
+								<ogc:PropertyName>ID</ogc:PropertyName>
+								<ogc:Literal>-1</ogc:Literal>
+						</ogc:PropertyIsEqualTo>
+				</ogc:Or>
+				<ogc:And>
+						<ogc:PropertyIsLessThanOrEqualTo>
+								<ogc:PropertyName>MH_DATUM_INGANG</ogc:PropertyName>
+								<ogc:Literal>2015-02-27T00:00:00Z</ogc:Literal>
+						</ogc:PropertyIsLessThanOrEqualTo>
+						<ogc:Or>
+								<ogc:PropertyIsGreaterThanOrEqualTo>
+										<ogc:PropertyName>MH_DATUM_EINDE</ogc:PropertyName>
+										<ogc:Literal>2015-02-27T00:00:00Z</ogc:Literal>
+								</ogc:PropertyIsGreaterThanOrEqualTo>
+								<ogc:PropertyIsNull>
+										<ogc:PropertyName>MH_DATUM_EINDE</ogc:PropertyName>
+								</ogc:PropertyIsNull>
+						</ogc:Or>
+				</ogc:And>
+		</ogc:And>
+</ogc:Filter>
+-->
+
+	<xsl:template match="/">
+		<xsl:apply-templates select="ui_table:ui_table/ui_table:filters"/>
+	</xsl:template>
+
+	<xsl:template match="ui_table:filters">
+<xsl:value-of select="'&lt;?php'" />
+$filters = array();
+// DBG: template match="ui_table:filters"
+// DBG: element name = '<xsl:value-of select="local-name()" />'
+// DBG: element name = '<xsl:value-of select="name(.)" />'
+<xsl:apply-templates select="ui_table:filter"/>
+
+// TODO: DBG $filters
+print_r($filters);
+
+	</xsl:template>
+<!--
+<filters>
+		<filter>
+			<label>Status</label>
+			<icon>question-sign</icon>
+			<name>sf_Status</name>
+			<filter_buttons>
+				<filter_button>
+					<name>OCZEKUJACY</name>
+					<value>WAITING</value>
+					<ogc:Filter>
+						<ogc:PropertyIsEqualTo>
+							<ogc:PropertyName>A_STATUS</ogc:PropertyName>
+							<ogc:Literal>WAITING</ogc:Literal>
+						</ogc:PropertyIsEqualTo>
+					</ogc:Filter>
+				</filter_button>
+				<filter_button>
+					<name>AKTYWNI</name>
+					<value>AKTYWNI</value>
+					<ogc:Filter>
+						<ogc:Or>
+							<ogc:PropertyIsEqualTo>
+								<ogc:PropertyName>A_STATUS</ogc:PropertyName>
+								<ogc:Literal>NORMAL</ogc:Literal>
+							</ogc:PropertyIsEqualTo>
+						</ogc:Or>
+						<ogc:Or>
+							<ogc:PropertyIsEqualTo>
+								<ogc:PropertyName>A_STATUS</ogc:PropertyName>
+								<ogc:Literal>WARNING</ogc:Literal>
+							</ogc:PropertyIsEqualTo>
+						</ogc:Or>
+					</ogc:Filter>
+-->
+	<xsl:template match="ui_table:filter">
+// DBG: template match="ui_table:filter"
+$filters['<xsl:value-of select="ui_table:name" />']['label']="<xsl:value-of select="ui_table:label" />";
+$filters['<xsl:value-of select="ui_table:name" />']['icon']="<xsl:value-of select="ui_table:icon" />";
+$filterButtons = array();
+<xsl:apply-templates select="ui_table:filter_buttons/ui_table:filter_button"/>
+$filters['<xsl:value-of select="ui_table:name" />']['buttons'] = $filterButtons;
+	</xsl:template>
+
+	<xsl:template match="ui_table:filter_button">
+// DBG: template match="ui_table:filter_button"
+$filterButtons['<xsl:value-of select="ui_table:value" />'] = array();
+$filterButtons['<xsl:value-of select="ui_table:value" />']['label']="<xsl:value-of select="ui_table:name" />";
+<!-- TODO: sql filter -->
+$filterButtons['<xsl:value-of select="ui_table:value" />']['sqlFilter']=&lt;&lt;&lt;END_OF_SQL_FILTER
+<xsl:apply-templates select="ogc:Filter"/>
+END_OF_SQL_FILTER;
+	</xsl:template>
+
+	<xsl:template match="ogc:Filter">
+// DBG: template match="ogc:Filter"
+<xsl:apply-templates/>
+	</xsl:template>
+
+	<xsl:template match="ogc:Or">
+// DBG: template match="ogc:Or"
+		or (
+<xsl:apply-templates/>
+		)
+	</xsl:template>
+
+	<xsl:template match="ogc:And">
+// DBG: template match="ogc:And"
+		and (
+<xsl:apply-templates/>
+		)
+	</xsl:template>
+
+<!--
+							<ogc:PropertyIsEqualTo>
+								<ogc:PropertyName>A_STATUS</ogc:PropertyName>
+								<ogc:Literal>NORMAL</ogc:Literal>
+							</ogc:PropertyIsEqualTo>
+-->
+<!-- TODO: sql variable for table prefix (t) -->
+	<xsl:template match="ogc:PropertyIsEqualTo">
+// DBG: template match="ogc:PropertyIsEqualTo"
+			t.<xsl:value-of select="ogc:PropertyName" />='<xsl:value-of select="ogc:Literal" />'
+	</xsl:template>
+
+</xsl:stylesheet>