source: spip-zone/_plugins_/hydraulic/branches/v0.3/formulaires/lechapt_calmon.php @ 59231

Last change on this file since 59231 was 59231, checked in by m.dulondel@…, 8 years ago
File size: 9.9 KB
Line 
1<?php
2/*
3 * formulaire/lechapt_calmon.php
4 *
5 *
6 *
7 * Copyright 2012 David Dorchies <dorch@dorch.fr>
8 *
9 *
10 *
11 * This program is free software; you can redistribute it and/or modify
12 *
13 * it under the terms of the GNU General Public License as published by
14 *
15 * the Free Software Foundation; either version 2 of the License, or
16 *
17 * (at your option) any later version.
18 *
19 *
20 *
21 * This program is distributed in the hope that it will be useful,
22 *
23 * but WITHOUT ANY WARRANTY; without even the implied warranty of
24 *
25 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
26 *
27 * GNU General Public License for more details.
28 *
29 *
30 *
31 * You should have received a copy of the GNU General Public License
32 *
33 * along with this program; if not, write to the Free Software
34 *
35 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
36 *
37 * MA 02110-1301, USA.
38 *
39 */
40 
41function mes_champs_coeff_materiau() {
42        $mes_champs_coeff = array('L','M','N','Q','D','J','Lg');
43        return $mes_champs_coeff;
44}
45
46function mes_champs_sans_coeff_materiau(){
47        $mes_champs_sans_coeff = array(
48                        'Q' => _T('hydraulic:param_Q'),
49                        'D' => _T('hydraulic:param_D'),
50                        'J' => _T('hydraulic:param_J'),
51                        'Lg' => _T('hydraulic:param_Lg')
52                );
53       
54        return $mes_champs_sans_coeff;
55}
56
57function id_decoupe($champs){
58        $decoup = explode('_', $champs, 3);
59        return $decoup[count($decoup)-1];
60}
61
62/* Tableau des données pour chaque type de tuyau. Ces valeurs sont associées
63 * aux numéros des options du select (voir page lechapt_calmon.php)
64 */
65function mes_saisies_materiau() {
66        $type_materiaux = array(
67       
68                                '1'          => array(
69                                                                           'L' =>1.863,
70                                                                           'M' =>2,
71                                                                           'N' =>5.33                   
72                                ),
73                               
74                                '2'          => array(
75                                                                           'L' =>1.601,
76                                                                           'M' =>1.975,
77                                                                           'N' =>5.25                   
78                                ),
79                               
80                                '3'          => array(
81                                                                           'L' =>1.40,
82                                                                           'M' =>1.96,
83                                                                           'N' =>5.19                   
84                                ),
85                               
86                                '4'          => array(
87                                                                           'L' =>1.16,
88                                                                           'M' =>1.93,
89                                                                           'N' =>5.11                   
90                                ),
91                               
92                                '5'          => array(
93                                                                           'L' =>1.1,
94                                                                           'M' =>1.89,
95                                                                           'N' =>5.01                   
96                                ),
97                               
98                                '6'          => array(
99                                                                           'L' =>1.049,
100                                                                           'M' =>1.86,
101                                                                           'N' =>4.93                   
102                                ),
103                               
104                                '7'          => array(
105                                                                           'L' =>1.01,
106                                                                           'M' =>1.84,
107                                                                           'N' =>4.88                   
108                                ),
109                               
110                                '8'          => array(
111                                                                           'L' =>0.916,
112                                                                           'M' =>1.78,
113                                                                           'N' =>4.78                   
114                                ),
115                               
116                                '9'          => array(
117                                                                           'L' =>0.971,
118                                                                           'M' =>1.81,
119                                                                           'N' =>4.81                   
120                                ),
121        );
122               
123  return $type_materiaux;
124 
125}
126
127function champs_obligatoires_lcalmon(){
128        /*
129         * Ce tableau contient la liste de tous les champs du formulaire.
130         * La suite de cette fonction se chargera de supprimer les valeurs non obligatoires.
131         */
132         
133        $tChOblig = mes_champs_coeff_materiau();
134        $tChUtil = mes_champs_sans_coeff_materiau();
135       
136        $choix_champs = array();
137        foreach($tChUtil as $cle=>$valeur){
138                $choix_champs[$cle] = _request('choix_champs_'.$cle);
139        }
140
141        foreach($choix_champs as $cle=>$valeur){
142                // Si le choix du select est de calculer une valeur...
143                if(substr($valeur, 0,3) != 'val'){
144                        foreach($tChOblig as $cle1=>$valeur1){
145                                if($cle == $valeur1){
146                                        // ... alors on peut supprimer de notre tableau le champs calculé (il n'est pas obligatoire car grisé)
147                                        unset($tChOblig[$cle1]);
148                                        // Permet de tasser le tableau
149                                        $tChOblig = array_values($tChOblig);
150                                }
151                        }
152                }
153                // Si le choix du select est de faire varier une valeur alors on ajoute les 3 champs nécessaires
154                if(substr($valeur, 0, 3) == 'var'){
155                        $tChOblig[] = 'val_min_'.$cle;
156                        $tChOblig[] = 'val_max_'.$cle;
157                        $tChOblig[] = 'pas_var_'.$cle;
158                }       
159        }
160        $tChOblig[] = 'prec_lc';
161       
162        return $tChOblig;
163}
164
165function formulaires_lechapt_calmon_charger_dist() { 
166        $valeurs = array(
167                'mes_saisies_materiaux' => mes_saisies_materiau(),
168                'tableau_caract' => mes_champs_sans_coeff_materiau(),
169                'typeMateriau' => 1,
170                'prec_lc' => 0.001,
171                'L' => 1.863,
172                'M' => 2,
173                'N' => 5.33,
174                'Q' => 3,
175                'D' => 1.2,
176                'J' => 0.634482025,
177                'Lg'=> 100
178        );
179 
180        $mes_champs = mes_champs_sans_coeff_materiau();
181        foreach($mes_champs as $cle=>$valeur){
182                if($cle == 'Q'){
183                        $valeurs['choix_champs_'.$cle] = 'calcul_val_'.$cle;
184                }
185                else{
186                        $valeurs['choix_champs_'.$cle] = 'val_fixe_'.$cle;
187                }
188               
189                $valeurs['val_min_'.$cle] = 1;
190                $valeurs['val_max_'.$cle] = 2;
191                $valeurs['pas_var_'.$cle] = 0.1;
192        }
193       
194    return $valeurs;
195}
196
197function formulaires_lechapt_calmon_verifier_dist(){
198    $erreurs = array();
199    $datas = array();
200    $tChOblig= champs_obligatoires_lcalmon();
201    // Vérifier que les champs obligatoires sont bien là :
202    foreach($tChOblig as $obligatoire) {
203        if (!_request($obligatoire)) {
204                        $erreurs[$obligatoire] = _T('hydraulic:champ_obligatoire');
205        }
206        else {
207            $datas[$obligatoire] = _request($obligatoire);
208        }
209    }
210
211        // Gestion des valeurs négatives
212    foreach($datas as $champ=>$data) {
213        if ($data < 0) $erreurs[$champ] = _T('hydraulic:valeur_positive');
214    }
215   
216    if (count($erreurs)) {
217        $erreurs['message_erreur'] = _T('hydraulic:saisie_erreur');
218    }
219
220    return $erreurs;
221}
222
223function formulaires_lechapt_calmon_traiter_dist(){
224
225        include_spip('hyd_inc/cache');
226    include_spip('hyd_inc/log.class');
227    include_spip('hyd_inc/graph.class');
228       
229         /***************************************************************************
230    *                        Calcul de Lechapt et calmon
231    ****************************************************************************/
232    $echo = '';
233        $ValCal = '';
234        $result = array();
235        $choix_radio = array();
236        $tabLibelle = array();
237        $champs_materiau_coeff = mes_champs_coeff_materiau();
238        $champs_materiau_sans_coeff = mes_champs_sans_coeff_materiau();
239    $iPrec=(int)-log10(_request('prec_lc'));
240
241
242        foreach($champs_materiau_coeff as $champs){
243                ${$champs} = _request($champs);
244        }
245       
246        foreach($champs_materiau_sans_coeff as $cle=>$valeur){
247                $choix_radio[$cle] = _request('choix_champs_'.$cle);
248                $tabLibelle[$cle] = _T('hydraulic:param_'.$cle);
249        }
250
251        $min = 0;
252        $max = 0;
253        $pas = 1;
254        $i = 0;
255       
256               
257        foreach($choix_radio as $ind){
258                if(substr($ind, 0, 3) == 'cal'){
259                        $ValCal = id_decoupe($ind);
260                }
261               
262                else if(substr($ind, 0, 3) == 'var'){
263                        $min = _request('val_min_'.id_decoupe($ind));
264                        $max = _request('val_max_'.id_decoupe($ind));
265                        $pas = _request('pas_var_'.id_decoupe($ind));
266                        ${id_decoupe($ind)} = &$i;
267                }
268        }
269       
270        switch($ValCal){
271                case 'Q':
272                        if($L != 0 && $Lg != 0 && $M != 0){
273                                for($i = $min; $i <= $max; $i+= $pas){
274                                        $result[] = pow(((($J*pow($D, $N))/$L)*(1000/$Lg)), 1/$M);
275                                }
276                        }
277                        else{
278                                $result[] = 0;
279                        }
280                       
281                break;
282               
283                case 'D': 
284                        if($J != 0 && $N != 0){
285                                for($i = $min; $i <= $max; $i+= $pas){
286                                        $result[] = pow(((($L*pow($Q, $M))/$J)*($Lg/1000)), 1/$N);
287                                }
288                        }
289                        else{
290                                $result[] = 0;
291                        }
292                       
293                break;
294               
295                case 'J':
296                        if($D != 0){
297                                for($i = $min; $i <= $max; $i+= $pas){
298                                        $result[] = (($L*pow($Q, $M))/pow($D, $N))*($Lg/1000) ;
299                                }
300                        }
301                        else{
302                                $result[] = 0;
303                        }
304                       
305                break;
306               
307                case 'Lg':
308                        if($L*pow($Q,$M) != 0){
309                                for($i = $min; $i <= $max; $i+= $pas){
310                                        $result[] = (($J*pow($D, $N))/($L*pow($Q,$M)))*1000 ;
311                                }
312                        }
313                        else{
314                                $result[] = 0;
315                        }
316                       
317                break;
318        }
319
320        /***************************************************************************
321    *                   Affichage du tableau de données
322    ****************************************************************************/
323        $cptValVar = 1;
324        $i = 0;
325        $tabClass = array();
326       
327        foreach($tabLibelle as $cle=>$valeur){
328                if(substr(_request('choix_champs_'.$cle), 0, 3) == 'var'){
329                        $cptValVar++;
330                }
331        }
332       
333        foreach($tabLibelle as $cle=>$valeur){
334                if(substr(_request('choix_champs_'.$cle), 0, 3) == 'cal'){
335                        $tabClass['cal'] = $tabLibelle[$cle];
336                }
337                else if(substr(_request('choix_champs_'.$cle), 0, 3) == 'var'){
338                        $tabClass['var'] = $tabLibelle[$cle];
339                }
340                else if(substr(_request('choix_champs_'.$cle), 0, 3) == 'var' || $cptValVar == 1){
341                        $tabClass['var'] = $tabLibelle[$cle];
342                        $cptValVar--;
343                }
344                else if(substr(_request('choix_champs_'.$cle), 0, 3) == 'val'){
345                        $tabClass['val'.$i] = $tabLibelle[$cle];
346                        $i++;
347                }
348        }
349       
350        $echo.='<table class="spip">
351                        <thead>
352                                <tr class="row_first">';
353                               
354                                foreach($tabClass as $cle=>$valeur){
355                                        if(substr($cle, 0, 3) == 'val'){
356                                                $echo.= '<th scope="col" rowspan="2">'.$tabClass[$cle].'</th>';
357                                        }
358                                }
359
360        $echo.= '               <th scope="col" rowspan="2">'.$tabClass['var'].'</th>
361                                        <th scope="col" rowspan="2">'.$tabClass['cal'].'</th>
362                                </tr>   
363                        </thead>
364                        <tbody>';
365       
366        $i=0;
367        $tabAbs = array();
368       
369        if($cptValVar != 0){
370                $ValeurVarie = $min;
371        }
372        else{
373                $ValeurVarie = _request(substr($tabClass['var'],0,1));
374        }
375       
376        foreach($result as $valCal){
377                $i++;
378                $echo.= '<tr class="';
379                $echo.=($i%2==0)?'row_even':'row_odd';
380                $echo.='">';
381               
382                                foreach($tabClass as $cle=>$valeur){
383                                        if(substr($cle, 0, 3) == 'val'){
384                                                $echo.= '<td>';
385                                                $decoup = explode(':', $tabClass[$cle], 2);
386                                                $echo.= _request($decoup[0]).'</td>';
387                                        }
388                                }       
389                               
390                $echo.= '<td>'.$ValeurVarie.'</td><td>'.format_nombre($valCal, $iPrec).'</td>';         
391                $echo.= '</tr>';               
392                $tabAbs[] = $ValeurVarie;
393                $ValeurVarie+= $pas;
394        }       
395       
396    $echo.=     '</tbody>
397        </table>';
398
399
400
401    /***************************************************************************
402    *                        Affichage du graphique
403    ****************************************************************************/
404 
405        // Si notre tableau de résultats contient plus d'une ligne alors on l'affiche.
406        if(count($result) > 1){
407                $oGraph = new cGraph();
408                // Ligne de Lechapt et calmon
409                if(isset($result)) {
410                        $oGraph->AddSerie(
411                                'ligne_lechapt_calmon',
412                                $tabAbs,
413                                $result,
414                                '#00a3cd',
415                                'lineWidth:3, showMarker:true, markerOptions:{style:\'filledCircle\', size:8}');
416                }
417                // Récupération du graphique
418                $echo .= $oGraph->GetGraph('ligne_lechapt_calmon',400,600);
419        }
420        $res['message_ok'] = $echo;
421    return $res;
422}
423?>
Note: See TracBrowser for help on using the repository browser.