<?php
/**
* Calendário com TTs agendados.
*
* Este script, gera o calendário, destacando os dias com TTs agendados.
*
* @author José Filipe Lopes Santos <jfilipe@med.up.pt>
* @since 06-03-2012
* @version 1.0 - data da últ. actualização: 09-03-2012
* @package tts
* @subpackage calendar
*/
require_once './conf/core.inc';
require_once './lib/calendar.inc';
require_once './lib/cal_tickets.inc';
require_once './lib/functions.inc';
/* ------------------------ oOo -----------------------------
Inicialização de variáveis
------------------------ oOo ----------------------------- */
// parâmetros
if (empty($user)) $user = ""; // username / login
if (empty($mes)) $mes = date("m"); // mês
if (empty($ano)) $ano = date("Y"); // ano
// outras variáveis
if (empty($error_msg)) $error_msg = ""; // mensagem de erro
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
$first_day = 1; // 1ª dia do mês
$mes_actual = date("m"); // mês actual
$ano_actual = date("Y"); // ano actual
$data_actual = date("d-m-Y"); // data actual
$ntickets = array(); // array com o número de tickets por dia desse mês
/* ------------------------ oOo -----------------------------
Mensagem de erro
------------------------ oOo ----------------------------- */
if ($ano < 1970)
$error_msg = "Essa data não é reconhecida pelo sistema, por ser demasiado antiga";
if ($user == "" && $error_msg == "")
$error_msg = "Utilizador não especificado";
/* ------------------------ 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ês
$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 -----------------------------
Extrair dados
------------------------ oOo ----------------------------- */
if ($error_msg == ""){ // não ocorreu erro
// obter a data formada apenas pelo mês e pelo ano
list($error_msg,$date,$format) = getTo_dateParams(array("",$mes,$ano),FORMAT_DATE);
if ($error_msg == ""){
// criar uma nova instância da classe para o agendamento de tickets no calendário
$calt = new cal_tickets(DSN_CI, $date, $format, $user);
// obter o n.º de tickets por dia desse mês-ano
$ntickets = $calt->getNumberOfTicketsByDayOfMonth();
// mensagem de erro
if ($calt->error_msg != "")
$error_msg = $calt->error_msg;
}
}
/* ------------------------ oOo -----------------------------
Output
------------------------ oOo ----------------------------- */
$t =& new Template_PHPLIB(TEMPLATES_PATH);
$t->setFile(array("note" => "note_with_table.html",
"calendar" => "calendar2.html",
"row" => "row_calendar.html",
"text_link" => "text_link.html"));
if ($error_msg != ""){
//************ mensagem de erro ************
$t->setVar(array("msg" => $error_msg, "rooturl" => ROOT_URL));
$t->pparse("output","note");
} else { // calendário
//************ calendário ***********
///////// mês e ano do calendário //////////
$t->setVar(array("mes2" => $meses_extenso[$mes], "ano2" => $ano, "rooturl" => ROOT_URL));
/////////// 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 ////
$cls = "";
if (strcmp("$day-$mes-$ano",$data_actual) == 0){ // dia actual
if (!empty($ntickets[$day])) $cls = "cal_marked_hoje"; // tem tickets marcados
else $cls = "cal_hoje";
} elseif ($dia_semana == 0 || $dia_semana == 6) // sábado e domingo
$cls = "cal_dias_extra";
else { // dia normal
if (!empty($ntickets[$day])) $cls = "cal_marked";
else $cls = "cal_dias";
}
$t->setVar("class".$dia_semana,$cls);
///// Link //////
// depurar link & onclick
$link2 = "#";
$onclick2 = "LoadTaskList('user=$user&data=$day-$mes-$ano')";
// template
$t->setVar(array("link" => $link2, "class" => "dias", "text" => $day, "onclick" => $onclick2));
$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
$onclick_previows = "LoadCalendar('user=$user&mes=$prev_month&ano=$prev_year')";
$onclick_this_month = "LoadCalendar('user=$user&mes=$mes_actual&ano=$ano_actual')";
$onclick_next2 = "LoadCalendar('user=$user&mes=$next_month&ano=$next_year')";
$title_previows = $meses_extenso[$prev_month]." - ".$prev_year;
$title_next2 = $meses_extenso[$next_month]." - ".$next_year;
// template
$t->setVar(array("onclick_prev" => $onclick_previows,
"title_prev" => $title_previows,
"onclick_mes_actual" => $onclick_this_month,
"onclick_next" => $onclick_next2,
"title_next" => $title_next2));
// imprimir o output
$t->pparse("output","calendar");
}
?>
|