public function saveQuestionAction()
 {
     // Disables view script call
     $this->_helper->viewRenderer->setNoRender(true);
     // Disables layout to action mapping
     $this->_helper->layout->disableLayout();
     if ($this->_request->isPost()) {
         // load params
         $testId = $this->getParam('testId');
         $questionId = $this->getParam('questionId');
         $test = My_Model::get('Tests')->getById($testId);
         $rawcount = intval($this->getParam('count'));
         $count = $rawcount > -1 && $rawcount <= 6 ? $rawcount : 3;
         $form = new QuestionForm(array('count' => $count));
         if ($form->isValid($this->_request->getPost())) {
             $formValues = $form->getValues();
             Zend_Debug::dump($formValues);
             //check if at least one option is checked
             if ($this->checkAllFalse($formValues)) {
                 $flash = Zend_Controller_Action_HelperBroker::getStaticHelper('FlashMessenger');
                 $flash->clearMessages();
                 $flash->addMessage('At least one option have to be right.');
                 Zend_Debug::dump('at least one has to be right');
                 // redirect to test edit page
                 $this->_helper->redirector->gotoRoute(array('controller' => 'test', 'action' => 'edit', 'id' => $testId), 'default', true);
                 return;
             }
             // ### SAVE/UPDATE QUESTION ###
             $oldQuestion = null;
             $question = null;
             $isNewQuestion = true;
             if ($questionId === NULL) {
                 //create question
                 $question = My_Model::get('Questions')->createRow();
                 Zend_Debug::dump('no question id');
                 Zend_Debug::dump('Create question');
             } else {
                 // load existing
                 $oldQuestion = My_Model::get('Questions')->getById($questionId);
                 if ($oldQuestion === NULL || $oldQuestion->isAnswered() && (strcmp($formValues['otazka'], $oldQuestion->getobsah()) !== 0 || strcmp($formValues['language'], strval($oldQuestion->getid_jazyk())) !== 0)) {
                     Zend_Debug::dump('no old question || (is anwered && changed question)');
                     Zend_Debug::dump('Create question');
                     $question = My_Model::get('Questions')->createRow();
                 } else {
                     $question = $oldQuestion;
                     $isNewQuestion = false;
                     Zend_Debug::dump('use old question');
                 }
             }
             // update question with new data
             $questionValues = array("id_test" => $testId, "obsah" => $formValues['otazka'], "id_jazyk" => strcmp($formValues['language'], '0') != 0 ? $formValues['language'] : null);
             $question->updateFromArray($questionValues);
             // archive old if exist
             if ($oldQuestion !== NULL && $isNewQuestion) {
                 Zend_Debug::dump('archive old question');
                 $oldQuestion->id_test = NULL;
                 $oldQuestion->revize = $question->getid_otazka();
                 $oldQuestion->save();
             }
             // save question id
             $questionId = $question->id_otazka;
             // ### SAVE/UPDATE OPTIONS ###
             $optionContents = $this->loadOptionsFromFormValues($formValues, $questionId);
             if ($oldQuestion !== NULL) {
                 $existingOptions = $oldQuestion->getOptions();
             }
             // question is new or existing options are empty
             if ($isNewQuestion || empty($existingOptions)) {
                 Zend_Debug::dump('is new question || no existing options');
                 // create options with given content
                 foreach ($optionContents as $content) {
                     Zend_Debug::dump('create new option');
                     $option = My_Model::get('Options')->createRow();
                     $option->updateFromArray($content);
                 }
             } else {
                 Zend_Debug::dump('!(is new question || no existing options)');
                 $newcount = count($optionContents);
                 $oldcount = count($existingOptions);
                 // update existing options with given content
                 for ($i = 0; $i < $newcount; $i++) {
                     if ($i < $oldcount) {
                         // pokud je novy pocet otazek mensi nez puvodni, tak se porovnavaji se starymi moznostmi
                         // pokud nebyla moznost zmenena, jde se na dalsi
                         if (strcmp($optionContents[$i]["obsah"], $existingOptions[$i]->obsah) == 0 && $optionContents[$i]["spravnost"] === $existingOptions[$i]->spravnost) {
                             Zend_Debug::dump('no change');
                             continue;
                         }
                         $oldOption = $existingOptions[$i];
                         $option;
                         $isNewOption = true;
                         if ($oldOption === NULL || $oldOption->isAnswered()) {
                             Zend_Debug::dump('no old option || (is answered && changed)');
                             Zend_Debug::dump('create new option');
                             $option = My_Model::get('Options')->createRow();
                         } else {
                             Zend_Debug::dump('not answered, use old option');
                             $option = $oldOption;
                             $isNewOption = false;
                         }
                         $option->updateFromArray($optionContents[$i]);
                         // archive old if exist
                         if ($oldOption !== NULL && $isNewOption) {
                             Zend_Debug::dump('archive old option');
                             $oldOption->id_otazka = NULL;
                             $oldOption->revize = $option->getid_moznost();
                             $oldOption->save();
                         }
                     } else {
                         // pokud je moznosti vic, tak se pridavaji rovnou dalsi
                         Zend_Debug::dump('add new option');
                         $option = My_Model::get('Options')->createRow();
                         $option->updateFromArray($optionContents[$i]);
                     }
                 }
                 // archive removed options
                 for ($i = $newcount; $i < $oldcount; $i++) {
                     Zend_Debug::dump('archive unused options');
                     $oldOption = $existingOptions[$i];
                     $oldOption->id_otazka = NULL;
                     $oldOption->save();
                 }
             }
         } else {
             Zend_Debug::dump($form->getMessages());
             Zend_Debug::dump('Invalid');
             $flash = Zend_Controller_Action_HelperBroker::getStaticHelper('FlashMessenger');
             $flash->clearMessages();
             $flash->addMessage('Question form is not valid.');
         }
     }
     // redirect to test edit page
     $this->_helper->redirector->gotoRoute(array('controller' => 'test', 'action' => 'edit', 'id' => $testId), 'default', true);
 }