<?php
/**
 * @author: Félix José Hernández <fhernandeze@grafcan.com>
 * @link: http://visor.grafcan.es/busquedas/toponimoxml/1/50/?texto=chineguas
 * @test: http://192.168.20.133/busquedas/toponimo/1/50/?texto=chineguas
 * @params: page, num, texto
 *
 * @data:
 * @return: xml
 * <?xml version="1.0" encoding="UTF-8"?>
 *      <rows page="1" numpage="50" total="1" time="8655" urlprev="" urlnext="" urlfirst="" urllast="">
 *        <row>
 *            <id><![CDATA[14253178]]></id>
 *            <localizacion><![CDATA[SANTA CRUZ DE TENERIFE Tenerife]]></localizacion>
 *            <clasificacion><![CDATA[GRF Callejero - Viales]]></clasificacion>
 *            <nombre><![CDATA[Calle Chineguas]]></nombre>
 *            <descripcion><![CDATA[Calle <b>Chineguas</b>]]></descripcion>
 *            <rank><![CDATA[1.4]]></rank>
 *            <x><![CDATA[-16.321243867]]></x>
 *            <y><![CDATA[28.4338630729]]></y>
 *            <imagen><![CDATA[None]]></imagen>
 *            <codigo><![CDATA[3803810292]]></codigo>
 *        </row>
 *     </rows>
 */
$t1 = microtime(true);

if (
    !isset($_GET["page"]) ||
    !isset($_GET["num"]) ||
    !isset($_GET["texto"])
) {
    echo '{"error": "Faltan parámetros"}';
    exit;
}
$page = $_GET["page"];
$num = $_GET["num"];
$text = $_GET["texto"];
$dbconn = new PDO('pgsql:user=postgres dbname=dbtoponimia port=5433');
if (!$dbconn) {
    echo "No pg_connect";
    exit;
}
$total = 0;
$sql = "SELECT * FROM visor.gettoponimocount(:text, :page, :num)";
$stmt = $dbconn->prepare($sql);
$stmt->bindParam(":text", $text, PDO::PARAM_STR);
$stmt->bindParam(":page", $page, PDO::PARAM_INT);
$stmt->bindParam(":num", $num, PDO::PARAM_INT);
$stmt->execute();
$ret = $stmt->fetch(PDO::FETCH_NUM);
$t2 = round((microtime(true) - $t1) * 1000);
if ($ret) {
    $total = $ret[0];
}
unset($sql);
unset($ret);
$sql = "SELECT * FROM visor.gettoponimo(:text, :page, :num)";
$stmt = $dbconn->prepare($sql);
$stmt->bindParam(":text", $text, PDO::PARAM_STR);
$stmt->bindParam(":page", $page, PDO::PARAM_INT);
$stmt->bindParam(":num", $num, PDO::PARAM_INT);
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
$t3 = round((microtime(true) - $t1) * 1000);
$url = "/busquedas/toponimoxml";
$url_prev = "";
$url_next = "";
$url_first = "";
$url_last = "";

// first
$url_first = sprintf("%s/%d/%d/?texto=%s", $url, 1, $num, urlencode($text));

// next
if ($page > 1){
    $url_prev = sprintf("%s/%d/%d/?texto=%s", $url, $page - 1, $num, urlencode($text));
}
if (count($result) > 0){
    $url_next = sprintf("%s/%d/%d/?texto=%s", $url, $page + 1, $num, urlencode($text));
}

// last
$totalpage = 0;
if ($total % $num > 0) {
    $totalpage = (int) ($total / $num) + 1;
} else {
    $totalpage = (int) ($total / $num);
}
$url_last = sprintf("%s/%d/%d/?texto=%s", $url, $totalpage, $num, urlencode($text));
if ($page == 1) {
    $url_prev = "";
}
if ($page == $totalpage) {
    $url_next = "";
}
if ($total < $num) {
    $url_first = "";
    $url_last = "";
}

$xml = new SimpleXMLElement('<rows/>');
foreach ($result as $row) {
    $xmlrow = $xml->addChild('row');
    $xmlrow->addChild('id', $row['id']);
    $xmlrow->addChild('localizacion', htmlspecialchars($row['localizacion']));
    $xmlrow->addChild('clasificacion', htmlspecialchars($row['clasificacion']));
    $xmlrow->addChild('nombre', htmlspecialchars($row['nombre']));
    $xmlrow->addChild('descripcion', htmlspecialchars($row['nombre']));
    $xmlrow->addChild('rank', $row['puntuacion']);
    $xmlrow->addChild('x', $row['longitud']);
    $xmlrow->addChild('y', $row['latitud']);
    $xmlrow->addChild('imagen', $row['imagen']);
    $xmlrow->addChild('codigo', $row['codigo']);
}
$t4 = round((microtime(true) - $t1) * 1000);
$xml->addAttribute('page', $page);
$xml->addAttribute('numpage', $num);
$xml->addAttribute('total', $total);
$xml->addAttribute('time', $t4);
$xml->addAttribute('urlprev', $url_prev);
$xml->addAttribute('urlnext', $url_next);
$xml->addAttribute('urlfirst', $url_first);
$xml->addAttribute('urllast', $url_last);
header('Content-type: text/xml; charset=utf-8');
print($xml->asXML());
$stmt = null;
$dbconn = null;
die();
?>
