public function handle($data)
 {
     $this->validate_request(["assessment" => ["profile", "questions"]]);
     $assessment = $data->{"assessment"};
     $profileJson = $assessment->{"profile"};
     if (isset($profileJson->{"assessment-id"})) {
         $id = Token::decode($profileJson->{"assessment-id"});
     } else {
         $id = Token::generateNewToken(TOKEN_ASSESSMENT);
     }
     $name = $profileJson->{"assessment-name"};
     $displayname = isset($profileJson->{"display-name"}) ? $profileJson->{"display-name"} : $name;
     $profile = new AssessmentProfile($id, $name, $displayname);
     $questions = [];
     foreach ($assessment->{"questions"} as $questionData) {
         $questionJson = obj_to_array($questionData);
         if (isset($questionData->{"question-id"})) {
             $questionId = Token::decode($questionData->{"question-id"});
         } else {
             $questionId = Token::generateNewToken(TOKEN_QUESTION);
         }
         $question = [];
         $question["id"] = $questionId->toString();
         $question["data"] = $questionJson;
         $questions[] = $question;
     }
     return ["assessment" => AssessmentBackend::create_assessment($profile, $questions)->toExternalForm()];
 }
 public function handle($data)
 {
     $this->validate_request(["assignment", "answers"]);
     $assignmentId = Token::decode($data->{'assignment'});
     $user = UserBackend::fetch_user_profile($this->params['id']);
     $assignment = AssignmentBackend::fetch_assignment_profile($assignmentId);
     $answers = AssessmentBackend::fetch_assessment_answers(new AssessmentProfile($assignment['assessment-id']));
     $provided = $data->{'answers'};
     $scores = [];
     foreach ($answers as $answer) {
         /** @var Token $question */
         $question = $answer['question-id'];
         $score = ["question-id" => $question->toString(), "question-number" => $answer['question-number'], "max-score" => 1];
         if ($answer['question-type'] == QuestionType::MULTI_CHOICE) {
             $score['score'] = $this->mark_multichoice_question($answer['answer-value'], $provided->{$question->toString()});
         } elseif ($answer['question-type'] == QuestionType::ANSWER) {
             $score['score'] = $this->mark_answer_question($answer['answer-value'], $provided->{$question->toString()});
         }
         $scores[] = $score;
     }
     if (count($scores) != count($answers)) {
         throw new EndpointExecutionException("An error has occurred whilst executing this endpoint");
     }
     UserBackend::add_assignment_scores($user, $assignmentId, $assignment['assessment-id'], $scores);
     return ["scores" => $scores];
 }
 public function handle($data)
 {
     $assessments = [];
     /** @var AssessmentProfile $assessment */
     foreach (AssessmentBackend::fetch_all_assessments() as $assessment) {
         $assessments[] = $assessment->toExternalForm();
     }
     return ["count" => count($assessments), "assessments" => $assessments];
 }
 private function handlePost($data)
 {
     $this->validate_request(["question"]);
     $profile = AssessmentBackend::fetch_assessment_profile(Token::decode($this->params['id']));
     $questionId = Token::decode($this->params['question']);
     $question = [];
     $question["id"] = $questionId->toString();
     $question["data"] = obj_to_array($data->{"question"});
     AssessmentBackend::update_question($profile, $questionId, $question);
     return $this->handleGet($data);
 }
 public function handle($data)
 {
     $this->validate_request(["question"]);
     $assessment = AssessmentBackend::fetch_assessment_profile(Token::decode($this->params['id']));
     $questionJson = obj_to_array($data->{"question"});
     if (isset($data->{"question"}->{"question-id"})) {
         $questionId = Token::decode($data->{"question"}->{"question-id"});
     } else {
         $questionId = Token::generateNewToken(TOKEN_QUESTION);
     }
     $question = [];
     $question["id"] = $questionId->toString();
     $question["data"] = $questionJson;
     AssessmentBackend::add_question($assessment, $question);
     return [];
 }
 public function handleDelete($data)
 {
     AssessmentBackend::delete_assessment(new AssessmentProfile(Token::decode($this->params['id'])));
     return [];
 }