Initial import
[ldapsaisie.git] / trunk / includes / class / class.LSattribute.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  * Attribut Ldap
25  *
26  * Cette classe modélise un attribut Ldap
27  *
28  * @author Benjamin Renard <brenard@easter-eggs.com>
29  */
30 class LSattribute {
31   
32   var $name;
33   var $config;
34   var $ldap;
35   var $html;
36   var $data;
37   var $updateData=false;
38   var $is_validate=false;
39   
40   /**
41    * Constructeur
42    *
43    * Cette methode construit l'objet et définis la configuration.
44    * Elle lance la construction des objets LSattr_html et LSattr_ldap correspondant
45    * à ses types définis définis dans sa configuration
46    *
47    * @author Benjamin Renard <brenard@easter-eggs.com>
48    *
49    * @param[in] $name string Nom de l'attribut ldap
50    * @param[in] $config array Configuration de l'objet
51    *
52    * @retval boolean Retourne true si la création a réussi, false sinon.
53    */   
54   function LSattribute ($name,$config) {
55     $this -> name = $name;
56     $this -> config = $config;
57     $html_type = "LSattr_html_".$config['html_type'];
58     $ldap_type = "LSattr_ldap_".$config['ldap_type'];
59     if((class_exists($html_type))&&(class_exists($ldap_type))) {
60       $this -> html = new $html_type($name,$config);
61       $this -> ldap = new $ldap_type($name,$config);
62     }
63     else {
64       $GLOBALS['LSerror'] -> addErrorCode(41,array('html'=>$config['html_type'],'ldap'=>$config['ldap_type']));
65       return;
66     }
67     return true;
68   }
69   
70   
71   /**
72    * Retourne la valeur du label de l'attribut
73    *
74    * @author Benjamin Renard <brenard@easter-eggs.com>
75    *
76    * @retval string Le label de l'attribut
77    *
78    * @see LSattr_html::getLabel()
79    */   
80
81   function getLabel() {
82     return $this -> html -> getLabel();
83   }
84   
85   /**
86    * Défini la valeur de l'attribut
87    *
88    * @author Benjamin Renard <brenard@easter-eggs.com>
89    *
90    * @retval boolean true
91    */
92   function loadData($attr_data) {
93     $this -> data = $attr_data;
94     return true;
95   }
96   
97   /**
98    * DEBIG : affiche la valeur de l'attribut
99    *
100    * @author Benjamin Renard <brenard@easter-eggs.com>
101    *
102    * @retval void
103    */
104   function debug_printValue() {
105     print $this -> data;
106   }
107   
108   /**
109    * Retourne la valeur de l'attribut
110    *
111    * @author Benjamin Renard <brenard@easter-eggs.com>
112    *
113    * @retval mixed La valeur de l'attribut
114    */
115   function getValue() {
116     return $this -> data;
117   }
118   
119   /**
120    * Retourne la valeur d'affichage de l'attribut
121    *
122    * @author Benjamin Renard <brenard@easter-eggs.com>
123    *
124    * @retval string La valeur d'affichage de l'attribut
125    */
126   function getDisplayValue() {
127     $data = $this -> ldap -> getDisplayValue($this -> data);
128     if ($this -> config['onDisplay']) {
129       if (is_array($this -> config['onDisplay'])) {
130         $result=$data;
131         foreach($this -> config['onDisplay'] as $func) {
132           if (function_exists($func)) {
133             $result=$func($result);
134           }
135           else {
136             $GLOBALS['LSerror'] -> addErrorCode(42,array('attr' => $this->name,'func' => $func));
137             return;
138           }
139         }
140         return $result;
141       }
142       else {
143         if (function_exists($this -> config['onDisplay'])) {
144           return $this -> config['onDisplay']($data);
145         }
146         else {
147           $GLOBALS['LSerror'] -> addErrorCode(42,array('attr' => $this->name,'func' => $this -> config['onDisplay']));
148           return;
149         }
150       }
151     }
152     return $data;
153   }
154   
155   /**
156    * Ajoute l'attribut au formualaire
157    *
158    * Cette méthode ajoute l'attribut au formulaire $form si l'identifiant de celui-ci
159    * ($idForm) est connu dans la configuration de l'objet.
160    *
161    * @author Benjamin Renard <brenard@easter-eggs.com>
162    *
163    * @param[in] object LSform Le formulaire dans lequel doit être ajouté l'attribut
164    * @param[in] string L'identifiant du formulaire
165    *
166    * @retval boolean true si l'ajout a fonctionner ou qu'il n'est pas nécessaire, false sinon
167    */
168   function addToForm(&$form,$idForm) {
169     if(isset($this -> config['form'][$idForm])) {
170       $element = $this -> html -> addToForm($form,$idForm);
171       if($this -> config['required']==1)
172         $form->addRule($this -> name, "Le champ '".$this -> config['label']."' est obligatoire.",'required', null, 'client');
173       /// !!!!! A CHANGER !!!!!!! \\\\ => utiliser une fonction de traitement de donnée
174       if($this -> data !='')
175         $element -> setValue($this -> getFormVal());
176       else if (isset($this -> config['default_value']))
177         $element -> setValue($this -> config['default_value']);
178       if($this -> config['form'][$idForm]==0)
179         $element -> freeze();
180       if(isset($this -> config['check_data'])) {
181         if(is_array($this -> config['check_data'])) {
182           foreach ($this -> config['check_data'] as $rule => $rule_infos) {
183             if((!$form -> isRuleRegistered($rule))&&($rule!='')) {
184               $GLOBALS['LSerror'] -> addErrorCode(43,array('attr' => $this->name,'rule' => $rule));
185               return;
186             }
187             if(!isset($rule_infos['msg']))
188               $rule_infos['msg']='La valeur du champs '.$this -> config['label'].' est invalide.';
189             if(!isset($rule_infos['param']))
190               $rule_infos['param']=NULL;
191             $form -> addRule($this -> name,$rule_infos['msg'],$rule,$rule_infos['param'],$GLOBALS['LSconfig']['check_data_place']);
192           }
193         }
194         else {
195           $GLOBALS['LSerror'] -> addErrorCode(44,$this->name);
196         }
197       }
198     }
199     return true;
200   }
201   
202   /**
203    * Retourne la valeur a afficher dans le formulaire
204    *
205    * @author Benjamin Renard <brenard@easter-eggs.com>
206    *
207    * @retval string La valeur a afficher dans le formulaire.
208    */
209   function getFormVal() {
210     return $this -> getDisplayValue();
211   }
212   
213   function setUpdateData($data) {
214     if($this -> getFormVal() != $data)
215       $this -> updateData=$data;
216   }
217   
218   /**
219    * Vérifie si l'attribut a été validé
220    *
221    * @author Benjamin Renard <brenard@easter-eggs.com>
222    *
223    * @retval boolean true si l'attribut a été validé, false sinon
224    */
225   function isValidate() {
226     return ((!isset($this -> config['validation'])) || ($this -> is_validate));
227   }
228   
229   /**
230    * Valide le champs
231    *
232    * @author Benjamin Renard <brenard@easter-eggs.com>
233    *
234    * @retval void
235    */
236   function validate() {
237     $this -> is_validate=true;
238   }
239   
240   /**
241    * Vérifie si l'attribut a été mise à jour
242    *
243    * @author Benjamin Renard <brenard@easter-eggs.com>
244    *
245    * @retval boolean true si l'attribut a été mis à jour, false sinon
246    */
247   function isUpdate() {
248     return ($this -> updateData)?true:false;
249   }
250   
251   /**
252    * Retourne la valeur de l'attribut pour son enregistrement dans l'annuaire
253    *
254    * @author Benjamin Renard <brenard@easter-eggs.com>
255    *
256    * @retval mixed La valeur de l'attribut pour son enregistrement dans l'annuaire
257    */
258   function getUpdateData() {
259     $data=($this ->isUpdate())?$this -> updateData:$this -> data;
260     if ($this -> config['onSave']) {
261       if (is_array($this -> config['onSave'])) {
262         $result=$data;
263         foreach($this -> config['onSave'] as $func) {
264           if (function_exists($func)) {
265             $result=$func($result);
266           }
267           else {
268             $GLOBALS['LSerror'] -> addErrorCode(45,array('attr' => $this->name,'func' => $func));
269             return;
270           }
271         }
272         return $result;
273       }
274       else {
275         if (function_exists($this -> config['onSave'])) {
276           return $this -> config['onSave']($data);
277         }
278         else {
279           $GLOBALS['LSerror'] -> addErrorCode(45,array('attr' => $this->name,'func' => $this -> config['onSave']));
280           return;
281         }
282       }
283     }
284     return $this -> ldap -> getUpdateData($data);
285   }
286   
287   /**
288    * Retourne la configuration de validation de l'annuaire
289    *
290    * @author Benjamin Renard <brenard@easter-eggs.com>
291    *
292    * @retval mixed La configuration de validation de l'attribut
293    */
294   function getValidateConfig() {
295     return $this -> config['validation'];
296   }
297   
298 }
299
300 ?>