PageRenderTime 73ms CodeModel.GetById 24ms RepoModel.GetById 0ms app.codeStats 0ms

/gespac/gestion_demandes/form_demandes.php

http://gespac.googlecode.com/
PHP | 507 lines | 346 code | 118 blank | 43 comment | 47 complexity | 7b389ea22d73f1dad1a00e5bdd905f46 MD5 | raw file
  1. <?PHP
  2. #formulaire de cr?ation / modification d'une demande
  3. include ('../includes.php'); // fichier contenant les fonctions, la config pear, les mdp databases ...
  4. $id = $_GET['id'];
  5. // si le grade du compte est root, on donne automatiquement les droits d'acc?s en ?criture. Sinon, on teste si le compte a acc?s ? la page.
  6. $E_chk = ($_SESSION['grade'] == 'root') ? true : preg_match ("#E-03-02#", $_SESSION['droits']);
  7. ?>
  8. <!-- DIV target pour Ajax -->
  9. <div id="target"></div>
  10. <!-- FONCTIONS JAVASCRIPT -->
  11. <script>
  12. // init de la couleur de fond
  13. $('conteneur').style.backgroundColor = "#fff";
  14. // Sur changement du type on affiche ou pas la salle et les pc
  15. function change_type(type) {
  16. var tr_salle = $("tr_salle");
  17. var tr_pc = $("tr_pc");
  18. var tr_texte = $("tr_texte");
  19. // Si le type de demande est "installation" ou "reparation"
  20. if ( type == "installation" || type == "reparation") {
  21. tr_salle.style.display = "";
  22. tr_pc.style.display = "none";
  23. tr_texte.style.display = "none";
  24. }
  25. else { // Si c'est un autre type
  26. tr_salle.style.display = "none";
  27. tr_pc.style.display = "none";
  28. tr_texte.style.display = "";
  29. }
  30. // Si le type est vide ...
  31. if ( type == "" ) {
  32. tr_salle.style.display = "none";
  33. tr_pc.style.display = "none";
  34. tr_texte.style.display = "none";
  35. }
  36. }
  37. // Sur changement de la salle on affiche le champ pc et on le remplit avec les pc de la salle <- [AMELIORATION] Ouh ! qu'il est laid ce code !
  38. function change_salle(salle_id) {
  39. var tr_pc = $("tr_pc");
  40. var pc_demande = $("pc_demande");
  41. tr_pc.style.display = "";
  42. pc_demande[0] = new Option(">>>S?lectionner un PC<<<","");
  43. pc_demande[1] = new Option("TOUTE LA SALLE",0);
  44. <?PHP
  45. // adresse de connexion ? la base de donn?es
  46. $dsn_gespac = 'mysql://'. $user .':' . $pass . '@localhost/' . $gespac;
  47. // cnx ? la base de donn?es GESPAC
  48. $db_gespac = & MDB2::factory($dsn_gespac);
  49. // requ?te qui va afficher dans le menu d?roulant les pc de la salle selectionn?e
  50. $sql = "SELECT mat_id, mat_nom FROM materiels WHERE salle_id = 1";
  51. $req_salles_disponibles = $db_gespac->queryAll ( $sql );
  52. $compteur = 2; // Commence ? 2 car on ajoute S?lectionner un PC et toute la salle ? 0 et 1
  53. foreach ( $req_salles_disponibles as $record) {
  54. $mat_id = $record[0];
  55. $mat_nom = $record[1];
  56. ?>
  57. // On remplit la liste du select en JS
  58. pc_demande[<?PHP echo $compteur ?>] = new Option("<?PHP echo $mat_nom ?>",<?PHP echo $mat_id ?>);
  59. <?PHP $compteur++; } ?>
  60. }
  61. // affichage des anciennes demandes pour ce mat?riel
  62. function affiche_ancienne_inter (pc) {
  63. // a faire en ajax, un peu comme le chainage des CB
  64. }
  65. // Sur changement du PC on affiche le champ texte
  66. function change_pc () {
  67. var tr_texte = $("tr_texte");
  68. tr_texte.style.display = "";
  69. }
  70. // serveur AJAX mootools pour le chainage des combobox SALLE - PC
  71. function chainage_salle_pc( select, id, div_id ) {
  72. if ( select.options[0].value == '' ) {
  73. select.options[0] = null;
  74. }
  75. var myRequest = new Request(
  76. {
  77. url: 'gestion_demandes/chain_salle-mat.php',
  78. method: 'get',
  79. evalResponse: true,
  80. onRequest: function() {
  81. $(div_id).style.display = 'none';
  82. },
  83. onFailure: function(xhr) {
  84. window.alert("Erreur !");
  85. },
  86. onComplete: function(response) {
  87. $(div_id).style.display = '';
  88. }
  89. }
  90. ).send('value='+select.value+'&id_to_modify='+id+'&div_id='+div_id);
  91. }
  92. // serveur AJAX mootools pour le chainage PC - historique des demandes
  93. function chainage_pc_historique( pc_id, div_id ) {
  94. var salle_id = document.getElementById("salle_demande").value;
  95. var myRequest = new Request(
  96. {
  97. url: 'gestion_demandes/chain_pc-histo_demandes.php',
  98. method: 'get',
  99. evalResponse: true,
  100. onRequest: function() {
  101. $(div_id).style.display = 'none';
  102. },
  103. onFailure: function(xhr) {
  104. window.alert("Erreur !");
  105. },
  106. onComplete: function(response) {
  107. $(div_id).style.display = '';
  108. }
  109. }
  110. ).send('mat='+pc_id.value+'&salle='+salle_id+'&div_id='+div_id);
  111. }
  112. // affiche / masque l'historique
  113. function montre_masque_historique( ) {
  114. var historique = $("historique");
  115. if ( historique.style.display == "none" )
  116. historique.style.display = "";
  117. else
  118. historique.style.display = "none";
  119. }
  120. // *********************************************************************************
  121. //
  122. // v?rouille l'acc?s au bouton submit si les conditions ne sont pas remplies
  123. //
  124. // *********************************************************************************
  125. function validation () {
  126. var bt_submit = $("post_demandes");
  127. var commentaire = $("texte_demande").value;
  128. var type = $("type_demande").value;
  129. var salle = $("salle_demande").value;
  130. var pc = $("pc_demande").value;
  131. if ( type == "installation" || type == "reparation") {
  132. if (commentaire == "" || type == "" || salle == "" || pc == "") {
  133. bt_submit.disabled = true;
  134. } else {
  135. bt_submit.disabled = false;
  136. }
  137. } else {
  138. if (commentaire == "" || type == "" ) {
  139. bt_submit.disabled = true;
  140. } else {
  141. bt_submit.disabled = false;
  142. }
  143. }
  144. }
  145. // *************************************************************************************************************
  146. //
  147. // v?rouille l'acc?s au bouton submit si les conditions ne sont pas remplies pour la r?ponse ? un dossier
  148. //
  149. // *************************************************************************************************************
  150. function validation_reponse () {
  151. var bt_submit = $("post_reponse");
  152. var commentaire = $("reponse_texte").value;
  153. if (commentaire == "") {
  154. bt_submit.disabled = true;
  155. } else {
  156. bt_submit.disabled = false;
  157. }
  158. }
  159. /******************************************
  160. *
  161. * AJAX
  162. *
  163. *******************************************/
  164. window.addEvent('domready', function(){
  165. $('post_form').addEvent('submit', function(e) { // Pour poster un formulaire
  166. new Event(e).stop();
  167. new Request({
  168. method: this.method,
  169. url: this.action,
  170. onSuccess: function(responseText, responseXML) {
  171. $('target').set('html', responseText);
  172. $('conteneur').set('load', {method: 'post'}); //On change la methode d'affichage de la page de GET ? POST (en effet, avec GET il r?cup?re la totalit? du tableau get en param?tres et lorsqu'on poste la page formation on d?passe la taille maxi d'une url)
  173. window.setTimeout("$('conteneur').load('gestion_demandes/voir_demandes.php');", 1500);
  174. SexyLightbox.close();
  175. }
  176. }).send(this.toQueryString());
  177. });
  178. });
  179. </script>
  180. <style>
  181. td { border : 1px solid #ccc; }
  182. </style>
  183. <?PHP
  184. // adresse de connexion ? la base de donn?es
  185. $dsn_gespac = 'mysql://'. $user .':' . $pass . '@localhost/' . $gespac;
  186. // cnx ? la base de donn?es GESPAC
  187. $db_gespac = & MDB2::factory($dsn_gespac);
  188. if ( $id == -1 ) {
  189. /*********************************************
  190. *
  191. * CREATION
  192. *
  193. ***********************************************/
  194. echo "<h2>Cr?er le dossier</h2><br>";
  195. ?>
  196. <form action="gestion_demandes/post_demandes.php?action=add" method="post" name="post_form" id="post_form" onsubmit="$('post_demandes').disabled=true;">
  197. <center>
  198. <table width=500>
  199. <tr id="tr_type">
  200. <TD>Type</TD>
  201. <TD><select id="type_demande" name="type_demande" onChange="change_type(type_demande.value); $('salle_demande').value=''; $('pc_demande').value='';validation();">
  202. <option selected value=""> >>> Type de demande <<< </option>
  203. <option value="installation">Installation</option>
  204. <option value="reparation">R?paration</option>
  205. <option value="usages">Usages</option>
  206. <option value="formation">Formation</option>
  207. <option value="autre">Autre...</option>
  208. </select>
  209. </TD>
  210. </tr>
  211. <tr id="tr_salle" style='display:none'>
  212. <TD>Salle</TD>
  213. <TD><select id="salle_demande" name="salle_demande" onChange="chainage_salle_pc(this, 'pc_demande', 'tr_pc') ; $('pc_demande').value = ''; validation();">
  214. <option selected value=''> >>>S?lectionner une salle<<< </option>
  215. <?PHP
  216. // requ?te qui va afficher dans le menu d?roulant les salles saisies dans la table 'salles' sauf les salles MATERIEL VOLE et D3E
  217. $req_salles_disponibles = $db_gespac->queryAll ( "SELECT salle_nom, salle_id FROM salles WHERE NOT salle_nom='PRETS' AND NOT salle_nom='MATERIEL VOLE'ORDER BY salle_nom" );
  218. foreach ( $req_salles_disponibles as $record) {
  219. $salle_nom = $record[0];
  220. $salle_id = $record[1];
  221. ?>
  222. <option value="<?PHP echo $salle_id ?>"><?PHP echo $salle_nom ?></option>
  223. <?PHP
  224. }
  225. ?>
  226. </select>
  227. </TD>
  228. </tr>
  229. <tr id="tr_pc" style='display:none'>
  230. <TD>PC</TD>
  231. <TD><select id="pc_demande" name="pc_demande" onChange="change_pc();chainage_pc_historique(this,'historique'); validation();"></select>
  232. </TD>
  233. </tr>
  234. <TR id="tr_texte" style='display:none'>
  235. <TD>Probl?me</TD>
  236. <TD><textarea cols=45 rows=15 id="texte_demande" name="texte_demande" onkeyup="validation();"></textarea></TD>
  237. </TR>
  238. </table>
  239. <?PHP
  240. // L'utilisateur avec des droits d'?criture sur inter peut cr?er directement l'intervention
  241. if ( $E_chk ) { ?>
  242. <br>
  243. <br>
  244. Cr?er directement l'intervention <input type=checkbox name=creat_inter id=creat_inter>
  245. <?PHP } ?>
  246. <br>
  247. <br>
  248. <input type="submit" id="post_demandes" value='Envoyer la demande' disabled>
  249. </center>
  250. </FORM>
  251. <div id=historique></div>
  252. <?PHP
  253. } else {
  254. /*********************************************
  255. *
  256. * MODIFICATION
  257. *
  258. ***********************************************/
  259. $req_info_demande = $db_gespac->queryAll ( "SELECT dem_id, dem_date, dem_text, dem_etat, user_demandeur_id, user_intervenant_id, user_nom, dem_type FROM demandes, users WHERE demandes.user_demandeur_id=users.user_id AND dem_id=$id ORDER BY dem_date" );
  260. $dem_id = $req_info_demande[0][0];
  261. $dem_date = $req_info_demande[0][1];
  262. $dem_text = stripslashes($req_info_demande[0][2]);
  263. $dem_etat = $req_info_demande[0][3];
  264. $user_demandeur_id = $req_info_demande[0][4];
  265. $user_intervenant_id = $req_info_demande[0][5];
  266. $user_demandeur_nom = stripslashes($req_info_demande[0][6]);
  267. $dem_type = $req_info_demande[0][7];
  268. // On r?cup?re la salle et le materiel si c'est une installation ou une reparation
  269. if ( $dem_type == "installation" || $dem_type == "reparation" ) {
  270. $rq_extraction_salle_mat = $db_gespac->queryAll ( "SELECT demandes.mat_id, demandes.salle_id, salle_nom FROM demandes, salles, users WHERE salles.salle_id=demandes.salle_id AND demandes.user_demandeur_id=users.user_id AND dem_id=$dem_id" );
  271. $mat_id = $rq_extraction_salle_mat [0][0];
  272. $salle_id = $rq_extraction_salle_mat [0][1];
  273. $salle_nom = stripslashes($rq_extraction_salle_mat [0][2]);
  274. // On r?cup?re le nom du mat?riel
  275. if ( $mat_id <> 0) {
  276. $liste_nom_materiel = $db_gespac->queryAll ( "SELECT mat_nom FROM materiels WHERE mat_id=$mat_id" );
  277. $mat_nom = stripslashes($liste_nom_materiel[0][0]);
  278. }
  279. else { $mat_nom = "TOUS"; }
  280. } else {
  281. $mat_nom = "NA";
  282. $salle_nom = "NA";
  283. }
  284. echo "<h2>R?pondre au dossier <b>$dem_id</b> cr?? le : $dem_date</h2><br>";
  285. echo " <center>
  286. <table width=700px>
  287. <th>Etat</th>
  288. <th>Type</th>
  289. <th>Demandeur</th>
  290. <th>Salle</th>
  291. <th>Mat?riel</th>
  292. <tr>
  293. <td>$dem_etat</td>
  294. <td>$dem_type</td>
  295. <td>$user_demandeur_nom</td>
  296. <td>$salle_nom</td>
  297. <td>$mat_nom</td>
  298. </tr>
  299. <tr>
  300. <td colspan=7>$dem_text</td>
  301. </tr>
  302. </table>
  303. ";
  304. // on g?re ici le style:display du div reponse (si le dossier est clotur?, on n'affiche pas le div)
  305. $montre_reponse = $dem_etat == "cloturer" ? "none" : "";
  306. ?>
  307. <br>
  308. <!-- BLOC DE REPONSE A LA DEMANDE -->
  309. <div id="reponse" style="display:<?PHP echo $montre_reponse; ?>">
  310. <form action="gestion_demandes/post_demandes.php?action=mod" method="post" name="post_form" id="post_form" onsubmit="$('post_reponse').disabled=true;">
  311. <input type=hidden name="dossier" value= <?PHP echo $id;?> >
  312. <input type=hidden name="salle" value= <?PHP echo $salle_id;?> >
  313. <input type=hidden name="mat" value= <?PHP echo $mat_id;?> >
  314. <textarea name="reponse" id='reponse_texte' cols=65 rows=10 onkeyup="validation_reponse();" ></textarea>
  315. <br>
  316. <label>Changer l'?tat : </label>
  317. <select name="etat">
  318. <option value=rectifier> Rectifier le dossier </option>
  319. <?PHP
  320. if ( $E_chk ) { ?>
  321. <option value=precisions> Demander pr?cisions </option>
  322. <?PHP
  323. // Ici il faut voir si le dossier est d?j? en cours d'intervention
  324. $inter_existe = $db_gespac->queryOne ( "SELECT interv_id FROM interventions WHERE dem_id=$id;" );
  325. if ( !$inter_existe ) {
  326. echo "<option value=intervention> Cr?er l'intervention </option>";
  327. echo "<option value=clos> Clore le dossier </option>";
  328. }
  329. /*
  330. // Si le dossier est en cours d'intervention, on ne peut pas le fermer
  331. $inter_en_cours = $db_gespac->queryOne ( "SELECT interv_id FROM interventions WHERE dem_id=$id AND interv_cloture='' ;" );
  332. if ( $inter_en_cours ) echo "<option value=clos> Clore le dossier </option>";*/
  333. ?>
  334. <?PHP
  335. }
  336. ?>
  337. </select>
  338. <input type=submit id='post_reponse' value=poster disabled >
  339. </form>
  340. </div>
  341. <br>
  342. <small><a href='#' onclick='javascript:montre_masque_historique();'>afficher/masquer l'historique</a></small>
  343. <br>
  344. <!-- BLOC HISTORIQUE DU DOSSIER -->
  345. <div id="historique" style='padding:10px;'>
  346. <?PHP
  347. // historique des demandes
  348. $historique_demandes = $db_gespac->queryAll ( "SELECT txt_date, txt_texte, user_nom, txt_etat FROM demandes_textes, users WHERE dem_id=$id AND users.user_id=demandes_textes.user_id ORDER BY txt_date DESC;" );
  349. echo "<table style='border: 1px solid #ccc;width:700px;'>
  350. <th>Date</th>
  351. <th>Intervenant</th>
  352. <th>Etat</th>
  353. <th>commentaire</th>";
  354. foreach ( $historique_demandes as $record ) {
  355. $txt_date = $record[0];
  356. $txt_texte = stripslashes($record[1]);
  357. $user_nom = stripslashes($record[2]);
  358. $txt_etat = $record[3];
  359. echo "
  360. <tr>
  361. <td>$txt_date</td>
  362. <td>$user_nom</td>
  363. <td>$txt_etat</td>
  364. <td>$txt_texte</td>
  365. </tr>";
  366. }
  367. echo "</table>";
  368. ?>
  369. </div>
  370. <?PHP
  371. }
  372. ?>