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

Last change on this file since 60709 was 60709, checked in by m.dulondel@…, 8 years ago
  • Correction du bug sur l'affichage du graphique lorqu'on choisit une section parabolique (formulaire courbe_remous).
  • Correction des scripts javascript qui ne fonctionnaient pas sur certains navigateurs.
  • Rajout du formulaire calcul_ouvrages (Structure html + traitement).
File size: 11.9 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(($obligatoire == 'L' || $obligatoire == 'M' || $obligatoire == 'N') && _request($obligatoire) == 0){
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    global $spip_lang;
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        $tChOblig = champs_obligatoires_lcalmon();
243    $iPrec=(int)-log10(_request('prec_lc'));
244
245    //On récupère les données
246    foreach($tChOblig as $champ) {
247        if (_request($champ)){
248            $datas[$champ] = _request($champ);
249        }
250
251        $datas[$champ] = str_replace(',','.',$datas[$champ]); // Bug #574
252    }
253
254    // On ajoute la langue en cours pour différencier le fichier de cache par langue
255    $datas['sLang'] = $spip_lang;
256
257    // Nom du fichier en cache pour calcul déjà fait
258    $CacheFileName=md5(serialize($datas));
259
260        foreach($champs_materiau_coeff as $champs){
261                ${$champs} = _request($champs);
262        }
263       
264        foreach($champs_materiau_sans_coeff as $cle=>$valeur){
265                $choix_radio[$cle] = _request('choix_champs_'.$cle);
266                $tabLibelle[$cle] = _T('hydraulic:param_'.$cle);
267        }
268
269        $min = 0;
270        $max = 0;
271        $pas = 1;
272        $i = 0;
273               
274        foreach($choix_radio as $ind){
275                if(substr($ind, 0, 3) == 'cal'){
276                        $ValCal = id_decoupe($ind);
277                }
278                else if(substr($ind, 0, 3) == 'var'){
279                        $min = _request('val_min_'.id_decoupe($ind));
280                        $max = _request('val_max_'.id_decoupe($ind));
281                        $pas = _request('pas_var_'.id_decoupe($ind));
282                        ${id_decoupe($ind)} = &$i;
283                }
284        }
285        $max += $pas/2;
286       
287        $bNoCache = false; // true pour débugage
288    if(!$bNoCache && is_file(HYD_CACHE_DIRECTORY.$CacheFileName)) {
289        // On récupère toutes les données dans un cache déjà créé
290        $result = ReadCacheFile($CacheFileName);
291    }
292    else {
293                switch($ValCal){
294                        case 'Q':
295                                if($Lg == 0 && _request('choix_champs_Lg') != 'varier_val_Lg'){
296                                        $result[] = 0;
297                                }
298                                else{                   
299                                        for($i = $min; $i <= $max; $i+= $pas){
300                                                if($i == 0 && _request('choix_champs_Lg') == 'varier_val_Lg'){
301                                                        $result[] = INF;
302                                                }
303                                                else{
304                                                        $result[] = pow(((($J*pow($D, $N))/$L)*(1000/$Lg)), 1/$M);
305                                                }
306                                        }
307                                }
308                        break;
309                       
310                        case 'D': 
311                                if($J == 0 && _request('choix_champs_J') != 'varier_val_J'){
312                                        $result[] = 0;
313                                }
314                                else{
315                                        for($i = $min; $i <= $max; $i+= $pas){
316                                                if($i == 0 && _request('choix_champs_J') == 'varier_val_J'){
317                                                        $result[] = INF;
318                                                }
319                                                else{
320                                                        $result[] = pow(((($L*pow($Q, $M))/$J)*($Lg/1000)), 1/$N);
321                                                }
322                                        }
323                                }
324                        break;
325                       
326                        case 'J':
327                                if($D == 0 && _request('choix_champs_D') != 'varier_val_D'){
328                                        $result[] = 0;
329                                }
330                                else{
331                                        for($i = $min; $i <= $max; $i+= $pas){
332                                                if($i == 0 && _request('choix_champs_D') == 'varier_val_D'){
333                                                        $result[] = INF;
334                                                }
335                                                else{
336                                                        $result[] = (($L*pow($Q, $M))/pow($D, $N))*($Lg/1000) ;
337                                                }
338                                        }
339                                }
340                        break;
341                       
342                        case 'Lg':
343                                if($Q == 0 && _request('choix_champs_Q') != 'varier_val_Q'){
344                                        $result[] = 0;
345                                }
346                                else{
347                                        for($i = $min; $i <= $max; $i+= $pas){
348                                                if($i == 0 && _request('choix_champs_Q') == 'varier_val_Q'){
349                                                        $result[] = INF;
350                                                }
351                                                else{
352                                                        $result[] = (($J*pow($D, $N))/($L*pow($Q,$M)))*1000 ;
353                                                }
354                                        }
355                                }
356
357                        break;
358                }
359               
360                //Enregistrement des données dans fichier cache
361        WriteCacheFile($CacheFileName,$result);
362        }
363        /***************************************************************************
364    *                   Affichage du tableau de données
365    ****************************************************************************/
366        $cptValVar = 1;
367        $i = 0;
368        $tabClass = array();
369       
370        foreach($tabLibelle as $cle=>$valeur){
371                if(substr(_request('choix_champs_'.$cle), 0, 3) == 'var'){
372                        $cptValVar++;
373                }
374        }
375       
376        foreach($tabLibelle as $cle=>$valeur){
377                if(substr(_request('choix_champs_'.$cle), 0, 3) == 'cal'){
378                        $tabClass['cal'] = $tabLibelle[$cle];
379                }
380                else if(substr(_request('choix_champs_'.$cle), 0, 3) == 'var'){
381                        $tabClass['var'] = $tabLibelle[$cle];
382                }
383                else if(substr(_request('choix_champs_'.$cle), 0, 3) == 'var' || $cptValVar == 1){
384                        $tabClass['var'] = $tabLibelle[$cle];
385                        $cptValVar--;
386                }
387                else if(substr(_request('choix_champs_'.$cle), 0, 3) == 'val'){
388                        $tabClass['val'.$i] = $tabLibelle[$cle];
389                        $i++;
390                }
391        }
392       
393        $echo.='<table class="spip">
394                        <thead>
395                                <tr class="row_first">';
396                               
397                                foreach($tabClass as $cle=>$valeur){
398                                        if(substr($cle, 0, 3) == 'val'){
399                                                $echo.= '<th scope="col" rowspan="2">'.$tabClass[$cle].'</th>';
400                                        }
401                                }
402
403        $echo.= '               <th style="text-align:center;" scope="col" rowspan="2">'._T('hydraulic:abscisse').'<br/>'.$tabClass['var'].'</th>
404                                        <th style="text-align:center;" scope="col" rowspan="2">'._T('hydraulic:ordonnee').'<br/>'.$tabClass['cal'].'</th>
405                                </tr>   
406                        </thead>
407                        <tbody>';
408       
409        $i=0;
410        $tabAbs = array();
411       
412        if($cptValVar != 0){
413                $ValeurVarie = $min;
414        }
415        else{
416                $ValeurVarie = _request(substr($tabClass['var'],0,1));
417        }
418       
419        foreach($result as $indice){
420                $i++;
421                $echo.= '<tr class="align_right ';
422                $echo.=($i%2==0)?'row_even':'row_odd';
423                $echo.='">';
424               
425                                foreach($tabClass as $cle=>$valeur){
426                                        if(substr($cle, 0, 3) == 'val'){
427                                                $echo.= '<td>';
428                                                $decoup = explode(':', $tabClass[$cle], 2);
429                                                $echo.= _request($decoup[0]).'</td>';
430                                        }
431                                }       
432                               
433                $echo.= '<td>'.$ValeurVarie.'</td><td>'.format_nombre($indice, $iPrec).'</td>';         
434                $echo.= '</tr>';       
435                $tabAbs[] = $ValeurVarie;
436                $ValeurVarie+= $pas;
437        }       
438       
439    $echo.=     '</tbody>
440        </table>';
441
442        if(is_infinite($result[0])){
443                unset($result[0]);
444                $result = array_values($result);
445                unset($tabAbs[0]);
446                $tabAbs = array_values($tabAbs);
447        }
448
449    /***************************************************************************
450    *                        Affichage du graphique
451    ****************************************************************************/
452
453        // Si notre tableau de résultats contient plus d'une ligne alors on l'affiche.
454        if(count($result) > 1){
455                $oGraph = new cGraph();
456                // Ligne de Lechapt et calmon
457                if(isset($result)) {
458                        $oGraph->AddSerie(
459                                _T('hydraulic:param_'.$ValCal),
460                                $tabAbs,
461                                $result,
462                                '#00a3cd',
463                                'lineWidth:3, showMarker:true, markerOptions:{style:\'filledCircle\', size:8}');
464                }
465                // Récupération du graphique
466                $echo .= $oGraph->GetGraph('ligne_lechapt_calmon',400,600);
467                $echo .= $tabClass['var'];
468        }
469        $res['message_ok'] = $echo;
470    return $res;
471}
472?>
Note: See TracBrowser for help on using the repository browser.