3 require('../include/admin-header.php');
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();
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();
19 notice('Invalid parameters.');
20 } else if ($action == 'update-repositories') {
21 $triggerable_id = intval($_POST['id']);
23 $db->begin_transaction();
24 $db->query_and_get_affected_rows("DELETE FROM triggerable_repositories WHERE trigrepo_triggerable = $1", array($triggerable_id));
26 $repositories = array_get($_POST, 'repositories');
29 foreach ($repositories as $repository_id) {
30 if (!$db->insert_row('triggerable_repositories', 'trigrepo', array('triggerable' => $triggerable_id, 'repository' => $repository_id), NULL)) {
32 notice("Failed to associate repository $repository_id with triggerable $triggerable_id.");
38 $db->commit_transaction();
39 notice('Updated the association.');
40 regenerate_manifest();
42 $db->rollback_transaction();
45 $repository_rows = $db->fetch_table('repositories', 'repository_name');
46 $repository_names = array();
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));
56 function generate_repository_checkboxes($triggerable_id, $repository_rows) {
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));
64 <input type="hidden" name="id" value="$triggerable_id">
65 <input type="hidden" name="action" value="update-repositories">
68 foreach ($repository_rows as $row) {
69 $checked = $row['trigrepo_triggerable'] ? ' checked' : '';
71 <label><input type="checkbox" name="repositories[]" value="{$row['repository_id']}"$checked>{$row['repository_name']}</label>
75 return $form . <<< END
81 $page->render_table('name');
82 $page->render_form_to_add();
85 require('../include/admin-footer.php');