Fix reference allocation in variable
[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     $help_info = "";
193     if ( (isset($this -> params['displayAttrName']) && $this -> params['displayAttrName']) || (isset($this -> attr_html -> attribute -> ldapObject -> config['displayAttrName']) && $this -> attr_html -> attribute -> ldapObject -> config['displayAttrName']) ) {
194       $help_info=_("Attribute")." : ".$this -> name."\n";
195     }
196     if (isset($this -> params['help_info'])) {
197       if (!empty($help_info)) $help_info .= " - ";
198       $help_info.=__($this -> params['help_info']);
199     }
200     if (!empty($help_info))
201       $return['help_info'] = $help_info;
202
203     return $return;
204   }
205
206   /**
207    * Recupère la valeur de l'élement passée en POST
208    *
209    * Cette méthode vérifie la présence en POST de la valeur de l'élément et la récupère
210    * pour la mettre dans le tableau passer en paramètre avec en clef le nom de l'élément
211    *
212    * @param[] array Pointeur sur le tableau qui recupèrera la valeur.
213    *
214    * @retval boolean true si la valeur est présente en POST, false sinon
215    */
216   function getPostData(&$return) {
217     if($this -> isFreeze()) {
218       return true;
219     }
220     if (isset($_POST[$this -> name])) {
221       $return[$this -> name]=array();
222       if(!is_array($_POST[$this -> name])) {
223         $_POST[$this -> name] = array($_POST[$this -> name]);
224       }
225       foreach($_POST[$this -> name] as $key => $val) {
226         if (!empty($val)||(is_string($val)&&($val=="0"))) {
227           $return[$this -> name][$key] = $val;
228         }
229       }
230       return true;
231     }
232     else {
233       $return[$this -> name] = array();
234       return true;
235     }
236   }
237
238   /**
239    * Retourne le label de l'élement
240    *
241    * Retourne $this -> label, ou $this -> params['label'], ou $this -> name
242    *
243    * @retval string Le label de l'élément
244    */
245   function getLabel() {
246     if ($this -> label != "") {
247       return __($this -> label);
248     }
249     else if ($this -> params['label']) {
250       return __($this -> params['label']);
251     }
252     else {
253       return __($this -> name);
254     }
255   }
256
257   /**
258    * Le champ est-il a valeur multiple
259    *
260    * @retval boolean True si le champ est à valeur multiple, False sinon
261    */
262   function isMultiple() {
263     return ( (isset($this -> params['multiple']))?($this -> params['multiple'] == true):false );
264   }
265   
266  /**
267   * Retournne un template Smarty compilé dans le contexte d'un LSformElement
268   *
269   * @param[in] string $template Le template à retourner
270   * @param[in] array $variables Variables Smarty à assigner avant l'affichage
271   * 
272   * @retval string Le HTML compilé du template
273   */
274   function fetchTemplate($template=NULL,$variables=array()) {
275     if (!$template) {
276       $template = $this -> template;
277     }
278     return LSsession :: fetchTemplate(
279       $template,
280       array_merge_recursive(
281         $variables,
282         $this -> fetchVariables,
283         array(
284           'freeze' => $this -> isFreeze(),
285           'multiple'=> $this -> isMultiple(),
286           'value' => '',
287           'values' => $this -> values,
288           'attr_name' => $this -> name,
289           'noValueTxt' => ( (isset($this -> params['no_value_label']))? __($this -> params['no_value_label']):_('No set value') ),
290           'fieldTemplate' => $this -> fieldTemplate,
291           'fieldType' => get_class($this)
292         )
293       )
294     );
295   }
296   
297  /**
298   * Retourne le code HTML d'un champ vide
299   *
300   * @retval string Code HTML d'un champ vide.
301   */
302   function getEmptyField() {
303     return $this -> fetchTemplate($this -> fieldTemplate);
304   }
305 }
306
307 ?>