source: admin/WebConsole/idiomas/php/eng/clases/Calendario_eng.php @ fe6843b

918-git-images-111dconfigfileconfigure-oglivegit-imageslgromero-new-oglivemainmaint-cronmount-efivarfsmultivmmultivm-ogboot-installerogClonningEngineogboot-installer-jenkinsoglive-ipv6test-python-scriptsticket-301ticket-50ticket-50-oldticket-577ticket-585ticket-611ticket-612ticket-693ticket-700ubu24tplunification2use-local-agent-oglivevarios-instalacionwebconsole3
Last change on this file since fe6843b was c281499, checked in by ramon <ramongomez@…>, 13 years ago

#551: Quitar variables referenciadas en llamadas a funciones para compatibilidad con PHP 5.4.

git-svn-id: https://opengnsys.es/svn/branches/version1.0@3279 a21b9725-9963-47de-94b9-378ad31fedc9

  • Property mode set to 100644
File size: 16.7 KB
Line 
1        <?
2/*========================================================================================================
3        Esta clase genera tablas HTML para selección de fechas (Versión inglesa)
4       
5        Atributos de la clase:
6
7                clase: Clase [CSS] de la tabla HTML que se generará.
8                onmouseover: Función Javascript que se ejuctará al generarse el evento
9                onmouseout: Función Javascript que se ejuctará al generarse el evento
10                onclick: Función Javascript que se ejuctará al hacer click sobre el objeto
11
12=========================================================================================================*/
13class Calendario{
14        var $aula;
15        var $horaresevini;
16        var $horaresevfin;
17        var $clase ;
18        var $onmouseover;
19        var $onmouseout;
20        var $onclick;
21
22        var $desplazamiento_dias=6; // Ajuste fino dependiendo del año de comienzo del algoritmo
23        var $nombre_mes=array();
24        var $nombre_dia=array();
25        var $dias_meses=array();
26
27        function Calendario($pclase="",$ponmouseover="sobre(this)",$ponmouseout="fuera(this)",$ponclick="clic(this)"){ //Constructor
28                $this->clase=$pclase;
29                $this->onmouseover=$ponmouseover;
30                $this->onmouseout=$ponmouseout;
31                $this->onclick=$ponclick;
32               
33                $this->nombre_mes[1]=array ("January",0x0001);
34                $this->nombre_mes[2]=array ("February",0x0002);
35                $this->nombre_mes[3]=array ("March",0x0004);
36                $this->nombre_mes[4]=array ("April",0x0008);
37                $this->nombre_mes[5]=array ("May",0x0010);
38                $this->nombre_mes[6]=array ("June",0x0020);
39                $this->nombre_mes[7]=array ("July",0x0040);
40                $this->nombre_mes[8]=array ("August",0x0080);
41                $this->nombre_mes[9]=array ("September",0x0100);
42                $this->nombre_mes[10]=array ("October",0x0200);
43                $this->nombre_mes[11]=array ("November",0x0400);
44                $this->nombre_mes[12]=array ("December",0x0800);
45
46
47                $this->numero_annos[1]=array ("2004",0x01); // tamaño 1 bytes
48                $this->numero_annos[2]=array ("2005",0x02);
49                $this->numero_annos[3]=array ("2006",0x04);
50                $this->numero_annos[4]=array ("2007",0x08);
51                $this->numero_annos[5]=array ("2008",0x10);
52                $this->numero_annos[6]=array ("2009",0x20);
53                $this->numero_annos[7]=array ("2010",0x40);
54                $this->numero_annos[8]=array ("2011",0x80);
55
56                $this->dias_meses[1]=31;
57                $this->dias_meses[2]=28;
58                $this->dias_meses[3]=31;
59                $this->dias_meses[4]=30;
60                $this->dias_meses[5]=31;
61                $this->dias_meses[6]=30;
62                $this->dias_meses[7]=31;
63                $this->dias_meses[8]=31;
64                $this->dias_meses[9]=30;
65                $this->dias_meses[10]=31;
66                $this->dias_meses[11]=30;
67                $this->dias_meses[12]=31;
68
69                $this->nombre_dia[1]=array ("Mo",0x01); // tamaño 1 bytes
70                $this->nombre_dia[2]=array ("Tu",0x02);
71                $this->nombre_dia[3]=array ("We",0x04);
72                $this->nombre_dia[4]=array ("Th",0x08);
73                $this->nombre_dia[5]=array ("Fr",0x10);
74                $this->nombre_dia[6]=array ("Sa",0x20);
75                $this->nombre_dia[7]=array ("Su",0x40);
76        }
77/*________________________________________________________________________________________________________
78                Esta función devuelve una cadena con el código HTML del calendario del mes y año elegidos
79                y que son propiedades de la clase.
80________________________________________________________________________________________________________*/
81        function MesAnno($mes,$anno,$CntMes){
82                $fecha="1/".$mes."/".$anno;
83                $ds=$this->_DiaSemana($fecha);
84                if ($ds==0) $ds=7;
85               
86                $swbi=0; // Suma para bisiesto
87                if ($this->bisiesto($anno) && $mes==2)  $swbi=1;
88
89                $HTML_calendario='<TABLE  border=1 cellspacing=0 cellpadding=1 id="tabla_mesanno" class="'.$this->clase.'">'.chr(13);
90                $HTML_calendario.='<TR>'.chr(13);
91                $HTML_calendario.='<TH colspan=7 id="'.$mes.'/'.$anno.'" value="'.$this->aula.'" style="cursor:hand" onclick="TH_'.$this->onclick.'">'.$this->nombre_mes[$mes][0].'</TH></TR>'.chr(13); // Nombre del mes
92                $HTML_calendario.='<TR>'.chr(13);
93                for ($i=1;$i<8;$i++)
94                        $HTML_calendario.='<TH>'.$this->nombre_dia[$i][0].'</TH>'.chr(13); // Días de la semana
95                $HTML_calendario.='</TR><TR>'.chr(13);
96                for ($i=1;$i<$ds;$i++)
97                        $HTML_calendario.='<TD>&nbsp;</TD>'.chr(13); // Relleno primeros dias de la semana
98                $sm=$ds; // Control salto de semana
99                for ($i=1;$i<=$this->dias_meses[$mes]+$swbi;$i++){
100                        $HTML_calendario.='<TD align=center ';
101                        if(isset($CntMes[$i])){
102                                if($CntMes[$i]==1){
103                                        $HTML_calendario.=' style="COLOR:#eeeeee;BACKGROUND-COLOR: #cc3366;"';
104                                        $HTML_calendario.=' id="'.$i.'/'.$mes.'/'.$anno.'" value="'.$this->aula.'" style="cursor:hand" onmouseover="'.$this->onmouseover.'" onmouseout="'.$this->onmouseout.'" onclick="'.$this->onclick.'"';
105                                }
106                        }
107                        $HTML_calendario.='>'.$i.'</TD>'.chr(13);
108                        if ($sm%7==0){
109                                $HTML_calendario.='</TR><TR>'.chr(13);
110                                $sm=0;
111                        }
112                        $sm++;
113                }
114                $HTML_calendario.='</TR></TABLE>'.chr(13);
115                return($HTML_calendario);
116        }
117/*________________________________________________________________________________________________________
118                Esta función devuelve una cadena con el código HTML del calendario del mes y año elegidos
119                y que son propiedades de la clase.
120________________________________________________________________________________________________________*/
121        function JMesAnno($mes,$anno,$JDif,$TBfechas,$sumahoras){
122                $fecha="1/".$mes."/".$anno;
123                $Jdpl=$this->juliana($fecha)-$JDif; // Calcula punto departida para indice juliano
124                $ds=$this->_DiaSemana($fecha);
125                if ($ds==0) $ds=7;
126                $paso=2; // Porporción para el la intensidad del color
127                $swbi=0; // Suma para bisiesto
128                if ($this->bisiesto($anno) && $mes==2)  $swbi=1;
129                $HTML_calendario='<TABLE  border=1 cellspacing=0 cellpadding=1 id="tabla_mesanno" class="'.$this->clase.'">'.chr(13);
130                $HTML_calendario.='<TR>'.chr(13);
131                $HTML_calendario.='<TH colspan=7 id="'.$mes.'/'.$anno.'"  style="cursor:hand" onclick="TH_'.$this->onclick.'">'.$this->nombre_mes[(int)$mes][0].'</TH></TR>'.chr(13); // Nombre del mes
132                $HTML_calendario.='<TR>'.chr(13);
133                for ($i=1;$i<8;$i++)
134                        $HTML_calendario.='<TH>'.$this->nombre_dia[$i][0].'</TH>'.chr(13); // Días de la semana
135                $HTML_calendario.='</TR><TR>'.chr(13);
136                for ($i=1;$i<$ds;$i++)
137                        $HTML_calendario.='<TD>&nbsp;</TD>'.chr(13); // Relleno primeros dias de la semana
138                $sm=$ds; // Control salto de semana
139                for ($i=1;$i<=$this->dias_meses[(int)$mes]+$swbi;$i++){
140                        $HTML_calendario.='<TD align=center ';
141                        if(isset($TBfechas[$Jdpl])){
142                                if($TBfechas[$Jdpl]>0){
143                                        $xpor=$TBfechas[$Jdpl]*100/$sumahoras;
144                                        $itcr=255;
145                                        $itc=240-($xpor*$paso);
146                                        if($xpor>=50)
147                                                $colordia="#FFFFFF";
148                                        else
149                                                $colordia="#000000";
150
151                                        $bgcolordia=sprintf('#%02x%02x%02x',$itcr,$itc,$itc);
152                                        $HTML_calendario.=' style="COLOR:'.$colordia.';BACKGROUND-COLOR: '.$bgcolordia.';"';
153                                        $HTML_calendario.=' id="'.$i.'/'.$mes.'/'.$anno.'" value="'.$this->aula.'" style="cursor:hand" onmouseover="'.$this->onmouseover.'" onmouseout="'.$this->onmouseout.'" onclick="'.$this->onclick.'"';
154                                }
155                        }
156                        $HTML_calendario.='>'.$i.'</TD>'.chr(13);
157                        if ($sm%7==0){
158                                $HTML_calendario.='</TR><TR>'.chr(13);
159                                $sm=0;
160                        }
161                        $sm++;
162                        $Jdpl++;
163                }
164                $HTML_calendario.='</TR></TABLE>'.chr(13);
165                return($HTML_calendario);
166        }
167
168/*________________________________________________________________________________________________________
169                Esta función devuelve el número del día de la semana:
170                        0=domingo 1=Lunes, 2=mártes ... 6=sábado
171               
172                Parámetro de entrada:
173                        Una cadena con formato de fecha dd/mm/aaaa.
174________________________________________________________________________________________________________*/
175        function _DiaSemana($fecha){
176                list($dia,$mes,$anno)=split('[/.-]',$fecha);
177                $cont=0;
178                for ($i=1900;$i<$anno;$i++){
179                        if ($this->bisiesto($i)) $dias_anuales=366; else        $dias_anuales=365;
180                        $cont+=$dias_anuales;
181                }
182                for ($i=1;$i<$mes;$i++){
183                        if ($i!=2)
184                                $cont+=$this->dias_meses[$i];
185                        else{
186                                if ($this->bisiesto($anno))
187                                        $cont+=29;
188                                else
189                                        $cont+=28;
190                        }
191                }
192                $cont+=$dia+$this->desplazamiento_dias;
193                return($cont%7);
194        }
195//________________________________________________________________________________________________________
196//              Esta función devuelve true si el año pasado como parámetro es bisiesto y false si no lo es
197//
198//              Parámetro de entrada:
199//                      Una número que representa el año
200//________________________________________________________________________________________________________
201function bisiesto($anob){
202                if ($anob%4==0) return(true); else return(false);
203        }
204//________________________________________________________________________________________________________
205//              Esta función devuelve una cadena con el código HTML con las horas de reservas de las aulas
206//________________________________________________________________________________________________________
207function HorasDias($CntDia,&$porcenhoras){
208        $HTML_calendario="";
209        $sw=0;
210        $conthoras=0; // Contador de horas y minutos de reservas
211        $maxcolumnas=8;
212        $tbampm[0]="a.m.";
213        $tbampm[1]="p.m.";
214
215        $HTML_calendario.='<TABLE   border=0 cellspacing=0 cellpadding=0  id="tabla_horas" class="'.$this->clase.'">'.chr(13);
216        $HTML_calendario.='<TR>'.chr(13);
217        $HTML_calendario.='<TH colspan=3>Horas</TH></TR>'.chr(13); // Literal Horas
218        $HTML_calendario.='<TR>'.chr(13);
219        $HTML_ampm[0]="";
220        $HTML_ampm[1]="";
221        $swampm[0]=false;
222        $swampm[1]=false;
223
224        if($this->horaresevini<12) $ix=0; else $ix=1;
225        for($j=$ix;$j<=1;$j++){
226                $HTML_ampm[$j].='<TD style="BACKGROUND-COLOR: #FFFFFF;" valig=top >'.chr(13);
227                $HTML_ampm[$j].='<TABLE valig=top cellspacing=0 cellpadding=0  border=1  class="'.$this->clase.'">'.chr(13);
228                $HTML_ampm[$j].='<TR>'.chr(13);
229                $HTML_ampm[$j].='<TH colspan='.$maxcolumnas.'>'.$tbampm[$j].'</TH></TR>'.chr(13); // Literal Horas
230                $HTML_ampm[$j].='<TR>'.chr(13);
231
232                if($j==0){ // A.M.height
233                        $imin=$this->horaresevini;
234                        $currenthora=$imin;
235                        if($this->horaresevfin<=12)
236                                $imax=$this->horaresevfin;
237                        else
238                                $imax=12;
239                }
240                else{
241                                if($this->horaresevini<=12)
242                                        $imin=0;
243                                else
244                                        $imin=$this->horaresevini-12;
245                                $imax=(int)$this->horaresevfin-12;
246                                $currenthora=$imin;
247                }
248                $cols=0;
249                $currentminutos=0;
250                $currenthorario=$currenthora.":".$currentminutos;
251                $intervalo=($imax-$imin+1)*4;
252                for ($i=$imin;$i<$intervalo;$i++){
253                                $cols++;
254                                if($sw>0) // Acarre la reserva desde A.M.
255                                        $swampm[$j]=true;
256
257                                if($currentminutos==0) $currenthorario.="0";
258                                if(isset($CntDia[$j][$currenthora][$currentminutos])){
259                                        if($CntDia[$j][$currenthora][$currentminutos]==1)
260                                                $sw++;
261                                                $swampm[$j]=true;
262                                }
263                                if(isset($CntDia[$j][$currenthora][$currentminutos])){
264                                        if($CntDia[$j][$currenthora][$currentminutos]==0)
265                                                $sw--;
266                                }
267                                $HTML_ampm[$j].='<TD ';
268                                if($sw>0)
269                                        $HTML_ampm[$j].=' style="COLOR:#eeeeee;BACKGROUND-COLOR: #cc3366;"';
270
271                                if($sw>0) // Cuenta la fracción de 15 minutos como reservada
272                                        $conthoras++;
273                                $HTML_ampm[$j].=' align=center>&nbsp;'.$currenthorario.'&nbsp;</TD>'.chr(13);
274                                $currentminutos+=15;
275                                if($currentminutos==60) {
276                                        $currenthora++;
277                                        $currentminutos=0;
278                                }
279                                $currenthorario=$currenthora.":".$currentminutos;
280                                if (($cols)%$maxcolumnas==0 ) $HTML_ampm[$j].='</TR><TR>'.chr(13);
281                        }
282                $HTML_ampm[$j].='</TR></TABLE>'.chr(13);
283                $HTML_ampm[$j].='</TD>'.chr(13);
284        }
285
286        if ($swampm[0])
287                        $HTML_calendario.=$HTML_ampm[0];
288
289        if ($swampm[0] && $swampm[1]){
290                $HTML_calendario.='<TD style="BACKGROUND-COLOR: #FFFFFF;" width=25>&nbsp;'.chr(13);
291                $HTML_calendario.='</TD>'.chr(13);
292        }
293
294        if ($swampm[1])
295                        $HTML_calendario.=$HTML_ampm[1];
296
297        $HTML_calendario.='</TR>'.chr(13);
298        $HTML_calendario.='</TABLE>'.chr(13);
299
300        $numblo=($this->horaresevfin-$this->horaresevini)*4;
301        $porcenhoras=floor($conthoras*100/$numblo);
302        return($HTML_calendario);
303}       
304/* --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
305        Devuelve una cadena con los días del mes que son  lunes(1) o martes(2) o miércoles(3), etc ...domingo(7) separada por comas
306________________________________________________________________________________________________________________*/
307function DiasPorMes($mes,$anno,$numerodia){
308        $cadenadias="";
309                $dia_c=1;
310                $fecha=$dia_c."/".$mes."/".$anno;
311                $ds=$this->_DiaSemana($fecha);
312                if ($ds==0) $ds=7;
313                while($ds!=$numerodia){
314                        $dia_c++;
315                        $ds++;
316                        if($ds>7) $ds=1;
317                }
318                // Calcula número de dias del mes
319                $diasmaxmes=$this->dias_meses[$mes];
320                if ($mes==2){
321                        if ($this->bisiesto($anno)){
322                                        $diasmaxmes=29;
323                        }
324                }
325                while($dia_c<=$diasmaxmes){
326                        $cadenadias.=$dia_c.";";
327                        $dia_c+=7;
328                }
329                return($cadenadias);
330}
331/*________________________________________________________________________________________________________
332        Devuelve una cadena con los días del mes correspondiente a una semana concreta, separados por coma
333________________________________________________________________________________________________________*/
334function DiasPorSemanas($mes,$anno,$numerosemana){
335        $cadenadias="";
336                $dia_c=1;
337                $nsem=1;
338                $fecha=$dia_c."/".$mes."/".$anno;
339                $ds=$this->_DiaSemana($fecha);
340                if ($ds==0) $ds=7;
341                while($nsem!=$numerosemana){
342                        $dia_c++;
343                        $ds++;
344                        if($ds>7){
345                                $ds=1;
346                                $nsem++;
347                        }
348                }
349                // Calcula número de dias del mes
350                $diasmaxmes=$this->dias_meses[$mes];
351                if ($mes==2){
352                        if ($this->bisiesto($anno)){
353                                        $diasmaxmes=29;
354                        }
355                }
356                for($i=$ds;$i<=7;$i++){
357                        if($dia_c>$diasmaxmes) break;
358                        $cadenadias.=$dia_c.";";
359                        $dia_c++;
360                }
361                return($cadenadias);
362}
363// ____________________________________________________________________________
364//      Esta función devuelve el número de la última semana de un mes
365// ____________________________________________________________________________
366function UltimaSemana($mes,$anno){
367        $diasmaxmes=$this->dias_meses[$mes];
368        if ($mes==2){
369                if ($this->bisiesto($anno)){
370                                $diasmaxmes=29;
371                }
372        }
373        $fecha="1/".$mes."/".$anno;
374        $ds=$this->_DiaSemana($fecha);
375        if ($ds==0) $ds=7;
376        $nwdia=$diasmaxmes+$ds-1;
377        $cociente=floor($nwdia/7);
378        $resto=$nwdia%7;
379        if($resto>0) $cociente++;
380        return($cociente);
381}
382//________________________________________________________________________________________________________
383// Función : Fechas
384// Descripción :
385//              Devuelve una cadena de fechas separada por comas que son  las fechas que forman parte de una reserva concreta
386//      Parametros:
387//              - anno_c: Un año determinado
388//              - mes_desde: El mes desde que se considera la reserva
389//              - mes_hasta: El mes hasta que se considera la reserva
390//              - meses: Campo con información hexadecimal de los meses de la reserva ( la información contenida en el campo de la tabla con este nombre
391//              - diario:  Idem para los dias de un mes
392//              - dias: idem para los nombres de los días
393//              - semanas: Idem para las semanas
394//________________________________________________________________________________________________________
395function Fechas($anno_c,$mes_desde,$mes_hasta,$meses,$diario,$dias,$semanas){
396        $cadenafechas="";
397        $mascara=0x0001;
398        $cadenameses="";
399        $meses=$meses>>($mes_desde-1);
400        for($i=$mes_desde;$i<=$mes_hasta;$i++){
401                if($meses&$mascara>0){
402                        $cadenameses.=$i.";";
403                        // Dias de la semana
404                        if($dias>0){
405                                $auxdias=$dias;
406                                for($j=1;$j<=7;$j++){
407                                        if($auxdias&$mascara>0){
408                                                $cadenadias=$this->DiasPorMes($i,$anno_c,$j);
409                                                $tbdias=split(";",$cadenadias);
410                                                for ($k=0;$k<sizeof($tbdias)-1;$k++)
411                                                        $cadenafechas.=$tbdias[$k]."/".$i."/".$anno_c.";";
412                                        }
413                                        $auxdias=$auxdias>>1;
414                                }
415                        }
416                        // Semanas
417                        if($semanas>0){
418                                $auxsemanas=$semanas;
419                                for($j=1;$j<=6;$j++){
420                                        if($auxsemanas&$mascara>0){
421                                                if($j==6){
422                                                        $ulse=$this->UltimaSemana($i,$anno_c);
423                                                        $cadenadias=$this->DiasPorSemanas($i,$anno_c,$ulse);
424                                                }
425                                                else
426                                                        $cadenadias=$this->DiasPorSemanas($i,$anno_c,$j);
427                                                $tbdias=split(";",$cadenadias);
428                                                for ($k=0;$k<sizeof($tbdias)-1;$k++)
429                                                        $cadenafechas.=$tbdias[$k]."/".$i."/".$anno_c.";";
430                                        }
431                                        $auxsemanas=$auxsemanas>>1;
432                                }
433                        }
434                }
435                $meses=$meses>>1;
436        }
437        $cadenadiario="";
438        for($i=1;$i<32;$i++){
439                        if($diario&$mascara>0) $cadenadiario.=$i.";";
440                        $diario=$diario>>1;
441        }
442        $tbmeses=split(";",$cadenameses);
443        $tbdiario=split(";",$cadenadiario);
444        for ($i=0;$i<sizeof($tbmeses)-1;$i++){
445                for ($j=0;$j<sizeof($tbdiario)-1;$j++){
446                        $cadenafechas.=$tbdiario[$j]."/".$tbmeses[$i]."/".$anno_c.";";
447                }
448        }
449        return($cadenafechas);
450}
451/*______________________________________________________________________
452        Devuelve el dia juliano de una fecha determinada
453        Parametros:
454                - cadena con la fecha en formato "dd/mm/aaaa"
455        Devuelve:
456                - El dia juliano
457_______________________________________________________________________*/
458function juliana($fecha) {
459        list($dia,$mes,$anno)=split("[/-]",$fecha);
460        $GGG = 1;
461    if ($anno <= 1585) $GGG = 0;
462    $juliano= -1 * floor(7 * (floor(($mes + 9) / 12) + $anno) / 4);
463    $S = 1;
464    if (($mes - 9)<0) $S=-1;
465    $A = abs($mes - 9);
466    $auxjuliano = floor($anno + $S * floor($A / 7));
467    $auxjuliano = -1 * floor((floor($auxjuliano / 100) + 1) * 3 / 4);
468    $juliano = $juliano + floor(275 * $mes / 9) + $dia + ($GGG * $auxjuliano);
469        $juliano =$juliano + 1721027 + 2 * $GGG + 367 * $anno - 0.5;
470        return(floor($juliano));
471}
472} // Fin de la clase Calendario
Note: See TracBrowser for help on using the repository browser.