Exemplo n.º 1
0
 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();
}
Exemplo n.º 3
0
// 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);