usergroup.lib.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294
  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 = null) {
  72. if (empty($id)) {
  73. $conditions = array();
  74. } else {
  75. $conditions = array('where'=>array('usergroup_id = ?'=>$id));
  76. }
  77. $results = Database::select('user_id', $this->usergroup_rel_user_table, $conditions, true);
  78. $array = array();
  79. if (!empty($results)) {
  80. foreach($results as $row) {
  81. $array[]= $row['user_id'];
  82. }
  83. }
  84. return $array;
  85. }
  86. /**
  87. * Gets the usergroup id list by user id
  88. * @param int user id
  89. */
  90. public function get_usergroup_by_user($id) {
  91. $results = Database::select('usergroup_id',$this->usergroup_rel_user_table, array('where'=>array('user_id = ?'=>$id)));
  92. $array = array();
  93. if (!empty($results)) {
  94. foreach($results as $row) {
  95. $array[]= $row['usergroup_id'];
  96. }
  97. }
  98. return $array;
  99. }
  100. /**
  101. * Subscribes sessions to a group (also adding the members of the group in the session and course)
  102. * @param int usergroup id
  103. * @param array list of session ids
  104. */
  105. function subscribe_sessions_to_usergroup($usergroup_id, $list) {
  106. $current_list = self::get_sessions_by_usergroup($usergroup_id);
  107. $user_list = self::get_users_by_usergroup($usergroup_id);
  108. $delete_items = $new_items = array();
  109. if (!empty($list)) {
  110. foreach ($list as $session_id) {
  111. if (!in_array($session_id, $current_list)) {
  112. $new_items[] = $session_id;
  113. }
  114. }
  115. }
  116. if (!empty($current_list)) {
  117. foreach($current_list as $session_id) {
  118. if (!in_array($session_id, $list)) {
  119. $delete_items[] = $session_id;
  120. }
  121. }
  122. }
  123. //Deleting items
  124. if (!empty($delete_items)) {
  125. foreach($delete_items as $session_id) {
  126. if (!empty($user_list)) {
  127. foreach($user_list as $user_id) {
  128. SessionManager::unsubscribe_user_from_session($session_id, $user_id);
  129. /*foreach ($course_list as $course_data) {
  130. foreach($user_list as $user_id) {
  131. CourseManager::subscribe_user($user_id, $course_data['code'], $session_id);
  132. }
  133. }*/
  134. }
  135. }
  136. Database::delete($this->usergroup_rel_session_table, array('usergroup_id = ? AND session_id = ?'=>array($usergroup_id, $session_id)));
  137. }
  138. }
  139. //Addding new relationships
  140. if (!empty($new_items)) {
  141. foreach($new_items as $session_id) {
  142. $params = array('session_id'=>$session_id, 'usergroup_id'=>$usergroup_id);
  143. Database::insert($this->usergroup_rel_session_table, $params);
  144. if (!empty($user_list)) {
  145. SessionManager::suscribe_users_to_session($session_id, $user_list, null, false);
  146. }
  147. /*
  148. $course_list = SessionManager::get_course_list_by_session_id($id);
  149. foreach ($course_list as $course_data) {
  150. foreach($user_list as $user_id) {
  151. CourseManager::subscribe_user($user_id, $course_data['code'], $id);
  152. }
  153. }*/
  154. }
  155. }
  156. }
  157. /**
  158. * Subscribes courses to a group (also adding the members of the group in the course)
  159. * @param int usergroup id
  160. * @param array list of course ids
  161. */
  162. function subscribe_courses_to_usergroup($usergroup_id, $list) {
  163. $current_list = self::get_courses_by_usergroup($usergroup_id);
  164. $user_list = self::get_users_by_usergroup($usergroup_id);
  165. $delete_items = $new_items = array();
  166. if (!empty($list)) {
  167. foreach ($list as $id) {
  168. if (!in_array($id, $current_list)) {
  169. $new_items[] = $id;
  170. }
  171. }
  172. }
  173. if (!empty($current_list)) {
  174. foreach($current_list as $id) {
  175. if (!in_array($id, $list)) {
  176. $delete_items[] = $id;
  177. }
  178. }
  179. }
  180. //Deleting items
  181. if (!empty($delete_items)) {
  182. foreach($delete_items as $course_id) {
  183. $course_info = api_get_course_info_by_id($course_id);
  184. if (!empty($user_list)) {
  185. foreach($user_list as $user_id) {
  186. CourseManager::unsubscribe_user($user_id, $course_info['code']);
  187. }
  188. }
  189. Database::delete($this->usergroup_rel_course_table, array('usergroup_id = ? AND course_id = ?'=>array($usergroup_id, $course_id)));
  190. }
  191. }
  192. //Addding new relationships
  193. if (!empty($new_items)) {
  194. foreach($new_items as $course_id) {
  195. $course_info = api_get_course_info_by_id($course_id);
  196. if (!empty($user_list)) {
  197. foreach($user_list as $user_id) {
  198. CourseManager::subscribe_user($user_id, $course_info['code']);
  199. }
  200. }
  201. $params = array('course_id'=>$course_id, 'usergroup_id'=>$usergroup_id);
  202. Database::insert($this->usergroup_rel_course_table, $params);
  203. }
  204. }
  205. }
  206. /**
  207. * Subscribes users to a group
  208. * @param int usergroup id
  209. * @param array list of user ids
  210. */
  211. function subscribe_users_to_usergroup($usergroup_id, $list) {
  212. $current_list = self::get_users_by_usergroup($usergroup_id);
  213. $course_list = self::get_courses_by_usergroup($usergroup_id);
  214. $session_list = self::get_sessions_by_usergroup($usergroup_id);
  215. $delete_items = $new_items = array();
  216. if (!empty($list)) {
  217. foreach ($list as $user_id) {
  218. if (!in_array($user_id, $current_list)) {
  219. $new_items[] = $user_id;
  220. }
  221. }
  222. }
  223. if (!empty($current_list)) {
  224. foreach($current_list as $user_id) {
  225. if (!in_array($user_id, $list)) {
  226. $delete_items[] = $user_id;
  227. }
  228. }
  229. }
  230. //Deleting items
  231. if (!empty($delete_items)) {
  232. foreach($delete_items as $user_id) {
  233. //Removing courses
  234. if (!empty($course_list)) {
  235. foreach($course_list as $course_id) {
  236. $course_info = api_get_course_info_by_id($course_id);
  237. CourseManager::unsubscribe_user($user_id, $course_info['code']);
  238. }
  239. }
  240. //Removing sessions
  241. if (!empty($session_list)) {
  242. foreach($session_list as $session_id) {
  243. SessionManager::unsubscribe_user_from_session($session_id, $user_id);
  244. }
  245. }
  246. Database::delete($this->usergroup_rel_user_table, array('usergroup_id = ? AND user_id = ?'=>array($usergroup_id, $user_id)));
  247. }
  248. }
  249. //Addding new relationships
  250. if (!empty($new_items)) {
  251. //Adding sessions
  252. if (!empty($session_list)) {
  253. foreach($session_list as $session_id) {
  254. SessionManager::suscribe_users_to_session($session_id, $new_items, null, false);
  255. }
  256. }
  257. foreach($new_items as $user_id) {
  258. //Adding courses
  259. if (!empty($course_list)) {
  260. foreach($course_list as $course_id) {
  261. $course_info = api_get_course_info_by_id($course_id);
  262. CourseManager::subscribe_user($user_id, $course_info['code']);
  263. }
  264. }
  265. $params = array('user_id'=>$user_id, 'usergroup_id'=>$usergroup_id);
  266. Database::insert($this->usergroup_rel_user_table, $params);
  267. }
  268. }
  269. }
  270. }