usergroup.lib.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289
  1. <?php
  2. /* For licensing terms, see /license.txt */
  3. /**
  4. * This class provides methods for the UserGroup management.
  5. * Include/require it in your code to use its features.
  6. * @package chamilo.library
  7. */
  8. /**
  9. * Code
  10. */
  11. require_once 'model.lib.php';
  12. /**
  13. * Class
  14. * @package chamilo.library
  15. */
  16. class UserGroup extends Model {
  17. var $columns = array('id', 'name','description');
  18. public function __construct() {
  19. $this->table = Database::get_main_table(TABLE_USERGROUP);
  20. $this->usergroup_rel_user_table = Database::get_main_table(TABLE_USERGROUP_REL_USER);
  21. $this->usergroup_rel_course_table = Database::get_main_table(TABLE_USERGROUP_REL_COURSE);
  22. $this->usergroup_rel_session_table = Database::get_main_table(TABLE_USERGROUP_REL_SESSION);
  23. }
  24. /**
  25. * Displays the title + grid
  26. */
  27. function display() {
  28. // action links
  29. echo '<div class="actions">';
  30. echo '<a href="../admin/index.php">'.Display::return_icon('back.png', get_lang('BackTo').' '.get_lang('PlatformAdmin'),'','32').'</a>';
  31. //echo '<a href="career_dashboard.php">'.Display::return_icon('back.png',get_lang('Back')).get_lang('Back').'</a>';
  32. echo '<a href="'.api_get_self().'?action=add">'.Display::return_icon('new_class.png',get_lang('langAddClasses'),'','32').'</a>';
  33. echo '</div>';
  34. echo Display::grid_html('usergroups');
  35. }
  36. /**
  37. * Gets a list of course ids by user group
  38. * @param int user group id
  39. * @return array
  40. */
  41. public function get_courses_by_usergroup($id) {
  42. $results = Database::select('course_id',$this->usergroup_rel_course_table, array('where'=>array('usergroup_id = ?'=>$id)));
  43. $array = array();
  44. if (!empty($results)) {
  45. foreach($results as $row) {
  46. $array[]= $row['course_id'];
  47. }
  48. }
  49. return $array;
  50. }
  51. /**
  52. * Gets a list of session ids by user group
  53. * @param int user group id
  54. * @return array
  55. */
  56. public function get_sessions_by_usergroup($id) {
  57. $results = Database::select('session_id',$this->usergroup_rel_session_table, array('where'=>array('usergroup_id = ?'=>$id)));
  58. $array = array();
  59. if (!empty($results)) {
  60. foreach($results as $row) {
  61. $array[]= $row['session_id'];
  62. }
  63. }
  64. return $array;
  65. }
  66. /**
  67. * Gets a list of user ids by user group
  68. * @param int user group id
  69. * @return array with a list of user ids
  70. */
  71. public function get_users_by_usergroup($id) {
  72. $results = Database::select('user_id',$this->usergroup_rel_user_table, array('where'=>array('usergroup_id = ?'=>$id)));
  73. $array = array();
  74. if (!empty($results)) {
  75. foreach($results as $row) {
  76. $array[]= $row['user_id'];
  77. }
  78. }
  79. return $array;
  80. }
  81. /**
  82. * Gets the usergroup id list by user id
  83. * @param int user id
  84. */
  85. public function get_usergroup_by_user($id) {
  86. $results = Database::select('usergroup_id',$this->usergroup_rel_user_table, array('where'=>array('user_id = ?'=>$id)));
  87. $array = array();
  88. if (!empty($results)) {
  89. foreach($results as $row) {
  90. $array[]= $row['usergroup_id'];
  91. }
  92. }
  93. return $array;
  94. }
  95. /**
  96. * Subscribes sessions to a group (also adding the members of the group in the session and course)
  97. * @param int usergroup id
  98. * @param array list of session ids
  99. */
  100. function subscribe_sessions_to_usergroup($usergroup_id, $list) {
  101. $current_list = self::get_sessions_by_usergroup($usergroup_id);
  102. $user_list = self::get_users_by_usergroup($usergroup_id);
  103. $delete_items = $new_items = array();
  104. if (!empty($list)) {
  105. foreach ($list as $session_id) {
  106. if (!in_array($session_id, $current_list)) {
  107. $new_items[] = $session_id;
  108. }
  109. }
  110. }
  111. if (!empty($current_list)) {
  112. foreach($current_list as $session_id) {
  113. if (!in_array($session_id, $list)) {
  114. $delete_items[] = $session_id;
  115. }
  116. }
  117. }
  118. //Deleting items
  119. if (!empty($delete_items)) {
  120. foreach($delete_items as $session_id) {
  121. if (!empty($user_list)) {
  122. foreach($user_list as $user_id) {
  123. SessionManager::unsubscribe_user_from_session($session_id, $user_id);
  124. /*foreach ($course_list as $course_data) {
  125. foreach($user_list as $user_id) {
  126. CourseManager::subscribe_user($user_id, $course_data['code'], $session_id);
  127. }
  128. }*/
  129. }
  130. }
  131. Database::delete($this->usergroup_rel_session_table, array('usergroup_id = ? AND session_id = ?'=>array($usergroup_id, $session_id)));
  132. }
  133. }
  134. //Addding new relationships
  135. if (!empty($new_items)) {
  136. foreach($new_items as $session_id) {
  137. $params = array('session_id'=>$session_id, 'usergroup_id'=>$usergroup_id);
  138. Database::insert($this->usergroup_rel_session_table, $params);
  139. if (!empty($user_list)) {
  140. SessionManager::suscribe_users_to_session($session_id, $user_list, null, false);
  141. }
  142. /*
  143. $course_list = SessionManager::get_course_list_by_session_id($id);
  144. foreach ($course_list as $course_data) {
  145. foreach($user_list as $user_id) {
  146. CourseManager::subscribe_user($user_id, $course_data['code'], $id);
  147. }
  148. }*/
  149. }
  150. }
  151. }
  152. /**
  153. * Subscribes courses to a group (also adding the members of the group in the course)
  154. * @param int usergroup id
  155. * @param array list of course ids
  156. */
  157. function subscribe_courses_to_usergroup($usergroup_id, $list) {
  158. $current_list = self::get_courses_by_usergroup($usergroup_id);
  159. $user_list = self::get_users_by_usergroup($usergroup_id);
  160. $delete_items = $new_items = array();
  161. if (!empty($list)) {
  162. foreach ($list as $id) {
  163. if (!in_array($id, $current_list)) {
  164. $new_items[] = $id;
  165. }
  166. }
  167. }
  168. if (!empty($current_list)) {
  169. foreach($current_list as $id) {
  170. if (!in_array($id, $list)) {
  171. $delete_items[] = $id;
  172. }
  173. }
  174. }
  175. //Deleting items
  176. if (!empty($delete_items)) {
  177. foreach($delete_items as $course_id) {
  178. $course_info = api_get_course_info_by_id($course_id);
  179. if (!empty($user_list)) {
  180. foreach($user_list as $user_id) {
  181. CourseManager::unsubscribe_user($user_id, $course_info['code']);
  182. }
  183. }
  184. Database::delete($this->usergroup_rel_course_table, array('usergroup_id = ? AND course_id = ?'=>array($usergroup_id, $course_id)));
  185. }
  186. }
  187. //Addding new relationships
  188. if (!empty($new_items)) {
  189. foreach($new_items as $course_id) {
  190. $course_info = api_get_course_info_by_id($course_id);
  191. if (!empty($user_list)) {
  192. foreach($user_list as $user_id) {
  193. CourseManager::subscribe_user($user_id, $course_info['code']);
  194. }
  195. }
  196. $params = array('course_id'=>$course_id, 'usergroup_id'=>$usergroup_id);
  197. Database::insert($this->usergroup_rel_course_table, $params);
  198. }
  199. }
  200. }
  201. /**
  202. * Subscribes users to a group
  203. * @param int usergroup id
  204. * @param array list of user ids
  205. */
  206. function subscribe_users_to_usergroup($usergroup_id, $list) {
  207. $current_list = self::get_users_by_usergroup($usergroup_id);
  208. $course_list = self::get_courses_by_usergroup($usergroup_id);
  209. $session_list = self::get_sessions_by_usergroup($usergroup_id);
  210. $delete_items = $new_items = array();
  211. if (!empty($list)) {
  212. foreach ($list as $user_id) {
  213. if (!in_array($user_id, $current_list)) {
  214. $new_items[] = $user_id;
  215. }
  216. }
  217. }
  218. if (!empty($current_list)) {
  219. foreach($current_list as $user_id) {
  220. if (!in_array($user_id, $list)) {
  221. $delete_items[] = $user_id;
  222. }
  223. }
  224. }
  225. //Deleting items
  226. if (!empty($delete_items)) {
  227. foreach($delete_items as $user_id) {
  228. //Removing courses
  229. if (!empty($course_list)) {
  230. foreach($course_list as $course_id) {
  231. $course_info = api_get_course_info_by_id($course_id);
  232. CourseManager::unsubscribe_user($user_id, $course_info['code']);
  233. }
  234. }
  235. //Removing sessions
  236. if (!empty($session_list)) {
  237. foreach($session_list as $session_id) {
  238. SessionManager::unsubscribe_user_from_session($session_id, $user_id);
  239. }
  240. }
  241. Database::delete($this->usergroup_rel_user_table, array('usergroup_id = ? AND user_id = ?'=>array($usergroup_id, $user_id)));
  242. }
  243. }
  244. //Addding new relationships
  245. if (!empty($new_items)) {
  246. //Adding sessions
  247. if (!empty($session_list)) {
  248. foreach($session_list as $session_id) {
  249. SessionManager::suscribe_users_to_session($session_id, $new_items, null, false);
  250. }
  251. }
  252. foreach($new_items as $user_id) {
  253. //Adding courses
  254. if (!empty($course_list)) {
  255. foreach($course_list as $course_id) {
  256. $course_info = api_get_course_info_by_id($course_id);
  257. CourseManager::subscribe_user($user_id, $course_info['code']);
  258. }
  259. }
  260. $params = array('user_id'=>$user_id, 'usergroup_id'=>$usergroup_id);
  261. Database::insert($this->usergroup_rel_user_table, $params);
  262. }
  263. }
  264. }
  265. }