Proof-of-concept alpha of a calendar for ProcessWire
The Calendar module creates a template for events as well as the four fields that the it expects in event pages.
- event start date/time
- event end date/time
- event RRULE recurrence specification
- event EXDATE recurrence exceptions
Recurring events are handled using the fruux/sabre-vobject library.
RFC 5545 RRULE and EXDATE are supported to the extent supported in the sabre-vobject library.
The ProcessCalendarAdmin module creates an admin page that uses fullcalendar present a more user friendly interface for managing events.
- Install the Calendar module
- Create parent page to hold events
- Configure the Calendar module to the right event "container"
- Set up templates
Then
- Install ProcessCalendarAdmin for calendar admin gui.
When events are returned, a recurring event may generate many occurrences, so the results from Calender::expandEvents are array(start, end, page)
// get module
$calendar = wire('modules')->getModule('Calendar');
// get upcoming events - 6 months ahead
$start = new \DateTime();
$until = new \DateTime();
$until->add(new \DateInterval('P6M'));
$events = $calendar->expandEvents($start, $until);
// render event
echo '<table>';
foreach($events as $event) {
echo '<tr>';
printf('<td>%s</td>', $event->start->format('Y-m-d H:i'));
printf('<td>%s</td>', $event->end->format('Y-m-d H:i'));
printf('<td>%s</td>', $event->event->title);
echo '</tr>';
}
echo '</table>';
simply do this in your template.
calendar-event.php:
// ajax event request !
if ($config->ajax) {
// build array to json encode
$data = array(
'id' => $page->id,
'title' => $page->get('title'),
'body' => $page->get('body'),
'start' => $start->format(DateTime::ISO8601),
'end' => $end->format(DateTime::ISO8601),
'recurs' => $page->calendar_event_rrule != '',
'linkurl' => $page->page->url
);
// encode and output
header('Content-type: application/json');
echo json_encode($data);
return;
}
// handle normal event display or something
Please note that the template and fields created when installing will not be removed when the module is uninstalled.
Tomas Lindquist Olsen - tomas.l.olsen (at) gmail.com