- Utilisation de LSconfig dans tout le projet
[ldapsaisie.git] / trunk / includes / class / class.LSformElement_date.php
1 <?php
2 /*******************************************************************************
3  * Copyright (C) 2007 Easter-eggs
4  * http://ldapsaisie.labs.libre-entreprise.org
5  *
6  * Author: See AUTHORS file in top-level directory.
7  *
8  * This program is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU General Public License version 2
10  * as published by the Free Software Foundation.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
20
21 ******************************************************************************/
22
23
24 /**
25  * Element date d'un formulaire pour LdapSaisie
26  *
27  * Cette classe définis les éléments dates des formulaires.
28  * Elle étant la classe basic LSformElement.
29  *
30  * @author Benjamin Renard <brenard@easter-eggs.com>
31  */
32
33 class LSformElement_date extends LSformElement {
34
35   var $fieldTemplate = 'LSformElement_date_field.tpl';
36
37   var $_php2js_format = array(
38     "a" => "a",
39     "A" => "A",
40     "b" => "b",
41     "B" => "B",
42     "C" => "C",
43     "d" => "d",
44     "D" => "m/%d/%y",
45     "e" => "e",
46     "h" => "b",
47     "H" => "H",
48     "I" => "I",
49     "j" => "j",
50     "m" => "m",
51     "M" => "M",
52     "n" => "n",
53     "p" => "p",
54     "r" => "p",
55     "R" => "H:%M",
56     "S" => "S",
57     "t" => "t",
58     "T" => "H:%M:%S",
59     "u" => "u",
60     "U" => "U",
61     "V" => "V",
62     "w" => "w",
63     "W" => "W",
64     "y" => "y",
65     "Y" => "Y",
66     "Z" => "T",
67     "%" => "%"
68   );
69   
70   var $_cache_php2js_format=array();
71
72   /**
73    * Définis la valeur de l'élément date
74    *
75    * @author Benjamin Renard <brenard@easter-eggs.com>
76    *
77    * @param[in] [<b>required</b>] string or array La futur valeur de l'élément
78    *
79    * @retval boolean Retourne True
80    */
81   function setValue($data) {
82     if (!is_array($data)) {
83       $data=array($data);
84     }
85     
86     for($i=0;$i<count($data);$i++) {
87       $data[$i]=strftime($this -> getFormat(),$data[$i]);
88     }
89
90     $this -> values = $data;
91     return true;
92   }
93   
94   /**
95    * Exporte les valeurs de l'élément
96    * 
97    * @retval Array Les valeurs de l'élement
98    */
99   function exportValues(){
100     $retval=array();
101     if (is_array($this -> values)) {
102       foreach($this -> values as $val) {
103         $date = strptime($val,$this -> getFormat());
104         if (is_array($date)) {
105           $retval[] = mktime($date['tm_hour'],$date['tm_min'],$date['tm_sec'],$date['tm_mon']+1,$date['tm_mday'],$date['tm_year']+1900); 
106         }
107       }
108     }
109     return $retval;
110   }
111   
112  /**
113   * Retourne le format d'affichage de la date
114   * 
115   * @retval string Le format de la date
116   **/
117   function getFormat() {
118     if (isset($this -> params['html_options']['format'])) {
119       return $this -> params['html_options']['format'];
120     }
121     else {
122       return "%d/%m/%Y, %T";
123     }
124   }
125
126  /**
127   * Retourne les infos d'affichage de l'élément
128   * 
129   * Cette méthode retourne les informations d'affichage de l'élement
130   *
131   * @retval array
132   */
133   function getDisplay(){
134     $return = $this -> getLabelInfos();
135     // value
136     if (!$this -> isFreeze()) {
137       // Help Infos
138       LSsession :: addHelpInfos(
139         'LSformElement_date',
140         array(
141           'calendar' => _('Select in a calendar.'),
142           'now' => _('Now.')
143         )
144       );
145       
146       $params = array(
147         'format' => $this -> php2js_format($this -> getFormat()),
148         'firstDayOfWeek' => $this -> getFirstDayOfWeek()
149       );
150       LSsession :: addJSconfigParam($this -> name,$params);
151       
152       LSsession :: addCssFile('theme.css',LS_LIB_DIR.'jscalendar/skins/aqua/');
153       LSsession :: addJSscript('calendar.js',LS_LIB_DIR.'jscalendar/');
154       LSsession :: addJSscript('calendar-en.js',LS_LIB_DIR.'jscalendar/lang/');
155       $codeLang = LSsession :: getLang(true);
156       LSsession :: addJSscript('calendar-'.$codeLang.'.js',LS_LIB_DIR.'jscalendar/lang/');
157       LSsession :: addJSscript('LSformElement_date_field.js');
158       LSsession :: addJSscript('LSformElement_date.js');
159     }
160     $return['html'] = $this -> fetchTemplate();
161     return $return;
162   }
163  
164  /**
165   * Retourne le nurméro du premier jour de la semaine
166   * 
167   * @retval int 0=dimanche ... 6=samedi, par défaut 0=dimanche
168   */
169   function getFirstDayOfWeek() {
170     if (isset($this -> params['html_options']['firstDayOfWeek'])) {
171       return $this -> params['html_options']['firstDayOfWeek'];
172     }
173     else {
174       return 0;
175     }
176   }
177   
178  /**
179   * Convertis un format de date Php (strftime) en JS (jscalendar)
180   * 
181   * @retval mixed Format de date jscalendar (string) ou False si la convertion
182   *               n'a pas réussi.
183   */
184   function php2js_format($format) {
185     if (isset($this -> _cache_php2js_format[$format])) {
186       return $this -> _cache_php2js_format[$format];
187     }
188     $new="";
189     for($i=0;$i<strlen($format);$i++) {
190       if ($format[$i]=="%") {
191         if (isset($this -> _php2js_format[$format[$i+1]])) {
192           $new.="%".$this -> _php2js_format[$format[$i+1]];
193           $i++;
194         }
195         else {
196           $this -> _cache_php2js_format[$format]=false;
197           return;
198         }
199       }
200       else {
201         $new.=$format[$i];
202       }
203     }
204     $this -> _cache_php2js_format[$format]=$new;
205     return $new;
206   }
207 }
208
209 ?>