LSformElement::valueWithUnit : sort units params before using
[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       krsort($units);
50       return $units;
51     }
52     LSerror :: addErrorCode('LSformElement_valueWithUnit_01',$this -> name);
53     return;
54   }
55
56  /**
57   * Retourne les infos d'affichage de l'élément
58   * 
59   * Cette méthode retourne les informations d'affichage de l'élement
60   *
61   * @retval array
62   */
63   function getDisplay(){
64     $return = $this -> getLabelInfos();
65
66     $values_and_units=array();
67     $units=$this -> getUnits();
68     
69     if ($units) {
70       foreach ($this -> values as $value) {
71         if (ereg('^([0-9]*)$',$value,$regs)) {
72           $infos = array(
73             'value' => $regs[1]
74           );
75           foreach($units as $sill => $label) {
76             if ($infos['value'] >= $sill) {
77               if ($infos['value'] % $sill == 0) {
78                 $infos['valueWithUnit']=$infos['value']/$sill;
79                 $infos['unitSill']=$sill;
80                 $infos['unitLabel']=$label;
81                 break;
82               }
83             }
84           }
85           $values_and_units[$value] = $infos;
86         }
87         else {
88           $values_and_units[$value] = array(
89             'unknown' => _('Incorrect value')
90           );
91         }
92       }
93     }
94     
95     LSsession :: addCssFile('LSformElement_valueWithUnit.css');
96     
97     $return['html']=$this -> fetchTemplate(
98       NULL,
99       array(
100         'values_and_units' => $values_and_units,
101         'units' => $units
102       )
103     );
104     return $return;
105   }
106   
107  /**
108   * Retourne le code HTML d'un champ vide
109   *
110   * @retval string Code HTML d'un champ vide.
111   */
112   function getEmptyField() {
113     return $this -> fetchTemplate(
114       $this -> fieldTemplate,
115       array(
116         'units' => $this -> getUnits()
117       )
118     );
119   }
120   
121   /**
122    * Recupère la valeur de l'élement passée en POST
123    *
124    * Cette méthode vérifie la présence en POST de la valeur de l'élément et la récupère
125    * pour la mettre dans le tableau passer en paramètre avec en clef le nom de l'élément
126    *
127    * @param[] array Pointeur sur le tableau qui recupèrera la valeur.
128    *
129    * @retval boolean true si la valeur est présente en POST, false sinon
130    */
131   function getPostData(&$return) {
132     if($this -> isFreeze()) {
133       return true;
134     }
135     $return[$this -> name]=array();
136     if (isset($_POST[$this -> name.'_valueWithUnit'])) {
137       if(!is_array($_POST[$this -> name.'_valueWithUnit'])) {
138         $_POST[$this -> name.'_valueWithUnit'] = array($_POST[$this -> name.'_valueWithUnit']);
139       }
140       if(isset($_POST[$this -> name.'_unitFact']) && !is_array($_POST[$this -> name.'_unitFact'])) {
141         $_POST[$this -> name.'_unitFact'] = array($_POST[$this -> name.'_unitFact']);
142       }
143       foreach($_POST[$this -> name.'_valueWithUnit'] as $key => $val) {
144         if (!empty($val)) {
145           $f = 1;
146           if (isset($_POST[$this -> name.'_unitFact'][$key]) && ($_POST[$this -> name.'_unitFact'][$key]!=1)) {
147             $f = $_POST[$this -> name.'_unitFact'][$key];
148           }
149           $return[$this -> name][$key] = ($val*$f);
150         }
151       }
152     }
153     if (isset($_POST[$this -> name])) {
154       if(!is_array($_POST[$this -> name])) {
155         $_POST[$this -> name] = array($_POST[$this -> name]);
156       }
157       $return[$this -> name]=array_merge($return[$this -> name],$_POST[$this -> name]);
158     }
159     if (isset($_POST[$this -> name.'_value'])) {
160       if (!is_array($_POST[$this -> name.'_value'])) {
161         $_POST[$this -> name.'_value']=array($_POST[$this -> name.'_value']);
162       }
163       $return[$this -> name]=array_merge($return[$this -> name],$_POST[$this -> name.'_value']);
164     }
165     return true;
166   }
167 }
168
169 /*
170  * Error Codes
171  */
172 LSerror :: defineError('LSformElement_valueWithUnit_01',
173 _("LSformElement_valueWithUnit : Units configuration data are missing for the attribute %{attr}.")
174 );
175 ?>