/** * Formats a date string in the format 'YYYY-MM-DD H:i:s' format or even * relative strings like 'today' into a specified format. * * @uses eo_format_datetime() * @since 1.2.0 * @link https://php.net/manual/en/function.date.php PHP Date * * @param string $dateString The date as a string * @param string $format How to format the date. DATETIMEOBJ for datetime object. * @return string|dateTime The formatted date */ function eo_format_date($dateString = '', $format = 'd-m-Y') { if ($format != '' && $dateString != '') { $datetime = new DateTime($dateString, eo_get_blog_timezone()); $formated = eo_format_datetime($datetime, $format); return $formated; } return false; }
/** * Ajax response for the admin full calendar. * * This gets events and generates summaries for events to be displayed. * in the admin 'calendar view'. * Applies 'eventorganiser_admin_cal_summary' to event summary * Applies eventorganiser_admin_calendar to the event array * *@since 1.0 *@access private *@ignore */ function eventorganiser_admin_calendar() { //request $request = array('event_end_after' => $_GET['start'], 'event_start_before' => $_GET['end']); //Presets $presets = array('posts_per_page' => -1, 'post_type' => 'event', 'group_events_by' => '', 'perm' => 'readable'); $calendar = get_transient('eo_full_calendar_admin'); $key = $_GET['start'] . '--' . $_GET['end'] . 'u=' . get_current_user_id(); if ((!defined('WP_DEBUG') || !WP_DEBUG) && $calendar && is_array($calendar) && isset($calendar[$key])) { echo json_encode($calendar[$key]); exit; } //Create query $query_array = array_merge($presets, $request); $query = new WP_Query($query_array); //Retrieve events $query->get_posts(); $eventsarray = array(); //Blog timezone $tz = eo_get_blog_timezone(); //Loop through events global $post; if ($query->have_posts()) { while ($query->have_posts()) { $query->the_post(); $event = array(); $colour = ''; //Get title, append status if applicable $title = get_the_title(); if (!empty($post->post_password)) { $title .= ' - ' . __('Protected'); } elseif ($post->post_status == 'private') { $title .= ' - ' . __('Private'); } elseif ($post->post_status == 'draft') { $title .= ' - ' . __('Draft'); } $event['title'] = html_entity_decode($title, ENT_QUOTES, 'UTF-8'); $event['event_id'] = $post->ID; $event['occurrence_id'] = $post->occurrence_id; $schedule = eo_get_event_schedule($post->ID); //Check if all day, set format accordingly if ($schedule['all_day']) { $event['allDay'] = true; $format = get_option('date_format'); } else { $event['allDay'] = false; $format = get_option('date_format') . ' ' . get_option('time_format'); } //Get author (or organiser) $organiser = get_userdata($post->post_author)->display_name; //Get Event Start and End date, set timezone to the blog's timzone $event_start = new DateTime($post->StartDate . ' ' . $post->StartTime, $tz); $event_end = new DateTime($post->EndDate . ' ' . $post->FinishTime, $tz); $event['start'] = $event_start->format('Y-m-d\\TH:i:s\\Z'); $event['end'] = $event_end->format('Y-m-d\\TH:i:s\\Z'); //Produce summary of event $summary = "<table class='form-table' >" . "<tr><th> " . __('Start', 'eventorganiser') . ": </th><td> " . eo_format_datetime($event_start, $format) . "</td></tr>" . "<tr><th> " . __('End', 'eventorganiser') . ": </th><td> " . eo_format_datetime($event_end, $format) . "</td></tr>"; if (eo_is_multi_event_organiser()) { $summary .= "<tr><th> " . __('Organiser', 'eventorganiser') . ": </th><td>" . $organiser . "</td></tr>"; } $event['className'] = array('event'); $now = new DateTime(null, $tz); if ($event_start <= $now) { $event['className'][] = 'past-event'; } //Include venue if this is set $venue = eo_get_venue($post->ID); if ($venue && !is_wp_error($venue)) { $summary .= "<tr><th>" . __('Where', 'eventorganiser') . ": </th><td>" . eo_get_venue_name($venue) . "</td></tr>"; $event['className'][] = 'venue-' . eo_get_venue_slug($post->ID); $event['venue'] = $venue; } /** * Filters the summary of the event as it appears in the admin * calendar's modal. * * **Note:** As the calendar is cached, changes made using this filter * will not take effect immediately. You can clear the cache by * updating an event. * * @package admin-calendar * @param string $summary The event (admin) summary, * @param int $event_id The event's post ID. * @param int $occurrence_id The event's occurrence ID. * @param WP_Post $post The event (post) object. */ $summary = apply_filters('eventorganiser_admin_cal_summary', $summary, $post->ID, $post->occurrence_id, $post); $summary .= "</table><p>"; //Include schedule summary if event reoccurrs if ($schedule['schedule'] != 'once') { $summary .= '<em>' . __('This event reoccurs', 'eventorganiser') . ' ' . eo_get_schedule_summary() . '</em>'; } $summary .= '</p>'; //Include edit link in summary if user has permission if (current_user_can('edit_event', $post->ID)) { $edit_link = get_edit_post_link($post->ID, ''); $summary .= "<span class='edit'><a title='Edit this item' href='" . $edit_link . "'> " . __('Edit Event', 'eventorganiser') . "</a></span>"; $event['url'] = $edit_link; } //Include a delete occurrence link in summary if user has permission if (current_user_can('delete_event', $post->ID)) { $admin_url = admin_url('edit.php'); $delete_url = add_query_arg(array('post_type' => 'event', 'page' => 'calendar', 'series' => $post->ID, 'event' => $post->occurrence_id, 'action' => 'delete_occurrence'), $admin_url); $delete_url = wp_nonce_url($delete_url, 'eventorganiser_delete_occurrence_' . $post->occurrence_id); $summary .= sprintf('<span class="delete"><a class="submitdelete" style="color:red;float:right" title="%1$s" href="%2$s">%1$s</a></span>', esc_attr__('Delete this occurrence', 'eventorganiser'), $delete_url); if ($schedule['schedule'] != 'once') { $break_url = add_query_arg(array('post_type' => 'event', 'page' => 'calendar', 'series' => $post->ID, 'event' => $post->occurrence_id, 'action' => 'break_series'), $admin_url); $break_url = wp_nonce_url($break_url, 'eventorganiser_break_series_' . $post->occurrence_id); $summary .= sprintf('<span class="break"><a class="submitbreak" style="color:red;float:right;padding-right:2em;" title="%1$s" href="%2$s">%1$s</a></span>', esc_attr__('Break this series', 'eventorganiser'), $break_url); } } //Event categories $terms = get_the_terms($post->ID, 'event-category'); $event['category'] = array(); if ($terms) { foreach ($terms as $term) { $event['category'][] = $term->slug; $event['className'][] = 'category-' . $term->slug; } } //Event colour $event['textColor'] = '#ffffff'; //default text colour if (eo_get_event_color()) { $event['color'] = eo_get_event_color(); $event['textColor'] = eo_get_event_textcolor($event['color']) ? eo_get_event_textcolor($event['color']) : '#ffffff'; } //Event summary $event['summary'] = '<div id="eo-cal-meta">' . $summary . '</div>'; //Filter the event array /** * @ignore */ $event = apply_filters('eventorganiser_admin_calendar', $event, $post); /** * Filters the event before its sent to the admin calendar. * * **Note:** As the calendar is cached, changes made using this filter * will not take effect immediately. You can clear the cache by * updating an event. * * @package admin-calendar * @param array $event The event array. * @param int $event_id The event's post ID. * @param int $occurrence_id The event's occurrence ID. */ $event = apply_filters('eventorganiser_admin_fullcalendar_event', $event, $post->ID, $post->occurrence_id); //Add event to array $eventsarray[] = $event; } } if (!$calendar || !is_array($calendar)) { $calendar = array(); } $calendar[$key] = $eventsarray; set_transient('eo_full_calendar_admin', $calendar, 60 * 60 * 24); //Echo result and exit echo json_encode($eventsarray); exit; }
/** * Sets up the event data metabox * This allows user to enter date / time, reoccurrence and venue data for the event * @ignore * @since 1.0.0 */ function _eventorganiser_details_metabox($post) { global $wp_locale; //Sets the format as php understands it, and textual. $phpFormat = eventorganiser_get_option('dateformat'); if ('d-m-Y' == $phpFormat) { $format = 'dd-mm-yyyy'; //Human form } elseif ('Y-m-d' == $phpFormat) { $format = 'yyyy-mm-dd'; //Human form } else { $format = 'mm-dd-yyyy'; //Human form } $is24 = eventorganiser_blog_is_24(); $time_format = $is24 ? 'H:i' : 'g:ia'; //Get the starting day of the week $start_day = intval(get_option('start_of_week')); $ical_days = array('SU', 'MO', 'TU', 'WE', 'TH', 'FR', 'SA'); //Retrieve event details extract(eo_get_event_schedule($post->ID)); $venues = eo_get_venues(); $venue_id = (int) eo_get_venue($post->ID); //$sche_once is used to disable date editing unless the user specifically requests it. //But a new event might be recurring (via filter), and we don't want to 'lock' new events. //See https://wordpress.org/support/topic/wrong-default-in-input-element $sche_once = $schedule == 'once' || !empty(get_current_screen()->action); if (!$sche_once) { $notices = '<strong>' . __('This is a reoccurring event', 'eventorganiser') . '</strong>. ' . __('Check to edit this event and its reoccurrences', 'eventorganiser') . ' <input type="checkbox" id="HWSEvent_rec" name="eo_input[AlterRe]" value="yes">'; } else { $notices = ''; } //Start of meta box /** * Filters the notice at the top of the event details metabox. * * @param string $notices The message text. * @param WP_Post $post The corresponding event (post). */ $notices = apply_filters('eventorganiser_event_metabox_notice', $notices, $post); if ($notices) { echo '<div class="updated below-h2"><p>' . $notices . '</p></div>'; } ?> <div class="<?php echo $sche_once ? 'onetime' : 'reoccurence'; ?> "> <p> <?php if ($is24) { printf(__('Ensure dates are entered in %1$s format and times in 24 hour format', 'eventorganiser'), '<strong>' . $format . '</strong>'); } else { printf(__('Ensure dates are entered in %1$s format and times in 12 hour format', 'eventorganiser'), '<strong>' . $format . '</strong>'); } ?> </p> <table id="eventorganiser_event_detail" class="form-table"> <tr valign="top" class="event-date"> <td class="eo-label"><?php echo __('Start Date/Time', 'eventorganiser') . ':'; ?> </td> <td> <input class="ui-widget-content ui-corner-all" name="eo_input[StartDate]" size="10" maxlength="10" id="from_date" <?php disabled(!$sche_once); ?> value="<?php echo $start->format($phpFormat); ?> "/> <?php printf('<input name="eo_input[StartTime]" class="eo_time ui-widget-content ui-corner-all" size="6" maxlength="8" id="HWSEvent_time" %s value="%s"/>', disabled(!$sche_once || $all_day, true, false), eo_format_datetime($start, $time_format)); ?> </td> </tr> <tr valign="top" class="event-date"> <td class="eo-label"><?php echo __('End Date/Time', 'eventorganiser') . ':'; ?> </td> <td> <input class="ui-widget-content ui-corner-all" name="eo_input[EndDate]" size="10" maxlength="10" id="to_date" <?php disabled(!$sche_once); ?> value="<?php echo $end->format($phpFormat); ?> "/> <?php printf('<input name="eo_input[FinishTime]" class="eo_time ui-widget-content ui-corner-all" size="6" maxlength="8" id="HWSEvent_time2" %s value="%s"/>', disabled(!$sche_once || $all_day, true, false), eo_format_datetime($end, $time_format)); ?> <label> <input type="checkbox" id="eo_allday" <?php checked($all_day); ?> name="eo_input[allday]" <?php disabled(!$sche_once); ?> value="1"/> <?php _e('All day', 'eventorganiser'); ?> </label> </td> </tr> <tr class="event-date"> <td class="eo-label"><?php _e('Reoccurence:', 'eventorganiser'); ?> </td> <td> <?php $reoccurrence_schedules = array('once' => __('once', 'eventorganiser'), 'daily' => __('daily', 'eventorganiser'), 'weekly' => __('weekly', 'eventorganiser'), 'monthly' => __('monthly', 'eventorganiser'), 'yearly' => __('yearly', 'eventorganiser'), 'custom' => __('custom', 'eventorganiser')); ?> <select id="HWSEventInput_Req" name="eo_input[schedule]"> <?php foreach ($reoccurrence_schedules as $index => $val) { ?> <option value="<?php echo $index; ?> " <?php selected($schedule, $index); ?> ><?php echo $val; ?> </option> <?php } //End foreach $allowed_reoccurs ?> </select> </td> </tr> <tr valign="top" class="event-date reocurrence_row"> <td></td> <td> <p><?php _e('Repeat every', 'eventorganiser'); ?> <input <?php disabled(!$sche_once || $all_day); ?> class="ui-widget-content ui-corner-all" name="eo_input[event_frequency]" id="HWSEvent_freq" type="number" min="1" max="365" maxlength="4" size="4" disabled="disabled" value="<?php echo $frequency; ?> " /> <span id="recpan" > </span> </p> <p id="dayofweekrepeat"> <?php _e('on', 'eventorganiser'); ?> <?php for ($i = 0; $i <= 6; $i++) { $d = ($start_day + $i) % 7; $ical_d = $ical_days[$d]; $day = $wp_locale->weekday_abbrev[$wp_locale->weekday[$d]]; $schedule_days = is_array($schedule_meta) ? $schedule_meta : array(); ?> <input type="checkbox" id="day-<?php echo $day; ?> " <?php checked(in_array($ical_d, $schedule_days), true); ?> value="<?php echo esc_attr($ical_d); ?> " class="daysofweek" name="eo_input[days][]" disabled="disabled" /> <label for="day-<?php echo $day; ?> " > <?php echo $day; ?> </label> <?php } ?> </p> <p id="dayofmonthrepeat"> <label for="bymonthday" > <input type="radio" id="bymonthday" disabled="disabled" name="eo_input[schedule_meta]" <?php checked($occurs_by, 'BYMONTHDAY'); ?> value="BYMONTHDAY=" /> <?php _e('day of month', 'eventorganiser'); ?> </label> <label for="byday" > <input type="radio" id="byday" disabled="disabled" name="eo_input[schedule_meta]" <?php checked($occurs_by != 'BYMONTHDAY', true); ?> value="BYDAY=" /> <?php _e('day of week', 'eventorganiser'); ?> </label> </p> <p class="reoccurrence_label"> <?php _e('until', 'eventorganiser'); ?> <input <?php disabled(!$sche_once || $all_day); ?> class="ui-widget-content ui-corner-all" name="eo_input[schedule_end]" id="recend" size="10" maxlength="10" disabled="disabled" value="<?php echo $until->format($phpFormat); ?> "/> </p> <p id="event_summary"> </p> </td> </tr> <tr valign="top" id="eo_occurrence_picker_row" class="event-date"> <td class="eo-label"> <?php esc_html_e('Include/Exclude occurrences', 'eventorganiser'); ?> </td> <td> <?php submit_button(__('Show dates', 'eventorganiser'), 'hide-if-no-js eo_occurrence_toggle button small', 'eo_date_toggle', false); ?> <div id="eo_occurrence_datepicker"></div> <?php //var_dump($include); if (!empty($include)) { $include_str = array_map('eo_format_datetime', $include, array_fill(0, count($include), 'Y-m-d')); $include_str = esc_textarea(sanitize_text_field(implode(',', $include_str))); } else { $include_str = ''; } ?> <textarea style="display:none;" name="eo_input[include]" id="eo_occurrence_includes"><?php echo $include_str; ?> </textarea> <?php if (!empty($exclude)) { $exclude_str = array_map('eo_format_datetime', $exclude, array_fill(0, count($exclude), 'Y-m-d')); $exclude_str = esc_textarea(sanitize_text_field(implode(',', $exclude_str))); } else { $exclude_str = ''; } ?> <textarea style="display:none;" name="eo_input[exclude]" id="eo_occurrence_excludes"><?php echo $exclude_str; ?> </textarea> </td> </tr> <?php $tax = get_taxonomy('event-venue'); if (taxonomy_exists('event-venue')) { ?> <tr valign="top" class="eo-venue-combobox-select"> <td class="eo-label"> <?php echo esc_html($tax->labels->singular_name_colon); ?> </td> <td> <select size="50" id="venue_select" name="eo_input[event-venue]"> <option><?php _e('Select a venue', 'eventorganiser'); ?> </option> <?php foreach ($venues as $venue) { ?> <option <?php selected($venue->term_id, $venue_id); ?> value="<?php echo intval($venue->term_id); ?> "><?php echo esc_html($venue->name); ?> </option> <?php } ?> </select> </td> </tr> <!-- Add New Venue --> <tr valign="top" class="eo-add-new-venue"> <td class="eo-label"><label><?php _e('Venue Name', 'eventorganiser'); ?> :</label></td> <td><input type="text" name="eo_venue[name]" id="eo_venue_name" value=""/></td> </tr> <?php $address_fields = _eventorganiser_get_venue_address_fields(); foreach ($address_fields as $key => $label) { printf('<tr valign="top" class="eo-add-new-venue"> <td class="eo-label"><label>%1$s:</label></td> <td><input type="text" name="eo_venue[%2$s]" class="eo_addressInput" id="eo_venue_add" value=""/></td> </tr>', $label, esc_attr(trim($key, '_'))); } ?> <tr valign="top" class="eo-add-new-venue" > <td class="eo-label"></td> <td> <a class="button eo-add-new-venue-cancel" href="#"><?php esc_html_e('Cancel', 'eventorganiser'); ?> </a> </td> </tr> <!-- Venue Map --> <tr valign="top" class="venue_row <?php if (!$venue_id) { echo 'novenue'; } ?> " > <td class="eo-label"></td> <td> <div id="eventorganiser_venue_meta" style="display:none;"> <input type="hidden" id="eo_venue_Lat" name="eo_venue[latitude]" value="<?php eo_venue_lat($venue_id); ?> " /> <input type="hidden" id="eo_venue_Lng" name="eo_venue[longtitude]" value="<?php eo_venue_lng($venue_id); ?> " /> </div> <div id="venuemap" class="ui-widget-content ui-corner-all gmap3"></div> <div class="clear"></div> </td> </tr> <?php } //endif venue's supported ?> </table> </div> <?php // create a custom nonce for submit verification later wp_nonce_field('eventorganiser_event_update_' . get_the_ID() . '_' . get_current_blog_id(), '_eononce'); }
/** * Generates widget / shortcode calendar html * * @param $month - DateTime object for first day of the month (in blog timezone) */ static function generate_output($month, $args = array()) { //Translations global $wp_locale; $today = new DateTime('now', eo_get_blog_timezone()); $key = $month->format('YM') . serialize($args) . get_locale() . $today->format('Y-m-d'); $calendar = get_transient('eo_widget_calendar'); if ((!defined('WP_DEBUG') || !WP_DEBUG) && $calendar && is_array($calendar) && isset($calendar[$key])) { return $calendar[$key]; } //Parse defaults $args['show-long'] = isset($args['show-long']) ? $args['show-long'] : false; $args['link-to-single'] = isset($args['link-to-single']) ? $args['link-to-single'] : false; //Month details $first_day_of_month = intval($month->format('N')); //0=sun,...,6=sat $days_in_month = intval($month->format('t')); // 28-31 $last_month = clone $month; $last_month->modify('last month'); $next_month = clone $month; $next_month->modify('next month'); //Retrieve the start day of the week from the options. $start_day = intval(get_option('start_of_week')); //0=sun,...,6=sat //How many blank cells before inserting dates $offset = ($first_day_of_month - $start_day + 7) % 7; //Number of weeks to show in Calendar $totalweeks = ceil(($offset + $days_in_month) / 7); //Get events for this month $start = $month->format('Y-m-d'); $end = $month->format('Y-m-t'); //Query events $required = array('numberposts' => -1, 'showrepeats' => 1); if ($args['show-long']) { $args['event_start_before'] = $end; $args['event_end_after'] = $start; } else { $args['event_start_before'] = $end; $args['event_start_after'] = $start; } $events = eo_get_events(array_merge($args, $required)); //Populate events array $calendar_events = array(); foreach ($events as $event) { if ($args['show-long']) { $start = eo_get_the_start(DATETIMEOBJ, $event->ID, null, $event->occurrence_id); $end = eo_get_the_end(DATETIMEOBJ, $event->ID, null, $event->occurrence_id); $pointer = clone $start; while ($pointer <= $end) { $date = eo_format_datetime($pointer, 'Y-m-d'); $calendar_events[$date][] = $event; $pointer->modify('+1 day'); } } else { $date = eo_get_the_start('Y-m-d', $event->ID, null, $event->occurrence_id); $calendar_events[$date][] = $event; } } $before = "<table id='wp-calendar'>"; $title = sprintf("<caption> %s </caption>", esc_html(eo_format_datetime($month, 'F Y'))); $head = "<thead><tr>"; for ($d = 0; $d <= 6; $d++) { $day = $wp_locale->get_weekday(($d + $start_day) % 7); $day_abbrev = $wp_locale->get_weekday_initial($day); $head .= sprintf("<th title='%s' scope='col'>%s</th>", esc_attr($day), esc_html($day_abbrev)); } $head .= "</tr></thead>"; $foot = sprintf("<tfoot><tr>\n\t\t\t\t\t<td id='eo-widget-prev-month' colspan='3'><a title='%s' href='%s'>« %s</a></td>\n\t\t\t\t\t<td class='pad'> </td>\n\t\t\t\t\t<td id='eo-widget-next-month' colspan='3'><a title='%s' href='%s'> %s » </a></td>\n\t\t\t\t</tr></tfoot>", esc_html__('Previous month', 'eventorganiser'), add_query_arg('eo_month', $last_month->format('Y-m')), esc_html(eo_format_datetime($last_month, 'M')), esc_html__('Next month', 'eventorganiser'), add_query_arg('eo_month', $next_month->format('Y-m')), esc_html(eo_format_datetime($next_month, 'M'))); $body = "<tbody>"; $current_date = clone $month; //Foreach week in calendar for ($w = 0; $w <= $totalweeks - 1; $w++) { $body .= "<tr>"; //For each cell in this week for ($cell = $w * 7 + 1; $cell <= ($w + 1) * 7; $cell++) { $formated_date = $current_date->format('Y-m-d'); $data = "data-eo-wc-date='{$formated_date}'"; if ($cell <= $offset) { $body .= "<td class='pad eo-before-month' colspan='1'> </td>"; } elseif ($cell - $offset > $days_in_month) { $body .= "<td class='pad eo-after-month' colspan='1'> </td>"; } else { $class = array(); if ($formated_date < $today->format('Y-m-d')) { $class[] = 'eo-past-date'; } elseif ($formated_date == $today->format('Y-m-d')) { $class[] = 'today'; } else { $class[] = 'eo-future-date'; } //Does the date have any events if (isset($calendar_events[$formated_date])) { $class[] = 'event'; $events = $calendar_events[$formated_date]; if ($events && count($events) == 1 && $args['link-to-single']) { $only_event = $events[0]; $link = get_permalink($only_event->ID); } else { $link = eo_get_event_archive_link($current_date->format('Y'), $current_date->format('m'), $current_date->format('d')); } $link = esc_url($link); /** * Filters the the link of a date on the events widget calendar * @param string $link The link * @param datetime $current_date The date being filtered * @param array $events Array of events starting on this day */ $link = apply_filters('eventorganiser_widget_calendar_date_link', $link, $current_date, $events); foreach ($events as $event) { $class = array_merge($class, eo_get_event_classes($event->ID, $event->occurrence_id)); } $class = array_unique(array_filter($class)); $classes = implode(' ', $class); $titles = implode(', ', wp_list_pluck($events, 'post_title')); $body .= sprintf("<td {$data} class='%s'> <a title='%s' href='%s'> %s </a></td>", esc_attr($classes), esc_attr($titles), $link, $cell - $offset); } else { $classes = implode(' ', $class); $body .= sprintf("<td {$data} class='%s'> %s </td>", esc_attr($classes), $cell - $offset); } //Proceed to next day $current_date->modify('+1 day'); } } //Endfor each day in week $body .= "</tr>"; } //End for each week $body .= "</tbody>"; $after = "</table>"; if (!$calendar || !is_array($calendar)) { $calendar = array(); } $calendar[$key] = $before . $title . $head . $foot . $body . $after; set_transient('eo_widget_calendar', $calendar, 60 * 60 * 24); return $calendar[$key]; }
/** * Returns formatted date of an event archive. * * Returns the formatted ate of an event archive. E.g. for date archives, returns that date, * for year archives returns 1st January of that year, for month archives 1st of that month. * The date is formatted according to `$format` via {@see `eo_format_datetime()`} * * <code> * <?php * if( eo_is_event_archive('day') ) * //Viewing date archive: "Events: 3rd June 2013" * echo __('Events: ','eventorganiser').' '.eo_get_event_archive_date('jS F Y'); * elseif( eo_is_event_archive('month') ) * //Viewing month archive: "Events: June 2013" * echo __('Events: ','eventorganiser').' '.eo_get_event_archive_date('F Y'); * elseif( eo_is_event_archive('year') ) * //Viewing year archive: "Events: 2013" * echo __('Events: ','eventorganiser').' '.eo_get_event_archive_date('Y'); * else * _e('Events','eventorganiser'); * ?> * </code> * @since 1.7 * @uses is_post_type_archive() * @uses eo_format_datetime() * @link https://php.net/manual/en/function.date.php Formatting dates * @param string|constant $format How to format the date, see https://php.net/manual/en/function.date.php or DATETIMEOBJ constant to return the datetime object. * @return string|dateTime The formatted date */ function eo_get_event_archive_date($format = DATETIMEOBJ) { if (!is_post_type_archive('event')) { return false; } $ondate = str_replace('/', '-', get_query_var('ondate')); if (empty($ondate)) { return false; } $parts = count(explode('-', $ondate)); if ($parts == 1 && is_numeric($ondate)) { //Numeric - interpret as year $ondate .= '-01-01'; } elseif ($parts == 2) { // 2012-01 format: interpret as month $ondate .= '-01'; } $ondate = eo_check_datetime('Y-m-d', $ondate); return eo_format_datetime($ondate, $format); }
/** * Returns a summary of the events schedule. * @since 1.0.0 * @ignore * * @param int $post_id The event (post) ID. Uses current event if empty. * @return string A summary of the events schedule. */ function eo_get_schedule_summary($post_id = 0) { global $post, $wp_locale; $ical2day = array('SU' => $wp_locale->weekday[0], 'MO' => $wp_locale->weekday[1], 'TU' => $wp_locale->weekday[2], 'WE' => $wp_locale->weekday[3], 'TH' => $wp_locale->weekday[4], 'FR' => $wp_locale->weekday[5], 'SA' => $wp_locale->weekday[6]); $nth = array(__('last', 'eventorganiser'), '', __('first', 'eventorganiser'), __('second', 'eventorganiser'), __('third', 'eventorganiser'), __('fourth', 'eventorganiser')); $reoccur = eo_get_event_schedule($post_id); if (empty($reoccur)) { return false; } $return = ''; if ($reoccur['schedule'] == 'once') { $return = __('one time only', 'eventorganiser'); } elseif ($reoccur['schedule'] == 'custom') { $return = __('custom reoccurrence', 'eventorganiser'); } else { switch ($reoccur['schedule']) { case 'daily': if ($reoccur['frequency'] == 1) { $return .= __('every day', 'eventorganiser'); } else { $return .= sprintf(__('every %d days', 'eventorganiser'), $reoccur['frequency']); } break; case 'weekly': if ($reoccur['frequency'] == 1) { $return .= __('every week on', 'eventorganiser'); } else { $return .= sprintf(__('every %d weeks on', 'eventorganiser'), $reoccur['frequency']); } foreach ($reoccur['schedule_meta'] as $ical_day) { $days[] = $ical2day[$ical_day]; } $return .= ' ' . implode(', ', $days); break; case 'monthly': if ($reoccur['frequency'] == 1) { $return .= __('every month on the', 'eventorganiser'); } else { $return .= sprintf(__('every %d months on the', 'eventorganiser'), $reoccur['frequency']); } $return .= ' '; $bymonthday = preg_match('/^BYMONTHDAY=(\\d{1,2})/', $reoccur['schedule_meta'], $matches); if ($bymonthday) { $d = intval($matches[1]); $m = intval($reoccur['schedule_start']->format('n')); $y = intval($reoccur['schedule_start']->format('Y')); $reoccur['start']->setDate($y, $m, $d); $return .= $reoccur['schedule_start']->format('jS'); } elseif ($reoccur['schedule_meta'] == 'date') { $return .= $reoccur['schedule_start']->format('jS'); } else { $byday = preg_match('/^BYDAY=(-?\\d{1,2})([a-zA-Z]{2})/', $reoccur['schedule_meta'], $matches); if ($byday) { $n = intval($matches[1]) + 1; $return .= $nth[$n] . ' ' . $ical2day[$matches[2]]; } else { $bydayOLD = preg_match('/^(-?\\d{1,2})([a-zA-Z]{2})/', $reoccur['schedule_meta'], $matchesOLD); $n = intval($matchesOLD[1]) + 1; $return .= $nth[$n] . ' ' . $ical2day[$matchesOLD[2]]; } } break; case 'yearly': if ($reoccur['frequency'] == 1) { $return .= __('every year', 'eventorganiser'); } else { $return .= sprintf(__('every %d years', 'eventorganiser'), $reoccur['frequency']); } break; } $return .= ' ' . __('until', 'eventorganiser') . ' ' . eo_format_datetime($reoccur['schedule_last'], 'M, jS Y'); } return $return; }
function eventorganiser_admin_calendar() { //request $request = array('event_end_after' => $_GET['start'], 'event_start_before' => $_GET['end']); //Presets $presets = array('posts_per_page' => -1, 'post_type' => 'event', 'group_events_by' => '', 'perm' => 'readable'); //Create query $query_array = array_merge($presets, $request); $query = new WP_Query($query_array); //Retrieve events $query->get_posts(); $eventsarray = array(); //Blog timezone $tz = eo_get_blog_timezone(); //Loop through events global $post; if ($query->have_posts()) { while ($query->have_posts()) { $query->the_post(); $event = array(); $colour = ''; //Get title, append status if applicable $title = get_the_title(); if (!empty($post->post_password)) { $title .= ' - ' . __('Protected'); } elseif ($post->post_status == 'private') { $title .= ' - ' . __('Private'); } elseif ($post->post_status == 'draft') { $title .= ' - ' . __('Draft'); } $event['title'] = html_entity_decode($title, ENT_QUOTES, 'UTF-8'); //Check if all day, set format accordingly if (eo_is_all_day()) { $event['allDay'] = true; $format = get_option('date_format'); } else { $event['allDay'] = false; $format = get_option('date_format') . ' ' . get_option('time_format'); } //Get author (or organiser) $organiser = get_userdata($post->post_author)->display_name; //Get Event Start and End date, set timezone to the blog's timzone $event_start = new DateTime($post->StartDate . ' ' . $post->StartTime, $tz); $event_end = new DateTime($post->EndDate . ' ' . $post->FinishTime, $tz); $event['start'] = $event_start->format('Y-m-d\\TH:i:s\\Z'); $event['end'] = $event_end->format('Y-m-d\\TH:i:s\\Z'); //Produce summary of event $summary = "<table>" . "<tr><th> " . __('Start', 'eventorganiser') . ": </th><td> " . eo_format_datetime($event_start, $format) . "</td></tr>" . "<tr><th> " . __('End', 'eventorganiser') . ": </th><td> " . eo_format_datetime($event_end, $format) . "</td></tr>" . "<tr><th> " . __('Organiser', 'eventorganiser') . ": </th><td>" . $organiser . "</td></tr>"; $event['className'] = array('event'); $now = new DateTIme(null, $tz); if ($event_start <= $now) { $event['className'][] = 'past-event'; } //Include venue if this is set $venue = eo_get_venue($post->ID); if ($venue && !is_wp_error($venue)) { $summary .= "<tr><th>" . __('Where', 'eventorganiser') . ": </th><td>" . eo_get_venue_name($venue) . "</td></tr>"; $event['className'][] = 'venue-' . eo_get_venue_slug($post->ID); $event['venue'] = $venue; } $summary = apply_filters('eventorganiser_admin_cal_summary', $summary, $post->ID, $post->event_id, $post); $summary .= "</table><p>"; //Include schedule summary if event reoccurrs if ($post->event_schedule != 'once') { $summary .= '<em>' . __('This event reoccurs', 'eventorganiser') . ' ' . eo_get_schedule_summary() . '</em>'; } $summary .= '</p>'; //Include edit link in summary if user has permission if (current_user_can('edit_event', $post->ID)) { $edit_link = get_edit_post_link($post->ID, ''); $summary .= "<span class='edit'><a title='Edit this item' href='" . $edit_link . "'> " . __('Edit Event', 'eventorganiser') . "</a></span>"; $event['url'] = $edit_link; } //Include a delete occurrence link in summary if user has permission if (current_user_can('delete_event', $post->ID)) { $admin_url = admin_url('edit.php'); $delete_url = add_query_arg(array('post_type' => 'event', 'page' => 'calendar', 'series' => $post->ID, 'event' => $post->event_id, 'action' => 'delete_occurrence'), $admin_url); $delete_url = wp_nonce_url($delete_url, 'eventorganiser_delete_occurrence_' . $post->event_id); $summary .= "<span class='delete'>\n\t\t\t\t\t<a class='submitdelete' style='color:red;float:right' title='" . __('Delete this occurrence', 'eventorganiser') . "' href='" . $delete_url . "'> " . __('Delete this occurrence', 'eventorganiser') . "</a>\n\t\t\t\t\t</span>"; if ($post->event_schedule != 'once') { $break_url = add_query_arg(array('post_type' => 'event', 'page' => 'calendar', 'series' => $post->ID, 'event' => $post->event_id, 'action' => 'break_series'), $admin_url); $break_url = wp_nonce_url($break_url, 'eventorganiser_break_series_' . $post->event_id); $summary .= "<span class='break'>\n\t\t\t\t\t\t<a class='submitbreak' style='color:red;float:right;padding-right: 2em;' title='" . __('Break this series', 'eventorganiser') . "' href='" . $break_url . "'> " . __('Break this series', 'eventorganiser') . "</a>\n\t\t\t\t\t\t</span>"; } } $terms = get_the_terms($post->ID, 'event-category'); $event['category'] = array(); if ($terms) { foreach ($terms as $term) { $event['category'][] = $term->slug; if (empty($event['color'])) { $event['color'] = isset($term->color) ? $term->color : ''; } $event['className'][] = 'category-' . $term->slug; } } $event['summary'] = $summary; //Add event to array $eventsarray[] = $event; } } //Echo result and exit echo json_encode($eventsarray); exit; }