PageRenderTime 44ms CodeModel.GetById 18ms RepoModel.GetById 1ms app.codeStats 0ms

/_plugins_/siou/odb_repartition/exec/inc-base.php

https://bitbucket.org/pombredanne/spip-zone-treemap
PHP | 259 lines | 169 code | 17 blank | 73 comment | 13 complexity | d589cdbd5f26e7a246dc13ec16b64c9b MD5 | raw file
  1. <?php
  2. /** Recupere le tableau de capacite d'accueil d'un centre de composition
  3. * @param string annee : annee
  4. * @param int $idCentre : centre de composition
  5. * @param string $typeSalle : type de salle
  6. * @return array : tableau des capacites (par id_salle : capacite_type, capacite_salle, dispo, salle)
  7. */
  8. function getCapacite($annee,$idCentre,$typeSalle) {
  9. $sql = 'SELECT * , nb_salles * capacite capacite_type , nb_salles * capacite - nb_repartis dispo '
  10. . ' FROM odb_ref_salle salle '
  11. . ' LEFT JOIN ( '
  12. . ' SELECT id_salle , count( * ) nb_repartis '
  13. . ' FROM odb_repartition rep2 '
  14. . " WHERE annee=$annee"
  15. . ' GROUP BY id_salle '
  16. . " ) rep ON salle.id = rep.id_salle "
  17. . " WHERE salle.annee=$annee AND salle.id_etablissement=$idCentre AND salle.salle='$typeSalle' "
  18. . ' ORDER BY dispo DESC'
  19. ;
  20. $result=odb_query($sql,__FILE__,__LINE__);
  21. while($row=mysql_fetch_array($result)) { // on prend seulement la 1e ligne
  22. $id_salle=$row['id'];
  23. $dispo=$row['dispo'];
  24. if($dispo=='') $dispo=$row['capacite_type'];
  25. $tab_capacite[$id_salle]['capacite_type']=$row['capacite_type'];
  26. $tab_capacite[$id_salle]['capacite_salle']=$row['capacite'];
  27. $tab_capacite[$id_salle]['dispo']=$dispo;
  28. $tab_capacite[$id_salle]['salle']=$row['salle'];
  29. }
  30. return $tab_capacite;
  31. }
  32. /** Recupere le tableau des candidats a repartir
  33. * @param string $annee
  34. * @param array $par : peut etre un tableau
  35. * @param string $filtre : '' si $par est un tableau
  36. * @param int $limit
  37. * @return array : tableau des candidats (par id_saisie : dept, ville, etablissement)
  38. */
  39. function getCandidatsARepartir($annee,$par,$filtre,$limit) {
  40. $sql="SELECT id_saisie, serie, etablissement, ville, departement, (year( ne_le ) + CAST( ne_en AS unsigned ) + CAST( ne_vers AS unsigned)) as ann\n"
  41. . " from odb_candidats can\n"
  42. . " where annee=$annee\n"
  43. . " and id_saisie NOT IN (select id_saisie from odb_repartition where annee=$annee)\n"
  44. ;
  45. if(is_array($par)) {
  46. foreach($par as $key=>$val) {
  47. $$key=$val;
  48. if($val>0) $sql.=" AND $key='$val'\n";
  49. }
  50. } elseif($filtre!='') $sql.=" AND $par='$filtre'\n";
  51. $sql.=" order by departement, serie, ann, ne_en, nom, prenoms\n";
  52. if($limit>0) $sql.=" LIMIT 0, $limit";
  53. //echo $sql;
  54. $result=odb_query($sql,__FILE__,__LINE__);
  55. while($row=mysql_fetch_array($result)) {
  56. $id_saisie=$row['id_saisie'];
  57. $tab_candidat[$id_saisie]['id_departement']=$row['departement'];
  58. $tab_candidat[$id_saisie]['id_ville']=$row['ville'];
  59. $tab_candidat[$id_saisie]['id_etablissement']=$row['etablissement'];
  60. }
  61. return $tab_candidat;
  62. }
  63. /** Recupere le plus grand id_table disponible pour le centre de composition
  64. *
  65. * @param string $annee
  66. * @param int $idCentre
  67. * @param string $typeSalle : type de salle (facultatif)
  68. * @return string : id_table ('' si aucun id_table n'existe dans ce centre)
  69. */
  70. function getIdTableMax($annee,$idCentre,$typeSalle='') {
  71. $sql="SELECT max(id_table) id_table\n from odb_repartition\n"
  72. . " where id_table like '$idCentre-$typeSalle%' and annee=$annee";
  73. $result=odb_query($sql,__FILE__,__LINE__);
  74. $row=mysql_fetch_array($result);
  75. $id=$row['id_table'];
  76. return $id;
  77. }
  78. /** Recupere le rang (numero de salle et de table) d'un candidat dans une salle
  79. *
  80. * @param string $annee
  81. * @param int $idCentre : centre de composition
  82. * @param string $typeSalle : type de salle
  83. * @return array : rang du candidat (numSalle=>rangCandidatDansSalle)
  84. */
  85. function getRangCandidatDansSalle($annee,$idCentre,$typeSalle) {
  86. $idTableMax=getIdTableMax($annee,$idCentre,$typeSalle);
  87. if($idTableMax=='') {
  88. $salle=$typeSalle.'001';
  89. } else list($id,$salle,$num)=explode('-',$idTableMax);
  90. $numSalle=(int)substr($salle,strlen($typeSalle));
  91. //echo "salle $salle ($idCentre/$typeSalle)<br/>";
  92. // combien y a-t-il de candidats dans cette salle ?
  93. $sql="SELECT COUNT(*) nbCan FROM odb_repartition\n WHERE id_table like '$idCentre-$salle-%' and annee=$annee";
  94. $result=odb_query($sql,__FILE__,__LINE__);
  95. $row=mysql_fetch_array($result);
  96. $rangCandidatDansSalle=$row['nbCan'];
  97. // quel est le plus grand numero (4 derniers chiffres) pour ce centre ?
  98. $sql="SELECT MAX(SUBSTRING(id_table,".(1+strlen("$idCentre-$salle-")).")) numero\n"
  99. . " FROM odb_repartition\n WHERE annee=$annee AND id_table LIKE '$idCentre-%'";
  100. //echo $sql;
  101. $result=odb_query($sql,__FILE__,__LINE__);
  102. $row=mysql_fetch_array($result);
  103. $numero=$row['numero'];
  104. $tRang=array(
  105. 'rang'=>$rangCandidatDansSalle,
  106. 'salle'=>$salle,
  107. 'numSalle'=>$numSalle,
  108. 'numero'=>$numero
  109. );
  110. //if($typeSalle!='') echo "<br/>tRang<pre>";print_r($tRang);echo"</pre>";
  111. return $tRang;
  112. }
  113. /** Cree le numero de table du candidat id_saisie
  114. *
  115. */
  116. function setRepartition($annee,$idCentre,$id_saisie,$id_table,$id_salle,$num_salle,$cptCan) {
  117. //echo "Candidat <b>".($cptCan+($num_salle-1)*$capacite_salle)."</b> : $id_table - $capacite_salle - $capacite_type - salle $id_salle ($salle)<hr size=1/>\n";
  118. $sql="INSERT into odb_repartition (`id_saisie`, `id_table`, `annee`, `id_etablissement`, `id_salle`, `num_salle`, `numero`)\n"
  119. . " VALUES ($id_saisie,'$id_table',$annee,$idCentre,$id_salle,$num_salle,$cptCan)"
  120. ;
  121. //echo "<hr/>$sql\n";
  122. odb_query($sql,__FILE__,__LINE__);
  123. }
  124. /** Synchronise les id_table de la table odb_repartition vers la table odb_candidats
  125. * @param string $annee
  126. */
  127. function setSynchroIdTableRepartition2Candidats($annee) {
  128. $sql="UPDATE odb_candidats can, odb_repartition rep set can.id_table=rep.id_table where can.id_saisie = rep.id_saisie and can.annee=$annee and rep.annee=$annee";
  129. odb_query($sql,__FILE__,__LINE__);
  130. }
  131. /** Recupere le nombre de candidast pour un departement et/ou une serie donnee
  132. * @param string $annee
  133. * @param int $idDept (nul si tout departement)
  134. * @param int $idSerie (nul si toute serie)
  135. * @return int : nombre de candidats
  136. */
  137. function getNbCandidats($annee,$idDept=0,$idSerie=0) {
  138. $where='';
  139. if($idDept>0) $where.=" AND departement=$idDept";
  140. if($idSerie>0) $where.=" AND serie=$idSerie";
  141. $sql="SELECT count(*)\n from odb_candidats\n WHERE annee=$annee $where";
  142. $result=odb_query($sql,__FILE__,__LINE__);
  143. $row=mysql_fetch_array($result);
  144. $nbCandidats=$row[0];
  145. return (int)$nbCandidats;
  146. }
  147. /** Recupere le nombre de candidats NON REPARTIS (sans id_table) pour un departement et/ou une serie donnee
  148. * @param string $annee
  149. * @param int $idDept (nul si tout departement)
  150. * @param int $idSerie (nul si toute serie)
  151. * @return int : nombre de candidats
  152. */
  153. function getNbCandidatsARepartir($annee,$idDept=0,$idSerie=0) {
  154. $where='';
  155. if($idDept>0) $where.=" AND departement=$idDept";
  156. if($idSerie>0) $where.=" AND serie=$idSerie";
  157. $sql="SELECT count(*)\n from odb_candidats\n WHERE id_table='0' and annee=$annee $where";
  158. $result=odb_query($sql,__FILE__,__LINE__);
  159. $row=mysql_fetch_array($result);
  160. $nbCandidats=$row[0];
  161. return (int)$nbCandidats;
  162. }
  163. /** Recupere le nombre de candidats dans chaque serie pour une salle donnee
  164. *
  165. * @param string $annee
  166. * @param int $idCentre : centre de composition
  167. * @param string $typeSalle : type de salle dans lequel on cherche l'information
  168. * @return array : tableau des series=>nbCandidats
  169. */
  170. function getSeriesDansSalle($annee,$idCentre,$typeSalle) {
  171. $idTableMax=getIdTableMax($annee,$idCentre,$typeSalle);
  172. if($idTableMax=='') return false;
  173. else {
  174. list($centre,$numSalle,$numCan)=explode('-',getIdTableHumain($idTableMax));
  175. $salle=$numSalle[0];
  176. $numSalle=substr($numSalle,1);
  177. }
  178. $sql="SELECT ser.serie, count(*) nbCan\n"
  179. . " FROM odb_candidats can, odb_ref_serie ser, odb_repartition rep, odb_ref_salle sal\n"
  180. . " WHERE can.annee=$annee and rep.annee=$annee and sal.annee=$annee and can.id_saisie=rep.id_saisie and rep.id_etablissement=$idCentre\n"
  181. . " and ser.id=can.serie and sal.id=rep.id_salle and salle='$typeSalle' and num_salle=$numSalle\n"
  182. . " GROUP BY ser.serie,sal.salle\n ORDER BY ser.serie";
  183. $result=odb_query($sql,__FILE__,__LINE__);
  184. while($row=mysql_fetch_array($result)) {
  185. $serie=$row['serie'];
  186. $tSeries[$serie]=$row['nbCan'];
  187. }
  188. //echo"<hr/>$sql<br/>";print_r($tSeries);
  189. return $tSeries;
  190. }
  191. /** Recupere le nombre de candidats dans chaque serie pour un centre donne
  192. *
  193. * @param string $annee
  194. * @param int $idCentre : centre de composition
  195. * @param string $typeSalle : type de salle dans lequel on cherche l'information
  196. * @return array : tableau des series=>nbCandidats
  197. */
  198. function getSeriesDansCentre($annee,$idCentre,$typeSalle='') {
  199. $where='';$from='';
  200. if($typeSalle!='') {
  201. $where=" AND salle='$typeSalle' and sal.id=rep.id_salle and sal.annee=$annee ";
  202. $from=", odb_ref_salle sal";
  203. }
  204. $sql="SELECT ser.serie, count(*) nbCan\n"
  205. . " FROM odb_candidats can, odb_repartition rep, odb_ref_serie ser $from\n"
  206. . " WHERE can.annee=$annee and rep.annee=$annee and can.id_saisie=rep.id_saisie\n"
  207. . " and ser.id=can.serie and rep.id_etablissement=$idCentre $where\n"
  208. . " GROUP BY ser.serie\n ORDER BY ser.serie";
  209. $result=odb_query($sql,__FILE__,__LINE__);
  210. while($row=mysql_fetch_array($result)) {
  211. $serie=$row['serie'];
  212. $tSeries[$serie]=$row['nbCan'];
  213. }
  214. //echo"<hr/>$sql<br/>";print_r($tSeries);
  215. return $tSeries;
  216. }
  217. /**
  218. * @param int idEtablissement
  219. * @return string : libelle etablissement
  220. */
  221. function getLibelleEtablissement($idEtablissement) {
  222. $sql="SELECT etablissement from odb_ref_etablissement\n WHERE id=$idEtablissement";
  223. $result=odb_query($sql,__FILE__,__LINE__);
  224. $row=mysql_fetch_array($result);
  225. $lib=$row[0];
  226. return $lib;
  227. }
  228. function getIdVilleEtablissement($idEtablissement) {
  229. $sql="SELECT id_ville from odb_ref_etablissement\n WHERE id=$idEtablissement";
  230. $result=odb_query($sql,__FILE__,__LINE__);
  231. $row=mysql_fetch_array($result);
  232. $idVille=$row[0];
  233. return $idVille;
  234. }
  235. function getLibelleVille($idVille) {
  236. $sql="SELECT ville from odb_ref_ville\n WHERE id=$idVille";
  237. $result=odb_query($sql,__FILE__,__LINE__);
  238. $row=mysql_fetch_array($result);
  239. $lib=$row[0];
  240. return $lib;
  241. }
  242. ?>