function to_object($events = array()) { if (is_array($events) && !empty($events)) { //Save event data $this->event_id = intval($events[0]['event_id']); $this->post_id = intval($events[0]['post_id']); $this->start = new DateTIme($events[0]['StartDate'] . ' ' . $events[0]['StartTime'], eo_get_blog_timezone()); $this->end = new DateTIme($events[0]['EndDate'] . ' ' . $events[0]['FinishTime'], eo_get_blog_timezone()); if (function_exists('date_diff')) { $this->duration = date_diff($this->start, $this->end); } //Work around for PHP < 5.3 $seconds = round(abs($this->start->format('U') - $this->end->format('U'))); // 86400 = 60*60*24 seconds in a normal day $days = floor($seconds / 86400); $sec_diff = $seconds - $days * 86400; $this->duration_string = '+' . $days . 'days ' . $sec_diff . ' seconds'; $this->schedule_start = new DateTime($events[0]['reoccurrence_start'], eo_get_blog_timezone()); $this->schedule_end = new DateTime($events[0]['reoccurrence_end'], eo_get_blog_timezone()); $this->allday = $events[0]['event_allday'] == 1 ? true : false; $this->venue = (int) eo_get_venue($this->post_id); $this->schedule = esc_html($events[0]['event_schedule']); if ($this->is_schedule('weekly')) { $this->meta = esc_html(implode(',', unserialize($events[0]['event_schedule_meta']))); $this->meta = explode(',', $this->meta); } if ($this->is_schedule('monthly')) { $meta = esc_attr($events[0]['event_schedule_meta']); $bymonthday = preg_match('/BYMONTHDAY=/', $meta); $byday = preg_match('/BYDAY=/', $meta); //Check for the old system first...; if ($meta == 'date') { $this->meta = 'BYMONTHDAY=' . $this->start->format('d'); } elseif (!($bymonthday || $byday)) { $this->meta = 'BYDAY=' . $meta; } else { $this->meta = $meta; } } $this->frequency = intval($events[0]['event_frequency']); $this->timezone = 'UTC'; $this->exists = true; //Save event occurrences foreach ($events as $event) { //Occurrences, array of datetime objects (start date time) in UTC Timezone $this->occurrences[$event['event_occurrence']] = new DateTIme($event['StartDate'] . ' ' . $event['StartTime'], eo_get_blog_timezone()); } } }
function eventorganiser_event_fill_columns($column_name, $id) { global $post; $series_id = empty($post->event_id) ? $id : ''; $phpFormat = 'M, j Y'; if (!eo_is_all_day($series_id)) { $phpFormat .= '\\<\\/\\b\\r\\>' . get_option('time_format'); } switch ($column_name) { case 'venue': $venue_id = eo_get_venue($post->ID); $venue_slug = eo_get_venue_slug($post->ID); if ($venue_id) { echo '<a href="' . add_query_arg('event-venue', $venue_slug) . '">' . esc_html(eo_get_venue_name($venue_id)) . '</a>'; echo '<input type="hidden" value="' . $venue_id . '"/>'; } break; case 'datestart': eo_the_start($phpFormat, $series_id); break; case 'dateend': eo_the_end($phpFormat, $series_id); break; case 'reoccurence': eo_display_reoccurence($series_id); break; case 'eventcategories': $terms = get_the_terms($post->ID, 'event-category'); if (!empty($terms)) { foreach ($terms as $term) { $post_terms[] = '<a href="' . add_query_arg('event-category', $term->slug) . '">' . esc_html(sanitize_term_field('name', $term->name, $term->term_id, 'event-category', 'display')) . '</a>'; } echo join(', ', $post_terms); } break; default: break; } // end switch }
/** * Saves the event data posted from the event metabox. * Hooked to the 'save_post' action * * @since 1.0.0 * * @param int $post_id the event post ID * @return int $post_id the event post ID */ function eventorganiser_details_save($post_id) { //make sure data came from our meta box if (!isset($_POST['_eononce']) || !wp_verify_nonce($_POST['_eononce'], 'eventorganiser_event_update_' . $post_id . '_' . get_current_blog_id())) { return; } //verify this is not an auto save routine. if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) { return; } //authentication checks if (!current_user_can('edit_event', $post_id)) { return; } //Collect raw data $raw_data = isset($_POST['eo_input']) ? $_POST['eo_input'] : array(); $raw_data = wp_parse_args($raw_data, array('StartDate' => '', 'EndDate' => '', 'StartTime' => '00:00', 'FinishTime' => '23:59', 'schedule' => 'once', 'event_frequency' => 1, 'schedule_end' => '', 'allday' => 0, 'schedule_meta' => '', 'days' => array(), 'include' => '', 'exclude' => '')); //Update venue $venue_id = !empty($raw_data['event-venue']) ? intval($raw_data['event-venue']) : null; //Maybe create a new venue if (empty($venue_id) && !empty($_POST['eo_venue']) && current_user_can('manage_venues')) { $venue = $_POST['eo_venue']; if (!empty($venue['name'])) { $new_venue = eo_insert_venue($venue['name'], $venue); if (!is_wp_error($new_venue)) { $venue_id = $new_venue['term_id']; } else { if ($new_venue->get_error_code() == 'term_exists') { $venue_id = eo_get_venue($event_id); } } } } //Set venue $r = wp_set_post_terms($post_id, array($venue_id), 'event-venue', false); //If reocurring, but not editing occurrences, can abort here, but trigger hook. if (eo_reoccurs($post_id) && (!isset($raw_data['AlterRe']) || 'yes' != $raw_data['AlterRe'])) { /** * Triggered after an event has been updated. * * @param int $post_id The ID of the event */ do_action('eventorganiser_save_event', $post_id); //Need this to update cache return; } //Check dates $date_format = eventorganiser_get_option('dateformat'); $is24 = eventorganiser_blog_is_24(); $time_format = $is24 ? 'H:i' : 'g:ia'; $datetime_format = $date_format . ' ' . $time_format; //Set times for all day events $all_day = intval($raw_data['allday']); if ($all_day) { $raw_data['StartTime'] = $is24 ? '00:00' : '12:00am'; $raw_data['FinishTime'] = $is24 ? '23:59' : '11:59pm'; } $start = eo_check_datetime($datetime_format, trim($raw_data['StartDate']) . ' ' . trim($raw_data['StartTime'])); $end = eo_check_datetime($datetime_format, trim($raw_data['EndDate']) . ' ' . trim($raw_data['FinishTime'])); $until = eo_check_datetime($datetime_format, trim($raw_data['schedule_end']) . ' ' . trim($raw_data['StartTime'])); //Collect schedule meta $schedule = $raw_data['schedule']; if ('weekly' == $schedule) { $schedule_meta = $raw_data['days']; $occurs_by = ''; } elseif ('monthly' == $schedule) { $schedule_meta = $raw_data['schedule_meta']; $occurs_by = trim($schedule_meta, '='); } else { $schedule_meta = ''; $occurs_by = ''; } //Collect include/exclude $in_ex = array(); $orig_schedule = eo_get_event_schedule($post_id); foreach (array('include', 'exclude') as $key) { $in_ex[$key] = array(); $arr = explode(',', sanitize_text_field($raw_data[$key])); if (!empty($arr)) { foreach ($arr as $date) { if ($date_obj = eo_check_datetime('Y-m-d', trim($date))) { $date_obj->setTime($start->format('H'), $start->format('i')); $in_ex[$key][] = $date_obj; } } /* see https://github.com/stephenharris/Event-Organiser/issues/260 if( $orig = array_uintersect( $orig_schedule[$key], $in_ex[$key], '_eventorganiser_compare_dates' ) ){ $in_ex[$key] = array_merge( $orig, $in_ex[$key] ); $in_ex[$key] = _eventorganiser_remove_duplicates( $in_ex[$key] ); }*/ } } $event_data = array('start' => $start, 'end' => $end, 'all_day' => $all_day, 'schedule' => $schedule, 'frequency' => (int) $raw_data['event_frequency'], 'until' => $until, 'schedule_meta' => $schedule_meta, 'occurs_by' => $occurs_by, 'include' => $in_ex['include'], 'exclude' => $in_ex['exclude']); $response = eo_update_event($post_id, $event_data); if (is_wp_error($response)) { global $EO_Errors; $code = $response->get_error_code(); $message = $response->get_error_message($code); $errors[$post_id][] = __('Event dates were not saved.', 'eventorganiser'); $errors[$post_id][] = $message; $EO_Errors->add('eo_error', $message); update_option('eo_notice', $errors); } return; }
/** *@ignore *@access private */ function eventorganiser_venue_dropdown($post_id = 0, $args) { $venues = get_terms('event-venue', array('hide_empty' => false)); $current = (int) eo_get_venue($post_id); $id = !empty($args['id']) ? 'id="' . esc_attr($args['id']) . '"' : ''; $name = !empty($args['name']) ? 'name="' . esc_attr($args['name']) . '"' : ''; ?> <select <?php echo $id . ' ' . $name; ?> > <option><?php _e("Select a venue", 'eventorganiser'); ?> </option> <?php foreach ($venues as $venue) { ?> <option <?php selected($venue->term_id, $current); ?> value="<?php echo $venue->term_id; ?> "><?php echo $venue->name; ?> </option> <?php } ?> </select><?php }
/** * Creates an ICAL file of events in the database * @since 1.0.0 * @param string filename - the name of the file to be created * @param string filetype - the type of the file ('text/calendar') */ public function export_events($filename, $filetype) { //Collect output ob_start(); // File header header('Content-Description: File Transfer'); header('Content-Disposition: attachment; filename=' . $filename); header('Content-type: text/calendar'); header("Pragma: 0"); header("Expires: 0"); ?> BEGIN:VCALENDAR VERSION:2.0 PRODID:-//<?php get_bloginfo('name'); ?> //NONSGML Events //EN CALSCALE:GREGORIAN X-WR-CALNAME:<?php echo get_bloginfo('name'); ?> - Events X-ORIGINAL-URL:<?php echo EO_Event::link_structure(); ?> X-WR-CALDESC:<?php echo get_bloginfo('name'); ?> - Events <?php // Query for events $events = eo_get_events(array('numberofposts' => -1, 'group_events_by' => 'series', 'showpastevents' => 1)); // Loop through events if ($events) { global $post; foreach ($events as $post) { //If event has no corresponding row in events table then skip it if (!isset($post->event_id) || $post->event_id == -1) { continue; } $now = new DateTime(); $dtstamp = $now->format('Ymd\\THis\\Z'); //Set up event data setup_postdata($post); $event = new EO_Event($post->ID); $start = clone $event->start; $end = clone $event->end; $created = new DateTime($post->post_date_gmt); $created_date = $created->format('Ymd\\THis\\Z'); $modified = new DateTime($post->post_modified_gmt); $modified_date = $modified->format('Ymd\\THis\\Z'); //Set up start and end date times if ($event->is_all_day()) { $format = 'Ymd'; $start_date = $start->format($format); $end->modify('+1 second'); $end_date = $end->format($format); } else { $format = 'Ymd\\THis\\Z'; $UTC_tz = new DateTimeZone('UTC'); $start->setTimezone($UTC_tz); $start_date = $start->format($format); $end->setTimezone($UTC_tz); $end_date = $end->format($format); } //Get the reoccurrence rule in ICS format $reoccurrence_rule = $event->ics_rrule(); //Generate Event status if (get_post_status($post->ID) == 'publish') { $status = 'CONFIRMED'; } else { $status = 'TENTATIVE'; } //Generate a globally unique UID: $rand = ''; $host = $_SERVER['SERVER_NAME']; $base = 'aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPrRsStTuUvVxXuUvVwWzZ1234567890'; $start = 0; $end = strlen($base) - 1; $length = 6; for ($p = 0; $p < $length; $p++) { $rand .= $base[mt_rand($start, $end)]; } $uid = $now->format('Ymd\\THiT') . microtime(true) . '-' . $rand . '-EO' . $post->ID . '@' . $host; //Output event ?> BEGIN:VEVENT UID:<?php echo $uid; ?> STATUS:<?php echo $status; ?> DTSTAMP:<?php echo $dtstamp; ?> CREATED:<?php echo $created_date; ?> LAST-MODIFIED:<?php echo $modified_date; ?> <?php if ($event->is_all_day()) { ?> DTSTART;VALUE=DATE:<?php echo $start_date; ?> DTEND;VALUE=DATE:<?php echo $end_date; } else { ?> DTSTART:<?php echo $start_date; ?> DTEND:<?php echo $end_date; } ?> <?php if ($reoccurrence_rule) { ?> RRULE:<?php echo $reoccurrence_rule; ?> <?php } ?> SUMMARY:<?php echo $this->escape_icalText(get_the_title()); ?> <?php $excerpt = get_the_excerpt(); $excerpt = apply_filters('the_excerpt_rss', $excerpt); if (!empty($excerpt)) { ?> DESCRIPTION:<?php echo html_entity_decode($this->escape_icalText($excerpt)); ?> <?php } if ($event->venue_set()) { $venue = eo_get_venue_name(eo_get_venue()); ?> LOCATION: <?php echo $this->escape_icalText($venue); ?> <?php } $author = get_the_author(); ?> ORGANIZER: <?php echo $this->escape_icalText($author); ?> END:VEVENT <?php } } ?> END:VCALENDAR <?php //Collect output and echo $eventsical = ob_get_contents(); ob_end_clean(); echo $eventsical; exit; }
<?php } ?> <?php do_action('eventorganiser_additional_event_meta'); ?> </ul> <!-- Does the event have a venue? --> <?php if (eo_get_venue()) { ?> <!-- Display map --> <div class="eo-event-venue-map"> <?php echo eo_get_venue_map(eo_get_venue(), array('width' => '100%')); ?> </div> <?php } ?> <div style="clear:both"></div> <hr> </div><!-- .entry-meta -->
function parse_template($matches) { global $post; $replacement = ''; $col = array('start' => array('date' => 'StartDate', 'time' => 'StartTime'), 'end' => array('date' => 'EndDate', 'time' => 'FinishTime'), 'schedule_start' => array('date' => 'reoccurrence_start', 'time' => 'StartTime'), 'schedule_end' => array('date' => 'reoccurrence_end', 'time' => 'FinishTime')); switch ($matches[1]) { case 'event_title': $replacement = get_the_title(); break; case 'start': case 'end': case 'schedule_start': case 'schedule_end': switch (count($matches)) { case 2: $dateFormat = get_option('date_format'); $dateTime = get_option('time_format'); break; case 3: $dateFormat = self::eo_clean_input($matches[2]); $dateTime = ''; break; case 5: $dateFormat = self::eo_clean_input($matches[3]); $dateTime = self::eo_clean_input($matches[4]); break; } if (eo_is_all_day(get_the_ID())) { $replacement = eo_format_date($post->{$col}[$matches[1]]['date'] . ' ' . $post->{$col}[$matches[1]]['time'], $dateFormat); } else { $replacement = eo_format_date($post->{$col}[$matches[1]]['date'] . ' ' . $post->{$col}[$matches[1]]['time'], $dateFormat . $dateTime); } break; case 'event_tags': $replacement = get_the_term_list(get_the_ID(), 'event-tag', '', ', ', ''); break; case 'event_cats': $replacement = get_the_term_list(get_the_ID(), 'event-category', '', ', ', ''); break; case 'event_venue': $replacement = eo_get_venue_name(); break; case 'event_venue_map': if (eo_get_venue()) { $class = isset($matches[2]) ? self::eo_clean_input($matches[2]) : ''; $class = !empty($class) ? 'class=' . $class : ''; $replacement = do_shortcode('[eo_venue_map ' . $class . ']'); } break; case 'event_venue_url': $venue_link = eo_get_venue_link(); $replacement = !is_wp_error($venue_link) ? $venue_link : ''; break; case 'event_venue_address': $address = eo_get_venue_address(); $replacement = $address['address']; break; case 'event_venue_postcode': $address = eo_get_venue_address(); $replacement = $address['postcode']; break; case 'event_venue_country': $address = eo_get_venue_address(); $replacement = $address['country']; break; case 'event_thumbnail': $size = isset($matches[2]) ? self::eo_clean_input($matches[2]) : ''; $size = !empty($size) ? $size : 'thumbnail'; $replacement = get_the_post_thumbnail(get_the_ID(), $size); break; case 'event_url': $replacement = get_permalink(); break; case 'event_custom_field': $field = $matches[2]; $meta = get_post_meta(get_the_ID(), $field); $replacement = implode($meta); break; case 'event_excerpt': //Using get_the_excerpt adds a link.... if (post_password_required($post)) { $output = __('There is no excerpt because this is a protected post.'); } else { $output = $post->post_excerpt; } $replacement = wp_trim_excerpt($output); break; case 'cat_color': $replacement = eo_event_color(); break; } return $replacement; }
$description = eventorganiser_escape_ical_text($description); if (!empty($description)) { echo eventorganiser_fold_ical_text("DESCRIPTION: {$description}") . "\r\n"; } $description = wpautop(html_entity_decode(get_the_content(), ENT_COMPAT, 'UTF-8')); $description = str_replace("\r\n", '', $description); //Remove new lines $description = str_replace("\n", '', $description); $description = eventorganiser_escape_ical_text($description); echo eventorganiser_fold_ical_text("X-ALT-DESC;FMTTYPE=text/html: {$description}") . "\r\n"; $cats = get_the_terms(get_the_ID(), 'event-category'); if ($cats && !is_wp_error($cats)) { $cat_names = wp_list_pluck($cats, 'name'); $cat_names = array_map('eventorganiser_escape_ical_text', $cat_names); echo 'CATEGORIES:' . implode(',', $cat_names) . "\r\n"; } if (eo_get_venue()) { $venue = eo_get_venue_name(eo_get_venue()); echo "LOCATION:" . eventorganiser_fold_ical_text(eventorganiser_escape_ical_text($venue)) . "\r\n"; echo "GEO:" . implode(';', eo_get_venue_latlng($venue)) . "\r\n"; } if (get_the_author_meta('ID')) { $author_name = eventorganiser_escape_ical_text(get_the_author()); $author_email = eventorganiser_escape_ical_text(get_the_author_meta('user_email')); echo eventorganiser_fold_ical_text('ORGANIZER;CN="' . $author_name . '":MAILTO:' . $author_email) . "\r\n"; } echo eventorganiser_fold_ical_text('URL;VALUE=URI:' . get_permalink()) . "\r\n"; echo "END:VEVENT\r\n"; } } echo "END:VCALENDAR\r\n";
static function parse_template($matches) { global $post; $replacement = ''; switch ($matches[1]) { case 'event_title': $replacement = get_the_title(); break; case 'start': case 'end': case 'schedule_start': case 'schedule_last': case 'schedule_end': switch (count($matches)) { case 2: $dateFormat = get_option('date_format'); $dateTime = get_option('time_format'); break; case 3: $dateFormat = self::eo_clean_input($matches[2]); $dateTime = ''; break; case 5: $dateFormat = self::eo_clean_input($matches[3]); $dateTime = self::eo_clean_input($matches[4]); break; } $format = eo_is_all_day(get_the_ID()) ? $dateFormat : $dateFormat . $dateTime; switch ($matches[1]) { case 'start': $replacement = eo_get_the_start($format); break; case 'end': $replacement = eo_get_the_end($format); break; case 'schedule_start': $replacement = eo_get_schedule_start($format); break; case 'schedule_last': case 'schedule_end': $replacement = eo_get_schedule_end($format); break; } break; case 'event_duration': $start = eo_get_the_start(DATETIMEOBJ); $end = clone eo_get_the_end(DATETIMEOBJ); if (eo_is_all_day()) { $end->modify('+1 minute'); } if (function_exists('date_diff')) { $duration = date_diff($start, $end); $replacement = $duration->format($matches[2]); } else { $replacement = eo_date_interval($start, $end, $matches[2]); } $replacement = false; break; case 'event_tags': $replacement = get_the_term_list(get_the_ID(), 'event-tag', '', ', ', ''); break; case 'event_cats': $replacement = get_the_term_list(get_the_ID(), 'event-category', '', ', ', ''); break; case 'event_venue': $replacement = eo_get_venue_name(); break; case 'event_venue_map': if (eo_get_venue()) { $class = isset($matches[2]) ? self::eo_clean_input($matches[2]) : ''; $class = !empty($class) ? 'class=' . $class : ''; $replacement = eo_get_venue_map(eo_get_venue(), compact('class')); } break; case 'event_venue_url': $venue_link = eo_get_venue_link(); $replacement = !is_wp_error($venue_link) ? $venue_link : ''; break; case 'event_venue_address': $address = eo_get_venue_address(); $replacement = $address['address']; break; case 'event_venue_postcode': $address = eo_get_venue_address(); $replacement = $address['postcode']; break; case 'event_venue_city': $address = eo_get_venue_address(); $replacement = $address['city']; break; case 'event_venue_country': $address = eo_get_venue_address(); $replacement = $address['country']; break; case 'event_venue_state': $address = eo_get_venue_address(); $replacement = $address['state']; break; case 'event_venue_city': $address = eo_get_venue_address(); $replacement = $address['city']; break; case 'event_thumbnail': $size = isset($matches[2]) ? self::eo_clean_input($matches[2]) : ''; $size = !empty($size) ? $size : 'thumbnail'; $attr = isset($matches[3]) ? self::eo_clean_input($matches[3]) : ''; //Decode HTML entities as shortcode encodes them $attr = html_entity_decode($attr); $replacement = get_the_post_thumbnail(get_the_ID(), $size, $attr); break; case 'event_url': $replacement = get_permalink(); break; case 'event_custom_field': $field = $matches[2]; $meta = get_post_meta(get_the_ID(), $field); $replacement = implode($meta); break; case 'event_excerpt': $length = isset($matches[2]) ? intval($matches[2]) : 55; //Using get_the_excerpt adds a link.... if (post_password_required($post)) { $output = __('There is no excerpt because this is a protected post.'); } else { $output = $post->post_excerpt; } $replacement = eventorganiser_trim_excerpt($output, $length); break; case 'event_content': $replacement = get_the_content(); break; case 'cat_color': $replacement = eo_get_event_color(); break; case 'event_title_attr': $replacement = get_the_title(); break; } return $replacement; }
/** * Returns HTML mark-up for a list of event meta information. * * Uses microformat. * @since 1.7 * @ignore * @param int $post_id The event (post) ID. Uses current event if not supplied * @return string|bool HTML mark-up. False if an invalid $post_is provided. */ function eo_get_event_meta_list_rcumc($event_id = 0) { $event_id = (int) (empty($event_id) ? get_the_ID() : $event_id); if (empty($event_id)) { return false; } $html = '<ul class="eo-event-byline" style="margin:10px 0px;">'; $venue = get_taxonomy('event-venue'); if (($venue_id = eo_get_venue($event_id)) && $venue) { $html .= sprintf('<ul> <a href="%s"> <span itemprop="location" itemscope itemtype="http://data-vocabulary.org/Organization"> <span itemprop="name">%s</span> </span> </a></ul>', eo_get_venue_link($venue_id), eo_get_venue_name($venue_id)); } $html .= '</ul>'; /** * Filters mark-up for the event details list. * * The event details list is just a simple list containing details pertaining * to the event (venue, categories, tags) etc. * * @param array $html The generated mark-up * @param int $event_id Post ID of the event */ $html = apply_filters('eventorganiser_event_meta_list', $html, $event_id); return $html; }
/** * Returns HTML mark-up for a list of event meta information. * * Uses microformat. * @since 1.7 * @ignore * @param int $post_id The event (post) ID. Uses current event if not supplied * @return string|bool HTML mark-up. False if an invalid $post_is provided. */ function eo_get_event_meta_list($event_id = 0) { $event_id = (int) (empty($event_id) ? get_the_ID() : $event_id); if (empty($event_id)) { return false; } $html = '<ul class="eo-event-meta" style="margin:10px 0px;">'; $venue = get_taxonomy('event-venue'); if (($venue_id = eo_get_venue($event_id)) && $venue) { $html .= sprintf('<li><strong>%s:</strong> <a href="%s"> <span itemprop="location" itemscope itemtype="http://data-vocabulary.org/Organization"> <span itemprop="name">%s</span> <span itemprop="geo" itemscope itemtype="http://data-vocabulary.org/Geo"> <meta itemprop="latitude" content="%f" /> <meta itemprop="longitude" content="%f" /> </span> </span> </a></li>', $venue->labels->singular_name, eo_get_venue_link($venue_id), eo_get_venue_name($venue_id), eo_get_venue_lat($venue_id), eo_get_venue_lng($venue_id)); } if (get_the_terms($event_id, 'event-category')) { $html .= sprintf('<li><strong>%s:</strong> %s</li>' . "\n", __('Categories', 'eventorganiser'), get_the_term_list($event_id, 'event-category', '', ', ', '')); } if (get_the_terms($event_id, 'event-tag') && !is_wp_error(get_the_terms($event_id, 'event-tag'))) { $html .= sprintf('<li><strong>%s:</strong> %s</li>' . "\n", __('Tags', 'eventorganiser'), get_the_term_list($event_id, 'event-tag', '', ', ', '')); } $html .= '</ul>'; /** * Filters mark-up for the event details list. * * The event details list is just a simple list containig details pertaining * to the event (venue, categories, tags) etc. * * @param array $html The generated mark-up * @param int $event_id Post ID of the event */ $html = apply_filters('eventorganiser_event_meta_list', $html, $event_id); return $html; }
<h4><?php eo_venue_name(); ?> </h4> </div> <?php } ?> <?php the_content(); ?> <?php if (eo_get_venue()) { $location = explode(',', eo_get_venue_name(), 2); echo do_shortcode("[google-map-sc width=100% height=300 zoom=15 type=ROADMAP address='" . $location[1] . "']"); } ?> <?php echo do_shortcode('[button url="http://www.buildinstitute.com/events/" arrow="left"]All Events[/button]'); ?> <?php } } ?> </main>
/** * Returns HTML mark-up for a list of event meta information. * * Uses microformat. * @since 1.7 * @ignore * @param int $post_id The event (post) ID. Uses current event if not supplied * @return string|bool HTML mark-up. False if an invalid $post_is provided. */ function eo_get_event_meta_list($post_id = 0) { $post_id = (int) (empty($post_id) ? get_the_ID() : $post_id); if (empty($post_id)) { return false; } $html = '<ul class="eo-event-meta" style="margin:10px 0px;">'; if ($venue_id = eo_get_venue($post_id)) { $html .= sprintf('<li><strong>%s:</strong> <a href="%s"> <span itemprop="location" itemscope itemtype="http://data-vocabulary.org/Organization"> <span itemprop="name">%s</span> <span itemprop="geo" itemscope itemtype="http://data-vocabulary.org/Geo"> <meta itemprop="latitude" content="%f" /> <meta itemprop="longitude" content="%f" /> </span> </span></a></li>', __('Venue', 'eventorganiser'), eo_get_venue_link($venue_id), eo_get_venue_name($venue_id), eo_get_venue_lat($venue_id), eo_get_venue_lng($venue_id)); } if (get_the_terms(get_the_ID(), 'event-category')) { $html .= sprintf('<li><strong>%s:</strong> %s</li>', __('Categories', 'eventorganiser'), get_the_term_list(get_the_ID(), 'event-category', '', ', ', '')); } if (get_the_terms(get_the_ID(), 'event-tag') && !is_wp_error(get_the_terms(get_the_ID(), 'event-tag'))) { $html .= sprintf('<li><strong>%s:</strong> %s</li>', __('Tags', 'eventorganiser'), get_the_term_list(get_the_ID(), 'event-tag', '', ', ', '')); } $html .= '</ul>'; return apply_filters('eventorganiser_event_meta_list', $html, $post_id); }
/** * 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 http://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 if ($notices = apply_filters('eventorganiser_event_metabox_notice', $notices, $post)) { echo '<div class="updated below-h2"><p>' . $notices . '</p></div>'; } ?> <div class="<?php echo $sche_once ? 'onetime' : 'reoccurence'; ?> "> <p><?php printf(__('Ensure dates are entered in %1$s format and times in %2$s (24 hour) format', 'eventorganiser'), '<strong>' . $format . '</strong>', ' <strong>hh:mm</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 $schedule_last->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> <tr valign="top" class="eo-venue-combobox-select"> <td class="eo-label"> <?php _e('Venue', 'eventorganiser'); ?> : </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> </table> </div> <?php // create a custom nonce for submit verification later wp_nonce_field('eventorganiser_event_update_' . get_the_ID(), '_eononce'); }
function eventorganiser_posterboard_ajax_response() { $page = isset($_GET['page']) ? (int) $_GET['page'] : 1; $query = empty($_GET['query']) ? array() : $_GET['query']; foreach (array('category', 'tag', 'venue') as $tax) { if (isset($query['event_' . $tax])) { $query['event-' . $tax] = $query['event_' . $tax]; unset($query['event_' . $tax]); } } if (isset($query['event-venue']) && '%this%' == $query['event-venue']) { if (eo_get_venue_slug()) { $query['event-venue'] = eo_get_venue_slug(); } else { unset($query['event-venue']); } } if (isset($query['users_events']) && 'true' == strtolower($query['users_events'])) { $query['bookee_id'] = get_current_user_id(); } $query = array_merge(array('event_start_after' => 'today', 'posts_per_page' => 10), $query, array('post_type' => 'event', 'paged' => $page, 'post_status' => array('publish', 'private'), 'perm' => 'readable', 'supress_filters' => false)); $event_query = new WP_Query($query); $response = array(); if ($event_query->have_posts()) { global $post; while ($event_query->have_posts()) { $event_query->the_post(); $start_format = get_option('time_format'); if (eo_get_the_start('Y-m-d') == eo_get_the_end('Y-m-d')) { $end_format = get_option('time_format'); } else { $end_format = 'j M ' . get_option('time_format'); } $venue_id = eo_get_venue(); $categories = get_the_terms(get_the_ID(), 'event-category'); $colour = eo_get_event_color() ? eo_get_event_color() : '#1e8cbe'; $address = eo_get_venue_address($venue_id); $event = array('event_id' => get_the_ID(), 'occurrence_id' => $post->occurrence_id, 'event_title' => get_the_title(), 'event_color' => $colour, 'event_color_light' => eo_color_luminance($colour, 0.3), 'event_start_day' => eo_get_the_start('j'), 'event_start_month' => eo_get_the_start('M'), 'event_content' => get_the_content(), 'event_excerpt' => get_the_excerpt(), 'event_thumbnail' => get_the_post_thumbnail(get_the_ID(), array('200', '200'), array('class' => 'aligncenter')), 'event_permalink' => get_permalink(), 'event_categories' => get_the_term_list(get_the_ID(), 'event-category', '#', ', #', ''), 'event_venue' => $venue_id ? eo_get_venue_name($venue_id) : false, 'event_venue_id' => $venue_id, 'event_venue_city' => $venue_id ? $address['city'] : false, 'event_venue_state' => $venue_id ? $address['state'] : false, 'event_venue_country' => $venue_id ? $address['country'] : false, 'event_venue_url' => $venue_id ? eo_get_venue_link($venue_id) : false, 'event_is_all_day' => eo_is_all_day(), 'event_cat_ids' => $categories ? array_values(wp_list_pluck($categories, 'term_id')) : array(0), 'event_range' => eo_get_the_start($start_format) . ' - ' . eo_get_the_end($end_format)); $event = apply_filters('eventorganiser_posterboard_item', $event, $event['event_id'], $event['occurrence_id']); $response[] = $event; } } wp_reset_postdata(); echo json_encode($response); exit; }
/** * Sets up the event data metabox * This allows user to enter date / time, reoccurrence and venue data for the event * * @since 1.0.0 */ function eventorganiser_details_metabox($post) { global $wp_locale; //Sets the format as php understands it, and textual. $eo_settings_array = get_option('eventorganiser_options'); if ($eo_settings_array['dateformat'] == 'dd-mm') { $phpFormat = 'd-m-Y'; $format = 'dd-mm-yyyy'; } else { $phpFormat = 'm-d-Y'; $format = 'mm-dd-yyyy'; } //Get the starting day of the week $start_day = intval(get_option('start_of_week')); //Retrieve event details (if they exist) $event = new EO_Event(get_the_ID()); //Start of meta box ?> <p> <?php if ($event->is_reoccurring()) { ?> <strong><?php _e('This is a reoccurring event', 'eventorganiser'); ?> </strong>. <input type="checkbox" id="HWSEvent_rec" name="eo_input[AlterRe]" value="yes" /> <?php _e('Check to edit this event and its reoccurrences', 'eventorganiser'); ?> . <?php } ?> </p> <div class="<?php if ($event->is_reoccurring()) { echo 'reoccurence'; } else { echo 'onetime'; } ?> "> <p><?php sprintf(__('Ensure dates are entered in %1$s format and times in %2$s (24 hour) format', 'eventorganiser'), '<strong>' . $format . '</strong>', ' <strong>hh:mm</strong>'); ?> </p> <table> <tr class="event-date"> <td><?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($event->is_reoccurring()); ?> value="<?php $event->the_start($phpFormat); ?> "/> <input name="eo_input[StartTime]" class="eo_time ui-widget-content ui-corner-all" size="4" maxlength="5" id="HWSEvent_time" <?php disabled($event->is_reoccurring() || $event->is_allday()); ?> value="<?php $event->the_start('H:i'); ?> "/> </td> </tr> <tr class="event-date"> <td><?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($event->is_reoccurring()); ?> value="<?php $event->the_end($phpFormat); ?> "/> <input name="eo_input[FinishTime]" class="eo_time ui-widget-content ui-corner-all " size="4" maxlength="5" id="HWSEvent_time2" <?php disabled($event->is_reoccurring() || $event->is_allday()); ?> value="<?php $event->the_end('H:i'); ?> ""/> <label> <input type="checkbox" id="eo_allday" <?php checked($event->is_allday()); ?> name="eo_input[allday]"<?php disabled($event->is_reoccurring()); ?> value="1"/> <?php _e("All day", 'eventorganiser'); ?> </label> </td> </tr> <tr class="event-date"> <td><?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')); ?> <select id="HWSEventInput_Req" name="eo_input[schedule]" <?php disabled($event->is_reoccurring()); ?> > <?php foreach ($reoccurrence_schedules as $index => $val) { ?> <option value="<?php echo $index; ?> " <?php selected($event->is_schedule($index)); ?> ><?php echo $val; ?> </option> <?php } //End foreach $allowed_reoccurs ?> </select> </td> </tr> <tr class="event-date reocurrence_row"> <td></td><td> <p> <?php _e("Repeat every ", 'eventorganiser'); ?> <input <?php disabled($event->is_reoccurring()); ?> 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 $event->frequency; ?> " /> <span id="recpan" > </span> </p> <p id="dayofweekrepeat"> <?php _e("on", 'eventorganiser'); ?> <?php $days_meta = is_array($event->meta) ? $event->meta : array(); ?> <?php for ($i = 0; $i <= 6; $i++) { $d = ($start_day + $i) % 7; $ical_days = array('SU', 'MO', 'TU', 'WE', 'TH', 'FR', 'SA'); $ical_d = $ical_days[$d]; $day = $wp_locale->weekday_abbrev[$wp_locale->weekday[$d]]; ?> <input type="checkbox" id="day-<?php echo $day; ?> " <?php checked(in_array($ical_d, $days_meta), 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"> <input type="radio" id="bymonthday" disabled="disabled" name="eo_input[schedule_meta]" <?php checked($event->occursBy(), 'BYMONTHDAY'); ?> value="BYMONTHDAY=" /> <label for="bymonthday" > <?php _e("day of month", 'eventorganiser'); ?> </label> <input type="radio" id="byday" disabled="disabled" name="eo_input[schedule_meta]" <?php checked($event->occursBy() == 'BYMONTHDAY', false); ?> value="BYDAY=" /> <label for="byday" > <?php _e("day of week", 'eventorganiser'); ?> </label> </p> <p class="reoccurrence_label"> <?php _e("until", 'eventorganiser'); ?> <input <?php disabled($event->is_reoccurring()); ?> class="ui-widget-content ui-corner-all" name="eo_input[schedule_end]" id="recend" size="10" maxlength="10" disabled="disabled" value="<?php $event->the_schedule_end($phpFormat); ?> "/> </p> <p id="event_summary"> </p> </td> </tr> <tr> <td class="label"> <?php _e("Venue", 'eventorganiser'); ?> : </td> <td> <?php $venues = get_terms('event-venue', array('hide_empty' => false)); $current_id = (int) eo_get_venue(get_the_ID()); ?> <!-- If javascript is disabed, a simple drop down menu box is displayed to choose venue. Otherwise, the user is able to search the venues by typing in the input box.--> <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, $current_id); ?> value="<?php echo $venue->term_id; ?> "><?php echo $venue->name; ?> </option> <?php } ?> </select> <span style="font-size:0.8em;line-height:0.8em;"> <?php _e("Search for a venue. To add a venues go to the venue page.", 'eventorganiser'); ?> </span> </td> </tr> <tr class="venue_row <?php if (!$current_id) { echo 'novenue'; } ?> " > <td></td> <td> <div id="eventorganiser_venue_meta" style="display:none;"> <input type="hidden" id="eo_venue_Lat" value="<?php eo_venue_lat($current_id); ?> " /> <input type="hidden" id="eo_venue_Lng" value="<?php eo_venue_lng($current_id); ?> " /> </div> <div id="venuemap" class="ui-widget-content ui-corner-all gmap3"></div> <div class="clear"></div> </td> </tr> </table> </div> <?php // create a custom nonce for submit verification later wp_nonce_field('eventorganiser_event_update_' . get_the_ID(), '_eononce'); }
/** * 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; }
/** * Prepare a CiviEvent with data from an EO Event * * @since 0.1 * * @param object $post The WordPress post object * @return array $civi_event The basic CiviEvent data */ public function prepare_civi_event($post) { // init CiviEvent array $civi_event = array('version' => 3); // add items that are common to all CiviEvents $civi_event['title'] = $post->post_title; $civi_event['description'] = $post->post_content; $civi_event['summary'] = strip_tags($post->post_excerpt); $civi_event['created_date'] = $post->post_date; $civi_event['is_public'] = 1; $civi_event['is_active'] = 1; $civi_event['participant_listing_id'] = NULL; // get venue for this event $venue_id = eo_get_venue($post->ID); // get CiviEvent location $location_id = $this->plugin->eo_venue->get_civi_location($venue_id); // did we get one? if (is_numeric($location_id)) { // add to our params $civi_event['loc_block_id'] = $location_id; // set CiviCRM to add map $civi_event['is_map'] = 1; } // online registration off by default $civi_event['is_online_registration'] = 0; // get CiviEvent online registration value $is_reg = $this->plugin->eo->get_event_registration($post->ID); // did we get one? if (is_numeric($is_reg) and $is_reg != 0) { // add to our params $civi_event['is_online_registration'] = 1; } // participant_role default $civi_event['default_role_id'] = 0; // get existing role ID $existing_id = $this->get_participant_role($post); // did we get one? if ($existing_id !== false and is_numeric($existing_id) and $existing_id != 0) { // add to our params $civi_event['default_role_id'] = $existing_id; } // get event type pseudo-ID (or value), because it is required in CiviCRM $type_value = $this->get_default_event_type_value($post); // well? if ($type_value === false) { // error wp_die(__('You must have some CiviCRM event types defined', 'civicrm-event-organiser')); } // assign event type value $civi_event['event_type_id'] = $type_value; // --< return $civi_event; }
/** * For this to work you need to add the following to the custom field exceptions on the ThreeWP settings page: * * _eventorganiser_event_schedule * _eventorganiser_schedule_start_start * _eventorganiser_schedule_start_finish *_eventorganiser_schedule_last_start *_eventorganiser_schedule_last_finish * * @access private * @ignore * */ function eventorganiser_threeWP($activity) { if (isset($activity['activity_id']) && $activity['activity_id'] == '3broadcast_broadcasted' && 'event' == get_post_type(get_the_ID())) { $details = $activity['activity_details']; $current_blog_id = get_current_blog_id(); $original_id = get_the_ID(); $original_cats = get_the_terms($original_id, 'event-category'); $original_venue_id = eo_get_venue($original_id); //Venue Meta &Thumbnail $venue_meta = eo_get_venue_meta($original_venue_id, '', false); if ($original_venue_id && ($venue_thumbnail_id = eo_get_venue_meta($original_venue_id, '_eventorganiser_thumbnail_id', true))) { $original_upload_dir = wp_upload_dir(); $metadata = wp_get_attachment_metadata($venue_thumbnail_id); $data = get_post($venue_thumbnail_id); $file = $metadata['file']; $guid = $data->guid; $post_title = $data->post_title; $menu_order = $data->menu_order; $post_excerpt = $data->post_excerpt; $filename_base = basename($metadata['file']); $filename_path = $original_upload_dir['basedir'] . '/' . $metadata['file']; $venue_thumbnail = compact('filename_path', 'file', 'filename_base', 'post_title', 'guid', 'menu_order', 'post_excerpt'); unset($venue_meta['_eventorganiser_thumbnail_id']); } foreach ($details as $broadcast) { $blog_id = $broadcast['blog_id']; $post_id = $broadcast['post_id']; switch_to_blog($blog_id); $event_data = array('force_regenerate_dates' => true); eo_update_event($post_id, $event_data); $venue_id = eo_get_venue($post_id); //Delete old venue meta if ($old_meta = eo_get_venue_meta($venue_id, '', false)) { $old_meta_keys = array_keys($old_meta); foreach ($old_meta_keys as $key) { eo_delete_venue_meta($venue_id, $key); } } //Add new venue meta foreach ($venue_meta as $key => $values) { foreach ($values as $value) { eo_add_venue_meta($venue_id, $key, $value); } } //Sync cat colours $cats = get_the_terms($post_id, 'event-category'); foreach ($cats as $cat) { //Find original cat foreach ($original_cats as $original_cat) { if ($original_cat->slug == $cat->slug) { $re = update_option("eo-event-category_{$cat->term_id}", array('colour' => $original_cat->color)); break; } } } //Sync venue thumbnails $upload_dir = wp_upload_dir(); if (file_exists($venue_thumbnail['filename_path'])) { $file_path = $upload_dir['path'] . '/' . $venue_thumbnail['filename_base']; // Copy the file to the blog's upload directory copy($venue_thumbnail['filename_path'], $file_path); if (false == ($attachment_id = eventorganiser_file_to_attachment($venue_thumbnail['file']))) { // And now create the attachment stuff. // This is taken almost directly from http://codex.wordpress.org/Function_Reference/wp_insert_attachment $wp_filetype = wp_check_filetype($venue_thumbnail['filename_base'], null); $attachment = array('guid' => $upload_dir['url'] . '/' . $venue_thumbnail['filename_base'], 'menu_order' => $venue_thumbnail['menu_order'], 'post_excerpt' => $venue_thumbnail['post_excerpt'], 'post_mime_type' => $wp_filetype['type'], 'post_title' => $venue_thumbnail['post_title'], 'post_status' => 'inherit'); $attachment_id = wp_insert_attachment($attachment, $file_path, 0); // Now to handle the metadata. require_once ABSPATH . "wp-admin" . '/includes/image.php'; $attach_data = wp_generate_attachment_metadata($attachment_id, $file_path); wp_update_attachment_metadata($attachment_id, $attach_data); } //If attachment post doesn't exist eo_update_venue_meta($venue_id, '_eventorganiser_thumbnail_id', $attachment_id); } //If original file exists } //Foreach blog switch_to_blog($current_blog_id); } //If broadcasting }
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; }