classmanager.lib.php 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. <?php
  2. /* For licensing terms, see /license.txt */
  3. /**
  4. * This is the class library for Dokeos.
  5. * @package chamilo.library
  6. */
  7. require_once (api_get_path(LIBRARY_PATH).'course.lib.php');
  8. /**
  9. * This library contains some functions for class-management.
  10. * @author Bart Mollet
  11. * @package dokeos.library
  12. */
  13. class ClassManager
  14. {
  15. /**
  16. * Get class information
  17. * @note This function can't be named get_class() because that's a standard
  18. * php-function.
  19. */
  20. function get_class_info($class_id)
  21. {
  22. $table_class = Database :: get_main_table(TABLE_MAIN_CLASS);
  23. $sql = "SELECT * FROM $table_class WHERE id='".$class_id."'";
  24. $res = Database::query($sql);
  25. return Database::fetch_array($res, 'ASSOC');
  26. }
  27. /**
  28. * Change the name of a class
  29. * @param string $name The new name
  30. * @param int $class_id The class id
  31. */
  32. function set_name($name, $class_id)
  33. {
  34. $table_class = Database :: get_main_table(TABLE_MAIN_CLASS);
  35. $sql = "UPDATE $table_class SET name='".Database::escape_string($name)."' WHERE id='".$class_id."'";
  36. $res = Database::query($sql);
  37. }
  38. /**
  39. * Create a class
  40. * @param string $name
  41. */
  42. function create_class($name)
  43. {
  44. $table_class = Database :: get_main_table(TABLE_MAIN_CLASS);
  45. $sql = "INSERT INTO $table_class SET name='".Database::escape_string($name)."'";
  46. Database::query($sql);
  47. return Database::affected_rows() == 1;
  48. }
  49. /**
  50. * Check if a classname is allready in use
  51. * @param string $name
  52. */
  53. function class_name_exists($name)
  54. {
  55. $table_class = Database :: get_main_table(TABLE_MAIN_CLASS);
  56. $sql = "SELECT * FROM $table_class WHERE name='".Database::escape_string($name)."'";
  57. $res = Database::query($sql);
  58. return Database::num_rows($res) != 0;
  59. }
  60. /**
  61. * Delete a class
  62. * @param int $class_id
  63. * @todo Add option to unsubscribe class-members from the courses where the
  64. * class was subscibed to
  65. */
  66. function delete_class($class_id)
  67. {
  68. $table_class = Database :: get_main_table(TABLE_MAIN_CLASS);
  69. $table_class_course = Database :: get_main_table(TABLE_MAIN_COURSE_CLASS);
  70. $table_class_user = Database :: get_main_table(TABLE_MAIN_CLASS_USER);
  71. $sql = "DELETE FROM $table_class_user WHERE class_id = '".$class_id."'";
  72. Database::query($sql);
  73. $sql = "DELETE FROM $table_class_course WHERE class_id = '".$class_id."'";
  74. Database::query($sql);
  75. $sql = "DELETE FROM $table_class WHERE id = '".$class_id."'";
  76. Database::query($sql);
  77. }
  78. /**
  79. * Get all users from a class
  80. * @param int $class_id
  81. * @return array
  82. */
  83. function get_users($class_id)
  84. {
  85. $table_class_user = Database :: get_main_table(TABLE_MAIN_CLASS_USER);
  86. $table_user = Database :: get_main_table(TABLE_MAIN_USER);
  87. $sql = "SELECT * FROM $table_class_user cu, $table_user u WHERE cu.class_id = '".$class_id."' AND cu.user_id = u.user_id";
  88. $res = Database::query($sql);
  89. $users = array ();
  90. while ($user = Database::fetch_array($res, 'ASSOC'))
  91. {
  92. $users[] = $user;
  93. }
  94. return $users;
  95. }
  96. /**
  97. * Add a user to a class. If the class is subscribed to a course, the new
  98. * user will also be subscribed to that course.
  99. * @param int $user_id The user id
  100. * @param int $class_id The class id
  101. */
  102. function add_user($user_id, $class_id)
  103. {
  104. $table_class_user = Database :: get_main_table(TABLE_MAIN_CLASS_USER);
  105. $sql = "INSERT IGNORE INTO $table_class_user SET user_id = '".$user_id."', class_id='".$class_id."'";
  106. Database::query($sql);
  107. $courses = ClassManager :: get_courses($class_id);
  108. foreach ($courses as $index => $course)
  109. {
  110. CourseManager :: subscribe_user($user_id, $course['course_code']);
  111. }
  112. }
  113. /**
  114. * Unsubscribe a user from a class. If the class is also subscribed in a
  115. * course, the user will be unsubscribed from that course
  116. * @param int $user_id The user id
  117. * @param int $class_id The class id
  118. */
  119. function unsubscribe_user($user_id, $class_id)
  120. {
  121. $table_class_user = Database :: get_main_table(TABLE_MAIN_CLASS_USER);
  122. $table_course_class = Database :: get_main_table(TABLE_MAIN_COURSE_CLASS);
  123. $courses = ClassManager :: get_courses($class_id);
  124. if (count($courses) != 0)
  125. {
  126. $course_codes = array ();
  127. foreach ($courses as $index => $course)
  128. {
  129. $course_codes[] = $course['course_code'];
  130. $sql = "SELECT DISTINCT user_id FROM $table_class_user t1, $table_course_class t2 WHERE t1.class_id=t2.class_id AND course_code = '".$course['course_code']."' AND user_id = $user_id AND t2.class_id<>'$class_id'";
  131. $res = Database::query($sql);
  132. if (Database::num_rows($res) == 0 && CourseManager :: get_user_in_course_status($user_id, $course['course_code']) == STUDENT)
  133. {
  134. CourseManager :: unsubscribe_user($user_id, $course['course_code']);
  135. }
  136. }
  137. }
  138. $sql = "DELETE FROM $table_class_user WHERE user_id='".$user_id."' AND class_id = '".$class_id."'";
  139. Database::query($sql);
  140. }
  141. /**
  142. * Get all courses in which a class is subscribed
  143. * @param int $class_id
  144. * @return array
  145. */
  146. function get_courses($class_id)
  147. {
  148. $table_class_course = Database :: get_main_table(TABLE_MAIN_COURSE_CLASS);
  149. $table_course = Database :: get_main_table(TABLE_MAIN_COURSE);
  150. $sql = "SELECT * FROM $table_class_course cc, $table_course c WHERE cc.class_id = '".$class_id."' AND cc.course_code = c.code";
  151. $res = Database::query($sql);
  152. $courses = array ();
  153. while ($course = Database::fetch_array($res, 'ASSOC'))
  154. {
  155. $courses[] = $course;
  156. }
  157. return $courses;
  158. }
  159. /**
  160. * Subscribe all members of a class to a course
  161. * @param int $class_id The class id
  162. * @param string $course_code The course code
  163. */
  164. function subscribe_to_course($class_id, $course_code)
  165. {
  166. $tbl_course_class = Database :: get_main_table(TABLE_MAIN_COURSE_CLASS);
  167. $tbl_class_user = Database :: get_main_table(TABLE_MAIN_CLASS_USER);
  168. $tbl_course_user = Database :: get_main_table(TABLE_MAIN_COURSE_USER);
  169. $sql = "INSERT IGNORE INTO $tbl_course_class SET course_code = '".Database::escape_string($course_code)."', class_id = '".Database::escape_string($class_id)."'";
  170. Database::query($sql);
  171. $sql = "SELECT user_id FROM $tbl_class_user WHERE class_id = '".Database::escape_string($class_id)."'";
  172. $res = Database::query($sql);
  173. while ($user = Database::fetch_object($res))
  174. {
  175. CourseManager :: subscribe_user($user->user_id, $course_code);
  176. }
  177. }
  178. /**
  179. * Unsubscribe a class from a course.
  180. * Only students are unsubscribed. If a user is member of 2 classes which
  181. * are both subscribed to the course, the user stays in the course.
  182. * @param int $class_id The class id
  183. * @param string $course_code The course code
  184. */
  185. function unsubscribe_from_course($class_id, $course_code)
  186. {
  187. $tbl_course_class = Database :: get_main_table(TABLE_MAIN_COURSE_CLASS);
  188. $tbl_class_user = Database :: get_main_table(TABLE_MAIN_CLASS_USER);
  189. $sql = "SELECT cu.user_id,COUNT(cc.class_id) FROM $tbl_course_class cc, $tbl_class_user cu WHERE cc.class_id = cu.class_id AND cc.course_code = '".Database::escape_string($course_code)."' GROUP BY cu.user_id HAVING COUNT(cc.class_id) = 1";
  190. $single_class_users = Database::query($sql);
  191. while ($single_class_user = Database::fetch_object($single_class_users))
  192. {
  193. $sql = "SELECT * FROM $tbl_class_user WHERE class_id = '".Database::escape_string($class_id)."' AND user_id = '".Database::escape_string($single_class_user->user_id)."'";
  194. $res = Database::query($sql);
  195. if (Database::num_rows($res) > 0)
  196. {
  197. if (CourseManager :: get_user_in_course_status($single_class_user->user_id, $course_code) == STUDENT)
  198. {
  199. CourseManager :: unsubscribe_user($single_class_user->user_id, $course_code);
  200. }
  201. }
  202. }
  203. $sql = "DELETE FROM $tbl_course_class WHERE course_code = '".Database::escape_string($course_code)."' AND class_id = '".Database::escape_string($class_id)."'";
  204. Database::query($sql);
  205. }
  206. /**
  207. * Get the class-id
  208. * @param string $name The class name
  209. * @return int the ID of the class
  210. */
  211. function get_class_id($name)
  212. {
  213. $table_class = Database :: get_main_table(TABLE_MAIN_CLASS);
  214. $sql = "SELECT * FROM $table_class WHERE name='".$name."'";
  215. $res = Database::query($sql);
  216. $obj = Database::fetch_object($res);
  217. return $obj->id;
  218. }
  219. /**
  220. * Get all classes subscribed in a course
  221. * @param string $course_code
  222. * @return array An array with all classes (keys: 'id','code','name')
  223. */
  224. function get_classes_in_course($course_code)
  225. {
  226. $table_class = Database :: get_main_table(TABLE_MAIN_CLASS);
  227. $table_course_class = Database :: get_main_table(TABLE_MAIN_COURSE_CLASS);
  228. $sql = "SELECT cl.* FROM $table_class cl, $table_course_class cc WHERE cc.course_code = '".Database::escape_string($course_code)."' AND cc.class_id = cl.id";
  229. $res = Database::query($sql);
  230. $classes = array ();
  231. while ($class = Database::fetch_array($res, 'ASSOC'))
  232. {
  233. $classes[] = $class;
  234. }
  235. return $classes;
  236. }
  237. }
  238. ?>