|
Server : Apache/2.4.62 System : FreeBSD fbsdweb2.web.rcn.net 14.1-RELEASE FreeBSD 14.1-RELEASE releng/14.1-n267679-10e31f0946d8 GENERIC amd64 User : www ( 80) PHP Version : 8.3.8 Disable Function : NONE Directory : /domains/logicswapweb/aplicaciones/admon/noticias/tb_noticias/ |
Upload File : |
<?php
/******************************************************************
clase realizar operaciones en la base de datos
******************************************************************/
class met_noticias{
//Atributos de la clase
var $db_HOST = "localhost";
var $db_USER = "root";
var $basedatos='intranet';
var $vinculo ; //link de conexi�n a la base de datos
var $registros; //almacena el resultado de una consulta a la base de datos
var $maxnotact=20;
/************************************************************
M�TODO: conectar
DESCRIPCION: se conecta a una base de datos
PARAMETROS:
$basedatos: base de datos a la que se conectara
RETORNA:
error: si la conexion lo genera
*************************************************************/
function conectar(){
if (!$this->vinculo = mysql_connect($this->db_HOST,$this->db_USER))
{
$mensaje = "Error conectando a la base de datos";
$this->dis_mensaje($mensaje);
return false;
}
if (!mysql_select_db($this->basedatos,$this->vinculo))
{
$mensaje = "Error seleccionando la base de datos";
$this->dis_mensaje($mensaje);
return false;
}
}
/************************************************************
M�TODO: consultar
DESCRIPCION: Realiza conexion a la base de datos y
Verifica que la base de datos sea la adecuada
PARAMETROS:
$consulta: consulta a realizar en la base de datos
$basedatos: base de datos en la que se realizar� la consulta
RETORNA:
error: cuando la consulta genera algun error
$registros: cuando la consulta no genera errores
*************************************************************/
function consultar($consulta){
$this->conectar();
$this->registros = mysql_query($consulta,$this->vinculo);
echo mysql_error();
return $this->registros;
}
/************************************************************
M�TODO: liberar
DESCRIPCION: Libera los recursos asociados a el cursor registros
PARAMETROS:
RETORNA:
*************************************************************/
function liberar()
{
mysql_free_result($this->registros);
}
/************************************************************
M�TODO: cerrar
DESCRIPCION: cierra la conexi�n
PARAMETROS:
RETORNA:
*************************************************************/
function cerrar()
{
mysql_close($this->vinculo);
}
/************************************************************
M�TODO: dis_mensaje
DESCRIPCION: despliega un mensaje en la pantalla
PARAMETROS: mensaje a desplegar
RETORNA:
*************************************************************/
function dis_mensaje($mensaje)
{
echo "<tr>
<td colspan=\"4\" class='pront' align='center'>
<br><FONT color=#000099 face='Arial, Helvetica, sans-serif' size=2>".$mensaje."</FONT><br><br>
</td>
</tr>";
}
function chkmaxnotact($fechapublic, $fechafin){
//selecciona todas las noticias que se traslapan con el periodo dado
//condiciones: 1. fechapublic esta en [bdfechapublic, bdfechafin] --> fechapublic >= bdfechapublic && fechapublic <= bdfechafin
// 2. fechafin esta en [bdfechapublic, bdfechafin] --> fechafin >= bdfechapublic && fechafin <= bdfechafin
// 3. bdfechapublic esta en [fechapublic, fechafin] --> bdfechapublic >= fechapublic && bdfechapublic <= fechafin
// 4. bdfechafin esta en [fechapublic, fechafin] --> bdfechafin >= fechapublic && bdfechafin <= fechafin
$indicador='FALSE';//asume que ning�n dia se pasa del n�mero de noticias activas
$consulta = "select noticia_id, noticia_fechapublic, noticia_fechafin
from noticias
where ('$fechapublic' >= noticia_fechapublic and '$fechapublic' <= noticia_fechafin)
or ('$fechafin' >= noticia_fechapublic and '$fechafin' <= noticia_fechafin)
or (noticia_fechafin >= '$fechapublic' and noticia_fechafin <= '$fechafin')
or (noticia_fechapublic >= '$fechapublic' and noticia_fechapublic <= '$fechafin')";
$resultado = $this->consultar($consulta);
//para cada dia del periodo se cuenta el n�mero de noticias activas
//carga matriz con:cada fila corresponder� a las fechas de una noticia
// cada columna corresponde a cada dia
// cada celda contendr� (1)activo o (0) no dentro del rango
if($resultado) echo $cantidad_registros = mysql_num_rows($resultado).'<br>';
if($cantidad_registros>0){
//convierte fechas a dias para facilitar la comparaci�n
list($ano, $mes, $dia) = explode('-',$fechapublic);
$fechap = $ano*365+$mes*30+$dia;
list($ano, $mes, $dia) = explode('-',$fechafin);
$fechaf = $ano*365+$mes*30+$dia;
//carga matriz
$fnoticia=0;//iniciliza apuntador de filas
while($filas = mysql_fetch_assoc($resultado)){//para cada una de las noticias
//convierte fechas de la base de datos a dias para facilitar la comparaci�n
list($ano, $mes, $dia) = explode('-',$filas['noticia_fechapublic']);
$bdfechap = $ano*365+$mes*30+$dia;
list($ano, $mes, $dia) = explode('-',$filas['noticia_fechafin']);
$bdfechaf = $ano*365+$mes*30+$dia;
echo $filas['noticia_fechapublic'].'***'.$filas['noticia_fechafin'].'<br>';
$fecha = $fechap;//inicializa apuntador de fechas
$cdiactivo=0;//iniciliza apuntador de columnas
//carga la fila de la notica activa con 1 � 0
while($fecha <= $fechaf){
if($fecha >= $bdfechap && $fecha <= $bdfechaf) //si la fecha es activa
$matnotact[$fnoticia][$cdiactivo]=1;
else $matnotact[$fnoticia][$cdiactivo]=0;
$cdiactivo++;//incrementa el apuntador de las columnas
$fecha++;//incrementa el apuntador de fechas
}
$fnoticia++; //incrementa el apuntador de las filas
}//fin while($filas = mysql_fetch_assoc($resultado))
////para cada dia calcula el n�mero de noticias activas
echo 'filas:'.$filas=$cantidad_registros; echo 'columnas'.$columnas=$fechaf-$fechap.'<br>';//calcula filas y columnas de la matriz
$ptrdias=0;//apuntador para arreglo d dias exceden noticias activas
for($i=0;$i<=$columnas;$i++){
$suma=0;
for($j=0;$j<$filas;$j++){
echo $matnotact[$j][$i];
$suma+=$matnotact[$j][$i];
}
echo 'suma'.$suma.'<br>';
if($suma >= $this->maxnotact){
$dias[$ptrdias]=$i;//sirve para calcular los dias en que se excedi� el n�mero de noticias activas
$ptrdias++;
$indicador='TRUE';
}
}
for($i=0;$i<$ptrdias;$i++)
$dias_excede[$i] = $fechap+$dias[$i];//expresado en dias
}//fin if($cantidad_registros>0)
//calcula los dias en que se excedi� el n�mero de noticias
//retorna el indicador
return $indicador;
}
}//*********fin de la clase****************
$met_noticias = new met_noticias;
echo '****'.$indicador=$met_noticias->chkmaxnotact('2005-07-25', '2005-07-25');
?>