classmanager.lib.php 8.6 KB

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