add_courses_to_session.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417
  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_courses');
  34. // setting the section (for the tabs)
  35. $this_section = SECTION_PLATFORM_ADMIN;
  36. // Access restrictions
  37. api_protect_admin_script();
  38. // setting breadcrumbs
  39. $interbreadcrumb[] = array('url' => 'index.php', 'name' => get_lang('PlatformAdmin'));
  40. $interbreadcrumb[] = array('url' => 'session_list.php','name' => get_lang('SessionList'));
  41. // Database Table Definitions
  42. $tbl_session_rel_course_rel_user = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
  43. $tbl_session = Database::get_main_table(TABLE_MAIN_SESSION);
  44. $tbl_session_rel_user = Database::get_main_table(TABLE_MAIN_SESSION_USER);
  45. $tbl_session_rel_course = Database::get_main_table(TABLE_MAIN_SESSION_COURSE);
  46. $tbl_course = Database::get_main_table(TABLE_MAIN_COURSE);
  47. // setting the name of the tool
  48. $tool_name= get_lang('SubscribeCoursesToSession');
  49. $id_session=intval($_GET['id_session']);
  50. function search_courses($needle)
  51. {
  52. global $tbl_course, $tbl_session_rel_course, $id_session;
  53. $xajax_response = new XajaxResponse();
  54. $return = '';
  55. if(!empty($needle))
  56. {
  57. // search users where username or firstname or lastname begins likes $needle
  58. $sql = 'SELECT course.code, course.visual_code, course.title, session_rel_course.id_session
  59. FROM '.$tbl_course.' course
  60. LEFT JOIN '.$tbl_session_rel_course.' session_rel_course
  61. ON course.code = session_rel_course.course_code
  62. AND session_rel_course.id_session = '.intval($id_session).'
  63. WHERE course.visual_code LIKE "'.$needle.'%"
  64. OR course.title LIKE "'.$needle.'%"';
  65. $rs = api_sql_query($sql, __FILE__, __LINE__);
  66. while($course = Database :: fetch_array($rs))
  67. {
  68. $return .= '<a href="#" onclick="add_course_to_session(\''.$course['code'].'\',\''.$course['title'].' ('.$course['visual_code'].')'.'\')">'.$course['title'].' ('.$course['visual_code'].')</a><br />';
  69. }
  70. }
  71. $xajax_response -> addAssign('ajax_list_courses','innerHTML',utf8_encode($return));
  72. return $xajax_response;
  73. }
  74. $xajax -> processRequests();
  75. $htmlHeadXtra[] = $xajax->getJavascript('../inc/lib/xajax/');
  76. $htmlHeadXtra[] = '
  77. <script type="text/javascript">
  78. function add_course_to_session (code, content) {
  79. document.getElementById("course_to_add").value = "";
  80. document.getElementById("ajax_list_courses").innerHTML = "";
  81. destination = document.getElementById("destination");
  82. destination.options[destination.length] = new Option(content,code);
  83. destination.selectedIndex = -1;
  84. sortOptions(destination.options);
  85. }
  86. function remove_item(origin)
  87. {
  88. for(var i = 0 ; i<origin.options.length ; i++) {
  89. if(origin.options[i].selected) {
  90. origin.options[i]=null;
  91. i = i-1;
  92. }
  93. }
  94. }
  95. </script>';
  96. $formSent=0;
  97. $errorMsg=$firstLetterCourse=$firstLetterSession='';
  98. $CourseList=$SessionList=array();
  99. $courses=$sessions=array();
  100. $noPHP_SELF=true;
  101. if($_POST['formSent'])
  102. {
  103. $formSent=$_POST['formSent'];
  104. $firstLetterCourse=$_POST['firstLetterCourse'];
  105. $firstLetterSession=$_POST['firstLetterSession'];
  106. $CourseList=$_POST['SessionCoursesList'];
  107. if(!is_array($CourseList))
  108. {
  109. $CourseList=array();
  110. }
  111. $nbr_courses=0;
  112. $id_coach = api_sql_query("SELECT id_coach FROM $tbl_session WHERE id=$id_session");
  113. $id_coach = mysql_fetch_array($id_coach);
  114. $id_coach = $id_coach[0];
  115. $rs = api_sql_query("SELECT course_code FROM $tbl_session_rel_course WHERE id_session=$id_session");
  116. $existingCourses = api_store_result($rs);
  117. $sql="SELECT id_user
  118. FROM $tbl_session_rel_user
  119. WHERE id_session = $id_session";
  120. $result=api_sql_query($sql,__FILE__,__LINE__);
  121. $UserList=api_store_result($result);
  122. foreach($CourseList as $enreg_course)
  123. {
  124. $exists = false;
  125. foreach($existingCourses as $existingCourse)
  126. {
  127. if($enreg_course == $existingCourse['course_code'])
  128. {
  129. $exists=true;
  130. }
  131. }
  132. if(!$exists)
  133. {
  134. api_sql_query("INSERT INTO $tbl_session_rel_course(id_session,course_code, id_coach) VALUES('$id_session','$enreg_course','$id_coach')",__FILE__,__LINE__);
  135. $nbr_users=0;
  136. foreach($UserList as $enreg_user)
  137. {
  138. $enreg_user = $enreg_user['id_user'];
  139. 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__);
  140. if(mysql_affected_rows())
  141. {
  142. $nbr_users++;
  143. }
  144. }
  145. 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__);
  146. }
  147. }
  148. foreach($existingCourses as $existingCourse) {
  149. if(!in_array($existingCourse['course_code'], $CourseList)){
  150. api_sql_query("DELETE FROM $tbl_session_rel_course WHERE course_code='".$existingCourse['course_code']."' AND id_session=$id_session");
  151. api_sql_query("DELETE FROM $tbl_session_rel_course_rel_user WHERE course_code='".$existingCourse['course_code']."' AND id_session=$id_session");
  152. }
  153. }
  154. $nbr_courses=count($CourseList);
  155. api_sql_query("UPDATE $tbl_session SET nbr_courses=$nbr_courses WHERE id='$id_session'",__FILE__,__LINE__);
  156. if(isset($_GET['add']))
  157. header('Location: add_users_to_session.php?id_session='.$id_session.'&add=true');
  158. else
  159. header('Location: resume_session.php?id_session='.$id_session);
  160. //header('Location: '.$_GET['page'].'?id_session='.$id_session);
  161. }
  162. Display::display_header($tool_name);
  163. api_display_tool_title($tool_name);
  164. $sql = 'SELECT COUNT(1) FROM '.$tbl_course;
  165. $rs = api_sql_query($sql, __FILE__, __LINE__);
  166. $count_courses = mysql_result($rs, 0, 0);
  167. $ajax_search = $count_courses > 50 ? true : false;
  168. $nosessionCourses = $sessionCourses = array();
  169. if($ajax_search)
  170. {
  171. $sql="SELECT code, title, visual_code, id_session
  172. FROM $tbl_course course
  173. INNER JOIN $tbl_session_rel_course session_rel_course
  174. ON course.code = session_rel_course.course_code
  175. AND session_rel_course.id_session = ".intval($id_session)."
  176. ORDER BY ".(sizeof($courses)?"(code IN(".implode(',',$courses).")) DESC,":"")." title";
  177. $result=api_sql_query($sql,__FILE__,__LINE__);
  178. $Courses=api_store_result($result);
  179. foreach($Courses as $course)
  180. {
  181. $sessionCourses[$course['code']] = $course ;
  182. }
  183. }
  184. else
  185. {
  186. $sql="SELECT code, title, visual_code, id_session
  187. FROM $tbl_course course
  188. LEFT JOIN $tbl_session_rel_course session_rel_course
  189. ON course.code = session_rel_course.course_code
  190. AND session_rel_course.id_session = ".intval($id_session)."
  191. ORDER BY ".(sizeof($courses)?"(code IN(".implode(',',$courses).")) DESC,":"")." title";
  192. $result=api_sql_query($sql,__FILE__,__LINE__);
  193. $Courses=api_store_result($result);
  194. foreach($Courses as $course)
  195. {
  196. if($course['id_session'] == $id_session)
  197. {
  198. $sessionCourses[$course['code']] = $course ;
  199. }
  200. else
  201. {
  202. $nosessionCourses[$course['code']] = $course ;
  203. }
  204. }
  205. }
  206. unset($Courses);
  207. ?>
  208. <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;">
  209. <input type="hidden" name="formSent" value="1" />
  210. <?php
  211. if(!empty($errorMsg))
  212. {
  213. Display::display_normal_message($errorMsg); //main API
  214. }
  215. ?>
  216. <table border="0" cellpadding="5" cellspacing="0" width="100%" align="center">
  217. <tr>
  218. <td width="45%" align="center"><b><?php echo get_lang('CourseListInPlatform') ?> :</b></td>
  219. <td width="10%">&nbsp;</td>
  220. <td align="center" width="45%"><b><?php echo get_lang('CourseListInSession') ?> :</b></td>
  221. </tr>
  222. <tr>
  223. <td width="45%" align="center">
  224. <?php
  225. if($ajax_search){
  226. ?>
  227. <input type="text" id="course_to_add" onkeyup="xajax_search_courses(this.value)" />
  228. <div id="ajax_list_courses"></div>
  229. <?php
  230. }
  231. else
  232. {
  233. ?> <select id="origin" name="NoSessionCoursesList[]" multiple="multiple" size="20" style="width:300px;"> <?php
  234. foreach($nosessionCourses as $enreg)
  235. {
  236. ?>
  237. <option value="<?php echo $enreg['code']; ?>" <?php if(in_array($enreg['code'],$CourseList)) echo 'selected="selected"'; ?>><?php echo $enreg['title'].' ('.$enreg['visual_code'].')'; ?></option>
  238. <?php
  239. }
  240. ?> </select> <?php
  241. }
  242. unset($nosessionCourses);
  243. ?>
  244. </select></td>
  245. <td width="10%" valign="middle" align="center">
  246. <?php
  247. if($ajax_search)
  248. {
  249. ?>
  250. <input type="button" onclick="remove_item(document.getElementById('destination'))" value="<<" />
  251. <?php
  252. }
  253. else
  254. {
  255. ?>
  256. <input type="button" onclick="moveItem(document.getElementById('origin'), document.getElementById('destination'))" value=">>" />
  257. <br /><br />
  258. <input type="button" onclick="moveItem(document.getElementById('destination'), document.getElementById('origin'))" value="<<" />
  259. <?php
  260. }
  261. ?>
  262. <br /><br /><br /><br /><br /><br />
  263. <?php
  264. if(isset($_GET['add']))
  265. {
  266. echo '<input type="button" value="'.get_lang('NextStep').'" onclick="valide()" />';
  267. }
  268. else
  269. {
  270. echo '<input type="button" value="'.get_lang('Ok').'" onclick="valide()" />';
  271. }
  272. ?>
  273. </td>
  274. <td width="45%" align="center"><select id='destination' name="SessionCoursesList[]" multiple="multiple" size="20" style="width:300px;">
  275. <?php
  276. foreach($sessionCourses as $enreg)
  277. {
  278. ?>
  279. <option value="<?php echo $enreg['code']; ?>"><?php echo $enreg['title'].' ('.$enreg['visual_code'].')'; ?></option>
  280. <?php
  281. }
  282. unset($sessionCourses);
  283. ?>
  284. </select></td>
  285. </tr>
  286. </table>
  287. </form>
  288. <script type="text/javascript">
  289. <!--
  290. function moveItem(origin , destination){
  291. for(var i = 0 ; i<origin.options.length ; i++) {
  292. if(origin.options[i].selected) {
  293. destination.options[destination.length] = new Option(origin.options[i].text,origin.options[i].value);
  294. origin.options[i]=null;
  295. i = i-1;
  296. }
  297. }
  298. destination.selectedIndex = -1;
  299. sortOptions(destination.options);
  300. }
  301. function sortOptions(options) {
  302. newOptions = new Array();
  303. for (i = 0 ; i<options.length ; i++)
  304. newOptions[i] = options[i];
  305. newOptions = newOptions.sort(mysort);
  306. options.length = 0;
  307. for(i = 0 ; i < newOptions.length ; i++)
  308. options[i] = newOptions[i];
  309. }
  310. function mysort(a, b){
  311. if(a.text.toLowerCase() > b.text.toLowerCase()){
  312. return 1;
  313. }
  314. if(a.text.toLowerCase() < b.text.toLowerCase()){
  315. return -1;
  316. }
  317. return 0;
  318. }
  319. function valide(){
  320. var options = document.getElementById('destination').options;
  321. for (i = 0 ; i<options.length ; i++)
  322. options[i].selected = true;
  323. document.forms.formulaire.submit();
  324. }
  325. -->
  326. </script>
  327. <?php
  328. /*
  329. ==============================================================================
  330. FOOTER
  331. ==============================================================================
  332. */
  333. Display::display_footer();
  334. ?>