public function saveAssignmentProgress()

in synergy/server/controller/RunCtrl.php [200:297]


    public function saveAssignmentProgress($data, $json, $id) {

        // update record in test_assignment - number_of_cases, number_of_cases_completed, failed_cases, passed_cases, skipped_cases
        $numberOfCases = 0;
        $numberOfCasesCompleted = 0;
        $failedCases = 0;
        $passedCases = 0;
        $skippedCases = 0;

        $issues = array();
        $c_id = "";
        $durations = array();
        foreach ($data->specification->testSuites as $ts) {// each suite
            foreach ($ts->testCases as $c) { // each case
                if (intval($c->issue) > 0) {
                    $issues["_" . intval($c->id)] = $c->issue;
                }

                if (intval($c->duration) > 0 && intval($c->finished) === 1) {
                    $c_id = $c_id . " id=" . intval($c->id) . " OR";
                    $durations["_" . intval($c->id)] = intval($c->duration);
                }

                $numberOfCases++;
                if (intval($c->finished) === 1) {
                    $numberOfCasesCompleted++;
                }
                switch ($c->result) {
                    case "passed":
                        $passedCases++;
                        break;
                    case "skipped":
                        $skippedCases++;
                        break;
                    case "failed":
                        $failedCases++;
                        break;
                    default:
                        break;
                }
            }
        }

        if ($numberOfCases < 1 || $numberOfCasesCompleted < 1) {
            throw new CorruptedAssignmentException("Corrupted assignment", "Number of all cases is " . $numberOfCases . ", number of completed cases is " . $numberOfCasesCompleted);
        }

// save blob data
        $this->saveBlob($data);

        if ($numberOfCases === $numberOfCasesCompleted) {
            $this->deleteAssignmentProgress($id);
            $lockCtrl = new SpecificationLockCtrl();
            $lockCtrl->removeLockForAssignment($id);
        } else if ($numberOfCases > $numberOfCasesCompleted) {
            $this->saveProgress($json, $id);
        }

        $totalTime = 0;
        // add new issues
        // update estimated time for cases
        $issuesString = "";
        if (strlen($c_id) > 0) {
            $c_id = substr($c_id, 0, strlen($c_id) - 3);
            $c_id = "(" . $c_id . ")";
            $caseCtrl = new CaseCtrl();
            $cases = $caseCtrl->getCasesDuration($c_id);

            for ($i = 0, $maxi = count($cases); $i < $maxi; $i++) {
                if (isset($durations["_" . $cases[$i]->id]) && intval($durations["_" . $cases[$i]->id]) > 0) {
                    $newDurationInMinutes = intval(round($durations["_" . $cases[$i]->id] / (1000 * 60)));
                    $newDurationFloat = ($durations["_" . $cases[$i]->id] / (1000 * 60));
                    if ($newDurationInMinutes < 1) {
                        $newDurationInMinutes = 1;
                    }
                    $totalTime += $newDurationFloat;
                    $caseCtrl->updateDuration($cases[$i]->id, $newDurationInMinutes);
                }
                if (isset($issues["_" . $cases[$i]->id])) {
                    for ($m = 0, $maxm = count($issues["_" . $cases[$i]->id]); $m < $maxm; $m++) {
                        $caseCtrl->addIssue($issues["_" . $cases[$i]->id][$m], $cases[$i]->id);
                        $issuesString = $issuesString . ";" . $issues["_" . $cases[$i]->id][$m];
                    }
                }
            }
        }
        $totalTime = round($totalTime);
        if ($totalTime < 1) {
            $totalTime = 1;
        }
        $this->updateAssignment($id, $numberOfCases, $numberOfCasesCompleted, $failedCases, $skippedCases, $passedCases, $totalTime);
        $this->addIssues($id, $this->getIssues($issuesString));

        $ctrl = new AssignmentCommentsCtrl();
        $ctrl->replaceComments($id, $data);

        Mediator::emit("assignmentProgressUpdated", $id);
    }