user.php 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827
  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) various contributors
  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. * This script displays a list of the users of the current course.
  22. * Course admins can change user perimssions, subscribe and unsubscribe users...
  23. *
  24. * EXPERIMENTAL: support for virtual courses
  25. * - show users registered in virtual and real courses;
  26. * - only show the users of a virtual course if the current user;
  27. * is registered in that virtual course.
  28. *
  29. * Exceptions: platform admin and the course admin will see all virtual courses.
  30. * This is a new feature, there may be bugs.
  31. *
  32. * @todo possibility to edit user-course rights and view statistics for users in virtual courses
  33. * @todo convert normal table display to display function (refactor virtual course display function)
  34. * @todo display table functions need support for align and valign (e.g. to center text in cells) (this is now possible)
  35. * @author Roan Embrechts, refactoring + virtual courses support
  36. * @package dokeos.user
  37. ==============================================================================
  38. */
  39. /*
  40. ==============================================================================
  41. INIT SECTION
  42. ==============================================================================
  43. */
  44. // name of the language file that needs to be included
  45. $language_file = array('registration','admin');
  46. require_once ("../inc/global.inc.php");
  47. $this_section = SECTION_COURSES;
  48. /*
  49. -----------------------------------------------------------
  50. Libraries
  51. -----------------------------------------------------------
  52. */
  53. require_once (api_get_path(LIBRARY_PATH)."debug.lib.inc.php");
  54. require_once (api_get_path(LIBRARY_PATH)."events.lib.inc.php");
  55. require_once (api_get_path(LIBRARY_PATH)."export.lib.inc.php");
  56. require_once (api_get_path(LIBRARY_PATH)."course.lib.php");
  57. require_once (api_get_path(LIBRARY_PATH).'sortabletable.class.php');
  58. require_once (api_get_path(LIBRARY_PATH).'formvalidator/FormValidator.class.php');
  59. //CHECK KEYS
  60. if( !isset ($_cid))
  61. {
  62. header("location: ".$_configuration['root_web']);
  63. }
  64. /*
  65. -----------------------------------------------------------
  66. Constants and variables
  67. -----------------------------------------------------------
  68. */
  69. $currentCourseID = $_course['sysCode'];
  70. /*
  71. ==============================================================================
  72. FUNCTIONS
  73. ==============================================================================
  74. */
  75. function display_user_search_form()
  76. {
  77. echo '<form method="get" action="user.php">';
  78. echo get_lang("SearchForUser") . "&nbsp;&nbsp;";
  79. echo '<input type="text" name="keyword" value="'.$_GET['keyword'].'"/>';
  80. echo '<input type="submit" value="'.get_lang('SearchButton').'"/>';
  81. echo '</form>';
  82. }
  83. /**
  84. * This function displays a list if users for each virtual course linked to the current
  85. * real course.
  86. *
  87. * defines globals
  88. *
  89. * @version 1.0
  90. * @author Roan Embrechts
  91. * @todo users from virtual courses always show "-" for the group related output. Edit and statistics columns are disabled * for these users, for now.
  92. */
  93. function show_users_in_virtual_courses()
  94. {
  95. global $_course, $_user;
  96. $real_course_code = $_course['sysCode'];
  97. $real_course_info = Database::get_course_info($real_course_code);
  98. $user_subscribed_virtual_course_list = CourseManager::get_list_of_virtual_courses_for_specific_user_and_real_course($_user['user_id'], $real_course_code);
  99. $number_of_virtual_courses = count($user_subscribed_virtual_course_list);
  100. $row = 0;
  101. $column_header[$row ++] = "ID";
  102. $column_header[$row ++] = get_lang("FullUserName");
  103. $column_header[$row ++] = get_lang("Role");
  104. $column_header[$row ++] = get_lang("Group");
  105. if( api_is_allowed_to_edit())
  106. {
  107. $column_header[$row ++] = get_lang("Tutor");
  108. }
  109. if( api_is_allowed_to_edit())
  110. {
  111. $column_header[$row ++] = get_lang("CourseManager");
  112. }
  113. //$column_header[$row++] = get_lang("Edit");
  114. //$column_header[$row++] = get_lang("Unreg");
  115. //$column_header[$row++] = get_lang("Tracking");
  116. if( !is_array($user_subscribed_virtual_course_list))
  117. return;
  118. foreach ($user_subscribed_virtual_course_list as $virtual_course)
  119. {
  120. $virtual_course_code = $virtual_course["code"];
  121. $virtual_course_user_list = CourseManager::get_user_list_from_course_code($virtual_course_code);
  122. $message = get_lang("RegisteredInVirtualCourse")." ".$virtual_course["title"]."&nbsp;&nbsp;(".$virtual_course["code"].")";
  123. echo "<br/>";
  124. echo "<h4>".$message."</h4>";
  125. $properties["width"] = "100%";
  126. $properties["cellspacing"] = "1";
  127. Display::display_complex_table_header($properties, $column_header);
  128. foreach ($virtual_course_user_list as $this_user)
  129. {
  130. $user_id = $this_user["user_id"];
  131. $loginname = $this_user["username"];
  132. $lastname = $this_user["lastname"];
  133. $firstname = $this_user["firstname"];
  134. $status = $this_user["status"];
  135. $role = $this_user["role"];
  136. if( $status == "1")
  137. $status = get_lang("CourseManager");
  138. else
  139. $status = " - ";
  140. //if(xxx['tutor'] == '0') $tutor = " - ";
  141. //else $tutor = get_lang("Tutor");
  142. $full_name = $lastname.", ".$firstname;
  143. if( $lastname == "" || $firstname == '')
  144. $full_name = $loginname;
  145. $user_info_hyperlink = "<a href=\"userInfo.php?".api_get_cidreq()."&origin=".$origin."&uInfo=".$user_id."&virtual_course=".$virtual_course["code"]."\">".$full_name."</a>";
  146. $row = 0;
  147. $table_row[$row ++] = $user_id;
  148. $table_row[$row ++] = $user_info_hyperlink; //Full name
  149. $table_row[$row ++] = $role; //Description
  150. $table_row[$row ++] = " - "; //Group, for the moment groups don't work for students in virtual courses
  151. if( api_is_allowed_to_edit())
  152. $table_row[$row ++] = " - "; //Tutor column
  153. if( api_is_allowed_to_edit())
  154. $table_row[$row ++] = $status; //Course Manager column
  155. Display::display_table_row($bgcolor, $table_row, true);
  156. }
  157. Display::display_table_footer();
  158. }
  159. }
  160. /*
  161. -----------------------------------------------------------
  162. Header
  163. -----------------------------------------------------------
  164. */
  165. if( $origin != 'learnpath')
  166. {
  167. if (isset($_GET['keyword']))
  168. {
  169. $interbreadcrumb[] = array ("url" => "user.php", "name" => get_lang("Users"));
  170. $tool_name = get_lang('SearchResults');
  171. }
  172. else
  173. {
  174. $tool_name = get_lang('Users');
  175. }
  176. Display::display_header($tool_name, "User");
  177. }
  178. else
  179. {
  180. ?> <link rel="stylesheet" type="text/css" href="<?php echo api_get_path(WEB_CODE_PATH); ?>css/default.css" /> <?php
  181. }
  182. if( isset($message))
  183. {
  184. Display::display_normal_message($message);
  185. }
  186. /*
  187. ==============================================================================
  188. MAIN CODE
  189. ==============================================================================
  190. */
  191. if(!$is_allowed_in_course){
  192. api_not_allowed();
  193. }
  194. //statistics
  195. event_access_tool(TOOL_USER);
  196. /*
  197. --------------------------------------
  198. Setting the permissions for this page
  199. --------------------------------------
  200. */
  201. $is_allowed_to_track = ($is_courseAdmin || $is_courseTutor) && $_configuration['tracking_enabled'];
  202. /*
  203. --------------------------------------
  204. Unregistering a user section
  205. --------------------------------------
  206. */
  207. if(api_is_allowed_to_edit())
  208. {
  209. if(isset($_POST['action']))
  210. {
  211. switch($_POST['action'])
  212. {
  213. case 'unsubscribe' :
  214. // Make sure we don't unsubscribe current user from the course
  215. $user_ids = array_diff($_POST['user'],array($_user['user_id']));
  216. if(count($user_ids) > 0)
  217. {
  218. CourseManager::unsubscribe_user($user_ids, $_SESSION['_course']['sysCode']);
  219. $message = get_lang('UsersUnsubscribed');
  220. }
  221. break;
  222. }
  223. }
  224. }
  225. if(api_is_allowed_to_edit())
  226. {
  227. if( isset ($_GET['action']))
  228. {
  229. switch ($_GET['action'])
  230. {
  231. case 'export' :
  232. if(api_get_setting('use_session_mode')!="true"){
  233. $table_user = Database::get_main_table(TABLE_MAIN_USER);
  234. $table_course_user = Database::get_main_table(TABLE_MAIN_COURSE_USER);
  235. $course = api_get_course_info();
  236. $sql = "SELECT official_code,firstname,lastname,email FROM $table_user u, $table_course_user cu WHERE cu.user_id = u.user_id AND cu.course_code = '".$course['sysCode']."' ORDER BY lastname ASC";
  237. }
  238. else
  239. {
  240. $sql = "SELECT `user`.`user_id`, `user`.`lastname`, `user`.`firstname`,
  241. `user`.`email`, `user`.`official_code`, session.name
  242. FROM ".Database::get_main_table(TABLE_MAIN_USER)." `user`, ".Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER)." cu, ".Database::get_main_table(TABLE_MAIN_SESSION)." session
  243. WHERE `user`.`user_id`= cu.`id_user`
  244. AND cu.`course_code`='".$currentCourseID."'
  245. AND session.id=cu.id_session
  246. AND session.id='".$_SESSION['id_session']."'";
  247. }
  248. $users = api_sql_query($sql, __FILE__, __LINE__);
  249. while ($user = mysql_fetch_array($users, MYSQL_ASSOC))
  250. {
  251. $data[] = $user;
  252. }
  253. switch ($_GET['type'])
  254. {
  255. case 'csv' :
  256. Export::export_table_csv($data);
  257. case 'xls' :
  258. Export::export_table_xls($data);
  259. }
  260. }
  261. }
  262. } // end if allowed to edit
  263. if(api_is_allowed_to_edit())
  264. {
  265. // Unregister user from course
  266. if($_GET['unregister'])
  267. {
  268. if(isset($_GET['user_id']) && is_numeric($_GET['user_id']) && $_GET['user_id'] != $_user['user_id'])
  269. {
  270. CourseManager::unsubscribe_user($_GET['user_id'],$_SESSION['_course']['sysCode']);
  271. $message = get_lang('UserUnsubscribed');
  272. }
  273. }
  274. } // end if allowed to edit
  275. /*
  276. -----------------------------------------------------------
  277. Introduction section
  278. (editable by course admins)
  279. -----------------------------------------------------------
  280. */
  281. Display::display_introduction_section(TOOL_USER, $is_allowed);
  282. if( api_is_allowed_to_edit())
  283. {
  284. echo "<div align=\"right\">";
  285. echo '<a href="user.php?action=export&type=csv"><img align="absbottom" src="../img/file_xls.gif">&nbsp;'.get_lang('ExportAsCSV').'</a> | ';
  286. echo '<a href="user.php?action=export&type=xls"><img align="absbottom" src="../img/file_xls.gif">&nbsp;'.get_lang('ExportAsXLS').'</a> | ';
  287. echo "<a href=\"subscribe_user.php\"><img align='absbottom' src='../img/add_user_big.gif'>&nbsp;".get_lang("SubscribeUserToCourse")."</a> | ";
  288. echo "<a href=\"../group/group.php?".api_get_cidreq()."\"><img align='absbottom' src='../img/edit_group.gif'>&nbsp;".get_lang("GroupUserManagement")."</a>";
  289. if(api_get_setting('use_session_mode')=='false')
  290. {
  291. echo ' | <a href="class.php">'.get_lang('Classes').'</a>';
  292. }
  293. echo "</div>";
  294. }
  295. /*
  296. --------------------------------------
  297. DISPLAY USERS LIST
  298. --------------------------------------
  299. Also shows a "next page" button if there are
  300. more than 50 users.
  301. There's a bug in here somewhere - some users count as more than one if they are in more than one group
  302. --> code for > 50 users should take this into account
  303. (Roan, Feb 2004)
  304. */
  305. if( CourseManager::has_virtual_courses_from_code($course_id, $user_id))
  306. {
  307. $real_course_code = $_course['sysCode'];
  308. $real_course_info = Database::get_course_info($real_course_code);
  309. $message = get_lang("RegisteredInRealCourse")." ".$real_course_info["title"]."&nbsp;&nbsp;(".$real_course_info["official_code"].")";
  310. echo "<h4>".$message."</h4>";
  311. }
  312. /*
  313. ==============================================================================
  314. DISPLAY LIST OF USERS
  315. ==============================================================================
  316. */
  317. /**
  318. * * Get the users to display on the current page.
  319. */
  320. function get_number_of_users()
  321. {
  322. $user_table = Database::get_main_table(TABLE_MAIN_USER);
  323. $course_user_table = Database::get_main_table(TABLE_MAIN_COURSE_USER);
  324. if(api_get_setting('use_session_mode')!="true"){
  325. $sql = "SELECT COUNT(u.user_id) AS number_of_users FROM $user_table u,$course_user_table cu WHERE u.user_id = cu.user_id and course_code='".$_SESSION['_course']['id']."'";
  326. }
  327. else{
  328. $sql = "SELECT COUNT(id_user)+1 AS number_of_users
  329. FROM $user_table u, ".Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER)."
  330. WHERE course_code= '".$_SESSION['_course']['id']."'
  331. AND id_session='".$_SESSION['id_session']."'";
  332. }
  333. if( isset ($_GET['keyword']))
  334. {
  335. $keyword = mysql_real_escape_string($_GET['keyword']);
  336. $sql .= " AND (firstname LIKE '%".$keyword."%' OR lastname LIKE '%".$keyword."%' OR username LIKE '%".$keyword."%' OR official_code LIKE '%".$keyword."%')";
  337. }
  338. $res = api_sql_query($sql, __FILE__, __LINE__);
  339. $result = mysql_fetch_object($res);
  340. return $result->number_of_users;
  341. }
  342. /**
  343. * Get the users to display on the current page.
  344. */
  345. function get_user_data($from, $number_of_items, $column, $direction)
  346. {
  347. global $is_allowed_to_track;
  348. //print_r($_SESSION);
  349. //echo $_SESSION["id_session"];
  350. //It's a teacher in the current course; We display all the students of the course (as if the course belong to no sessions)
  351. if($_SESSION["is_courseAdmin"] || $_SESSION["is_platformAdmin"]){
  352. $user_table = Database::get_main_table(TABLE_MAIN_USER);
  353. $course_user_table = Database::get_main_table(TABLE_MAIN_COURSE_USER);
  354. $columns[] = 'u.user_id';
  355. $columns[] = 'u.official_code';
  356. $columns[] = 'u.lastname';
  357. $columns[] = 'u.firstname';
  358. $columns[] = 'cu.role';
  359. $columns[] = "''"; //placeholder for group-data
  360. $columns[] = "IF(cu.tutor_id = 1,'".get_lang('Tutor')."','')";
  361. $columns[] = "IF(cu.status = 1,'".get_lang('CourseManager')."','')";
  362. $columns[] = 'u.user_id';
  363. $sql = "SELECT ";
  364. foreach( $columns as $index => $sqlcolumn)
  365. {
  366. $columns[$index] = ' '.$sqlcolumn.' AS col'.$index.' ';
  367. }
  368. $sql .= implode(" , ", $columns);
  369. $sql .= "FROM $user_table u,$course_user_table cu WHERE u.user_id = cu.user_id and course_code='".$_SESSION['_course']['id']."'";
  370. if( isset ($_GET['keyword']))
  371. {
  372. $keyword = mysql_real_escape_string($_GET['keyword']);
  373. $sql .= " AND (firstname LIKE '%".$keyword."%' OR lastname LIKE '%".$keyword."%' OR username LIKE '%".$keyword."%' OR official_code LIKE '%".$keyword."%')";
  374. }
  375. $sql .= " ORDER BY col$column $direction ";
  376. $sql .= " LIMIT $from, $number_of_items";
  377. $res = api_sql_query($sql, __FILE__, __LINE__);
  378. $users = array();
  379. $user_ids = array();
  380. while($user = mysql_fetch_row($res))
  381. {
  382. $users[''.$user[0]] = $user;
  383. $user_ids[] = $user[0];
  384. }
  385. $sql = "
  386. SELECT
  387. ug.user_id,
  388. ug.group_id group_id,
  389. sg.name
  390. FROM " . Database::get_course_table(TABLE_GROUP_USER) . " ug
  391. LEFT JOIN " . Database::get_course_table(TABLE_GROUP) . " sg ON ug.group_id = sg.id
  392. WHERE ug.user_id IN ('".implode("','", $user_ids)."')";
  393. $res = api_sql_query($sql,__FILE__,__LINE__);
  394. while($group = mysql_fetch_object($res))
  395. {
  396. $users[''.$group->user_id][5] .= $group->name.'<br />';
  397. }
  398. //Sessions
  399. $columns=array();
  400. $columns[] = 'u.user_id';
  401. $columns[] = 'u.official_code';
  402. $columns[] = 'u.lastname';
  403. $columns[] = 'u.firstname';
  404. $columns[] = "''";
  405. $columns[] = "''"; //placeholder for group-data
  406. $columns[] = "''";
  407. $columns[] = "''";
  408. $columns[] = 'u.user_id';
  409. $sql = "SELECT ".implode(',',$columns)."
  410. FROM ".Database::get_main_table(TABLE_MAIN_USER)." `u`, ".Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER)." c
  411. WHERE `u`.`user_id`= c.`id_user`
  412. AND c.`course_code`='".$_SESSION['_course']['id']."'
  413. ";
  414. if( isset ($_GET['keyword']))
  415. {
  416. $keyword = mysql_real_escape_string($_GET['keyword']);
  417. $sql .= " AND (firstname LIKE '%".$keyword."%' OR lastname LIKE '%".$keyword."%' OR username LIKE '%".$keyword."%' OR official_code LIKE '%".$keyword."%')";
  418. }
  419. $res = api_sql_query($sql, __FILE__, __LINE__);
  420. while ($user = mysql_fetch_row($res))
  421. {
  422. $users[''.$user[0]] = $user;
  423. $user_ids[] = $user[0];
  424. }
  425. $sql = "SELECT ug.user_id, ug.group_id group_id, sg.name
  426. FROM ".Database::get_course_table(TABLE_GROUP_USER)." ug
  427. LEFT JOIN ".Database::get_course_table(TABLE_GROUP)." sg
  428. ON ug.group_id = sg.id
  429. WHERE ug.user_id IN ('".implode("','", $user_ids)."')";
  430. $res = api_sql_query($sql,__FILE__,__LINE__);
  431. while($group = mysql_fetch_object($res))
  432. {
  433. $users[''.$group->user_id][5] .= $group->name.'<br />';
  434. }
  435. }
  436. //Sudent or coach
  437. else
  438. {
  439. //We are coach
  440. if($_SESSION["is_courseTutor"]){
  441. $columns = array();
  442. if(api_is_allowed_to_edit())
  443. {
  444. $columns[] = 'u.user_id';
  445. }
  446. $columns[] = 'u.official_code';
  447. $columns[] = 'u.lastname';
  448. $columns[] = 'u.firstname';
  449. $columns[] = '""';
  450. $columns[] = "''"; //placeholder for group-data
  451. if(api_is_allowed_to_edit())
  452. {
  453. $columns[] = "''";
  454. $columns[] = "''";
  455. }
  456. $columns[] = 'u.user_id';
  457. $tbl_session_course_user = Database :: get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
  458. $tbl_course_user = Database :: get_main_table(TABLE_MAIN_COURSE_USER);
  459. $tbl_user = Database :: get_main_table(TABLE_MAIN_USER);
  460. $tbl_session_course = Database :: get_main_table(TABLE_MAIN_SESSION_COURSE);
  461. $sql="SELECT ".implode(',',$columns)."
  462. FROM $tbl_session_course_user as srcru, $tbl_user as u
  463. WHERE srcru.course_code='".$_SESSION['_course']['id']."' AND srcru.id_user=u.user_id
  464. ";
  465. $res = api_sql_query($sql, __FILE__, __LINE__);
  466. while ($user = mysql_fetch_array($res))
  467. {
  468. $users[''.$user["user_id"]] = $user;
  469. $user_ids[] = $user["user_id"];
  470. }
  471. }
  472. else
  473. {
  474. $columns = array();
  475. if(api_is_allowed_to_edit())
  476. {
  477. $columns[] = 'u.user_id';
  478. }
  479. $columns[] = 'u.official_code';
  480. $columns[] = 'u.lastname';
  481. $columns[] = 'u.firstname';
  482. $columns[] = '""';
  483. $columns[] = "''"; //placeholder for group-data
  484. if(api_is_allowed_to_edit())
  485. {
  486. $columns[] = "''";
  487. $columns[] = "''";
  488. }
  489. $columns[] = 'u.user_id';
  490. $tbl_session_course_user = Database :: get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
  491. $tbl_course_user = Database :: get_main_table(TABLE_MAIN_COURSE_USER);
  492. $tbl_user = Database :: get_main_table(TABLE_MAIN_USER);
  493. $tbl_session_course = Database :: get_main_table(TABLE_MAIN_SESSION_COURSE);
  494. if(empty($_SESSION["id_session"]))
  495. {
  496. $sql="SELECT ";
  497. foreach( $columns as $index => $sqlcolumn)
  498. {
  499. $columns[$index] = ' '.$sqlcolumn.' AS col'.$index.' ';
  500. }
  501. $sql .= implode(" , ", $columns);
  502. $sql .= "FROM $tbl_course_user as cu, $tbl_user as u
  503. WHERE cu.course_code='".$_SESSION['_course']['id']."' AND cu.user_id=u.user_id
  504. ";
  505. }
  506. else
  507. {
  508. $sql="SELECT ";
  509. foreach( $columns as $index => $sqlcolumn)
  510. {
  511. $columns[$index] = ' '.$sqlcolumn.' AS col'.$index.' ';
  512. }
  513. $sql .= implode(" , ", $columns);
  514. $sql .= "FROM $tbl_session_course_user as srcru, $tbl_user as u
  515. WHERE srcru.course_code='".$_SESSION['_course']['id']."' AND srcru.id_user=u.user_id";
  516. }
  517. if( isset ($_GET['keyword']))
  518. {
  519. $keyword = mysql_real_escape_string($_GET['keyword']);
  520. $sql .= " AND (firstname LIKE '%".$keyword."%' OR lastname LIKE '%".$keyword."%' OR username LIKE '%".$keyword."%' OR official_code LIKE '%".$keyword."%')";
  521. }
  522. $sql .= " ORDER BY col$column $direction ";
  523. $sql .= " LIMIT $from, $number_of_items";
  524. $res = api_sql_query($sql, __FILE__, __LINE__);
  525. while ($user = mysql_fetch_array($res))
  526. {
  527. $users[''.$user[0]] = $user;
  528. $user_ids[] = $user["user_id"];
  529. }
  530. }
  531. }
  532. /*if(api_get_setting('use_session_mode')!='true')
  533. {
  534. $user_table = Database::get_main_table(TABLE_MAIN_USER);
  535. $course_user_table = Database::get_main_table(TABLE_MAIN_COURSE_USER);
  536. if(api_is_allowed_to_edit())
  537. $columns[] = 'u.user_id';
  538. $columns[] = 'u.official_code';
  539. $columns[] = 'u.lastname';
  540. $columns[] = 'u.firstname';
  541. $columns[] = 'cu.role';
  542. $columns[] = "''"; //placeholder for group-data
  543. if(api_is_allowed_to_edit())
  544. {
  545. $columns[] = "IF(cu.tutor_id = 1,'".get_lang('Tutor')."','')";
  546. $columns[] = "IF(cu.status = 1,'".get_lang('CourseManager')."','')";
  547. }
  548. $columns[] = 'u.user_id';
  549. $sql = "SELECT ";
  550. foreach( $columns as $index => $sqlcolumn)
  551. $columns[$index] = ' '.$sqlcolumn.' AS col'.$index.' ';
  552. $sql .= implode(" , ", $columns);
  553. $sql .= "FROM $user_table u,$course_user_table cu WHERE u.user_id = cu.user_id and course_code='".$_SESSION['_course']['id']."'";
  554. if( isset ($_GET['keyword']))
  555. {
  556. $keyword = mysql_real_escape_string($_GET['keyword']);
  557. $sql .= " AND (firstname LIKE '%".$keyword."%' OR lastname LIKE '%".$keyword."%' OR username LIKE '%".$keyword."%' OR official_code LIKE '%".$keyword."%')";
  558. }
  559. $sql .= " ORDER BY col$column $direction ";
  560. $sql .= " LIMIT $from, $number_of_items";
  561. $res = api_sql_query($sql, __FILE__, __LINE__);
  562. $users = array();
  563. $user_ids = array();
  564. while($user = mysql_fetch_row($res))
  565. {
  566. $users[''.$user[0]] = $user;
  567. $user_ids[] = $user[0];
  568. }
  569. $sql = "
  570. SELECT
  571. ug.user_id,
  572. ug.group_id group_id,
  573. sg.name
  574. FROM " . Database::get_course_table(TABLE_GROUP_USER) . " ug
  575. LEFT JOIN " . Database::get_course_table(TABLE_GROUP) . " sg ON ug.group_id = sg.id
  576. WHERE ug.user_id IN ('".implode("','", $user_ids)."')";
  577. $res = api_sql_query($sql,__FILE__,__LINE__);
  578. while($group = mysql_fetch_object($res))
  579. $users[''.$group->user_id][5] .= $group->name.'<br />';
  580. }
  581. else {
  582. $columns = array();
  583. if(api_is_allowed_to_edit())
  584. {
  585. $columns[] = 'u.user_id';
  586. }
  587. $columns[] = 'u.official_code';
  588. $columns[] = 'u.lastname';
  589. $columns[] = 'u.firstname';
  590. $columns[] = '"Professor"';
  591. $columns[] = "''"; //placeholder for group-data
  592. if(api_is_allowed_to_edit())
  593. {
  594. $columns[] = "'".get_lang('Tutor')."'";
  595. $columns[] = "'".get_lang('CourseManager')."'";
  596. }
  597. $columns[] = 'u.user_id';
  598. /*$sql = "SELECT ".implode(',',$columns)."
  599. FROM ".Database::get_main_table(TABLE_MAIN_USER)." `u`, ".Database::get_main_table(TABLE_MAIN_SESSION_COURSE)." c
  600. WHERE `u`.`user_id`= c.`id_coach`
  601. AND c.`course_code`='".$_SESSION['_course']['id']."'
  602. AND c.id_session='".$_SESSION['id_session']."'";*/
  603. /*$sql = "SELECT ".implode(',',$columns)."
  604. FROM ".Database::get_main_table(TABLE_MAIN_USER)." `u`, ".Database::get_main_table(TABLE_MAIN_SESSION_COURSE)." c
  605. WHERE `u`.`user_id`= c.`id_coach`
  606. AND c.`course_code`='".$_SESSION['_course']['id']."'
  607. ";
  608. $res = api_sql_query($sql, __FILE__, __LINE__);
  609. $users = array ();
  610. while ($user = mysql_fetch_row($res))
  611. {
  612. $users[''.$user[0]] = $user;
  613. $user_ids[] = $user[0];
  614. }
  615. $columns = array();
  616. if(api_is_allowed_to_edit())
  617. {
  618. $columns[] = 'u.user_id';
  619. }
  620. $columns[] = 'u.official_code';
  621. $columns[] = 'u.lastname';
  622. $columns[] = 'u.firstname';
  623. $columns[] = '"Professor"';
  624. $columns[] = "''"; //placeholder for group-data
  625. if(api_is_allowed_to_edit())
  626. {
  627. $columns[] = "''";
  628. $columns[] = "''";
  629. }
  630. $columns[] = 'u.user_id';
  631. /*$sql = "SELECT ".implode(',',$columns)."
  632. FROM ".Database::get_main_table(TABLE_MAIN_USER)." `u`, ".Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER)." c
  633. WHERE `u`.`user_id`= c.`id_user`
  634. AND c.`course_code`='".$_SESSION['_course']['id']."'
  635. AND c.id_session='".$_SESSION['id_session']."'";*/
  636. /*$sql = "SELECT ".implode(',',$columns)."
  637. FROM ".Database::get_main_table(TABLE_MAIN_USER)." `u`, ".Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER)." c
  638. WHERE `u`.`user_id`= c.`id_user`
  639. AND c.`course_code`='".$_SESSION['_course']['id']."'
  640. ";
  641. $res = api_sql_query($sql, __FILE__, __LINE__);
  642. while ($user = mysql_fetch_row($res))
  643. {
  644. $users[''.$user[0]] = $user;
  645. $user_ids[] = $user[0];
  646. }
  647. $sql = "SELECT ug.user_id, ug.group_id group_id, sg.name
  648. FROM ".Database::get_course_table(TABLE_GROUP_USER)." ug
  649. LEFT JOIN ".Database::get_course_table(TABLE_GROUP)." sg
  650. ON ug.group_id = sg.id
  651. WHERE ug.user_id IN ('".implode("','", $user_ids)."')";
  652. $res = api_sql_query($sql,__FILE__,__LINE__);
  653. while($group = mysql_fetch_object($res))
  654. {
  655. $users[''.$group->user_id][5] .= $group->name.'<br />';
  656. }
  657. }*/
  658. return $users;
  659. }
  660. /**
  661. * Build the modify-column of the table
  662. * @param int $user_id The user id
  663. * @return string Some HTML-code
  664. */
  665. function modify_filter($user_id)
  666. {
  667. global $origin,$_user,$is_allowed_to_track;
  668. $result="<div style='text-align: center'>";
  669. // info
  670. $result .= '<a href="userInfo.php?origin='.$origin.'&amp;uInfo='.$user_id.'"><img border="0" alt="'.get_lang('Info').'" src="../img/info_small.gif" /></a>&nbsp;';
  671. if($is_allowed_to_track)
  672. {
  673. $result .= '<a href="../tracking/userLog.php?'.api_get_cidreq().'&amp;origin='.$origin.'&amp;uInfo='.$user_id.'"><img border="0" alt="'.get_lang('Tracking').'" src="../img/statistics.gif" /></a>&nbsp;';
  674. }
  675. if(api_is_allowed_to_edit())
  676. {
  677. // edit
  678. $result .= '<a href="userInfo.php?origin='.$origin.'&amp;editMainUserInfo='.$user_id.'"><img border="0" alt="'.get_lang('Edit').'" src="../img/edit.gif" /></a>&nbsp;';
  679. // unregister
  680. if( $user_id != $_user['user_id'])
  681. {
  682. $result .= '<a href="'.$_SERVER['PHP_SELF'].'?unregister=yes&amp;user_id='.$user_id.'&amp;'.$sort_params.'" onclick="javascript:if(!confirm(\''.addslashes(htmlentities(get_lang('ConfirmYourChoice'))).'\')) return false;"><img border="0" alt="'.get_lang("Unreg").'" src="../img/delete.gif"/></a>';
  683. }
  684. }
  685. $result.="</div>";
  686. return $result;
  687. }
  688. $default_column = api_is_allowed_to_edit() ? 2 : 1;
  689. $table = new SortableTable('users', 'get_number_of_users', 'get_user_data',$default_column);
  690. $parameters['keyword'] = $_GET['keyword'];
  691. $table->set_additional_parameters($parameters);
  692. $header_nr = 0;
  693. if( api_is_allowed_to_edit())
  694. {
  695. $table->set_header($header_nr++, '', false);
  696. }
  697. $table->set_header($header_nr++, get_lang('OfficialCode'));
  698. $table->set_header($header_nr++, get_lang('Lastname'));
  699. $table->set_header($header_nr++, get_lang('Firstname'));
  700. $table->set_header($header_nr++, get_lang('Role'));
  701. $table->set_header($header_nr++, get_lang('Group'),false);
  702. if( api_is_allowed_to_edit())
  703. {
  704. $table->set_header($header_nr++, get_lang('Tutor'));
  705. $table->set_header($header_nr++, get_lang('CourseManager'));
  706. }
  707. //actions column
  708. $table->set_header($header_nr++, '', false);
  709. $table->set_column_filter($header_nr-1,'modify_filter');
  710. if( api_is_allowed_to_edit())
  711. {
  712. $table->set_form_actions(array ('unsubscribe' => get_lang('Unreg')), 'user');
  713. }
  714. // Build search-form
  715. $form = new FormValidator('search_user', 'get','','',null,false);
  716. $renderer = & $form->defaultRenderer();
  717. $renderer->setElementTemplate('<span>{element}</span> ');
  718. $form->add_textfield('keyword', '', false);
  719. $form->addElement('submit', 'submit', get_lang('SearchButton'));
  720. $form->display();
  721. echo '<br />';
  722. $table->display();
  723. if( get_setting('allow_user_headings') == 'true' && $is_courseAdmin && api_is_allowed_to_edit() && $origin != 'learnpath') // only course administrators see this line
  724. {
  725. echo "<div align=\"right\">", "<form method=\"post\" action=\"userInfo.php\">", get_lang("CourseAdministratorOnly"), " : ", "<input type=\"submit\" name=\"viewDefList\" value=\"".get_lang("DefineHeadings")."\" />", "</form>", "</div>\n";
  726. }
  727. //User list of the virtual courses linked to this course.
  728. //show_users_in_virtual_courses($is_allowed_to_track);
  729. /*
  730. ==============================================================================
  731. FOOTER
  732. ==============================================================================
  733. */
  734. if( $origin != 'learnpath')
  735. {
  736. Display::display_footer();
  737. }
  738. ?>