Login   Register  
PHP Classes
elePHPant
Icontem

File: calendar_picker.php

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of José Filipe Lopes Santos  >  Calendar Picker  >  calendar_picker.php  >  Download  
File: calendar_picker.php
Role: Example script
Content type: text/plain
Description: calendar picker example
Class: Calendar Picker
Calculate values for a given month of the year
Author: By
Last change:
Date: 2010-04-29 03:44
Size: 6,580 bytes
 

Contents

Class file image Download
<?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(=> "D"=> "S"=> "T"=> "Q"=> "Q"=> "S"=> "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 => "&nbsp;"));
            
$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 == || $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");

?>