php8
[web.mtrack] / admin / component.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 MTrackACL::requireAnyRights('Components', 'modify');
6
7 if ($_SERVER['REQUEST_METHOD'] == 'POST') {
8   if (isset($_POST['newcomponent']) && strlen($_POST['newcomponent'])) {
9     $CS = MTrackChangeset::begin("component:X",
10         "Added Component $_POST[newcomponent]");
11     $comp = new MTrackComponent;
12     $comp->name = $_POST['newcomponent'];
13     $comp->setProjects($_POST['newcomponentprojects']);
14     $comp->save($CS);
15     $CS->setObject("component:$comp->compid");
16     $CS->commit();
17   }
18   foreach ($_POST as $name => $value) {
19     if (preg_match("/^comp:(\d+):name$/", $name, $M)) {
20       $compid = (int)$M[1];
21       $C = MTrackComponent::loadById($compid);
22       $changed = false;
23
24       if ($C->name != $_POST["comp:$compid:name"]) {
25         $C->name = $_POST["comp:$compid:name"];
26         $changed = true;
27       }
28       if (isset($_POST["comp:$compid:deleted"]) &&
29           $_POST["comp:$compid:deleted"] == "on") {
30         $deleted = '1';
31       } else {
32         $deleted = '';
33       }
34       if ($C->deleted != $deleted) {
35         $C->deleted = $deleted;
36         $changed = true;
37       }
38       $plist = $_POST["comp:$compid:projects"];
39       if (is_array($plist)) {
40         asort($plist);
41       }
42       if ($plist != $C->getProjects()) {
43         $C->setProjects($plist);
44         $changed = true;
45       }
46       if ($changed) {
47         $CS = MTrackChangeset::begin("component:$compid",
48             "Edit Component $C->name");
49
50         $C->save($CS);
51         $CS->commit();
52       }
53     }
54   }
55   header("Location: ${ABSWEB}admin/");
56   exit;
57 }
58
59 mtrack_head("Administration - Components");
60
61 echo "<form method='post'>";
62 echo "<br><b>Components</b><br>\n";
63 echo "<table><tr><th>Name</th><th>Projects</th><th>Deleted</th></tr>\n";
64
65 $projects = array();
66 foreach (MTrackDB::q('select projid, name, shortname from projects
67     order by name')->fetchAll() as $row) {
68   if ($row[1] != $row[2]) {
69     $projects[$row[0]] = $row[1] . " ($row[2])";
70   } else {
71     $projects[$row[0]] = $row[1];
72   }
73 }
74
75 $p_by_c = array();
76 foreach (MTrackDB::q('select compid, projid from components_by_project')
77     ->fetchAll() as $row) {
78   $p_by_c[$row[0]][$row[1]] = $row[1];
79 }
80
81 foreach (MTrackDB::q('select compid, name, deleted from components order by name')->fetchAll() as $row) {
82   $compid = (int)$row[0];
83   $name = htmlentities($row[1], ENT_QUOTES, 'utf-8');
84   $del = $row[2] ? ' checked="checked" ' : '';
85   echo "<tr>" .
86     "<td><input type='text' name='comp:$compid:name' value='$name'></td>" .
87     "<td>" . mtrack_multi_select_box("comp:$compid:projects",
88       "(select to add)", $projects, $p_by_c[$compid]) .
89       "</td>" .
90       "<td><input type='checkbox' name='comp:$compid:deleted' $del></td>" .
91       "</tr>\n";
92 }
93
94 echo "<tr><td><input type='text' name='newcomponent' value=''></td>" .
95   "<td>" . mtrack_multi_select_box('newcomponentprojects',
96     "(select to add)", $projects) .
97     "</td><td>Add a new Component</td></tr>\n";
98
99 echo "</table>\n";
100
101 echo "<button>Save Changes</button></form>";
102
103 mtrack_foot();
104