diff options
Diffstat (limited to 'event-calendar.php')
| -rw-r--r-- | event-calendar.php | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/event-calendar.php b/event-calendar.php new file mode 100644 index 0000000..ae6fe43 --- /dev/null +++ b/event-calendar.php @@ -0,0 +1,87 @@ +<?php +/* DISPLAY - calendar + * + */ + +function communievents_event_calendar($attr) { + wp_enqueue_script('communievents-fullcalendar-de'); + wp_enqueue_style('communievents-fullcalendar'); + + $id = wp_unique_id('communievents-calendar-widget-'); + + wp_add_inline_script('communievents-fullcalendar', + "jQuery(function(\$) {" . + "\$('\#$id').fullCalendar({" . + "timeFormat:'HH:mm', " . + "events: '" .admin_url('admin-ajax.php') ."?action=communievents_calendar_data'," . + "height: 'auto'," . + "defaultView: window.innerWidth <= 600 ? 'listMonth' : 'month'," . + "windowResize: function(view) { " . + "if (window.innerWidth <= 600 && view.type != 'listMonth') { " . + "\$('\#$id').fullCalendar('changeView', 'listMonth');" . + "} else if (window.innerWidth > 600 && view.type != 'month') {" . + "\$('\#$id').fullCalendar('changeView', 'month');" . + "}" . + "}" . + "})" . + "});"); + + return "<div id='$id'></div>"; +} + +function communievents_calendar_ajax() { + global $wpdb; + + $table_name = $wpdb->prefix . 'communievents_events'; + + $tz = new DateTimeZone(CommuniApi::TIMEZONE); + + $start_dt = new DateTime($_REQUEST['start'], $tz); + $end_dt = new DateTime($_REQUEST['end'], $tz); + + $retval = array(); + $list = $wpdb->get_results($wpdb->prepare( + "SELECT * FROM $table_name WHERE official=1 AND start <= %s AND end >= %s ORDER BY start", + $end_dt->format('Y-m-d H:i:s'), $start_dt->format('Y-m-d H:i:s'))); + + if ($list) { + foreach ($list as $event) { + $start_dt = new DateTime($event->start, $tz); + $end_dt = new DateTime($event->end, $tz); + + if ($event->allday) { + // end is non-inclusive! move it into the next day + $end_dt->modify('+1 minute'); + + $start_str = $start_dt->format('Y-m-d'); + $end_str = $end_dt->format('Y-m-d'); + } else { + $start_str = $start_dt->format('Y-m-d\TH:i:s'); + $end_str = $end_dt->format('Y-m-d\TH:i:s'); + } + + $retval[] = array( + 'title' => $event->title, + 'start' => $start_str, + 'end' => $end_str, + 'url' => $event->url + ); + } + } + + wp_send_json($retval); +} + +function communievents_setup_event_calendar() { + add_shortcode('communievents-event-calendar', 'communievents_event_calendar'); + + wp_register_script('communievents-momentjs', COMMUNIEVENTS_PLUGIN_URL . "js/moment.min.js", null, true); + wp_register_script('communievents-fullcalendar', COMMUNIEVENTS_PLUGIN_URL . "js/fullcalendar.min.js", array( + 'jquery', 'communievents-momentjs'/*, 'jquery-ui-core', 'jquery-ui-widget', 'jquery-ui-button'*/), null, true); + wp_register_script('communievents-fullcalendar-de', COMMUNIEVENTS_PLUGIN_URL . 'js/fullcalendar-de.js', array('communievents-fullcalendar'), null, true); + wp_register_style('communievents-fullcalendar', COMMUNIEVENTS_PLUGIN_URL . 'css/fullcalendar.min.css'); + + add_action('wp_ajax_nopriv_communievents_calendar_data', 'communievents_calendar_ajax'); + add_action('wp_ajax_communievents_calendar_data', 'communievents_calendar_ajax'); +} + |
