/**
* Metodo recursivo que devuelve una descripcion recortada hasta la ultima
* palabra completa dentro del rango indicado.
*
* @param String $idioma Idioma en el que se debe obtener la
* descripcion
* @param Int $id ID del registro a obtener
* @param Array $campos Campos de los que obtener la informacion,
* ordenados por orden de preferencia. Se devolveran los datos del primer
* campo con datos
* @param Int $puntoCorte Numero maximo de caracteres a obtener
* @param Int $recursiva Valor que va incrementando hasta obtener un
* resultado en la busqueda
* @return mixed $rs Objeto referencia a RecordSet
*/
public function &descripcionCorta($idioma, $id = 0, $imagen, $campos = 'descripcion', $puntoCorte = 300, $recursividad = 1) {
if($id != 0) {
$relid = $id;
} else {
$relid = '(SELECT ' . $this->nombreTabla . '.id FROM ' . $this->nombreTabla . ", global_imgWeb_publicar img WHERE " .
$this->nombreTabla . ".id = img.relid AND img.tabla = '". $this->nombreTabla.
"' AND img.flag_visible = 1 ORDER BY fecha_publicacion DESC LIMIT 1)";
}
if(is_array($campos)) {
foreach($campos as $k => $campo) {
$case .= ($k == 0 ? "" : ",");
$case .= "case
when length($campo) > ". $puntoCorte ." then
greatest(
locate(' ', substr($campo, 1, ". $puntoCorte ."), length(substr($campo, 1, ". $puntoCorte .")) - $recursividad),
locate('.', substr($campo, 1, ". $puntoCorte ."), length(substr($campo, 1, ". $puntoCorte .")) - $recursividad),
locate(',', substr($campo, 1, ". $puntoCorte ."), length(substr($campo, 1, ". $puntoCorte .")) - $recursividad)
)
else
length($campo)
end as $campo";
}
} else {
$case .= "case
when length($campos) > ". $puntoCorte ." then
greatest(
locate(' ', substr($campos, 1, ". $puntoCorte ."), length(substr($campos, 1, ". $puntoCorte .")) - $recursividad),
locate('.', substr($campos, 1, ". $puntoCorte ."), length(substr($campos, 1, ". $puntoCorte .")) - $recursividad),
locate(',', substr($campos, 1, ". $puntoCorte ."), length(substr($campos, 1, ". $puntoCorte .")) - $recursividad)
)
else
length($campo)
end as $campo";
}
$sql = "SELECT " . $case;
$from = ' FROM fundacion_campanyas_idi';
$where = " WHERE relidioma = '" . $idioma . "' AND relcampanya = " . $relid;
$sql .= $from . $where;
$rs = $this->Execute($sql);
if(($rs->fields) && (count($rs->fields))) {
if($rs->fields[$campos[0]] == 0 && $rs->fields[$campos[1]] == 0) {
if(!$this->ErrorMsg()) {
$desc = $this->descripcionCorta($idioma, $id, $imagen, $campos, $puntoCorte, $recursividad + 5);
} else {
w('Se produjo un error de MySQL: ' . $this->ErrorMsg());
}
} else {
foreach($campos as $campo) {
if(!$desc && $rs->fields[$campo] > 0) {
$campos = $this->abbTabla . '.id, ' .
$this->abbTablaIdi . '.titulo, ' .
' concat(substr(' . $this->abbTablaIdi . '.' . $campo . ', 1, '. $rs->fields[$campo] . "),'...') as descripcion, " .
' date_format(' . $this->abbTabla . '.fecha_publicacion, "%d-%m-%Y") as fecha_publicacion ';
$tablas = ' FROM ' . $this->nombreTabla . " " . $this->abbTabla .
' INNER JOIN ' . $this->nombreTablaIdi . ' ' . $this->abbTablaIdi .
' ON ' . $this->abbTabla . '.id=' . $this->abbTablaIdi . '.relcampanya' .
' INNER JOIN global_imgWeb_publicar g' .
' ON g.relid = ' . $this->abbTabla . '.id';
$where = ' g.flag_visible = 1' .
" AND g.tabla = 'fundacion_campanyas'" .
" AND g.relimagen = '". $imagen ."'" .
' AND ' . $this->abbTabla . '.fecha_publicacion <= CURDATE()' .
' AND ' . $this->abbTabla . '.fecha_caducidad > CURDATE()' .
' AND ' . $this->abbTablaIdi . ".relidioma = '" . $idioma . "'";
$where .= ' AND ' . $this->abbTabla . '.id = ' . $relid;
$order = $this->abbTabla . '.fecha_publicacion DESC';
$limit = ' LIMIT 1';
$sql = 'SELECT ' . $campos . $tablas;
$sql .= ' WHERE ' . $where . ' ORDER BY ' . $order . $limit;
$desc = $this->Execute($sql);
}
}
}
return $desc;
} else {
return $this->_getText('LBL_NO_HAY_REGISTROS');
}
}