EventDateNumber of available spots"); // template for the table header, you can add or remove columns here if you wish define ('TABLE_END', ""); // template for the table footer define ('TABLE_ROW', "$(resource)$(duration)$(available)$(reserve_link)"); // template for the table row, each event will be listed according to this template with $(resource), $(duration), $(available) and $(reserve_link) tags replaced with the actual values define ('RESERVE_URL', "http://www.planyo.com/reserve.php?resource_id=%d&prefill=true&start_date=%s"); // URL of the reservation page for given event. This will be used in a printf function with the first parameter being resource ID (%d) and the second being the start date (%s). The default will use simple integration, you will most likely want to replace this with the URL of the planyo page on your website to use advanced integration // define ('RESERVE_URL', "http://www.yoursite.com/page-with-planyo-module.php?resource_id=%d&prefill=true&start_date=%s&mode=reserve"); // this is a commented-out sample to be used for advanced integration instead of the simple integration version above define ('RESERVE_TEXT', "Make a booking"); // text to be displayed in the booking link define ('RESOURCE_ID', NULL); // leave this as NULL if you want to display event times for all resources, or specify a resource id if you only want to display events for a single resource define ('NO_AV_TEXT', "FULL"); // text displayed when no more tickets/places are available function call_planyo_api($method, $params) { $response_raw = file_get_contents("https://www.planyo.com/rest/?api_key=".API_KEY."&method=$method"."&".$params); $response_json = json_decode($response_raw, true); if ($response_json['response_code'] == 0) return $response_json['data']; return false; } function output_time($date) { return date("g:ia", $date); } function output_date($date) { return date("F j, Y", $date); } function sort_event_list ($a, $b) { return ($a['start'] < $b['start']) ? -1 : 1; } function find_events($resource_filter = null) { $resource_list = array(); $event_list = array(); $api_data = call_planyo_api('get_all_resources', 'detail_level=1&list_published_only=true'); if ($api_data && $api_data['resources'] && count($api_data['resources']) > 0) { $resource_list = $api_data['resources']; } foreach($resource_list as $res) { $resource_id = $res['id']; if (!$resource_filter || $resource_filter == $resource_id) { $event_data = call_planyo_api('get_event_times', "resource_id=$resource_id&format=array&future_only=true&expand_recurring=true"); if ($event_data && $event_data['event_times'] && count($event_data['event_times']) > 0) { $duration_hours = $event_data['duration']; foreach($event_data['event_times'] as $e) { $event_start = $e['timestamp']; $event_list[]= array('resource_id'=>$resource_id, 'resource_name'=>$res['name'], 'start'=>$event_start, 'start_text'=>$e['text'], 'end'=>$duration_hours*3600 + $event_start, 'available'=>$e['available']); } } } } usort($event_list, 'sort_event_list'); return $event_list; } // this function optionally accepts an array of resources for which the listing should be limited (each array items should have the keys 'id' and 'name' // if nothing is passed, api function get_all_resources will be used to fetch all resources function list_events ($resource_id = null) { echo TABLE_START; $events = find_events($resource_id); if ($events && count($events) > 0) { foreach($events as $e) { $code = TABLE_ROW; if (output_date($e['start']) == output_date($e['end'])) $duration = output_date($e['start']); else $duration = output_date($e['start']).' - '.output_date($e['end']); $code = str_replace("$(duration)", $duration, $code); $code = str_replace("$(resource)", $e['resource_name'], $code); $code = str_replace("$(available)", $e['available'], $code); $code = str_replace("$(reserve_link)", ((int)$e['available'] > 0) ? "".RESERVE_TEXT."" : NO_AV_TEXT, $code); echo $code; } } echo TABLE_END; } $server_timezone = @date_default_timezone_get(); date_default_timezone_set ('UTC'); list_events(RESOURCE_ID); if ($server_timezone) date_default_timezone_set ($server_timezone); ?>