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

Last change on this file since 59407 was 59407, checked in by m.dulondel@…, 8 years ago

Ajout des codes ACSII pour les symboles non reconnus ( fichier langue Anglais).
Gestion des boutons radio en javascript pour le formulaire calcul_normal_critique.html.

File size: 10.5 KB
Line 
1<?php
2/*
3 * formulaires/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) == NULL) {
204                        $erreurs[$obligatoire] = _T('hydraulic:champ_obligatoire');
205        }
206        else if(_request($obligatoire) == 0 && id_decoupe($obligatoire) != 'Q' && id_decoupe($obligatoire) != 'J'){
207                        $erreurs[$obligatoire] = _T('hydraulic:valeur_positive');
208                }
209        else {
210            $datas[$obligatoire] = _request($obligatoire);
211        }
212    }
213
214        // Gestion des valeurs négatives
215    foreach($datas as $champ=>$data) {
216        if ($data < 0) $erreurs[$champ] = _T('hydraulic:valeur_positive_nulle');
217    }
218   
219    if (count($erreurs)) {
220        $erreurs['message_erreur'] = _T('hydraulic:saisie_erreur');
221    }
222
223    return $erreurs;
224}
225
226function formulaires_lechapt_calmon_traiter_dist(){
227
228        include_spip('hyd_inc/cache');
229    include_spip('hyd_inc/log.class');
230    include_spip('hyd_inc/graph.class');
231       
232         /***************************************************************************
233    *                        Calcul de Lechapt et calmon
234    ****************************************************************************/
235    $echo = '';
236        $ValCal = '';
237        $result = array();
238        $choix_radio = array();
239        $tabLibelle = array();
240        $champs_materiau_coeff = mes_champs_coeff_materiau();
241        $champs_materiau_sans_coeff = mes_champs_sans_coeff_materiau();
242    $iPrec=(int)-log10(_request('prec_lc'));
243
244
245        foreach($champs_materiau_coeff as $champs){
246                ${$champs} = _request($champs);
247        }
248       
249        foreach($champs_materiau_sans_coeff as $cle=>$valeur){
250                $choix_radio[$cle] = _request('choix_champs_'.$cle);
251                $tabLibelle[$cle] = _T('hydraulic:param_'.$cle);
252        }
253
254        $min = 0;
255        $max = 0;
256        $pas = 1;
257        $i = 0;
258               
259        foreach($choix_radio as $ind){
260                if(substr($ind, 0, 3) == 'cal'){
261                        $ValCal = id_decoupe($ind);
262                }
263                else if(substr($ind, 0, 3) == 'var'){
264                        $min = _request('val_min_'.id_decoupe($ind));
265                        $max = _request('val_max_'.id_decoupe($ind));
266                        $pas = _request('pas_var_'.id_decoupe($ind));
267                        ${id_decoupe($ind)} = &$i;
268                }
269        }
270       
271        $max += $pas/2;
272       
273        switch($ValCal){
274                case 'Q':                       
275                        for($i = $min; $i <= $max; $i+= $pas){
276                                $result[] = pow(((($J*pow($D, $N))/$L)*(1000/$Lg)), 1/$M);
277                        }
278                break;
279               
280                case 'D': 
281                        if($J == 0 && _request('choix_champs_J') != 'varier_val_J'){
282                                $result[] = 0;
283                        }
284                        else{
285                                for($i = $min; $i <= $max; $i+= $pas){
286                                        if($i == 0 && _request('choix_champs_J') == 'varier_val_J'){
287                                                $result[] = INF;
288                                        }
289                                        else{
290                                                $result[] = pow(((($L*pow($Q, $M))/$J)*($Lg/1000)), 1/$N);
291                                        }
292                                }
293                        }
294               
295                break;
296               
297                case 'J':
298                        for($i = $min; $i <= $max; $i+= $pas){
299                                $result[] = (($L*pow($Q, $M))/pow($D, $N))*($Lg/1000) ;
300                        }
301                       
302                break;
303               
304                case 'Lg':
305                        if($Q == 0 && _request('choix_champs_Q') != 'varier_val_Q'){
306                                $result[] = 0;
307                        }
308                        else{
309                                for($i = $min; $i <= $max; $i+= $pas){
310                                        if($i == 0 && _request('choix_champs_Q') == 'varier_val_Q'){
311                                                $result[] = INF;
312                                        }
313                                        else{
314                                                $result[] = (($J*pow($D, $N))/($L*pow($Q,$M)))*1000 ;
315                                        }
316                                }
317                        }
318
319                break;
320        }
321
322        /***************************************************************************
323    *                   Affichage du tableau de données
324    ****************************************************************************/
325        $cptValVar = 1;
326        $i = 0;
327        $tabClass = array();
328       
329        foreach($tabLibelle as $cle=>$valeur){
330                if(substr(_request('choix_champs_'.$cle), 0, 3) == 'var'){
331                        $cptValVar++;
332                }
333        }
334       
335        foreach($tabLibelle as $cle=>$valeur){
336                if(substr(_request('choix_champs_'.$cle), 0, 3) == 'cal'){
337                        $tabClass['cal'] = $tabLibelle[$cle];
338                }
339                else if(substr(_request('choix_champs_'.$cle), 0, 3) == 'var'){
340                        $tabClass['var'] = $tabLibelle[$cle];
341                }
342                else if(substr(_request('choix_champs_'.$cle), 0, 3) == 'var' || $cptValVar == 1){
343                        $tabClass['var'] = $tabLibelle[$cle];
344                        $cptValVar--;
345                }
346                else if(substr(_request('choix_champs_'.$cle), 0, 3) == 'val'){
347                        $tabClass['val'.$i] = $tabLibelle[$cle];
348                        $i++;
349                }
350        }
351       
352        $echo.='<table class="spip">
353                        <thead>
354                                <tr class="row_first">';
355                               
356                                foreach($tabClass as $cle=>$valeur){
357                                        if(substr($cle, 0, 3) == 'val'){
358                                                $echo.= '<th scope="col" rowspan="2">'.$tabClass[$cle].'</th>';
359                                        }
360                                }
361
362        $echo.= '               <th style="text-align:center;" scope="col" rowspan="2">(Abscisse)<br/>'.$tabClass['var'].'</th>
363                                        <th style="text-align:center;" scope="col" rowspan="2">(Ordonnée)<br/>'.$tabClass['cal'].'</th>
364                                </tr>   
365                        </thead>
366                        <tbody>';
367       
368        $i=0;
369        $tabAbs = array();
370       
371        if($cptValVar != 0){
372                $ValeurVarie = $min;
373        }
374        else{
375                $ValeurVarie = _request(substr($tabClass['var'],0,1));
376        }
377       
378        foreach($result as $indice){
379                $i++;
380                $echo.= '<tr class="';
381                $echo.=($i%2==0)?'row_even':'row_odd';
382                $echo.='">';
383               
384                                foreach($tabClass as $cle=>$valeur){
385                                        if(substr($cle, 0, 3) == 'val'){
386                                                $echo.= '<td>';
387                                                $decoup = explode(':', $tabClass[$cle], 2);
388                                                $echo.= _request($decoup[0]).'</td>';
389                                        }
390                                }       
391                               
392                $echo.= '<td>'.$ValeurVarie.'</td><td>'.format_nombre($indice, $iPrec).'</td>';         
393                $echo.= '</tr>';       
394                $tabAbs[] = $ValeurVarie;
395                $ValeurVarie+= $pas;
396        }       
397       
398    $echo.=     '</tbody>
399        </table>';
400
401        if($min == 0 && ($ValCal == 'D' || $ValCal == 'Lg')){
402                unset($result[0]);
403                $result = array_values($result);
404               
405                unset($tabAbs[0]);
406                $tabAbs = array_values($tabAbs);
407        }
408
409    /***************************************************************************
410    *                        Affichage du graphique
411    ****************************************************************************/
412
413        // Si notre tableau de résultats contient plus d'une ligne alors on l'affiche.
414        if(count($result) > 1){
415                $oGraph = new cGraph();
416                // Ligne de Lechapt et calmon
417                if(isset($result)) {
418                        $oGraph->AddSerie(
419                                _T('hydraulic:param_'.$ValCal),
420                                $tabAbs,
421                                $result,
422                                '#00a3cd',
423                                'lineWidth:3, showMarker:true, markerOptions:{style:\'filledCircle\', size:8}');
424                }
425                // Récupération du graphique
426                $echo .= $oGraph->GetGraph('ligne_lechapt_calmon',400,600);
427        }
428        $res['message_ok'] = $echo;
429    return $res;
430}
431?>
Note: See TracBrowser for help on using the repository browser.