/**
  * Update multiple sequence items
  * @return
  */
 protected function updateMulti()
 {
     global $ilObjDataCache;
     $this->initFormSequence(self::MODE_MULTI);
     if ($this->form->checkInput()) {
         $this->form->setValuesByPost();
         $apps = explode(';', $_POST['apps']);
         include_once 'Services/Booking/classes/class.ilBookingEntry.php';
         include_once 'Services/Calendar/classes/class.ilCalendarEntry.php';
         // do collision-check if max bookings were reduced
         // no collision check
         $first = $apps;
         $first = array_shift($first);
         $entry = ilBookingEntry::getInstanceByCalendarEntryId($first);
         #if($this->form->getInput('bo') < $entry->getNumberOfBookings())
         #{
         #   $this->edit();
         #   return;
         #}
         // create new context
         $booking = new ilBookingEntry();
         $booking->setObjId($this->getUserId());
         $booking->setNumberOfBookings($this->form->getInput('bo'));
         $deadline = $this->form->getInput('dead');
         $deadline = $deadline['dd'] * 24 + $deadline['hh'];
         $booking->setDeadlineHours($deadline);
         $tgt = explode(',', $this->form->getInput('tgt'));
         $obj_ids = array();
         foreach ((array) $tgt as $ref_id) {
             if (!trim($ref_id)) {
                 continue;
             }
             $obj_id = $ilObjDataCache->lookupObjId($ref_id);
             $type = ilObject::_lookupType($obj_id);
             $valid_types = array('crs', 'grp');
             if (!$obj_id or !in_array($type, $valid_types)) {
                 ilUtil::sendFailure($this->lng->txt('cal_ch_unknown_repository_object'));
                 $this->edit();
                 return;
             }
             $obj_ids[] = $obj_id;
         }
         $booking->setTargetObjIds($obj_ids);
         include_once './Services/Calendar/classes/ConsultationHours/class.ilConsultationHourGroups.php';
         if (ilConsultationHourGroups::getCountGroupsOfUser($this->getUserId())) {
             $booking->setBookingGroup($this->form->getInput('grp'));
         }
         $booking->save();
         // update entries
         $title = $this->form->getInput('ti');
         $location = $this->form->getInput('lo');
         $description = $this->form->getInput('de');
         foreach ($apps as $item_id) {
             $entry = new ilCalendarEntry($item_id);
             $entry->setContextId($booking->getId());
             $entry->setTitle($title);
             $entry->setLocation($location);
             $entry->setDescription($description);
             $entry->update();
         }
         ilBookingEntry::removeObsoleteEntries();
         ilUtil::sendSuccess($this->lng->txt('settings_saved'), true);
         $this->ctrl->redirect($this, 'appointmentList');
     }
     $this->tpl->setContent($this->form->getHTML());
 }
 protected function renderConsultationHoursTeaser($a_user_id, $a_mode, $a_group_ids)
 {
     global $lng;
     if ($a_mode == "auto") {
         $mode = $lng->txt("cont_cach_mode_automatic");
         $groups = null;
     } else {
         $mode = $lng->txt("cont_cach_mode_manual");
         include_once "Services/Calendar/classes/ConsultationHours/class.ilConsultationHourGroups.php";
         $groups = array();
         foreach ($a_group_ids as $grp_id) {
             $groups[] = ilConsultationHourGroups::lookupTitle($grp_id);
         }
         $groups = " (" . implode(", ", $groups) . ")";
     }
     $lng->loadLanguageModule("dateplaner");
     return "<div style=\"margin:5px\">" . $lng->txt("app_consultation_hours") . ": \"" . $mode . "\"" . $groups . "</div>";
 }
 /**
  * Init consultation hours form
  *
  * @param bool $a_insert
  * @return ilPropertyFormGUI
  */
 protected function initForm($a_insert = false)
 {
     global $ilCtrl, $ilUser, $lng;
     include_once "./Services/Form/classes/class.ilPropertyFormGUI.php";
     $form = new ilPropertyFormGUI();
     $form->setFormAction($ilCtrl->getFormAction($this));
     if ($a_insert) {
         $form->setTitle($this->lng->txt("cont_insert_consultation_hours"));
     } else {
         $form->setTitle($this->lng->txt("cont_update_consultation_hours"));
     }
     $mode = new ilRadioGroupInputGUI($this->lng->txt("cont_cach_mode"), "mode");
     $mode->setRequired(true);
     $form->addItem($mode);
     $opt_auto = new ilRadioOption($this->lng->txt("cont_cach_mode_automatic"), "auto");
     $opt_auto->setInfo($this->lng->txt("cont_cach_mode_automatic_info"));
     $mode->addOption($opt_auto);
     $opt_manual = new ilRadioOption($this->lng->txt("cont_cach_mode_manual"), "manual");
     $opt_manual->setInfo($this->lng->txt("cont_cach_mode_manual_info"));
     $mode->addOption($opt_manual);
     if (!$this->getPageConfig()->getEnablePCType("PlaceHolder")) {
         include_once "Services/Calendar/classes/ConsultationHours/class.ilConsultationHourGroups.php";
         $grp_ids = ilConsultationHourGroups::getGroupsOfUser($ilUser->getId());
         if (sizeof($grp_ids)) {
             $this->lng->loadLanguageModule("dateplaner");
             $groups = new ilCheckboxGroupInputGUI($this->lng->txt("cal_ch_app_grp"), "grp");
             $groups->setRequired(true);
             $opt_manual->addSubItem($groups);
             foreach ($grp_ids as $grp_obj) {
                 $groups->addOption(new ilCheckboxOption($grp_obj->getTitle(), $grp_obj->getGroupId()));
             }
         } else {
             $opt_manual->setDisabled(true);
         }
     } else {
         $opt_manual->setDisabled(true);
     }
     if ($a_insert) {
         $mode->setValue("auto");
         $form->addCommandButton("create_consultation_hours", $this->lng->txt("select"));
         $form->addCommandButton("cancelCreate", $this->lng->txt("cancel"));
     } else {
         // set values
         $grp_ids = $this->content_obj->getGroupIds();
         if (sizeof($grp_ids)) {
             $mode->setValue("manual");
             $groups->setValue($grp_ids);
         } else {
             $mode->setValue("auto");
         }
         $form->addCommandButton("update", $this->lng->txt("select"));
         $form->addCommandButton("cancelUpdate", $this->lng->txt("cancel"));
     }
     return $form;
 }
