PageRenderTime 26ms CodeModel.GetById 12ms RepoModel.GetById 0ms app.codeStats 0ms

/frontend/php/project/admin/squadadmin.php

#
PHP | 360 lines | 251 code | 59 blank | 50 comment | 39 complexity | 9e28763649fe3ab96ff6f0f6347ba1ae MD5 | raw file
Possible License(s): AGPL-3.0
  1. <?php
  2. # <one line to give a brief idea of what this does.>
  3. #
  4. # Copyright 2006 (c) Mathieu Roy <yeupou--gnu.org>
  5. #
  6. # This file is part of Savane.
  7. #
  8. # Savane is free software: you can redistribute it and/or modify
  9. # it under the terms of the GNU Affero General Public License as
  10. # published by the Free Software Foundation, either version 3 of the
  11. # License, or (at your option) any later version.
  12. #
  13. # Savane is distributed in the hope that it will be useful,
  14. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  15. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  16. # GNU Affero General Public License for more details.
  17. #
  18. # You should have received a copy of the GNU Affero General Public License
  19. # along with this program. If not, see <http://www.gnu.org/licenses/>.
  20. ## NOTE: for now, squads are group specific. However, as squads reuse the
  21. # users code, we could easily imagine to share squads among different projects
  22. require_once('../../include/init.php');
  23. require_once('../../include/account.php');
  24. register_globals_off();
  25. extract(sane_import('request', array('squad_id')));
  26. extract(sane_import('post', array('update', 'update_general',
  27. 'form_id', 'form_loginname', 'form_realname',
  28. 'update_delete_step1',
  29. 'update_delete_step2', 'deletionconfirmed', 'squad_id_to_delete',
  30. 'add_to_squad', 'user_ids',
  31. 'remove_from_squad')));
  32. session_require(array('group'=>$group_id,'admin_flags'=>'A'));
  33. if (!$group_id)
  34. {
  35. exit_no_group();
  36. }
  37. if (!$squad_id)
  38. {
  39. ### No argument? List existing squads, allows to create one
  40. # Check if the user submitted something (if he wants to create a squad)
  41. if ($update)
  42. {
  43. if (form_check($form_id))
  44. {
  45. if (!$form_loginname)
  46. { fb(_("You must supply a username."),1); }
  47. if (!$form_realname)
  48. { fb(_("You must supply a non-empty real name."),1); }
  49. if ($form_loginname && $form_realname)
  50. {
  51. # Try to validate
  52. $valid = true;
  53. if (!account_namevalid($form_loginname))
  54. {
  55. # feedback included by the check function
  56. $valid = false;
  57. }
  58. if ($valid && db_numrows(db_execute("SELECT user_id FROM user WHERE "
  59. . "user_name LIKE ?",
  60. array($groupx.'-'.$form_loginname))) > 0)
  61. {
  62. fb(_("That username already exists."),1);
  63. $valid = false;
  64. }
  65. if ($valid && db_numrows(db_execute("SELECT group_list_id FROM mail_group_list WHERE "
  66. . "list_name LIKE ?",
  67. array($group.'-'.$form_loginname))) > 0)
  68. {
  69. fb(_("That username is blocked to avoid conflict with mailing-list addresses."),1);
  70. $valid = false;
  71. }
  72. if ($valid)
  73. {
  74. # If at this point parameters are still valid, create the squad
  75. $result = db_autoexecute('user',
  76. array(
  77. 'user_name' => strtolower($group."-".$form_loginname),
  78. 'user_pw' => 'ignored',
  79. 'realname' => $form_realname,
  80. 'email' => $GLOBALS['sys_mail_replyto'].'@'.$GLOBALS['sys_mail_domain'],
  81. 'add_date' => time(),
  82. 'status' => 'SQD',
  83. 'email_hide' => 1,
  84. ), DB_AUTOQUERY_INSERT);
  85. if (db_affected_rows($result) > 0)
  86. {
  87. fb("Squad created");
  88. $created_squad_id = db_insertid($result);
  89. # Now assign the squad to the group
  90. member_add($created_squad_id, $group_id, 'SQD');
  91. # Unset variables so the form below will be empty
  92. $form_id = null;
  93. $form_loginname = null;
  94. $form_realname = null;
  95. }
  96. else
  97. { fb("Error during squad creation"); }
  98. }
  99. }
  100. }
  101. }
  102. # Requested squad deletion, step2
  103. if ($update_delete_step2 && $deletionconfirmed == "yes")
  104. {
  105. $squad_id_to_delete = $squad_id_to_delete;
  106. $delete_result = db_execute("SELECT user.user_name AS user_name,"
  107. . "user.realname AS realname, "
  108. . "user.user_id AS user_id "
  109. . "FROM user,user_group WHERE "
  110. . "user.user_id=? AND user_group.group_id=? AND user_group.admin_flags='SQD' "
  111. . "ORDER BY user.user_name", array($squad_id_to_delete, $group_id));
  112. if (!db_numrows($delete_result))
  113. { exit_error(_("Squad not found")); }
  114. fb(_("Squad deleted"));
  115. member_remove($squad_id_to_delete, $group_id);
  116. }
  117. # Print the page
  118. $result = db_execute("SELECT user.user_name AS user_name,"
  119. . "user.realname AS realname, "
  120. . "user.user_id AS user_id "
  121. . "FROM user,user_group WHERE "
  122. . "user.user_id=user_group.user_id AND user_group.group_id=? AND user_group.admin_flags='SQD' "
  123. . "ORDER BY user.user_name", array($group_id));
  124. $rows = db_numrows($result);
  125. site_project_header(array('title'=>_("Manage Squads"),'group'=>$group_id,'context'=>'ahome'));
  126. print '<p>'._("Squads can be assigned items, share permissions. Creating squads is useful if you want to assign some items to several members at once.").'</p>';
  127. print '<a name="form"></a>';
  128. print '<h3>'._("Squads List").'</h3>';
  129. if ($rows < 1)
  130. {
  131. print '<p class="warn">'._("None found").'</p>';
  132. }
  133. else
  134. {
  135. print '<ul>';
  136. while ($squad= db_fetch_array($result))
  137. {
  138. print '<li><a href="?squad_id='.$squad['user_id'].'&amp;group_id='.$group_id.'">'.$squad['realname'].' &lt;'.$squad['user_name'].'&gt;</a></li>';
  139. }
  140. print '</ul>';
  141. }
  142. # Limit squad creation to the group size (yes, one can easily override this
  143. # restriction by creating fake users, but the point is only to incitate
  144. # to create squads only if necessary, not to really enforce something
  145. # important)
  146. print '<h3>'._("Create a New Squad").'</h3>';
  147. if ($rows < db_numrows(db_execute("SELECT user_id FROM user_group WHERE group_id=? AND admin_flags<>'P' AND admin_flags<>'SQD'", array($group_id))))
  148. {
  149. print form_header($_SERVER["PHP_SELF"].'#form', $form_id);
  150. print form_input("hidden", "group_id", $group_id);
  151. print '<p><span class="preinput">'._("Squad Login Name:").'</span><br />&nbsp;&nbsp;';
  152. print $group."-".form_input("text", "form_loginname", $form_loginname).'</p>';
  153. print '<p><span class="preinput">'._("Real Name:").'</span><br />&nbsp;&nbsp;';
  154. print form_input("text", "form_realname", $form_realname).'</p>';
  155. print form_footer();
  156. }
  157. else
  158. {
  159. print '<p class="warn">'._("You cannot have more squads than members").'</p>';
  160. }
  161. }
  162. else
  163. {
  164. ### A squad passed as argument? Allow to add and remove member, to
  165. # change the squad name or to delete it
  166. $sql = "SELECT user.user_name AS user_name,"
  167. . "user.realname AS realname, "
  168. . "user.user_id AS user_id "
  169. . "FROM user,user_group WHERE "
  170. . "user.user_id=? AND user_group.group_id=? AND user_group.admin_flags='SQD' "
  171. . "ORDER BY user.user_name";
  172. $result = db_execute($sql, array($squad_id, $group_id));
  173. if (!db_numrows($result))
  174. { exit_error(_("Squad not found")); }
  175. # Update of general info
  176. if ($update_general)
  177. {
  178. if (!$form_realname)
  179. { fb(_("You must supply a non-empty real name."),1); }
  180. else
  181. {
  182. $result_update = db_execute("UPDATE user SET realname=? WHERE user_id=?",
  183. array($form_realname, $squad_id));
  184. if (db_affected_rows($result_update) > 0)
  185. {
  186. fb("Squad name updated");
  187. group_add_history('Squad name update',
  188. db_result($result, 0, 'realname'),
  189. $group_id);
  190. # Update the result query with the new name
  191. $result = db_execute($sql, array($squad_id, $group_id));
  192. }
  193. }
  194. }
  195. # Request squad deletion
  196. if ($update_delete_step1)
  197. {
  198. site_project_header(array('title'=>_("Manage Squads"),'group'=>$group_id,'context'=>'ahome'));
  199. print '<p>'._('This action cannot be undone, the squad login name will no longer be available.').'</p>';
  200. print form_header($_SERVER["PHP_SELF"]);
  201. print form_input("hidden", "group_id", $group_id);
  202. # do not pass the squad id as $squad_id, because if $squad_id is defined
  203. # the software will try show the squad details, even if it has been
  204. # removed, while we want the list of existing squads
  205. print form_input("hidden", "squad_id_to_delete", $squad_id);
  206. print '<p><span class="preinput">'._("Do you really want to delete this squad account:").'</span><br />&nbsp;&nbsp;';
  207. print form_input("checkbox", "deletionconfirmed", "yes").' '._("Yes, I really do").'</p>';
  208. print form_submit(_("Update"), "update_delete_step2");
  209. site_project_footer(array());
  210. exit;
  211. }
  212. # Add members to the squad
  213. if ($add_to_squad && $user_ids)
  214. {
  215. foreach ($user_ids as $user) {
  216. if (member_squad_add($user, $squad_id, $group_id))
  217. { fb(sprintf(_("User %s added to the squad."), user_getname($user))); }
  218. else
  219. { fb(sprintf(_("User %s is already part of the squad."), user_getname($user)),1); }
  220. }
  221. }
  222. # Remove members from the squad
  223. if ($remove_from_squad && $user_ids)
  224. {
  225. foreach ($user_ids as $user) {
  226. if (member_squad_remove($user, $squad_id, $group_id))
  227. { fb(sprintf(_("User %s removed from the squad."), user_getname($user))); }
  228. else
  229. { fb(sprintf(_("User %s is not part of the squad."), user_getname($user)),1); }
  230. }
  231. }
  232. site_project_header(array('title'=>_("Manage Squads"),'group'=>$group_id,'context'=>'ahome'));
  233. ## GENERAL
  234. print form_header($_SERVER["PHP_SELF"]);
  235. print form_input("hidden", "group_id", $group_id);
  236. print form_input("hidden", "squad_id", $squad_id);
  237. print '<p><span class="preinput">'._("Real Name:").'</span><br />&nbsp;&nbsp;';
  238. print form_input("text", "form_realname", db_result($result, 0, 'realname')).' &lt;'.db_result($result, 0, 'user_name').'&gt;</p>';
  239. print form_submit(_("Update"), "update_general").' '.form_submit(_("Delete Squad"), "update_delete_step1").'</form>';
  240. ## REMOVE USERS
  241. print '<h3>'._("Removing members").'</h3>';
  242. $result_delusers = db_execute("SELECT user.user_id AS user_id, "
  243. . "user.user_name AS user_name, "
  244. . "user.realname AS realname "
  245. . "FROM user,user_squad "
  246. . "WHERE user.user_id=user_squad.user_id AND user_squad.squad_id=?"
  247. . " ORDER BY user.user_name", array($squad_id));
  248. print "<p>"._("To remove members from the squad, select their name and click on the button below.");
  249. print form_header($_SERVER["PHP_SELF"]);
  250. print form_input("hidden", "group_id", $group_id);
  251. print form_input("hidden", "squad_id", $squad_id);
  252. print '&nbsp;&nbsp;<select name="user_ids[]" size="10" multiple="multiple">';
  253. $exists = false;
  254. $already_in_squad = array();
  255. while ($thisuser = db_fetch_array($result_delusers))
  256. {
  257. print '<option value="'.$thisuser['user_id'].'">'.$thisuser['realname']
  258. .' &lt;'.$thisuser['user_name'].'&gt;</option>';
  259. $already_in_squad[$thisuser['user_id']] = true;
  260. $exists=true;
  261. }
  262. if (!$exists) {
  263. # Show none if the list is empty
  264. print '<option>'._("None found").'</option>';
  265. }
  266. print '</select>';
  267. print '<br />'.form_submit(_("Remove Members"), "remove_from_squad").'</form>';
  268. ## ADD USERS
  269. print '<h3>'._("Adding members").'</h3>';
  270. $result_addusers = db_execute("SELECT user.user_id AS user_id, "
  271. . "user.user_name AS user_name, "
  272. . "user.realname AS realname "
  273. . "FROM user,user_group "
  274. . "WHERE user.user_id=user_group.user_id AND user_group.group_id=? "
  275. . " AND admin_flags<>'P' AND admin_flags<>'SQD' "
  276. . "ORDER BY user.user_name", array($group_id));
  277. print "<p>"._("To add members to the squad, select their name and click on the button below.");
  278. print form_header($_SERVER["PHP_SELF"]);
  279. print form_input("hidden", "group_id", $group_id);
  280. print form_input("hidden", "squad_id", $squad_id);
  281. print '&nbsp;&nbsp;<select name="user_ids[]" size="10" multiple="multiple">';
  282. unset($exists);
  283. while ($thisuser = db_fetch_array($result_addusers))
  284. {
  285. # Ignore if previously found as member
  286. if (array_key_exists($thisuser['user_id'], $already_in_squad))
  287. { continue; }
  288. print '<option value="'.$thisuser['user_id'].'">'.$thisuser['realname'].' &lt;'.$thisuser['user_name'].'&gt;</option>';
  289. $exists=1;
  290. }
  291. if (!$exists) {
  292. # Show none if the list is empty
  293. print '<option>'._("None found").'</option>';
  294. }
  295. print '</select>';
  296. print '<br />'.form_submit(_("Add Members"), "add_to_squad").'</form>';
  297. ## PERMISSIONS LINK
  298. print '<h3>'._("Setting permissions").'</h3>';
  299. print '<a href="userperms.php?group='.$group.'#'.db_result($result, 0, 'user_name').'">'._("Go the the 'Set Permissions' page").'</a>';
  300. }
  301. site_project_footer(array());