add_users_to_session.php 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493
  1. <?php
  2. /*
  3. ==============================================================================
  4. Dokeos - elearning and course management software
  5. Copyright (c) 2004 Dokeos S.A.
  6. Copyright (c) 2003 Ghent University (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. // name of the language file that needs to be included
  25. $language_file='admin';
  26. // resetting the course id
  27. $cidReset=true;
  28. // including some necessary dokeos files
  29. require('../inc/global.inc.php');
  30. require_once ('../inc/lib/xajax/xajax.inc.php');
  31. $xajax = new xajax();
  32. //$xajax->debugOn();
  33. $xajax -> registerFunction ('search_users');
  34. // setting the section (for the tabs)
  35. $this_section = SECTION_PLATFORM_ADMIN;
  36. // Access restrictions
  37. api_protect_admin_script(true);
  38. // setting breadcrumbs
  39. $interbreadcrumb[]=array('url' => 'index.php',"name" => get_lang('PlatformAdmin'));
  40. $interbreadcrumb[]=array('url' => "session_list.php","name" => "Liste des sessions");
  41. // Database Table Definitions
  42. $tbl_session = Database::get_main_table(TABLE_MAIN_SESSION);
  43. $tbl_session_rel_class = Database::get_main_table(TABLE_MAIN_SESSION_CLASS);
  44. $tbl_session_rel_course = Database::get_main_table(TABLE_MAIN_SESSION_COURSE);
  45. $tbl_session_rel_course_rel_user = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
  46. $tbl_course = Database::get_main_table(TABLE_MAIN_COURSE);
  47. $tbl_user = Database::get_main_table(TABLE_MAIN_USER);
  48. $tbl_session_rel_user = Database::get_main_table(TABLE_MAIN_SESSION_USER);
  49. $tbl_class = Database::get_main_table(TABLE_MAIN_CLASS);
  50. $tbl_class_user = Database::get_main_table(TABLE_MAIN_CLASS_USER);
  51. // setting the name of the tool
  52. $tool_name=get_lang('SubscribeUsersToSession');
  53. $id_session=intval($_GET['id_session']);
  54. if(!api_is_platform_admin())
  55. {
  56. $sql = 'SELECT session_admin_id FROM '.Database :: get_main_table(TABLE_MAIN_SESSION).' WHERE id='.$id_session;
  57. $rs = api_sql_query($sql,__FILE__,__LINE__);
  58. if(mysql_result($rs,0,0)!=$_user['user_id'])
  59. {
  60. api_not_allowed(true);
  61. }
  62. }
  63. function search_users($needle)
  64. {
  65. global $tbl_user;
  66. $xajax_response = new XajaxResponse();
  67. $return = '';
  68. if(!empty($needle))
  69. {
  70. // search users where username or firstname or lastname begins likes $needle
  71. $sql = 'SELECT user_id, username, lastname, firstname FROM '.$tbl_user.' user
  72. WHERE (username LIKE "'.$needle.'%"
  73. OR firstname LIKE "'.$needle.'%"
  74. OR lastname LIKE "'.$needle.'%")
  75. ORDER BY lastname, firstname, username
  76. LIMIT 10';
  77. $rs = api_sql_query($sql, __FILE__, __LINE__);
  78. while($user = Database :: fetch_array($rs))
  79. {
  80. $return .= '<a href="#" onclick="add_user_to_session(\''.$user['user_id'].'\',\''.$user['firstname'].' '.$user['lastname'].' ('.$user['username'].')'.'\')">'.$user['firstname'].' '.$user['lastname'].' ('.$user['username'].')</a><br />';
  81. }
  82. }
  83. $xajax_response -> addAssign('ajax_list_users','innerHTML',utf8_encode($return));
  84. return $xajax_response;
  85. }
  86. $xajax -> processRequests();
  87. $htmlHeadXtra[] = $xajax->getJavascript('../inc/lib/xajax/');
  88. $htmlHeadXtra[] = '
  89. <script type="text/javascript">
  90. function add_user_to_session (code, content) {
  91. document.getElementById("user_to_add").value = "";
  92. document.getElementById("ajax_list_users").innerHTML = "";
  93. destination = document.getElementById("destination_users");
  94. destination.options[destination.length] = new Option(content,code);
  95. destination.selectedIndex = -1;
  96. sortOptions(destination.options);
  97. }
  98. function remove_item(origin)
  99. {
  100. for(var i = 0 ; i<origin.options.length ; i++) {
  101. if(origin.options[i].selected) {
  102. origin.options[i]=null;
  103. i = i-1;
  104. }
  105. }
  106. }
  107. </script>';
  108. $formSent=0;
  109. $errorMsg=$firstLetterUser=$firstLetterSession='';
  110. $UserList=$SessionList=array();
  111. $users=$sessions=array();
  112. $noPHP_SELF=true;
  113. if($_POST['formSent'])
  114. {
  115. $formSent=$_POST['formSent'];
  116. $firstLetterUser=$_POST['firstLetterUser'];
  117. $firstLetterSession=$_POST['firstLetterSession'];
  118. $UserList=$_POST['sessionUsersList'];
  119. $ClassList=$_POST['sessionClassesList'];
  120. if(!is_array($UserList))
  121. {
  122. $UserList=array();
  123. }
  124. if($formSent == 1)
  125. {
  126. $result = api_sql_query("SELECT id_user FROM $tbl_session_rel_user WHERE id_session='$id_session'");
  127. $existingUsers = array();
  128. while($row = mysql_fetch_array($result)){
  129. $existingUsers[] = $row['id_user'];
  130. }
  131. $result=api_sql_query("SELECT course_code FROM $tbl_session_rel_course WHERE id_session='$id_session'",__FILE__,__LINE__);
  132. $CourseList=array();
  133. while($row=mysql_fetch_array($result))
  134. {
  135. $CourseList[]=$row['course_code'];
  136. }
  137. foreach($CourseList as $enreg_course)
  138. {
  139. $nbr_users=0;
  140. foreach($UserList as $enreg_user)
  141. {
  142. if(!in_array($enreg_user, $existingUsers)){
  143. 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__);
  144. if(mysql_affected_rows())
  145. {
  146. $nbr_users++;
  147. }
  148. }
  149. }
  150. foreach($existingUsers as $existing_user){
  151. if(!in_array($existing_user, $UserList)){
  152. $sql = "DELETE FROM $tbl_session_rel_course_rel_user WHERE id_session='$id_session' AND course_code='$enreg_course' AND id_user='$existing_user'";
  153. api_sql_query($sql);
  154. if(mysql_affected_rows())
  155. {
  156. $nbr_users--;
  157. }
  158. }
  159. }
  160. $sql = "SELECT COUNT(id_user) as nbUsers FROM $tbl_session_rel_course_rel_user WHERE id_session='$id_session' AND course_code='$enreg_course'";
  161. $rs = api_sql_query($sql, __FILE__, __LINE__);
  162. list($nbr_users) = mysql_fetch_array($rs);
  163. 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__);
  164. }
  165. api_sql_query("DELETE FROM $tbl_session_rel_user WHERE id_session = $id_session");
  166. $nbr_users = 0;
  167. foreach($UserList as $enreg_user){
  168. $nbr_users++;
  169. api_sql_query("INSERT IGNORE INTO $tbl_session_rel_user(id_session, id_user) VALUES('$id_session','$enreg_user')",__FILE__,__LINE__);
  170. }
  171. $nbr_users = count($UserList);
  172. api_sql_query("UPDATE $tbl_session SET nbr_users= $nbr_users WHERE id='$id_session' ",__FILE__,__LINE__);
  173. //if(empty($_GET['add']))
  174. //header('Location: '.$_GET['page'].'?id_session='.$id_session);
  175. //else
  176. header('Location: resume_session.php?id_session='.$id_session);
  177. }
  178. }
  179. Display::display_header($tool_name);
  180. api_display_tool_title($tool_name);
  181. $nosessionUsersList = $sessionUsersList = array();
  182. $sql = 'SELECT COUNT(1) FROM '.$tbl_user;
  183. $rs = api_sql_query($sql, __FILE__, __LINE__);
  184. $count_courses = mysql_result($rs, 0, 0);
  185. $ajax_search = $count_courses > 100 ? true : false;
  186. if($ajax_search)
  187. {
  188. $sql="SELECT user_id, lastname, firstname, username, id_session
  189. FROM $tbl_user
  190. INNER JOIN $tbl_session_rel_user
  191. ON $tbl_session_rel_user.id_user = $tbl_user.user_id
  192. AND $tbl_session_rel_user.id_session = ".intval($id_session)."
  193. ORDER BY lastname,firstname,username";
  194. $result=api_sql_query($sql,__FILE__,__LINE__);
  195. $Users=api_store_result($result);
  196. foreach($Users as $user)
  197. {
  198. $sessionUsersList[$user['user_id']] = $user ;
  199. }
  200. }
  201. else
  202. {
  203. $sql="SELECT user_id, lastname, firstname, username, id_session
  204. FROM $tbl_user
  205. LEFT JOIN $tbl_session_rel_user
  206. ON $tbl_session_rel_user.id_user = $tbl_user.user_id
  207. ORDER BY lastname,firstname,username";
  208. $result=api_sql_query($sql,__FILE__,__LINE__);
  209. $Users=api_store_result($result);
  210. foreach($Users as $user)
  211. {
  212. if($user['id_session'] == $id_session)
  213. $sessionUsersList[$user['user_id']] = $user ;
  214. else
  215. $nosessionUsersList[$user['user_id']] = $user ;
  216. }
  217. }
  218. ?>
  219. <form name="formulaire" method="post" action="<?php echo api_get_self(); ?>?page=<?php echo $_GET['page'] ?>&id_session=<?php echo $id_session; ?><?php if(!empty($_GET['add'])) echo '&add=true' ; ?>" style="margin:0px;">
  220. <input type="hidden" name="formSent" value="1" />
  221. <?php
  222. if(!empty($errorMsg))
  223. {
  224. Display::display_normal_message($errorMsg); //main API
  225. }
  226. ?>
  227. <table border="0" cellpadding="5" cellspacing="0" width="100%">
  228. <!-- Users -->
  229. <tr>
  230. <td align="center"><b><?php echo get_lang('UserListInPlatform') ?> :</b>
  231. </td>
  232. <td></td>
  233. <td align="center"><b><?php echo get_lang('UserListInSession') ?> :</b></td>
  234. </tr>
  235. <tr>
  236. <td align="center">
  237. <div id="content_source">
  238. <?php
  239. if($ajax_search)
  240. {
  241. ?>
  242. <input type="text" id="user_to_add" onkeyup="xajax_search_users(this.value)" />
  243. <div id="ajax_list_users"></div>
  244. <?php
  245. }
  246. else
  247. {
  248. ?>
  249. <select id="origin_users" name="nosessionUsersList[]" multiple="multiple" size="15" style="width:300px;">
  250. <?php
  251. foreach($nosessionUsersList as $enreg)
  252. {
  253. ?>
  254. <option value="<?php echo $enreg['user_id']; ?>"><?php echo $enreg['lastname'].' '.$enreg['firstname'].' ('.$enreg['username'].')'; ?></option>
  255. <?php
  256. }
  257. unset($nosessionUsersList);
  258. ?>
  259. </select>
  260. <?php
  261. }
  262. ?>
  263. </div>
  264. </td>
  265. <td width="10%" valign="middle" align="center">
  266. <?php
  267. if($ajax_search)
  268. {
  269. ?>
  270. <input type="button" onclick="remove_item(document.getElementById('destination_users'))" value="<<" />
  271. <?php
  272. }
  273. else
  274. {
  275. ?>
  276. <input type="button" onclick="moveItem(document.getElementById('origin_users'), document.getElementById('destination_users'))" value=">>" />
  277. <br /><br />
  278. <input type="button" onclick="moveItem(document.getElementById('destination_users'), document.getElementById('origin_users'))" value="<<" />
  279. <?php
  280. }
  281. ?>
  282. <br /><br /><br /><br /><br /><br />
  283. </td>
  284. <td align="center">
  285. <select id="destination_users" name="sessionUsersList[]" multiple="multiple" size="15" style="width:300px;">
  286. <?php
  287. foreach($sessionUsersList as $enreg)
  288. {
  289. ?>
  290. <option value="<?php echo $enreg['user_id']; ?>"><?php echo $enreg['lastname'].' '.$enreg['firstname'].' ('.$enreg['username'].')'; ?></option>
  291. <?php
  292. }
  293. unset($sessionUsersList);
  294. ?>
  295. </select></td>
  296. </tr>
  297. <tr>
  298. <td colspan="3" align="center">
  299. <br />
  300. <?php
  301. if(isset($_GET['add']))
  302. echo '<input type="button" value="'.get_lang("FinishSessionCreation").'" onclick="valide()" />';
  303. else
  304. echo '<input type="button" value="'.get_lang('Ok').'" onclick="valide()" />';
  305. ?>
  306. </td>
  307. </tr>
  308. </table>
  309. </form>
  310. <script type="text/javascript">
  311. <!--
  312. function moveItem(origin , destination){
  313. for(var i = 0 ; i<origin.options.length ; i++) {
  314. if(origin.options[i].selected) {
  315. destination.options[destination.length] = new Option(origin.options[i].text,origin.options[i].value);
  316. origin.options[i]=null;
  317. i = i-1;
  318. }
  319. }
  320. destination.selectedIndex = -1;
  321. sortOptions(destination.options);
  322. }
  323. function sortOptions(options) {
  324. newOptions = new Array();
  325. for (i = 0 ; i<options.length ; i++)
  326. newOptions[i] = options[i];
  327. newOptions = newOptions.sort(mysort);
  328. options.length = 0;
  329. for(i = 0 ; i < newOptions.length ; i++)
  330. options[i] = newOptions[i];
  331. }
  332. function mysort(a, b){
  333. if(a.text.toLowerCase() > b.text.toLowerCase()){
  334. return 1;
  335. }
  336. if(a.text.toLowerCase() < b.text.toLowerCase()){
  337. return -1;
  338. }
  339. return 0;
  340. }
  341. function valide(){
  342. var options = document.getElementById('destination_users').options;
  343. for (i = 0 ; i<options.length ; i++)
  344. options[i].selected = true;
  345. /*
  346. var options = document.getElementById('destination_classes').options;
  347. for (i = 0 ; i<options.length ; i++)
  348. options[i].selected = true;
  349. */
  350. document.forms.formulaire.submit();
  351. }
  352. function loadUsersInSelect(select){
  353. var xhr_object = null;
  354. if(window.XMLHttpRequest) // Firefox
  355. xhr_object = new XMLHttpRequest();
  356. else if(window.ActiveXObject) // Internet Explorer
  357. xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
  358. else // XMLHttpRequest non supporté par le navigateur
  359. alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
  360. //xhr_object.open("GET", "loadUsersInSelect.ajax.php?id_session=<?php echo $id_session ?>&letter="+select.options[select.selectedIndex].text, false);
  361. xhr_object.open("POST", "loadUsersInSelect.ajax.php");
  362. xhr_object.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  363. nosessionUsers = makepost(document.getElementById('origin_users'));
  364. sessionUsers = makepost(document.getElementById('destination_users'));
  365. nosessionClasses = makepost(document.getElementById('origin_classes'));
  366. sessionClasses = makepost(document.getElementById('destination_classes'));
  367. xhr_object.send("nosessionusers="+nosessionUsers+"&sessionusers="+sessionUsers+"&nosessionclasses="+nosessionClasses+"&sessionclasses="+sessionClasses);
  368. xhr_object.onreadystatechange = function() {
  369. if(xhr_object.readyState == 4) {
  370. document.getElementById('content_source').innerHTML = result = xhr_object.responseText;
  371. //alert(xhr_object.responseText);
  372. }
  373. }
  374. }
  375. function makepost(select){
  376. var options = select.options;
  377. var ret = "";
  378. for (i = 0 ; i<options.length ; i++)
  379. ret = ret + options[i].value +'::'+options[i].text+";;";
  380. return ret;
  381. }
  382. -->
  383. </script>
  384. <?php
  385. /*
  386. ==============================================================================
  387. FOOTER
  388. ==============================================================================
  389. */
  390. Display::display_footer();
  391. ?>