Viewing file: Preparar.php (12.47 KB) -rw-rw-rw- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
/** Clase que prepara una cadena antes de realizar una busqueda con ella **/
class Preparar {
/* BUSQUEDA COMBINADA */
// Criterios y prefijos "modifiquelos dependiendo de sus requerimientos"
var $criteriosC = array (
array ("autor", "au-", "Autor"),
array ("titulo", "ti-", "Título"),
array ("tema", "te-", "Tema"),
array ("lugarg", "lg-", "Lugar Geográfico"),
array ("especies", "es-", "Especies"),
array ("desde", "an-", "Año Desde"),
array ("hasta", "an-", "Hasta"),
array ("libre", "", "Palabra o frase")
);
// Posiciones del criterio y el prefijo en criteriosC
var $posC = 0;
var $posP = 1;
var $posE = 2;
// Operadores "modifiquelos dependiendo de sus requerimientos"
var $operadoresC = array ("op1", "op2");
// Dice si cada criterio tiene o no operador "modifiquelos dependiendo de
// sus requerimientos"
var $haveOpsC = array (false, false, false, false, false, false, false, false);
/* BUSQUEDA LIBRE */
// Criterios
var $criterioL = "libre";
var $criterioL1 = "libre";
/** Metodo constructor de la clase Preparar **/
function Preparar (){}
/** Entrega el criterioC "criterio" en la posicion i **/
function getCriterioC ($i){
$tmp = $this->criteriosC[$i][$this->posC];
return $tmp;
}
/** Entrega el criterioC "prefijo" en la posicion i **/
function getCriterioP ($i){
$tmp = $this->criteriosC[$i][$this->posP];
return $tmp;
}
/** Entrega el criterioC "enunciado" en la posicion i **/
function getCriterioE ($i){
$tmp = $this->criteriosC[$i][$this->posE];
return $tmp;
}
/** Entrega el criterioL **/
function getCriterioL (){
return $this->criterioL;
}
/** Entrega el criterioL **/
function getCriterioLE (){
return $this->criterioL1;
}
/** Entrega el operadorC en la posicion i **/
function getOperadorC ($i){
return $this->operadoresC [$i];
}
/** Entrega el numero de criterios de criteriosC **/
function getNumCriteriosC (){
return count ($this->criteriosC);
}
/** Entrega el numero de operadores de operadoresC **/
function getNumOperadoresC (){
return count ($this->operadoresC);
}
/** Entrega la cadena de busqueda con los criterios de la busqueda
combinada y la cadena sobre, formulario con operadores **/
function pCriteriosCOps ($s, $o){
$ls = count ($s);
$lb = count ($this->haveOpsC);
$sobre = "";
$cadena = "";
$operador = false;
$op = "";
if ($ls == $lb){
$j = -1;
for ($i=0; $i<$ls; $i++){
$tmp = trim ($s[$i]);
if ($tmp){
$tmp = $this->prepararCad($tmp, $this->criteriosC[$i][$this->posP]);
if($operador){
$sobre .= ", '" . trim ($s[$i]) . "'" . " en " . $this->criteriosC[$i][$this->posE];
if ($this->haveOpsC[$i]){
$j++;
$op = $o[$j];
$cadena .= $op . $tmp;
}
else
$cadena .= $op . $tmp;
}
else {
$sobre .= "'" . trim ($s[$i]) . "'" . " en " . $this->criteriosC[$i][$this->posE];
$cadena .= $tmp;
}
$operador = true;
}
}
$cds = array ($cadena, $sobre);
return $cds;
}
else {
echo "El archivo Preparar.php está mal configurado !!";
echo "La longitud de criteriosC debe ser igual a la";
echo "de haveCriterios.";
echo "Corrija el problema para que el catalogo funcione bien !!";
}
return null;
}
/** Entrega la cadena de busqueda con los criterios de la busqueda
combinada, formulario sin operadores **/
function pCriteriosCLessOps ($s){
$ls = count ($s);
$op = "*";
$cadena = "";
$operador = false;
$sobre = "";
for ($i=0; $i<$ls; $i++){
$tmp = trim ($s[$i]);
if ($tmp && $i != 5 && $i != 6){
$tmp = $this->prepararCad($tmp, $this->criteriosC[$i][$this->posP]);
if($operador){
$cadena .= $op . $tmp;
$sobre .= ", '" . trim ($s[$i]) . "'" . " en " . $this->criteriosC[$i][$this->posE];
}
else {
$cadena .= $tmp;
$sobre .= "'" . trim ($s[$i]) . "'" . " en " . $this->criteriosC[$i][$this->posE];
}
$operador = true;
}
}
$tmp1 = trim ($s[5]);
$tmp2 = trim ($s[6]);
$cad = $this->desdeHasta ($tmp1, $tmp2);
if ($tmp1 > $tmp2){
$t = $tmp1;
$tmp1 = $tmp2;
$tmp2 = $t;
}
if ($cadena){
if ($cad){
$cadena .= $op . $cad;
}
}
else {
$cadena = $cad;
}
if ($tmp1){
if($operador){
$sobre .= ", " . $this->criteriosC[5][$this->posE] . " '" . $tmp1 . "'";
}
else {
$sobre .= " " . $this->criteriosC[5][$this->posE] . " '" . $tmp1 . "'";
}
$operador = true;
}
if ($tmp2){
if($operador){
$sobre .= ", " . $this->criteriosC[6][$this->posE] . " '" . $tmp2 . "'";
}
else {
$sobre .= " " . $this->criteriosC[6][$this->posE] . " '" . $tmp2 . "'";
}
$operador = true;
}
$cds = array ($cadena, $sobre);
return $cds;
}
/** Entrega la cadena de busqueda con el criterio de la busqueda
libre, formulario sin operadores **/
function pCriterioL ($s){
$cadena = "";
$sobre = "";
$tmp = trim ($s);
if ($tmp){
$tmp = $this->prepararCad($tmp, "");
$sobre = "'" . trim ($s) . "'" . " en " . $this->criterioL1;
$cadena .= $tmp;
}
$cds = array ($cadena, $sobre);
return $cds;
}
/** Regresa una cadena sin tildes, puntos, coma y parentesis **/
function vocalesEspacios ($cad){
// Quitando espacions en blanco del inicio y fin de cad
$s = trim ($cad);
// Quitando tildes y comillas francesas
$s = str_replace ("á", "a", $s);
$s = str_replace ("à", "a", $s);
$s = str_replace ("Á", "A", $s);
$s = str_replace ("À", "A", $s);
$s = str_replace ("é", "e", $s);
$s = str_replace ("è", "e", $s);
$s = str_replace ("É", "E", $s);
$s = str_replace ("È", "E", $s);
$s = str_replace ("í", "i", $s);
$s = str_replace ("ì", "i", $s);
$s = str_replace ("Í", "I", $s);
$s = str_replace ("Ì", "I", $s);
$s = str_replace ("ó", "o", $s);
$s = str_replace ("ò", "o", $s);
$s = str_replace ("Ó", "O", $s);
$s = str_replace ("Ò", "O", $s);
$s = str_replace ("ú", "u", $s);
$s = str_replace ("ù", "u", $s);
$s = str_replace ("Ú", "U", $s);
$s = str_replace ("Ù", "U", $s);
$s = str_replace (".", " ", $s);
$s = str_replace (",", " ", $s);
$s = str_replace ("(", " ", $s);
$s = str_replace (")", " ", $s);
$s = str_replace ("ñ", "n", $s);
$tok = strtok ($s," ");
$tmp = "";
while ($tok) {
$tmp = $tmp . $tok . " ";
$tok = strtok (" ");
}
$cadena = trim ($tmp);
return $cadena;
}
/** Cambia una cadena poniendole prefijos, operadores, etc **/
function cambiar ($cad, $plus, $nplus){
$tmp = str_replace ($plus, $nplus, $cad);
return $tmp;
}
/** Prepara una cadena para que quede lista para la busqueda en WWWIsis **/
function prepararCad ($cad, $pref) {
$tmp1 = "$*";
$tmp2 = "$";
$s = $this->vocalesEspacios ($cad);
$s1 = $this->cambiar (trim($s), "$", "");
$s2 = $this->cambiar ($s1, " ", $tmp1 . $pref);
$s2 = $pref . $s2;
$s2 = "(" . $s2 . $tmp2 . ")";
$s3 = "(" . $pref . $s . $tmp2 . ")";
$s4 = "(" . $s2 . "+" . $s3 . ")";
return $s4;
}
/** Prepara una cadena para que quede lista para la busqueda de diccionario
en WWWIsis **/
function prepararCadK1 ($cad, $pref) {
$s = $this->vocalesEspacios ($cad);
$s1 = $this->cambiar (trim($s), " ", "*" . $pref);
$s1 = $pref . $s1;
return $s1;
}
/** Prepara una cadena para los años desde hasta **/
function desdeHasta ($v1, $v2){
$n1 = $v1;
$n2 = $v2;
$res = -1;
$menor = -1;
$pref = $this->criteriosC[5][$this->posP];
if ($n1 == "" && $n2 == ""){
return "";
}
if ($n1 != "" && $n2 == ""){
return "(" . $pref . $n1 . ")";
}
if ($n1 == "" && $n2 != ""){
return "(" . $pref . $n2. ")";
}
if ($n1 == $n2){
return "(" . $pref . $n1 . ")";
}
else if ($n1 > $n2){
$res = $n1 - $n2;
$menor = $n2;
}
else {
$res = $n2 - $n1;
$menor = $n1;
}
$cad = "(" . $pref . $menor . "";
for ($i=1; $i<=$res; $i++){
$menor = $menor + 1;
$cad .= "+" . $pref . $menor;
}
return $cad . ")";
}
}
?>
|