group_edit.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293
  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. $langFile = "group";
  37. include ('../inc/global.inc.php');
  38. $this_section = SECTION_COURSES;
  39. /*
  40. -----------------------------------------------------------
  41. Libraries & settings
  42. -----------------------------------------------------------
  43. */
  44. require_once (api_get_path(LIBRARY_PATH).'course.lib.php');
  45. require_once (api_get_path(LIBRARY_PATH).'groupmanager.lib.php');
  46. require_once (api_get_path(LIBRARY_PATH).'formvalidator/FormValidator.class.php');
  47. /*
  48. -----------------------------------------------------------
  49. Constants & variables
  50. -----------------------------------------------------------
  51. */
  52. $current_group = GroupManager :: get_group_properties($_SESSION['_gid']);
  53. /*
  54. -----------------------------------------------------------
  55. Header
  56. -----------------------------------------------------------
  57. */
  58. $nameTools = get_lang('EditGroup');
  59. $interbreadcrumb[] = array ("url" => "group.php", "name" => get_lang('GroupManagement'));
  60. if (!api_is_allowed_to_edit())
  61. {
  62. api_not_allowed();
  63. }
  64. /*
  65. ==============================================================================
  66. FUNCTIONS
  67. ==============================================================================
  68. */
  69. /**
  70. * Function to check the given max number of members per group
  71. */
  72. function check_max_number_of_members($value)
  73. {
  74. $max_member_no_limit = $value['max_member_no_limit'];
  75. if ($max_member_no_limit == MEMBER_PER_GROUP_NO_LIMIT)
  76. {
  77. return true;
  78. }
  79. $max_member = $value['max_member'];
  80. return is_numeric($max_member);
  81. }
  82. /**
  83. * Function to check if the number of selected group members is valid
  84. */
  85. function check_group_members($value)
  86. {
  87. if ($value['max_member_no_limit'] == MEMBER_PER_GROUP_NO_LIMIT)
  88. {
  89. return true;
  90. }
  91. if ($value['max_member'] < count($value['group_members']))
  92. {
  93. return array ('group_members' => get_lang('GroupTooMuchMembers'));
  94. }
  95. return true;
  96. }
  97. /*
  98. ==============================================================================
  99. MAIN CODE
  100. ==============================================================================
  101. */
  102. // Build form
  103. $form = new FormValidator('group_edit');
  104. $form->addElement('hidden', 'action');
  105. $form->addElement('hidden', 'referer');
  106. // Group name
  107. $form->add_textfield('name', get_lang('GroupName'));
  108. // Description
  109. $form->addElement('textarea', 'description', get_lang('GroupDescription'), array ('cols' => 50, 'rows' => 6));
  110. // Tutors: this has been replaced with the new tutors code
  111. //$tutors = GroupManager :: get_all_tutors();
  112. //$possible_tutors[0] = get_lang('GroupNoTutor');
  113. //foreach ($tutors as $index => $tutor)
  114. //{
  115. // $possible_tutors[$tutor['user_id']] = $tutor['lastname'].' '.$tutor['firstname'];
  116. //}
  117. //$group = array ();
  118. //$group[] = & $form->createElement('select', 'tutor_id', null, $possible_tutors);
  119. //$group[] = & $form->createElement('static', null, null, '&nbsp;&nbsp;<a href="../user/user.php">'.get_lang('AddTutors').'</a>');
  120. //$form->addGroup($group, 'tutor_group', get_lang('GroupTutor'), '', false);
  121. // Members per group
  122. $form->addElement('radio', 'max_member_no_limit', get_lang('GroupLimit'), get_lang('NoLimit'), MEMBER_PER_GROUP_NO_LIMIT);
  123. $group = array ();
  124. $group[] = & $form->createElement('radio', 'max_member_no_limit', null, get_lang('Max'), 1);
  125. $group[] = & $form->createElement('text', 'max_member', null, array ('size' => 2));
  126. $group[] = & $form->createElement('static', null, null, get_lang('GroupPlacesThis'));
  127. $form->addGroup($group, 'max_member_group', null, '', false);
  128. $form->addRule('max_member_group', get_lang('InvalidMaxNumberOfMembers'), 'callback', 'check_max_number_of_members');
  129. // Self registration
  130. $form->addElement('checkbox', 'self_registration_allowed', get_lang('GroupSelfRegistration'), get_lang('GroupAllowStudentRegistration'), 1);
  131. $form->addElement('checkbox', 'self_unregistration_allowed', null, get_lang('GroupAllowStudentUnregistration'), 1);
  132. // Documents settings
  133. $form->addElement('radio', 'doc_state', get_lang('GroupDocument'), get_lang('NotAvailable'), TOOL_NOT_AVAILABLE);
  134. $form->addElement('radio', 'doc_state', null, get_lang('Public'), TOOL_PUBLIC);
  135. $form->addElement('radio', 'doc_state', null, get_lang('Private'), TOOL_PRIVATE);
  136. // Work settings
  137. $form->addElement('radio', 'work_state', get_lang('GroupWork'), get_lang('NotAvailable'), TOOL_NOT_AVAILABLE);
  138. $form->addElement('radio', 'work_state', null, get_lang('Public'), TOOL_PUBLIC);
  139. $form->addElement('radio', 'work_state', null, get_lang('Private'), TOOL_PRIVATE);
  140. // Calendar settings
  141. $form->addElement('radio', 'calendar_state', get_lang('GroupCalendar'), get_lang('NotAvailable'), TOOL_NOT_AVAILABLE);
  142. $form->addElement('radio', 'calendar_state', null, get_lang('Public'), TOOL_PUBLIC);
  143. $form->addElement('radio', 'calendar_state', null, get_lang('Private'), TOOL_PRIVATE);
  144. // Announcements settings
  145. $form->addElement('radio', 'announcements_state', get_lang('GroupAnnouncements'), get_lang('NotAvailable'), TOOL_NOT_AVAILABLE);
  146. $form->addElement('radio', 'announcements_state', null, get_lang('Public'), TOOL_PUBLIC);
  147. $form->addElement('radio', 'announcements_state', null, get_lang('Private'), TOOL_PRIVATE);
  148. // getting all the users
  149. $complete_user_list = CourseManager :: get_user_list_from_course_code($_course['id']);
  150. $possible_users = array ();
  151. foreach ($complete_user_list as $index => $user)
  152. {
  153. $possible_users[$user['user_id']] = $user['lastname'].' '.$user['firstname'];
  154. }
  155. // Group tutors
  156. $group_tutor_list = GroupManager :: get_subscribed_tutors($current_group['id']);
  157. $selected_users = array ();
  158. foreach ($group_tutor_list as $index => $user)
  159. {
  160. //$possible_users[$user['user_id']] = $user['lastname'].' '.$user['firstname'];
  161. $selected_tutors[] = $user['user_id'];
  162. }
  163. $group_tutors_element = $form->addElement('advmultiselect', 'group_tutors', get_lang('GroupTutors'), $possible_users);
  164. $group_tutors_element->setElementTemplate('
  165. {javascript}
  166. <table{class}>
  167. <!-- BEGIN label_2 --><tr><th>{label_2}</th><!-- END label_2 -->
  168. <!-- BEGIN label_3 --><th>&nbsp;</th><th>{label_3}</th></tr><!-- END label_3 -->
  169. <tr>
  170. <td valign="top">{unselected}</td>
  171. <td align="center">{add}<br /><br />{remove}</td>
  172. <td valign="top">{selected}</td>
  173. </tr>
  174. </table>
  175. ');
  176. // Group members
  177. $group_member_list = GroupManager :: get_subscribed_users($current_group['id']);
  178. $selected_users = array ();
  179. foreach ($group_member_list as $index => $user)
  180. {
  181. //$possible_users[$user['user_id']] = $user['lastname'].' '.$user['firstname'];
  182. $selected_users[] = $user['user_id'];
  183. }
  184. $group_members_element = $form->addElement('advmultiselect', 'group_members', get_lang('GroupMembers'), $possible_users);
  185. $group_members_element->setElementTemplate('
  186. {javascript}
  187. <table{class}>
  188. <!-- BEGIN label_2 --><tr><th>{label_2}</th><!-- END label_2 -->
  189. <!-- BEGIN label_3 --><th>&nbsp;</th><th>{label_3}</th></tr><!-- END label_3 -->
  190. <tr>
  191. <td valign="top">{unselected}</td>
  192. <td align="center">{add}<br /><br />{remove}</td>
  193. <td valign="top">{selected}</td>
  194. </tr>
  195. </table>
  196. ');
  197. $form->addFormRule('check_group_members');
  198. // submit button
  199. $form->addElement('submit', 'submit', get_lang('Ok'));
  200. if ($form->validate())
  201. {
  202. $values = $form->exportValues();
  203. if ($values['max_member_no_limit'] == MEMBER_PER_GROUP_NO_LIMIT)
  204. {
  205. $max_member = MEMBER_PER_GROUP_NO_LIMIT;
  206. }
  207. else
  208. {
  209. $max_member = $values['max_member'];
  210. }
  211. $self_registration_allowed = isset ($values['self_registration_allowed']) ? 1 : 0;
  212. $self_unregistration_allowed = isset ($values['self_unregistration_allowed']) ? 1 : 0;
  213. 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);
  214. // storing the tutors (we first remove all the tutors and then add only those who were selected)
  215. GroupManager :: unsubscribe_all_tutors($current_group['id']);
  216. if (isset ($_POST['group_tutors']) && count($_POST['group_tutors']) > 0)
  217. {
  218. GroupManager :: subscribe_tutors($values['group_tutors'], $current_group['id']);
  219. }
  220. // storing the users (we first remove all users and then add only those who were selected)
  221. GroupManager :: unsubscribe_all_users($current_group['id']);
  222. if (isset ($_POST['group_members']) && count($_POST['group_members']) > 0)
  223. {
  224. GroupManager :: subscribe_users($values['group_members'], $current_group['id']);
  225. }
  226. // returning to the group area (note: this is inconsistent with the rest of dokeos)
  227. $cat = GroupManager :: get_category_from_group($current_group['id']);
  228. header('Location: '.$values['referer'].'?action=show_msg&msg='.get_lang('GroupSettingsModified').'&category='.$cat['id']);
  229. }
  230. $defaults = $current_group;
  231. $defaults['group_members'] = $selected_users;
  232. $defaults['group_tutors'] = $selected_tutors;
  233. $defaults['action'] = $action;
  234. if ($defaults['maximum_number_of_students'] == MEMBER_PER_GROUP_NO_LIMIT)
  235. {
  236. $defaults['max_member_no_limit'] = MEMBER_PER_GROUP_NO_LIMIT;
  237. }
  238. else
  239. {
  240. $defaults['max_member_no_limit'] = 1;
  241. $defaults['max_member'] = $defaults['maximum_number_of_students'];
  242. }
  243. $referer = parse_url($_SERVER['HTTP_REFERER']);
  244. $referer = basename($referer['path']);
  245. if ($referer != 'group_space.php' && $referer != 'group.php')
  246. {
  247. $referer = 'group.php';
  248. }
  249. Display :: display_header($nameTools, "Group");
  250. api_display_tool_title($nameTools);
  251. ?>
  252. <a href="group_space.php"><?php echo get_lang('GroupSpace') ?></a>
  253. <br/>
  254. <br/>
  255. <?php
  256. $defaults['referer'] = $referer;
  257. $form->setDefaults($defaults);
  258. $form->display();
  259. /*
  260. ==============================================================================
  261. FOOTER
  262. ==============================================================================
  263. */
  264. Display :: display_footer();
  265. ?>