9fed601666bc9786f2397d34995a297fe7e6e438
[WebKit-https.git] / Websites / perf.webkit.org / public / admin / triggerables.php
1 <?php
2
3 require('../include/admin-header.php');
4
5 if ($db) {
6
7     if ($action == 'add') {
8         if ($db->insert_row('build_triggerables', 'triggerable', array('name' => $_POST['name'], 'location' => $_POST['location']))) {
9             notice('Inserted the new triggerable.');
10             regenerate_manifest();
11         } else
12             notice('Could not add the triggerable.');
13     } else if ($action == 'update') {
14         if (update_field('build_triggerables', 'triggerable', 'name'))
15             regenerate_manifest();
16         else if (update_field('build_triggerables', 'triggerable', 'location'))
17             regenerate_manifest();
18         else
19             notice('Invalid parameters.');
20     } else if ($action == 'update-repositories') {
21         $triggerable_id = intval($_POST['id']);
22
23         $db->begin_transaction();
24         $db->query_and_get_affected_rows("DELETE FROM triggerable_repositories WHERE trigrepo_triggerable = $1", array($triggerable_id));
25
26         $repositories = array_get($_POST, 'repositories');
27         $suceeded = TRUE;
28         if ($repositories) {
29             foreach ($repositories as $repository_id) {
30                 if (!$db->insert_row('triggerable_repositories', 'trigrepo', array('triggerable' => $triggerable_id, 'repository' => $repository_id), NULL)) {
31                     $suceeded = FALSE;
32                     notice("Failed to associate repository $repository_id with triggerable $triggerable_id.");
33                     break;
34                 }
35             }
36         }
37         if ($suceeded) {
38             $db->commit_transaction();
39             notice('Updated the association.');
40             regenerate_manifest();
41         } else
42             $db->rollback_transaction();
43     }
44
45     $repository_rows = $db->fetch_table('repositories', 'repository_name');
46     $repository_names = array();
47
48
49     $page = new AdministrativePage($db, 'build_triggerables', 'triggerable', array(
50         'name' => array('editing_mode' => 'string'),
51         'repositories' => array('custom' => function ($triggerable_row) use (&$repository_rows) {
52             return array(generate_repository_checkboxes($triggerable_row['triggerable_id'], $repository_rows));
53         }),
54     ));
55
56     function generate_repository_checkboxes($triggerable_id, $repository_rows) {
57         global $db;
58
59         $repository_rows = $db->query_and_fetch_all('SELECT * FROM repositories LEFT OUTER JOIN triggerable_repositories
60             ON trigrepo_repository = repository_id AND trigrepo_triggerable = $1 ORDER BY repository_name', array($triggerable_id));
61
62         $form = <<< END
63 <form method="POST">
64 <input type="hidden" name="id" value="$triggerable_id">
65 <input type="hidden" name="action" value="update-repositories">
66 END;
67
68         foreach ($repository_rows as $row) {
69             $checked = $row['trigrepo_triggerable'] ? ' checked' : '';
70             $form .= <<< END
71 <label><input type="checkbox" name="repositories[]" value="{$row['repository_id']}"$checked>{$row['repository_name']}</label>
72 END;
73         }
74
75         return $form . <<< END
76 <button>Save</button>
77 </form>
78 END;
79     }
80
81     $page->render_table('name');
82     $page->render_form_to_add();
83 }
84
85 require('../include/admin-footer.php');
86
87 ?>