synergy/server/api/review_assignment.php (171 lines of code) (raw):
<?php
use Synergy\App\Synergy;
use Synergy\Controller\AssignmentCtrl;
use Synergy\Controller\Mediator;
use Synergy\Controller\RunCtrl;
use Synergy\Controller\ReviewCtrl;
use Synergy\Controller\SpecificationLockCtrl;
use Synergy\Misc\HTTP;
use Synergy\Model\Exception\AssignmentConflictException;
use Synergy\Model\Review\ReviewAssignment;
require_once '../setup/conf.php';
switch ($_SERVER['REQUEST_METHOD']) {
case "POST":
if (isset($_REQUEST['volunteer'])) {
if (!Synergy::getSessionProvider()->sessionExists()) {
HTTP::Unauthorized("");
die();
}
} else {
if (!ReviewAssignment::canCreate()) {
HTTP::Unauthorized("");
die();
}
}
$data = json_decode(file_get_contents('php://input'));
if (!isset($data->reviewUrl) || !isset($data->username) || !isset($data->testRunId) || !isset($data->title) || !isset($data->owner)) {
HTTP::BadRequest("Missing parameters");
die();
}
if (!RunCtrl::runIsActive(intval($data->testRunId))) {
HTTP::PreconditionFailed("Test run is closed");
die();
}
$runCtrl = new RunCtrl();
$username = (isset($_REQUEST['volunteer'])) ? $username = Synergy::getSessionProvider()->getUsername() : $data->username;
$createdBy = (isset($_REQUEST['volunteer'])) ? ReviewAssignment::CREATED_BY_TESTER : ReviewAssignment::CREATED_BY_MANAGER_ADMIN;
$reviewCtrl = new ReviewCtrl();
if ($reviewCtrl->createAssignment(intval($data->testRunId), $username, $data->reviewUrl, $createdBy, $data->title, $data->owner))
HTTP::OK("");
else
HTTP::BadRequest("Oops");
break;
case "DELETE":
if (!isset($_REQUEST['id'])) {
HTTP::BadRequest("Missing parameters");
die();
}
$assignmentId = intval($_REQUEST['id']);
$assignmentCtrl = new ReviewCtrl();
if (!$assignmentCtrl->userCanDeleteAssignmentById($assignmentId)) {
HTTP::Unauthorized("");
die();
}
$runId = $assignmentCtrl->getRunIdByAssignmentId($assignmentId);
$runCtrl = new RunCtrl();
if(!$runCtrl->runIsActive($runId)){
HTTP::BadRequest("Removing assignments is not allowed when test run is closed");
die();
}
if ($assignmentCtrl->deleteAssignment($assignmentId)) {
HTTP::OK("");
} else {
HTTP::BadRequest("");
}
break;
case "PUT":
if (!isset($_REQUEST['id'])) {
HTTP::BadRequest("Missing parameters");
die();
}
$headers = array();
foreach ($_SERVER as $name => $value) {
if (substr($name, 0, 5) == 'HTTP_') {
$headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value;
}
}
$requestedTimestamp = (array_key_exists("Synergy-Timestamp", $headers) ? urldecode($headers["Synergy-Timestamp"]) : "");
if (strlen($requestedTimestamp) < 1) {
if (is_null($_REQUEST["datetime"]) || !isset($_REQUEST["datetime"])) {
HTTP::BadRequest("Missing timestamp");
die();
}
$requestedTimestamp = $_REQUEST["datetime"];
}
$runCtrl = new ReviewCtrl();
if (!$runCtrl->isRequestUpToDate(intval($_REQUEST["id"]), $requestedTimestamp)) {
HTTP::Conflict("Exists record saved after this request was made");
die();
}
if (!Synergy::getSessionProvider()->sessionExists() || (Synergy::getSessionProvider()->sessionExists() && !$runCtrl->checkUserIsAssigned(intval($_REQUEST['id']), Synergy::getSessionProvider()->getUsername()))) {
HTTP::Unauthorized("");
die();
}
if (!RunCtrl::runIsActive($runCtrl->getRunIdByAssignmentId(intval($_REQUEST["id"])))) {
HTTP::PreconditionFailed("Test run is closed");
die();
}
$put = file_get_contents('php://input');
$data = json_decode($put);
$runCtrl->saveAssignmentProgress($data, intval($_REQUEST['id']));
HTTP::OK("");
break;
case "GET":
if (!isset($_REQUEST['id'])) {
HTTP::BadRequest("Missing parameters");
die();
}
$mode = "view";
if (isset($_REQUEST['mode']))
$mode = $_REQUEST['mode'];
$runCtrl = new ReviewCtrl();
switch ($mode) {
case "view":
$assignment = $runCtrl->getAssignment(intval($_REQUEST['id']));
if (is_null($assignment)) {
HTTP::NotFound("Assignment not found");
die();
}
HTTP::OK((json_encode($assignment)), 'Content-type: application/json');
break;
case "continue":
$assignment = $runCtrl->getAssignment(intval($_REQUEST['id']));
if (is_null($assignment)) {
HTTP::NotFound("Assignment not found");
die();
}
date_default_timezone_set('UTC');
$localTime = date('Y-m-d H:i:s');
$runCtrl->setLastUpdated($localTime, $assignment->id);
HTTP::OK((json_encode($assignment)), 'Content-type: application/json');
break;
case "restart":
$headers = array();
foreach ($_SERVER as $name => $value) {
if (substr($name, 0, 5) == 'HTTP_') {
$headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value;
}
}
$requestedTimestamp = (array_key_exists("Synergy-Timestamp", $headers) ? urldecode($headers["Synergy-Timestamp"]) : "");
if (strlen($requestedTimestamp) < 1) {
if (is_null($_REQUEST["datetime"]) || !isset($_REQUEST["datetime"])) {
HTTP::BadRequest("Missing timestamp");
die();
}
$requestedTimestamp = $_REQUEST["datetime"];
}
if (!$runCtrl->isRequestUpToDate(intval($_REQUEST["id"]), $requestedTimestamp)) {
HTTP::Conflict("Exists record saved after this request was made");
die();
}
$runCtrl->restartAssignment(intval($_REQUEST['id']));
$assignment = $runCtrl->getAssignment(intval($_REQUEST['id']));
if (is_null($assignment)) {
HTTP::NotFound("Assignment not found");
die();
}
if ($assignment->username !== Synergy::getSessionProvider()->getUsername()) {
HTTP::Unauthorized($msg);
die();
}
HTTP::OK((json_encode($assignment)), 'Content-type: application/json');
break;
default:
break;
}
break;
default:
HTTP::MethodNotAllowed('');
break;
}
?>