Saturday, March 27, 2010

Agenda mensual con calendario en PHP (IV)

Esta es la clase Semana.
/* Clase Semana */
class Semana
{
    /* Miembros */
    private $dias;
    private $numSemanaAnyo;
    
    /* Métodos de acceso */
    public function getNumSemanaAnyo() 
    {
        return $this->numSemanaAnyo;
    }
    
    public function getDias() 
    {
        return $this->dias;
    }
    
    /* Metodos */
    
    /* Genera los días de una semana */
    public function creaDiasSemana(&$diaActual, $anyo, $mes, $finMes)
    {          
        /*Se crea la semana*/
        $this->numSemanaAnyo = Fechas::getSemanaAnyo($anyo, $mes, $diaActual);
         
        $diaSemana = Fechas::getDiaSemana($anyo, $mes, $diaActual);
        
        /*Se crea el dia actual*/
        $diaActAux = $diaActual; 
        
        /*Se calcula lo que hay que retroceder*/
        $atras = $diaSemana - 1;
        
        /*Retrocedemos*/
        for($i = 0; $i < $atras; $i++)
        {
            /*Se crea un nuevo día*/
            $this->dias[$diaSemana - 2 - $i] = new Dia($diaSemana - 1 - $i,0,false);
        }
             
        /*Se calcula lo que hay que avanzar*/
        $adelante= 7 - $diaSemana + 1;
        
        /*Avanzamos*/
        for($i = 0; $i < $adelante; $i++)
        {   
            /*Se comprueba si el día está dentro del mes*/
            $perteneceAlMes = ( $diaActAux <= $finMes );

            /*Se crea un nuevo día*/
            $this->dias[$diaSemana - 1 + $i] = new Dia($diaSemana + $i, $diaActAux, $perteneceAlMes);
            
            /*Se incrementa el valor del día actual si se está dentro del mes*/    
            $diaActAux = $diaActAux + 1;
        }
         
        /*Se actualiza el día actual de forma que la próxima semana empiece en Lunes*/
        $diaActual = $diaActual + $adelante;
        return;
    }
    
    public function setEvento($evento, $diaSemana)
    {
        $this->dias[$diaSemana - 1]->setEvento($evento);
    }
    
    public function getEvento($diaSemana)
    {
        return $this->dias[$diaSemana - 1]->getEvento();
    }
    
    public function muestraEvento($diaSemana)
    {
        $this->dias[$diaSemana - 1]->muestraEvento();
    }
    
    /* Muestra el HTML correspondiente a una semana */
    public function muestraSemana()
    {
        /*Se abre la fila*/
        printf("<tr>\n");
        
        /*La primera columna lleva el número de semana*/
        printf("<td class=\"semana\"> %d </td>\n", $this->numSemanaAnyo);
        
        /*Se genera el HTML de los días*/
        foreach($this->dias as $dia)
        {
            $dia->muestraDia();
        }
        
        /*Se cierra la fila*/
        printf("</tr>\n"); 
    }
}

No comments:

Post a Comment