PageRenderTime 51ms CodeModel.GetById 21ms RepoModel.GetById 1ms app.codeStats 0ms

/_plugins_/hydraulic/trunk/formulaires/lechapt_calmon.php

https://bitbucket.org/pombredanne/spip-zone-treemap
PHP | 472 lines | 345 code | 59 blank | 68 comment | 91 complexity | 760290455106405dda5591d80bfc6a68 MD5 | raw file
  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. function mes_champs_coeff_materiau() {
  41. $mes_champs_coeff = array('L','M','N','Q','D','J','Lg');
  42. return $mes_champs_coeff;
  43. }
  44. function mes_champs_sans_coeff_materiau(){
  45. $mes_champs_sans_coeff = array(
  46. 'Q' => _T('hydraulic:param_Q'),
  47. 'D' => _T('hydraulic:param_D'),
  48. 'J' => _T('hydraulic:param_J'),
  49. 'Lg' => _T('hydraulic:param_Lg')
  50. );
  51. return $mes_champs_sans_coeff;
  52. }
  53. function id_decoupe($champs){
  54. $decoup = explode('_', $champs, 3);
  55. return $decoup[count($decoup)-1];
  56. }
  57. /* Tableau des données pour chaque type de tuyau. Ces valeurs sont associées
  58. * aux numéros des options du select (voir page lechapt_calmon.php)
  59. */
  60. function mes_saisies_materiau() {
  61. $type_materiaux = array(
  62. '1' => array(
  63. 'L' =>1.863,
  64. 'M' =>2,
  65. 'N' =>5.33
  66. ),
  67. '2' => array(
  68. 'L' =>1.601,
  69. 'M' =>1.975,
  70. 'N' =>5.25
  71. ),
  72. '3' => array(
  73. 'L' =>1.40,
  74. 'M' =>1.96,
  75. 'N' =>5.19
  76. ),
  77. '4' => array(
  78. 'L' =>1.16,
  79. 'M' =>1.93,
  80. 'N' =>5.11
  81. ),
  82. '5' => array(
  83. 'L' =>1.1,
  84. 'M' =>1.89,
  85. 'N' =>5.01
  86. ),
  87. '6' => array(
  88. 'L' =>1.049,
  89. 'M' =>1.86,
  90. 'N' =>4.93
  91. ),
  92. '7' => array(
  93. 'L' =>1.01,
  94. 'M' =>1.84,
  95. 'N' =>4.88
  96. ),
  97. '8' => array(
  98. 'L' =>0.916,
  99. 'M' =>1.78,
  100. 'N' =>4.78
  101. ),
  102. '9' => array(
  103. 'L' =>0.971,
  104. 'M' =>1.81,
  105. 'N' =>4.81
  106. ),
  107. );
  108. return $type_materiaux;
  109. }
  110. function champs_obligatoires_lcalmon(){
  111. /*
  112. * Ce tableau contient la liste de tous les champs du formulaire.
  113. * La suite de cette fonction se chargera de supprimer les valeurs non obligatoires.
  114. */
  115. $tChOblig = mes_champs_coeff_materiau();
  116. $tChUtil = mes_champs_sans_coeff_materiau();
  117. $choix_champs = array();
  118. foreach($tChUtil as $cle=>$valeur){
  119. $choix_champs[$cle] = _request('choix_champs_'.$cle);
  120. }
  121. foreach($choix_champs as $cle=>$valeur){
  122. // Si le choix du select est de calculer une valeur...
  123. if(substr($valeur, 0,3) != 'val'){
  124. foreach($tChOblig as $cle1=>$valeur1){
  125. if($cle == $valeur1){
  126. // ... alors on peut supprimer de notre tableau le champs calculé (il n'est pas obligatoire car grisé)
  127. unset($tChOblig[$cle1]);
  128. // Permet de tasser le tableau
  129. $tChOblig = array_values($tChOblig);
  130. }
  131. }
  132. }
  133. // Si le choix du select est de faire varier une valeur alors on ajoute les 3 champs nécessaires
  134. if(substr($valeur, 0, 3) == 'var'){
  135. $tChOblig[] = 'val_min_'.$cle;
  136. $tChOblig[] = 'val_max_'.$cle;
  137. $tChOblig[] = 'pas_var_'.$cle;
  138. }
  139. }
  140. $tChOblig[] = 'prec_lc';
  141. return $tChOblig;
  142. }
  143. function formulaires_lechapt_calmon_charger_dist() {
  144. $valeurs = array(
  145. 'mes_saisies_materiaux' => mes_saisies_materiau(),
  146. 'tableau_caract' => mes_champs_sans_coeff_materiau(),
  147. 'typeMateriau' => 1,
  148. 'prec_lc' => 0.001,
  149. 'L' => 1.863,
  150. 'M' => 2,
  151. 'N' => 5.33,
  152. 'Q' => 3,
  153. 'D' => 1.2,
  154. 'J' => 0.634482025,
  155. 'Lg'=> 100
  156. );
  157. $mes_champs = mes_champs_sans_coeff_materiau();
  158. foreach($mes_champs as $cle=>$valeur){
  159. if($cle == 'Q'){
  160. $valeurs['choix_champs_'.$cle] = 'calcul_val_'.$cle;
  161. }
  162. else{
  163. $valeurs['choix_champs_'.$cle] = 'val_fixe_'.$cle;
  164. }
  165. $valeurs['val_min_'.$cle] = 1;
  166. $valeurs['val_max_'.$cle] = 2;
  167. $valeurs['pas_var_'.$cle] = 0.1;
  168. }
  169. return $valeurs;
  170. }
  171. function formulaires_lechapt_calmon_verifier_dist(){
  172. $erreurs = array();
  173. $datas = array();
  174. $tChOblig= champs_obligatoires_lcalmon();
  175. // Vérifier que les champs obligatoires sont bien là :
  176. foreach($tChOblig as $obligatoire) {
  177. if (_request($obligatoire) == NULL) {
  178. $erreurs[$obligatoire] = _T('hydraulic:champ_obligatoire');
  179. }
  180. else if(($obligatoire == 'L' || $obligatoire == 'M' || $obligatoire == 'N') && _request($obligatoire) == 0){
  181. $erreurs[$obligatoire] = _T('hydraulic:valeur_positive');
  182. }
  183. else {
  184. $datas[$obligatoire] = _request($obligatoire);
  185. }
  186. }
  187. // Gestion des valeurs négatives
  188. foreach($datas as $champ=>$data) {
  189. if ($data < 0) $erreurs[$champ] = _T('hydraulic:valeur_positive_nulle');
  190. }
  191. if (count($erreurs)) {
  192. $erreurs['message_erreur'] = _T('hydraulic:saisie_erreur');
  193. }
  194. return $erreurs;
  195. }
  196. function formulaires_lechapt_calmon_traiter_dist(){
  197. global $spip_lang;
  198. include_spip('hyd_inc/cache');
  199. include_spip('hyd_inc/log.class');
  200. include_spip('hyd_inc/graph.class');
  201. /***************************************************************************
  202. * Calcul de Lechapt et calmon
  203. ****************************************************************************/
  204. $echo = '';
  205. $ValCal = '';
  206. $result = array();
  207. $choix_radio = array();
  208. $tabLibelle = array();
  209. $champs_materiau_coeff = mes_champs_coeff_materiau();
  210. $champs_materiau_sans_coeff = mes_champs_sans_coeff_materiau();
  211. $tChOblig = champs_obligatoires_lcalmon();
  212. $iPrec=(int)-log10(_request('prec_lc'));
  213. //On récupère les données
  214. foreach($tChOblig as $champ) {
  215. if (_request($champ)){
  216. $datas[$champ] = _request($champ);
  217. }
  218. $datas[$champ] = str_replace(',','.',$datas[$champ]); // Bug #574
  219. }
  220. // On ajoute la langue en cours pour différencier le fichier de cache par langue
  221. $datas['sLang'] = $spip_lang;
  222. // Nom du fichier en cache pour calcul déjà fait
  223. $CacheFileName=md5(serialize($datas));
  224. foreach($champs_materiau_coeff as $champs){
  225. ${$champs} = _request($champs);
  226. }
  227. foreach($champs_materiau_sans_coeff as $cle=>$valeur){
  228. $choix_radio[$cle] = _request('choix_champs_'.$cle);
  229. $tabLibelle[$cle] = _T('hydraulic:param_'.$cle);
  230. }
  231. $min = 0;
  232. $max = 0;
  233. $pas = 1;
  234. $i = 0;
  235. foreach($choix_radio as $ind){
  236. if(substr($ind, 0, 3) == 'cal'){
  237. $ValCal = id_decoupe($ind);
  238. }
  239. else if(substr($ind, 0, 3) == 'var'){
  240. $min = _request('val_min_'.id_decoupe($ind));
  241. $max = _request('val_max_'.id_decoupe($ind));
  242. $pas = _request('pas_var_'.id_decoupe($ind));
  243. ${id_decoupe($ind)} = &$i;
  244. }
  245. }
  246. $max += $pas/2;
  247. $bNoCache = false; // true pour débugage
  248. if(!$bNoCache && is_file(HYD_CACHE_DIRECTORY.$CacheFileName)) {
  249. // On récupère toutes les données dans un cache déjà créé
  250. $result = ReadCacheFile($CacheFileName);
  251. }
  252. else {
  253. switch($ValCal){
  254. case 'Q':
  255. if($Lg == 0 && _request('choix_champs_Lg') != 'varier_val_Lg'){
  256. $result[] = 0;
  257. }
  258. else{
  259. for($i = $min; $i <= $max; $i+= $pas){
  260. if($i == 0 && _request('choix_champs_Lg') == 'varier_val_Lg'){
  261. $result[] = INF;
  262. }
  263. else{
  264. $result[] = pow(((($J*pow($D, $N))/$L)*(1000/$Lg)), 1/$M);
  265. }
  266. }
  267. }
  268. break;
  269. case 'D':
  270. if($J == 0 && _request('choix_champs_J') != 'varier_val_J'){
  271. $result[] = 0;
  272. }
  273. else{
  274. for($i = $min; $i <= $max; $i+= $pas){
  275. if($i == 0 && _request('choix_champs_J') == 'varier_val_J'){
  276. $result[] = INF;
  277. }
  278. else{
  279. $result[] = pow(((($L*pow($Q, $M))/$J)*($Lg/1000)), 1/$N);
  280. }
  281. }
  282. }
  283. break;
  284. case 'J':
  285. if($D == 0 && _request('choix_champs_D') != 'varier_val_D'){
  286. $result[] = 0;
  287. }
  288. else{
  289. for($i = $min; $i <= $max; $i+= $pas){
  290. if($i == 0 && _request('choix_champs_D') == 'varier_val_D'){
  291. $result[] = INF;
  292. }
  293. else{
  294. $result[] = (($L*pow($Q, $M))/pow($D, $N))*($Lg/1000) ;
  295. }
  296. }
  297. }
  298. break;
  299. case 'Lg':
  300. if($Q == 0 && _request('choix_champs_Q') != 'varier_val_Q'){
  301. $result[] = 0;
  302. }
  303. else{
  304. for($i = $min; $i <= $max; $i+= $pas){
  305. if($i == 0 && _request('choix_champs_Q') == 'varier_val_Q'){
  306. $result[] = INF;
  307. }
  308. else{
  309. $result[] = (($J*pow($D, $N))/($L*pow($Q,$M)))*1000 ;
  310. }
  311. }
  312. }
  313. break;
  314. }
  315. //Enregistrement des données dans fichier cache
  316. WriteCacheFile($CacheFileName,$result);
  317. }
  318. /***************************************************************************
  319. * Affichage du tableau de données
  320. ****************************************************************************/
  321. $cptValVar = 1;
  322. $i = 0;
  323. $tabClass = array();
  324. foreach($tabLibelle as $cle=>$valeur){
  325. if(substr(_request('choix_champs_'.$cle), 0, 3) == 'var'){
  326. $cptValVar++;
  327. }
  328. }
  329. foreach($tabLibelle as $cle=>$valeur){
  330. if(substr(_request('choix_champs_'.$cle), 0, 3) == 'cal'){
  331. $tabClass['cal'] = $tabLibelle[$cle];
  332. }
  333. else if(substr(_request('choix_champs_'.$cle), 0, 3) == 'var'){
  334. $tabClass['var'] = $tabLibelle[$cle];
  335. }
  336. else if(substr(_request('choix_champs_'.$cle), 0, 3) == 'var' || $cptValVar == 1){
  337. $tabClass['var'] = $tabLibelle[$cle];
  338. $cptValVar--;
  339. }
  340. else if(substr(_request('choix_champs_'.$cle), 0, 3) == 'val'){
  341. $tabClass['val'.$i] = $tabLibelle[$cle];
  342. $i++;
  343. }
  344. }
  345. $echo.='<table class="spip">
  346. <thead>
  347. <tr class="row_first">';
  348. foreach($tabClass as $cle=>$valeur){
  349. if(substr($cle, 0, 3) == 'val'){
  350. $echo.= '<th scope="col" rowspan="2">'.$tabClass[$cle].'</th>';
  351. }
  352. }
  353. $echo.= ' <th style="text-align:center;" scope="col" rowspan="2">'._T('hydraulic:abscisse').'<br/>'.$tabClass['var'].'</th>
  354. <th style="text-align:center;" scope="col" rowspan="2">'._T('hydraulic:ordonnee').'<br/>'.$tabClass['cal'].'</th>
  355. </tr>
  356. </thead>
  357. <tbody>';
  358. $i=0;
  359. $tabAbs = array();
  360. if($cptValVar != 0){
  361. $ValeurVarie = $min;
  362. }
  363. else{
  364. $ValeurVarie = _request(substr($tabClass['var'],0,1));
  365. }
  366. foreach($result as $indice){
  367. $i++;
  368. $echo.= '<tr class="align_right ';
  369. $echo.=($i%2==0)?'row_even':'row_odd';
  370. $echo.='">';
  371. foreach($tabClass as $cle=>$valeur){
  372. if(substr($cle, 0, 3) == 'val'){
  373. $echo.= '<td>';
  374. $decoup = explode(':', $tabClass[$cle], 2);
  375. $echo.= _request($decoup[0]).'</td>';
  376. }
  377. }
  378. $echo.= '<td>'.$ValeurVarie.'</td><td>'.format_nombre($indice, $iPrec).'</td>';
  379. $echo.= '</tr>';
  380. $tabAbs[] = $ValeurVarie;
  381. $ValeurVarie+= $pas;
  382. }
  383. $echo.= '</tbody>
  384. </table>';
  385. if(is_infinite($result[0])){
  386. unset($result[0]);
  387. $result = array_values($result);
  388. unset($tabAbs[0]);
  389. $tabAbs = array_values($tabAbs);
  390. }
  391. /***************************************************************************
  392. * Affichage du graphique
  393. ****************************************************************************/
  394. // Si notre tableau de résultats contient plus d'une ligne alors on l'affiche.
  395. if(count($result) > 1){
  396. $oGraph = new cGraph();
  397. // Ligne de Lechapt et calmon
  398. if(isset($result)) {
  399. $oGraph->AddSerie(
  400. _T('hydraulic:param_'.$ValCal),
  401. $tabAbs,
  402. $result,
  403. '#00a3cd',
  404. 'lineWidth:3, showMarker:true, markerOptions:{style:\'filledCircle\', size:8}');
  405. }
  406. // Récupération du graphique
  407. $echo .= $oGraph->GetGraph('ligne_lechapt_calmon',400,600);
  408. $echo .= $tabClass['var'];
  409. }
  410. $res['message_ok'] = $echo;
  411. return $res;
  412. }
  413. ?>