/** * 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()); }
/** * 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 $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 = $this->form->getInput('tgt'); if ($tgt) { // if value was not changed, we already have an object id if ($tgt != $entry->getTargetObjId()) { $obj_id = $ilObjDataCache->lookupObjId($tgt); if (!$obj_id) { ilUtil::sendFailure($this->lng->txt('cal_ch_unknown_repository_object'), true); $this->edit(); return; } $booking->setTargetObjId($obj_id); } else { $booking->setTargetObjId($tgt); } } $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()); }
public function insertBookingAppointment($a_insertedId, $a_booking_values, $a_from = NULL, $a_to = NULL) { //create appointment first if ($a_from == NULL || $a_to == NULL) { $a_from = $a_booking_values['from']['date'] . " " . $a_booking_values['from']['time']; $a_to = $a_booking_values['to']['date'] . " " . $a_booking_values['to']['time']; } $time_start = new ilDateTime($a_from, 1); $time_end = new ilDateTime($a_to, 1); $title = $a_booking_values['subject']; $room_name = $this->ilRoomSharingDatabase->getRoomName($a_booking_values['room']); $cal_cat_id = $a_booking_values['cal_id']; //use original ilCalendarEntry and let ILIAS do the work $app = new ilCalendarEntry(); $app->setStart($time_start); $app->setEnd($time_end); $app->setFullday(false); $app->setTitle($title); $app->setDescription($a_booking_values['comment']); $app->setAutoGenerated(true); $app->enableNotification(false); $app->setLocation($room_name); $app->validate(); $app->save(); $ass = new ilCalendarCategoryAssignments($app->getEntryId()); $ass->addAssignment($cal_cat_id); //update bookings-table afterwards $this->ilDB->manipulate('UPDATE ' . dbc::BOOKINGS_TABLE . ' SET calendar_entry_id = ' . $this->ilDB->quote($app->getEntryId(), 'integer') . ' WHERE id = ' . $this->ilDB->quote($a_insertedId, 'integer') . ' AND pool_id =' . $this->ilDB->quote($this->pool_id, 'integer')); }
/** * Create appointments * * @access public * @param * @return * @static */ public static function createAppointments($a_obj, $a_appointments) { global $ilLog; include_once './Services/Calendar/classes/class.ilCalendarEntry.php'; include_once './Services/Calendar/classes/class.ilCalendarCategoryAssignments.php'; include_once './Services/Calendar/classes/class.ilCalendarCategories.php'; if (!($cat_id = ilCalendarCategories::_lookupCategoryIdByObjId($a_obj->getId()))) { $ilLog->write(__METHOD__ . ': Cannot find calendar category for obj_id ' . $a_obj->getId()); $cat_id = self::createCategory($a_obj); } foreach ($a_appointments as $app_templ) { $app = new ilCalendarEntry(); $app->setContextId($app_templ->getContextId()); $app->setTitle($app_templ->getTitle()); $app->setSubtitle($app_templ->getSubtitle()); $app->setDescription($app_templ->getDescription()); $app->setFurtherInformations($app_templ->getInformation()); $app->setLocation($app_templ->getLocation()); $app->setStart($app_templ->getStart()); $app->setEnd($app_templ->getEnd()); $app->setFullday($app_templ->isFullday()); $app->setAutoGenerated(true); $app->setTranslationType($app_templ->getTranslationType()); $app->save(); $ass = new ilCalendarCategoryAssignments($app->getEntryId()); $ass->addAssignment($cat_id); } }
/** * Import record * * @param * @return */ function importRecord($a_entity, $a_types, $a_rec, $a_mapping, $a_schema_version) { switch ($a_entity) { case "calendar": // please note: we currently only support private user calendars to // be imported if ($a_rec["Type"] == 1) { $usr_id = $a_mapping->getMapping("Services/User", "usr", $a_rec["ObjId"]); if ($usr_id > 0 && ilObject::_lookupType($usr_id) == "usr") { include_once './Services/Calendar/classes/class.ilCalendarCategory.php'; $category = new ilCalendarCategory(0); $category->setTitle($a_rec["Title"]); $category->setColor($a_rec["Color"]); $category->setType(ilCalendarCategory::TYPE_USR); $category->setObjId($usr_id); $category->add(); $a_mapping->addMapping("Services/Calendar", "calendar", $a_rec["CatId"], $category->getCategoryID()); } } break; case "cal_entry": // please note: we currently only support private user calendars to // be imported if ((int) $a_rec["ContextId"] == 0) { include_once './Services/Calendar/classes/class.ilCalendarEntry.php'; $entry = new ilCalendarEntry(0); $entry->setTitle($a_rec["Title"]); $entry->setSubtitle($a_rec["Subtitle"]); $entry->setDescription($a_rec["Description"]); $entry->setLocation($a_rec["Location"]); $entry->setFullday($a_rec["Fullday"]); if ($a_rec["Starta"] != "") { $entry->setStart(new ilDateTime($a_rec["Starta"], IL_CAL_DATETIME, 'UTC')); } if ($a_rec["Enda"] != "") { $entry->setEnd(new ilDateTime($a_rec["Enda"], IL_CAL_DATETIME, 'UTC')); } $entry->setFurtherInformations($a_rec["Informations"]); $entry->setAutoGenerated($a_rec["AutoGenerated"]); $entry->setContextId($a_rec["ContextId"]); $entry->setMilestone($a_rec["Milestone"]); $entry->setCompletion($a_rec["Completion"]); $entry->setTranslationType($a_rec["TranslationType"]); $entry->enableNotification($a_rec["Notification"]); $entry->save(); $a_mapping->addMapping("Services/Calendar", "cal_entry", $a_rec["Id"], $entry->getEntryId()); } break; case "cal_assignment": $cat_id = $a_mapping->getMapping("Services/Calendar", "calendar", $a_rec["CatId"]); $entry_id = $a_mapping->getMapping("Services/Calendar", "cal_entry", $a_rec["EntryId"]); if ($cat_id > 0 && $entry_id > 0) { include_once './Services/Calendar/classes/class.ilCalendarCategoryAssignments.php'; $ass = new ilCalendarCategoryAssignments($entry_id); $ass->addAssignment($cat_id); } break; case "recurrence_rule": $entry_id = $a_mapping->getMapping("Services/Calendar", "cal_entry", $a_rec["EntryId"]); if ($entry_id > 0) { include_once './Services/Calendar/classes/class.ilCalendarRecurrence.php'; $rec = new ilCalendarRecurrence(); $rec->setEntryId($entry_id); $rec->setRecurrence($a_rec["CalRecurrence"]); $rec->setFrequenceType($a_rec["FreqType"]); if ($a_rec["FreqUntilDate"] != "") { $rec->setFrequenceUntilDate(new ilDateTime($a_rec["FreqUntilDate"], IL_CAL_DATETIME)); } $rec->setFrequenceUntilCount($a_rec["FreqUntilCount"]); $rec->setInterval($a_rec["Interval"]); $rec->setBYDAY($a_rec["Byday"]); $rec->setBYWEEKNO($a_rec["Byweekno"]); $rec->setBYMONTH($a_rec["Bymonth"]); $rec->setBYMONTHDAY($a_rec["Bymonthday"]); $rec->setBYYEARDAY($a_rec["Byyearday"]); $rec->setBYSETPOS($a_rec["Bysetpos"]); $rec->setWeekstart($a_rec["Weekstart"]); $rec->save(); $a_mapping->addMapping("Services/Calendar", "recurrence_rule", $a_rec["RuleId"], $rec->getRecurrenceId()); } break; } }
/** * write a new event * * @access protected */ protected function writeEvent() { $entry = new ilCalendarEntry(); // Search for summary foreach ($this->getContainer()->getItemsByName('SUMMARY', false) as $item) { if (is_a($item, 'ilICalProperty')) { $entry->setTitle($this->purgeString($item->getValue())); break; } } // Search description foreach ($this->getContainer()->getItemsByName('DESCRIPTION', false) as $item) { if (is_a($item, 'ilICalProperty')) { $entry->setDescription($this->purgeString($item->getValue())); break; } } // Search location foreach ($this->getContainer()->getItemsByName('LOCATION', false) as $item) { if (is_a($item, 'ilICalProperty')) { $entry->setLocation($this->purgeString($item->getValue())); break; } } foreach ($this->getContainer()->getItemsByName('DTSTART') as $start) { $fullday = false; foreach ($start->getItemsByName('VALUE') as $type) { if ($type->getValue() == 'DATE') { $fullday = true; } } $start_tz = $this->default_timezone; foreach ($start->getItemsByName('TZID') as $param) { $start_tz = $this->getTZ($param->getValue()); } if ($fullday) { $start = new ilDate($start->getValue(), IL_CAL_DATE); } else { $start = new ilDateTime($start->getValue(), IL_CAL_DATETIME, $start_tz->getIdentifier()); } $entry->setStart($start); $entry->setFullday($fullday); } foreach ($this->getContainer()->getItemsByName('DTEND') as $end) { $fullday = false; foreach ($end->getItemsByName('VALUE') as $type) { if ($type->getValue() == 'DATE') { $fullday = true; } } $end_tz = $this->default_timezone; foreach ($end->getItemsByName('TZID') as $param) { $end_tz = $this->getTZ($param->getValue()); } if ($fullday) { $end = new ilDate($end->getValue(), IL_CAL_DATE); $end->increment(IL_CAL_DAY, -1); } else { $end = new ilDateTime($end->getValue(), IL_CAL_DATETIME, $end_tz->getIdentifier()); } $entry->setEnd($end); $entry->setFullday($fullday); } // save calendar event if ($this->category->getLocationType() == ilCalendarCategory::LTYPE_REMOTE) { $entry->setAutoGenerated(true); } $entry->save(); include_once './Services/Calendar/classes/class.ilCalendarCategoryAssignments.php'; $ass = new ilCalendarCategoryAssignments($entry->getEntryId()); $ass->addAssignment($this->category->getCategoryID()); // Recurrences foreach ($this->getContainer()->getItemsByName('RRULE') as $recurrence) { #var_dump("<pre>",$recurrence,"</pre>"); include_once './Services/Calendar/classes/class.ilCalendarRecurrence.php'; $rec = new ilCalendarRecurrence(); $rec->setEntryId($entry->getEntryId()); foreach ($recurrence->getItemsByName('FREQ') as $freq) { switch ($freq->getValue()) { case 'DAILY': case 'WEEKLY': case 'MONTHLY': case 'YEARLY': $rec->setFrequenceType((string) $freq->getValue()); break; default: $this->log->write(__METHOD__ . ': Cannot handle recurring event of type: ' . $freq->getValue()); break 3; } } foreach ($recurrence->getItemsByName('COUNT') as $value) { $rec->setFrequenceUntilCount((string) $value->getValue()); break; } foreach ($recurrence->getItemsByName('UNTIL') as $until) { $rec->setFrequenceUntilDate(new ilDate($until->getValue(), IL_CAL_DATE)); break; } foreach ($recurrence->getItemsByName('INTERVAL') as $value) { $rec->setInterval((string) $value->getValue()); break; } foreach ($recurrence->getItemsByName('BYDAY') as $value) { $rec->setBYDAY((string) $value->getValue()); break; } foreach ($recurrence->getItemsByName('BYWEEKNO') as $value) { $rec->setBYWEEKNO((string) $value->getValue()); break; } foreach ($recurrence->getItemsByName('BYMONTH') as $value) { $rec->setBYMONTH((string) $value->getValue()); break; } foreach ($recurrence->getItemsByName('BYMONTHDAY') as $value) { $rec->setBYMONTHDAY((string) $value->getValue()); break; } foreach ($recurrence->getItemsByName('BYYEARDAY') as $value) { $rec->setBYYEARDAY((string) $value->getValue()); break; } foreach ($recurrence->getItemsByName('BYSETPOS') as $value) { $rec->setBYSETPOS((string) $value->getValue()); break; } foreach ($recurrence->getItemsByName('WKST') as $value) { $rec->setWeekstart((string) $value->getValue()); break; } $rec->save(); } }