LSformElement : fix translation of help infos
[ldapsaisie.git] / public_html / includes / class / class.LSformElement.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 d'un formulaire pour LdapSaisie
26  *
27  * Cette classe gère les éléments des formulaires.
28  *
29  * @author Benjamin Renard <brenard@easter-eggs.com>
30  */
31
32 class LSformElement {
33
34   var $name;
35   var $label;
36   var $params;
37   var $values = array();
38   var $_required = false;
39   var $_freeze = false;
40   var $attr_html;
41   var $fieldTemplate = 'LSformElement_field.tpl';
42   var $template = 'LSformElement.tpl';
43   var $fetchVariables = array();
44
45   /**
46    * Constructeur
47    *
48    * Cette methode construit l'objet et définis sa configuration de base.
49    *
50    * @author Benjamin Renard <brenard@easter-eggs.com>
51    *
52    * @param[in] &$form [<b>required</b>] LSform L'objet LSform parent
53    * @param[in] $name [<b>required</b>] string Le nom de référence de l'élément
54    * @param[in] $label [<b>required</b>] string Le label de l'élément
55    * @param[in] $params mixed Paramètres supplémentaires
56    *
57    * @retval true
58    */ 
59   function LSformElement (&$form, $name, $label, $params,&$attr_html){
60     $this -> name = $name;
61     $this -> label = $label;
62     $this -> params = $params;
63     $this -> form = $form;
64     $this -> attr_html = $attr_html;
65     return true;
66   }
67
68   /**
69    * Définis la valeur de l'élément
70    *
71    * Cette méthode définis la valeur de l'élément
72    *
73    * @author Benjamin Renard <brenard@easter-eggs.com>
74    *
75    * @param[in] [<b>required</b>] string or array La futur valeur de l'élément
76    *
77    * @retval boolean Retourne True
78    */
79   function setValue($data) {
80     if (!is_array($data)) {
81       $data=array($data);
82     }
83
84     $this -> values = $data;
85     return true;
86   }
87   
88   /**
89    * Définis la valeur de l'élément à partir des données 
90    * envoyées en POST du formulaire
91    *
92    * Cette méthode définis la valeur de l'élément à partir des données 
93    * envoyées en POST du formulaire.
94    *
95    * @author Benjamin Renard <brenard@easter-eggs.com>
96    *
97    * @param[in] [<b>required</b>] string or array La futur valeur de l'élément
98    *
99    * @retval boolean Retourne True
100    */
101   function setValueFromPostData($data) {
102     if (!is_array($data)) {
103       $data=array($data);
104     }
105     $this -> values = $data;
106     return true;
107   }
108
109   /**
110    * Exporte les valeurs de l'élément
111    * 
112    * @retval Array Les valeurs de l'élement
113    */
114   function exportValues(){
115     return $this -> values;
116   }
117
118   /**
119    * Ajoute une valeur à l'élément
120    *
121    * Cette méthode ajoute une valeur à l'élément
122    *
123    * @author Benjamin Renard <brenard@easter-eggs.com>
124    *
125    * @param[in] [<b>required</b>] string or array La futur valeur de l'élément
126    *
127    * @retval void
128    */
129   function addValue($data) {
130     if (is_array($data)) {
131       $this -> values = array_merge($this -> values, $data);
132     }
133     else {
134       $this -> values[] = $data;
135     }
136   }
137
138   /**
139    * Test si l'élément est éditable
140    * 
141    * Cette méthode test si l'élément est éditable
142    *
143    * @retval boolean
144    */
145   function isFreeze(){
146     return $this -> _freeze;
147   }
148   
149   /**
150    * Freeze l'élément
151    *
152    * Rend l'élément non-editable
153    *
154    * @retval void
155    */
156   function freeze() {
157     $this -> _freeze = true;
158   }
159
160   /**
161    * Défini la propriété required de l'élément.
162    *
163    * param[in] $isRequired boolean true si l'élément est requis, false sinon
164    *
165    * @retval void
166    */
167   function setRequired($isRequired=true) {
168     $this -> _required = $isRequired;
169   }
170
171   /**
172    * Test si l'élément est requis
173    * 
174    * Cette méthode test si l'élément est requis
175    *
176    * @retval boolean
177    */
178   function isRequired(){
179     return $this -> _required;
180   }
181
182   /**
183    * Retourne le label de l'élement
184    *
185    * @retval void
186    */
187   function getLabelInfos() {
188     if ($this -> isRequired()) {
189         $return['required']=true;
190     }
191     $return['label'] = $this -> getLabel();
192     if (isset($this -> params['help_info'])) {
193       $return['help_info']=__($this -> params['help_info']);
194     }
195     return $return;
196   }
197
198   /**
199    * Recupère la valeur de l'élement passée en POST
200    *
201    * Cette méthode vérifie la présence en POST de la valeur de l'élément et la récupère
202    * pour la mettre dans le tableau passer en paramètre avec en clef le nom de l'élément
203    *
204    * @param[] array Pointeur sur le tableau qui recupèrera la valeur.
205    *
206    * @retval boolean true si la valeur est présente en POST, false sinon
207    */
208   function getPostData(&$return) {
209     if($this -> isFreeze()) {
210       return true;
211     }
212     if (isset($_POST[$this -> name])) {
213       $return[$this -> name]=array();
214       if(!is_array($_POST[$this -> name])) {
215         $_POST[$this -> name] = array($_POST[$this -> name]);
216       }
217       foreach($_POST[$this -> name] as $key => $val) {
218         if (!empty($val)) {
219           $return[$this -> name][$key] = $val;
220         }
221       }
222       return true;
223     }
224     else {
225       $return[$this -> name] = array();
226       return true;
227     }
228   }
229
230   /**
231    * Retourne le label de l'élement
232    *
233    * Retourne $this -> label, ou $this -> params['label'], ou $this -> name
234    *
235    * @retval string Le label de l'élément
236    */
237   function getLabel() {
238     if ($this -> label != "") {
239       return __($this -> label);
240     }
241     else if ($this -> params['label']) {
242       return __($this -> params['label']);
243     }
244     else {
245       return __($this -> name);
246     }
247   }
248
249   /**
250    * Le champ est-il a valeur multiple
251    *
252    * @retval boolean True si le champ est à valeur multiple, False sinon
253    */
254   function isMultiple() {
255     return ($this -> params['multiple'] == true);
256   }
257   
258  /**
259   * Retournne un template Smarty compilé dans le contexte d'un LSformElement
260   *
261   * @param[in] string $template Le template à retourner
262   * @param[in] array $variables Variables Smarty à assigner avant l'affichage
263   * 
264   * @retval string Le HTML compilé du template
265   */
266   function fetchTemplate($template=NULL,$variables=array()) {
267     if (!$template) {
268       $template = $this -> template;
269     }
270     return LSsession :: fetchTemplate(
271       $template,
272       array_merge_recursive(
273         $variables,
274         $this -> fetchVariables,
275         array(
276           'freeze' => $this -> isFreeze(),
277           'multiple'=> $this -> isMultiple(),
278           'value' => '',
279           'values' => $this -> values,
280           'attr_name' => $this -> name,
281           'noValueTxt' => _('No set value'),
282           'fieldTemplate' => $this -> fieldTemplate
283         )
284       )
285     );
286   }
287   
288  /**
289   * Retourne le code HTML d'un champ vide
290   *
291   * @retval string Code HTML d'un champ vide.
292   */
293   function getEmptyField() {
294     return $this -> fetchTemplate($this -> fieldTemplate);
295   }
296 }
297
298 ?>