public function evaluateAction() { // kontrola, zda existuje prirazeny test, netestuje se vyplneni (byl uz vyplnen) $link = $this->getParam('link'); $assignment = $this->verifyLink($link, FALSE, TRUE); $form = new TestCommentForm(); $assignmentData = $assignment->get_data(); $form->setDefaults($assignmentData); $this->view->form = $form; //pro kandidata nastavi jiny view $auth = Zend_Auth::getInstance(); if ($auth->hasIdentity()) { $this->_helper->viewRenderer('evaluate-internal'); } else { $this->_helper->viewRenderer('evaluate-external'); } $this->view->messages = $this->_helper->flashMessenger->getMessages(); $this->view->title = 'Evaluation of submitted test'; $this->view->assignment = $assignment; $this->view->test = My_Model::get('Tests')->getById($assignment->getid_test()); $this->view->status = My_Model::get('Statuses')->getById($assignment->getid_status()); $candidate = My_Model::get('Candidates')->getById($assignment->getid_kandidat()); $this->view->candidate = $candidate->getFullName(); // ########################### POST ########################### // Handles form submission if ($this->_request->isPost()) { if ($this->_request->isXmlHttpRequest()) { //ajax call request $this->_helper->layout->disableLayout(); $this->_helper->viewRenderer->setNoRender(TRUE); $postData = $this->getRequest()->getPost(); $question_id = 0; $isCorrect = null; if (array_key_exists('question_id', $postData)) { $question_id = intval($postData['question_id']); } if (array_key_exists('isCorrect', $postData)) { $isCorrect = filter_var($postData['isCorrect'], FILTER_VALIDATE_BOOLEAN); } //check request if ($question_id > 0 & is_bool($isCorrect)) { // if valid reevaluate $responses = $assignment->getResponses(); foreach ($responses as $r) { if ($r->getid_otazka() == $question_id) { $r->setspravne($isCorrect); $r->save(); } } } else { //deny response when invalid $this->_response->clearBody(); $this->_response->clearHeaders(); $this->_response->setHttpResponseCode(403); } } else { //form request - Save deetails if ($form->isValid($this->_request->getPost())) { $formValues = $form->getValues(); // Updates test object in DB $assignment->setkomentar($formValues["komentar"]); // prepocitani spravnych odpovedi - pocita skore pro jednotlive odpovedi, potom se udela prumer // je to takova haluz, protoze odpovedi nejsou v db rozdelene po otazkach $last_question_id = 0; $question_options = 1; //zerodivision hack $question_options_correct = 0; $question_score = 0; $questions_count = 0; $total_score = 0; $responses = $assignment->getResponses(); foreach ($responses as $r) { //reset count on new question if ($r->getid_otazka() != $last_question_id) { $questions_count++; $question_score = (int) round($question_options_correct / $question_options * 100); $total_score += $question_score; $question_options = 0; $question_options_correct = 0; } // count correct answers $question_options++; $last_question_id = $r->getid_otazka(); if (filter_var($r->getspravne(), FILTER_VALIDATE_BOOLEAN)) { $question_options_correct++; } } //include last question $question_score = (int) round($question_options_correct / $question_options * 100); $total_score += $question_score; $result = (int) round($total_score / $questions_count); $assignment->sethodnoceni($result); //changte status to evaluated $statuses = new Statuses(); $statusID = $statuses->getStatusID('EVALUATED'); $assignment->setid_status($statusID); $assignment->save(); //dokonci evaluaci - zalezi na uzivatelske roli $this->_helper->flashMessenger->addMessage("Test has been successfully evaluated."); $auth = Zend_Auth::getInstance(); if ($auth->hasIdentity()) { // prihlaseneho presmeruje na stranku kandidata $this->_helper->redirector->gotoRoute(array('controller' => 'candidate', 'action' => 'detail', 'id' => $assignment->getid_kandidat()), 'default', true); } else { // bez prihlaseni skonci $this->_helper->redirector->gotoRoute(array('controller' => 'assignment', 'action' => 'index'), 'default', true); } } } } }