106 lines
4.5 KiB
PHP
106 lines
4.5 KiB
PHP
<?php
|
|
|
|
require_once('../include/json-header.php');
|
|
require_once('../include/build-requests-fetcher.php');
|
|
|
|
function main($path) {
|
|
$db = new Database;
|
|
if (!$db->connect())
|
|
exit_with_error('DatabaseConnectionFailure');
|
|
|
|
if (count($path) > 1)
|
|
exit_with_error('InvalidRequest');
|
|
|
|
$build_requests_fetcher = new BuildRequestsFetcher($db);
|
|
|
|
if (!count($path)) {
|
|
$task_id = array_get($_GET, 'task');
|
|
if (!$task_id)
|
|
exit_with_error('TaskIdNotSpecified');
|
|
|
|
$test_groups = $db->select_rows('analysis_test_groups', 'testgroup', array('task' => $task_id));
|
|
if (!is_array($test_groups))
|
|
exit_with_error('FailedToFetchTestGroups');
|
|
$build_requests_fetcher->fetch_for_task($task_id);
|
|
} elseif ($path[0] == 'ready-for-notification') {
|
|
$test_groups = $db->query_and_fetch_all("SELECT * FROM analysis_test_groups
|
|
WHERE EXISTS(SELECT 1 FROM build_requests
|
|
WHERE request_group = testgroup_id
|
|
AND request_status IN ('pending', 'scheduled', 'running', 'canceled')) IS FALSE
|
|
AND testgroup_needs_notification IS TRUE AND testgroup_hidden IS FALSE");
|
|
|
|
if (!count($test_groups)) {
|
|
exit_with_success(array('testGroups' => array(),
|
|
'buildRequests' => array(),
|
|
'commitSets' => array(),
|
|
'commits' => array(),
|
|
'uploadedFiles' => array()));
|
|
}
|
|
$build_requests_fetcher->fetch_requests_for_groups($test_groups);
|
|
} elseif ($path[0] == 'need-more-requests') {
|
|
$test_groups = $db->select_rows('analysis_test_groups', 'testgroup', array("hidden" => FALSE, "may_need_more_requests" => TRUE));
|
|
if (!count($test_groups)) {
|
|
exit_with_success(array('testGroups' => array(),
|
|
'buildRequests' => array(),
|
|
'commitSets' => array(),
|
|
'commits' => array(),
|
|
'uploadedFiles' => array()));
|
|
}
|
|
$build_requests_fetcher->fetch_requests_for_groups($test_groups);
|
|
} else {
|
|
$group_id = intval($path[0]);
|
|
$group = $db->select_first_row('analysis_test_groups', 'testgroup', array('id' => $group_id));
|
|
if (!$group)
|
|
exit_with_error('GroupNotFound', array('id' => $group_id));
|
|
$test_groups = array($group);
|
|
$build_requests_fetcher->fetch_for_group($group['testgroup_task'], $group_id);
|
|
}
|
|
if (!$build_requests_fetcher->has_results())
|
|
exit_with_error('FailedToFetchBuildRequests');
|
|
|
|
$test_groups = array_map("format_test_group", $test_groups);
|
|
$group_by_id = array();
|
|
foreach ($test_groups as &$group) {
|
|
$group_id = $group['id'];
|
|
$group_by_id[$group_id] = &$group;
|
|
$first_request = $db->select_first_row('build_requests', 'request', array('group' => $group_id), 'order');
|
|
if ($first_request)
|
|
$group['platform'] = $first_request['request_platform'];
|
|
}
|
|
|
|
$build_requests = $build_requests_fetcher->results();
|
|
foreach ($build_requests as $request) {
|
|
$request_group = &$group_by_id[$request['testGroup']];
|
|
array_push($request_group['buildRequests'], $request['id']);
|
|
array_push($request_group['commitSets'], $request['commitSet']);
|
|
}
|
|
|
|
exit_with_success(array('testGroups' => $test_groups,
|
|
'buildRequests' => $build_requests,
|
|
'commitSets' => $build_requests_fetcher->commit_sets(),
|
|
'commits' => $build_requests_fetcher->commits(),
|
|
'uploadedFiles' => $build_requests_fetcher->uploaded_files()));
|
|
}
|
|
|
|
function format_test_group($group_row) {
|
|
return array(
|
|
'id' => $group_row['testgroup_id'],
|
|
'task' => $group_row['testgroup_task'],
|
|
'name' => $group_row['testgroup_name'],
|
|
'author' => $group_row['testgroup_author'],
|
|
'createdAt' => Database::to_js_time($group_row['testgroup_created_at']),
|
|
'notificationSentAt' => Database::to_js_time($group_row['testgroup_notification_sent_at']),
|
|
'hidden' => Database::is_true($group_row['testgroup_hidden']),
|
|
'needsNotification' => Database::is_true($group_row['testgroup_needs_notification']),
|
|
'mayNeedMoreRequests' => Database::is_true($group_row['testgroup_may_need_more_requests']),
|
|
'initialRepetitionCount' => $group_row['testgroup_initial_repetition_count'],
|
|
'repetitionType' => $group_row['testgroup_repetition_type'],
|
|
'buildRequests' => array(),
|
|
'commitSets' => array(),
|
|
);
|
|
}
|
|
|
|
main(array_key_exists('PATH_INFO', $_SERVER) ? explode('/', trim($_SERVER['PATH_INFO'], '/')) : array());
|
|
|
|
?>
|