Exemplo n.º 1
0
//
if (!canEdit('Events')) {
    $view = "error";
    return;
}
$selectName = "filterName";
$newSelectName = "new" . ucfirst($selectName);
foreach (dbFetchAll("select * from Filters order by Name") as $row) {
    $filterNames[$row['Name']] = $row['Name'];
    if ($_REQUEST['filterName'] == $row['Name']) {
        $filterData = $row;
    }
}
$focusWindow = true;
$filter = $_REQUEST['filter'];
parseFilter($filter);
xhtmlHeaders(__FILE__, translate('SaveFilter'));
?>
<body>
  <div id="page">
    <div id="header">
      <h2><?php 
echo translate('SaveFilter');
?>
</h2>
    </div>
    <div id="content">
      <form name="contentForm" id="contentForm" method="post" action="<?php 
echo $_SERVER['PHP_SELF'];
?>
">
Exemplo n.º 2
0
}
if (!empty($_REQUEST['execute'])) {
    executeFilter($tempFilterName);
}
$countSql = 'SELECT count(E.Id) AS EventCount FROM Monitors AS M INNER JOIN Events AS E ON (M.Id = E.MonitorId) WHERE';
$eventsSql = 'SELECT E.Id,E.MonitorId,M.Name AS MonitorName,M.DefaultScale,E.Name,E.Width,E.Height,E.Cause,E.Notes,E.StartTime,E.Length,E.Frames,E.AlarmFrames,E.TotScore,E.AvgScore,E.MaxScore,E.Archived FROM Monitors AS M INNER JOIN Events AS E on (M.Id = E.MonitorId) WHERE';
if ($user['MonitorIds']) {
    $user_monitor_ids = ' M.Id in (' . $user['MonitorIds'] . ')';
    $countSql .= $user_monitor_ids;
    $eventsSql .= $user_monitor_ids;
} else {
    $countSql .= " 1";
    $eventsSql .= " 1";
}
parseSort();
parseFilter($_REQUEST['filter']);
$filterQuery = $_REQUEST['filter']['query'];
if ($_REQUEST['filter']['sql']) {
    $countSql .= $_REQUEST['filter']['sql'];
    $eventsSql .= $_REQUEST['filter']['sql'];
}
$eventsSql .= " ORDER BY {$sortColumn} {$sortOrder}";
if (isset($_REQUEST['page'])) {
    $page = validInt($_REQUEST['page']);
} else {
    $page = 0;
}
if (isset($_REQUEST['limit'])) {
    $limit = validInt($_REQUEST['limit']);
} else {
    $limit = 0;
Exemplo n.º 3
0
function getNearEvents()
{
    global $user, $sortColumn, $sortOrder;
    $eventId = $_REQUEST['id'];
    $event = dbFetchOne('select * from Events where Id = ?', NULL, array($eventId));
    parseFilter($_REQUEST['filter']);
    parseSort();
    if ($user['MonitorIds']) {
        $midSql = " and MonitorId in (" . join(",", preg_split('/["\'\\s]*,["\'\\s]*/', $user['MonitorIds'])) . ")";
    } else {
        $midSql = '';
    }
    $sql = "select E.* from Events as E inner join Monitors as M on E.MonitorId = M.Id where {$sortColumn} " . ($sortOrder == 'asc' ? '<=' : '>=') . " '" . $event[$_REQUEST['sort_field']] . "'" . $_REQUEST['filter']['sql'] . $midSql . " order by {$sortColumn} " . ($sortOrder == 'asc' ? 'desc' : 'asc');
    $result = dbQuery($sql);
    while ($id = dbFetchNext($result, 'Id')) {
        if ($id == $eventId) {
            $prevEvent = dbFetchNext($result);
            break;
        }
    }
    $sql = "select E.* from Events as E inner join Monitors as M on E.MonitorId = M.Id where {$sortColumn} " . ($sortOrder == 'asc' ? '>=' : '<=') . " '" . $event[$_REQUEST['sort_field']] . "'" . $_REQUEST['filter']['sql'] . $midSql . " order by {$sortColumn} {$sortOrder}";
    $result = dbQuery($sql);
    while ($id = dbFetchNext($result, 'Id')) {
        if ($id == $eventId) {
            $nextEvent = dbFetchNext($result);
            break;
        }
    }
    $result = array('EventId' => $eventId);
    $result['PrevEventId'] = empty($prevEvent) ? 0 : $prevEvent['Id'];
    $result['NextEventId'] = empty($nextEvent) ? 0 : $nextEvent['Id'];
    $result['PrevEventDefVideoPath'] = empty($prevEvent) ? 0 : getEventDefaultVideoPath($prevEvent);
    $result['NextEventDefVideoPath'] = empty($nextEvent) ? 0 : getEventDefaultVideoPath($nextEvent);
    return $result;
}
Exemplo n.º 4
0
function parseFilter($filter, $table, $operator = "=")
{
    global $postgisObject;
    global $postgisschema;
    global $srs;
    $table = dropAllNameSpaces($table);
    //die($table);
    $st = \app\inc\Model::explodeTableName($table);
    if (!$st['schema']) {
        $st['schema'] = $postgisschema;
    }
    $primeryKey = $postgisObject->getPrimeryKey($st['schema'] . "." . $st['table']);
    $serializer_options = array('indent' => '  ');
    $Serializer =& new XML_Serializer($serializer_options);
    if (!is_array($filter[0]) && isset($filter) && !(isset($filter['And']) or isset($filter['Or']) or isset($filter['Not']))) {
        $filter = array(0 => $filter);
    }
    $sridOfTable = $postgisObject->getGeometryColumns($table, "srid");
    $i = 0;
    foreach ($filter as $key => $arr) {
        if ($key == "And" || $key == "Or") {
            $BoolOperator = $key;
        }
        if (isset($arr['Not'])) {
            //$where[] = parseFilter($arr['Not'],$table,"<>");
        }
        if (isset($arr['And']) || isset($arr['Or'])) {
            // Recursive call
            $where[] = parseFilter($arr, $table);
        }
        // PropertyIsEqualTo
        $arr['PropertyIsEqualTo'] = addDiminsionOnArray($arr['PropertyIsEqualTo']);
        if (is_array($arr['PropertyIsEqualTo'])) {
            foreach ($arr['PropertyIsEqualTo'] as $value) {
                $where[] = $value['PropertyName'] . "=" . $postgisObject->quote($value['Literal']);
            }
        }
        // PropertyIsNotEqualTo
        $arr['PropertyIsNotEqualTo'] = addDiminsionOnArray($arr['PropertyIsNotEqualTo']);
        if (is_array($arr['PropertyIsNotEqualTo'])) {
            foreach ($arr['PropertyIsNotEqualTo'] as $value) {
                $where[] = $value['PropertyName'] . "<>'" . $value['Literal'] . "'";
            }
        }
        // PropertyIsLessThan
        $arr['PropertyIsLessThan'] = addDiminsionOnArray($arr['PropertyIsLessThan']);
        if (is_array($arr['PropertyIsLessThan'])) {
            foreach ($arr['PropertyIsLessThan'] as $value) {
                $where[] = $value['PropertyName'] . "<'" . $value['Literal'] . "'";
            }
        }
        // PropertyIsGreaterThan
        $arr['PropertyIsGreaterThan'] = addDiminsionOnArray($arr['PropertyIsGreaterThan']);
        if (is_array($arr['PropertyIsGreaterThan'])) {
            foreach ($arr['PropertyIsGreaterThan'] as $value) {
                $where[] = $value['PropertyName'] . ">'" . $value['Literal'] . "'";
            }
        }
        // PropertyIsLessThanOrEqualTo
        $arr['PropertyIsLessThanOrEqualTo'] = addDiminsionOnArray($arr['PropertyIsLessThanOrEqualTo']);
        if (is_array($arr['PropertyIsLessThanOrEqualTo'])) {
            foreach ($arr['PropertyIsLessThanOrEqualTo'] as $value) {
                $where[] = $value['PropertyName'] . "<='" . $value['Literal'] . "'";
            }
        }
        //PropertyIsGreaterThanOrEqualTo
        $arr['PropertyIsGreaterThanOrEqualTo'] = addDiminsionOnArray($arr['PropertyIsGreaterThanOrEqualTo']);
        if (is_array($arr['PropertyIsGreaterThanOrEqualTo'])) {
            foreach ($arr['PropertyIsGreaterThanOrEqualTo'] as $value) {
                $where[] = $value['PropertyName'] . ">='" . $value['Literal'] . "'";
            }
        }
        //PropertyIsLike
        $arr['PropertyIsLike'] = addDiminsionOnArray($arr['PropertyIsLike']);
        if (is_array($arr['PropertyIsLike'])) {
            foreach ($arr['PropertyIsLike'] as $value) {
                $where[] = $value['PropertyName'] . " LIKE '%" . $value['Literal'] . "%'";
            }
        }
        //PropertyIsBetween
        $arr['PropertyIsBetween'] = addDiminsionOnArray($arr['PropertyIsBetween']);
        if (is_array($arr['PropertyIsBetween'])) {
            foreach ($arr['PropertyIsBetween'] as $value) {
                if ($value['LowerBoundary']) {
                    $w[] = $value['PropertyName'] . " > '" . $value['LowerBoundary']['Literal'] . "'";
                }
                if ($value['UpperBoundary']) {
                    $w[] = $value['PropertyName'] . " < '" . $value['UpperBoundary']['Literal'] . "'";
                }
            }
            $where[] = implode(" AND ", $w);
        }
        // FeatureID
        if (!is_array($arr['FeatureId'][0]) && isset($arr['FeatureId'])) {
            $arr['FeatureId'] = array(0 => $arr['FeatureId']);
        }
        if (is_array($arr['FeatureId'])) {
            foreach ($arr['FeatureId'] as $value) {
                $value['fid'] = preg_replace("/{$table}\\./", "", $value['fid']);
                // remove table name
                $where[] = "{$primeryKey['attname']}=" . $value['fid'];
            }
        }
        // GmlObjectId
        $arr['GmlObjectId'] = addDiminsionOnArray($arr['GmlObjectId']);
        if (is_array($arr['GmlObjectId'])) {
            foreach ($arr['GmlObjectId'] as $value) {
                $value['id'] = preg_replace("/{$table}\\./", "", $value['id']);
                // remove table name
                $where[] = "{$primeryKey['attname']}=" . $value['id'];
            }
        }
        //Intersects
        $arr['Intersects'] = addDiminsionOnArray($arr['Intersects']);
        if (is_array($arr['Intersects'])) {
            foreach ($arr['Intersects'] as $value) {
                $status = $Serializer->serialize($value);
                $gmlCon = new gmlConverter();
                //logfile::write($Serializer->getSerializedData()."\n\n");
                $wktArr = $gmlCon->gmlToWKT($Serializer->getSerializedData(), array());
                $sridOfFilter = $wktArr[1][0];
                if (!$sridOfFilter) {
                    $sridOfFilter = $srs;
                }
                // If no filter on BBOX we think it must be same as the requested srs
                if (!$sridOfFilter) {
                    $sridOfFilter = $sridOfTable;
                }
                // If still no filter on BBOX we set it to native srs
                $where[] = "ST_Intersects" . "(public.ST_Transform(public.ST_GeometryFromText('" . $wktArr[0][0] . "'," . $sridOfFilter . "),{$sridOfTable})," . $value['PropertyName'] . ")";
                unset($gmlCon);
                unset($wktArr);
            }
        }
        //BBox
        if ($arr['BBOX']) {
            if (is_array($arr['BBOX']['Box']['coordinates'])) {
                $arr['BBOX']['Box']['coordinates']['_content'] = str_replace(" ", ",", $arr['BBOX']['Box']['coordinates']['_content']);
                $coordsArr = explode(",", $arr['BBOX']['Box']['coordinates']['_content']);
            } else {
                $arr['BBOX']['Box']['coordinates'] = str_replace(" ", ",", $arr['BBOX']['Box']['coordinates']);
                $coordsArr = explode(",", $arr['BBOX']['Box']['coordinates']);
            }
            if (is_array($arr['BBOX']['Box'])) {
                $sridOfFilter = gmlConverter::parseEpsgCode($arr['BBOX']['Box']['srsName']);
                $axisOrder = gmlConverter::getAxisOrderFromEpsg($arr['BBOX']['Box']['srsName']);
                if (!$sridOfFilter) {
                    $sridOfFilter = $srs;
                }
                // If no filter on BBOX we think it must be same as the requested srs
                if (!$sridOfFilter) {
                    $sridOfFilter = $sridOfTable;
                }
                // If still no filter on BBOX we set it to native srs
            }
            if (is_array($arr['BBOX']['Envelope'])) {
                $coordsArr = array_merge(explode(" ", $arr['BBOX']['Envelope']['lowerCorner']), explode(" ", $arr['BBOX']['Envelope']['upperCorner']));
                ob_start();
                print_r($arr['BBOX']['Envelope']);
                print_r($coordsArr);
                $data = ob_get_clean();
                //logfile::write($data);
                $sridOfFilter = gmlConverter::parseEpsgCode($arr['BBOX']['Envelope']['srsName']);
                $axisOrder = gmlConverter::getAxisOrderFromEpsg($arr['BBOX']['Envelope']['srsName']);
                if (!$sridOfFilter) {
                    $sridOfFilter = $srs;
                }
                // If no filter on BBOX we think it must be same as the requested srs
                if (!$sridOfFilter) {
                    $sridOfFilter = $sridOfTable;
                }
                // If still no filter on BBOX we set it to native srs
            }
            if ($axisOrder == "longitude") {
                $where[] = "ST_Intersects" . "(public.ST_Transform(public.ST_GeometryFromText('POLYGON((" . $coordsArr[0] . " " . $coordsArr[1] . "," . $coordsArr[0] . " " . $coordsArr[3] . "," . $coordsArr[2] . " " . $coordsArr[3] . "," . $coordsArr[2] . " " . $coordsArr[1] . "," . $coordsArr[0] . " " . $coordsArr[1] . "))'," . $sridOfFilter . "),{$sridOfTable})," . "\"" . ($arr['BBOX']['PropertyName'] ?: $postgisObject->getGeometryColumns($table, "f_geometry_column")) . "\")";
            } else {
                $where[] = "ST_Intersects" . "(public.ST_Transform(public.ST_GeometryFromText('POLYGON((" . $coordsArr[1] . " " . $coordsArr[0] . "," . $coordsArr[3] . " " . $coordsArr[0] . "," . $coordsArr[3] . " " . $coordsArr[2] . "," . $coordsArr[1] . " " . $coordsArr[2] . "," . $coordsArr[1] . " " . $coordsArr[0] . "))'," . $sridOfFilter . "),{$sridOfTable})," . "\"" . ($arr['BBOX']['PropertyName'] ?: $postgisObject->getGeometryColumns($table, "f_geometry_column")) . "\")";
            }
            /*$where[] = "public.ST_Transform(public.ST_GeometryFromText('POLYGON((".$coordsArr[0]." ".$coordsArr[1].",".$coordsArr[0]." ".$coordsArr[3].",".$coordsArr[2]." ".$coordsArr[3].",".$coordsArr[2]." ".$coordsArr[1].",".$coordsArr[0]." ".$coordsArr[1]."))',"
              .$sridOfFilter
              ."),$sridOfTable) && ".$arr['BBOX']['PropertyName'];*/
        }
        // End of filter parsing
        $i++;
    }
    ob_start();
    print_r($where);
    ob_get_clean();
    if (!$BoolOperator) {
        $BoolOperator = "OR";
    }
    return "(" . implode(" " . $BoolOperator . " ", $where) . ")";
}
Exemplo n.º 5
0
/**
 *
 *
 * @param unknown $arr
 * @return unknown
 */
function parseFilter($filter, $table, $operator = "=")
{
    global $postgisObject;
    global $postgisschema;
    //global $forUseInSpatialFilter;
    global $srs;
    $st = postgis::explodeTableName($table);
    if (!$st['schema']) {
        $st['schema'] = $postgisschema;
    }
    $primeryKey = $postgisObject->getPrimeryKey($st['schema'] . "." . $st['table']);
    $serializer_options = array('indent' => '  ');
    $Serializer =& new XML_Serializer($serializer_options);
    if (!is_array($filter[0]) && isset($filter) && !(isset($filter['And']) or isset($filter['Or']) or isset($filter['Not']))) {
        $filter = array(0 => $filter);
    }
    $sridOfTable = $postgisObject->getGeometryColumns($table, "srid");
    $i = 0;
    foreach ($filter as $key => $arr) {
        if ($key == "And" || $key == "Or") {
            $BoolOperator = $key;
        }
        if (isset($arr['Not'])) {
            //$where[] = parseFilter($arr['Not'],$table,"<>");
        }
        if (isset($arr['And']) || isset($arr['Or'])) {
            // Recursive call
            $where[] = parseFilter($arr, $table);
        }
        // PropertyIsEqualTo
        $arr['PropertyIsEqualTo'] = addDiminsionOnArray($arr['PropertyIsEqualTo']);
        if (is_array($arr['PropertyIsEqualTo'])) {
            foreach ($arr['PropertyIsEqualTo'] as $value) {
                $where[] = $value['PropertyName'] . "=" . $postgisObject->quote($value['Literal']);
            }
        }
        // PropertyIsNotEqualTo
        $arr['PropertyIsNotEqualTo'] = addDiminsionOnArray($arr['PropertyIsNotEqualTo']);
        if (is_array($arr['PropertyIsNotEqualTo'])) {
            foreach ($arr['PropertyIsNotEqualTo'] as $value) {
                $where[] = $value['PropertyName'] . "<>'" . $value['Literal'] . "'";
            }
        }
        // FeatureID
        if (!is_array($arr['FeatureId'][0]) && isset($arr['FeatureId'])) {
            $arr['FeatureId'] = array(0 => $arr['FeatureId']);
        }
        if (is_array($arr['FeatureId'])) {
            foreach ($arr['FeatureId'] as $value) {
                $value['fid'] = preg_replace("/{$table}\\./", "", $value['fid']);
                // remove table name
                $where[] = "{$primeryKey['attname']}=" . $value['fid'];
            }
        }
        // GmlObjectId
        $arr['GmlObjectId'] = addDiminsionOnArray($arr['GmlObjectId']);
        if (is_array($arr['GmlObjectId'])) {
            foreach ($arr['GmlObjectId'] as $value) {
                $value['id'] = preg_replace("/{$table}\\./", "", $value['id']);
                // remove table name
                $where[] = "{$primeryKey['attname']}=" . $value['id'];
            }
        }
        //Intersects
        $arr['Intersects'] = addDiminsionOnArray($arr['Intersects']);
        if (is_array($arr['Intersects'])) {
            foreach ($arr['Intersects'] as $value) {
                $status = $Serializer->serialize($value);
                $gmlCon = new gmlConverter();
                //logfile::write($Serializer->getSerializedData()."\n\n");
                $wktArr = $gmlCon->gmlToWKT($Serializer->getSerializedData(), array());
                $sridOfFilter = $wktArr[1][0];
                if (!$sridOfFilter) {
                    $sridOfFilter = $srs;
                }
                // If no filter on BBOX we think it must be same as the requested srs
                if (!$sridOfFilter) {
                    $sridOfFilter = $sridOfTable;
                }
                // If still no filter on BBOX we set it to native srs
                $where[] = "intersects" . "(public.transform(public.GeometryFromText('" . $wktArr[0][0] . "'," . $sridOfFilter . "),{$sridOfTable})," . $value['PropertyName'] . ")";
                unset($gmlCon);
                unset($wktArr);
            }
        }
        //BBox
        if ($arr['BBOX']) {
            if (is_array($arr['BBOX']['Box']['coordinates'])) {
                $arr['BBOX']['Box']['coordinates']['_content'] = str_replace(" ", ",", $arr['BBOX']['Box']['coordinates']['_content']);
                $coordsArr = explode(",", $arr['BBOX']['Box']['coordinates']['_content']);
            } else {
                $arr['BBOX']['Box']['coordinates'] = str_replace(" ", ",", $arr['BBOX']['Box']['coordinates']);
                $coordsArr = explode(",", $arr['BBOX']['Box']['coordinates']);
            }
            $sridOfFilter = gmlConverter::parseEpsgCode($arr['BBOX']['Box']['srsName']);
            if (!$sridOfFilter) {
                $sridOfFilter = $srs;
            }
            // If no filter on BBOX we think it must be same as the requested srs
            if (!$sridOfFilter) {
                $sridOfFilter = $sridOfTable;
            }
            // If still no filter on BBOX we set it to native srs
            /*
            			$coordsArr[0] = floor($coordsArr[0]/1000)*1000;
            			$coordsArr[1] = floor($coordsArr[1]/1000)*1000;
            			$coordsArr[2] = ceil($coordsArr[2]/1000)*1000;
            			$coordsArr[3] = ceil($coordsArr[3]/1000)*1000;
            */
            $where[] = "intersects" . "(public.transform(public.GeometryFromText('POLYGON((" . $coordsArr[0] . " " . $coordsArr[1] . "," . $coordsArr[0] . " " . $coordsArr[3] . "," . $coordsArr[2] . " " . $coordsArr[3] . "," . $coordsArr[2] . " " . $coordsArr[1] . "," . $coordsArr[0] . " " . $coordsArr[1] . "))'," . $sridOfFilter . "),{$sridOfTable})," . $arr['BBOX']['PropertyName'] . ")";
        }
        // End of filter parsing
        $i++;
    }
    if (!$BoolOperator) {
        $BoolOperator = "OR";
    }
    return "(" . implode(" " . $BoolOperator . " ", $where) . ")";
}
Exemplo n.º 6
0
function parseTreeToQuery($tree)
{
    $filter = parseTreeToFilter($tree);
    parseFilter($filter, false, '&');
    return $filter['query'];
}
Exemplo n.º 7
0
function doParse($arr)
{
    global $postgisObject;
    global $user;
    global $version;
    global $postgisschema;
    global $parts;
    $serializer_options = array('indent' => '  ');
    $Serializer =& new XML_Serializer($serializer_options);
    foreach ($arr as $key => $featureMember) {
        if ($key == "Insert") {
            if (!is_array($featureMember[0]) && isset($featureMember)) {
                $featureMember = array(0 => $featureMember);
            }
            foreach ($featureMember as $hey) {
                foreach ($hey as $typeName => $feature) {
                    if (is_array($feature)) {
                        // Skip handles
                        foreach ($feature as $field => $value) {
                            $fields[] = $field;
                            if (is_array($value)) {
                                // Must be geom if array
                                // We serialize the geometry back to XML for parsing
                                $status = $Serializer->serialize($value);
                                logfile::write("GML " . $Serializer->getSerializedData() . "\n\n");
                                $gmlCon = new gmlConverter();
                                $wktArr = $gmlCon->gmlToWKT($Serializer->getSerializedData(), array());
                                $values[] = array("{$field}" => $wktArr[0][0], "srid" => $wktArr[1][0]);
                                unset($gmlCon);
                                unset($wktArr);
                                //logfile::write($Serializer->getSerializedData()."\n\n");
                            } else {
                                $values[] = pg_escape_string($value);
                            }
                        }
                        $forSql['tables'][] = $typeName;
                        $forSql['fields'][] = $fields;
                        $forSql['values'][] = $values;
                        $fields = array();
                        $values = array();
                        $field = "";
                        $value = "";
                        // Start HTTP basic authentication
                        //if(!$_SESSION["oauth_token"]) {
                        $auth = $postgisObject->getGeometryColumns($postgisschema . "." . $typeName, "authentication");
                        if ($auth == "Write" or $auth == "Read/write") {
                            include '../inc/http_basic_authen.php';
                        }
                        //	}
                        // End HTTP basic authentication
                    }
                }
            }
        }
        if ($key == "Update") {
            if (!is_array($featureMember[0]) && isset($featureMember)) {
                $featureMember = array(0 => $featureMember);
            }
            $fid = 0;
            foreach ($featureMember as $hey) {
                $the_geom = $postgisObject->getGeometryColumns($postgisschema . "." . $hey['typeName'], "f_geometry_column");
                if (!is_array($hey['Property'][0]) && isset($hey['Property'])) {
                    $hey['Property'] = array(0 => $hey['Property']);
                }
                foreach ($hey['Property'] as $pair) {
                    $fields[$fid][] = $pair['Name'];
                    if ($pair['Name'] == $the_geom) {
                        // We serialize the geometry back to XML for parsing
                        $status = $Serializer->serialize($pair['Value']);
                        logfile::write($Serializer->getSerializedData() . "\n\n");
                        $gmlCon = new gmlConverter();
                        $wktArr = $gmlCon->gmlToWKT($Serializer->getSerializedData(), array());
                        $values[$fid][] = array("{$pair['Name']}" => current($wktArr[0]), "srid" => current($wktArr[1]));
                        unset($gmlCon);
                        unset($wktArr);
                    } else {
                        $values[$fid][] = $pair['Value'];
                    }
                }
                $forSql2['tables'][$fid] = $hey['typeName'];
                $forSql2['fields'] = $fields;
                $forSql2['values'] = $values;
                $forSql2['wheres'][$fid] = parseFilter($hey['Filter'], $hey['typeName']);
                $fid++;
                // Start HTTP basic authentication
                //if(!$_SESSION["oauth_token"]) {
                $auth = $postgisObject->getGeometryColumns($postgisschema . "." . $hey['typeName'], "authentication");
                if ($auth == "Write" or $auth == "Read/write") {
                    include '../inc/http_basic_authen.php';
                }
                //	}
                // End HTTP basic authentication
            }
            $pair = array();
            $values = array();
            $fields = array();
        }
        if ($key == "Delete") {
            if (!is_array($featureMember[0]) && isset($featureMember)) {
                $featureMember = array(0 => $featureMember);
            }
            foreach ($featureMember as $hey) {
                $forSql3['tables'][] = $hey['typeName'];
                $forSql3['wheres'][] = parseFilter($hey['Filter'], $hey['typeName']);
                // Start HTTP basic authentication
                //if(!$_SESSION["oauth_token"]) {
                $auth = $postgisObject->getGeometryColumns($postgisschema . "." . $hey['typeName'], "authentication");
                if ($auth == "Write" or $auth == "Read/write") {
                    include '../inc/http_basic_authen.php';
                }
                //	}
                // End HTTP basic authentication
            }
        }
    }
    echo '<wfs:WFS_TransactionResponse
        version="1.0.0"
	service="WFS"
	xmlns:wfs="http://www.opengis.net/wfs"
	xmlns:ogc="http://www.opengis.net/ogc">';
    // First we loop through inserts
    if (sizeof($forSql['tables']) > 0) {
        for ($i = 0; $i < sizeof($forSql['tables']); $i++) {
            if ($postgisObject->getGeometryColumns($postgisschema . "." . $forSql['tables'][$i], "editable")) {
                $the_geom = $postgisObject->getGeometryColumns($postgisschema . "." . $forSql['tables'][$i], "f_geometry_column");
                $primeryKey = $postgisObject->getPrimeryKey($postgisschema . "." . $forSql['tables'][$i]);
                //$metaData = $postgisObject -> getMetaData($forSql['tables'][$i]);
                $sql = "INSERT into {$postgisschema}.{$forSql['tables'][$i]} (";
                foreach ($forSql['fields'][$i] as $field) {
                    $fields[] = "\"" . $field . "\"";
                }
                $sql .= implode(",", $fields);
                unset($fields);
                $sql .= ") VALUES(";
                foreach ($forSql['values'][$i] as $key => $value) {
                    if (is_array($value)) {
                        fb($forSql['fields'][$i][$key]);
                        $values[] = "public.ST_Transform(public.ST_GeometryFromText('" . current($value) . "'," . next($value) . ")," . $postgisObject->getGeometryColumns($postgisschema . "." . $forSql['tables'][$i], "srid") . ")";
                    } elseif (!$value) {
                        $values[] = "NULL";
                    } else {
                        $values[] = $postgisObject->quote($value);
                    }
                }
                $sql .= implode(",", $values);
                unset($values);
                $sql .= ") RETURNING {$primeryKey['attname']} as gid,public.ST_AsText(public.ST_Centroid({$the_geom})) as {$the_geom};";
                // The query will return the new key
                $sqls['insert'][] = $sql;
            } else {
                $notEditable[$forSql['tables'][0]] = true;
            }
        }
    }
    // Second we loop through updates
    if (sizeof($forSql2['tables']) > 0) {
        for ($i = 0; $i < sizeof($forSql2['tables']); $i++) {
            //$metaData = $postgisObject -> getMetaData($forSql2['tables'][$i]);
            if ($postgisObject->getGeometryColumns($postgisschema . "." . $forSql2['tables'][$i], "editable")) {
                $the_geom = $postgisObject->getGeometryColumns($postgisschema . "." . $forSql2['tables'][$i], "f_geometry_column");
                $primeryKey = $postgisObject->getPrimeryKey($postgisschema . "." . $forSql2['tables'][$i]);
                $sql = "UPDATE {$postgisschema}.{$forSql2['tables'][$i]} SET ";
                foreach ($forSql2['fields'][$i] as $key => $field) {
                    if (is_array($forSql2['values'][$i][$key])) {
                        // is geometry
                        fb($forSql2['fields'][$i][$key]);
                        $value = "public.ST_Transform(public.ST_GeometryFromText('" . current($forSql2['values'][$i][$key]) . "'," . next($forSql2['values'][$i][$key]) . ")," . $postgisObject->getGeometryColumns($postgisschema . "." . $forSql2['tables'][$i], "srid") . ")";
                    } elseif (!$forSql2['values'][$i][$key]) {
                        $value = "NULL";
                    } else {
                        $value = $postgisObject->quote($forSql2['values'][$i][$key]);
                        // We need to escape the string
                    }
                    if (!is_array($forSql2['values'][$i][$key])) {
                        // is not geometry. Adding "" around field names
                        $pairs[] = "\"" . $field . "\"=" . $value;
                    } else {
                        $pairs[] = $field . "=" . $value;
                    }
                }
                $sql .= implode(",", $pairs);
                $sql .= " WHERE {$forSql2['wheres'][$i]} RETURNING {$primeryKey['attname']} as gid,public.ST_AsText(public.ST_Centroid({$the_geom})) as {$the_geom};";
                unset($pairs);
                $sqls['update'][] = $sql;
            } else {
                $notEditable[$forSql2['tables'][0]] = true;
            }
        }
    }
    // Third we loop through deletes
    if (sizeof($forSql3['tables']) > 0) {
        for ($i = 0; $i < sizeof($forSql3['tables']); $i++) {
            if ($postgisObject->getGeometryColumns($postgisschema . "." . $forSql3['tables'][$i], "editable")) {
                $sqls['delete'][] = "DELETE FROM {$postgisschema}.{$forSql3['tables'][$i]} WHERE {$forSql3['wheres'][$i]};\n\n";
            } else {
                $notEditable[$forSql3['tables'][0]] = true;
            }
        }
    }
    // We start sql BEGIN block
    $postgisObject->connect("PDO");
    $postgisObject->begin();
    // We fire the sqls
    if (isset($sqls)) {
        foreach ($sqls as $operation => $sql) {
            foreach ($sql as $singleSql) {
                if ($operation == "insert" || $operation == "update") {
                    $results[$operation][] = $postgisObject->execQuery($singleSql, "PDO", "select");
                    // Returning PDOStatement object
                } else {
                    $results[$operation] += $postgisObject->execQuery($singleSql, "PDO", "transaction");
                    // Returning interger
                }
                logfile::write("Sqls fired\n");
                logfile::write("{$singleSql}\n");
            }
        }
    }
    // If a layer is not editable, PDOerror is set.
    if (sizeof($notEditable) > 0) {
        $postgisObject->PDOerror[0] = "Layer not editable";
    }
    // WFS message
    echo '<wfs:Message>';
    echo '</wfs:Message>';
    // TransactionResult
    if (sizeof($postgisObject->PDOerror) == 0) {
        echo '<wfs:TransactionResult><wfs:Status><wfs:SUCCESS/></wfs:Status></wfs:TransactionResult>';
        $postgisObject->commit();
    } else {
        echo '<wfs:TransactionResult><wfs:Status><wfs:FAILURE/></wfs:Status></wfs:TransactionResult>';
        logfile::write("Error in\n");
        foreach ($postgisObject->PDOerror as $str) {
            logfile::write("{$str}\n");
        }
        logfile::write("ROLLBACK\n");
        $postgisObject->rollback();
        $results['insert'] = NULL;
        // Was object
        $results['update'] = NULL;
        // Was object
        $results['delete'] = 0;
        makeExceptionReport($postgisObject->PDOerror);
        // This output a exception and kills the script
    }
    // InsertResult
    if (sizeof($results['insert']) > 0) {
        reset($forSql['tables']);
        echo '<wfs:InsertResults handle="mygeocloud-WFS-default-handle">';
        foreach ($results['insert'] as $res) {
            echo '<ogc:FeatureId fid="';
            echo current($forSql['tables']) . ".";
            $row = $postgisObject->fetchRow($res);
            echo $row['gid'];
            echo '"/>';
            //$version->set(current($forSql['tables']),"insert",$row[$postgisObject->getGeometryColumns(current($forSql['tables']), "f_geometry_column")]);
            next($forSql['tables']);
        }
        echo '</wfs:InsertResults>';
    }
    // UpdateResult
    if (sizeof($results['update']) > 0) {
        reset($forSql2['tables']);
        echo '<wfs:UpdateResult>';
        foreach ($results['update'] as $res) {
            echo '<ogc:FeatureId fid="';
            echo current($forSql2['tables']) . ".";
            $row = $postgisObject->fetchRow($res);
            echo $row['gid'];
            echo '" />';
            //$version->set(current($forSql2['tables']),"update",$row[$postgisObject->getGeometryColumns(current($forSql['tables']), "f_geometry_column")]);
            next($forSql2['tables']);
        }
        echo '</wfs:UpdateResult>';
    }
    // TransactionSummary
    echo '<wfs:TransactionSummary>';
    if (isset($results)) {
        foreach ($results as $operation => $result) {
            if ($operation == "insert") {
                echo "<wfs:totalInserted>" . sizeof($result) . "</wfs:totalInserted>";
            }
            if ($operation == "update") {
                echo "<wfs:totalUpdated>" . sizeof($result) . "</wfs:totalUpdated>";
            }
            if ($operation == "delete") {
                echo "<wfs:totalDeleted>" . $result . "</wfs:totalDeleted>";
            }
        }
    }
    echo '</wfs:TransactionSummary>';
    echo '</wfs:WFS_TransactionResponse>';
    $postgisObject->free($result);
}
Exemplo n.º 8
0
?>
">
              <input type="button" value="<?php 
echo translate('Refresh');
?>
" onclick="location.reload(true);"/>
              <?php 
echo makePopupButton('?view=monitor', 'zmMonitor0', 'monitor', translate('AddNewMonitor'), canEdit('Monitors') && !$user['MonitorIds']);
?>
              <?php 
echo makePopupButton('?view=filter&amp;filter[terms][0][attr]=DateTime&amp;filter[terms][0][op]=%3c&amp;filter[terms][0][val]=now', 'zmFilter', 'filter', translate('Filters'), canView('Events'));
?>
            </td>
<?php 
for ($i = 0; $i < count($eventCounts); $i++) {
    parseFilter($eventCounts[$i]['filter']);
    ?>
            <td class="colEvents"><?php 
    echo makePopupLink('?view=' . $eventsView . '&amp;page=1' . $eventCounts[$i]['filter']['query'], $eventsWindow, $eventsView, $eventCounts[$i]['total'], canView('Events'));
    ?>
</td>
<?php 
}
?>
            <td class="colZones"><?php 
echo $zoneCount;
?>
</td>
            <td class="colRightButtons" colspan="<?php 
echo canEdit('Monitors') ? 2 : 1;
?>
Exemplo n.º 9
0
function doParse($arr)
{
    global $postgisObject;
    global $user;
    global $postgisschema;
    global $layerObj;
    global $parentUser;
    global $transaction;
    global $db;
    $serializer_options = array('indent' => '  ');
    // We start sql BEGIN block
    $postgisObject->connect("PDO");
    $postgisObject->begin();
    $Serializer = new XML_Serializer($serializer_options);
    $workflowData = array();
    foreach ($arr as $key => $featureMember) {
        if ($key == "Insert") {
            if (!is_array($featureMember[0]) && isset($featureMember)) {
                $featureMember = array(0 => $featureMember);
            }
            foreach ($featureMember as $hey) {
                foreach ($hey as $typeName => $feature) {
                    $typeName = dropAllNameSpaces($typeName);
                    if (is_array($feature)) {
                        // Skip handles
                        // Remove ns from properties
                        foreach ($feature as $field => $value) {
                            $split = explode(":", $field);
                            if ($split[1]) {
                                $feature[dropAllNameSpaces($field)] = $value;
                                unset($feature[$field]);
                            }
                        }
                        // Check if table is versioned or has workflow. Add fields when clients doesn't send unaltered fields.
                        $tableObj = new table($postgisschema . "." . $typeName);
                        if (!array_key_exists("gc2_version_user", $feature) && $tableObj->versioning) {
                            $feature["gc2_version_user"] = null;
                        }
                        if (!array_key_exists("gc2_status", $feature) && $tableObj->workflow) {
                            $feature["gc2_status"] = null;
                        }
                        if (!array_key_exists("gc2_workflow", $feature) && $tableObj->workflow) {
                            $feature["gc2_workflow"] = null;
                        }
                        foreach ($feature as $field => $value) {
                            $fields[] = $field;
                            $roleObj = $layerObj->getRole($postgisschema, $typeName, $user);
                            $role = $roleObj["data"][$user];
                            if ($tableObj->workflow && ($role == "none" && $parentUser == false)) {
                                makeExceptionReport("You don't have a role in the workflow of '{$typeName}'");
                            }
                            if (is_array($value)) {
                                // Must be geom if array
                                // We serialize the geometry back to XML for parsing
                                $Serializer->serialize($value);
                                $gmlCon = new gmlConverter();
                                $wktArr = $gmlCon->gmlToWKT($Serializer->getSerializedData(), array());
                                $values[] = array("{$field}" => $wktArr[0][0], "srid" => $wktArr[1][0]);
                                unset($gmlCon);
                                unset($wktArr);
                                //Log::write($Serializer->getSerializedData()."\n\n");
                            } elseif ($field == "gc2_version_user") {
                                $values[] = $user;
                            } elseif ($field == "gc2_status") {
                                switch ($role) {
                                    case "author":
                                        $values[] = 1;
                                        break;
                                    case "reviewer":
                                        $values[] = 2;
                                        break;
                                    case "publisher":
                                        $values[] = 3;
                                        break;
                                    default:
                                        $values[] = 3;
                                        break;
                                }
                            } elseif ($field == "gc2_workflow") {
                                switch ($role) {
                                    case "author":
                                        $values[] = "hstore('author', '{$user}')";
                                        break;
                                    case "reviewer":
                                        $values[] = "hstore('reviewer', '{$user}')";
                                        break;
                                    case "publisher":
                                        $values[] = "hstore('publisher', '{$user}')";
                                        break;
                                    default:
                                        $values[] = "''";
                                        break;
                                }
                            } else {
                                $values[] = pg_escape_string($value);
                            }
                        }
                        $forSql['tables'][] = $typeName;
                        $forSql['fields'][] = $fields;
                        $forSql['values'][] = $values;
                        $fields = array();
                        $values = array();
                        //TODO check
                        //$field = "";
                        //$value = "";
                        // Start HTTP basic authentication
                        $auth = $postgisObject->getGeometryColumns($postgisschema . "." . $typeName, "authentication");
                        if ($auth == "Write" or $auth == "Read/write") {
                            $HTTP_FORM_VARS["TYPENAME"] = $typeName;
                            include 'inc/http_basic_authen.php';
                        }
                        // End HTTP basic authentication
                    }
                }
            }
        }
        if ($key == "Update") {
            if (!is_array($featureMember[0]) && isset($featureMember)) {
                $featureMember = array(0 => $featureMember);
            }
            $fid = 0;
            foreach ($featureMember as $hey) {
                $hey["typeName"] = dropAllNameSpaces($hey["typeName"]);
                if (!is_array($hey['Property'][0]) && isset($hey['Property'])) {
                    $hey['Property'] = array(0 => $hey['Property']);
                }
                // Check if table is versioned or has workflow. Add fields when clients doesn't send unaltered fields.
                $tableObj = new table($postgisschema . "." . $hey["typeName"]);
                foreach ($hey["Property"] as $v) {
                    if ($v["Name"] == "gc2_version_user") {
                        $gc2_version_user_flag = true;
                    }
                    if ($v["Name"] == "gc2_version_start_date") {
                        $gc2_version_start_date_flag = true;
                    }
                    if ($v["Name"] == "gc2_status") {
                        $gc2_status_flag = true;
                    }
                    if ($v["Name"] == "gc2_workflow") {
                        $gc2_workflow_flag = true;
                    }
                }
                if (!$gc2_version_user_flag && $tableObj->versioning) {
                    $hey["Property"][] = array("Name" => "gc2_version_user", "Value" => null);
                }
                if (!$gc2_version_start_date_flag && $tableObj->versioning) {
                    $hey["Property"][] = array("Name" => "gc2_version_start_date", "Value" => null);
                }
                if (!$gc2_status_flag && $tableObj->workflow) {
                    $hey["Property"][] = array("Name" => "gc2_status", "Value" => null);
                }
                if (!$gc2_workflow_flag && $tableObj->workflow) {
                    $hey["Property"][] = array("Name" => "gc2_workflow", "Value" => null);
                }
                //makeExceptionReport(print_r($hey, true));
                foreach ($hey['Property'] as $pair) {
                    $fields[$fid][] = $pair['Name'];
                    $roleObj = $layerObj->getRole($postgisschema, $hey['typeName'], $user);
                    $role = $roleObj["data"][$user];
                    if ($tableObj->workflow && ($role == "none" && $parentUser == false)) {
                        makeExceptionReport("You don't have a role in the workflow of '{$hey['typeName']}'");
                    }
                    if (is_array($pair['Value'])) {
                        // Must be geom if array
                        // We serialize the geometry back to XML for parsing
                        $Serializer->serialize($pair['Value']);
                        Log::write($Serializer->getSerializedData() . "\n\n");
                        $gmlCon = new gmlConverter();
                        $wktArr = $gmlCon->gmlToWKT($Serializer->getSerializedData(), array());
                        $values[$fid][] = array("{$pair['Name']}" => current($wktArr[0]), "srid" => current($wktArr[1]));
                        unset($gmlCon);
                        unset($wktArr);
                    } else {
                        $values[$fid][] = $pair['Value'];
                    }
                }
                $forSql2['tables'][$fid] = $hey['typeName'];
                $forSql2['fields'] = $fields;
                $forSql2['values'] = $values;
                $forSql2['wheres'][$fid] = parseFilter($hey['Filter'], $hey['typeName']);
                $fid++;
                // Start HTTP basic authentication
                $auth = $postgisObject->getGeometryColumns($postgisschema . "." . $hey['typeName'], "authentication");
                if ($auth == "Write" or $auth == "Read/write") {
                    $HTTP_FORM_VARS["TYPENAME"] = $hey['typeName'];
                    include 'inc/http_basic_authen.php';
                }
                // End HTTP basic authentication
            }
            $pair = array();
            $values = array();
            $fields = array();
        }
        if ($key == "Delete") {
            if (!is_array($featureMember[0]) && isset($featureMember)) {
                $featureMember = array(0 => $featureMember);
            }
            foreach ($featureMember as $hey) {
                $hey['typeName'] = dropAllNameSpaces($hey['typeName']);
                $forSql3['tables'][] = $hey['typeName'];
                $forSql3['wheres'][] = parseFilter($hey['Filter'], $hey['typeName']);
                $roleObj = $layerObj->getRole($postgisschema, $hey['typeName'], $user);
                $role = $roleObj["data"][$user];
                $tableObj = new table($postgisschema . "." . $hey["typeName"]);
                if ($tableObj->workflow && ($role == "none" && $parentUser == false)) {
                    makeExceptionReport("You don't have a role in the workflow of '{$hey['typeName']}'");
                }
                // Start HTTP basic authentication
                $auth = $postgisObject->getGeometryColumns($postgisschema . "." . $hey['typeName'], "authentication");
                if ($auth == "Write" or $auth == "Read/write") {
                    $HTTP_FORM_VARS["TYPENAME"] = $hey['typeName'];
                    include 'inc/http_basic_authen.php';
                }
                // End HTTP basic authentication
            }
        }
    }
    echo '<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"
  xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.0.0/WFS-transaction.xsd">';
    // First we loop through inserts
    if (sizeof($forSql['tables']) > 0) {
        for ($i = 0; $i < sizeof($forSql['tables']); $i++) {
            if ($postgisObject->getGeometryColumns($postgisschema . "." . $forSql['tables'][$i], "editable")) {
                \app\controllers\Tilecache::bust($postgisschema . "." . $forSql['tables'][$i]);
                $gc2_workflow_flag = false;
                $roleObj = $layerObj->getRole($postgisschema, $forSql['tables'][$i], $user);
                $primeryKey = $postgisObject->getPrimeryKey($postgisschema . "." . $forSql['tables'][$i]);
                $sql = "INSERT INTO {$postgisschema}.{$forSql['tables'][$i]} (";
                foreach ($forSql['fields'][$i] as $key => $field) {
                    if ($field != "gc2_version_uuid" && $field != "gc2_version_start_date" && $field != "gc2_version_gid") {
                        $fields[] = "\"" . $field . "\"";
                    }
                }
                $sql .= implode(",", $fields);
                unset($fields);
                $sql .= ") VALUES(";
                foreach ($forSql['values'][$i] as $key => $value) {
                    if ($forSql['fields'][$i][$key] != "gc2_version_uuid" && $forSql['fields'][$i][$key] != "gc2_version_start_date" && $forSql['fields'][$i][$key] != "gc2_version_gid") {
                        if (is_array($value)) {
                            $values[] = "public.ST_Transform(public.ST_GeometryFromText('" . current($value) . "'," . next($value) . ")," . $postgisObject->getGeometryColumns($postgisschema . "." . $forSql['tables'][$i], "srid") . ")";
                        } elseif (!$value) {
                            $values[] = "NULL";
                        } elseif ($forSql['fields'][$i][$key] == "gc2_workflow") {
                            // Don't quote a hstore
                            $values[] = $value;
                            $gc2_workflow_flag = true;
                        } else {
                            $values[] = $postgisObject->quote($value);
                        }
                    }
                }
                $sql .= implode(",", $values);
                unset($values);
                $sql .= ") RETURNING {$primeryKey['attname']} as gid";
                // The query will return the new key
                if ($gc2_workflow_flag) {
                    $sql .= ",gc2_version_gid,gc2_status,gc2_workflow," . \app\inc\PgHStore::toPg($roleObj["data"]) . " as roles";
                    $gc2_workflow_flag = false;
                }
                $sqls['insert'][] = $sql;
            } else {
                $notEditable[$forSql['tables'][0]] = true;
            }
        }
    }
    // Second we loop through updates
    if (sizeof($forSql2['tables']) > 0) {
        for ($i = 0; $i < sizeof($forSql2['tables']); $i++) {
            if ($postgisObject->getGeometryColumns($postgisschema . "." . $forSql2['tables'][$i], "editable")) {
                \app\controllers\Tilecache::bust($postgisschema . "." . $forSql2['tables'][$i]);
                $primeryKey = $postgisObject->getPrimeryKey($postgisschema . "." . $forSql2['tables'][$i]);
                $tableObj = new table($postgisschema . "." . $forSql2['tables'][$i]);
                if ($tableObj->versioning) {
                    // Get original feature
                    $query = "SELECT * FROM {$postgisschema}.{$forSql2['tables'][$i]} WHERE {$forSql2['wheres'][$i]}";
                    $res = $postgisObject->execQuery($query);
                    $originalFeature = $postgisObject->fetchRow($res);
                    // Check if feature is ended
                    if ($originalFeature["gc2_version_end_date"]) {
                        makeExceptionReport("You can't change the history!");
                    }
                    // Clone original feature for ended version
                    $intoArr = array();
                    $selectArr = array();
                    foreach ($originalFeature as $k => $v) {
                        if ($k != $primeryKey['attname']) {
                            if ($k == "gc2_version_end_date") {
                                $intoArr[] = $k;
                                $selectArr[] = "now()";
                            } else {
                                $intoArr[] = $selectArr[] = $k;
                            }
                        }
                    }
                    $sql = "INSERT INTO {$postgisschema}.{$forSql2['tables'][$i]}(";
                    $sql .= implode(",", $intoArr);
                    $sql .= ")";
                    $sql .= " SELECT ";
                    $sql .= implode(",", $selectArr);
                    $sql .= " FROM {$postgisschema}.{$forSql2['tables'][$i]}";
                    $sql .= " WHERE {$forSql2['wheres'][$i]}";
                    //makeExceptionReport($sql);
                    $postgisObject->execQuery($sql);
                }
                $sql = "UPDATE {$postgisschema}.{$forSql2['tables'][$i]} SET ";
                $roleObj = $layerObj->getRole($postgisschema, $forSql2['tables'][$i], $user);
                $role = $roleObj["data"][$user];
                foreach ($forSql2['fields'][$i] as $key => $field) {
                    if (is_array($forSql2['values'][$i][$key])) {
                        // is geometry
                        $value = "public.ST_Transform(public.ST_GeometryFromText('" . current($forSql2['values'][$i][$key]) . "'," . next($forSql2['values'][$i][$key]) . ")," . $postgisObject->getGeometryColumns($postgisschema . "." . $forSql2['tables'][$i], "srid") . ")";
                    } elseif ($field == "gc2_version_user") {
                        $value = $postgisObject->quote($user);
                    } elseif ($field == "gc2_status") {
                        switch ($role) {
                            case "author":
                                if ($originalFeature[$field] > 1) {
                                    makeExceptionReport("This feature has been " . ($originalFeature[$field] == 2 ? "reviewed" : "published") . ", so an author can't edit it.");
                                }
                                $value = 1;
                                break;
                            case "reviewer":
                                if ($originalFeature[$field] > 2) {
                                    makeExceptionReport("This feature has been published, so a reviewer can't edit it.");
                                }
                                $value = 2;
                                break;
                            case "publisher":
                                $value = 3;
                                break;
                            default:
                                $value = $originalFeature[$field];
                                break;
                        }
                    } elseif ($field == "gc2_workflow") {
                        switch ($role) {
                            case "author":
                                $value = "'{$originalFeature[$field]}'::hstore || hstore('author', '{$user}')";
                                break;
                            case "reviewer":
                                $value = "'{$originalFeature[$field]}'::hstore || hstore('reviewer', '{$user}')";
                                break;
                            case "publisher":
                                $value = "'{$originalFeature[$field]}'::hstore || hstore('publisher', '{$user}')";
                                break;
                            default:
                                $value = "'{$originalFeature[$field]}'::hstore";
                                break;
                        }
                    } elseif ($field == "gc2_version_start_date") {
                        $value = "now()";
                    } elseif (!$forSql2['values'][$i][$key]) {
                        $value = "NULL";
                    } else {
                        $value = $postgisObject->quote($forSql2['values'][$i][$key]);
                        // We need to escape the string
                    }
                    $pairs[] = "\"" . $field . "\" =" . $value;
                }
                $sql .= implode(",", $pairs);
                $sql .= " WHERE {$forSql2['wheres'][$i]} RETURNING {$primeryKey['attname']} as gid";
                if ($tableObj->workflow) {
                    $sql .= ",gc2_version_gid,gc2_status,gc2_workflow," . \app\inc\PgHStore::toPg($roleObj["data"]) . " as roles";
                }
                //makeExceptionReport($sql);
                unset($pairs);
                $sqls['update'][] = $sql;
            } else {
                $notEditable[$forSql2['tables'][0]] = true;
            }
        }
    }
    // Third we loop through deletes
    if (sizeof($forSql3['tables']) > 0) {
        for ($i = 0; $i < sizeof($forSql3['tables']); $i++) {
            if ($postgisObject->getGeometryColumns($postgisschema . "." . $forSql3['tables'][$i], "editable")) {
                \app\controllers\Tilecache::bust($postgisschema . "." . $forSql3['tables'][$i]);
                $primeryKey = $postgisObject->getPrimeryKey($postgisschema . "." . $forSql3['tables'][$i]);
                $tableObj = new table($postgisschema . "." . $forSql3['tables'][$i]);
                if ($tableObj->versioning) {
                    // Check if its history
                    $res = $postgisObject->execQuery("SELECT gc2_version_end_date FROM {$postgisschema}.{$forSql3['tables'][$i]} WHERE {$forSql3['wheres'][$i]}", "PDO", "select");
                    $checkRow = $postgisObject->fetchRow($res);
                    if ($checkRow["gc2_version_end_date"]) {
                        makeExceptionReport("You can't change the history!");
                    }
                    // Update old record start
                    $sql = "UPDATE {$postgisschema}.{$forSql3['tables'][$i]} SET gc2_version_end_date = now(), gc2_version_user='******'";
                    if ($tableObj->workflow) {
                        // get original feature from feature
                        $query = "SELECT * FROM {$postgisschema}.{$forSql3['tables'][$i]} WHERE {$forSql3['wheres'][$i]}";
                        $resStatus = $postgisObject->execQuery($query);
                        $originalFeature = $postgisObject->fetchRow($resStatus);
                        $status = $originalFeature["gc2_status"];
                        // Get role
                        $roleObj = $layerObj->getRole($postgisschema, $forSql3['tables'][$i], $user);
                        $role = $roleObj["data"][$user];
                        switch ($role) {
                            case "author":
                                if ($status > 1) {
                                    makeExceptionReport("This feature has been " . ($status == 2 ? "reviewed" : "published") . ", so an author can't delete it.");
                                }
                                $value = 1;
                                break;
                            case "reviewer":
                                if ($status > 2) {
                                    makeExceptionReport("This feature has been published so a reviewer can't delete it.");
                                }
                                $value = 2;
                                break;
                            case "publisher":
                                $value = 3;
                                break;
                            default:
                                $value = $status;
                                break;
                        }
                        $sql .= ", gc2_status = {$value}";
                    }
                    // Update workflow
                    if ($tableObj->workflow) {
                        $workflow = $originalFeature["gc2_workflow"];
                        switch ($role) {
                            case "author":
                                $value = "'{$workflow}'::hstore || hstore('author', '{$user}')";
                                break;
                            case "reviewer":
                                $value = "'{$workflow}'::hstore || hstore('reviewer', '{$user}')";
                                break;
                            case "publisher":
                                $value = "'{$workflow}'::hstore || hstore('publisher', '{$user}')";
                                break;
                            default:
                                $value = "'{$workflow}'::hstore";
                                break;
                        }
                        $sql .= ", gc2_workflow = {$value}";
                    }
                    $sql .= " WHERE {$forSql3['wheres'][$i]} RETURNING {$primeryKey['attname']} as gid";
                    if ($tableObj->workflow) {
                        $sql .= ",gc2_version_gid,gc2_status,gc2_workflow," . \app\inc\PgHStore::toPg($roleObj["data"]) . " as roles";
                    }
                    $sqls['delete'][] = $sql;
                    // Update old record end
                } else {
                    $sqls['delete'][] = "DELETE FROM {$postgisschema}.{$forSql3['tables'][$i]} WHERE {$forSql3['wheres'][$i]} RETURNING {$primeryKey['attname']} as gid";
                }
            } else {
                $notEditable[$forSql3['tables'][0]] = true;
            }
        }
    }
    // We fire the sqls
    if (isset($sqls)) {
        foreach ($sqls as $operation => $sql) {
            foreach ($sql as $singleSql) {
                $results[$operation][] = $postgisObject->execQuery($singleSql, "PDO", "select");
                // Returning PDOStatement object
                Log::write("Sqls fired\n");
                Log::write("{$singleSql}\n");
            }
        }
    }
    // If a layer is not editable, PDOerror is set.
    if (sizeof($notEditable) > 0) {
        $postgisObject->PDOerror[0] = "Layer not editable";
    }
    // WFS message
    echo '<wfs:Message>';
    echo '</wfs:Message>';
    // TransactionResult
    if (sizeof($postgisObject->PDOerror) == 0) {
        echo '<wfs:TransactionResult handle="mygeocloud-WFS-default-handle"><wfs:Status><wfs:SUCCESS/></wfs:Status></wfs:TransactionResult>';
    } else {
        echo '<wfs:TransactionResult handle="mygeocloud-WFS-default-handle"><wfs:Status><wfs:FAILURE/></wfs:Status></wfs:TransactionResult>';
        Log::write("Error in\n");
        foreach ($postgisObject->PDOerror as $str) {
            Log::write("{$str}\n");
        }
        Log::write("ROLLBACK\n");
        $postgisObject->rollback();
        $results['insert'] = NULL;
        // Was object
        $results['update'] = NULL;
        // Was object
        $results['delete'] = 0;
        makeExceptionReport($postgisObject->PDOerror);
        // This output a exception and kills the script
    }
    // InsertResult
    if (sizeof($results['insert']) > 0) {
        if (isset($forSql['tables'])) {
            reset($forSql['tables']);
        }
        echo '<wfs:InsertResult>';
        foreach ($results['insert'] as $res) {
            echo '<ogc:FeatureId fid="';
            if (isset($forSql['tables'])) {
                echo current($forSql['tables']) . ".";
            }
            $row = $postgisObject->fetchRow($res);
            echo $row['gid'];
            echo '"/>';
            if (isset($row["gc2_workflow"])) {
                $workflowData[] = array("schema" => $postgisschema, "table" => current($forSql['tables']), "gid" => $row['gid'], "user" => $user, "status" => $row['gc2_status'], "workflow" => $row['gc2_workflow'], "roles" => $row['roles'], "version_gid" => $row['gc2_version_gid'], "operation" => "insert");
            }
            if (isset($forSql['tables'])) {
                next($forSql['tables']);
            }
        }
        echo '</wfs:InsertResult>';
    }
    // UpdateResult
    if (sizeof($results['update']) > 0) {
        if (isset($forSql2['tables'])) {
            reset($forSql2['tables']);
        }
        echo '<wfs:UpdateResult>';
        foreach ($results['update'] as $res) {
            echo '<ogc:FeatureId fid="';
            if (isset($forSql2['tables'])) {
                echo current($forSql2['tables']) . ".";
            }
            $row = $postgisObject->fetchRow($res);
            echo $row['gid'];
            echo '" />';
            if (isset($row["gc2_workflow"])) {
                $workflowData[] = array("schema" => $postgisschema, "table" => current($forSql2['tables']), "gid" => $row['gid'], "user" => $user, "status" => $row['gc2_status'], "workflow" => $row['gc2_workflow'], "roles" => $row['roles'], "version_gid" => $row['gc2_version_gid'], "operation" => "update");
            }
            if (isset($forSql2['tables'])) {
                next($forSql2['tables']);
            }
        }
        echo '</wfs:UpdateResult>';
    }
    // deleteResult
    if (sizeof($results['delete']) > 0) {
        if (isset($forSql3['tables'])) {
            reset($forSql3['tables']);
        }
        foreach ($results['delete'] as $res) {
            $row = $postgisObject->fetchRow($res);
            if (isset($row["gc2_workflow"])) {
                $workflowData[] = array("schema" => $postgisschema, "table" => current($forSql3['tables']), "gid" => $row['gid'], "user" => $user, "status" => $row['gc2_status'], "workflow" => $row['gc2_workflow'], "roles" => $row['roles'], "version_gid" => $row['gc2_version_gid'], "operation" => "delete");
            }
            if (isset($forSql2['tables'])) {
                next($forSql2['tables']);
            }
        }
    }
    // TransactionSummary
    echo '<wfs:TransactionSummary>';
    if (isset($results)) {
        foreach ($results as $operation => $result) {
            if ($operation == "insert") {
                echo "<wfs:totalInserted>" . sizeof($result) . "</wfs:totalInserted>";
            }
            if ($operation == "update") {
                echo "<wfs:totalUpdated>" . sizeof($result) . "</wfs:totalUpdated>";
            }
            if ($operation == "delete") {
                echo "<wfs:totalDeleted>" . sizeof($result) . "</wfs:totalDeleted>";
            }
        }
    }
    echo '</wfs:TransactionSummary>';
    echo '</wfs:WFS_TransactionResponse>';
    if (sizeof($workflowData) > 0) {
        $sqls = array();
        foreach ($workflowData as $w) {
            $sql = "INSERT INTO settings.workflow (f_schema_name,f_table_name,gid,status,gc2_user,roles,workflow,version_gid,operation)";
            $sql .= " VALUES('{$w["schema"]}','{$w["table"]}',{$w["gid"]},{$w["status"]},'{$w["user"]}','{$w["roles"]}'::hstore,'{$w["workflow"]}'::hstore,{$w["version_gid"]},'{$w["operation"]}')";
            $sqls[] = $sql;
        }
        // We fire the sqls
        foreach ($sqls as $sql) {
            $postgisObject->execQuery($sql, "PDO", "transaction");
        }
        if (sizeof($postgisObject->PDOerror) > 0) {
            makeExceptionReport($postgisObject->PDOerror);
            // This output a exception and kills the script
        }
    }
    //makeExceptionReport(print_r($sqls, true));
    $postgisObject->commit();
    $postgisObject->free($result);
}
if (isset($_REQUEST["sld_form_element_id"]) && isset($_REQUEST["sld_objects_rule_id"])) {
    $first_load = 1;
    $sld_form_element_id = $_REQUEST["sld_form_element_id"];
    $_SESSION["sld_form_element_id"] = $sld_form_element_id;
    $sld_objects_rule_id = $_REQUEST["sld_objects_rule_id"];
    $_SESSION["sld_objects_rule_id"] = $sld_objects_rule_id;
    $filter = $sld_objects[$sld_objects_rule_id]->filter;
    $_SESSION["sld_filter"] = $filter;
} else {
    $first_load = 0;
    $sld_form_element_id = $_SESSION["sld_form_element_id"];
    $sld_objects_rule_id = $_SESSION["sld_objects_rule_id"];
    $filter = $_SESSION["sld_filter"];
}
//Parse the Filter Expression
$filterObj = parseFilter($filter);
if ($filterObj == "") {
    //$filterObj = new Filter();
}
//Function handling
if (isset($_REQUEST["function"])) {
    $function = $_REQUEST["function"];
    //Handle the requested functions
    if ($function == "addoperation") {
        if (isset($_REQUEST["id"]) && isset($_REQUEST["operation"])) {
            $operation = $_REQUEST["operation"];
            switch (strtoupper($operation)) {
                case "OR":
                    $_SESSION["sld_filter_objects"][$_REQUEST["id"]]->operations[] = new BinaryLogicOp("Or");
                    break;
                case "AND":
Exemplo n.º 11
0
<?php 
}
if ($cycleCount > 1) {
    ?>
          <td><?php 
    echo makeLink("?view=montage", translate('Montage'), $running && canView('Stream'));
    ?>
</td>
<?php 
} else {
    ?>
          <td>&nbsp;</td>
<?php 
}
for ($i = 0; $i < count($eventCounts); $i++) {
    parseFilter($eventCounts[$i]['filter'], false, '&amp;');
    ?>
          <td class="colEvents"><?php 
    echo makeLink("?view=events&amp;page=1" . $eventCounts[$i]['filter']['query'], $eventCounts[$i]['total'], canView('Events'));
    ?>
</td>
<?php 
}
?>
        </tr>
      </table>
    </div>
  </div>
</body>
</html>
Exemplo n.º 12
0
    return;
}
$midSql = '';
if ($user['MonitorIds']) {
    $midSql = " and MonitorId in (" . join(",", preg_split('/["\'\\s]*,["\'\\s]*/', $user['MonitorIds'])) . ")";
}
$sql = 'select E.*,M.Name as MonitorName,M.Width,M.Height from Events as E inner join Monitors as M on E.MonitorId = M.Id where E.Id = ?' . $midSql;
$event = dbFetchOne($sql, NULL, array($_REQUEST['eid']));
if (!empty($_REQUEST['fid'])) {
    $frame = dbFetchOne('SELECT * FROM Frames WHERE EventID = ? AND FrameId = ?', NULL, array($_REQUEST['eid'], $_REQUEST['fid']));
} elseif (isset($_REQUEST['fid'])) {
    $frame = dbFetchOne('SELECT * FROM Frames WHERE EventID = ? AND Score = ?', NULL, array($_REQUEST['eid'], $event['MaxScore']));
    $_REQUEST['fid'] = $frame['FrameId'];
}
parseSort(true, '&amp;');
parseFilter($_REQUEST['filter'], true, '&amp;');
$filterQuery = $_REQUEST['filter']['query'];
if ($sortOrder == 'asc') {
    $sql = "select E.* from Events as E inner join Monitors as M on E.MonitorId = M.Id where {$sortColumn} <= ?" . $_REQUEST['filter']['sql'] . $midSql . " order by {$sortColumn} desc";
} else {
    $sql = "select E.* from Events as E inner join Monitors as M on E.MonitorId = M.Id where {$sortColumn} >= ?" . $_REQUEST['filter']['sql'] . $midSql . " order by {$sortColumn} asc";
}
$result = dbQuery($sql, array($event[$_REQUEST['sort_field']]));
while ($row = dbFetchNext($result)) {
    if ($row['Id'] == $_REQUEST['eid']) {
        $prevEvent = dbFetchNext($result);
        break;
    }
}
$sql = "select E.* from Events as E inner join Monitors as M on E.MonitorId = M.Id where {$sortColumn} " . ($sortOrder == 'asc' ? '>=' : '<=') . ' ?' . $_REQUEST['filter']['sql'] . $midSql . " order by {$sortColumn} {$sortOrder}";
$result = dbQuery($sql, array($event[$_REQUEST['sort_field']]));
Exemplo n.º 13
0
 function wfs_server()
 {
     // Manually tested this piece of code in order to check the requests.
     // Code based on a similar idea but build in Java
     header('Content-Type:text/xml; charset=UTF-8', TRUE);
     header('Connection:close', TRUE);
     //$userFromUri = "mhoegh"; // for testing
     logfile::write($userFromUri . "\n\n");
     // We connect to the users db
     $postgisdb = $userFromUri;
     $srs = $srsFromUri;
     $postgisschema = $schemaFromUri;
     $postgisObject = new postgis();
     //$user = new users($userFromUri);
     //$version = new version($user);
     $geometryColumnsObj = new GeometryColumns();
     function microtime_float()
     {
         list($utime, $time) = explode(" ", microtime());
         return (double) $utime + (double) $time;
     }
     $startTime = microtime_float();
     //ini_set("display_errors", "On");
     $thePath = "http://" . $_SERVER['SERVER_NAME'] . $_SERVER['REDIRECT_URL'];
     //$thePath= "http://".$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF'];
     $server = "http://" . $_SERVER['SERVER_NAME'];
     $BBox = null;
     //end added
     $currentTable = null;
     $currentTag = null;
     $gen = array();
     $gen[0] = "";
     $level = 0;
     $depth = 0;
     $tables = array();
     $fields = array();
     $wheres = array();
     $limits = array();
     logfile::write("\nRequest\n\n");
     logfile::write($HTTP_RAW_POST_DATA . "\n\n");
     $unserializer_options = array('parseAttributes' => TRUE, 'typeHints' => FALSE);
     $unserializer = new XML_Unserializer($unserializer_options);
     /*$HTTP_RAW_POST_DATA = '<?xml version="1.0" encoding="utf-8"?><wfs:Transaction service="WFS" version="1.0.0" xmlns="http://www.opengis.net/wfs" xmlns:mrhg="http://twitter/mrhg" xmlns:ogc="http://www.opengis.net/ogc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><wfs:Insert idgen="GenerateNew"><mrhg:hej><the_geom><gml:MultiPolygon srsName="urn:x-ogc:def:crs:EPSG:6.9:4326"><gml:polygonMember><gml:Polygon><gml:exterior><gml:LinearRing><gml:coordinates>5.0657329559,-41.1107215881 8.4824724197,-39.3435783386 4.3241734505,-34.6001853943 5.0657329559,-41.1107215881 </gml:coordinates></gml:LinearRing></gml:exterior></gml:Polygon></gml:polygonMember></gml:MultiPolygon></the_geom></mrhg:hej></wfs:Insert></wfs:Transaction>';*/
     /*$HTTP_RAW_POST_DATA = '<?xml version="1.0"?><DescribeFeatureType  version="1.1.0"  service="WFS"  xmlns="http://www.opengis.net/wfs"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/wfs.xsd">    <TypeName>california_coastline</TypeName></DescribeFeatureType>';
      */
     // Post method is used
     if ($HTTP_RAW_POST_DATA) {
         //$forUseInSpatialFilter = $HTTP_RAW_POST_DATA; // We store a unaltered version of the raw request
         $HTTP_RAW_POST_DATA = dropNameSpace($HTTP_RAW_POST_DATA);
         logfile::write($HTTP_RAW_POST_DATA . "\n\n");
         $status = $unserializer->unserialize($HTTP_RAW_POST_DATA);
         $arr = $unserializer->getUnserializedData();
         $request = $unserializer->getRootName();
         //print_r($arr);
         switch ($request) {
             case "GetFeature":
                 if (!is_array($arr['Query'][0])) {
                     $arr['Query'] = array(0 => $arr['Query']);
                 }
                 for ($i = 0; $i < sizeof($arr['Query']); $i++) {
                     if (!is_array($arr['Query'][$i]['PropertyName'])) {
                         $arr['Query'][$i]['PropertyName'] = array(0 => $arr['Query'][$i]['PropertyName']);
                     }
                 }
                 $HTTP_FORM_VARS["REQUEST"] = "GetFeature";
                 foreach ($arr['Query'] as $queries) {
                     $HTTP_FORM_VARS["TYPENAME"] .= $queries['typeName'] . ",";
                     if ($queries['PropertyName'][0]) {
                         foreach ($queries['PropertyName'] as $PropertyNames) {
                             // We check if typeName is prefix and add it if its not
                             if (strpos($PropertyNames, ".")) {
                                 $HTTP_FORM_VARS["PROPERTYNAME"] .= $PropertyNames . ",";
                             } else {
                                 $HTTP_FORM_VARS["PROPERTYNAME"] .= $queries['typeName'] . "." . $PropertyNames . ",";
                             }
                         }
                     }
                     if (is_array($queries['Filter']) && $arr['version'] == "1.0.0") {
                         @($checkXml = simplexml_load_string($queries['Filter']));
                         if ($checkXml === FALSE) {
                             makeExceptionReport("Filter is not valid");
                         }
                         $wheres[$queries['typeName']] = parseFilter($queries['Filter'], $queries['typeName']);
                     }
                 }
                 $HTTP_FORM_VARS["TYPENAME"] = dropLastChrs($HTTP_FORM_VARS["TYPENAME"], 1);
                 $HTTP_FORM_VARS["PROPERTYNAME"] = dropLastChrs($HTTP_FORM_VARS["PROPERTYNAME"], 1);
                 break;
             case "DescribeFeatureType":
                 $HTTP_FORM_VARS["REQUEST"] = "DescribeFeatureType";
                 $HTTP_FORM_VARS["TYPENAME"] = $arr['TypeName'];
                 //if (!$HTTP_FORM_VARS["TYPENAME"]) $HTTP_FORM_VARS["TYPENAME"] = $arr['typeName'];
                 break;
             case "GetCapabilities":
                 $HTTP_FORM_VARS["REQUEST"] = "GetCapabilities";
                 break;
             case "Transaction":
                 $HTTP_FORM_VARS["REQUEST"] = "Transaction";
                 if (isset($arr["Insert"])) {
                     $transactionType = "Insert";
                 }
                 if ($arr["Update"]) {
                     $transactionType = "update";
                 }
                 if ($arr["Delete"]) {
                     $transactionType = "Delete";
                 }
                 break;
         }
     } else {
         if (sizeof($_GET) > 0) {
             logfile::write($_SERVER['QUERY_STRING'] . "\n\n");
             $HTTP_FORM_VARS = $_GET;
             $HTTP_FORM_VARS = array_change_key_case($HTTP_FORM_VARS, CASE_UPPER);
             // Make keys case insensative
             $HTTP_FORM_VARS["TYPENAME"] = dropNameSpace($HTTP_FORM_VARS["TYPENAME"]);
             // We remove name space, so $where will get key without it.
             if ($HTTP_FORM_VARS['FILTER']) {
                 @($checkXml = simplexml_load_string($HTTP_FORM_VARS['FILTER']));
                 if ($checkXml === FALSE) {
                     makeExceptionReport("Filter is not valid");
                 }
                 //$forUseInSpatialFilter = $HTTP_FORM_VARS['FILTER'];
                 $status = $unserializer->unserialize(dropNameSpace($HTTP_FORM_VARS['FILTER']));
                 $arr = $unserializer->getUnserializedData();
                 $wheres[$HTTP_FORM_VARS['TYPENAME']] = parseFilter($arr, $HTTP_FORM_VARS['TYPENAME']);
             }
         } else {
             $HTTP_FORM_VARS = array("");
         }
     }
     //HTTP_FORM_VARS is set in script if POST is used
     $HTTP_FORM_VARS = array_change_key_case($HTTP_FORM_VARS, CASE_UPPER);
     // Make keys case
     $HTTP_FORM_VARS["TYPENAME"] = dropNameSpace($HTTP_FORM_VARS["TYPENAME"]);
     $tables = explode(",", $HTTP_FORM_VARS["TYPENAME"]);
     $properties = explode(",", dropNameSpace($HTTP_FORM_VARS["PROPERTYNAME"]));
     $featureids = explode(",", $HTTP_FORM_VARS["FEATUREID"]);
     $bbox = explode(",", $HTTP_FORM_VARS["BBOX"]);
     // Start HTTP basic authentication
     //if(!$_SESSION["oauth_token"]) {
     $auth = $postgisObject->getGeometryColumns($postgisschema . "." . $HTTP_FORM_VARS["TYPENAME"], "authentication");
     //}
     // End HTTP basic authentication
     print "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
     ob_start();
     if (!empty($properties[0])) {
         foreach ($properties as $property) {
             $__u = explode(".", $property);
             // Is it "/" for get method?
             // We first check if typeName is namespace
             if ($__u[1]) {
                 foreach ($tables as $table) {
                     if ($table == $__u[0]) {
                         $fields[$table] .= $__u[1] . ",";
                     }
                 }
             } else {
                 foreach ($tables as $table) {
                     $fields[$table] .= $property . ",";
                 }
             }
         }
     }
     if (!empty($featureids[0])) {
         foreach ($featureids as $featureid) {
             $__u = explode(".", $featureid);
             foreach ($tables as $table) {
                 $primeryKey = $postgisObject->getPrimeryKey($postgisschema . "." . $table);
                 if ($table == $__u[0]) {
                     $wheresArr[$table][] = "{$primeryKey['attname']}={$__u[1]}";
                 }
                 $wheres[$table] = implode(" OR ", $wheresArr[$table]);
             }
         }
     }
     //get the request
     switch (strtoupper($HTTP_FORM_VARS["REQUEST"])) {
         case "GETCAPABILITIES":
             getCapabilities($postgisObject);
             break;
         case "GETFEATURE":
             if (!$gmlFeatureCollection) {
                 $gmlFeatureCollection = "wfs:FeatureCollection";
             }
             print "<" . $gmlFeatureCollection . "\n";
             print "xmlns=\"http://www.opengis.net/wfs\"\n";
             print "xmlns:wfs=\"http://www.opengis.net/wfs\"\n";
             print "xmlns:gml=\"http://www.opengis.net/gml\"\n";
             print "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n";
             print "xmlns:{$gmlNameSpace}=\"{$gmlNameSpaceUri}\"\n";
             if ($gmlSchemaLocation) {
                 print "xsi:schemaLocation=\"{$gmlSchemaLocation}\"";
             } else {
                 //print "xsi:schemaLocation=\"{$gmlNameSpaceUri} {$thePath}?REQUEST=DescribeFeatureType&amp;TYPENAME=".$HTTP_FORM_VARS["TYPENAME"]." http://www.opengis.net/wfs ".str_replace("server.php","",$thePath)."schemas/wfs/1.0.0/WFS-basic.xsd\"";
                 print "xsi:schemaLocation=\"{$gmlNameSpaceUri} {$thePath}?REQUEST=DescribeFeatureType&amp;TYPENAME=" . $HTTP_FORM_VARS["TYPENAME"] . " http://www.opengis.net/wfs http://wfs.plansystem.dk:80/geoserver/schemas/wfs/1.0.0/WFS-basic.xsd\"";
             }
             print ">\n";
             doQuery("Select");
             print "</" . $gmlFeatureCollection . ">";
             break;
         case "DESCRIBEFEATURETYPE":
             getXSD($postgisObject);
             break;
         case "TRANSACTION":
             doParse($arr);
             break;
         default:
             makeExceptionReport("Don't know that request");
             break;
     }
 }