Changeset 95765 in spip-zone
- Timestamp:
- Mar 4, 2016, 4:18:52 PM (5 years ago)
- Location:
- _plugins_/hydraulic/trunk
- Files:
-
- 10 added
- 2 deleted
- 21 edited
Legend:
- Unmodified
- Added
- Removed
-
_plugins_/hydraulic/trunk/formulaires/calcul_normale_critique.html
r60821 r95765 1 1 [<div class='hyd_formulaire_erreur '><span>(#ENV*{message_erreur})</span></div>] 2 2 <script language="javascript" type="text/javascript" src="#CHEMIN{js/hyd_fonctions.js}"></script> 3 <script language="javascript" type="text/javascript" src="#CHEMIN{js/jquery.svg.js}"></script> 4 <script language="javascript" type="text/javascript" src="#CHEMIN{js/jquery.drawinglibrary.js}"></script> 5 3 6 4 <script> 7 function elementsParClasse(classe, tagName){ 8 var divs = document.getElementsByTagName(tagName); 9 var resultats = new Array(); 10 for(var i=0; i<divs.length; i++){ 11 if(divs[i].className == classe){ 12 resultats.push(divs[i]); 5 function gestion_radios_extra(nom,valeur){ 6 // Gestion de l'affichage du choix du calcul à effectuer (affichage seulement si une valeur varie) 7 var ttr = ['tr_val_a_cal_fs','tr_val_a_cal']; 8 var bDisplay = 'none'; 9 for(var cle in glob) { 10 if(glob[cle]=='var') { 11 bDisplay = 'table-row'; 12 break; 13 13 } 14 14 } 15 return resultats; 16 } 17 18 var globSelectSection = 'FT'; 19 20 function setVarGlob(){ 21 globSelectSection = getSelectValue('choix_section'); 22 } 23 24 function resetAffichageChamps(nom){ 25 setVarGlob(); 26 if(nom){ 27 var cacher = elementsParClasse('champs_var_'+nom, 'tr'); 28 for(var i in cacher){ 29 cacher[i].style.display='none'; 30 } 31 } 32 else{ 33 var tab = new Array(); 34 <BOUCLE_remplissageTab1(POUR){tableau #ENV{mes_saisies}}> 35 #SET{field1, #CLE} 36 <BOUCLE_remplissageTab2(POUR){tableau (#VALEUR|table_valeur{1})}> 37 <BOUCLE_afficheSiSection(CONDITION){si #GET{field1}|substr{0,1}|== {'F'}}> 38 tab.push('#GET{field1}_[(#CLE)]'); 39 </BOUCLE_afficheSiSection> 40 </BOUCLE_remplissageTab2> 41 </BOUCLE_remplissageTab1> 42 43 for(var i in tab){ 44 if(document.getElementById('varier_val_'+tab[i]).checked){ 45 document.getElementById('val_a_cal_field_nc').style.display='none'; 46 document.getElementById('val_a_cal_nc').style.display='none'; 47 } 48 49 document.getElementById('val_fixe_'+tab[i]).checked=true; 50 document.getElementById('caract_'+tab[i]).disabled=false; 51 var cacher = elementsParClasse('champs_var_'+tab[i], 'tr'); 52 for(var i in cacher){ 53 cacher[i].style.display='none'; 54 } 55 } 56 57 } 58 } 59 60 //Permet d'afficher ou cacher les champs correspondant à une section. 61 function afficher_cacher() { 62 resetAffichageChamps(); 63 var section = getSelectValue('choix_section'); 64 var f = document.getElementById("form_normale_critique"); 65 if(f) { 66 var champs = f.getElementsByTagName("tr"); 67 for(var i=0, n=champs.length; i<n; i++) { 68 if((champs[i].getAttribute("id") != null) &&((champs[i].getAttribute("id")).substr(0,2) == section)){ 69 document.getElementById((champs[i].getAttribute("id"))).style.display='table-row'; 70 } 71 else if((champs[i].getAttribute("id") != null) &&((champs[i].getAttribute("id")).substr(0,1) == 'F')) { 72 document.getElementById((champs[i].getAttribute("id"))).style.display='none'; 73 } 74 } 75 } 76 } 77 78 function gestion_radios(nom, valeur){ 79 setVarGlob(); 80 var tabPartiel = new Array(); 81 <BOUCLE_remplissageTabPartiel1(POUR){tableau #ENV{mes_saisies}}> 82 #SET{field2, #CLE} 83 #SET{test, #VALEUR|table_valeur{1}} 84 85 <BOUCLE_conditionSection(CONDITION){si #CLE|substr{0,1}|== {'F'}}> 86 if(globSelectSection == '#CLE'){ 87 88 <BOUCLE_remplissageTabPartiel2(POUR){tableau #GET{test}}> 89 tabPartiel.push('#GET{field2}_[(#CLE)]'); 90 </BOUCLE_remplissageTabPartiel2> 91 } 92 </BOUCLE_conditionSection> 93 <BOUCLE_remplissageTabPartiel3(POUR){tableau (#VALEUR|table_valeur{1})}> 94 tabPartiel.push('#GET{field2}_[(#CLE)]'); 95 </BOUCLE_remplissageTabPartiel3> 96 <//B_conditionSection> 97 </BOUCLE_remplissageTabPartiel1> 98 99 for(var i in tabPartiel){ 100 if(tabPartiel[i] == nom){ 101 delete(tabPartiel[i]); 102 } 103 } 104 105 if(valeur.substr(0,3) == 'var'){ 106 for(var cle in tabPartiel){ 107 if(document.getElementById('varier_val_'+tabPartiel[cle]).checked){ 108 document.getElementById('val_fixe_'+tabPartiel[cle]).checked=true; 109 document.getElementById('caract_'+tabPartiel[cle]).disabled=false; 110 document.getElementById('caract_'+nom).disabled=true; 111 resetAffichageChamps(tabPartiel[cle]); 112 } 113 } 114 document.getElementById('val_a_cal_field_nc').style.display='table-row'; 115 document.getElementById('val_a_cal_nc').style.display='table-row'; 116 document.getElementById('caract_'+nom).disabled=true; 117 var afficher = elementsParClasse('champs_var_'+nom, 'tr'); 118 for(var i in afficher){ 119 afficher[i].style.display='table-row'; 120 } 121 } 122 123 if(valeur.substr(0,3) == 'val'){ 124 var CptValVar = 0; 125 for(var cle in tabPartiel){ 126 if(document.getElementById('varier_val_'+tabPartiel[cle]).checked){ 127 CptValVar++; 128 } 129 } 130 if(CptValVar == 0){ 131 document.getElementById('val_a_cal_field_nc').style.display='none'; 132 document.getElementById('val_a_cal_nc').style.display='none'; 133 } 134 135 document.getElementById('caract_'+nom).disabled=false; 136 resetAffichageChamps(nom); 137 } 138 15 for(var i in ttr) { 16 document.getElementById(ttr[i]).style.display=bDisplay; 17 } 139 18 } 140 19 </script> 20 141 21 <form method="post" action="#ENV{action}" id="form_normale_critique"> 142 #ACTION_FORMULAIRE{#ENV{action}} 143 <table class="hyd_formulaire"> 144 <tbody> 145 <tr id="type_section_field_nc"> 146 <td colspan="4"><div class="hyd_formulaire_chapitre"><:hydraulic:type_section:></div></td> 147 </tr> 22 #ACTION_FORMULAIRE{#ENV{action}} 23 <table class="hyd_formulaire"> 24 <tbody> 148 25 149 <tr id="type_section_nc"> 150 <td align="right" width="30%"> 151 <:hydraulic:choix_section:> : 152 </td> 153 154 <td colspan="3" width="70%"> 155 <select name="ncTypeSection" id="choix_section" onChange="afficher_cacher();"> 156 <BOUCLE_selectOptions(POUR){tableau #ENV{mes_saisies}}> 157 #SET{test, #VALEUR|table_valeur{0}|decoupeIdSection} 158 <BOUCLE_choixSection(CONDITION){si #CLE|substr{0,1}|== {'F'}}> 159 <option value="#CLE" [(#ENV{ncTypeSection}|=={#CLE}|?{'selected',''})]>#GET{test}</option> 160 </BOUCLE_choixSection> 161 </BOUCLE_selectOptions> 162 </select> 163 164 [<div class='hyd_erreur'>(#ENV**{erreurs}|table_valeur{[(#VALEUR|table_valeur{0})]})</div>] 165 </td> 166 </tr> 26 <!-- On génère les champs du formulaire en suivant le tableau saisies --> 27 <INCLURE{fond=hyd_inc/formulaire_champs,env}> 167 28 168 <BOUCLE_fieldChamps(POUR){tableau #ENV{mes_saisies}}> 169 #SET{id_fieldset, #CLE} 170 171 <tr id="#GET{id_fieldset}_field" style="display:[(#CLE|match{^([(#ENV{ncTypeSection})]|Cr)$}|?{'table-row','none'})];"> 172 <td colspan="4"><div class="hyd_formulaire_chapitre">[(#VALEUR|table_valeur{0}|traduction_hydraulic)]</div></td> 173 </tr> 174 175 <BOUCLE_affichageParamCal(CONDITION){si #GET{id_fieldset}|!== {'Cr'}}> 176 <tr id="#GET{id_fieldset}_optionCal_nc" style="display:[(#CLE|match{^([(#ENV{ncTypeSection})]|Cr)$}|?{'table-row','none'})];"> 177 <td colspan="2"></td> 178 <td align="center"><:hydraulic:varier_val:></td> 179 <td align="center"><:hydraulic:fixer_val:></td> 180 </tr> 181 </BOUCLE_affichageParamCal> 29 <tr> 30 <td colspan="4" class="hyd_bouton_submit"> 31 <input type="submit" value="<:hydraulic:calculer:>"> 32 </td> 33 </tr> 182 34 183 184 <BOUCLE_champsLib(POUR){tableau (#VALEUR|table_valeur{1})}>185 #SET{clefield, #GET{id_fieldset}|concat{_, #CLE}}186 187 <tr id="#GET{clefield}" style="display:[(#GET{id_fieldset}|match{^([(#ENV{ncTypeSection})]|Cr)$}|?{'table-row','none'})];">188 <td align="right">189 [(#VALEUR|table_valeur{0}|traduction_hydraulic)] :190 </td>191 192 <td>193 <input id="caract_#GET{clefield}" type="text" value="[(#ENV{#GET{clefield}})]" maxlength="30" name="#GET{clefield}" [(#ENV{choix_champs_#GET{clefield}}|=={varier_val_#GET{clefield}}|?{'disabled="true"',''})]/>194 [<div class='hyd_erreur'>(#ENV**{erreurs}|table_valeur{#GET{clefield}})</div>]195 </td>196 197 <BOUCLE_val_var_existe(CONDITION){si #ENV{choix_champs_#GET{clefield}}|== {varier_val_#GET{clefield}}}>198 #SET{val_var, #CLE}199 </BOUCLE_val_var_existe>200 201 <td align="center">202 <input type="radio" id="varier_val_#GET{clefield}" name="choix_champs_#GET{clefield}" value="varier_val_#GET{clefield}" onclick="gestion_radios('#GET{clefield}', 'varier_val_#GET{clefield}')" [(#ENV{choix_champs_#GET{clefield}}|=={varier_val_#GET{clefield}}|?{'checked',''})]/>203 </td>204 205 <td align="center">206 <input type="radio" id="val_fixe_#GET{clefield}" name="choix_champs_#GET{clefield}" value="val_fixe_#GET{clefield}" onclick="gestion_radios('#GET{clefield}', 'val_fixe_#GET{clefield}')" [(#ENV{choix_champs_#GET{clefield}}|=={val_fixe_#GET{clefield}}|?{'checked',''})]/>207 </td>208 </tr>209 210 <tr class="champs_var_#GET{clefield}" style="display:[(#ENV{choix_champs_#GET{clefield}}|=={varier_val_#GET{clefield}}|?{'table-row','none'})];">211 <td colspan="2" align="right"><:hydraulic:val_min:> : </td>212 <td colspan="2">213 <input name="val_min_#GET{clefield}" type="text" value="[(#ENV{val_min_#GET{clefield}})]"/>214 [<div class='hyd_erreur'>(#ENV**{erreurs}|table_valeur{val_min_#GET{clefield}})</div>]215 </td>216 </tr>217 218 <tr class="champs_var_#GET{clefield}" style="display:[(#ENV{choix_champs_#GET{clefield}}|=={varier_val_#GET{clefield}}|?{'table-row','none'})];">219 <td colspan="2" align="right"><:hydraulic:val_max:> : </td>220 <td colspan="2">221 <input name="val_max_#GET{clefield}" type="text" value="[(#ENV{val_max_#GET{clefield}})]"/>222 [<div class='hyd_erreur'>(#ENV**{erreurs}|table_valeur{val_max_#GET{clefield}})</div>]223 </td>224 </tr>225 226 <tr class="champs_var_#GET{clefield}" style="display:[(#ENV{choix_champs_#GET{clefield}}|=={varier_val_#GET{clefield}}|?{'table-row','none'})];">227 <td colspan="2" align="right"><:hydraulic:pas_var:> : </td>228 <td colspan="2">229 <input name="pas_var_#GET{clefield}" type="text" value="[(#ENV{pas_var_#GET{clefield}})]"/>230 [<div class='hyd_erreur'>(#ENV**{erreurs}|table_valeur{pas_var_#GET{clefield}})</div>]231 </td>232 </tr>233 234 </BOUCLE_champsLib>235 </BOUCLE_fieldChamps>236 237 238 <tr id="param_calc_normale_critique">239 <td colspan="5"><div class="hyd_formulaire_chapitre"><:hydraulic:param_calcul:></div></td>240 </tr>241 242 <tr id="precision_normale_critique">243 <td align="right">244 <:hydraulic:precision:> :245 </td>246 <td>247 <input id="champs_Param_calc_rPrec" type="text" value="#ENV{Param_calc_rPrec}" maxlength="30" name="Param_calc_rPrec"/>248 [<div class='hyd_erreur'>(#ENV**{erreurs}|table_valeur{Param_calc_rPrec})</div>]249 </td>250 </tr>251 252 <tr id="val_a_cal_field_nc" style="display:[(#GET{val_var}|!={''}|?{'table-row','none'})];">253 <td colspan="4"><div class="hyd_formulaire_chapitre"><:hydraulic:donnee_calc:></div></td>254 </tr>255 256 <tr id="val_a_cal_nc" style="display:[(#GET{val_var}|!={''}|?{'table-row','none'})];">257 <td align="right">258 <:hydraulic:choix_donnee_calc:> :259 </td>260 261 <td colspan="3">262 <select name="val_a_cal_nc" id="valeur_a_cal_nc">263 <BOUCLE_champs_select_cal(POUR){tableau #ENV{choix_champs_select}}>264 <option value="#CLE" [(#ENV{val_a_cal_nc}|=={#CLE}|?{'selected',''})]>[(#VALEUR|traduction_hydraulic)]</option>265 </BOUCLE_champs_select_cal>266 </select>267 [<div class='hyd_erreur'>(#ENV**{erreurs}|table_valeur{[(#VALEUR|table_valeur{0})]})</div>]268 </td>269 270 </tr>271 272 <tr>273 <td colspan="4" class="hyd_bouton_submit">274 <input type="submit" value="<:hydraulic:calculer:>">275 </td>276 </tr>277 278 35 </tbody> 279 36 </table> 280 37 </form> 281 38 282 [<div class='hydraulic_resultat' id="resultat_nc">(#ENV*{message_ok})</div>] 39 <script language="javascript"> 40 // Affichage des champs du type de section sélectionné uniquement 41 sectionDisplayFieldset(); 42 </script> 43 [<div id="hyd_resultat">(#ENV*{message_ok})</div>] -
_plugins_/hydraulic/trunk/formulaires/calcul_normale_critique.php
r68484 r95765 24 24 25 25 26 /* 27 * Découpe le champ $champ en plusieurs morceaux séparés par '_' 28 * Ce découpage s'effectue à partir du $deb underscore et est de longueur $lg 29 * Par exemple : 30 * $test = 'petit_test_de_decoupage' 31 * id_decoupe($test, 1, 2) renvoit 'test_de' 32 */ 33 function id_decoupe($champ,$deb, $lg){ 34 $decoup = explode('_', $champ); 35 $val = ''; 36 $selectElmt = array_slice($decoup, $deb, $lg); 37 $val = join("_", $selectElmt); 26 include_spip('hyd_inc/form_calcul_section.class'); 27 global $FCS; 28 $FCS = new form_calcul_section; 38 29 39 return $val; 30 31 function formulaires_calcul_normale_critique_charger_dist() { 32 global $FCS; 33 return $FCS->charger(); 40 34 } 41 35 42 include_spip('hyd_inc/section');43 44 /*45 * Contient tous les champs relatifs au formulaire.46 * Les champs communs sont localisés ici: hyd_inc/section.php47 */48 function mes_saisies_normale_critique(){49 50 $fieldset_champs_nc = caract_communes();51 52 $fieldset_champs_nc['Cr'] = array(53 'caract_globale',54 array(55 'rKs' =>array('rugosite_nc',50),56 'rIf' =>array('pente_fond', 0.001),57 'rQ' =>array('debit', 1.2),58 'rYB' =>array('h_berge', 1),59 'rY' =>array('tirant_eau', 1)60 )61 );62 63 64 return $fieldset_champs_nc;65 }66 67 function champs_select_calculer(){68 $champs_select_calc = array(69 'Hs' => 'charge_spe',70 'Hsc' => 'charge_critique',71 'B' => 'larg_miroir',72 'P' => 'perim_mouille',73 'S' => 'surf_mouille',74 'R' => 'rayon_hyd',75 'V' => 'vit_moy',76 'Fr' => 'froud',77 'Yc' => 'tirant_eau_crit',78 'Yn' => 'tirant_eau_norm',79 'Yf' => 'tirant_eau_fluv',80 'Yt' => 'tirant_eau_torr',81 'Yco' => 'tirant_eau_conj',82 'J' => 'perte_charge',83 'I-J' => 'var_lin',84 'Imp' => 'impulsion',85 'Tau0' => 'force_tract'86 );87 88 return $champs_select_calc;89 }90 91 function champs_obligatoires_nc() {92 93 $tSaisie = mes_saisies_normale_critique();94 $tChOblig = array();95 $sTypeSection = _request('ncTypeSection');96 // Cette variable va contenir le nom de la variable qui varie s'il y en a une.97 $ValVar = '';98 99 foreach($tSaisie as $IdFS=>$FieldSet) {100 // Si ce n'est pas une section ou alors celle selectionnée...101 if((substr($IdFS,0,1) != 'F') || ($IdFS == $sTypeSection)){102 foreach($FieldSet[1] as $Cle=>$Champ) {103 //... alors on enresgistre les champs104 if(substr(_request('choix_champs_'.$IdFS.'_'.$Cle), 0, 3) == 'var'){105 $ValVar = $IdFS.'_'.$Cle;106 }107 if((!isset($Champ[2])) || (isset($Champ[2]) && $Champ[2])) {108 $tChOblig[] = $IdFS.'_'.$Cle;109 }110 }111 }112 }113 114 if($ValVar != ''){115 foreach($tChOblig as $cle=>$valeur){116 if($valeur == $ValVar){117 unset($tChOblig[$cle]);118 $tChOblig = array_values($tChOblig);119 $tChOblig [] = 'val_min_'.$valeur;120 $tChOblig [] = 'val_max_'.$valeur;121 $tChOblig [] = 'pas_var_'.$valeur;122 }123 }124 }125 126 //On ajoute rPrec_nc car il ne fait pas partie des saisies de sections.127 $tChOblig[] = 'Param_calc_rPrec';128 129 return $tChOblig;130 }131 132 function formulaires_calcul_normale_critique_charger_dist() {133 // On charge les saisies et les champs qui nécessitent un accès par les fonctions134 $tSaisie_nc = mes_saisies_normale_critique();135 $champs_select = champs_select_calculer();136 137 $valeurs = array(138 'ncTypeSection' => 'FT',139 'mes_saisies' => $tSaisie_nc,140 'val_a_cal_nc' => 'Hs',141 'Param_calc_rPrec' => 0.001,142 'choix_champs_select' => $champs_select143 );144 145 foreach($tSaisie_nc as $CleFD=>$FieldSet) {146 foreach($FieldSet[1] as $Cle=>$Champ) {147 $valeurs[$CleFD.'_'.$Cle] = $Champ[1];148 $valeurs['choix_champs_'.$CleFD.'_'.$Cle] = 'val_fixe_'.$CleFD.'_'.$Cle;149 if($Cle == 'rIf'){150 $valeurs['val_min_'.$CleFD.'_'.$Cle] = 0.001;151 $valeurs['val_max_'.$CleFD.'_'.$Cle] = 0.005;152 $valeurs['pas_var_'.$CleFD.'_'.$Cle] = 0.001;153 }154 else {155 $valeurs['val_min_'.$CleFD.'_'.$Cle] = 1;156 $valeurs['val_max_'.$CleFD.'_'.$Cle] = 2;157 $valeurs['pas_var_'.$CleFD.'_'.$Cle] = 0.1;158 }159 }160 }161 162 return $valeurs;163 }164 36 165 37 function formulaires_calcul_normale_critique_verifier_dist(){ 166 $erreurs = array(); 167 $datas = array(); 168 $tChOblig= champs_obligatoires_nc(); 169 // Vérifier que les champs obligatoires sont bien là : 170 foreach($tChOblig as $obligatoire) { 171 if (_request($obligatoire) == NULL) { 172 $erreurs[$obligatoire] = _T('hydraulic:champ_obligatoire'); 173 } 174 else { 175 $datas[$obligatoire] = _request($obligatoire); 176 } 177 } 178 179 // Gestion des valeurs négatives 180 foreach($datas as $champ=>$data){ 181 if($data < 0 && !strstr($champ, 'Cr_rIf')) $erreurs[$champ] = _T('hydraulic:valeur_positive_nulle'); 182 } 183 184 if (count($erreurs)) { 185 $erreurs['message_erreur'] = _T('hydraulic:saisie_erreur'); 186 } 187 188 return $erreurs; 38 global $FCS; 39 return $FCS->verifier(); 189 40 } 190 41 191 42 192 43 function formulaires_calcul_normale_critique_traiter_dist(){ 193 global $spip_lang; 194 include_spip('hyd_inc/cache'); 195 include_spip('hyd_inc/log.class'); 196 include_spip('hyd_inc/graph.class'); 197 include_spip('hyd_inc/section.class'); 198 include_spip('hyd_inc/dessinSection.class'); 199 200 $datas = array(); 201 $echo = ''; 202 $tChUtil = champs_obligatoires_nc(); 203 $ncTypeSection = _request('ncTypeSection'); 204 $tVarCal = array(); 205 $VarVar = ''; 206 $result = array(); 207 $champs_select_nc = champs_select_calculer(); 208 209 foreach($tChUtil as $champ) { 210 if (_request($champ)){ 211 $datas[$champ] = _request($champ); 212 } 213 214 if(id_decoupe($champ, 0, 2) == 'pas_var'){ 215 $VarVar = id_decoupe($champ, 2, 2); 216 } 217 $datas[$champ] = str_replace(',','.',$datas[$champ]); // Bug #574*/ 218 } 219 220 // On ajoute la langue en cours pour différencier le fichier de cache par langue 221 $datas['sLang'] = $spip_lang; 222 223 // Nom du fichier en cache pour calcul déjà fait 224 $CacheFileName=md5(serialize($datas)); 225 226 // Initialisation de la classe chargée d'afficher le journal de calcul 227 $oLog = new cLog(); 228 229 //Transformation des variables contenues dans $datas 230 foreach($datas as $champ=>$data) { 231 ${$champ}=$data; 232 } 233 234 /*************************************************************************** 235 * Calcul normale critique 236 ***************************************************************************/ 237 $oParam= new cParam($Cr_rKs, $Cr_rQ, $Cr_rIf, $Param_calc_rPrec, $Cr_rYB); 238 switch($ncTypeSection) { 239 case 'FT': 240 include_spip('hyd_inc/sectionTrapez.class'); 241 $oSection=new cSnTrapez($oLog,$oParam,$FT_rLargeurFond,$FT_rFruit); 242 break; 243 244 case 'FR': 245 include_spip('hyd_inc/sectionRectang.class'); 246 $oSection=new cSnRectang($oLog,$oParam,$FR_rLargeurBerge); 247 break; 248 249 case 'FC': 250 include_spip('hyd_inc/sectionCirc.class'); 251 $oSection=new cSnCirc($oLog,$oParam,$FC_rD); 252 break; 253 254 case 'FP': 255 include_spip('hyd_inc/sectionPuiss.class'); 256 $oSection=new cSnPuiss($oLog,$oParam,$FP_rCoef,$FP_rLargBerge); 257 break; 258 259 default: 260 include_spip('hyd_inc/sectionTrapez.class'); 261 $oSection=new cSnTrapez($oLog,$oParam,$FT_rLargeurfond,$FT_rFruit); 262 263 } 264 $oSection->rY = $Cr_rY; 265 266 $min = 0; 267 $max = 0; 268 $pas = 1; 269 $i = 0; 270 271 $tChampsSect = mes_saisies_normale_critique(); 272 $champsSection = array(); 273 274 foreach($tChampsSect as $IdFS=>$FieldSet){ 275 if(substr($IdFS, 0, 1) == 'F'){ 276 foreach($FieldSet[1] as $Cle=>$Champ) { 277 $champsSection[] = $IdFS.'_'.$Cle; 278 } 279 } 280 } 281 282 if($VarVar != ''){ 283 $tVarCal[] = _request('val_a_cal_nc'); 284 $min = _request('val_min_'.$VarVar); 285 $max = _request('val_max_'.$VarVar); 286 $pas = _request('pas_var_'.$VarVar); 287 $valACalculer = id_decoupe($VarVar, 1, 1); 288 if($valACalculer == 'rY' or in_array($VarVar, $champsSection)){ 289 $oSection->{$valACalculer} = &$i; 290 } 291 else{ 292 $oParam->{$valACalculer} = &$i; 293 } 294 } 295 else { 296 switch($ncTypeSection) { 297 case 'FR': 298 $tVarCal = array('Hs', 'Hsc', 'B', 'P', 'S', 'R', 'V', 'Fr', 'Yc', 'Yn', 'Yf', 'Yt', 'Yco', 'J', 'I-J', 'Imp', 'Tau0'); 299 break; 300 default: 301 // Le calcul de la hauteur conjuguée n'est pas OK pour les sections autres que rectangulaire 302 $tVarCal = array('Hs', 'Hsc', 'B', 'P', 'S', 'R', 'V', 'Fr', 'Yc', 'Yn', 'Yf', 'Yt', 'J', 'I-J', 'Imp', 'Tau0'); 303 } 304 } 305 306 $max += $pas/2; 307 308 $bNoCache = true; // true pour débugage 309 if(!$bNoCache && is_file(HYD_CACHE_DIRECTORY.$CacheFileName)) { 310 // On récupère toutes les données dans un cache déjà créé 311 $result = ReadCacheFile($CacheFileName); 312 } 313 else{ 314 for($i = $min; $i <= $max; $i+= $pas){ 315 $oSection->Reset(true); 316 foreach($tVarCal as $sCalc){ 317 $rY = $oSection->rY; 318 if(!in_array($sCalc,array('Yn', 'Yc', 'Hsc'))){ 319 $result[] = $oSection->Calc($sCalc); 320 } 321 else{ 322 $result[] = $oSection->CalcGeo($sCalc); 323 } 324 $oSection->rY = $rY; 325 } 326 } 327 //Enregistrement des données dans fichier cache 328 WriteCacheFile($CacheFileName,$result); 329 } 330 /*************************************************************************** 331 * Une valeur varie 332 ****************************************************************************/ 333 if($VarVar != ''){ 334 335 /*************************************************************************** 336 * Affichage du tableau de données 337 ****************************************************************************/ 338 339 $tabClass = array(); 340 foreach($tChampsSect as $cleFD=>$champsFD){ 341 foreach($champsFD[1] as $cle=>$valeur){ 342 if(substr($cleFD, 0, 1) != 'F' || $cleFD == _request('ncTypeSection')){ 343 if(substr(_request('choix_champs_'.$cleFD.'_'.$cle), 0, 3) == 'var'){ 344 $tabClass['var'] = $valeur[0]; 345 } 346 else if(substr(_request('choix_champs_'.$cleFD.'_'.$cle), 0, 3) != 'var' && _request($cleFD.'_'.$cle)){ 347 $tabClass['val'.$i] = $valeur[0]; 348 $i++; 349 } 350 } 351 } 352 } 353 354 $var_a_cal = ''; 355 foreach($champs_select_nc as $cle=>$valeur){ 356 if($cle == _request('val_a_cal_nc')){ 357 $var_a_cal = _T('hydraulic:'.$valeur); 358 } 359 } 360 361 $echo.='<table class="spip"> 362 <thead> 363 <tr class="row_first">'; 364 365 foreach($tabClass as $cle=>$valeur){ 366 if(substr($cle, 0, 3) == 'val'){ 367 $echo.= '<th scope="col" rowspan="2" style="text-align:center;">'._T('hydraulic:'.$tabClass[$cle]).'</th>'; 368 } 369 } 370 371 $echo.= ' <th style="text-align:center;" scope="col" rowspan="2">('._T('hydraulic:abscisse').')<br/>'._T('hydraulic:'.$tabClass['var']).'</th> 372 <th style="text-align:center;" scope="col" rowspan="2">('._T('hydraulic:ordonnee').')<br/>'.$var_a_cal.'</th> 373 </tr> 374 </thead> 375 <tbody>'; 376 377 $i=0; 378 $tabAbs = array(); 379 380 $ValeurVarie = $min; 381 382 foreach($result as $indice){ 383 $i++; 384 $echo.= '<tr class="align_right '; 385 $echo.=($i%2==0)?'row_even':'row_odd'; 386 $echo.='">'; 387 388 foreach($datas as $cle=>$valeur){ 389 if((substr($cle, 0, 1) == 'F' || substr($cle, 0, 2) == 'Cr') && $valeur != 0){ 390 $echo.= '<td>'; 391 $echo.= format_nombre($valeur, $oSection->oP->iPrec).'</td>'; 392 } 393 } 394 395 $echo.= '<td>'.format_nombre($ValeurVarie, $oSection->oP->iPrec).'</td><td>'.format_nombre($indice, $oSection->oP->iPrec).'</td>'; 396 $echo.= '</tr>'; 397 $tabAbs[] = $ValeurVarie; 398 $ValeurVarie+= $pas; 399 } 400 401 $echo.= '</tbody> 402 </table>'; 403 404 /*************************************************************************** 405 * Affichage du graphique 406 ****************************************************************************/ 407 if(is_infinite($result[0])){ 408 unset($result[0]); 409 $result = array_values($result); 410 unset($tabAbs[0]); 411 $tabAbs = array_values($tabAbs); 412 } 413 414 $oGraph = new cGraph(); 415 // Ligne Courbe normale critique 416 if(isset($result)) { 417 $oGraph->AddSerie( 418 $var_a_cal, 419 $tabAbs, 420 $result, 421 '#00a3cd', 422 'lineWidth:3, showMarker:true, markerOptions:{style:\'filledCircle\', size:8}'); 423 } 424 // Récupération du graphique 425 $echo .= $oGraph->GetGraph('ligne_normale_critique',400,600); 426 $echo .= _T('hydraulic:'.$tabClass['var']); 427 428 } 429 430 /*************************************************************************** 431 * Aucune valeur ne varie 432 ****************************************************************************/ 433 else{ 434 435 /*************************************************************************** 436 * Affichage du tableau de données 437 ****************************************************************************/ 438 $lib_data = array(); 439 $test = champs_select_calculer(); 440 $par = 0; 441 442 foreach($tVarCal as $champ){ 443 $lib_data[$champ][] = $result[$par]; 444 $lib_data[$champ][] = $test[$champ]; 445 $par++; 446 } 447 448 $idCla = 0; 449 450 $echo.='<table class="spip" id="tableau_nc" style="display: inline-block;"> 451 <tbody>'; 452 453 foreach($lib_data as $cal=>$datas){ 454 $idCla++; 455 $echo.= '<tr class="align_right '; 456 $echo.=($idCla%2==0)?'row_even':'row_odd'; 457 $echo.='">'; 458 $echo.= '<td class="varACal">'; 459 $echo.= $cal.': '._T('hydraulic:'.$datas[1]).'</td>'; 460 $echo.= '<td>'.format_nombre($datas[0], $oSection->oP->iPrec).'</td>'; 461 $echo.= '</tr>'; 462 463 } 464 $echo.= '</tbody> 465 </table>'; 466 467 468 /*************************************************************************** 469 * Affichage du graphique 470 ****************************************************************************/ 471 472 $lib_datas = array(); 473 $par = 0; 474 475 foreach($tVarCal as $champ){ 476 if(substr($test[$champ], 0, 6) == 'tirant' || $champ == 'Hs' || $champ == 'Hsc'){ 477 $lib_datas[$champ] = $result[$par]; 478 } 479 $par++; 480 } 481 482 $lib_datas['rYB'] = $oSection->oP->rYB; 483 $dessinSection = new dessinSection(250, 200, $oSection, $lib_datas); 484 $echo.= $dessinSection->GetDessinSection(); 485 } 486 487 $res['message_ok'] = $echo; 488 return $res; 44 global $FCS; 45 return $FCS->traiter(); 489 46 } 490 47 ?> -
_plugins_/hydraulic/trunk/formulaires/calcul_ouvrages.html
r83413 r95765 360 360 </script> 361 361 362 <form method="post" action="#ENV{action} " id="form_calcul_ouvrages">362 <form method="post" action="#ENV{action}#VAL{#resultat_ouvrages}" id="form_calcul_ouvrages"> 363 363 #ACTION_FORMULAIRE{#ENV{action}} 364 364 <table class="hyd_formulaire"> … … 656 656 </form> 657 657 658 [<div class='hydraulic_resultat'>(#ENV*{message_ok})</div>]658 [<div id="hyd_resultat">(#ENV*{message_ok})</div>] -
_plugins_/hydraulic/trunk/formulaires/courbe_remous.html
r93248 r95765 27 27 </script> 28 28 <div class="formulaire_spip form_courbe_remous"> 29 <form method="post" action="#ENV{action} " id="form_courbe_remous">29 <form method="post" action="#ENV{action}#VAL{#resultat_courbe_remous}" id="form_courbe_remous"> 30 30 #ACTION_FORMULAIRE{#ENV{action}} 31 31 <table class="hyd_formulaire"> … … 83 83 84 84 </BOUCLE_fieldChamps> 85 <tr> 86 <td align="right"> 87 <:hydraulic:choix_resolution:> 88 </td> 89 90 <!-- On génére les options du select, correspondant aux types de section --> 91 <td> 92 [<div class='hyd_erreur'>(#ENV**{erreurs}|table_valeur{choix_resolution})</div>] 93 <select name="choix_resolution" id="choix_resolution"> 94 <option value="RK4" [(#ENV{choix_resolution}|=={RK4}|?{'selected',''})]> 95 <:hydraulic:runge_kutta:> 96 </option> 97 <option value="Euler" [(#ENV{choix_resolution}|=={Euler}|?{'selected',''})]> 98 <:hydraulic:euler_explicite:> 99 </option> 100 </select> 101 </td> 102 </tr> 85 103 86 104 <tr> … … 94 112 </form> 95 113 </div> 96 [<div class='hydraulic_resultat'>(#ENV*{message_ok})</div>]114 [<div id="hyd_resultat">(#ENV*{message_ok})</div>] -
_plugins_/hydraulic/trunk/formulaires/courbe_remous.php
r93248 r95765 23 23 */ 24 24 25 include_spip('hyd_inc/section');26 25 27 26 /* Tableau des champs à afficher dans le formulaire. … … 29 28 * le multilinguisme. 30 29 */ 31 function mes_saisies _section() {30 function mes_saisies() { 32 31 33 32 // On récupère les champs communs à tous les formulaires à savoir les champs de section. 34 $fieldset_champs = caract_communes(); 33 include_spip('hyd_inc/section'); 34 $fieldset_champs = mes_saisies_section(true); 35 35 36 36 $fieldset_champs['Cond_lim'] = array( 37 38 39 40 'rYaval' =>array('h_aval_imposee',0.6,'pn'),41 42 43 37 'condition_limite', 38 array( 39 'rQ' =>array('debit_amont',2,'op'), 40 'rYaval' =>array('h_aval_imposee',0.4,'pn'), 41 'rYamont'=>array('h_amont_imposee',0.15,'pn') 42 ) 43 ); 44 44 45 45 $fieldset_champs['Param_calc'] = array( 46 'param_calcul', 47 array( 48 'rDx' =>array('pas_discret',5,'op'), 49 'rPrec' =>array('precision_calc',0.001,'op') 50 ) 51 ); 52 53 return $fieldset_champs; 54 55 } 46 'param_calcul', 47 array( 48 'rDx' =>array('pas_discret',5,'op'), 49 'rPrec' =>array('precision_calc',0.001,'op') 50 ) 51 ); 52 return $fieldset_champs; 53 } 54 56 55 57 56 // Définition des champs à lire dans le formulaire 58 57 function getChamps() { 59 58 60 $tSaisie = mes_saisies _section();59 $tSaisie = mes_saisies(); 61 60 $sTypeSection = _request('crTypeSection'); 62 61 $tData = array(); … … 67 66 // ... alors on parcourt notre deuxième tableau en ajoutant les champs nécessaires. 68 67 foreach($FieldSet[1] as $Cle=>$Champ) { 69 $tData[$IdFS.'_'.$Cle] = _request($IdFS.'_'.$Cle); 70 $tCtrl[$IdFS.'_'.$Cle] = $Champ[2]; 68 $tData[$IdFS.'_'.$Cle] = _request($IdFS.'_'.$Cle); // Valeur dans le formulaire 69 $tCtrl[$IdFS.'_'.$Cle] = $Champ[2]; // Codes de vérification 71 70 } 72 71 } … … 78 77 function formulaires_courbe_remous_charger_dist() { 79 78 // On charge les saisies et les champs qui nécessitent un accès par les fonctions 80 $tSaisie_section = mes_saisies _section();79 $tSaisie_section = mes_saisies(); 81 80 $valeurs = array( 82 81 'crTypeSection' => 'FT', … … 90 89 } 91 90 } 91 $valeurs['choix_resolution'] = _request('choix_resolution'); 92 92 93 93 return $valeurs; … … 111 111 $datas = array(); 112 112 $echo = ''; 113 $tSaisie = mes_saisies _section();113 $tSaisie = mes_saisies(); 114 114 $tChUtil = array(); 115 115 $crTypeSection = _request('crTypeSection'); … … 156 156 157 157 // Enregistrement des paramètres dans les classes qui vont bien 158 $oParam= new cParam($c_bief_rKs,$Cond_lim_rQ,$c_bief_rIf,$Param_calc_rPrec,$c_bief_rYB erge,$Cond_lim_rYaval,$Param_calc_rDx,$c_bief_rLong);158 $oParam= new cParam($c_bief_rKs,$Cond_lim_rQ,$c_bief_rIf,$Param_calc_rPrec,$c_bief_rYB,$Cond_lim_rYaval,$Param_calc_rDx,$c_bief_rLong,_request('choix_resolution')); 159 159 160 160 // Création d'un objet de type Section selon la section choisie. … … 167 167 case 'FR': 168 168 include_spip('hyd_inc/sectionRectang.class'); 169 $oSection=new cSnRectang($oLog,$oParam,$FR_rLargeur Berge);169 $oSection=new cSnRectang($oLog,$oParam,$FR_rLargeurFond); 170 170 break; 171 171 -
_plugins_/hydraulic/trunk/formulaires/lechapt_calmon.html
r68473 r95765 1 1 [<div class='hyd_formulaire_erreur '><span>(#ENV*{message_erreur})</span></div>] 2 2 <script language="javascript" type="text/javascript" src="#CHEMIN{js/hyd_fonctions.js}"></script> 3 <script>4 // Permet de switcher les valeur de L, M et N en fonction du matériau choisis5 function change_valeur() {6 /*7 * Le select commence à 1 donc on diminue son indice de 1 vu qu'on utilise un tableau pour stocker8 * les valeurs (on commence a 0)9 */10 var choix_mat = getSelectValue('choix_materiau')-1;11 var materiau = new Array();12 3 13 <BOUCLE_mat1(POUR){tableau #ENV{mes_saisies_materiaux}}> 14 <BOUCLE_mat2(POUR){tableau #VALEUR}> 15 materiau.push('#VALEUR'); 16 </BOUCLE_mat2> 17 </BOUCLE_mat1> 4 <form method="post" action="#ENV{action}#VAL{#resultat_lechapt_calmon}" id="form_lechapt_calmon"> 5 #ACTION_FORMULAIRE{#ENV{action}} 6 <table class="hyd_formulaire"> 7 <tbody> 18 8 19 document.getElementById('champs_L').value=materiau[choix_mat*3]; 20 document.getElementById('champs_M').value=materiau[(choix_mat*3)+1]; 21 document.getElementById('champs_N').value=materiau[(choix_mat*3)+2]; 22 } 23 24 // Retourne sous forme de tableau tous les élèments de la Class classe et de type tagName 25 function elementsParClasse(classe, tagName){ 26 var divs = document.getElementsByTagName(tagName); 27 var resultats = new Array(); 28 for(var i=0; i<divs.length; i++){ 29 if(divs[i].className == classe){ 30 resultats.push(divs[i]); 31 } 32 } 33 return resultats; 34 } 35 36 // Tableau contenant tous les choix des groupes de boutons radios 37 var glob = []; 38 39 // Variables globales contenant le choix fait pour chaque ligne 40 <BOUCLE_sans_coeff(POUR){tableau #ENV{tableau_caract}}> 41 glob['#VALEUR'] = '#ENV{choix_champs_#VALEUR}'; 42 </BOUCLE_sans_coeff> 43 44 // Mise a jour des variables globales 45 function setVarGlob(){ 46 <BOUCLE_sans_coeff2(POUR){tableau #ENV{tableau_caract}}> 47 // On récupère le choix effectué parmis les groupes de champs radios. 48 glob['#VALEUR'] = getRadioValue('choix_champs_#VALEUR'); 49 </BOUCLE_sans_coeff2> 50 } 51 52 // Gére le comportement des boutons radios 53 function gestion_radios(nom,valeur){ 54 55 // Ce tableau contiendra tous les indices , ainsi que leur valeur, excepté celle qui a été cliquée 56 var tabPartiel = { 57 <BOUCLE_sans_coeff3(POUR){tableau #ENV{tableau_caract}}> 58 '#VALEUR' : glob['#VALEUR'], 59 </BOUCLE_sans_coeff3> 60 }; 61 62 // On supprime du tableau l'élément sur lequel on a cliqué 63 delete(tabPartiel[nom]); 64 65 // Tableau des indices 66 var tabIndice = [ 67 <BOUCLE_sans_coeff4(POUR){tableau #ENV{tableau_caract}}> 68 '#VALEUR', 69 </BOUCLE_sans_coeff4> 70 ]; 71 72 if(valeur.substr(0,3) == 'cal'){ 73 /* 74 * Pour toutes les lignes autres que celle passée en paramètre, 75 * on contrôle si il y a déjà une valeur à calculer. 76 * Si oui, alors on fais les modifications adéquates sur les champs: 77 * sélection, visibilité 78 */ 79 for(var cle in tabPartiel){ 80 if(document.getElementById('calcul_val_'+cle).checked){ 81 document.getElementById('val_fixe_'+cle).checked=true; 82 document.getElementById('caract_'+cle).disabled=false; 83 document.getElementById('caract_'+nom).disabled=true; 84 setVarGlob(); 85 } 86 } 87 } 88 89 // Si on appuit sur un bouton de type "varier_val" ou "val_fixe" 90 else if(valeur.substr(0,3) == 'var' || valeur.substr(0,3)=='val'){ 91 for(var cle in tabPartiel){ 92 if(document.getElementById('varier_val_'+cle).checked && (glob[nom] != "calcul_val_"+nom)){ 93 if(document.getElementById('varier_val_'+nom).checked){ 94 document.getElementById('val_fixe_'+cle).checked=true; 95 } 96 setVarGlob(); 97 } 98 else if(document.getElementById('varier_val_'+cle).checked && (glob[nom] == "calcul_val_"+nom) && valeur.substr(0,3) == 'var'){ 99 document.getElementById('calcul_val_'+cle).checked=true; 100 document.getElementById('caract_'+cle).disabled=true; 101 document.getElementById('caract_'+nom).disabled=false; 102 setVarGlob(); 103 } 104 } 105 106 // Compte le nombre de calcul_val checké 107 var cptValCal = 0; 108 for(var cle in glob){ 109 if(document.getElementById('calcul_val_'+cle).checked){ 110 cptValCal++; 111 } 112 } 113 // Si aucune calcul_val n'est checké 114 if(cptValCal == 0){ 115 // Alors on chercher l'indice suivant... 116 indice = ''; 117 for(var i = 0; i < tabIndice.length; i++){ 118 if(tabIndice[i] == nom){ 119 // Si on est pas arrivé au dernier élément 120 if(i+1 <= tabIndice.length-1){ 121 indice = tabIndice[i+1]; 122 } 123 else{ 124 indice = tabIndice[0]; 125 } 126 } 127 128 } 129 // ... et on le met a calcul_val 130 document.getElementById('calcul_val_'+indice).checked=true; 131 document.getElementById('caract_'+nom).disabled=false; 132 document.getElementById('caract_'+indice).disabled=true; 133 var cacher = elementsParClasse('champs_var_'+indice, 'tr'); 134 for(var i in cacher){ 135 cacher[i].style.display='none'; 136 } 137 setVarGlob(); 138 } 139 } 140 141 // Si on appuis sur un bouton de type varier_val 142 if(valeur.substr(0,3) == 'var'){ 143 setVarGlob(); 144 document.getElementById('caract_'+nom).disabled=true; 145 for(var cle in glob){ 146 if(glob[cle].substr(0,3) == 'val'){ 147 document.getElementById('caract_'+cle).disabled=false; 148 } 149 } 150 151 // on affiche les champs correspondant au bouton sélectionné 152 var afficher = elementsParClasse('champs_var_'+nom, 'tr'); 153 for(var i in afficher){ 154 afficher[i].style.display='table-row'; 155 } 156 // On cache tous les autres champs de variations. 157 for(var cle in tabPartiel){ 158 var cacher = elementsParClasse('champs_var_'+cle, 'tr'); 159 for(var i in cacher){ 160 cacher[i].style.display='none'; 161 } 162 } 163 164 setVarGlob(); 165 } 166 167 // Compte le nombre de varier_val checké 168 var cptVarVal = 0; 169 for(var cle in glob){ 170 if(document.getElementById('varier_val_'+cle).checked){ 171 cptVarVal++; 172 } 173 } 174 175 if(cptVarVal == 0){ 176 for(var cle in glob){ 177 if(glob[cle].substr(0,3) != 'cal'){ 178 document.getElementById('caract_'+cle).disabled=false; 179 } 180 } 181 var cacher = elementsParClasse('champs_var_'+nom, 'tr'); 182 for(var i in cacher){ 183 cacher[i].style.display='none'; 184 } 185 } 186 187 setVarGlob(); 188 } 189 </script> 190 <form method="post" action="#ENV{action}" id="form_lechapt_calmon"> 191 #ACTION_FORMULAIRE{#ENV{action}} 192 <table class="hyd_formulaire"> 193 <tbody> 194 <tr id="type_materiau_field"> 195 <td colspan="5"><div class="hyd_formulaire_chapitre"><:hydraulic:type_materiau:></div></td> 196 </tr> 197 198 <tr id="type_materiau_choix"> 199 <td align="right"> 200 <:hydraulic:choix_materiau:> : 201 </td> 202 203 <td colspan="4"> 204 <select name="typeMateriau" id="choix_materiau" onChange="change_valeur();"> 205 <option value="1" [(#ENV{typeMateriau}|=={'1'}|?{'selected',''})]><:hydraulic:fonte_beton_corrosive:></option> 206 <option value="2" [(#ENV{typeMateriau}|=={'2'}|?{'selected',''})]><:hydraulic:fonte_beton_ncorrosive:></option> 207 <option value="3" [(#ENV{typeMateriau}|=={'3'}|?{'selected',''})]><:hydraulic:fonte_revt_ciment:></option> 208 <option value="4" [(#ENV{typeMateriau}|=={'4'}|?{'selected',''})]><:hydraulic:fonte_revt_bitume:></option> 209 <option value="5" [(#ENV{typeMateriau}|=={'5'}|?{'selected',''})]><:hydraulic:acier_lamine:></option> 210 <option value="6" [(#ENV{typeMateriau}|=={'6'}|?{'selected',''})]><:hydraulic:fonte_revt_centrifuge:></option> 211 <option value="7" [(#ENV{typeMateriau}|=={'7'}|?{'selected',''})]><:hydraulic:pvc:></option> 212 <option value="8" [(#ENV{typeMateriau}|=={'8'}|?{'selected',''})]><:hydraulic:tuyau_lisse1:></option> 213 <option value="9" [(#ENV{typeMateriau}|=={'9'}|?{'selected',''})]><:hydraulic:tuyau_lisse2:></option> 214 </select> 215 216 [<div class='hyd_erreur'>(#ENV**{erreurs}|table_valeur{[(#VALEUR|table_valeur{0})]})</div>] 217 218 </td> 219 </tr> 220 221 #SET{tableau_coeff,#ARRAY{1,L,2,M,3,N}} 222 <BOUCLE_coeff(POUR) {tableau #GET{tableau_coeff}}> 223 <tr id="materiau_coeff_#VALEUR"> 224 <td align="right"> 225 #VALEUR : 226 </td> 227 228 <td> 229 <input id="champs_#VALEUR" type="text" value="#ENV{#VALEUR}" maxlength="30" name="#VALEUR"/> 230 [<div class='hyd_erreur'>(#ENV**{erreurs}|table_valeur{#VALEUR})</div>] 231 </td> 232 </tr> 233 </BOUCLE_coeff> 234 235 236 <tr id="caract_lechapt_calmon"> 237 <td colspan="5"><div class="hyd_formulaire_chapitre"><:hydraulic:caract_lechapt_calmon:></div></td> 238 </tr> 239 240 <tr> 241 <td colspan="2"></td> 242 <td align="center"><:hydraulic:calcul_val:></td> 243 <td align="center"><:hydraulic:varier_val:></td> 244 <td align="center"><:hydraulic:fixer_val:></td> 245 </tr> 246 247 <!-- On génère les champs du formulaire en suivant le tableau caract --> 248 <BOUCLE_caract(POUR) {tableau #ENV{tableau_caract}}> 249 250 <tr id="type_materiau_caract_#VALEUR"> 251 <td align="right"> 252 [(#NUL|concat{param_,#VALEUR}|traduction_hydraulic)] 253 </td> 254 255 <td> 256 <input id="caract_#VALEUR" type="text" value="[(#ENV{choix_champs}|=={#VALEUR}|?{'',#ENV{#VALEUR}})]" maxlength="30" name="#VALEUR" [(#ENV{choix_champs_#VALEUR}|match{^((calcul_val_#VALEUR)|(varier_val_#VALEUR))$}|?{'disabled="true"',''})]/> 257 [<div class='hyd_erreur'>(#ENV**{erreurs}|table_valeur{#VALEUR})</div>] 258 </td> 259 260 <!-- Les 3 boutons radios pour le choix de la variable à calculer, varier, ou fixer --> 261 <td align="center"> 262 <input type="radio" id="calcul_val_#VALEUR" name="choix_champs_#VALEUR" value="calcul_val_#VALEUR" onclick="gestion_radios('#VALEUR', 'calcul_val_#VALEUR')" [(#ENV{choix_champs_#VALEUR}|=={calcul_val_#VALEUR}?{'checked',''})]/> 263 </td> 264 265 <td align="center"> 266 <input type="radio" id="varier_val_#VALEUR" name="choix_champs_#VALEUR" value="varier_val_#VALEUR" onclick="gestion_radios('#VALEUR', 'varier_val_#VALEUR')" [(#ENV{choix_champs_#VALEUR}|=={varier_val_#VALEUR}?{'checked',''})]/> 267 </td> 268 269 <td align="center"> 270 <input type="radio" id="val_fixe_#VALEUR" name="choix_champs_#VALEUR" value="val_fixe_#VALEUR" onclick="gestion_radios('#VALEUR', 'val_fixe_#VALEUR')" [(#ENV{choix_champs_#VALEUR}|=={val_fixe_#VALEUR}?{'checked',''})]/> 271 </td> 272 </tr> 273 274 <!-- Champs pour les variations de calcul. Par défaut non visible. --> 275 <tr class="champs_var_#VALEUR" style="display:[(#ENV{choix_champs_#VALEUR}|=={varier_val_#VALEUR}|?{'table-row','none'})];"> 276 <td colspan="3" align="right"><:hydraulic:val_min:> : </td> 277 <td colspan="2"> 278 <input name="val_min_#VALEUR" type="text" value="#ENV{val_min_#VALEUR}"/> 279 [<div class='hyd_erreur'>(#ENV**{erreurs}|table_valeur{val_min_#VALEUR})</div>] 280 </td> 281 </tr> 282 283 <tr class="champs_var_#VALEUR" style="display:[(#ENV{choix_champs_#VALEUR}|=={varier_val_#VALEUR}|?{'table-row','none'})];"> 284 <td colspan="3" align="right"><:hydraulic:val_max:> :</td> 285 <td colspan="2"> 286 <input name="val_max_#VALEUR" type="text" value="#ENV{val_max_#VALEUR}"/> 287 [<div class='hyd_erreur'>(#ENV**{erreurs}|table_valeur{val_max_#VALEUR})</div>] 288 </td> 289 </tr> 290 291 <tr class="champs_var_#VALEUR" style="display:[(#ENV{choix_champs_#VALEUR}|=={varier_val_#VALEUR}|?{'table-row','none'})];"> 292 <td colspan="3" align="right"><:hydraulic:pas_var:> :</td> 293 <td colspan="2"> 294 <input name="pas_var_#VALEUR" type="text" value="#ENV{pas_var_#VALEUR}"/> 295 [<div class='hyd_erreur'>(#ENV**{erreurs}|table_valeur{pas_var_#VALEUR})</div>] 296 </td> 297 </tr> 298 299 </BOUCLE_caract> 300 301 <!-- Fieldset + champs sur la précision du calcul.--> 302 <tr id="param_calc_lechapt_calmon"> 303 <td colspan="5"><div class="hyd_formulaire_chapitre"><:hydraulic:param_calcul:></div></td> 304 </tr> 305 306 <tr id="precision_lechapt_calmon"> 307 <td align="right"> 308 <:hydraulic:precision:> : 309 </td> 310 <td> 311 <input id="champs_rPrec" type="text" value="#ENV{rPrec}" maxlength="30" name="rPrec"/> 312 [<div class='hyd_erreur'>(#ENV**{erreurs}|table_valeur{rPrec})</div>] 313 </td> 314 </tr> 9 <!-- On génère les champs du formulaire en suivant le tableau saisies --> 10 <INCLURE{fond=hyd_inc/formulaire_champs,env}> 315 11 316 12 <tr> … … 320 16 </tr> 321 17 322 </tbody>323 </table>18 </tbody> 19 </table> 324 20 </form> 325 21 326 [<div class='hydraulic_resultat' id="resultat_lechapt_calmon">(#ENV*{message_ok})</div>]22 [<div id="hyd_resultat">(#ENV*{message_ok})</div>] -
_plugins_/hydraulic/trunk/formulaires/lechapt_calmon.php
r68473 r95765 39 39 */ 40 40 41 // Cette fonction renvoit tous les indices des champs présents dans le formulaire. 42 function mes_champs_coeff_materiau() { 43 $mes_champs_coeff = array('L','M','N','Q','D','J','Lg'); 44 return $mes_champs_coeff; 45 } 41 include_spip('hyd_inc/form_lechapt_calmon.class'); 42 global $FLC; 43 $FLC = new form_lechapt_calmon; 46 44 47 // Cette fonction renvoit seulement les paramètres fixes, ainsi que leur code pour le dictionnaires des langues 48 function mes_champs_sans_coeff_materiau(){ 49 $mes_champs_sans_coeff = array('Q','D','J','Lg'); 50 51 return $mes_champs_sans_coeff; 45 function formulaires_lechapt_calmon_charger_dist() { 46 global $FLC; 47 return $FLC->charger(); 52 48 } 53 49 54 50 55 /* 56 * Tableau des données pour chaque type de tuyau. Ces valeurs sont associées 57 * aux numéros des options du select (voir page lechapt_calmon.php) 58 */ 59 function mes_saisies_materiau() { 60 $type_materiaux = array( 61 62 '1' => array( 63 'L' =>1.863, 64 'M' =>2, 65 'N' =>5.33 66 ), 67 68 '2' => array( 69 'L' =>1.601, 70 'M' =>1.975, 71 'N' =>5.25 72 ), 73 74 '3' => array( 75 'L' =>1.40, 76 'M' =>1.96, 77 'N' =>5.19 78 ), 79 80 '4' => array( 81 'L' =>1.16, 82 'M' =>1.93, 83 'N' =>5.11 84 ), 85 86 '5' => array( 87 'L' =>1.1, 88 'M' =>1.89, 89 'N' =>5.01 90 ), 91 92 '6' => array( 93 'L' =>1.049, 94 'M' =>1.86, 95 'N' =>4.93 96 ), 97 98 '7' => array( 99 'L' =>1.01, 100 'M' =>1.84, 101 'N' =>4.88 102 ), 103 104 '8' => array( 105 'L' =>0.916, 106 'M' =>1.78, 107 'N' =>4.78 108 ), 109 110 '9' => array( 111 'L' =>0.971, 112 'M' =>1.81, 113 'N' =>4.81 114 ), 115 ); 116 117 return $type_materiaux; 118 51 function formulaires_lechapt_calmon_verifier_dist(){ 52 global $FLC; 53 return $FLC->verifier(); 119 54 } 120 55 121 function champs_obligatoires($bCalc = false){122 /*123 * Ce tableau contient la liste de tous les champs du formulaire.124 * La suite de cette fonction se chargera de supprimer les valeurs non obligatoires.125 */126 $tChOblig = mes_champs_coeff_materiau();127 $tChCalc = mes_champs_sans_coeff_materiau();128 129 $choix_champs = array();130 foreach($tChCalc as $valeur){131 $choix_champs[$valeur] = _request('choix_champs_'.$valeur);132 }133 134 foreach($choix_champs as $cle=>$valeur){135 // Si le choix du select est de calculer une valeur...136 if(substr($valeur, 0,3) != 'val'){137 foreach($tChOblig as $cle1=>$valeur1){138 if($cle == $valeur1){139 // ... alors on peut supprimer de notre tableau le champs calculé (il n'est pas obligatoire car grisé)140 unset($tChOblig[$cle1]);141 // Permet de tasser le tableau142 $tChOblig = array_values($tChOblig);143 }144 }145 }146 // Si le choix du select est de faire varier une valeur alors on ajoute les 3 champs nécessaires147 if(substr($valeur, 0, 3) == 'var'){148 $tChOblig[] = 'val_min_'.$cle;149 $tChOblig[] = 'val_max_'.$cle;150 $tChOblig[] = 'pas_var_'.$cle;151 }152 }153 $tChOblig[] = 'rPrec';154 155 if($bCalc) {156 return $tChCalc;157 }158 else {159 return $tChOblig;160 }161 }162 163 function formulaires_lechapt_calmon_charger_dist() {164 $valeurs = array(165 'mes_saisies_materiaux' => mes_saisies_materiau(),166 'tableau_caract' => mes_champs_sans_coeff_materiau(),167 'typeMateriau' => 1,168 'rPrec' => 0.001,169 'L' => 1.863,170 'M' => 2,171 'N' => 5.33,172 'Q' => 3,173 'D' => 1.2,174 'J' => 0.634482025,175 'Lg'=> 100176 );177 178 $mes_champs = mes_champs_sans_coeff_materiau();179 // On parcourt tous le tableau des indices, et on initialise les valeurs des boutons radios, et des champs de variation180 foreach($mes_champs as $cle){181 if($cle == 'Q'){182 $valeurs['choix_champs_'.$cle] = 'calcul_val_'.$cle;183 }184 else{185 $valeurs['choix_champs_'.$cle] = 'val_fixe_'.$cle;186 }187 188 $valeurs['val_min_'.$cle] = 1;189 $valeurs['val_max_'.$cle] = 2;190 $valeurs['pas_var_'.$cle] = 0.1;191 }192 193 return $valeurs;194 }195 196 function formulaires_lechapt_calmon_verifier_dist(){197 $erreurs = array();198 $datas = array();199 $tChOblig= champs_obligatoires();200 // Vérifier que les champs obligatoires sont bien là :201 foreach($tChOblig as $obligatoire) {202 if (_request($obligatoire) == NULL) {203 $erreurs[$obligatoire] = _T('hydraulic:champ_obligatoire');204 }205 // Les coefficients des matériaux doivent être strictement positifs206 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égatives215 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 56 226 57 function formulaires_lechapt_calmon_traiter_dist(){ 227 /*************************************************************************** 228 * Calcul de Lechapt et calmon 229 ****************************************************************************/ 230 include_spip('hyd_inc/cache'); 231 include_spip('hyd_inc/log.class'); 232 include_spip('hyd_inc/charge_datas'); 233 $datas = charge_datas(); 234 //spip_log($datas,'hydraulic'); 235 // On transforme les champs du tableau en variables 236 foreach($datas as $cle=>&$valeur){ 237 ${$cle} = &$valeur; 238 } 239 240 $bNoCache = true; // true pour débugage 241 if(!$bNoCache && is_file(HYD_CACHE_DIRECTORY.$CacheFileName)) { 242 // On récupère toutes les données dans un cache déjà créé 243 list($tAbs,$tRes) = ReadCacheFile($CacheFileName); 244 } 245 else { 246 /* 247 * Selon la variable à calculer, on gère les valeurs = à 0 et les valeurs infinies 248 * et on fait le valcul correspondant. 249 */ 250 $tDiv0 = array('Q'=>'Lg', 'D'=>'J', 'J'=>'D', 'Lg'=>'Q'); 251 $Div0 = $tDiv0[$ValCal]; 252 253 if(${$Div0} == 0 && _request("choix_champs_$Div0") != "varier_val_$Div0"){ 254 $tRes[] = 0; 255 } 256 else{ 257 $tRes = array(); // Tableau des résultats (ordonnées) 258 $tAbs = array(); // Tableau des abscisses 259 for($i = $min; $i <= $max; $i+= $pas){ 260 $tAbs[] = $i; 261 if($i == 0 && _request("choix_champs_$Div0") == "varier_val_$Div0"){ 262 $tRes[] = INF; 263 } 264 else{ 265 switch($ValCal){ 266 case 'Q': 267 $tRes[] = pow(((($J*pow($D, $N))/$L)*(1000/$Lg)), 1/$M); 268 break; 269 case 'D': 270 $tRes[] = pow(((($L*pow($Q, $M))/$J)*($Lg/1000)), 1/$N); 271 break; 272 case 'J': 273 $tRes[] = (($L*pow($Q, $M))/pow($D, $N))*($Lg/1000); 274 break; 275 case 'Lg': 276 $tRes[] = (($J*pow($D, $N))/($L*pow($Q,$M)))*1000; 277 } 278 } 279 } 280 } 281 282 //Enregistrement des données dans fichier cache 283 WriteCacheFile($CacheFileName,array($tabs,$tRes)); 284 } 285 /*************************************************************************** 286 * Affichage du tableau de données 287 ****************************************************************************/ 288 spip_log($datas,'hydraulic'); 289 include_spip('hyd_inc/affiche_resultats'); 290 $res['message_ok'] = AfficheResultats($datas, $tAbs, $tRes); 291 return $res; 58 global $FLC; 59 return $FLC->traiter(); 292 60 } 293 61 ?> -
_plugins_/hydraulic/trunk/hyd_inc/affiche_resultats.php
r95022 r95765 46 46 * @param $tAbs Tableau contenant les abscisses du résultat (paramètre qui varie) 47 47 * @param $tRes Tableau contenant les résultats du calcul 48 * @param $t ResTableau contenant les flags du résultats du calcul48 * @param $tFlag Tableau contenant les flags du résultats du calcul 49 49 */ 50 50 function AfficheResultats($datas, $tAbs, $tRes, $tFlag=false) { 51 $echo = ''; 51 52 $tLib = $datas['tLib']; 52 53 if(!isset($datas['ValVar'])) { … … 69 70 } 70 71 } 71 $ echo= GetResultTable($tCnt,$tEnt);72 $tableau_fixe = GetResultTable($tCnt,$tEnt); 72 73 73 74 // Affichage d'un tableau pour un paramètre qui varie … … 78 79 } 79 80 $tEnt = array($tLib[$datas['ValVar']],$tLib[$datas['ValCal']]); 80 $ echo .= '<table class="hyd_graph"><tr><td>'.GetResultTable($tCnt,$tEnt).'</td>';81 $tableau_variable = GetResultTable($tCnt,$tEnt); 81 82 82 83 // Si la première valeur est infinie alors ... … … 96 97 ****************************************************************************/ 97 98 include_spip('hyd_inc/graph.class'); 98 $oGraph = new cGraph(); 99 // Ligne de Lechapt et calmon 99 $oGraph = new cGraph('',$tLib[$datas['ValVar']],''); 100 100 if(isset($tRes)) { 101 101 $oGraph->AddSerie( … … 107 107 } 108 108 // Récupération du graphique 109 $ echo .= '<td>'.$oGraph->GetGraph('ligne_lechapt_calmon',400,600);110 $echo .= $tLib[$datas['ValVar']].'</td></tr></table>';109 $graph = $oGraph->GetGraph('graphique',400,600); 110 $echo = $graph."\n"; 111 111 } 112 $echo .= '<table class="hyd_graph"><tr><td>'.$tableau_fixe.'</td>'; 113 if(isset($tableau_variable)) { 114 $echo .= '<td width="5%"> </td><td>'.$tableau_variable.'</td>'; 115 } 116 $echo .= '</tr></table>'; 112 117 return $echo; 113 118 } -
_plugins_/hydraulic/trunk/hyd_inc/cache.php
r95022 r95765 1 1 <?php 2 2 3 define(' HYD_CACHE_DIRECTORY', _NOM_TEMPORAIRES_INACCESSIBLES.'hydraulic/');4 define(' HYD_CACHE_MAX_SIZE', 1024*1024);3 define('_HYD_CACHE_DIRECTORY', _NOM_TEMPORAIRES_INACCESSIBLES.'hydraulic/'); 4 define('_HYD_CACHE_MAX_SIZE', 1024*1024); 5 5 6 6 function WriteCacheFile($file_name, $file_content) { 7 if(!is_dir( HYD_CACHE_DIRECTORY)) {8 mkdir( HYD_CACHE_DIRECTORY);7 if(!is_dir(_HYD_CACHE_DIRECTORY)) { 8 mkdir(_HYD_CACHE_DIRECTORY); 9 9 } 10 if(is_dir( HYD_CACHE_DIRECTORY)) {10 if(is_dir(_HYD_CACHE_DIRECTORY)) { 11 11 if(mt_rand(0,5)==0) { 12 if(CacheSize()> HYD_CACHE_MAX_SIZE) {12 if(CacheSize()>_HYD_CACHE_MAX_SIZE) { 13 13 CacheCleanAll(); 14 14 } 15 15 } 16 $file_name = HYD_CACHE_DIRECTORY.$file_name;16 $file_name =_HYD_CACHE_DIRECTORY.$file_name; 17 17 if($fichier_cache = fopen($file_name,'w')) { 18 18 fwrite($fichier_cache,serialize($file_content)); … … 24 24 25 25 function ReadCacheFile($FileName) { 26 $FileName = HYD_CACHE_DIRECTORY.$FileName;26 $FileName = _HYD_CACHE_DIRECTORY.$FileName; 27 27 $aRetour = @unserialize(file_get_contents($FileName)); 28 28 return $aRetour; … … 35 35 */ 36 36 function CacheSize() { 37 $directory= HYD_CACHE_DIRECTORY;37 $directory=_HYD_CACHE_DIRECTORY; 38 38 $size = 0; 39 39 foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($directory)) as $file){ … … 45 45 46 46 function CacheCleanAll() { 47 $dp = opendir( HYD_CACHE_DIRECTORY);47 $dp = opendir(_HYD_CACHE_DIRECTORY); 48 48 while($file = readdir($dp)) { 49 49 if($file !== '.' and $file != '..') { 50 unlink( HYD_CACHE_DIRECTORY."/".$file);50 unlink(_HYD_CACHE_DIRECTORY."/".$file); 51 51 } 52 52 } -
_plugins_/hydraulic/trunk/hyd_inc/charge_datas.php
r68473 r95765 1 1 <?php 2 2 3 /** 4 * Charge les données d'un formulaire avec choix des variables fixées, qui varient et à calculer 5 * @param $bLibelles Remplit la clé tlib avec les libellés traduits des variables 6 * @return un tableau avec les clés suivantes: 7 * - Couples clés/valeur des champs du formulaire 8 * - iPrec : nombre de décimales pour la précision des calculs 9 * - tLib: tableau avec couples clés/valeurs des libellés traduits des champs du formulaire 10 * - sLang : la langue en cours 11 * - CacheFileName : Le nom du fichier de cache 12 * - min, max, pas : resp. le min, le max et le pas de variation de la variable qui varie 13 * - i : pointeur vers la variable qui varie 14 * - ValCal : Nom de la variable à calculer 15 * - ValVar : Nom de la variable qui varie 16 * @author David Dorchies 17 * @date Juillet 2012 18 */ 3 19 function charge_datas($bLibelles = true) { 4 20 global $spip_lang; … … 6 22 $tChOblig = champs_obligatoires(); 7 23 $tChCalc = champs_obligatoires(true); 8 //spip_log($tChOblig,'hydraulic'); 9 //spip_log($tChCalc,'hydraulic'); 24 spip_log($tChOblig,'hydraulic',_LOG_DEBUG); 10 25 $choix_radio = array(); 11 26 $tLib = array(); … … 17 32 if (_request($champ)){ 18 33 $datas[$champ] = _request($champ); 34 } else { 35 $datas[$champ] = 0.; 19 36 } 20 37 $datas[$champ] = str_replace(',','.',$datas[$champ]); // Bug #574 -
_plugins_/hydraulic/trunk/hyd_inc/courbe_remous.php
r59892 r95765 21 21 22 22 // Boucle de calcul de la courbe de remous 23 for($x = $xDeb + $dx; ($dx > 0 && $x <= $xFin) || ($dx < 0 && $x >= $xFin); $x += $dx) { 24 $trX[] = round($x,$iPrec); 25 $trY[] = (real)$oSection->CalcY_M1(end($trY)); 26 if($oParam->rDx > 0 xor !(end($trY) < $oSection->rHautCritique)) { 27 $oLog->Add(_T('hydraulic:arret_calcul').' '.$x. ' m'); 28 break; 29 } 30 } 31 return array($trX,$trY); 23 for($x = $xDeb + $dx; ($dx > 0 && $x <= $xFin) || ($dx < 0 && $x >= $xFin); $x += $dx) { 24 $rY = (real)$oSection->CalcY(end($trY)); 25 if($rY) { 26 if(end($trY) > $oSection->rHautNormale xor $rY > $oSection->rHautNormale) { 27 $oLog->Add(_T('hydraulic:pente_forte').' '.$x. ' m ('._T('hydraulic:reduire_pas').')',true); 28 } 29 $trX[] = round($x,$iPrec); 30 $trY[] = $rY; 31 } else { 32 $oLog->Add(_T('hydraulic:arret_calcul').' '.$x. ' m'); 33 break; 34 } 35 } 36 return array($trX,$trY); 32 37 } 33 38 ?> -
_plugins_/hydraulic/trunk/hyd_inc/dessinSection.class.php
r95022 r95765 49 49 private $hauteurDessin; // Hauteur du dessin en px 50 50 private $largeurDessin; // Largeur du dessin en px 51 private $mesCouleurs = array('red', 'blue', 'orange', 'green', 'grey', 'black'); // Couleur des différentes lignes 51 private $marges; // Marge à gauche et à droite du dessin pour le texte 52 private $mesCouleurs = array('red', 'blue', 'orange', 'green', 'grey', 'black', 'pink'); // Couleur des différentes lignes 52 53 private $sectionClass; 53 54 private $donnees = array(); … … 55 56 private $rSnXmax = 0; // Largeur maximum en m à figurer dans le dessin 56 57 57 function __construct($hauteur, $largeur, &$section, $lib_data) {58 function __construct($hauteur, $largeur, $marges, &$section, $lib_data) { 58 59 $this->hauteurDessin = (real) $hauteur; 59 $this->largeurDessin = (real) $largeur; 60 $this->largeurDessin = (real) $largeur - $marges*2; 61 $this->marges = (real) $marges; 60 62 $this->sectionClass = &$section; 61 63 $this->donnees = $lib_data; 62 64 // On détermine la valeur la plus grande dans le tableau 63 65 foreach($this->donnees as $val){ 64 if($val > $this-> ValMax){65 $this-> ValMax = $val;66 if($val > $this->rValMax){ 67 $this->rValMax = $val; 66 68 } 67 69 } … … 72 74 * Rajoute une ligne à notre dessin. 73 75 * $color correspond à la couleur de la ligne 74 * $val correspond à l'ordonnée exprimée en pixel de la ligne 75 */ 76 function AddRow($color, $val){ 77 $ligneDessin = '$("#dessinSection").drawLine(0,'.$val.','.$this->largeurDessin.','.$val.', {color: "'.$color.'"});'; 76 * $y correspond à l'ordonnée exprimée en pixel de la ligne 77 */ 78 function AddRow($color, $y){ 79 $gauche = $this->marges; 80 $droite = round($gauche + $this->largeurDessin); 81 $y = round($y); 82 $ligneDessin = " 83 cx.strokeStyle = \"$color\"; 84 cx.beginPath(); 85 cx.moveTo($gauche, $y); 86 cx.lineTo($droite, $y); 87 cx.stroke();"; 78 88 return $ligneDessin; 79 89 } … … 84 94 private function GetDessinY($val) { 85 95 // La valeur maximum de l'échelle en px correspondant à 10% de la hauteur afin de faire plus propre 86 return round($this->hauteurDessin * (1- 0.9*$val/$this-> ValMax), 1)-2;96 return round($this->hauteurDessin * (1- 0.9*$val/$this->rValMax), 1)-2; 87 97 } 88 98 … … 93 103 */ 94 104 private function GetDessinX($val,$Axe) { 95 return round(($this->largeurDessin-14) * (1/2 + $Axe*$val/$this->SnXmax), 1)+7;105 return $this->marges + round(($this->largeurDessin-14) * (1/2 + $Axe*$val/$this->SnXmax), 1)+7; 96 106 } 97 107 … … 123 133 124 134 // On définit le style de notre dessin 125 $dessin = '<style type="text/css"> 126 .canvas{ 127 position: relative; 128 width:'.$this->largeurDessin.'px; 129 height:'.$this->hauteurDessin.'px; 130 } 131 </style>'; 135 $dessin = '<canvas id="cvsSection" width="'.($this->largeurDessin+2*$this->marges).'" height="'.$this->hauteurDessin.'"></canvas>'; 132 136 133 137 // On créé la base de notre dessin de section 134 $dessin.= '<script type="text/javascript"> 135 $(document).ready(function(){'; 138 $dessin.= ' 139 <script type="text/javascript"> 140 var cx = document.getElementById("cvsSection").getContext("2d"); 141 cx.strokeStyle = "black";'; 136 142 // Récupération des coordonnées de la section à dessiner 137 143 $tCoordSn = $this->sectionClass->DessinCoordonnees(); … … 144 150 $xBergeGauche = $this->GetDessinX($LargeurBerge,-1); 145 151 $xBergeDroite = $this->GetDessinX($LargeurBerge,1); 146 $dessin.= '$("#dessinSection").drawLine('.$xBergeGauche.', 0, '.$xBergeGauche.','.$diffHautBerge.', {stroke: 1}); 147 $("#dessinSection").drawLine('.$xBergeDroite.', 0,'.$xBergeDroite.','.$diffHautBerge.', {stroke: 1});'; 152 $dessin.= " 153 cx.setLineDash([5]); 154 cx.beginPath(); 155 cx.moveTo($xBergeGauche, 0); 156 cx.lineTo($xBergeGauche, $diffHautBerge); 157 cx.moveTo($xBergeDroite, 0); 158 cx.lineTo($xBergeDroite, $diffHautBerge); 159 cx.stroke(); 160 cx.setLineDash([]);"; 148 161 149 162 // Dessin de la section 150 151 163 $tSnX = array(); 152 164 $tSnY = array(); … … 161 173 $tSnY[] = $this->GetDessinY($tCoordSn['y'][$i]); 162 174 } 163 $dessin.= '$("#dessinSection").drawPolyline( 164 ['.implode(',',$tSnX).'], 165 ['.implode(',',$tSnY).'], {stroke: 4});'; 166 167 // On ajoute les différentes lignes avec couleur + valeur 168 foreach($mesDonnees as $cle=>$valeur){ 169 if($cle != 'rYB'){ 170 $dessin.= $this->AddRow($valeur[1], $valeur[0]); 171 } 172 } 173 174 $dessin.= '}); 175 </script>'; 176 177 //Div qui va contenir notre dessin de section 178 $dessin.='<div id="dessinSection" class="canvas">'; 179 180 // Pour alterner le placement des libellés 181 $droiteGauche = 0; 175 $dessin .= sprintf(' 176 cx.lineWidth = 4; 177 cx.beginPath(); 178 cx.moveTo(%d,%d);',$tSnX[0],$tSnY[0]); 179 for($i=1; $i<count($tSnX); $i++) { 180 $dessin .= sprintf(' 181 cx.lineTo(%d,%d);',$tSnX[$i],$tSnY[$i]); 182 } 183 $dessin .= ' 184 cx.stroke(); 185 cx.lineWidth = 1.0;'; 186 187 // Affichage des valeurs pour chaque trait 188 $dessin .= ' 189 cx.font = "12px sans-serif";'; 190 $bDroiteGauche = true; // Pour alterner le placement des libellés 182 191 // On rajoute les différents libelles avec la couleur qui va bien 183 192 foreach($mesDonnees as $cle=>$valeur){ 184 193 if($cle != 'rYB'){ 185 $placement = ($droiteGauche%2==0)?'left: -80px':'right: -80px;'; 186 $dessin.= '<p style="position: absolute; top:'.($valeur[0]-8).'px;'.$placement.'; width: auto; display: inline-block; color:'.$valeur[1].'">'.$cle.' = '.round($this->donnees[$cle], $this->sectionClass->oP->iPrec).'</p>'; 187 $droiteGauche++; 194 list($y,$color) = $valeur; 195 // Ajout du trait 196 $dessin .= $this->AddRow($color, $y); 197 // Ajout du texte 198 $dessin .= ' 199 cx.fillStyle = "'.$color.'"; 200 cx.textAlign="'.((!$bDroiteGauche)?'left':'right').'";'; 201 $x = ($bDroiteGauche)?($this->marges-5):($this->marges+$this->largeurDessin+5); 202 $texte = $cle.' = '.round($this->donnees[$cle], $this->sectionClass->oP->iPrec); 203 $y += 4; 204 $dessin.= " 205 cx.fillText(\"$texte\",$x,$y);"; 206 $bDroiteGauche = !$bDroiteGauche; 188 207 } 189 208 } 190 209 191 $dessin.= '</div>'; 210 $dessin.= ' 211 </script>'; 192 212 193 213 return $dessin; -
_plugins_/hydraulic/trunk/hyd_inc/formulaire.php
r93248 r95765 9 9 */ 10 10 function hyd_formulaires_verifier($tData,$tCtrl) { 11 12 $erreurs = array(); 11 13 12 14 foreach($tCtrl as $Cle=>$Ctrl) { -
_plugins_/hydraulic/trunk/hyd_inc/graph.class.php
r60821 r95765 49 49 private $tSeries; //!< Tableau des séries 50 50 private $echo; //!< Chaine contenant le script jqPlot 51 private $tLabels; /// Respectivement les titres du graphique, des abscisses, des ordonnées 51 52 ///@todo Transférer les deux constantes de graduation dans la configuration du plugin 52 53 const nbTickXmax = 10; // Nbre max de graduation sur l'axe des abscisses 53 54 const nbTickYmax = 10; // Nbre max de graduation sur l'axe des ordonnées 54 55 55 function __construct( ) {56 function __construct($Title = '', $Xlabel='', $Ylabel='') { 56 57 $this->tSeries = array(); 58 $this->tLabels = array( 59 'title' => $Title, 60 'X' => $Xlabel, 61 'Y' => $Ylabel 62 ); 57 63 } 58 64 … … 85 91 $Xmin = min($tX); 86 92 $Xmax = max($tX); 87 93 88 94 if($Xmin == $Xmax){ 89 90 91 92 93 if($xMin == 0 && $Xmax == 0){94 95 96 97 95 $Xmin = $Xmin * 0.9; 96 $Xmax = $Xmax * 1.1; 97 } 98 99 if($Xmin == 0 && $Xmax == 0){ 100 $Xmin = -1; 101 $Xmax = 1; 102 } 103 98 104 $r1 = ($Xmax - $Xmin) / floatval($Tmax); 99 105 $r2 = floor($r1 * pow(10,(-floor(log10($r1))))*10)/10; … … 167 173 implode(', ',$tS)); 168 174 $this->echo .= ' 169 { 175 {'; 176 if($this->tLabels['title']) { 177 $this->echo .= ' 178 title:\''.$this->tLabels['title'].'\','; 179 } 180 $this->echo .= ' 170 181 seriesDefaults: {showMarker:false},'; 171 182 $tS = array(); … … 196 207 $this->echo .= sprintf(' 197 208 axes:{ 198 xaxis:{min:%s, 209 xaxis:{ 210 label:\'%s\', 211 labelRenderer: $.jqplot.CanvasAxisLabelRenderer, 212 min:%s, 199 213 max:%s, 200 214 tickInterval:%s}, 201 yaxis:{min:%s, 215 yaxis:{ 216 label:\'%s\', 217 labelRenderer: $.jqplot.CanvasAxisLabelRenderer, 218 min:%s, 202 219 max:%s, 203 220 tickInterval:%s, … … 206 223 } 207 224 }); 208 </script>', $Xmin, $Xmax, $XTick, $Ymin, $Ymax, $YTick); 225 </script>', 226 $this->tLabels['X'],$Xmin,$Xmax,$XTick, 227 $this->tLabels['Y'],$Ymin,$Ymax,$YTick); 209 228 210 229 return $this->echo; -
_plugins_/hydraulic/trunk/hyd_inc/ouvrage.class.php
r95022 r95765 72 72 * - CT : Coefficient de débit partie triangulaire pour les trapézoïdales 73 73 * - CS : Coefficient de débit de la surverse 74 * - P: Précision du calcul74 * - rPrec : Précision du calcul 75 75 */ 76 76 private $tP = array(); … … 222 222 $rVarC=$X; 223 223 list($Q,$nFlag) = $this->OuvrageQ(); 224 if($QT!=0 && abs($Q/$QT-1.) <= $this->tP[' P']) {break;}224 if($QT!=0 && abs($Q/$QT-1.) <= $this->tP['rPrec']) {break;} 225 225 if($QT < $Q xor $Q1 <= $Q2) { 226 226 // QT < IQ et Q(X1) > Q(X2) ou pareil en inversant les inégalités -
_plugins_/hydraulic/trunk/hyd_inc/section.class.php
r95022 r95765 40 40 public $iPrec; /// Précision en nombre de décimales 41 41 public $rYB; /// Hauteur de berge 42 43 function __construct($rKs, $rQ, $rIf, $rPrec, $rYB, $rYCL = 0, $rDx = 0, $rLong = 0) { 42 public $sResolution; /// Méthode de résolution "Euler" ou "RK4" 43 44 function __construct($rKs, $rQ, $rIf, $rPrec, $rYB, $rYCL = 0, $rDx = 0, $rLong = 0, $sResolution = '') { 45 $this->sResolution = $sResolution; 44 46 $this->rYCL=(real) $rYCL; 45 47 $this->rKs=(real) $rKs; … … 149 151 } 150 152 //~ spip_log($this->arCalc,'hydraulic.'._LOG_DEBUG); 151 if(!isset($this->arCalc[$sDonnee]) | !$this->arCalc[$sDonnee]) {153 if(!isset($this->arCalc[$sDonnee]) | (isset($this->arCalc[$sDonnee]) && !$this->arCalc[$sDonnee])) { 152 154 // La donnée a besoin d'être calculée 153 155 switch($sDonnee) { … … 378 380 * @return Tirant d'eau 379 381 */ 380 public function CalcY_ M1($Y) {382 public function CalcY_Euler($Y) { 381 383 // L'appel à Calc('J') avec Y en paramètre réinitialise toutes les données dépendantes de la ligne d'eau 382 return $Y+ $this->oP->rDx * $this->CalcdYdX($Y); 383 } 384 $Y2 = $Y+ $this->oP->rDx * $this->CalcdYdX($Y); 385 if($this->oP->rDx > 0 xor !($Y2 < $this->rHautCritique)) { 386 return false; 387 } else { 388 return $Y2; 389 } 390 } 391 384 392 385 393 /** … … 391 399 $rDx = $this->oP->rDx; 392 400 $rk1 = $this->CalcdYdX($Y); 401 if($this->oP->rDx > 0 xor !($Y + $rDx / 2 * $rk1 < $this->rHautCritique)) {return false;} 393 402 $rk2 = $this->CalcdYdX($Y + $rDx / 2 * $rk1); 403 if($this->oP->rDx > 0 xor !($Y + $rDx / 2 * $rk2 < $this->rHautCritique)) {return false;} 394 404 $rk3 = $this->CalcdYdX($Y + $rDx / 2 * $rk2); 405 if($this->oP->rDx > 0 xor !($Y + $rDx / 2 * $rk3 < $this->rHautCritique)) {return false;} 395 406 $rk4 = $this->CalcdYdX($Y + $rDx * $rk3); 407 if($this->oP->rDx > 0 xor !($Y + $rDx / 6 * ($rk1 + 2 * ($rk2 + $rk3) + $rk4) < $this->rHautCritique)) {return false;} 396 408 return $Y + $rDx / 6 * ($rk1 + 2 * ($rk2 + $rk3) + $rk4); 409 } 410 411 412 /** 413 * Calcul du point suivant d'une courbe de remous 414 * @return Tirant d'eau 415 */ 416 public function CalcY($rY) { 417 $funcCalcY = 'CalcY_'.$this->oP->sResolution; 418 if(method_exists($this,$funcCalcY)) { 419 return $this->$funcCalcY($rY); 420 } else { 421 return false; 422 } 397 423 } 398 424 -
_plugins_/hydraulic/trunk/hyd_inc/section.php
r93248 r95765 28 28 * - Caractéristiques des différents types de section 29 29 * - Caractéristiques du bief 30 * @param $bCourbe Pour ajouter la longueur du bief dans la liste des champs (calcul courbe de remous) 30 31 */ 31 function caract_communes() { 32 // Tableau niveau 1 : Composantes 33 // pour chaque variable, a clé est le nom de la variable dans le formulaire, et la valeur contient un tableau avec le code de langue, la valeur par défaut et les tests de de vérification à effectuer sur le champ (o : obligatoire, p : positif, n : nul) 34 32 function mes_saisies_section($bCourbe=false) { 33 /* Tableau niveau 1 : Composantes pour chaque variable, la clé est le nom de 34 * la variable dans le formulaire, et la valeur contient un tableau avec le 35 * code de langue, la valeur par défaut et les tests de de vérification à 36 * effectuer sur le champ (o : obligatoire, p : positif, n : nul accepté) 37 */ 35 38 $caract_com = array( 36 39 'FT' => array( … … 45 48 'def_section_rect', 46 49 array( 47 'rLargeur Berge' =>array('largeur_fond',2.5,'op'),50 'rLargeurFond' =>array('largeur_fond',2.5,'op'), 48 51 ) 49 52 ), … … 68 71 'caract_bief', 69 72 array( 70 'rKs' =>array('coef_strickler',50,'op'), 71 'rLong' =>array('longueur_bief',50,'op'), 72 'rIf' =>array('pente_fond',0.005,'opn'), 73 'rYBerge'=>array('h_berge',1,'opn') 74 ) 75 ); 73 'rKs' =>array('coef_strickler',40,'op'))); 74 if($bCourbe) { 75 // Pour la courbe de remous, on a besoin de la longueur du bief en plus 76 $caract_com['c_bief'][1]['rLong'] = array('longueur_bief',100,'op'); 77 } 78 $caract_com['c_bief'][1]['rIf'] = array('pente_fond',0.001,'opn'); 79 $caract_com['c_bief'][1]['rYB'] = array('h_berge',1,'opn'); 76 80 77 81 return $caract_com; -
_plugins_/hydraulic/trunk/hydraulic.css.html
r93248 r95765 42 42 .hyd_erreur { 43 43 background-color: #FBE3E4; 44 }45 46 47 .hyd_erreur {48 44 color: red; 49 45 } … … 66 62 width: 60%; 67 63 padding: 0.5em; 68 align: center;64 text-align: center; 69 65 margin: 0.5em; 70 66 } … … 96 92 } 97 93 98 #jqplot _ligne_lechapt_calmon, #jqplot_courbe_remous, #jqplot_ligne_normale_critique{94 #jqplot, #jqplot, #jqplot{ 99 95 margin: 0 auto; 100 96 } … … 121 117 } 122 118 123 #tableau_nc { 124 margin: 0 auto; 125 } 126 127 #resultat_nc, #resultat_lechapt_calmon { 119 #hyd_resultat { 128 120 text-align: center; 129 121 } … … 132 124 vertical-align:top; 133 125 } 126 127 .hyd_inlineblock { 128 display: inline-block; 129 vertical-align: top; 130 margin: 0px 5px; 131 } -
_plugins_/hydraulic/trunk/lang/hydraulic_en.php
r95022 r95765 21 21 'calculer_lechapt_calmon' => "Calculation with Lechapt and Calmon formula", 22 22 'calcul_val' => "Value to calculate", 23 'choix_section' => "Choice of section type",24 23 'caract' => "Features", 25 24 'caract_globale' => "Overall features", 25 'caract_hydraulique'=> "Hydraulic features", 26 26 'caract_ouvrages' => "Device features", 27 27 'charge_spe' => "Specific head (m)", 28 28 'choix_donnee_calc' => "Choice of the data to compute", 29 29 'choix_ouvrage' => "Device", 30 'choix_resolution' => "Resolution method", 31 'choix_section' => "Choice of section type", 30 32 'charge_critique' => "Critical head (m)", 31 33 'cote_eau' => "Water level (m)", … … 46 48 'erreur_val_positive' => "This value must be strictly positive", 47 49 'erreur_val_positive_nulle' => "This value must be positive or null", 50 'euler_explicite' => "Explicit Euler", 48 51 // F 49 52 'flag_erreur_calcul'=> "Calculation error", … … 120 123 'param_ZM' => "Cote de l'eau à l'amont (m)", 121 124 'param_ZV' => "Côte de l'eau à l'aval (m)", 125 'pente_forte' => "The water line slope is too steep at abscissa", 122 126 'precision' => "Display accuracy (m)", 123 127 'perim_mouille' => "Wetted perimeter", … … 125 129 //R 126 130 'rayon_hyd' => "Hydraulic radius", 131 'reduire_pas' => "The discretisation step should be reduced", 127 132 'rugosite_nc' => "Roughness (Strickler m<sup>1/3</sup>s<sup>-1</sup>)", 133 'runge_kutta' => "Runge–Kutta fourth-order", 128 134 //S 129 135 'saisie_erreur' => "Your entry contains errors!", -
_plugins_/hydraulic/trunk/lang/hydraulic_fr.php
r95022 r95765 21 21 'calculer_lechapt_calmon' => "Calcul avec la formule de Lechapt et Calmon", 22 22 'calcul_val' => "Paramètre à calculer", 23 'choix_section' => "Choix du type de section",24 23 'caract' => "Caractéristiques", 25 24 'caract_globale' => "Caractéristiques globales", 25 'caract_hydraulique'=> "Caractéristiques hydrauliques", 26 26 'caract_ouvrages' => "Caractéristiques de l'ouvrage", 27 27 'charge_spe' => "La charge spécifique (m)", 28 28 'choix_donnee_calc' => "Choix de la donnée à calculer", 29 29 'choix_ouvrage' => "Ouvrage", 30 'choix_resolution' => "Méthode de résolution", 31 'choix_section' => "Choix du type de section", 30 32 'charge_critique' => "La charge critique (m)", 31 33 'cote_eau' => "Cote de l'eau (m)", … … 46 48 'erreur_val_positive' => "Cette valeur doit être strictement positive", 47 49 'erreur_val_positive_nulle' => "Cette valeur doit être positive ou nulle", 50 'euler_explicite' => "Euler explicite", 48 51 // F 49 52 'flag_erreur_calcul'=> "Erreur de calcul", … … 120 123 'param_ZM' => "Cote de l'eau à l'amont (m)", 121 124 'param_ZV' => "Côte de l'eau à l'aval (m)", 125 'pente_forte' => "La pente de la ligne d'eau est trop forte à l'abscisse", 122 126 'precision' => "Précision de calcul(m)", 123 127 'perim_mouille' => "Le périmètre mouillé (m)", … … 125 129 //R 126 130 'rayon_hyd' => "Le rayon hydraulique (m)", 131 'reduire_pas' => "Il faudrait réduire le pas de discrétisation", 127 132 'rugosite_nc' => "Rugosité (Strickler en m<sup>1/3</sup>s<sup>-1</sup>)", 133 'runge_kutta' => "Runge Kutta d'ordre 4", 128 134 //S 129 135 'saisie_erreur' => "Votre saisie contient des erreurs !", -
_plugins_/hydraulic/trunk/plugin.xml
r95022 r95765 5 5 <auteur>David Dorchies, Médéric Dulondel</auteur> 6 6 <licence>GNU/GLP</licence> 7 <version>0.7. 2</version>7 <version>0.7.3</version> 8 8 <necessite id="lib:dist" src="https://bitbucket.org/cleonello/jqplot/downloads/jquery.jqplot.1.0.8r1250.zip" /> 9 9 <slogan>
Note: See TracChangeset
for help on using the changeset viewer.