3 declare(strict_types=1);
76 $this->
language->loadLanguageModule(
'cal');
81 $cmd = $this->controlFlow->getCmd(ControlFlowCommand::DEFAULT);
82 if ($this->
http->wrapper()->query()->has(
'ref_id')) {
83 $ref_id = $this->
http->wrapper()->query()->retrieve(
93 $backClass = strtolower(ilObjEmployeeTalkGUI::class);
94 $this->controlFlow->setParameterByClass($backClass,
'ref_id',
$ref_id);
95 $this->
tabs->setBackTarget($this->
language->txt(
'back'), $this->controlFlow->getLinkTargetByClass(strtolower(ilObjEmployeeTalkGUI::class), ControlFlowCommand::DEFAULT));
98 case self::EDIT_MODE_SERIES:
101 case self::EDIT_MODE_APPOINTMENT:
105 $this->controlFlow->redirectByClass(strtolower(ilObjEmployeeTalkGUI::class), ControlFlowCommand::DEFAULT);
112 $this->
template->setTitle($this->
language->txt(
'etal_date_series_edit'));
115 case ControlFlowCommand::UPDATE_INDEX:
118 case ControlFlowCommand::UPDATE:
128 $this->
template->setTitle($this->
language->txt(
'etal_date_appointment_edit'));
131 case ControlFlowCommand::UPDATE_INDEX:
134 case ControlFlowCommand::UPDATE:
135 $this->updateAppointment();
146 $this->
template->setOnScreenMessage(
'info',
$message . $dates_string);
150 $this->
template->setContent($form->getHTML());
155 $parent = $this->talk->getParent();
159 $a = $a->
getData()->getStartDate()->getUnixTime();
160 $b = $b->
getData()->getStartDate()->getUnixTime();
164 return $a < $b ? -1 : 1;
170 foreach ($talks as $talk) {
180 if ($form->checkInput()) {
182 $parent = $this->talk->getParent();
184 $this->createRecurringTalks($form, $reoccurrence, $parent);
187 $this->
template->setOnScreenMessage(
'success', $this->
language->txt(
'saved_successfully'),
true);
190 $this->controlFlow->redirectToURL(
191 $this->controlFlow->getLinkTargetByClass(
192 strtolower(ilEmployeeTalkMyStaffListGUI::class),
193 ControlFlowCommand::UPDATE_INDEX
202 $form->setFormAction($this->controlFlow->getFormActionByClass(
203 strtolower(self::class)
207 $header->setTitle($this->
language->txt(
'appointment'));
208 $form->addItem($header);
212 $dur->setShowTime(
true);
214 if ($employeeTalk !== null) {
215 $dur->enableToggleFullTime(
216 $this->
language->txt(
'cal_fullday_title'),
217 $employeeTalk->isAllDay()
220 $dur->setStart($employeeTalk->getStartDate());
221 $dur->setEnd($employeeTalk->getEndDate());
224 $form->addItem($dur);
225 $form->addCommandButton(ControlFlowCommand::UPDATE, $this->
language->txt(
'save'),
'etal_date_save');
234 $form->setFormAction($this->controlFlow->getFormActionByClass(
235 strtolower(self::class)
239 $header->setTitle($this->
language->txt(
'appointments'));
240 $form->addItem($header);
244 $dur->setShowTime(
true);
246 if ($employeeTalk !== null) {
247 $dur->enableToggleFullTime(
248 $this->
language->txt(
'cal_fullday_title'),
249 $employeeTalk->isAllDay()
252 $dur->setStart($employeeTalk->getStartDate());
253 $dur->setEnd($employeeTalk->getEndDate());
256 $form->addItem($dur);
262 $cal->allowUnlimitedRecurrences(
false);
263 $cal->setRecurrence($event);
265 $form->addItem($cal);
266 $form->addCommandButton(ControlFlowCommand::UPDATE, $this->
language->txt(
'save'),
'etal_series_save');
275 $this->
template->setContent($form->getHTML());
278 private function updateAppointment():
void 281 $form->setValuesByPost();
282 if ($form->checkInput()) {
286 $dateTimeInput = $form->getItemByPostVar(
'event');
287 $tgl = $form->getInput(
'event')[
'tgl'] ?? 0;
288 [
'start' => $start,
'end' => $end] = $dateTimeInput->getValue();
297 $data = $this->talk->getData();
298 $data->setAllDay(boolval(intval($tgl)));
299 $data->setStartDate($start_date);
300 $data->setEndDate($end_date);
301 $data->setStandalone(
true);
303 $this->talk->setData(
$data);
304 $this->talk->update();
308 $this->
template->setOnScreenMessage(
'success', $this->
language->txt(
'saved_successfully'),
true);
312 $this->controlFlow->redirectToURL(
313 $this->controlFlow->getLinkTargetByClass(
314 strtolower(self::class),
315 ControlFlowCommand::UPDATE_INDEX
325 if (count($talks) === 0) {
329 $firstTalk = $talks[0];
330 $talk_title = $firstTalk->getTitle();
331 $superior =
new ilObjUser($firstTalk->getOwner());
332 $employee =
new ilObjUser($firstTalk->getData()->getEmployee());
333 $superiorName = $superior->getFullname();
345 return $a < $b ? -1 : 1;
348 $add_time = $firstTalk->getData()->isAllDay() ? 0 : 1;
356 $firstTalk->getRefId(),
358 $firstTalk->getDescription(),
359 $firstTalk->getData()->getLocation(),
360 'notification_talks_subject_update',
361 'notification_talks_updated',
371 VCalendarFactory::getInstanceFromTalks($firstTalk->getParent())
380 if ($this->
http->wrapper()->query()->has(self::EDIT_MODE)) {
381 $mode = $this->
http->wrapper()->query()->retrieve(
383 $this->
refinery->kindlyTo()->string()
386 if ($mode === self::EDIT_MODE_SERIES || $mode === self::EDIT_MODE_APPOINTMENT) {
407 switch ($form->
getInput(
'frequence')) {
409 $rec->setFrequenceType($form->
getInput(
'frequence'));
410 $rec->setInterval((
int) $form->
getInput(
'count_DAILY'));
414 $rec->setFrequenceType($form->
getInput(
'frequence'));
415 $rec->setInterval((
int) $form->
getInput(
'count_WEEKLY'));
416 if (is_array($form->
getInput(
'byday_WEEKLY'))) {
422 $rec->setFrequenceType($form->
getInput(
'frequence'));
423 $rec->setInterval((
int) $form->
getInput(
'count_MONTHLY'));
424 switch ((
int) $form->
getInput(
'subtype_MONTHLY')) {
430 switch ((
int) $form->
getInput(
'monthly_byday_day')) {
433 $rec->setBYSETPOS($form->
getInput(
'monthly_byday_num'));
434 $rec->setBYDAY(
'MO,TU,WE,TH,FR');
439 $rec->setBYMONTHDAY($form->
getInput(
'monthly_byday_num'));
443 $rec->setBYDAY(($form->
getInput(
'monthly_byday_num') . $form->
getInput(
'monthly_byday_day')));
449 $rec->setBYMONTHDAY($form->
getInput(
'monthly_bymonthday'));
455 $rec->setFrequenceType($form->
getInput(
'frequence'));
456 $rec->setInterval((
int) $form->
getInput(
'count_YEARLY'));
457 switch ((
int) $form->
getInput(
'subtype_YEARLY')) {
463 $rec->setBYMONTH($form->
getInput(
'yearly_bymonth_byday'));
464 $rec->setBYDAY(($form->
getInput(
'yearly_byday_num') . $form->
getInput(
'yearly_byday')));
468 $rec->setBYMONTH($form->
getInput(
'yearly_bymonth_by_monthday'));
469 $rec->setBYMONTHDAY($form->
getInput(
'yearly_bymonthday'));
476 switch ((
int) $form->
getInput(
'until_type')) {
478 $rec->setFrequenceUntilDate(null);
483 $rec->setFrequenceUntilDate(null);
484 $rec->setFrequenceUntilCount((
int) $form->
getInput(
'count'));
489 $end = $frequence->getRecurrence()->getFrequenceUntilDate();
490 $rec->setFrequenceUntilCount(0);
491 $rec->setFrequenceUntilDate($end);
509 $data = $this->loadEtalkData($form);
512 $data->getStartDate(),
518 $periodStart = clone
$data->getStartDate();
520 $periodEnd = clone
$data->getStartDate();
522 $dateIterator = $calc->calculateDateList($periodStart, $periodEnd);
528 $talkSession->setTitle($this->talk->getTitle());
529 $talkSession->setDescription($this->talk->getLongDescription());
531 $talkSession->setOwner($series->
getOwner());
532 $talkSession->create();
534 $talkSession->createReference();
535 $talkSession->putInTree($series->
getRefId());
537 $data->setObjectId($talkSession->getId());
538 $talkSession->setData(
$data);
539 $talkSession->update();
542 $talks[] = $talkSession;
550 $dateIterator->removeByDAY($periodStart);
551 $dateIterator->rewind();
556 foreach ($dateIterator as $date) {
557 $cloneObject = $talkSession->cloneObject($series->
getRefId());
558 $cloneData = $cloneObject->getData();
560 $cloneData->setStartDate($date);
562 if ($cloneData->isAllDay()) {
567 $cloneObject->setData($cloneData);
568 $cloneObject->update();
570 $cloneObject->setOwner($series->
getOwner());
571 $cloneObject->updateOwner();
573 $talks[] = $cloneObject;
589 foreach ($subItems as $subItem) {
590 if ($subItem[
'type'] ===
'etal') {
591 $refId = intval($subItem[
'ref_id']);
594 if ($talk_data->isStandalone() || $talk_data->isCompleted()) {
609 foreach ($talks as $talk) {
616 $data = $this->talk->getData();
617 $tgl = $form->
getInput(
'event')[
'tgl'] ?? 0;
623 [
'start' => $start,
'end' => $end] = $dateTimeInput->getValue();
636 boolval(intval($tgl)),
638 $data->getLocation(),
639 $data->getEmployee(),
642 $data->getTemplateId()
get(int $a_format, string $a_format_str='', string $a_tz='')
get formatted date
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static stripSlashes(string $a_str, bool $a_strip_html=true, string $a_allow="")
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
getPendingTalksInSeries(ilObjEmployeeTalkSeries $series)
static formatDate(ilDateTime $date, bool $a_skip_day=false, bool $a_include_wd=false, bool $include_seconds=false)
deleteTalks(array $talks)
__construct(ilGlobalTemplateInterface $template, ilLanguage $language, ilCtrl $controlFlow, HttpServices $http, Refinery $refinery, ilTabsGUI $tabs, ilObjEmployeeTalk $talk)
ilEmployeeTalkAppointmentGUI constructor.
static getUserDateFormat(int $a_add_time=0, bool $a_for_parsing=false)
Parse current user setting into date/time format.
static useRelativeDates()
getEditModeParameter(string $mode)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
const EDIT_MODE_APPOINTMENT
getFrequenceType()
Get Frequence type of recurrence.
loadRecurrenceSettings(ilPropertyFormGUI $form)
load recurrence settings
static http()
Fetches the global http state from ILIAS.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
executeAppointmentCommand(string $cmd)
executeSeriesCommand(string $cmd)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
initSeriesEditForm(?EmployeeTalk $employeeTalk=null)
sendNotification(array $talks)
getSubItems(bool $a_admin_panel_enabled=false, bool $a_include_side_block=false, int $a_get_single=0, ilContainerUserFilter $container_user_filter=null)
Class ilEmployeeTalkAppointmentGUI.
$a
thx to https://mlocati.github.io/php-cs-fixer-configurator for the examples
initTalkEditForm(?EmployeeTalk $employeeTalk=null)
static setUseRelativeDates(bool $a_status)
set use relative dates
ilGlobalTemplateInterface $template
for($i=6; $i< 13; $i++) for($i=1; $i< 13; $i++) $d
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...