3 require_once('db.php');
8 <title>WebKit Test Results</title>
9 <link rel="stylesheet" href="/common.css">
10 <link rel="stylesheet" href="/admin/admin.css">
14 <h1><a href="/">WebKit Perf Monitor</a></h1>
16 <li><a href="/admin/">Admin</a></li>
17 <li><a href="/admin/builders">Builders</a></li>
18 <li><a href="/admin/repositories">Repositories</a></li>
22 <div id="mainContents">
25 function regenerate_manifest() {
26 // manifest.php doesn't need to be regenerated but WebKit Perf Monitor generates a static manifest.json.
29 function notice($message) {
30 echo "<p class='notice'>$message</p>";
34 if (!$db->connect()) {
35 notice('Failed to connect to the database');
38 $action = array_key_exists('action', $_POST) ? $_POST['action'] : NULL;
40 function execute_query_and_expect_one_row_to_be_affected($query, $params, $success_message, $failure_message) {
43 foreach ($params as &$param) {
48 $affected_rows = $db->query_and_get_affected_rows($query, $params);
50 assert('$affected_rows == 1');
51 notice($success_message);
55 notice($failure_message);
59 function update_field($table, $prefix, $field_name) {
62 if (!array_key_exists('id', $_POST) || !array_key_exists($field_name, $_POST))
65 $id = intval($_POST['id']);
66 $prefixed_field_name = $prefix . $field_name;
67 $id_field_name = $prefix ? $prefix . '_id' : 'id';
69 execute_query_and_expect_one_row_to_be_affected("UPDATE $table SET $prefixed_field_name = \$2 WHERE $id_field_name = \$1",
70 array($id, $_POST[$field_name]),
71 "Updated the $prefix $id",
72 "Could not update $prefix $id");
77 class AdministrativePage {
80 private $column_to_be_ordered_by;
83 function __construct($db, $table, $prefix, $column_info) {
85 $this->table = $table;
86 $this->prefix = $prefix ? $prefix . '_' : '';
87 $this->column_info = $column_info;
90 private function name_to_titlecase($name) {
91 return ucwords(str_replace('_', ' ', $name));
94 private function column_label($name) {
95 return array_get($this->column_info[$name], 'label', $this->name_to_titlecase($name));
98 private function render_form_control_for_column($editing_mode, $name, $value = '', $show_update_button_if_needed = FALSE, $size = NULL) {
99 if ($editing_mode == 'text') {
101 <textarea name="$name" rows="7" cols="50">$value</textarea><br>
103 if ($show_update_button_if_needed) {
106 <button type="submit" name="action" value="update">Update</button>
112 if ($editing_mode == 'url') {
116 <input type="text" name="$name" value="$value" size="$size">
121 $sizeIfExits = $size ? " size=\"$size\"" : '';
123 <input type="text" name="$name" value="$value"$sizeIfExits>
127 function render_table($column_to_be_ordered_by) {
128 $column_names = array_keys($this->column_info);
130 foreach ($column_names as $name) {
131 if (array_get($this->column_info[$name], 'pre_insertion'))
133 array_push($labels, htmlspecialchars($this->column_label($name)));
137 $headers = join('</td><td>', $labels);
140 <thead><tr><td>ID</td><td>$headers</td></tr></thead>
145 assert(ctype_alnum_underscore($column_to_be_ordered_by));
146 $rows = $this->db->fetch_table($this->table, $this->prefix . $column_to_be_ordered_by);
148 foreach ($rows as $row) {
149 $id = intval($row[$this->prefix . 'id']);
150 echo "<tr>\n<td>$id</td>\n";
151 foreach ($column_names as $name) {
152 if (array_get($this->column_info[$name], 'pre_insertion'))
155 $custom = array_get($this->column_info[$name], 'custom');
163 $value = htmlspecialchars($row[$this->prefix . $name], ENT_QUOTES);
164 $editing_mode = array_get($this->column_info[$name], 'editing_mode');
165 if (!$editing_mode) {
166 echo "<td>$value</td>\n";
173 <input type="hidden" name="id" value="$id">
174 <input type="hidden" name="action" value="update">
177 $size = array_get($this->column_info[$name], 'size');
178 $this->render_form_control_for_column($editing_mode, $name, $value, TRUE, $size);
179 echo "</form></td>\n";
191 function render_form_to_add($title = NULL) {
193 if (!$title) # Can't use the table name since it needs to be singular.
194 $title = 'New ' . $this->name_to_titlecase($this->prefix);
197 <section class="action-field">
202 foreach (array_keys($this->column_info) as $name) {
203 $editing_mode = array_get($this->column_info[$name], 'editing_mode');
204 if (array_get($this->column_info[$name], 'custom') || !$editing_mode)
207 $label = htmlspecialchars($this->column_label($name));
208 echo "<label>$label<br>\n";
209 $this->render_form_control_for_column($editing_mode, $name);
210 echo "</label><br>\n";
215 <button type="submit" name="action" value="add">Add</button>