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);
                 }
             }
         }
     }
 }