/** * Parse Groups * @param array $groups */ public function parse(array $groups) { $rows = array(); $counter = 0; foreach ($groups as $group) { $rows[$counter]['id'] = $group->getGroupId(); $rows[$counter]['title'] = $group->getTitle(); $rows[$counter]['max_books'] = $group->getMaxAssignments(); $rows[$counter]['assigned'] = count(ilConsultationHourAppointments::getAppointmentIdsByGroup($this->user_id, $group->getGroupId(), null)); ++$counter; } $this->setData($rows); }
/** * * @param array $usr_ids * @param type $type */ public function assignUsersToGroup(array $usr_ids) { global $ilCtrl; $group_id = (int) $_REQUEST['grp_id']; $tomorrow = new ilDateTime(time(), IL_CAL_UNIX); $tomorrow->increment(IL_CAL_DAY, 1); // Get all future consultation hours include_once './Services/Calendar/classes/ConsultationHours/class.ilConsultationHourAppointments.php'; include_once './Services/Booking/classes/class.ilBookingEntry.php'; $apps = ilConsultationHourAppointments::getAppointmentIdsByGroup($this->user_id, $group_id, $tomorrow); $users = $usr_ids; $assigned_users = array(); foreach ($apps as $app) { $booking = ilBookingEntry::getInstanceByCalendarEntryId($app); foreach ($users as $user) { if ($booking->getCurrentNumberOfBookings($app) >= $booking->getNumberOfBookings()) { break; } if (!ilBookingEntry::lookupBookingsOfUser($apps, $user)) { include_once './Services/Calendar/classes/ConsultationHours/class.ilConsultationHourUtils.php'; ilConsultationHourUtils::bookAppointment($user, $app); $assigned_users[] = $user; } } } $this->sendInfoAboutUnassignedUsers(array_diff($users, $assigned_users)); $ilCtrl->redirect($this, 'bookingList'); }
/** * 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; }