function bat_api_services_events_index_calendar in Booking and Availability Management API 7.2
Retrieve a list of events to use with Fullcalendar scheduler.
Parameters
string $unit_ids:
string $unit_types:
string $start_date:
string $end_date:
string $event_types:
bool $background:
1 string reference to 'bat_api_services_events_index_calendar'
- bat_api_services_resources in ./
bat_api.module - Implements hook_services_resources().
File
- ./
bat_api.module, line 953 - API access to booking data for BAT.
Code
function bat_api_services_events_index_calendar($unit_ids, $unit_types, $start_date, $end_date, $event_types, $background) {
if ($unit_types == 'all') {
$unit_types = array();
foreach (bat_unit_get_types() as $type => $info) {
$unit_types[] = $type;
}
}
else {
$unit_types = array_filter(explode(',', $unit_types));
}
if ($event_types == 'all') {
$types = array();
foreach (bat_event_get_types() as $type => $info) {
$types[] = $type;
}
}
else {
$types = array_filter(explode(',', $event_types));
}
$events_json = array();
foreach ($types as $type) {
// Check if user has permission to view calendar data for this event type.
if (!user_access('view calendar data for any ' . $type . ' event')) {
continue;
}
// Get the event type definition from Drupal.
$bat_event_type = bat_event_type_load($type);
$target_entity_type = $bat_event_type->target_entity_type;
$controller = entity_get_controller($target_entity_type);
// For each type of event create a state store and an event store.
$event_store = new DrupalDBStore($type, DrupalDBStore::BAT_EVENT, bat_get_db_prefix());
$start_date_object = new DateTime($start_date);
$end_date_object = new DateTime($end_date);
$today = new DateTime();
if (!user_access('view past event information') && $today > $start_date_object) {
if ($today > $end_date_object) {
$return->events = array();
return $return;
}
$start_date_object = $today;
}
$ids = array_filter(explode(',', $unit_ids));
foreach ($unit_types as $unit_type) {
$entities = $controller
->getReferencedIds($unit_type, $ids);
$childrens = array();
// Create an array of unit objects - the default value is set to 0 since we want
// to know if the value in the database is actually 0. This will allow us to identify
// which events are represented by events in the database (i.e. have a value different to 0)
$units = array();
foreach ($entities as $entity) {
$units[] = new Unit($entity['id'], 0);
}
if (!empty($units)) {
$event_calendar = new Calendar($units, $event_store);
$event_ids = $event_calendar
->getEvents($start_date_object, $end_date_object);
// @TODO - this is an undeclared dependency of bat_event_ui
if ($bat_event_type->fixed_event_states) {
$event_formatter = new FullCalendarFixedStateEventFormatter($bat_event_type, $background);
}
else {
$event_formatter = new FullCalendarOpenStateEventFormatter($bat_event_type, $background);
}
foreach ($event_ids as $unit_id => $unit_events) {
foreach ($unit_events as $key => $event) {
$events_json[] = array(
'id' => 'U' . $unit_id . 'E' . $key,
'bat_id' => $event
->getValue(),
'resourceId' => 'S' . $unit_id,
) + $event
->toJson($event_formatter);
}
}
}
}
}
$events_json = _bat_api_merge_non_blocking_events($events_json);
$context = array(
'unit_ids' => $unit_ids,
'unit_types' => $unit_types,
'start_date' => $start_date_object,
'end_date' => $end_date_object,
'event_types' => $event_types,
'background' => $background,
);
drupal_alter('bat_api_events_index_calendar', $events_json, $context);
return array_values($events_json);
}