<?php
/**
* Clase BuscadorFullText.
* Es responsable de entregarnos el codigo de una consulta para la Base de datos
* MySQL con motor MyIsam, basandose en los Indices FullText.
* Ver http://dev.mysql.com/doc/refman/5.0/es/fulltext-search.html
* Ver http://dev.mysql.com/doc/refman/5.0/es/fulltext-fine-tuning.html
* Ver http://dev.mysql.com/doc/refman/5.0/es/information-functions.html
*
* @package varias creado en el projecto opet
* @copyright 2011 - ObjetivoPHP
* @license Gratuito (Free) http://www.opensource.org/licenses/gpl-license.html
* @author Marcelo Castro (ObjetivoPHP)
* @version 2.3.0 (27/12/2009 - 15/05/2011)
* @since ver uso de str_word_count( $_POST['buscar'], 1, '+-~<>');
* para proxima version
* @since Continua serie BuscadorGenerico 4.4.6 del 21/05/2007.
*/
class BuscadorFullText
{
/**
* Contiene la cadena de busqueda, generalmente su contenido se correlaciona
* con un campo en el formulario de busqueda.
* @var string
*/
private $_textoDeBusqueda;
/**
* Contiene la tabla de la base en la cual se realizara la consulta.
* @var string
*/
private $_tablaMysql;
/**
* Coleccion de campos que se retornaran como resultado.
* @var array
*/
private $_colCamposResultado = array();
/**
* Coleccion de campos que se utilizan para la busqueda de tipo fulltext.
* @var array
*/
private $_colCamposFullText = array();
/**
* Coleccion de parametros adiccionales a incluirle a la consulta.
* Todos se añaden con tipo AND.
* @var array
*/
private $_colParametros = array();
/**
* Contiene el tipo de consulta que se realizo.
* @var string
*/
private $_tipoConsulta = 'FULLTEXT';
/**
* Configura si utiliza SQL_CALC_FOUND_ROWS en la consulta mysql para luego extraer la
* cantidad de resultados con limit.
* @var boolean
*/
private $_SQL_CALC_FOUND_ROWS = true;
/**
* Contiene el metodo de envio del Formulario.
* Utilizado en los metodos getValue y addParametros.
* @var string
*/
private $_metodoEnvio = 'POST';
/**
* Contiene los operadores para parametros variables permitidos.
* @var array
*/
private static
$_operadores = array('=', '<=>', '<>', '!=', '<=', '<', '>', 'IS', 'IS NOT', 'IS NULL',
'IS NOT NULL');
/**
* Configura si la palabra se toma en cuenta una vez, o cada vez que aparece.
* Por defecto cada vez que aparece se toma en cuenta.
* @var boolean
*/
private $_sumarUnaVez = false;
private $_filtrarPalabras = array();
/**
* Metodo __construct.
* Crea un objeto BuscadorFullText
* @param string $buscar Cadena de busqueda puede contener +-~><
* @param string $tabla Nombre de la Tabla MySQL a usar en la consulta.
* @return void
*/
public function __construct($buscar, $tabla)
{
}
/**
* Metodo addCamposResultado.
* Ingresa los campos que se usaran como resultado de la consulta.
* @param string/array $campo Contiene el o los nombres de los campos.
* @return void
*/
public function addCamposResultado($campo)
{
}
foreach ($campo as $valor) {
$this->_colCamposResultado[] = $valor;
}
}
}
/**
* Metodo addFiltro.
* Agrega palabras que seran eliminados de la consulta de busqueda.
* @param array Contiene las palabras a eliminar.
* @return void
*/
public function addFiltro
(array $filtrar) {
return false;
}
// Si es un arreglo lo dejo preparado.
foreach($filtrar as $palabra) {
$palabra = '/[\w]*(\s' . $palabra . '\*)[\w]*/';
$this->_filtrarPalabras[] = $palabra;
}
}
/**
* Metodo limitarLargo.
* Limita el largo de un campo a un determinado numero de caracteres.
* @version 2.1.0 (21/11/2010)
* @param string $campo nombre de campo.
* @param integer $caracteres Cantidad de caracteres que retornara la consulta.
* @return void
*/
public function limitarLargo($campo, $caracteres)
{
if ($clave !== false) {
$caracteres = ($caracteres > 0)? $caracteres : 250;
$this->_colCamposResultado[$clave] = 'LEFT(`' . $campo . '`, ' .$caracteres . ') as ' . $campo;
}
}
/**
* Metodo addCamposFullText.
* Ingresa los campos que se usaran para la consulta.
* @param string/array $campo Contiene el o los nombres de los campos.
* @return void
*/
public function addCamposFullText($campo)
{
}
foreach ($campo as $valor) {
$this->_colCamposFullText[] = $valor;
}
}
}
/**
* Metodo addParametrosVariables.
* Inserta un parametro a la consulta.
* @param string $campo Nombre del campo en el formulario de consulta, debe
* coincidir con el de la base de datos.
* @param string $operador operador de consulta = > < etc.
* @return void
*/
public function addParametrosVariables($campo, $operador)
{
$valor = ($this->_metodoEnvio == 'POST')? $_POST[$campo] : $_GET[$campo];
if (!in_array($operador, self::$_operadores)) { trigger_error('Operador de Consulta no valido en Metodo ' . __METHOD__, E_USER_ERROR); }
$parametro = $campo . ' ' . $operador . " '" . addslashes($valor) . "'"; $this->_colParametros[] = $parametro;
}
/**
* Metodo addParametrosFijos.
* Agrega parametros fijos en la consulta.
* @param string $parametros parametro tipo campo='valor'
* @return void
*/
public function addParametrosFijos($parametros)
{
$this->_colParametros[] = $parametros;
}
/**
* Metodo setSqlCalcFoundRows.
* Configura si debe ponerse en la consulta MySQL la clausula SQL_CALC_FOUND_ROWS.
* @param boolean $boolean true por si, false por no.
* @return void
*/
public function setSqlCalcFoundRows($boolean)
{
$this->_SQL_CALC_FOUND_ROWS = ($boolean)? true:false;
}
/**
* Metodo setMetodoEnvio.
* Configura por que metodo se envia el formulario (GET, POST).
* @param string $metodo Metodo a utilizarce para levantar las variables
* del formulario.
* @return void
*/
public function setMetodoEnvio($metodo = 'POST')
{
($metodo == 'GET')? $this->_metodoEnvio = 'GET' : $this->_metodoEnvio = 'POST';
}
/**
* Metodo getValue.
* Retorna una cadena que se puede colocar dentro del value de un campo
* de busqueda.
* @param string $campo Nombre del campo que se debe levantar.
* @param string $metodo metodo POST o GET. Por defecto POST.
* @return string Cadena tipo value.
*/
public function getValue($campo)
{
$valor = ($this->_metodoEnvio == 'POST')? $_POST[$campo] : $_GET[$campo];
}
/**
* Configura si se desea tomar una palabra con incidencia igual 1 por mas que
* se repita (true), o si la palabra incide cada vez que aparece (false)
* @param boolean $cont
*/
public function setContarUnaVez($cont = false)
{
$this->_sumarUnaVez = $cont ? true : false;
}