php8
[web.mtrack] / admin / group.php
1 <?php # vim:ts=2:sw=2:et:
2 /* For licensing and copyright terms, see the file named LICENSE */
3 include '../../inc/common.php';
4
5 if (!isset($_REQUEST['pid'])) {
6   throw new Exception("missing project id");
7 }
8 $pid = (int)$_REQUEST['pid'];
9
10 MTrackACL::requireAnyRights("project:$pid", 'modify');
11
12 $P = MTrackProject::loadById($pid);
13 if (!$P) {
14   throw new Exception("invalid project " . htmlentities($pid));
15 }
16
17 if (isset($_REQUEST['group'])) {
18   $group = $_REQUEST['group'];
19 } else {
20   $group = null;
21 }
22
23 if ($_SERVER['REQUEST_METHOD'] == 'POST') {
24   if (!strlen($group)) {
25     throw new Exception("missing group name");
26   }
27   if (isset($_POST['members'])) {
28     $members = $_POST['members'];
29   } else {
30     $members = array();
31   }
32
33   $CS = MTrackChangeset::begin("project:$pid", "Changed group $group");
34   if (isset($_POST['isnew'])) {
35     MTrackDB::q('insert into groups (name, project) values (?, ?)',
36       $group, $pid);
37   }
38
39   MTrackDB::q(
40     'delete from group_membership where groupname = ? and project = ?',
41     $group, $pid);
42   foreach ($members as $username) {
43     MTrackDB::q(
44       'insert into group_membership (groupname, project, username) values (?,?,?)',
45       $group, $pid, $username);
46   }
47   $CS->commit();
48   header("Location: {$ABSWEB}admin/project.php?edit=$pid");
49   exit;
50 }
51
52 mtrack_head($group ? "$P->name - $group" : "$P->name - New Group");
53
54 echo "<form method='post'><input type='hidden' name='pid' value='$pid'>";
55 if ($group) {
56   echo "<h1>" . htmlentities("$P->name - $group", ENT_QUOTES, 'utf-8') . "</h1>";
57   echo "<input type='hidden' name='group' value='" .
58     htmlentities($group, ENT_QUOTES, 'utf-8') .
59     "'>";
60 } else {
61   echo "<h1>" . htmlentities("$P->name - New Group", ENT_QUOTES, 'utf-8') . "</h1>";
62   echo "Group: <input type='text' name='group'>";
63   echo "<input type='hidden' name='isnew' value='1'>";
64 }
65
66 $users = array();
67 foreach (MTrackDB::q('select userid, fullname from userinfo where active = 1 order by userid')
68     ->fetchAll() as $row) {
69   if (strlen($row[1])) {
70     $disp = "$row[0] - $row[1]";
71   } else {
72     $disp = $row[0];
73   }
74   $users[$row[0]] = $disp;
75 }
76 $members = array();
77 foreach (MTrackDB::q('select username from group_membership where project = ? and groupname = ?', $pid, $group)->fetchAll(PDO::FETCH_COLUMN, 0) as $name) {
78   $members[$name] = $name;
79 }
80 echo mtrack_multi_select_box('members', "Members", $users, $members);
81
82 echo "<input type='submit' value='Save'>";
83
84 echo "</form>";
85
86 mtrack_foot();
87