19 declare(strict_types=1);
40 $ctrl = $this->gui->ctrl();
41 $next_class = $ctrl->getNextClass($this);
42 $cmd = $ctrl->getCmd(
"edit");
44 switch ($next_class) {
46 if (in_array($cmd, [
"edit",
"save"])) {
52 protected function edit(): void
54 $mt = $this->gui->ui()->mainTemplate();
56 $mt->setContent($form->render());
61 $settings = $this->domain->exerciseSettings()->getByObjId($this->obj_id);
62 $random_manager = $this->domain->assignment()->randomAssignments(
new \
ilObjExercise($this->obj_id,
false));
63 $lng = $this->domain->lng();
66 $pass_nr_min = max($mand, 1);
70 ->form(self::class,
"save")
71 ->section(
"general",
$lng->txt(
'exc_edit_exercise'))
73 ->section(
"avail",
$lng->txt(
'rep_activation_availability'))
75 ->section(
"pres",
$lng->txt(
'obj_presentation'))
79 ->section(
"pass_exc",
$lng->txt(
'exc_passing_exc'))
82 $lng->txt(
"exc_pass_mode"),
84 ?
$lng->txt(
"exc_pass_mode_not_changeable_info") .
" " .
85 implode(
" ", $random_manager->getDeniedDeactivationReasons())
87 $settings->getPassMode()
91 $lng->txt(
"exc_pass_all"),
92 $lng->txt(
"exc_pass_all_info")
96 $lng->txt(
"exc_pass_minimum_nr"),
97 $lng->txt(
"exc_pass_minimum_nr_info")
101 $lng->txt(
"exc_min_nr"),
102 $lng->txt(
"exc_min_nr_info"),
103 $settings->getPassNr(),
109 $lng->txt(
"exc_random_selection"),
111 ?
$lng->txt(
"exc_random_selection_not_changeable_info") .
" " . implode(
113 $random_manager->getDeniedActivationReasons()
115 :
$lng->txt(
"exc_random_selection_info"),
120 $lng->txt(
"exc_nr_random_mand"),
122 $settings->getNrMandatoryRandom(),
132 "completion_by_submission",
133 $lng->txt(
"exc_passed_status_determination"),
135 $settings->getCompletionBySubmission() ?
"1" :
"0" 137 ->group(
"0",
$lng->txt(
"exc_completion_by_tutor"))
140 $lng->txt(
"exc_completion_by_submission"),
141 $lng->txt(
"exc_completion_by_submission_info")
145 ->section(
"publishing",
$lng->txt(
'exc_publishing'))
148 $lng->txt(
"exc_show_submissions"),
149 $lng->txt(
"exc_show_submissions_info"),
150 $settings->getShowSubmissions()
154 ->section(
"notification",
$lng->txt(
'exc_notification'))
157 $lng->txt(
"exc_submission_notification"),
158 $lng->txt(
"exc_submission_notification_info"),
161 $this->domain->user()->getId(),
167 ->section(
"feedback",
$lng->txt(
'exc_feedback'))
169 "exc_settings_feedback_mail",
170 $lng->txt(
"exc_settings_feedback_mail"),
171 $lng->txt(
"exc_settings_feedback_mail_info"),
172 $settings->hasTutorFeedbackMail()
175 "exc_settings_feedback_file",
176 $lng->txt(
"exc_settings_feedback_file"),
177 $lng->txt(
"exc_settings_feedback_file_info"),
178 $settings->hasTutorFeedbackFile()
181 "exc_settings_feedback_text",
182 $lng->txt(
"exc_settings_feedback_text"),
183 $lng->txt(
"exc_settings_feedback_text_info"),
184 $settings->hasTutorFeedbackText()
187 $form = $form->addAdditionalFeatures(
197 protected function save(): void
199 $mt = $this->gui->ui()->mainTemplate();
201 $ctrl = $this->gui->ctrl();
202 $lng = $this->domain->lng();
204 $old_settings = $this->domain->exerciseSettings()->getByObjId($this->obj_id);
206 if ($form->isValid()) {
208 $form->saveStdTitleAndDescription($this->obj_id,
"exc");
209 $form->saveStdTile($this->obj_id,
"exc");
210 $form->saveOnline($this->obj_id,
"exc");
213 $feedback += $form->getData(
"exc_settings_feedback_mail")
216 $feedback += $form->getData(
"exc_settings_feedback_file")
219 $feedback += $form->getData(
"exc_settings_feedback_text")
222 $settings = $this->data->settings(
224 $old_settings->getInstruction(),
225 $old_settings->getTimeStamp(),
226 $form->getData(
"pass_mode"),
227 (
int) $form->getData(
"nr_random_mand"),
228 (
int) $form->getData(
"pass_nr"),
229 (bool) $form->getData(
"show_submissions"),
230 (bool) $form->getData(
"completion_by_submission"),
231 (
int) $old_settings->getCertificateVisibility(),
234 $this->domain->exerciseSettings()->update($settings);
238 $this->domain->user()->getId(),
240 (bool) $form->getData(
"notification")
242 $form->saveAdditionalFeatures(
247 $mt->setOnScreenMessage(
"success",
$lng->txt(
"msg_obj_modified"),
true);
248 $ctrl->redirectByClass(self::class,
"edit");
250 $mt = $this->gui->ui()->mainTemplate();
251 $mt->setContent($form->render());
Exercise UI frontend presentation service class.
static count(int $a_ex_id)
static countMandatory(int $a_ex_id)
const TUTOR_FEEDBACK_FILE
const TUTOR_FEEDBACK_TEXT
const TUTOR_FEEDBACK_MAIL
static setNotification(int $type, int $user_id, int $id, bool $status=true)
Set notification status for object and user.
__construct(protected InternalDataService $data, protected InternalDomainService $domain, protected InternalGUIService $gui, protected int $obj_id)
Internal factory for data objects.
const TYPE_EXERCISE_SUBMISSION
static hasNotification(int $type, int $user_id, int $id)
Check notification status for object and user.