| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- <?php
- require_once dirname(__FILE__) . '/../../se-lib/bootstrap.php';
- Lib::loadClass('SqlQueryWhereBuilder');
- function convertGuiXmlToCmdList($guiXmlString, $convertGuiXslString) {
- $requestXml = new DOMDocument();
- $requestXml->loadXml($guiXmlString);
- $convertGuiXsl = new DOMDocument();
- $convertGuiXsl->loadXml($convertGuiXslString);
- $proc = new XSLTProcessor();
- $proc->importStylesheet($convertGuiXsl);
- return $proc->transformToXML($requestXml);
- }
- $guiXmlString = file_get_contents('default_db/test_perms.gui.xml');
- $convertGuiXslString = file_get_contents('convertGuiXmlToFiltersXML.xsl');
- $convertedGuiXml = convertGuiXmlToCmdList($guiXmlString, $convertGuiXslString);
- /*
- <?xml version="1.0"?>
- <ui_filter name="sf_Status" label="Status" icon="question-sign">
- <ui_filter_button value="WAITING" label="OCZEKUJACY">
- <sql_filter_comparisonFieldToValue fieldName="A_STATUS" comparisonSign="=" value="WAITING"/>
- </ui_filter_button>
- <ui_filter_button value="AKTYWNI" label="AKTYWNI">
- <sql_filter_openBlock type="or"/>
- <sql_filter_comparisonFieldToValue fieldName="A_STATUS" comparisonSign="=" value="NORMAL"/>
- <sql_filter_comparisonFieldToValue fieldName="A_STATUS" comparisonSign="=" value="WARNING"/>
- <sql_filter_closeBlock type="or"/>
- </ui_filter_button>
- </ui_filter>
- */
- echo "L." . __LINE__ . ": convertedGuiXml:\n{$convertedGuiXml}\n----------------------------------------\n";
- $DBG = true;
- $tags = array();
- $parserXml = xml_parser_create();
- xml_parser_set_option($parserXml, XML_OPTION_CASE_FOLDING, 0);
- xml_parser_set_option($parserXml, XML_OPTION_SKIP_WHITE, 1);
- if (0 == xml_parse_into_struct($parserXml, $convertedGuiXml, $tags)) {
- throw new Exception("Parse Request xml error #" . __LINE__ . ": parse converted transaction failed");
- }
- xml_parser_free($parserXml);
- if (empty($tags)) {
- throw new Exception("Parse Request xml error #" . __LINE__ . ": parse converted transaction returns empty structure");
- }
- // [{"tag":"ui_filter","type":"open","level":1,"attributes":{"name":"sf_Status","label":"Status","icon":"question-sign"}}
- // ,{"tag":"ui_filter_button","type":"open","level":2,"attributes":{"value":"WAITING","label":"OCZEKUJACY"}}
- // ,{"tag":"sql_filter_comparisonFieldToValue","type":"complete","level":3,"attributes":{"fieldName":"A_STATUS","comparisonSign":"=","value":"WAITING"}}
- // ,{"tag":"ui_filter_button","type":"close","level":2}
- // ,{"tag":"ui_filter_button","type":"open","level":2,"attributes":{"value":"AKTYWNI","label":"AKTYWNI"}}
- // ,{"tag":"sql_filter_openBlock","type":"complete","level":3,"attributes":{"type":"or"}}
- // ,{"tag":"sql_filter_comparisonFieldToValue","type":"complete","level":3,"attributes":{"fieldName":"A_STATUS","comparisonSign":"=","value":"NORMAL"}}
- // ,{"tag":"sql_filter_comparisonFieldToValue","type":"complete","level":3,"attributes":{"fieldName":"A_STATUS","comparisonSign":"=","value":"WARNING"}}
- // ,{"tag":"sql_filter_closeBlock","type":"complete","level":3,"attributes":{"type":"or"}}
- // ,{"tag":"ui_filter_button","type":"close","level":2}
- // ,{"tag":"ui_filter","type":"close","level":1}]
- if($DBG){echo "L." . __LINE__ . ": tags\n" . json_encode($tags) . "\n";}
- $filters = array();
- $filter = null;
- $filterButton = null;
- foreach ($tags as $tag) {
- switch ($tag['tag']) {
- case 'ui_filter': {
- if ('open' == $tag['type']) {
- $filter = new stdClass();
- $filter->name = V::get('name', '', $tag['attributes']);
- $filter->label = V::get('label', '', $tag['attributes']);
- $filter->icon = V::get('icon', '', $tag['attributes']);
- $filter->buttons = array();
- if (empty($filter->name)) throw new Exception("Empty root tag name #" . __LINE__);
- } else if ('close' == $tag['type']) {
- $filters[$filter->name] = $filter;
- } else throw new Exception("Wrong ui_filter tag type");
- }
- break;
- case 'ui_filter_button': {
- if ('open' == $tag['type']) {
- $filterButton = new stdClass();
- $filterButton->name = V::get('value', '', $tag['attributes']);
- $filterButton->label = V::get('label', '', $tag['attributes']);
- $filterButton->queryWhere = new SqlQueryWhereBuilder();
- if (empty($filterButton->name)) throw new Exception("Empty root tag name #" . __LINE__);
- } else if ('close' == $tag['type']) {
- //$filterButton->rawQueryWhere = $filterButton->queryWhere->getQueryWhere();
- $filter->buttons[$filterButton->name] = $filterButton;
- } else throw new Exception("Wrong ui_filter tag typ");
- }
- break;
- case 'sql_filter_comparisonFieldToValue': {
- $fieldName = V::get('fieldName', '', $tag['attributes']);
- $comparisonSign = V::get('comparisonSign', '', $tag['attributes']);
- $value = V::get('value', '', $tag['attributes']);
- $filterButton->queryWhere->addComparisonFieldToValue($fieldName, $comparisonSign, $value);
- }
- break;
- case 'sql_filter_openBlock': {
- $blockType = V::get('type', '', $tag['attributes']);
- echo "L." . __LINE__ . ": sql_filter_openBlock block Type {$blockType} attrs = " . json_encode($tag) . "\n";
- $filterButton->queryWhere->openBlock($blockType);
- }
- break;
- case 'sql_filter_closeBlock': {
- $blockType = V::get('type', '', $tag['attributes']);
- $filterButton->queryWhere->closeBlock($blockType);
- }
- break;
- default: {
- echo "L." . __LINE__ . ": filter = "; print_r($filter);
- echo "L." . __LINE__ . ": filterButton = "; print_r($filterButton);
- echo "L." . __LINE__ . ": filters = "; print_r($filters);
- throw new Exception("TODO: tag {$tag['tag']}");
- }
- }
- }
- foreach ($filters as $filter) {
- foreach ($filter->buttons as $filterButton) {
- $filterButton->queryWhere->parseQueryWhere();
- echo "L." . __LINE__ . ": Filter({$filter->name}) Button({$filterButton->name}) Used Fields: [" . implode(",", $filterButton->queryWhere->getUsedFields()) . "]\n";
- }
- }
- echo "L." . __LINE__ . ": filters = "; print_r($filters);
|