Las clases van contenidas unas dentro de otras a modo de "matrioska".
La clase Mes es la que conecta con la BD.
/* Clase Mes */ class Mes { private $anyo; private $mes; private $numDiasMes; private $numSemanasMes; private $semanas; /* Constructor */ public function __construct($anyo, $mes) { //Inicializo los miembros $this->setAnyo($anyo); $this->setMes($mes); $this->numDiasMes = Fechas::getFinMes($anyo,$mes); $this->crearSemanasMes(); $this->addEventos(); } /* Métodos de acceso */ public function setAnyo($anyo) { $this->anyo = $anyo; } public function getAnyo() { return $this->anyo; } public function setMes($mes) { $this->mes = $mes; } public function getMes() { return $this->mes; } public function getNumDiasMes() { return $this->numDiasMes; } public function getNumSemanasMes() { return $this->numSemanasMes; } public function getSemanas() { return $this->semanas; } /* Métodos */ /* Genera las semanas de un mes */ private function crearSemanasMes() { /*Se inicializan las variables antes del bucle*/ $i = 0; /*Dia en que nos encontramos al recorrer la agenda*/ $diaActual = 1; //Se inicializa a 1 /*Mientras no hayamos entrado en otro mes*/ while( $diaActual <= $this->numDiasMes ) { /*Se crean las semanas*/ $this->semanas[$i] = new Semana(); $this->semanas[$i]->creaDiasSemana($diaActual, $this->anyo, $this->mes,$this->numDiasMes); $i = $i + 1; } /*Se guarda el número de semanas del mes*/ $this->numSemanasMes = $i; } /* Añade un evento a la agenda */ public function addEvento($dia, $evento) { $numSemanaIni = Fechas::getSemanaAnyo($this->anyo, $this->mes, 1); $numSemana = Fechas::getSemanaAnyo($this->anyo, $this->mes, $dia); //Si la primera semana del año es la 59 if(53==$numSemanaIni) { $numSemanaIni = 0; //Si además el evento es esa semana if(53==$numSemana) { $numSemana = 0; } } $indiceSemana = $numSemana - $numSemanaIni; $diaSemana = Fechas::getDiaSemana($this->anyo, $this->mes, $dia); $this->semanas[$indiceSemana]->setEvento($evento, $diaSemana); } /* Obtiene un evento de la agenda */ public function getEvento($dia) { $numSemanaIni = Fechas::getSemanaAnyo($this->anyo, $this->mes, 1); $numSemana = Fechas::getSemanaAnyo($this->anyo, $this->mes, $dia); //Si la primera semana del año es la 59 if(53==$numSemanaIni) { $numSemanaIni = 0; //Si además el evento es esa semana if(53==$numSemana) { $numSemana = 0; } } $indiceSemana = $numSemana - $numSemanaIni; $diaSemana = Fechas::getDiaSemana($this->anyo, $this->mes, $dia); return $this->semanas[$indiceSemana]->getEvento($diaSemana); } /* Muestra un evento de la agenda */ public function muestraEvento($dia) { $numSemanaIni = Fechas::getSemanaAnyo($this->anyo, $this->mes, 1); $numSemana = Fechas::getSemanaAnyo($this->anyo, $this->mes, $dia); //Si la primera semana del año es la 59 if(53==$numSemanaIni) { $numSemanaIni = 0; //Si además el evento es esa semana if(53==$numSemana) { $numSemana = 0; } } $indiceSemana = $numSemana - $numSemanaIni; $diaSemana = Fechas::getDiaSemana($this->anyo, $this->mes, $dia); $this->semanas[$indiceSemana]->muestraEvento($diaSemana); } /* Muestra el HTML de un mes */ public function muestraCalendario() { $nombreMeses = array('Enero','Febrero','Marzo','Abril','Mayo','Junio','Julio', 'Agosto','Septiembre','Octubre','Noviembre','Diciembre'); $nombreDias = array('Lun','Mar','Mie','Jue','Vie','Sab','Dom'); /*Se obtiene el nombre del mes*/ $nombreMes = $nombreMeses[$this->mes - 1]; /*Se colocan los botones*/ printf("<table class=\"tablaBotones\"><tr><td> <input type=\"submit\" name=\"restaMes\" value=\"<<\" onClick=\"verMesAnterior()\"> </td><td class=\"caption_text\">%s %d</td><td> <input type=\"submit\" name=\"sumaMes\" value=\">>\" onClick=\"verMesSiguiente()\"> </td></tr><table>\n", $nombreMes, $this->anyo); /*Se abre la tabla*/ printf("<table>\n"); /*Se abre el cuerpo de la tabla*/ /*Se abre la tabla*/ printf("<tbody>\n"); /*Se crea la primera fila de la tabla*/ printf("<tr>\n"); /*La primera casilla va vacía*/ printf("<th class=\"dia\"></th>\n"); /*Se generan las casilla de los días de la semana*/ for($i=0;$i<7;$i++) { /*Se escribe en el HTML el texto del día de la semana */ printf("<th class=\"dia\"> %s </th>\n", $nombreDias[$i]); } printf("</tr>\n"); /* Semanas */ $this->muestraSemanas(); /*Se cierra el cuerpo de la tabla*/ printf("</tbody>\n"); /*Se cierra la tabla*/ printf("</table>\n"); } /* Genera el HTML de todas las semanas del mes */ public function muestraSemanas() { foreach($this->semanas as $semana) { $semana->muestraSemana(); } } /* Añade al calendario del mes los eventos que están en la BD */ public function addEventos() { require_once 'login.php'; //Se intenta conectar con la BD $db_server = mysql_connect($db_hostname,$db_username,$db_password); //Si ha habido errores se aborta y se informa al usuario if(!$db_server) { die( "No se pudo conectar con MySQL: " . mysql_error() ); } mysql_select_db($db_database) or die( "No se pudo selecionar la BD: " . mysql_error() ); //Consulta SQL $query = "select id_evento, nombre, DATE_FORMAT(fecha_hora,'%d-%m-%y'), TIME_FORMAT(fecha_hora,'%H:%k'), descripcion, lugar, DAY(fecha_hora) from calendariov where MONTH(fecha_hora) = '$this->mes' and YEAR(fecha_hora) = '$this->anyo'"; $result = mysql_query($query); //Si hubo fallos se informa al usuario if(!$result) { die("Fallo en el acceso a la BD: " . mysql_error()); } //Si todo fue bien $numEventos = mysql_num_rows($result); for($j = 0;$j < $numEventos; ++$j) { $row = mysql_fetch_row($result); //Se inserta el evento en el calendario $this->addEvento( (int) $row[6], new Evento($row[0], $row[1], $row[2], $row[3], $row[4], $row[5])); } mysql_close($db_server); } } ?>
hola buen dia me prodiras pasar todo el codigo de la agenda completo.
ReplyDeleteGracias
Lo siento, estaba en un ordenador que pasó a mejor vida. Lo único que me queda de ese cósigo es lo que publiqué aquí. Usa lo que te sirva.
ReplyDeleteSaludos