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()); ?>