<?php
/** * * Calendar Picker. * * Este script permite "picar" um determinado dia no calendário, * com possibilidade de navegar entre meses. * * @author José Filipe Lopes Santos <jfilipe@med.up.pt> * @version 1.0 - data da últ. actualização: 28-04-2010 * @package calendar * @subpackage search */
require_once("HTML/Template/PHPLIB.php"); // pear package require_once("calendar.inc");
/* ---------------------- oOo ---------------------- Inicialização de variáveis ---------------------- oOo ---------------------- */
if (empty($mes)) $mes = date("m"); // mês, por defeito o actual if (empty($ano)) $ano = date("Y"); // ano, por defeito o actual if (empty($title)) $title = "Calendário"; // título do documento if (empty($first_day_of_week)) $first_day_of_week = ""; // 1º dia da semana do mês if (empty($number_of_days)) $number_of_days = ""; // nº de dias do mês if (empty($number_of_weeks)) $number_of_weeks = ""; // nº de semanas do mês if (empty($prev_month)) $prev_month = ""; // mês anterior if (empty($prev_year)) $prev_year = ""; // ano do mês anterior if (empty($next_month)) $next_month = ""; // mês posterior if (empty($next_year)) $next_year= ""; // ano do mês posterior if (empty($fields_form)) $fields_form = ""; // campos do formulário a guardar os dados if (empty($form_src)) $form_src = ""; // nome do formulário de origem $first_day = 1; // 1ª dia do mês $dia_actual = date("d"); // dia actual $mes_actual = date("m"); // mês actual $ano_actual = date("Y"); // ano actual $data_actual = date("d-m-Y"); // data actual
/** * Caminho para o directório das templates. */ define("TEMPLATES_PATH","templates/");
// dias da semana $dias_semana = array(0 => "D", 1 => "S", 2 => "T", 3 => "Q", 4 => "Q", 5 => "S", 6 => "S");
// meses por extenso $meses_extenso = array("01" => "Janeiro", "02" => "Fevereiro", "03" => "Março", "04" => "Abril", "05" => "Maio", "06" => "Junho", "07" => "Julho", "08" => "Agosto", "09" => "Setembro", "10" => "Outubro", "11" => "Novembro", "12" => "Dezembro");
/* ---------------------- oOo ---------------------- Mensagem de erro ---------------------- oOo ---------------------- */
// 1970 - data a partir da qual foi criado o UNIX // Por isso o windows e linux não reconhece datas, com ano inferior a 1970 if ($ano < 1970) die("Essa data não é reconhecida pelo sistema, por ser demasiado antiga");
/* ---------------------- oOo ---------------------- Cãlculos ---------------------- oOo ---------------------- */
$calendar = new calendar($mes,$ano);
// obter o dia da semana em que calha o 1ª dia $first_day_of_week = $calendar->getFirstDayWeek();
// obter o nº de dias desse mês $number_of_days = $calendar->getNumberDays();
// obter o nº de semanas do mê $number_of_weeks = $calendar->getNumberofWeeks($first_day,$number_of_days);
// obter o mês anterior list($prev_month,$prev_year) = $calendar->getPreviowsMonth();
// obter o mês posterior list($next_month,$next_year) = $calendar->getNextMonth();
/* ---------------------- oOo ---------------------- Outputs ---------------------- oOo ---------------------- */
$t =& new Template_PHPLIB(TEMPLATES_PATH);
$t->setFile(array("popup" => "popup.html", "calendar" => "calendar.html", "row" => "row_calendar.html", "text_link" => "text_link.html"));
//************ Popup ************** $t->setVar("titulo",$title);
//************ calendário ***********
///////// mês e ano do calendário ////////// $t->setVar(array("mes2" => $meses_extenso[$mes], "ano2" => $ano));
/////////// dias da semana ///////////// foreach ($dias_semana as $dia_semana => $simbolo) // para cada dia da semana 'S','T',... $t->setVar(array("class".$dia_semana => "cal_semana", "text".$dia_semana => $simbolo)); $t->parse("rows_calendar","row",true);
////////// dias do mês /////////////// $write_day = 1; for ($i=0;$i<$number_of_weeks;$i++){ // para cada semana
foreach ($dias_semana as $dia_semana => $simbolo){ // para cada dia da semana // ainda não chegou ao 1ª dia do mês, ou já passou o último dia do mês if (($dia_semana < $first_day_of_week && $i == 0) || $write_day > $number_of_days){ // preenche com espaços em branco $t->setVar(array("class".$dia_semana => "cal_vazio", "text".$dia_semana => " ")); $write_day--; } else { // é para escrecer o dia // preencher com zeros à esquerda $day = str_pad($write_day,2,"0",STR_PAD_LEFT); // determinar a classe a usar if (strcmp("$day-$mes-$ano",$data_actual) == 0) // dia actual $t->setVar(array("class".$dia_semana => "cal_hoje")); elseif ($dia_semana == 0 || $dia_semana == 6) // sábado e domingo $t->setVar(array("class".$dia_semana => "cal_dias_extra")); else // dia normal $t->setVar(array("class".$dia_semana => "cal_dias")); ///// Link para picar ////// // depurar links & texto $link_pick = "javascript:save_search_values('$form_src','$fields_form','$day;$mes;$ano','select;select;select')"; // template $t->setVar(array("link" => $link_pick, "class" => "dias", "text" => $day)); $t->parse("text".$dia_semana,"text_link"); } $write_day++; } // linha do calendário $t->parse("rows_calendar","row",true); // se já passou o último dia e já completou a semana, sai fora if ($write_day > $number_of_days) break; }
// ************** Navegação (3ª parte do calendário) **************
// depurar links & títulos $link_previows = "calendar_picker.php?mes=$prev_month&ano=$prev_year&fields_form=$fields_form&form_src=$form_src"; $link_this_month = "calendar_picker.php?mes=$mes_actual&ano=$ano_actual&fields_form=$fields_form&form_src=$form_src"; $link_next2 = "calendar_picker.php?mes=$next_month&ano=$next_year&fields_form=$fields_form&form_src=$form_src"; $link_today = "save_search_values('$form_src','$fields_form','$dia_actual;$mes_actual;$ano_actual','select;select;select')"; $title_previows = $meses_extenso[$prev_month]." - ".$prev_year; $title_next2 = $meses_extenso[$next_month]." - ".$next_year;
// template $t->setVar(array("link_prev" => $link_previows, "title_prev" => $title_previows, "link_mes_actual" => $link_this_month, "link_next" => $link_next2, "title_next" => $title_next2, "link_data_actual" => $link_today));
$t->parse("block_body","calendar",true);
// imprimir o output $t->pparse("output","popup");
?>
|