/** * @param ilPropertyFormGUI $form */ private function saveTestAccessProperties(ilPropertyFormGUI $form) { // starting time if ($this->formPropertyExists($form, 'chb_starting_time') && !$this->testOBJ->participantDataExist()) { if ($form->getItemByPostVar('chb_starting_time')->getChecked()) { $this->testOBJ->setStartingTime(ilFormat::dateDB2timestamp($form->getItemByPostVar('starting_time')->getDate()->get(IL_CAL_DATETIME))); $this->testOBJ->setStartingTimeEnabled(true); } else { $this->testOBJ->setStartingTimeEnabled(false); } } // ending time if ($this->formPropertyExists($form, 'chb_ending_time') && !$this->testOBJ->participantDataExist()) { if ($form->getItemByPostVar('chb_ending_time')->getChecked()) { $this->testOBJ->setEndingTime(ilFormat::dateDB2timestamp($form->getItemByPostVar('ending_time')->getDate()->get(IL_CAL_DATETIME))); $this->testOBJ->setEndingTimeEnabled(true); } else { $this->testOBJ->setEndingTimeEnabled(false); } } if ($this->formPropertyExists($form, 'password_enabled')) { $this->testOBJ->setPasswordEnabled($form->getItemByPostVar('password_enabled')->getChecked()); if ($form->getItemByPostVar('password_enabled')->getChecked()) { $this->testOBJ->setPassword($form->getItemByPostVar('password')->getValue()); } else { $this->testOBJ->setPassword(''); // otherwise test will still respect value } } if ($this->formPropertyExists($form, 'fixedparticipants') && !$this->testOBJ->participantDataExist()) { $this->testOBJ->setFixedParticipants($form->getItemByPostVar('fixedparticipants')->getChecked()); } if ($this->formPropertyExists($form, 'limitUsers')) { $this->testOBJ->setLimitUsersEnabled($form->getItemByPostVar('limitUsers')->getChecked()); if ($form->getItemByPostVar('limitUsers')->getChecked()) { $this->testOBJ->setAllowedUsers($form->getItemByPostVar('allowedUsers')->getValue()); $this->testOBJ->setAllowedUsersTimeGap($form->getItemByPostVar('allowedUsersTimeGap')->getValue()); } else { $this->testOBJ->setAllowedUsers(''); // otherwise test will still respect value } } }
private function performSaveForm(ilPropertyFormGUI $form) { include_once 'Services/MetaData/classes/class.ilMD.php'; $md_obj =& new ilMD($this->testOBJ->getId(), 0, "tst"); $md_section = $md_obj->getGeneral(); // title $md_section->setTitle(ilUtil::stripSlashes($form->getItemByPostVar('title')->getValue())); $md_section->update(); // Description $md_desc_ids = $md_section->getDescriptionIds(); if ($md_desc_ids) { $md_desc = $md_section->getDescription(array_pop($md_desc_ids)); $md_desc->setDescription(ilUtil::stripSlashes($form->getItemByPostVar('description')->getValue())); $md_desc->update(); } else { $md_desc = $md_section->addDescription(); $md_desc->setDescription(ilUtil::stripSlashes($form->getItemByPostVar('description')->getValue())); $md_desc->save(); } $this->testOBJ->setTitle(ilUtil::stripSlashes($form->getItemByPostVar('title')->getValue())); $this->testOBJ->setDescription(ilUtil::stripSlashes($form->getItemByPostVar('description')->getValue())); $this->testOBJ->update(); // pool usage setting if ($form->getItemByPostVar('use_pool') instanceof ilFormPropertyGUI) { $this->testOBJ->setPoolUsage($form->getItemByPostVar('use_pool')->getChecked()); } // Archiving $this->testOBJ->setEnableArchiving($form->getItemByPostVar('enable_archiving')->getChecked()); // Examview $this->testOBJ->setEnableExamview($form->getItemByPostVar('enable_examview')->getChecked()); $this->testOBJ->setShowExamviewHtml($form->getItemByPostVar('show_examview_html')->getChecked()); $this->testOBJ->setShowExamviewPdf($form->getItemByPostVar('show_examview_pdf')->getChecked()); // online status $this->testOBJ->setOnline($form->getItemByPostVar('online')->getChecked()); // activation if ($form->getItemByPostVar('activation_type')->getValue() == ilObjectActivation::TIMINGS_ACTIVATION) { $this->testOBJ->setActivationLimited(true); $this->testOBJ->setActivationVisibility($form->getItemByPostVar('activation_visibility')->getChecked()); $period = $form->getItemByPostVar("access_period"); $this->testOBJ->setActivationStartingTime($period->getStart()->get(IL_CAL_UNIX)); $this->testOBJ->setActivationEndingTime($period->getEnd()->get(IL_CAL_UNIX)); } else { $this->testOBJ->setActivationLimited(false); } include_once "./Services/AdvancedEditing/classes/class.ilObjAdvancedEditing.php"; $this->testOBJ->setIntroduction($form->getItemByPostVar('introduction')->getValue(), false, ilObjAdvancedEditing::_getUsedHTMLTagsAsString("assessment")); $this->testOBJ->setShowInfo($form->getItemByPostVar('showinfo')->getChecked()); $this->testOBJ->setFinalStatement($form->getItemByPostVar('finalstatement')->getValue(), false, ilObjAdvancedEditing::_getUsedHTMLTagsAsString("assessment")); $this->testOBJ->setShowFinalStatement($form->getItemByPostVar('showfinalstatement')->getChecked()); if ($form->getItemByPostVar('chb_postpone') instanceof ilFormPropertyGUI) { $this->testOBJ->setSequenceSettings($form->getItemByPostVar('chb_postpone')->getChecked()); } $this->testOBJ->setShuffleQuestions($form->getItemByPostVar('chb_shuffle_questions')->getChecked()); $this->testOBJ->setListOfQuestions($form->getItemByPostVar('list_of_questions')->getChecked()); $listOfQuestionsOptions = $form->getItemByPostVar('list_of_questions_options')->getValue(); if (is_array($listOfQuestionsOptions)) { $this->testOBJ->setListOfQuestionsStart(in_array('chb_list_of_questions_start', $listOfQuestionsOptions)); $this->testOBJ->setListOfQuestionsEnd(in_array('chb_list_of_questions_end', $listOfQuestionsOptions)); $this->testOBJ->setListOfQuestionsDescription(in_array('chb_list_of_questions_with_description', $listOfQuestionsOptions)); } else { $this->testOBJ->setListOfQuestionsStart(0); $this->testOBJ->setListOfQuestionsEnd(0); $this->testOBJ->setListOfQuestionsDescription(0); } if ($form->getItemByPostVar('mailnotification') instanceof ilFormPropertyGUI) { $this->testOBJ->setMailNotification($form->getItemByPostVar('mailnotification')->getValue()); } if ($form->getItemByPostVar('mailnottype') instanceof ilFormPropertyGUI) { $this->testOBJ->setMailNotificationType($form->getItemByPostVar('mailnottype')->getChecked()); } if ($form->getItemByPostVar('chb_show_marker') instanceof ilFormPropertyGUI) { $this->testOBJ->setShowMarker($form->getItemByPostVar('chb_show_marker')->getChecked()); } if ($form->getItemByPostVar('chb_show_cancel') instanceof ilFormPropertyGUI) { $this->testOBJ->setShowCancel($form->getItemByPostVar('chb_show_cancel')->getChecked()); } if ($form->getItemByPostVar('kiosk') instanceof ilFormPropertyGUI) { $this->testOBJ->setKioskMode($form->getItemByPostVar('kiosk')->getChecked()); $kioskOptions = $form->getItemByPostVar('kiosk_options')->getValue(); if (is_array($kioskOptions)) { $this->testOBJ->setShowKioskModeTitle(in_array('kiosk_title', $kioskOptions)); $this->testOBJ->setShowKioskModeParticipant(in_array('kiosk_participant', $kioskOptions)); $this->testOBJ->setExamidInKiosk(in_array('examid_in_kiosk', $_POST["kiosk_options"])); } } // redirect after test if ($form->getItemByPostVar('redirection_enabled')->getChecked()) { $this->testOBJ->setRedirectionMode($form->getItemByPostVar('redirection_mode')->getValue()); } else { $this->testOBJ->setRedirectionMode(REDIRECT_NONE); } if (strlen($form->getItemByPostVar('redirection_url')->getValue())) { $this->testOBJ->setRedirectionUrl($form->getItemByPostVar('redirection_url')->getValue()); } else { $this->testOBJ->setRedirectionUrl(null); } if ($form->getItemByPostVar('sign_submission')->getChecked()) { $this->testOBJ->setSignSubmission(true); } else { $this->testOBJ->setSignSubmission(false); } $this->testOBJ->setEnableProcessingTime($form->getItemByPostVar('chb_processing_time')->getChecked()); if ($this->testOBJ->getEnableProcessingTime()) { $processingTime = $form->getItemByPostVar('processing_time'); $this->testOBJ->setProcessingTime(sprintf("%02d:%02d:%02d", $processingTime->getHours(), $processingTime->getMinutes(), $processingTime->getSeconds())); } else { $this->testOBJ->setProcessingTime(''); } $this->testOBJ->setResetProcessingTime($form->getItemByPostVar('chb_reset_processing_time')->getChecked()); if ($form->getItemByPostVar('chb_starting_time')->getChecked()) { $startingTimeSetting = $form->getItemByPostVar('starting_time'); $this->testOBJ->setStartingTime(ilFormat::dateDB2timestamp($startingTimeSetting->getDate()->get(IL_CAL_DATETIME))); } else { $this->testOBJ->setStartingTime(''); } if ($form->getItemByPostVar('chb_ending_time')->getChecked()) { $endingTimeSetting = $form->getItemByPostVar('ending_time'); $this->testOBJ->setEndingTime(ilFormat::dateDB2timestamp($endingTimeSetting->getDate()->get(IL_CAL_DATETIME))); } else { $this->testOBJ->setEndingTime(''); } if ($form->getItemByPostVar('forcejs') instanceof ilFormPropertyGUI) { $this->testOBJ->setForceJS($form->getItemByPostVar('forcejs')->getChecked()); } if ($form->getItemByPostVar('title_output') instanceof ilFormPropertyGUI) { $this->testOBJ->setTitleOutput($form->getItemByPostVar('title_output')->getValue()); } if ($form->getItemByPostVar('password') instanceof ilFormPropertyGUI) { $this->testOBJ->setPassword($form->getItemByPostVar('password')->getValue()); } if ($form->getItemByPostVar('allowedUsers') instanceof ilFormPropertyGUI) { $this->testOBJ->setAllowedUsers($form->getItemByPostVar('allowedUsers')->getValue()); } if ($form->getItemByPostVar('allowedUsersTimeGap') instanceof ilFormPropertyGUI) { $this->testOBJ->setAllowedUsersTimeGap($form->getItemByPostVar('allowedUsersTimeGap')->getValue()); } // Selector for uicode characters global $ilSetting; if ($ilSetting->get('char_selector_availability') > 0) { require_once 'Services/UIComponent/CharSelector/classes/class.ilCharSelectorGUI.php'; $char_selector = new ilCharSelectorGUI(ilCharSelectorConfig::CONTEXT_TEST); $char_selector->addFormProperties($form); $char_selector->getFormValues($form); $this->testOBJ->setCharSelectorAvailability($char_selector->getConfig()->getAvailability()); $this->testOBJ->setCharSelectorDefinition($char_selector->getConfig()->getDefinition()); } $this->testOBJ->setAutosave($form->getItemByPostVar('autosave')->getChecked()); $this->testOBJ->setAutosaveIval($form->getItemByPostVar('autosave_ival')->getValue() * 1000); $this->testOBJ->setUsePreviousAnswers($form->getItemByPostVar('chb_use_previous_answers')->getChecked()); // highscore settings $this->testOBJ->setHighscoreEnabled((bool) $form->getItemByPostVar('highscore_enabled')->getChecked()); $this->testOBJ->setHighscoreAnon((bool) $form->getItemByPostVar('highscore_anon')->getChecked()); $this->testOBJ->setHighscoreAchievedTS((bool) $form->getItemByPostVar('highscore_achieved_ts')->getChecked()); $this->testOBJ->setHighscoreScore((bool) $form->getItemByPostVar('highscore_score')->getChecked()); $this->testOBJ->setHighscorePercentage((bool) $form->getItemByPostVar('highscore_percentage')->getChecked()); $this->testOBJ->setHighscoreHints((bool) $form->getItemByPostVar('highscore_hints')->getChecked()); $this->testOBJ->setHighscoreWTime((bool) $form->getItemByPostVar('highscore_wtime')->getChecked()); $this->testOBJ->setHighscoreOwnTable((bool) $form->getItemByPostVar('highscore_own_table')->getChecked()); $this->testOBJ->setHighscoreTopTable((bool) $form->getItemByPostVar('highscore_top_table')->getChecked()); $this->testOBJ->setHighscoreTopNum((int) $form->getItemByPostVar('highscore_top_num')->getValue()); if (!$this->testOBJ->participantDataExist()) { // question set type if ($form->getItemByPostVar('question_set_type') instanceof ilFormPropertyGUI) { $this->testOBJ->setQuestionSetType($form->getItemByPostVar('question_set_type')->getValue()); } // anonymity setting $this->testOBJ->setAnonymity($form->getItemByPostVar('anonymity')->getValue()); // nr of tries (max passes) $this->testOBJ->setNrOfTries($form->getItemByPostVar('nr_of_tries')->getValue()); // fixed participants setting if ($form->getItemByPostVar('fixedparticipants') instanceof ilFormPropertyGUI) { $this->testOBJ->setFixedParticipants($form->getItemByPostVar('fixedparticipants')->getChecked()); } } // store settings to db $this->testOBJ->saveToDb(true); // Update ecs export settings include_once 'Modules/Test/classes/class.ilECSTestSettings.php'; $ecs = new ilECSTestSettings($this->testOBJ); $ecs->handleSettingsUpdate(); }
/** * Save the form input of the properties form * * @access public */ function savePropertiesObject() { if (!array_key_exists("tst_properties_confirmation", $_POST)) { $hasErrors = $this->propertiesObject(true); } else { $hasErrors = false; } if (!$hasErrors) { $template_settings = null; $template = $this->object->getTemplate(); if ($template) { include_once "Services/Administration/classes/class.ilSettingsTemplate.php"; $template = new ilSettingsTemplate($template, ilObjAssessmentFolderGUI::getSettingsTemplateConfig()); $template_settings = $template->getSettings(); } include_once 'Services/MetaData/classes/class.ilMD.php'; $md_obj =& new ilMD($this->object->getId(), 0, "tst"); $md_section = $md_obj->getGeneral(); // title $md_section->setTitle(ilUtil::stripSlashes($_POST['title'])); $md_section->update(); // Description $md_desc_ids = $md_section->getDescriptionIds(); if ($md_desc_ids) { $md_desc = $md_section->getDescription(array_pop($md_desc_ids)); $md_desc->setDescription(ilUtil::stripSlashes($_POST['description'])); $md_desc->update(); } else { $md_desc = $md_section->addDescription(); $md_desc->setDescription(ilUtil::stripSlashes($_POST['description'])); $md_desc->save(); } $this->object->setTitle(ilUtil::stripSlashes($_POST['title'])); $this->object->setDescription(ilUtil::stripSlashes($_POST['description'])); $this->object->update(); $total = $this->object->evalTotalPersons(); $randomtest_switch = false; // Check the values the user entered in the form if (!$total) { if (!strlen($_POST["random_test"])) { $random_test = 0; } else { $random_test = $_POST["random_test"]; } if (!array_key_exists("tst_properties_confirmation", $_POST)) { if (!$random_test && $this->object->areRandomTestQuestionpoolsConfigured()) { // user tries to change from a random test with existing random question pools to a non random test $this->confirmChangeProperties(self::SWITCH_RANDOM_TEST_SETTING_TO_DISABLED); return; } elseif ($random_test && $this->object->doesNonRandomTestQuestionsExist()) { // user tries to change from a non random test with existing questions to a random test $this->confirmChangeProperties(self::SWITCH_RANDOM_TEST_SETTING_TO_ENABLED); return; } } } else { $random_test = $this->object->isRandomTest(); } // buffer online status sent by form in local variable and store // it to model after the following if block, because the new status // gets reset when random test setting is switched $online = $_POST["online"]; $randomtest_switch = $this->isRandomTestSettingSwitched($random_test); if (!$total) { if ($randomtest_switch && $this->object->isOnline() && $online) { // reset online status that is stored to model later on // due to fact that the random test setting has been changed $online = false; $info = $this->lng->txt("tst_set_offline_due_to_switched_random_test_setting"); ilUtil::sendInfo($info, true); } $this->object->setAnonymity($_POST["anonymity"]); $this->object->setRandomTest($random_test); $this->object->setNrOfTries($_POST["nr_of_tries"]); } // store effective online status to model $this->object->setOnline($online); // activation if ($_POST["activation_type"] == ilObjectActivation::TIMINGS_ACTIVATION) { $this->object->setActivationLimited(true); $this->object->setActivationVisibility($_POST["activation_visibility"]); $date = new ilDateTime($_POST['act_starting_time']['date'] . ' ' . $_POST['act_starting_time']['time'], IL_CAL_DATETIME); $this->object->setActivationStartingTime($date->get(IL_CAL_UNIX)); $date = new ilDateTime($_POST['act_ending_time']['date'] . ' ' . $_POST['act_ending_time']['time'], IL_CAL_DATETIME); $this->object->setActivationEndingTime($date->get(IL_CAL_UNIX)); } else { $this->object->setActivationLimited(false); } include_once "./Services/AdvancedEditing/classes/class.ilObjAdvancedEditing.php"; $this->object->setIntroduction($_POST["introduction"], false, ilObjAdvancedEditing::_getUsedHTMLTagsAsString("assessment")); $this->object->setShowInfo($_POST["showinfo"] ? 1 : 0); $this->object->setFinalStatement($_POST["finalstatement"], false, ilObjAdvancedEditing::_getUsedHTMLTagsAsString("assessment")); $this->object->setShowFinalStatement($_POST["showfinalstatement"] ? 1 : 0); $this->object->setSequenceSettings($_POST["chb_postpone"] ? 1 : 0); $this->object->setShuffleQuestions($_POST["chb_shuffle_questions"] ? 1 : 0); $this->object->setListOfQuestions($_POST["list_of_questions"]); if (is_array($_POST["list_of_questions_options"])) { $this->object->setListOfQuestionsStart(in_array('chb_list_of_questions_start', $_POST["list_of_questions_options"]) ? 1 : 0); $this->object->setListOfQuestionsEnd(in_array('chb_list_of_questions_end', $_POST["list_of_questions_options"]) ? 1 : 0); $this->object->setListOfQuestionsDescription(in_array('chb_list_of_questions_with_description', $_POST["list_of_questions_options"]) ? 1 : 0); } else { $this->object->setListOfQuestionsStart(0); $this->object->setListOfQuestionsEnd(0); $this->object->setListOfQuestionsDescription(0); } $this->object->setMailNotification($_POST["mailnotification"]); $this->object->setMailNotificationType($_POST["mailnottype"]); $this->object->setShowMarker($_POST["chb_show_marker"] ? 1 : 0); $this->object->setShowCancel($_POST["chb_show_cancel"] ? 1 : 0); $this->object->setKioskMode($_POST["kiosk"] ? 1 : 0); $this->object->setShowKioskModeTitle(is_array($_POST["kiosk_options"]) && in_array('kiosk_title', $_POST["kiosk_options"]) ? 1 : 0); $this->object->setShowKioskModeParticipant(is_array($_POST["kiosk_options"]) && in_array('kiosk_participant', $_POST["kiosk_options"]) ? 1 : 0); $this->object->setEnableProcessingTime($_POST["chb_processing_time"] ? 1 : 0); if ($this->object->getEnableProcessingTime()) { $this->object->setProcessingTime(sprintf("%02d:%02d:%02d", $_POST["processing_time"]["hh"], $_POST["processing_time"]["mm"], $_POST["processing_time"]["ss"])); } else { $this->object->setProcessingTime(''); } $this->object->setResetProcessingTime($_POST["chb_reset_processing_time"] ? 1 : 0); if ($_POST['chb_starting_time']) { $this->object->setStartingTime(ilFormat::dateDB2timestamp($_POST['starting_time']['date'] . ' ' . $_POST['starting_time']['time'])); } else { $this->object->setStartingTime(''); } if ($_POST['chb_ending_time']) { $this->object->setEndingTime(ilFormat::dateDB2timestamp($_POST['ending_time']['date'] . ' ' . $_POST['ending_time']['time'])); } else { $this->object->setEndingTime(''); } $this->object->setUsePreviousAnswers($_POST["chb_use_previous_answers"] ? 1 : 0); $this->object->setForceJS($_POST["forcejs"] ? 1 : 0); $this->object->setTitleOutput($_POST["title_output"]); $this->object->setPassword($_POST["password"]); $this->object->setAllowedUsers($_POST["allowedUsers"]); $this->object->setAllowedUsersTimeGap($_POST["allowedUsersTimeGap"]); $this->object->setAutosave($_POST['autosave']); $this->object->setAutosaveIval($_POST['autosave_ival']); if ($this->object->isRandomTest()) { $this->object->setUsePreviousAnswers(0); } $invited_users = $this->object->getInvitedUsers(); if (!($total && count($invited_users) == 0)) { $fixed_participants = 0; if (array_key_exists("fixedparticipants", $_POST)) { if ($_POST["fixedparticipants"]) { $fixed_participants = 1; } } $this->object->setFixedParticipants($fixed_participants); if (!$fixed_participants) { $invited_users = $this->object->getInvitedUsers(); foreach ($invited_users as $user_object) { $this->object->disinviteUser($user_object["usr_id"]); } } } $this->object->setHighscoreEnabled((bool) $_POST['highscore_enabled']); $this->object->setHighscoreAnon((bool) $_POST['highscore_anon']); $this->object->setHighscoreAchievedTS((bool) $_POST['highscore_achieved_ts']); $this->object->setHighscoreScore((bool) $_POST['highscore_score']); $this->object->setHighscorePercentage((bool) $_POST['highscore_percentage']); $this->object->setHighscoreHints((bool) $_POST['highscore_hints']); $this->object->setHighscoreWTime((bool) $_POST['highscore_wtime']); $this->object->setHighscoreOwnTable((bool) $_POST['highscore_own_table']); $this->object->setHighscoreTopTable((bool) $_POST['highscore_top_table']); $this->object->setHighscoreTopNum((int) $_POST['highscore_top_num']); //$this->object->setExpressModeQuestionPoolAllowed($_POST['express_allow_question_pool']); $this->object->setEnabledViewMode($_POST['enabled_view_mode']); $this->object->setPoolUsage($_POST['use_pool']); $this->object->saveToDb(true); // Update ecs export settings include_once 'Modules/Test/classes/class.ilECSTestSettings.php'; $ecs = new ilECSTestSettings($this->object); $ecs->handleSettingsUpdate(); ilUtil::sendSuccess($this->lng->txt("msg_obj_modified"), true); if ($randomtest_switch) { if ($this->object->isRandomTest()) { $this->object->removeNonRandomTestData(); } else { $this->object->removeRandomTestData(); } } $this->ctrl->redirect($this, 'properties'); } }