course_edit.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321
  1. <?php
  2. // $Id: course_edit.php 13863 2007-11-29 15:47:06Z elixir_inter $
  3. /*
  4. ==============================================================================
  5. Dokeos - elearning and course management software
  6. Copyright (c) 2004 Dokeos S.A.
  7. Copyright (c) 2003 Ghent University (UGent)
  8. Copyright (c) 2001 Universite catholique de Louvain (UCL)
  9. Copyright (c) Olivier Brouckaert
  10. Copyright (c) Bart Mollet, Hogeschool Gent
  11. For a full list of contributors, see "credits.txt".
  12. The full license can be read in "license.txt".
  13. This program is free software; you can redistribute it and/or
  14. modify it under the terms of the GNU General Public License
  15. as published by the Free Software Foundation; either version 2
  16. of the License, or (at your option) any later version.
  17. See the GNU General Public License for more details.
  18. Contact: Dokeos, 181 rue Royale, B-1000 Brussels, Belgium, info@dokeos.com
  19. ==============================================================================
  20. */
  21. /**
  22. ==============================================================================
  23. * @package dokeos.admin
  24. ==============================================================================
  25. */
  26. /*
  27. ==============================================================================
  28. INIT SECTION
  29. ==============================================================================
  30. */
  31. // name of the language file that needs to be included
  32. $language_file = 'admin';
  33. $cidReset = true;
  34. include ('../inc/global.inc.php');
  35. $this_section=SECTION_PLATFORM_ADMIN;
  36. api_protect_admin_script();
  37. include (api_get_path(LIBRARY_PATH).'fileManage.lib.php');
  38. require_once (api_get_path(LIBRARY_PATH).'formvalidator/FormValidator.class.php');
  39. $course_table = Database::get_main_table(TABLE_MAIN_COURSE);
  40. $course_user_table = Database::get_main_table(TABLE_MAIN_COURSE_USER);
  41. $course_code = isset($_GET['course_code']) ? $_GET['course_code'] : $_POST['code'];
  42. $noPHP_SELF = true;
  43. $tool_name = get_lang('ModifyCourseInfo');
  44. $interbreadcrumb[] = array ("url" => 'index.php', "name" => get_lang('PlatformAdmin'));
  45. $interbreadcrumb[] = array ("url" => "course_list.php", "name" => get_lang('AdminCourses'));
  46. /*
  47. -----------------------------------------------------------
  48. Libraries
  49. -----------------------------------------------------------
  50. */
  51. /*
  52. ==============================================================================
  53. FUNCTIONS
  54. ==============================================================================
  55. */
  56. /*
  57. ==============================================================================
  58. MAIN CODE
  59. ==============================================================================
  60. */
  61. // Get all course categories
  62. $table_user = Database :: get_main_table(TABLE_MAIN_USER);
  63. $table_course_category = Database :: get_main_table(TABLE_MAIN_CATEGORY);
  64. $sql = "SELECT code,name FROM ".$table_course_category." WHERE auth_course_child ='TRUE' ORDER BY tree_pos";
  65. $res = api_sql_query($sql, __FILE__, __LINE__);
  66. while ($cat = mysql_fetch_array($res))
  67. {
  68. $categories[$cat['code']] = '('.$cat['code'].') '.$cat['name'];
  69. }
  70. //Get the course infos
  71. $sql = "SELECT * FROM $course_table WHERE code='".mysql_real_escape_string($course_code)."'";
  72. $result = api_sql_query($sql, __FILE__, __LINE__);
  73. if (mysql_num_rows($result) != 1)
  74. {
  75. header('Location: course_list.php');
  76. exit ();
  77. }
  78. $course = mysql_fetch_array($result,MYSQL_ASSOC);
  79. // Get course teachers
  80. $table_course_user = Database :: get_main_table(TABLE_MAIN_COURSE_USER);
  81. $sql = "SELECT user.user_id,lastname,firstname FROM $table_user as user,$table_course_user as course_user WHERE course_user.status='1' AND course_user.user_id=user.user_id AND course_user.course_code='".$course_code."' ORDER BY lastname,firstname";
  82. $res = api_sql_query($sql,__FILE__,__LINE__);
  83. $course_teachers = array();
  84. while($obj = mysql_fetch_object($res))
  85. {
  86. $course_teachers[$obj->user_id] = $obj->lastname.' '.$obj->firstname;
  87. }
  88. // Get all possible teachers without the course teachers
  89. $sql = "SELECT user_id,lastname,firstname FROM $table_user WHERE status='1' ORDER BY lastname,firstname";
  90. $res = api_sql_query($sql,__FILE__,__LINE__);
  91. $teachers = array();
  92. while($obj = mysql_fetch_object($res))
  93. {
  94. if(!array_key_exists($obj->user_id,$course_teachers)){
  95. $teachers[$obj->user_id] = $obj->lastname.' '.$obj->firstname;
  96. }
  97. if($course['tutor_name']==$course_teachers[$obj->user_id]){
  98. $course['tutor_name']=$obj->user_id;
  99. }
  100. //We add in the array platform teachers
  101. $platform_teachers[$obj->user_id] = $obj->lastname.' '.$obj->firstname;
  102. }
  103. //Case where there is no teacher in the course
  104. if(count($course_teachers)==0){
  105. $sql='SELECT tutor_name FROM '.$course_table.' WHERE code="'.$course_code.'"';
  106. $res = api_sql_query($sql,__FILE__,__LINE__);
  107. $tutor_name=mysql_result($res,0,0);
  108. $course['tutor_name']=array_search($tutor_name,$platform_teachers);
  109. }
  110. // Build the form
  111. $form = new FormValidator('update_course');
  112. $form->addElement('hidden','code',$course_code);
  113. $form->add_textfield('visual_code', get_lang('CourseCode'));
  114. $form->applyFilter('visual_code','strtoupper');
  115. //$form->add_textfield('tutor_name', get_lang('CourseTitular'));
  116. $form->addElement('select', 'tutor_name', get_lang('CourseTitular'), $platform_teachers);
  117. //$form->addElement('select', 'course_teachers', get_lang('CourseTeachers'), $teachers, 'multiple=multiple size="4" style="width: 150px;"');
  118. $group=array();
  119. $group[] = FormValidator::createElement('select', 'platform_teachers', '', $teachers, 'id="platform_teachers" multiple=multiple size="4" style="width: 150px;"');
  120. $group[] = FormValidator::createElement('select', 'course_teachers', '', $course_teachers, 'id="course_teachers" multiple=multiple size="4" style="width: 150px;"');
  121. $element_template = <<<EOT
  122. <div class="row">
  123. <div class="label">
  124. <!-- BEGIN required --><span class="form_required">*</span> <!-- END required -->{label}
  125. </div>
  126. <div class="formw" style="display:inline">
  127. <table cellpadding="0" cellspacing="0">
  128. <tr>
  129. <!-- BEGIN error --><span class="form_error">{error}</span><br /><!-- END error --> <td>{element}</td>
  130. </tr>
  131. </table>
  132. </div>
  133. </div>
  134. EOT;
  135. $renderer = $form->defaultRenderer();
  136. $renderer -> setElementTemplate($element_template, 'group');
  137. $form -> addGroup($group,'group',get_lang('CourseTeachers'),'</td><td width="50" align="center"><input type="button" onclick="moveItem(document.getElementById(\'platform_teachers\'), document.getElementById(\'course_teachers\'))" value=">>"><br><br><input type="button" onclick="moveItem(document.getElementById(\'course_teachers\'), document.getElementById(\'platform_teachers\'))" value="<<"></td><td>');
  138. $form->add_textfield( 'title', get_lang('Title'),true, array ('size' => '60'));
  139. $form->addElement('select', 'category_code', get_lang('CourseFaculty'), $categories);
  140. $form->add_textfield( 'department_name', get_lang('CourseDepartment'), false,array ('size' => '60'));
  141. $form->add_textfield( 'department_url', get_lang('CourseDepartmentURL'),false, array ('size' => '60'));
  142. $form->addElement('select_language', 'course_language', get_lang('CourseLanguage'));
  143. $form->addElement('radio', 'visibility', get_lang("CourseAccess"), get_lang('OpenToTheWorld'), COURSE_VISIBILITY_OPEN_WORLD);
  144. $form->addElement('radio', 'visibility', null, get_lang('OpenToThePlatform'), COURSE_VISIBILITY_OPEN_PLATFORM);
  145. $form->addElement('radio', 'visibility', null, get_lang('Private'), COURSE_VISIBILITY_REGISTERED);
  146. $form->addElement('radio', 'visibility', null, get_lang('CourseVisibilityClosed'), COURSE_VISIBILITY_CLOSED);
  147. $form->addElement('radio', 'subscribe', get_lang('Subscription'), get_lang('Allowed'), 1);
  148. $form->addElement('radio', 'subscribe', null, get_lang('Denied'), 0);
  149. $form->addElement('radio', 'unsubscribe', get_lang('Unsubscription'), get_lang('AllowedToUnsubscribe'), 1);
  150. $form->addElement('radio', 'unsubscribe', null, get_lang('NotAllowedToUnsubscribe'), 0);
  151. $form->addElement('text','disk_quota',get_lang('CourseQuota'));
  152. $form->addRule('disk_quota', get_lang('ThisFieldIsRequired'),'required');
  153. $form->addRule('disk_quota',get_lang('ThisFieldShouldBeNumeric'),'numeric');
  154. $form->addElement('button', null, get_lang('Ok'), 'onclick="valide()"');
  155. // Set some default values
  156. $course_db_name = $course['db_name'];
  157. $form->setDefaults($course);
  158. // Validate form
  159. if( $form->validate())
  160. {
  161. $course = $form->getSubmitValues();
  162. $dbName = $_POST['dbName'];
  163. $course_code = $course['code'];
  164. $visual_code = $course['visual_code'];
  165. $tutor_id = $course['tutor_name'];
  166. $tutor_name=$platform_teachers[$tutor_id];
  167. $teachers = $course['group']['course_teachers'];
  168. $title = $course['title'];
  169. $category_code = $course['category_code'];
  170. $department_name = $course['department_name'];
  171. $department_url = $course['department_url'];
  172. $course_language = $course['course_language'];
  173. $disk_quota = $course['disk_quota'];
  174. $visibility = $course['visibility'];
  175. $subscribe = $course['subscribe'];
  176. $unsubscribe = $course['unsubscribe'];
  177. if (!stristr($department_url, 'http://'))
  178. {
  179. $department_url = 'http://'.$department_url;
  180. }
  181. $sql = "UPDATE $course_table SET course_language='".mysql_real_escape_string($course_language)."',
  182. title='".mysql_real_escape_string($title)."',
  183. category_code='".mysql_real_escape_string($category_code)."',
  184. tutor_name='".mysql_real_escape_string($tutor_name)."',
  185. visual_code='".mysql_real_escape_string($visual_code)."',
  186. department_name='".mysql_real_escape_string($department_name)."',
  187. department_url='".mysql_real_escape_string($department_url)."',
  188. disk_quota='".mysql_real_escape_string($disk_quota)."',
  189. visibility = '".mysql_real_escape_string($visibility)."',
  190. subscribe = '".mysql_real_escape_string($subscribe)."',
  191. unsubscribe='".mysql_real_escape_string($unsubscribe)."'
  192. WHERE code='".mysql_real_escape_string($course_code)."'";
  193. api_sql_query($sql, __FILE__, __LINE__);
  194. $sql='DELETE FROM '.$course_user_table.' WHERE course_code="'.mysql_real_escape_string($course_code).'" AND status="1"';
  195. api_sql_query($sql, __FILE__, __LINE__);
  196. if(count($teachers)>0){
  197. foreach($teachers as $key){
  198. //We check if the teacher is already subscribed as student in this course
  199. $sql_select_teacher = 'SELECT 1 FROM '.$course_user_table.' WHERE user_id = "'.$key.'" AND course_code = "'.$course_code.'" AND status<>"1"';
  200. $result = api_sql_query($sql_select_teacher, __FILE__, __LINE__);
  201. if(mysql_num_rows($result) == 1){
  202. $sql = 'UPDATE '.$course_user_table.' SET status = "1" WHERE course_code = "'.$course_code.'" AND user_id = "'.$key.'"';
  203. }
  204. else{
  205. $sql = "INSERT INTO ".$course_user_table . " SET
  206. course_code = '".mysql_real_escape_string($course_code). "',
  207. user_id = '".$key . "',
  208. status = '1',
  209. role = '',
  210. tutor_id='0',
  211. sort='0',
  212. user_course_cat='0'";
  213. }
  214. api_sql_query($sql, __FILE__, __LINE__);
  215. }
  216. }
  217. $sql = "INSERT IGNORE INTO ".$course_user_table . " SET
  218. course_code = '".mysql_real_escape_string($course_code). "',
  219. user_id = '".$tutor_id . "',
  220. status = '1',
  221. role = '',
  222. tutor_id='0',
  223. sort='0',
  224. user_course_cat='0'";
  225. api_sql_query($sql, __FILE__, __LINE__);
  226. $forum_config_table = Database::get_course_table(TOOL_FORUM_CONFIG_TABLE,$course_db_name);
  227. $sql = "UPDATE ".$forum_config_table." SET default_lang='".mysql_real_escape_string($course_language)."'";
  228. header('Location: course_list.php');
  229. exit ();
  230. }
  231. Display::display_header($tool_name);
  232. echo "<script>
  233. function moveItem(origin , destination){
  234. for(var i = 0 ; i<origin.options.length ; i++) {
  235. if(origin.options[i].selected) {
  236. destination.options[destination.length] = new Option(origin.options[i].text,origin.options[i].value);
  237. origin.options[i]=null;
  238. i = i-1;
  239. }
  240. }
  241. destination.selectedIndex = -1;
  242. sortOptions(destination.options);
  243. }
  244. function sortOptions(options) {
  245. newOptions = new Array();
  246. for (i = 0 ; i<options.length ; i++)
  247. newOptions[i] = options[i];
  248. newOptions = newOptions.sort(mysort);
  249. options.length = 0;
  250. for(i = 0 ; i < newOptions.length ; i++)
  251. options[i] = newOptions[i];
  252. }
  253. function mysort(a, b){
  254. if(a.text.toLowerCase() > b.text.toLowerCase()){
  255. return 1;
  256. }
  257. if(a.text.toLowerCase() < b.text.toLowerCase()){
  258. return -1;
  259. }
  260. return 0;
  261. }
  262. function valide(){
  263. var options = document.getElementById('course_teachers').options;
  264. for (i = 0 ; i<options.length ; i++)
  265. options[i].selected = true;
  266. document.update_course.submit();
  267. }
  268. </script>";
  269. //api_display_tool_title($tool_name);
  270. // Display the form
  271. $form->display();
  272. /*
  273. ==============================================================================
  274. FOOTER
  275. ==============================================================================
  276. */
  277. Display :: display_footer();
  278. ?>