Added LSformElement_valueWithUnit
[ldapsaisie.git] / public_html / includes / class / class.LSformElement_valueWithUnit.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 valueWithUnit d'un formulaire pour LdapSaisie
26  *
27  * Cette classe définis les éléments valueWithUnit des formulaires.
28  * Elle étant la classe basic LSformElement.
29  *
30  * @author Benjamin Renard <brenard@easter-eggs.com>
31  */
32
33 class LSformElement_valueWithUnit extends LSformElement {
34
35   var $fieldTemplate = 'LSformElement_valueWithUnit_field.tpl';
36
37  /**
38   * Retourne les unites de l'attribut
39   * 
40   * @retval array|False Le tableau contenant en cle les seuils et en valeur les labels des unites.
41   *                     Si le parametre units n'est pas defini, cette fonction retournera False
42   **/
43   function getUnits() {
44     if (isset($this -> params['html_options']['units']) && is_array($this -> params['html_options']['units'])) {
45       $units=array();
46       foreach($this -> params['html_options']['units'] as $sill => $label) {
47         $units[$sill]=__($label);
48       }
49       return $units;
50     }
51     LSerror :: addErrorCode('LSformElement_valueWithUnit_01',$this -> name);
52     return;
53   }
54
55  /**
56   * Retourne les infos d'affichage de l'élément
57   * 
58   * Cette méthode retourne les informations d'affichage de l'élement
59   *
60   * @retval array
61   */
62   function getDisplay(){
63     $return = $this -> getLabelInfos();
64
65     $values_and_units=array();
66     $units=$this -> getUnits();
67     
68     if ($units) {
69       foreach ($this -> values as $value) {
70         if (ereg('^([0-9]*)$',$value,$regs)) {
71           $infos = array(
72             'value' => $regs[1]
73           );
74           foreach($units as $sill => $label) {
75             if ($infos['value'] >= $sill) {
76               if ($infos['value'] % $sill == 0) {
77                 $infos['valueWithUnit']=$infos['value']/$sill;
78                 $infos['unitSill']=$sill;
79                 $infos['unitLabel']=$label;
80                 break;
81               }
82             }
83           }
84           $values_and_units[$value] = $infos;
85         }
86         else {
87           $values_and_units[$value] = array(
88             'unknown' => _('Incorrect value')
89           );
90         }
91       }
92     }
93     
94     LSsession :: addCssFile('LSformElement_valueWithUnit.css');
95     
96     $return['html']=$this -> fetchTemplate(
97       NULL,
98       array(
99         'values_and_units' => $values_and_units,
100         'units' => $units
101       )
102     );
103     return $return;
104   }
105   
106  /**
107   * Retourne le code HTML d'un champ vide
108   *
109   * @retval string Code HTML d'un champ vide.
110   */
111   function getEmptyField() {
112     return $this -> fetchTemplate(
113       $this -> fieldTemplate,
114       array(
115         'units' => $this -> getUnits()
116       )
117     );
118   }
119   
120   /**
121    * Recupère la valeur de l'élement passée en POST
122    *
123    * Cette méthode vérifie la présence en POST de la valeur de l'élément et la récupère
124    * pour la mettre dans le tableau passer en paramètre avec en clef le nom de l'élément
125    *
126    * @param[] array Pointeur sur le tableau qui recupèrera la valeur.
127    *
128    * @retval boolean true si la valeur est présente en POST, false sinon
129    */
130   function getPostData(&$return) {
131     if($this -> isFreeze()) {
132       return true;
133     }
134     $return[$this -> name]=array();
135     if (isset($_POST[$this -> name.'_valueWithUnit'])) {
136       if(!is_array($_POST[$this -> name.'_valueWithUnit'])) {
137         $_POST[$this -> name.'_valueWithUnit'] = array($_POST[$this -> name.'_valueWithUnit']);
138       }
139       if(isset($_POST[$this -> name.'_unitFact']) && !is_array($_POST[$this -> name.'_unitFact'])) {
140         $_POST[$this -> name.'_unitFact'] = array($_POST[$this -> name.'_unitFact']);
141       }
142       foreach($_POST[$this -> name.'_valueWithUnit'] as $key => $val) {
143         if (!empty($val)) {
144           $f = 1;
145           if (isset($_POST[$this -> name.'_unitFact'][$key]) && ($_POST[$this -> name.'_unitFact'][$key]!=1)) {
146             $f = $_POST[$this -> name.'_unitFact'][$key];
147           }
148           $return[$this -> name][$key] = ($val*$f);
149         }
150       }
151     }
152     if (isset($_POST[$this -> name.'_value'])) {
153       if (!is_array($_POST[$this -> name.'_value'])) {
154         $_POST[$this -> name.'_value']=array($_POST[$this -> name.'_value']);
155       }
156       $return[$this -> name]=array_merge($return[$this -> name],$_POST[$this -> name.'_value']);
157     }
158     return true;
159   }
160 }
161
162 /*
163  * Error Codes
164  */
165 LSerror :: defineError('LSformElement_valueWithUnit_01',
166 _("LSformElement_valueWithUnit : Units configuration data are missing for the attribute %{attr}.")
167 );
168 ?>