/** * Lookup next booking * @param ilDate $start * @param ilDate $end * @param <type> $group_id * @return array */ public static function lookupNextBooking(ilDateTime $start, ilDateTime $end, $group_id) { try { $con = new ilViteroBookingSoapConnector(); $bookings = $con->getByGroupAndDate($group_id, $start, $end); } catch (Exception $e) { $GLOBALS['ilLog']->write(__METHOD__ . ': Vitero connection failed with message: ' . $e->getMessage()); return NULL; } $bookings_arr = array(); if (is_object($bookings->booking)) { $bookings_arr = array($bookings->booking); } elseif (is_array($bookings->booking)) { $bookings_arr = $bookings->booking; } include_once './Services/Calendar/classes/class.ilDateList.php'; $next_booking['start'] = NULL; foreach ($bookings_arr as $booking) { // Calculate duration $fstart = ilViteroUtils::parseSoapDate($booking->start); $fend = ilViteroUtils::parseSoapDate($booking->end); $duration = $fend->get(IL_CAL_UNIX) - $fstart->get(IL_CAL_UNIX); $buffer_start = $booking->startbuffer; $buffer_end = $booking->endbuffer; $apps = self::calculateBookingAppointments($start, $end, $booking); foreach ($apps as $app) { if ($next_booking['start'] instanceof ilDateTime) { if (ilDateTime::_before($app, $next_booking['start'])) { $next_booking['start'] = $app; $next_booking['open'] = clone $next_booking['start']; $next_booking['open']->increment(ilDateTime::MINUTE, $buffer_start * -1); $next_booking['end'] = clone $next_booking['start']; $next_booking['end']->setDate($next_booking->get(IL_CAL_UNIX) + $duration, IL_CAL_UNIX); $next_booking['closed'] = clone $next_booking['end']; $next_booking['closed']->increment(ilDateTime::MINUTE, $buffer_end); $next_booking['id'] = $booking->bookingid; } } else { $next_booking['start'] = $app; $next_booking['open'] = clone $next_booking['start']; $next_booking['open']->increment(ilDateTime::MINUTE, $buffer_start * -1); $next_booking['end'] = clone $next_booking['start']; $next_booking['end']->setDate($next_booking['end']->get(IL_CAL_UNIX) + $duration, IL_CAL_UNIX); $next_booking['closed'] = clone $next_booking['end']; $next_booking['closed']->increment(ilDateTime::MINUTE, $buffer_end); $next_booking['id'] = $booking->bookingid; } } } return $next_booking; }
/** * Parse bookings * @param int $a_groupid * @param ilDate $start * @param ilDate $end * * throws ilViteroConnectionException */ public function parse($a_groupid, ilDateTime $start, ilDateTime $end) { $booking_list = array(); try { $con = new ilViteroBookingSoapConnector(); $bookings = $con->getByGroupAndDate($a_groupid, $start, $end); } catch (Exception $e) { throw $e; } $booking_arr = array(); if (is_object($bookings->booking)) { $booking_arr = array($bookings->booking); } elseif (is_array($bookings->booking)) { $booking_arr = $bookings->booking; } $counter = 0; foreach ($booking_arr as $booking) { $fstart = ilViteroUtils::parseSoapDate($booking->start); $fend = ilViteroUtils::parseSoapDate($booking->end); $duration = $fend->get(IL_CAL_UNIX) - $fstart->get(IL_CAL_UNIX); foreach (ilViteroUtils::calculateBookingAppointments($start, $end, $booking) as $dl) { $booking_list[$counter]['rec'] = $booking->repetitionpattern; $booking_list[$counter]['id'] = $booking->bookingid; $booking_list[$counter]['start'] = $dl; $booking_list[$counter]['startt'] = $dl->get(IL_CAL_UNIX); $bend = clone $dl; $bend->setDate($dl->get(IL_CAL_UNIX) + $duration, IL_CAL_UNIX); $booking_list[$counter]['end'] = $bend; if ($booking->cafe) { $booking_list[$counter]['start'] = new ilDate($booking_list[$counter]['startt'], IL_CAL_UNIX); $booking_list[$counter]['time'] = ilDatePresentation::formatDate($booking_list[$counter]['start']); } else { $booking_list[$counter]['time'] = ilDatePresentation::formatPeriod($booking_list[$counter]['start'], $booking_list[$counter]['end']); } $booking_list[$counter]['duration'] = ilFormat::_secondsToString($booking_list[$counter]['end']->get(IL_CAL_UNIX) - $booking_list[$counter]['start']->get(IL_CAL_UNIX), false); if ($booking->repetitionpattern) { $repend = ilViteroUtils::parseSoapDate($booking->repetitionenddate); $booking_list[$counter]['ends'] = ilDatePresentation::formatDate(new ilDate($repend->get(IL_CAL_UNIX), IL_CAL_UNIX)); } $counter++; } } $this->setMaxCount(count($booking_list)); $this->setData($booking_list); }
public static function handleDeletedGroups() { global $ilDB; $query = 'SELECT child, obd.obj_id FROM tree ' . 'JOIN object_reference obr ON child = ref_id ' . 'JOIN object_data obd ON obr.obj_id = obd.obj_id ' . 'WHERE type = ' . $ilDB->quote('xvit', 'text') . ' ' . 'AND tree < ' . $ilDB->quote(0, 'integer'); $res = $ilDB->query($query); while ($row = $res->fetchRow(DB_FETCHMODE_OBJECT)) { if (!ilObject::_hasUntrashedReference($row->obj_id)) { try { $vgroup_id = ilObjVitero::lookupVGroupId($row->obj_id); if (!$vgroup_id) { continue; } $start = new ilDate(time(), IL_CAL_UNIX); $end = clone $start; $start->increment(IL_CAL_YEAR, -2); $end->increment(IL_CAL_YEAR, 2); $booking_service = new ilViteroBookingSoapConnector(); $books = $booking_service->getByGroupAndDate($vgroup_id, $start, $end); if (is_object($books->booking)) { try { $booking_service->deleteBooking($books->booking->bookingid); } catch (ilViteroConnectorException $e) { $GLOBALS['ilLog']->write(__METHOD__ . ': Deleting deprecated booking failed with message: ' . $e->getMessage()); } } if (is_array($books->booking)) { foreach ((array) $books->booking as $book) { try { $booking_service->deleteBooking($book->bookingid); } catch (ilViteroConnectorException $e) { $GLOBALS['ilLog']->write(__METHOD__ . ': Deleting deprecated booking failed with message: ' . $e->getMessage()); } } } } catch (ilViteroConnectorException $e) { $GLOBALS['ilLog']->write(__METHOD__ . ': Cannot read bookings of group "' . $vgroup_id . '": ' . $e->getMessage()); } } // Delete group try { $groups = new ilViteroGroupSoapConnector(); $groupDefinition = new ilViteroGroupSoap(); $groupDefinition->groupid = $vgroup_id; $groups->delete($groupDefinition); // Update vgroup id $query = 'UPDATE rep_robj_xvit_data ' . 'SET vgroup_id = 0 ' . 'WHERE obj_id = ' . $ilDB->quote($row->obj_id, 'integer'); $ilDB->manipulate($query); } catch (ilViteroConnectorException $e) { $GLOBALS['ilLog']->write(__METHOD__ . ': Delete group failed: "' . $vgroup_id . '": ' . $e->getMessage()); } } }