group_edit.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330
  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. Copyright (c) Bart Mollet, Hogeschool Gent
  10. For a full list of contributors, see "credits.txt".
  11. The full license can be read in "license.txt".
  12. This program is free software; you can redistribute it and/or
  13. modify it under the terms of the GNU General Public License
  14. as published by the Free Software Foundation; either version 2
  15. of the License, or (at your option) any later version.
  16. See the GNU General Public License for more details.
  17. Contact: Dokeos, 181 rue Royale, B-1000 Brussels, Belgium, info@dokeos.com
  18. ==============================================================================
  19. */
  20. /**
  21. ==============================================================================
  22. * This script displays an area where teachers can edit the group properties and member list.
  23. * Groups are also often called "teams" in the Dokeos code.
  24. *
  25. * @author various contributors
  26. * @author Roan Embrechts (VUB), partial code cleanup, initial virtual course support
  27. @package dokeos.group
  28. * @todo course admin functionality to create groups based on who is in which course (or class).
  29. ==============================================================================
  30. */
  31. /*
  32. ==============================================================================
  33. INIT SECTION
  34. ==============================================================================
  35. */
  36. // name of the language file that needs to be included
  37. $language_file = "group";
  38. include ('../inc/global.inc.php');
  39. $this_section = SECTION_COURSES;
  40. /*
  41. -----------------------------------------------------------
  42. Libraries & settings
  43. -----------------------------------------------------------
  44. */
  45. require_once (api_get_path(LIBRARY_PATH).'course.lib.php');
  46. require_once (api_get_path(LIBRARY_PATH).'groupmanager.lib.php');
  47. require_once (api_get_path(LIBRARY_PATH).'formvalidator/FormValidator.class.php');
  48. /*
  49. -----------------------------------------------------------
  50. Constants & variables
  51. -----------------------------------------------------------
  52. */
  53. $current_group = GroupManager :: get_group_properties($_SESSION['_gid']);
  54. /*
  55. -----------------------------------------------------------
  56. Header
  57. -----------------------------------------------------------
  58. */
  59. $nameTools = get_lang('EditGroup');
  60. $interbreadcrumb[] = array ("url" => "group.php", "name" => get_lang('GroupManagement'));
  61. if (!api_is_allowed_to_edit())
  62. {
  63. api_not_allowed(true);
  64. }
  65. /*
  66. ==============================================================================
  67. FUNCTIONS
  68. ==============================================================================
  69. */
  70. /**
  71. * function to sort users after getting the list in the db. Necessary because there are 2 or 3 queries. Called by usort()
  72. */
  73. function sort_users($user_a, $user_b)
  74. {
  75. $cmp = strcasecmp($user_a['lastname'], $user_b['lastname']);
  76. if($cmp !== 0)
  77. return $cmp;
  78. else
  79. {
  80. $cmp = strcasecmp($user_a['firstname'], $user_b['firstname']);
  81. if($cmp !== 0)
  82. return $cmp;
  83. else
  84. {
  85. return strcasecmp($user_a['username'], $user_b['username']);
  86. }
  87. }
  88. }
  89. /**
  90. * Function to check the given max number of members per group
  91. */
  92. function check_max_number_of_members($value)
  93. {
  94. $max_member_no_limit = $value['max_member_no_limit'];
  95. if ($max_member_no_limit == MEMBER_PER_GROUP_NO_LIMIT)
  96. {
  97. return true;
  98. }
  99. $max_member = $value['max_member'];
  100. return is_numeric($max_member);
  101. }
  102. /**
  103. * Function to check if the number of selected group members is valid
  104. */
  105. function check_group_members($value)
  106. {
  107. if ($value['max_member_no_limit'] == MEMBER_PER_GROUP_NO_LIMIT)
  108. {
  109. return true;
  110. }
  111. if ($value['max_member'] < count($value['group_members']))
  112. {
  113. return array ('group_members' => get_lang('GroupTooMuchMembers'));
  114. }
  115. return true;
  116. }
  117. /*
  118. ==============================================================================
  119. MAIN CODE
  120. ==============================================================================
  121. */
  122. // Build form
  123. $form = new FormValidator('group_edit');
  124. $form->addElement('hidden', 'action');
  125. $form->addElement('hidden', 'referer');
  126. // Group name
  127. $form->add_textfield('name', get_lang('GroupName'));
  128. // Description
  129. $form->addElement('textarea', 'description', get_lang('GroupDescription'), array ('cols' => 50, 'rows' => 6));
  130. // Tutors: this has been replaced with the new tutors code
  131. //$tutors = GroupManager :: get_all_tutors();
  132. //$possible_tutors[0] = get_lang('GroupNoTutor');
  133. //foreach ($tutors as $index => $tutor)
  134. //{
  135. // $possible_tutors[$tutor['user_id']] = $tutor['lastname'].' '.$tutor['firstname'];
  136. //}
  137. //$group = array ();
  138. //$group[] = & $form->createElement('select', 'tutor_id', null, $possible_tutors);
  139. //$group[] = & $form->createElement('static', null, null, '&nbsp;&nbsp;<a href="../user/user.php">'.get_lang('AddTutors').'</a>');
  140. //$form->addGroup($group, 'tutor_group', get_lang('GroupTutor'), '', false);
  141. // Members per group
  142. $form->addElement('radio', 'max_member_no_limit', get_lang('GroupLimit'), get_lang('NoLimit'), MEMBER_PER_GROUP_NO_LIMIT);
  143. $group = array ();
  144. $group[] = & $form->createElement('radio', 'max_member_no_limit', null, get_lang('Max'), 1);
  145. $group[] = & $form->createElement('text', 'max_member', null, array ('size' => 2));
  146. $group[] = & $form->createElement('static', null, null, get_lang('GroupPlacesThis'));
  147. $form->addGroup($group, 'max_member_group', null, '', false);
  148. $form->addRule('max_member_group', get_lang('InvalidMaxNumberOfMembers'), 'callback', 'check_max_number_of_members');
  149. // Self registration
  150. $form->addElement('checkbox', 'self_registration_allowed', get_lang('GroupSelfRegistration'), get_lang('GroupAllowStudentRegistration'), 1);
  151. $form->addElement('checkbox', 'self_unregistration_allowed', null, get_lang('GroupAllowStudentUnregistration'), 1);
  152. // Documents settings
  153. $form->addElement('radio', 'doc_state', get_lang('GroupDocument'), get_lang('NotAvailable'), TOOL_NOT_AVAILABLE);
  154. $form->addElement('radio', 'doc_state', null, get_lang('Public'), TOOL_PUBLIC);
  155. $form->addElement('radio', 'doc_state', null, get_lang('Private'), TOOL_PRIVATE);
  156. // Work settings
  157. $form->addElement('radio', 'work_state', get_lang('GroupWork'), get_lang('NotAvailable'), TOOL_NOT_AVAILABLE);
  158. $form->addElement('radio', 'work_state', null, get_lang('Public'), TOOL_PUBLIC);
  159. $form->addElement('radio', 'work_state', null, get_lang('Private'), TOOL_PRIVATE);
  160. // Calendar settings
  161. $form->addElement('radio', 'calendar_state', get_lang('GroupCalendar'), get_lang('NotAvailable'), TOOL_NOT_AVAILABLE);
  162. $form->addElement('radio', 'calendar_state', null, get_lang('Public'), TOOL_PUBLIC);
  163. $form->addElement('radio', 'calendar_state', null, get_lang('Private'), TOOL_PRIVATE);
  164. // Announcements settings
  165. $form->addElement('radio', 'announcements_state', get_lang('GroupAnnouncements'), get_lang('NotAvailable'), TOOL_NOT_AVAILABLE);
  166. $form->addElement('radio', 'announcements_state', null, get_lang('Public'), TOOL_PUBLIC);
  167. $form->addElement('radio', 'announcements_state', null, get_lang('Private'), TOOL_PRIVATE);
  168. // getting all the users
  169. if(isset($_SESSION['id_session'])){
  170. $complete_user_list = CourseManager :: get_user_list_from_course_code($_course['id'],true,$_SESSION['id_session']);
  171. $complete_user_list2 = CourseManager :: get_coach_list_from_course_code($_course['id'],$_SESSION['id_session']);
  172. $complete_user_list = array_merge($complete_user_list,$complete_user_list2);
  173. }
  174. else{
  175. $complete_user_list = CourseManager :: get_user_list_from_course_code($_course['id']);
  176. }
  177. usort($complete_user_list, 'sort_users');
  178. $possible_users = array ();
  179. foreach ($complete_user_list as $index => $user)
  180. {
  181. $possible_users[$user['user_id']] = $user['lastname'].' '.$user['firstname'].' ('.$user['username'].')';
  182. }
  183. //print_r($complete_user_list2);
  184. // Group tutors
  185. $group_tutor_list = GroupManager :: get_subscribed_tutors($current_group['id']);
  186. $selected_users = array ();
  187. foreach ($group_tutor_list as $index => $user)
  188. {
  189. //$possible_users[$user['user_id']] = $user['lastname'].' '.$user['firstname'];
  190. $selected_tutors[] = $user['user_id'];
  191. }
  192. $group_tutors_element = $form->addElement('advmultiselect', 'group_tutors', get_lang('GroupTutors'), $possible_users, 'style="width: 225px;"');
  193. $group_tutors_element->setElementTemplate('
  194. {javascript}
  195. <table{class}>
  196. <!-- BEGIN label_2 --><tr><th>{label_2}</th><!-- END label_2 -->
  197. <!-- BEGIN label_3 --><th>&nbsp;</th><th>{label_3}</th></tr><!-- END label_3 -->
  198. <tr>
  199. <td valign="top">{unselected}</td>
  200. <td align="center">{add}<br /><br />{remove}</td>
  201. <td valign="top">{selected}</td>
  202. </tr>
  203. </table>
  204. ');
  205. // Group members
  206. $group_member_list = GroupManager :: get_subscribed_users($current_group['id']);
  207. $selected_users = array ();
  208. foreach ($group_member_list as $index => $user)
  209. {
  210. //$possible_users[$user['user_id']] = $user['lastname'].' '.$user['firstname'];
  211. $selected_users[] = $user['user_id'];
  212. }
  213. $group_members_element = $form->addElement('advmultiselect', 'group_members', get_lang('GroupMembers'), $possible_users, 'style="width: 225px;"');
  214. $group_members_element->setElementTemplate('
  215. {javascript}
  216. <table{class}>
  217. <!-- BEGIN label_2 --><tr><th>{label_2}</th><!-- END label_2 -->
  218. <!-- BEGIN label_3 --><th>&nbsp;</th><th>{label_3}</th></tr><!-- END label_3 -->
  219. <tr>
  220. <td valign="top">{unselected}</td>
  221. <td align="center">{add}<br /><br />{remove}</td>
  222. <td valign="top">{selected}</td>
  223. </tr>
  224. </table>
  225. ');
  226. $form->addFormRule('check_group_members');
  227. // submit button
  228. $form->addElement('submit', 'submit', get_lang('Ok'));
  229. if ($form->validate())
  230. {
  231. $values = $form->exportValues();
  232. if ($values['max_member_no_limit'] == MEMBER_PER_GROUP_NO_LIMIT)
  233. {
  234. $max_member = MEMBER_PER_GROUP_NO_LIMIT;
  235. }
  236. else
  237. {
  238. $max_member = $values['max_member'];
  239. }
  240. $self_registration_allowed = isset ($values['self_registration_allowed']) ? 1 : 0;
  241. $self_unregistration_allowed = isset ($values['self_unregistration_allowed']) ? 1 : 0;
  242. GroupManager :: set_group_properties($current_group['id'], strip_tags($values['name']), strip_tags($values['description']), $max_member, $values['doc_state'], $values['work_state'], $values['calendar_state'], $values['announcements_state'], $self_registration_allowed, $self_unregistration_allowed);
  243. // storing the tutors (we first remove all the tutors and then add only those who were selected)
  244. GroupManager :: unsubscribe_all_tutors($current_group['id']);
  245. if (isset ($_POST['group_tutors']) && count($_POST['group_tutors']) > 0)
  246. {
  247. GroupManager :: subscribe_tutors($values['group_tutors'], $current_group['id']);
  248. }
  249. // storing the users (we first remove all users and then add only those who were selected)
  250. GroupManager :: unsubscribe_all_users($current_group['id']);
  251. if (isset ($_POST['group_members']) && count($_POST['group_members']) > 0)
  252. {
  253. GroupManager :: subscribe_users($values['group_members'], $current_group['id']);
  254. }
  255. // returning to the group area (note: this is inconsistent with the rest of dokeos)
  256. $cat = GroupManager :: get_category_from_group($current_group['id']);
  257. header('Location: '.$values['referer'].'?action=show_msg&msg='.get_lang('GroupSettingsModified').'&category='.$cat['id']);
  258. }
  259. $defaults = $current_group;
  260. $defaults['group_members'] = $selected_users;
  261. $defaults['group_tutors'] = $selected_tutors;
  262. $defaults['action'] = $action;
  263. if ($defaults['maximum_number_of_students'] == MEMBER_PER_GROUP_NO_LIMIT)
  264. {
  265. $defaults['max_member_no_limit'] = MEMBER_PER_GROUP_NO_LIMIT;
  266. }
  267. else
  268. {
  269. $defaults['max_member_no_limit'] = 1;
  270. $defaults['max_member'] = $defaults['maximum_number_of_students'];
  271. }
  272. $referer = parse_url($_SERVER['HTTP_REFERER']);
  273. $referer = basename($referer['path']);
  274. if ($referer != 'group_space.php' && $referer != 'group.php')
  275. {
  276. $referer = 'group.php';
  277. }
  278. Display :: display_header($nameTools, "Group");
  279. api_display_tool_title($nameTools);
  280. ?>
  281. <a href="group_space.php"><?php echo get_lang('GroupSpace') ?></a>
  282. <br/>
  283. <br/>
  284. <?php
  285. $defaults['referer'] = $referer;
  286. $form->setDefaults($defaults);
  287. $form->display();
  288. /*
  289. ==============================================================================
  290. FOOTER
  291. ==============================================================================
  292. */
  293. Display :: display_footer();
  294. ?>