Пример #4
0
 protected function renderConsultationHoursTeaser($a_user_id, $a_mode, $a_group_ids)
 {
     // not used
     // $user_id = $this->getPageContentUserId($a_user_id);
     if ($a_mode == "auto") {
         $mode = $this->lng->txt("cont_cach_mode_automatic");
         $groups = null;
     } else {
         $mode = $this->lng->txt("cont_cach_mode_manual");
         include_once "Services/Calendar/classes/ConsultationHours/class.ilConsultationHourGroups.php";
         $groups = array();
         foreach ($a_group_ids as $grp_id) {
             $groups[] = ilConsultationHourGroups::lookupTitle($grp_id);
         }
         $groups = " (" . implode(", ", $groups) . ")";
     }
     $this->lng->loadLanguageModule("dateplaner");
     return $this->renderTeaser("consultation_hours", $this->lng->txt("app_consultation_hours"), $mode . $groups);
 }
Пример #5
0
 /**
  * Check if a calendar appointment is bookable for a specific user
  * @param type $a_cal_entry_id
  * @param type $a_user_id
  * @return bool
  */
 public function isAppointmentBookableForUser($a_app_id, $a_user_id)
 {
     // #12025
     if ($a_user_id == ANONYMOUS_USER_ID) {
         return false;
     }
     // Check max bookings
     if ($this->getNumberOfBookings() <= $this->getCurrentNumberOfBookings($a_app_id)) {
         #$GLOBALS['ilLog']->write(__METHOD__.': Number of bookings exceeded');
         return false;
     }
     // Check deadline
     $dead_limit = new ilDateTime(time(), IL_CAL_UNIX);
     $dead_limit->increment(IL_CAL_HOUR, $this->getDeadlineHours());
     include_once 'Services/Calendar/classes/class.ilCalendarEntry.php';
     $entry = new ilCalendarEntry($a_app_id);
     if (ilDateTime::_after($dead_limit, $entry->getStart())) {
         #$GLOBALS['ilLog']->write(__METHOD__.': Deadline reached');
         return false;
     }
     // Check group restrictions
     if (!$this->getBookingGroup()) {
         #$GLOBALS['ilLog']->write(__METHOD__.': No booking group');
         return true;
     }
     include_once './Services/Calendar/classes/ConsultationHours/class.ilConsultationHourAppointments.php';
     $group_apps = ilConsultationHourAppointments::getAppointmentIdsByGroup($this->getObjId(), $this->getBookingGroup());
     // Number of bookings in group
     $bookings = self::lookupBookingsOfUser($group_apps, $a_user_id);
     include_once './Services/Calendar/classes/ConsultationHours/class.ilConsultationHourGroups.php';
     #$GLOBALS['ilLog']->write(__METHOD__.': '.ilConsultationHourGroups::lookupMaxBookings($this->getBookingGroup()));
     if (count($bookings) >= ilConsultationHourGroups::lookupMaxBookings($this->getBookingGroup())) {
         #$GLOBALS['ilLog']->write(__METHOD__.': Personal booking limit reached');
         return false;
     }
     #$GLOBALS['ilLog']->write(__METHOD__.': Is bookable!');
     return true;
 }