add_users_to_session.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377
  1. <?php
  2. /*
  3. ==============================================================================
  4. Dokeos - elearning and course management software
  5. Copyright (c) 2004 Dokeos S.A.
  6. Copyright (c) 2003 University of Ghent (UGent)
  7. Copyright (c) 2001 Universite catholique de Louvain (UCL)
  8. Copyright (c) Olivier Brouckaert
  9. For a full list of contributors, see "credits.txt".
  10. The full license can be read in "license.txt".
  11. This program is free software; you can redistribute it and/or
  12. modify it under the terms of the GNU General Public License
  13. as published by the Free Software Foundation; either version 2
  14. of the License, or (at your option) any later version.
  15. See the GNU General Public License for more details.
  16. Contact: Dokeos, 181 rue Royale, B-1000 Brussels, Belgium, info@dokeos.com
  17. ==============================================================================
  18. */
  19. /**
  20. ==============================================================================
  21. * @package dokeos.admin
  22. ==============================================================================
  23. */
  24. $langFile='admin';
  25. $cidReset=true;
  26. require('../inc/global.inc.php');
  27. api_protect_admin_script();
  28. $id_session=intval($_GET['id_session']);
  29. $formSent=0;
  30. $errorMsg=$firstLetterUser=$firstLetterSession='';
  31. $UserList=$SessionList=array();
  32. $users=$sessions=array();
  33. $tbl_session=Database::get_main_table(MAIN_SESSION_TABLE);
  34. $tbl_session_rel_class=Database::get_main_table(MAIN_SESSION_CLASS_TABLE);
  35. $tbl_session_rel_course=Database::get_main_table(MAIN_SESSION_COURSE_TABLE);
  36. $tbl_session_rel_course_rel_user=Database::get_main_table(MAIN_SESSION_COURSE_USER_TABLE);
  37. $tbl_course=Database::get_main_table(MAIN_COURSE_TABLE);
  38. $tbl_user=Database::get_main_table(MAIN_USER_TABLE);
  39. $tbl_session_rel_user=Database::get_main_table(MAIN_SESSION_USER_TABLE);
  40. $tbl_class=Database::get_main_table(MAIN_CLASS_TABLE);
  41. $tbl_class_user=Database::get_main_table(MAIN_CLASS_USER_TABLE);
  42. $noPHP_SELF=true;
  43. $tool_name=get_lang('SubscribeUsersToSession');
  44. $interbreadcrumb[]=array("url" => "index.php","name" => get_lang('AdministrationTools'));
  45. $interbreadcrumb[]=array("url" => "session_list.php","name" => "Liste des sessions");
  46. if($_POST['formSent'])
  47. {
  48. $formSent=$_POST['formSent'];
  49. $firstLetterUser=$_POST['firstLetterUser'];
  50. $firstLetterSession=$_POST['firstLetterSession'];
  51. $UserList=$_POST['sessionUsersList'];
  52. $ClassList=$_POST['sessionClassesList'];
  53. if(!is_array($UserList))
  54. {
  55. $UserList=array();
  56. }
  57. if($formSent == 1)
  58. {
  59. $result = api_sql_query("SELECT id_user FROM $tbl_session_rel_user WHERE id_session='$id_session'");
  60. $existingUsers = array();
  61. while($row = mysql_fetch_array($result)){
  62. $existingUsers[] = $row['id_user'];
  63. }
  64. $result=api_sql_query("SELECT course_code FROM $tbl_session_rel_course WHERE id_session='$id_session'",__FILE__,__LINE__);
  65. $CourseList=array();
  66. while($row=mysql_fetch_array($result))
  67. {
  68. $CourseList[]=$row['course_code'];
  69. }
  70. foreach($CourseList as $enreg_course)
  71. {
  72. $nbr_users=0;
  73. foreach($UserList as $enreg_user)
  74. {
  75. if(!in_array($enreg_user, $existingUsers)){
  76. api_sql_query("INSERT IGNORE INTO $tbl_session_rel_course_rel_user(id_session,course_code,id_user) VALUES('$id_session','$enreg_course','$enreg_user')",__FILE__,__LINE__);
  77. if(mysql_affected_rows())
  78. {
  79. $nbr_users++;
  80. }
  81. }
  82. }
  83. foreach($ClassList as $class){
  84. $result = api_sql_query ("SELECT user_id FROM $tbl_class_user WHERE class_id=$class");
  85. $usersTmp = api_store_result($result);
  86. foreach($usersTmp as $enreg_user){
  87. api_sql_query("INSERT IGNORE INTO $tbl_session_rel_course_rel_user(id_session,course_code,id_user) VALUES('$id_session','$enreg_course','{$enreg_user['user_id']}')",__FILE__,__LINE__);
  88. if(mysql_affected_rows())
  89. {
  90. $nbr_users++;
  91. }
  92. }
  93. }
  94. $sql = "SELECT COUNT(id_user) as nbUsers FROM $tbl_session_rel_course_rel_user WHERE id_session='$id_session' AND course_code='$enreg_course'";
  95. $rs = api_sql_query($sql, __FILE__, __LINE__);
  96. list($nbr_users) = mysql_fetch_array($rs);
  97. api_sql_query("UPDATE $tbl_session_rel_course SET nbr_users=$nbr_users WHERE id_session='$id_session' AND course_code='$enreg_course'",__FILE__,__LINE__);
  98. }
  99. api_sql_query("DELETE FROM $tbl_session_rel_class WHERE session_id = $id_session");
  100. api_sql_query("DELETE FROM $tbl_session_rel_user WHERE id_session = $id_session");
  101. $nbr_users = 0;
  102. foreach($UserList as $enreg_user){
  103. $nbr_users++;
  104. api_sql_query("INSERT IGNORE INTO $tbl_session_rel_user(id_session, id_user) VALUES('$id_session','$enreg_user')",__FILE__,__LINE__);
  105. }
  106. $nbr_users = count($UserList);
  107. api_sql_query("UPDATE $tbl_session SET nbr_classes=0, nbr_users= $nbr_users WHERE id='$id_session' ",__FILE__,__LINE__);
  108. //if(empty($_GET['add']))
  109. //header('Location: '.$_GET['page'].'?id_session='.$id_session);
  110. //else
  111. header('Location: resume_session.php?id_session='.$id_session);
  112. }
  113. }
  114. Display::display_header($tool_name);
  115. api_display_tool_title($tool_name);
  116. $nosessionUsersList = $sessionUsersList = $nosessionClassesList = $sessionClassesList = array();
  117. //classes
  118. $sql="SELECT id, name FROM $tbl_class ORDER BY name";
  119. $result=api_sql_query($sql,__FILE__,__LINE__);
  120. $Classes=api_store_result($result);
  121. foreach($Classes as $classe)
  122. if($classe['id_session'] == $id_session)
  123. $sessionClassesList[$classe['id']] = $classe ;
  124. foreach($Classes as $classe)
  125. if(empty($sessionClassesList[$classe['user_id']]) && empty($nosessionClassesList[$classe['user_id']]))
  126. $nosessionClassesList[$classe['id']] = $classe ;
  127. //users
  128. $sql="SELECT user_id, lastname, firstname, username, id_session
  129. FROM $tbl_user
  130. LEFT JOIN $tbl_session_rel_user
  131. ON $tbl_session_rel_user.id_user = $tbl_user.user_id
  132. ORDER BY lastname,firstname,username";
  133. $result=api_sql_query($sql,__FILE__,__LINE__);
  134. $Users=api_store_result($result);
  135. foreach($Users as $user)
  136. if($user['id_session'] == $id_session)
  137. $sessionUsersList[$user['user_id']] = $user ;
  138. foreach($Users as $user)
  139. if(empty($sessionUsersList[$user['user_id']]) && empty($nosessionUsersList[$user['user_id']]))
  140. $nosessionUsersList[$user['user_id']] = $user ;
  141. ?>
  142. <form name="formulaire" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>?page=<?php echo $_GET['page'] ?>&id_session=<?php echo $id_session; ?><?php if(!empty($_GET['add'])) echo '&add=true' ; ?>" style="margin:0px;">
  143. <input type="hidden" name="formSent" value="1" />
  144. <?php
  145. if(!empty($errorMsg))
  146. {
  147. Display::display_normal_message($errorMsg); //main API
  148. }
  149. ?>
  150. <table border="0" cellpadding="5" cellspacing="0" width="100%">
  151. <!-- Users -->
  152. <tr>
  153. <td align="center"><b><?php echo get_lang('UserListInPlatform') ?> :</b>
  154. </td>
  155. <td></td>
  156. <td align="center"><b><?php echo get_lang('UserListInSession') ?> :</b></td>
  157. </tr>
  158. <tr>
  159. <td align="center">
  160. <div id="content_source">
  161. <select id="origin_users" name="nosessionUsersList[]" multiple="multiple" size="15" style="width:300px;">
  162. <?php
  163. foreach($nosessionUsersList as $enreg)
  164. {
  165. ?>
  166. <option value="<?php echo $enreg['user_id']; ?>"><?php echo $enreg['lastname'].' '.$enreg['firstname'].' ('.$enreg['username'].')'; ?></option>
  167. <?php
  168. }
  169. unset($nosessionUsersList);
  170. ?>
  171. </select>
  172. </div>
  173. </td>
  174. <td width="10%" valign="middle" align="center">
  175. <input type="button" onclick="moveItem(document.getElementById('origin_users'), document.getElementById('destination_users'))" value=">>" />
  176. <br /><br />
  177. <input type="button" onclick="moveItem(document.getElementById('destination_users'), document.getElementById('origin_users'))" value="<<" />
  178. <br /><br /><br /><br /><br /><br />
  179. </td>
  180. <td align="center">
  181. <select id="destination_users" name="sessionUsersList[]" multiple="multiple" size="15" style="width:300px;">
  182. <?php
  183. foreach($sessionUsersList as $enreg)
  184. {
  185. ?>
  186. <option value="<?php echo $enreg['user_id']; ?>"><?php echo $enreg['lastname'].' '.$enreg['firstname'].' ('.$enreg['username'].')'; ?></option>
  187. <?php
  188. }
  189. unset($sessionUsersList);
  190. ?>
  191. </select></td>
  192. </tr>
  193. <tr>
  194. <td colspan="3" align="center">
  195. <br />
  196. <?php
  197. if(isset($_GET['add']))
  198. echo '<input type="button" value="'.get_lang("FinishSessionCreation").'" onclick="valide()" />';
  199. else
  200. echo '<input type="button" value="'.get_lang('Ok').'" onclick="valide()" />';
  201. ?>
  202. </td>
  203. </tr>
  204. </table>
  205. </form>
  206. <script type="text/javascript">
  207. <!--
  208. function moveItem(origin , destination){
  209. for(var i = 0 ; i<origin.options.length ; i++) {
  210. if(origin.options[i].selected) {
  211. destination.options[destination.length] = new Option(origin.options[i].text,origin.options[i].value);
  212. origin.options[i]=null;
  213. i = i-1;
  214. }
  215. }
  216. destination.selectedIndex = -1;
  217. sortOptions(destination.options);
  218. }
  219. function sortOptions(options) {
  220. newOptions = new Array();
  221. for (i = 0 ; i<options.length ; i++)
  222. newOptions[i] = options[i];
  223. newOptions = newOptions.sort(mysort);
  224. options.length = 0;
  225. for(i = 0 ; i < newOptions.length ; i++)
  226. options[i] = newOptions[i];
  227. }
  228. function mysort(a, b){
  229. if(a.text.toLowerCase() > b.text.toLowerCase()){
  230. return 1;
  231. }
  232. if(a.text.toLowerCase() < b.text.toLowerCase()){
  233. return -1;
  234. }
  235. return 0;
  236. }
  237. function valide(){
  238. var options = document.getElementById('destination_users').options;
  239. for (i = 0 ; i<options.length ; i++)
  240. options[i].selected = true;
  241. /*
  242. var options = document.getElementById('destination_classes').options;
  243. for (i = 0 ; i<options.length ; i++)
  244. options[i].selected = true;
  245. */
  246. document.forms.formulaire.submit();
  247. }
  248. function loadUsersInSelect(select){
  249. var xhr_object = null;
  250. if(window.XMLHttpRequest) // Firefox
  251. xhr_object = new XMLHttpRequest();
  252. else if(window.ActiveXObject) // Internet Explorer
  253. xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
  254. else // XMLHttpRequest non supporté par le navigateur
  255. alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
  256. //xhr_object.open("GET", "loadUsersInSelect.ajax.php?id_session=<?php echo $id_session ?>&letter="+select.options[select.selectedIndex].text, false);
  257. xhr_object.open("POST", "loadUsersInSelect.ajax.php");
  258. xhr_object.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  259. nosessionUsers = makepost(document.getElementById('origin_users'));
  260. sessionUsers = makepost(document.getElementById('destination_users'));
  261. nosessionClasses = makepost(document.getElementById('origin_classes'));
  262. sessionClasses = makepost(document.getElementById('destination_classes'));
  263. xhr_object.send("nosessionusers="+nosessionUsers+"&sessionusers="+sessionUsers+"&nosessionclasses="+nosessionClasses+"&sessionclasses="+sessionClasses);
  264. xhr_object.onreadystatechange = function() {
  265. if(xhr_object.readyState == 4) {
  266. document.getElementById('content_source').innerHTML = result = xhr_object.responseText;
  267. //alert(xhr_object.responseText);
  268. }
  269. }
  270. }
  271. function makepost(select){
  272. var options = select.options;
  273. var ret = "";
  274. for (i = 0 ; i<options.length ; i++)
  275. ret = ret + options[i].value +'::'+options[i].text+";;";
  276. return ret;
  277. }
  278. -->
  279. </script>
  280. <?php
  281. /*
  282. ==============================================================================
  283. FOOTER
  284. ==============================================================================
  285. */
  286. Display::display_footer();
  287. ?>