function generate() { global $ec3; // Set-up $this->_thead, so that it's ready for $this->wrap_month(). $this->_thead = $this->_get_thead(); $result = "<div id='{$this->id}'>\n"; // Display navigation panel. if (0 == $this->navigation) { $result .= $this->_get_nav(); } $q = 'ec3_after=' . $this->begin_dateobj->to_mysqldate() . '&ec3_before=' . $this->limit_dateobj->to_mysqldate() . '&nopaging=1'; if (!$this->show_only_events) { $q .= '&ec3_listing=all'; } $query = new WP_Query(); $query->query($q); switch (ec3_get_listing_q($query)) { case 'E': $this->add_events($query); break; case 'P': $this->add_posts($query, !$ec3->advanced); break; default: $this->add_events($query); $this->add_posts($query, !$ec3->advanced); } $result .= parent::generate(); // Display navigation panel. if (1 == $this->navigation) { $result .= $this->_get_nav(); } $result .= "</div>\n"; if (!$this->disable_popups && empty($ec3->done_popups_javascript)) { $ec3->done_popups_javascript = true; $result .= "\t<script type='text/javascript' src='" . $ec3->myfiles . "/popup.js'></script>\n"; } if ($this->hide_logo) { $options = ',{hide_logo:true}'; } else { $options = ''; } $result .= "\t<script type='text/javascript'><!--\n" . "\t ec3.new_calendar('{$this->id}'{$options});\n" . "\t--></script>\n"; return $result; }
/** Initialise an event-loop, for ALL events in all posts in a query. * You must explicitly state which query is to be used. If you just want to use * the current query, then use the variant form: ec3_iter_all_events(). */ function ec3_iter_all_events_q($query) { global $ec3, $post; unset($ec3->events); $ec3->events = array(); $listing = ec3_get_listing_q($query); if ($query->is_page || $query->is_single || $query->is_admin || $listing == 'D') { // Emit all events. while ($query->have_posts()) { $query->the_post(); if (!isset($post->ec3_schedule)) { continue; } foreach ($post->ec3_schedule as $s) { $ec3->events[] = $s; } } } elseif ($listing == 'P') { // posts-only // Leave the $ec3->events array empty - list no events. } elseif ($query->is_date && !$query->is_time) { // Only emit events that occur on the given day (or month or year). // There two alternate ways to specify a date, the 'm' parameter... if ($query->query_vars['m']) { if (strlen($query->query_vars['m']) >= 8) { $m = substr($query->query_vars['m'], 0, 8); $fmt = 'Ymd'; } elseif (strlen($query->query_vars['m']) >= 6) { $m = substr($query->query_vars['m'], 0, 6); $fmt = 'Ym'; } else { $m = substr($query->query_vars['m'], 0, 4); $fmt = 'Y'; } } else { $m = date('Ymd'); // Start with today. $fmt = 'Ymd'; if ($query->query_vars['year']) { $m = '' . zeroise($query->query_vars['year'], 4) . substr($m, 4, 2); $fmt = 'Y'; } if ($query->query_vars['monthnum']) { $m = substr($m, 0, 4) . zeroise($query->query_vars['monthnum'], 2); $fmt = 'Ym'; } if ($query->query_vars['day']) { $m = substr($m, 0, 6) . zeroise($query->query_vars['day'], 2); $fmt = 'Ymd'; } } while ($query->have_posts()) { $query->the_post(); if (!isset($post->ec3_schedule)) { continue; } foreach ($post->ec3_schedule as $s) { if (mysql2date($fmt, $s->end) >= $m && mysql2date($fmt, $s->start) <= $m) { $ec3->events[] = $s; } } } } elseif ($ec3->is_date_range) { // The query is date-limited, so only emit events that occur // within the date range. while ($query->have_posts()) { $query->the_post(); if (!isset($post->ec3_schedule)) { continue; } foreach ($post->ec3_schedule as $s) { if ((empty($ec3->range_from) || mysql2date('Y-m-d', $s->end) >= $ec3->range_from) && (empty($ec3->range_before) || mysql2date('Y-m-d', $s->start) <= $ec3->range_before)) { $ec3->events[] = $s; } } } } elseif ($ec3->advanced && ($listing == 'E' || $query->is_search)) { // Hide inactive events while ($query->have_posts()) { $query->the_post(); if (!isset($post->ec3_schedule)) { continue; } foreach ($post->ec3_schedule as $s) { if ($s->end >= $ec3->today) { $ec3->events[] = $s; } } } } else { // Emit all events (same as the first branch). while ($query->have_posts()) { $query->the_post(); if (!isset($post->ec3_schedule)) { continue; } foreach ($post->ec3_schedule as $s) { $ec3->events[] = $s; } } } usort($ec3->events, 'ec3_cmp_events'); // This is a bit of a hack - only detect 'order=ASC' query var. // Really need our own switch. if (strtoupper($query->query_vars['order']) == 'ASC') { $ec3->events = array_reverse($ec3->events); } return new ec3_EventIterator(); }
// end class ec3_ec3xml /*@header('Content-type: text/xml; charset=' . get_option('blog_charset')); echo '<?xml version="1.0" encoding="'.get_option('blog_charset').'" standalone="yes"?>'."\n";*/ // Turn off EC's content filtering. @header('Content-type: text/xml; charset=UTF-8'); $xml = '<?xml version="1.0" encoding="' . get_option('blog_charset') . '" standalone="yes" ?>'; remove_filter('the_content', 'ec3_filter_the_content', 20); remove_filter('get_the_excerpt', 'ec3_get_the_excerpt'); add_filter('get_the_excerpt', 'wp_trim_excerpt'); global $ec3, $wp_query; $options = array(); if ($wp_query->is_month) { $options['num_months'] = 1; } $calobj = new ec3_ec3xml($options); switch (ec3_get_listing_q($wp_query)) { case 'E': $calobj->add_events($wp_query); break; case 'P': $calobj->add_posts($wp_query, !$ec3->advanced); break; default: $calobj->add_events($wp_query); $calobj->add_posts($wp_query, !$ec3->advanced); } ob_clean(); $xml .= '<calendar>'; $xml .= $calobj->generate(); $xml .= '<details id="details">'; $xml .= implode('', $calobj->details);