|
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/generales/calendario/ |
Upload File : |
<?
/************************************************************
M�TODO: dibuja_diasmes
DESCRIPCION: dibuja los dias del mes en el calendario
PARAMETROS: $mes, $ano -- mes y a�o seleccionados
$aplicacion -- nombre de la aplicaci�n que llama la funci�n
RETORNA:
*************************************************************/
function dibuja_diasmes($mes,$ano, $aplicacion){
$dia_actual = 1; //Variable para llevar la cuenta del dia actual
$numero_dia = calcula_numero_dia_semana(1,$mes,$ano);//obtiene el numero del dia de la semana del primer dia
$ultimo_dia = ultimoDia($mes,$ano);//obtiene el �ltimo dia del mes
//calcula las noticias activas para el mes seleccionado
$fechaini = $ano.'-'.$mes.'-1';
$fechafin = $ano.'-'.$mes.'-'.$ultimo_dia;
$dias=chkmaxnotactC($fechaini, $fechafin,$aplicacion);
$maxnotact= retmaxacti($aplicacion); //obtiene el parametro de maximo de noticias o eventos
//escribe la primera fila de la semana
echo '<tr align="center" valign="middle" class="dia">';
for ($i=0;$i<7;$i++){
if ($i < $numero_dia){//si el dia de la semana i es menor que el numero del primer dia de la semana no pone nada en la celda
echo '<td height="14"> </td>';
} else {
if($dias[$dia_actual]>0 && $dias[$dia_actual] < $maxnotact)
if($dias[$dia_actual] >= $maxnotact-3 && $dias[$dia_actual] < $maxnotact)
echo '<td height="14" class="diaEvento" bgcolor="#003399">
<a style="cursor:hand " onClick="llama_paginaC('.$mes.','.$ano.','.$dia_actual.','.$aplicacion.') ">'.$dia_actual.'</a></td>';
else
echo '<td height="14" class="diaEvento" >
<a style="cursor:hand " onClick="llama_paginaC('.$mes.','.$ano.','.$dia_actual.','.$aplicacion.') ">'.$dia_actual.'</a></td>';
elseif ($dias[$dia_actual] >= $maxnotact)
echo '<td height="14" bgcolor="#FF9900" class="topeEvento">
<a style="cursor:hand " onClick="llama_paginaC('.$mes.','.$ano.','.$dia_actual.','.$aplicacion.')">'.$dia_actual.'</a></td>';
else
echo '<td height="14">'.$dia_actual.'</td>';
$dia_actual++;
}
}
echo "</tr>";
//recorro todos los dem�s d�as hasta el final del mes
$numero_dia = 0;
while ($dia_actual <= $ultimo_dia){
if ($numero_dia == 0) //si estamos a principio de la semana escribo el <TR>
echo '<tr align="center" valign="middle" class="dia">';
if($dias[$dia_actual]>0 && $dias[$dia_actual] < $maxnotact)
if($dias[$dia_actual] >= $maxnotact-3 && $dias[$dia_actual] < $maxnotact)
echo '<td height="14" class="diaEvento" bgcolor="#003399">
<a style="cursor:hand " onClick="llama_paginaC('.$mes.','.$ano.','.$dia_actual.','.$aplicacion.') ">'.$dia_actual.'</a></td>';
else
echo '<td height="14" class="diaEvento" >
<a style="cursor:hand " onClick="llama_paginaC('.$mes.','.$ano.','.$dia_actual.','.$aplicacion.') ">'.$dia_actual.'</a></td>';
elseif ($dias[$dia_actual] >= $maxnotact)
echo '<td height="14" bgcolor="#FF9900" class="topeEvento">
<a style="cursor:hand " onClick="llama_paginaC('.$mes.','.$ano.','.$dia_actual.','.$aplicacion.') ">'.$dia_actual.'</a></td>';
else
echo '<td height="14">'.$dia_actual.'</td>';
$dia_actual++;
$numero_dia++;
if ($numero_dia == 7){
$numero_dia = 0;
echo "</tr>";
}
}
//compruebo que celdas me faltan por escribir vacias de la �ltima semana del mes
for ($i=$numero_dia;$i<7;$i++){
echo '<td height="14"> </td>';
}
echo "</tr>";
echo "</table>";
}
/************************************************************
M�TODO: dibuja_calendario
DESCRIPCION: dibuja el calendario para eventos y noticias
tiene en cuenta la informaci�n depositada en la base de datos
PARAMETROS: $mes, $ano -- mes y a�o seleccionados
$aplicacion -- nombre de la aplicaci�n que llama la funci�n
RETORNA:
*************************************************************/
function dibuja_calendario($mes, $ano, $aplicacion, $url){
//inicio tabla general que contendr� el calendario
echo '<table width="217" height="169" border="0" cellpadding="0" cellspacing="0">
<tr><td width="217" height="169" valign="top">';
//dibuja encabezado
echo '<table width="192" border="0" cellpadding="0" cellspacing="0" bordercolor="#FFFFFF">
<tr><td><img src="img/calendario/top.gif" width="210" height="23"></td></tr></table>';
//dibuja linea de mes y a�o seleccionado
$mes_anterior = $mes - 1;
$ano_anterior = $ano;
if ($mes_anterior==0){
$ano_anterior--;
$mes_anterior=12;
}
$mes_siguiente = $mes + 1;
$ano_siguiente = $ano;
if ($mes_siguiente==13){
$ano_siguiente++;
$mes_siguiente=1;
}
$nombremes=fncNombreMes($mes);
echo ' <table width="210" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="15"><img src="img/calendario/anoLeftCorner.gif" width="15" height="20"></td>
<td width="22"><a onClick="envia_datos('.$mes_anterior .','.$ano_anterior.')">
<img src="img/calendario/prevMonth.gif" width="22" height="20" style="cursor:hand "></a></td>
<td width="136" background="img/calendario/mes_bg.gif"><div align="center" class="anioMes">';
echo $nombremes.' de '.$ano;
echo ' </div></td>
<td width="22" align="right"><a onClick="envia_datos('.$mes_siguiente .','.$ano_siguiente.')">
<img src="img/calendario/nextMonth.gif" width="22" height="20" style="cursor:hand "></a></td>
<td width="15" align="right"><img src="img/calendario/anoRightCorner.gif" width="15" height="20"></td>
</tr>
</table>';
//dibuja linea de selects de mes y a�o
echo'<table width="215" border="0" cellpadding="0" cellspacing="0" >
<tr ><td width="7" align="right"><img src="img/calendario/leftCorner2.gif" width="5" height="27"></td>
<td width="89" background="img/calendario/listAnioRight.gif">';
fncMuestraNombreMes($mes, 'mes_calendario'); //muestra el select del mes
echo ' </td>
<td width="34" align="center" background="img/calendario/listAnioRight.gif"></td>
<td width="73" align="left" background="img/calendario/listAnioRight.gif">';
fncMuestraAno($ano, 'ano_calendario');
echo' </td>
<td width="12"><img src="img/calendario/rightCorner.gif" width="5" height="27"></td>
</tr>
</table>';
//dibuja la linea con la inicial del dia
echo '
<table width="192" border="0" cellpadding="0" cellspacing="0" bordercolor="#FFFFFF">
<tr>
<td width="30"><img src="img/calendario/01lunes.gif" width="30" height="20"></td>
<td width="30"><img src="img/calendario/01martes.gif" width="30" height="20"></td>
<td width="30"><img src="img/calendario/01miercoles.gif" width="30" height="20"></td>
<td width="30"><img src="img/calendario/01Jueves.gif" width="30" height="20"></td>
<td width="30"><img src="img/calendario/01viernes.gif" width="30" height="20"></td>
<td width="12"><img src="img/calendario/01sabado.gif" width="30" height="20"></td>
<td width="30"><img src="img/calendario/01domingo.gif" width="30" height="20"></td>
</tr>
</table>';
//dibuja los dia del mes
echo '<table width="209" border="1" cellpadding="0" cellspacing="0" bordercolor="#CCCCCC" bgcolor="#E8E8E8">';
dibuja_diasmes($mes,$ano, $aplicacion);
echo '</table>';
//fin tabla general que contendr� el calendario
echo '</td></tr></table>';
}
/************************************************************
M�TODO: retmaxacti
DESCRIPCION: retorna el parametro de maximo de noticias o eventos
PARAMETROS:
$aplicacion nombre de la aplicaci�n que llama la funci�n
los valores posibles son 0 (noticias), 1 (eventos )
RETORNA: $maxacti
*************************************************************/
function retmaxacti($aplicacion){
//plantea la consulta de acuerdo a la aplicaci�n que llama
if($aplicacion== 0)
$consulta = " select parametrica_id as id, parametrica_valor as valor
from parametrica
where parametrica_grupo='nt_maxnot'
and parametrica_id='activas'
order by id desc";
if($aplicacion== 1)
$consulta = " select parametrica_id as id, parametrica_valor as valor
from parametrica
where parametrica_grupo='ev_maxeve'
and parametrica_id='activos'
order by id desc";
$resultado = consultar($consulta);
$filas = mysql_fetch_assoc($resultado);
return $filas['valor'];
}
/************************************************************
M�TODO: chkmaxnotactC
DESCRIPCION: chequea que el n�mero de noticias activas en un periodo
PARAMETROS: rango de fechas en que la noticia estar� activa
$fechapublic: fecha inicial del rango
$fechafin: fecha final del rango -- corresponde a un mes
$aplicacion nombre de la aplicaci�n que llama la funci�n
los valores posibles son noticias, eventos
RETORNA:
*************************************************************/
function chkmaxnotactC($fechapublic, $fechafin, $aplicacion){
$maxnotact= retmaxacti($aplicacion); //obtiene el parametro de maximo de noticias o eventos
$indmaxnotactexc='FALSE';//asume que ning�n dia se pasa del n�mero de noticias activas
//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
//plantea la consulta de acuerdo a la aplicaci�n que llama
if($aplicacion== 0)
$consulta = "select noticia_id, noticia_fechapublic as fechapublic, noticia_fechafin as 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')";
if($aplicacion== 1)
$consulta = "select evento_id, evento_fechapubinic as fechapublic, evento_fechapubfin as fechafin
from eventos
where ('$fechapublic' >= evento_fechapubinic and '$fechapublic' <= evento_fechapubfin)
or ('$fechafin' >= evento_fechapubinic and '$fechafin' <= evento_fechapubfin)
or (evento_fechapubfin >= '$fechapublic' and evento_fechapubfin <= '$fechafin')
or (evento_fechapubinic >= '$fechapublic' and evento_fechapubinic <= '$fechafin')";
$resultado = 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) $cantidad_registros = mysql_num_rows($resultado);
//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;
if($cantidad_registros>0){
//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['fechapublic']);
$bdfechap = $ano*365+$mes*30+$dia;
list($ano, $mes, $dia) = explode('-',$filas['fechafin']);
$bdfechaf = $ano*365+$mes*30+$dia;
$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
$filas=$cantidad_registros; $columnas=$fechaf-$fechap;//calcula filas y columnas de la matriz
$ptrdias=1;//apuntador para arreglo d dias exceden noticias activas
for($i=0;$i<=$columnas;$i++){
$suma=0;
for($j=0;$j<$filas;$j++)
$suma+=$matnotact[$j][$i]; //calcula el n�mero de noticias activas para un dia
$dias[$ptrdias]=$suma; //guarda el n�mero de noticias activas cada dia
$ptrdias++;
}//fin for($i=0;$i<=$columnas;$i++)
}//fin if($cantidad_registros>0)
else{//llena de ceros la matriz
$ptrdias=$fechaf-$fechap;//calcula el numero de dias del mes
for($i=1;$i<=$ptrdias+1;$i++)
$dias[$i]=0;
}
return $dias;
}
function fncNombreMes($mes){
switch($mes){
case '1': $nmes='Enero' ;break;
case '2': $nmes='Febrero' ;break;
case '3': $nmes='Marzo' ;break;
case '4': $nmes='Abril' ;break;
case '5': $nmes='Mayo' ;break;
case '6': $nmes='Junio' ;break;
case '7': $nmes='Julio' ;break;
case '8': $nmes='Agosto' ;break;
case '9': $nmes='Septiembre' ;break;
case '10': $nmes='Octubre' ;break;
case '11': $nmes='Noviembre' ;break;
case '12': $nmes='Diciembre' ;break;
}
return $nmes;
}
function fncMuestraNombreMes($mes, $nombre){
echo '<select name='.$nombre.' onChange="envia_datos1()" class="mesesAnio">';
for($i=1;$i<=12;$i++){
echo '<option value='.$i;
if ($mes==$i) echo " selected>";
else echo " >";
$nmes = fncNombreMes($i);
echo $nmes;
}
echo '</select>';
}
function fncMuestraAno($ano, $nombre){
$tiempo_actual = time();
$anoA = date("Y", $tiempo_actual);
echo '<select name='.$nombre.' onChange="envia_datos1()" class="mesesAnio">';
for($i=$anoA-1;$i<=$ano+4;$i++){
echo '<option value='.$i;
if ($ano==$i) echo " selected>";
else echo " >";
echo $i;
}
echo '</select>';
}
function ultimoDia($mes,$ano){
$ultimo_dia=28;
while (checkdate($mes,$ultimo_dia + 1,$ano)){
$ultimo_dia++;
}
return $ultimo_dia;
}
function fncMuestraDia($dia,$mes,$ano, $nombre){
$ultimo_dia = ultimoDia($mes,$ano);
echo '<select name='.$nombre.'>';
for($i=1;$i<=$ultimo_dia;$i++){
echo '<option value='.$i;
if ($dia==$i) echo " selected>";
else echo " >";
echo $i;
}
echo '</select>';
}
function calcula_numero_dia_semana($dia,$mes,$ano){
$numerodiasemana = date('w', mktime(0,0,0,$mes,$dia,$ano));
if ($numerodiasemana == 0)
$numerodiasemana = 6;
else
$numerodiasemana--;
return $numerodiasemana;
}
?>