コード例 #1
0
 function widget($args, $instance)
 {
     global $wpdb, $current_site, $post, $wiki_tree;
     extract($args);
     $instance = apply_filters('eab-widgets-upcoming-instance_read', $instance, $this);
     $options = wp_parse_args((array) $instance, $this->_defaults);
     $title = apply_filters('widget_title', empty($instance['title']) ? __('Upcoming', $this->translation_domain) : $instance['title'], $instance, $this->id_base);
     $query_args = array('posts_per_page' => $options['limit']);
     if ($options['category']) {
         $query_args['tax_query'] = array(array('taxonomy' => 'eab_events_category', 'field' => 'id', 'terms' => (int) $options['category']));
     }
     if ($options['lookahead'] && is_numeric($options['lookahead'])) {
         $lookahead_func = create_function('', 'return ' . $options['lookahead'] . ';');
         add_filter('eab-collection-upcoming_weeks-week_number', $lookahead_func);
     }
     $_events = Eab_CollectionFactory::get_upcoming_weeks_events(eab_current_time(), $query_args);
     if (!empty($lookahead_func)) {
         remove_filter('eab-collection-upcoming_weeks-week_number', $lookahead_func);
     }
     if (is_array($_events) && count($_events) > 0) {
         echo $before_widget;
         echo $before_title . $title . $after_title;
         echo '<div id="event-popular"><ul>';
         foreach ($_events as $_event) {
             $thumbnail = $excerpt = false;
             if ($options['thumbnail']) {
                 $raw = wp_get_attachment_image_src(get_post_thumbnail_id($_event->get_id()));
                 $thumbnail = $raw ? @$raw[0] : false;
             }
             $excerpt = false;
             if (!empty($options['excerpt'])) {
                 $words = (int) $options['excerpt_words_limit'] ? (int) $options['excerpt_words_limit'] : false;
                 $excerpt = eab_call_template('util_words_limit', $_event->get_excerpt_or_fallback(), $words);
             }
             echo '<li>';
             echo '<a href="' . get_permalink($_event->get_id()) . '" class="' . ($_event->get_id() == $post->ID ? 'current' : '') . '" >' . ($options['thumbnail'] && $thumbnail ? '<img src="' . $thumbnail . '" /><br />' : '') . $_event->get_title() . '</a>';
             if (!empty($options['dates'])) {
                 echo '<div class="wpmudevevents-date">' . Eab_Template::get_event_dates($_event) . '</div>';
             }
             if (!empty($options['excerpt']) && !empty($excerpt)) {
                 echo '<p>' . $excerpt . '</p>';
             }
             do_action('eab-widgets-upcoming-after_event', $options, $_event, $this);
             echo '</li>';
         }
         echo '</ul></div>';
         echo $after_widget;
     } else {
         echo $before_widget . $before_title . $title . $after_title . '<p class="eab-widget-no_events">' . __('No upcoming events.', Eab_EventsHub::TEXT_DOMAIN) . '</p>' . $after_widget;
     }
 }
コード例 #2
0
 /**
  * Archive shortcode handler.
  */
 function process_archive_shortcode($args = array(), $content = false)
 {
     $args = $this->_preparse_arguments($args, array('network' => false, 'date' => false, 'relative_date' => false, 'lookahead' => false, 'weeks' => false, 'category' => false, 'categories' => false, 'limit' => false, 'order' => false, 'paged' => false, 'page' => 1, 'class' => false, 'template' => 'get_shortcode_archive_output', 'override_styles' => false, 'override_scripts' => false));
     if ($args['paged']) {
         $requested_page = get_query_var('page');
         $requested_page = $requested_page ? $requested_page : get_query_var('paged');
         $args['page'] = $requested_page ? $requested_page : $args['page'];
     }
     $events = array();
     if (is_multisite() && $args['network']) {
         $events = Eab_Network::get_upcoming_events(30);
     } else {
         $query = $this->_to_query_args($args);
         $order_method = $args['order'] ? create_function('', 'return "' . $args['order'] . '";') : false;
         if ($order_method) {
             add_filter('eab-collection-date_ordering_direction', $order_method);
         }
         // Lookahead - depending on presence, use regular upcoming query, or poll week count
         if ($args['lookahead']) {
             $method = $args['weeks'] ? create_function('', 'return ' . $args['weeks'] . ';') : false;
             if ($method) {
                 add_filter('eab-collection-upcoming_weeks-week_number', $method);
             }
             $events = Eab_CollectionFactory::get_upcoming_weeks_events($args['date'], $query);
             if ($method) {
                 remove_filter('eab-collection-upcoming_weeks-week_number', $method);
             }
         } else {
             // No lookahead, get the full month only
             $events = Eab_CollectionFactory::get_upcoming_events($args['date'], $query);
         }
         if ($order_method) {
             remove_filter('eab-collection-date_ordering_direction', $order_method);
         }
     }
     $output = Eab_Template::util_apply_shortcode_template($events, $args);
     if ($output) {
         if ($args['paged'] && !(is_multisite() && $args['network'])) {
             if ($method) {
                 add_filter('eab-collection-upcoming_weeks-week_number', $method);
             }
             $events_query = $args['lookahead'] ? Eab_CollectionFactory::get_upcoming_weeks($args['date'], $query) : Eab_CollectionFactory::get_upcoming($args['date'], $query);
             if ($method) {
                 remove_filter('eab-collection-upcoming_weeks-week_number', $method);
             }
             $output .= eab_call_template('get_shortcode_paging', $events_query, $args);
         }
     } else {
         $output = $content;
     }
     if (!$args['override_styles']) {
         wp_enqueue_style('eab_front');
     }
     if (!$args['override_scripts']) {
         wp_enqueue_script('eab_event_js');
         do_action('eab-javascript-do_enqueue_api_scripts');
     }
     return $output;
 }
    public function shortcode($args = array(), $content = '')
    {
        $original_arguments = $args;
        $codec = new Eab_Codec_ArgumentsCodec();
        $args = $codec->parse_arguments($args, array('id' => '', 'format' => 'dHMS', 'goto' => '', 'class' => '', 'type' => '', 'size' => 70, 'add' => 0, 'allow_scaling' => false, 'compact' => false, 'title' => false, 'footer_script' => false, 'expired' => __('Closed', Eab_EventsHub::TEXT_DOMAIN), 'legacy' => false, 'category' => false, 'categories' => false, 'weeks' => false));
        if (!empty($args['legacy'])) {
            return $this->_legacy_shortcode($original_arguments);
        }
        $class = !empty($args['class']) ? 'class="' . sanitize_html_class($args['class']) . '"' : '';
        $id = str_replace(array(" ", "'", '"'), "", $args['id']);
        // We cannot let spaces and quotes in id
        // Do not add quotes for page refresh
        if ($args['goto'] && $args['goto'] != "window.location.href") {
            $args['goto'] = "'" . str_replace(array("'", '"'), "", $args['goto']) . "'";
        }
        // Do not allow quotes which may break js
        $transform = false;
        if ($args['size'] < 70 && !empty($args['allow_scaling'])) {
            $transform = $args['size'] / 70;
        }
        switch ($args['size']) {
            case 70:
                $height = 72;
                break;
            case 82:
                $height = 84;
                break;
            case 127:
                $height = 130;
                break;
            case 254:
                $height = 260;
                break;
            default:
                $args['size'] = 70;
                $height = 72;
                break;
        }
        $sprite_file = plugins_url('/events-and-bookings/img/sprite_' . $args['size'] . 'x' . $height . '.png');
        $secs = -1;
        $additional = 0;
        if (!empty($args['add']) && (int) $args['add']) {
            $additional = (int) $args['add'] * 60;
        }
        $query = $codec->get_query_args($args);
        $now = eab_current_time() + $additional;
        //$events = Eab_CollectionFactory::get_upcoming_events($now, $query);
        $future_peeking_method = false;
        if (!empty($args['weeks']) && is_numeric($args['weeks'])) {
            $future_peeking_method = create_function('', 'return ' . (int) $args['weeks'] . ';');
        }
        if (!empty($future_peeking_method)) {
            add_filter('eab-collection-upcoming_weeks-week_number', $future_peeking_method);
        }
        $events = Eab_CollectionFactory::get_upcoming_weeks_events($now, $query);
        if (!empty($future_peeking_method)) {
            remove_filter('eab-collection-upcoming_weeks-week_number', $future_peeking_method);
        }
        $ret = array();
        foreach ($events as $event) {
            $ts = $event->get_start_timestamp();
            if ($ts < $now) {
                continue;
            }
            $ret[$ts] = $event;
        }
        ksort($ret);
        $next = reset($ret);
        if ($next) {
            $secs = $next->get_start_timestamp() - $now;
        } else {
            return $content;
        }
        $script = '';
        $script .= "<script type='text/javascript'>";
        $script .= "jQuery(document).ready(function(\$) {";
        $script .= "\$('#eab_next_event_countdown" . $id . "').countdown({\n\t\t\t\t\tformat: '" . $args['format'] . "',\n\t\t\t\t\texpiryText: '" . $args['expired'] . "',\n\t\t\t\t\tuntil: " . $secs . ",";
        if ($args['goto']) {
            $script .= "onExpiry: eab_next_event_refresh" . $id . ",";
        }
        if ($args['type'] == 'flip') {
            $script .= "onTick: function () { \$(document).trigger('eab-event_countdown-tick', [\$(this), '{$sprite_file}']);},";
        }
        $script .= "alwaysExpire: true});";
        if ($args['goto']) {
            $script .= "function eab_next_event_refresh" . $id . "() {window.location.href=" . $args['goto'] . ";}";
        }
        $script .= "});</script>";
        if ('flip' == $args['type']) {
            $script .= '<script type="text/javascript" src="' . plugins_url(basename(EAB_PLUGIN_DIR) . "/js/event_countdown_flip.js") . '"></script>';
        }
        // remove line breaks to prevent wpautop break the script
        $script = str_replace(array("\r", "\n", "\t", "<br>", "<br />"), "", preg_replace('/\\s+/m', ' ', $script));
        $this->add_countdown = true;
        $markup = '<div class="eab_next_event_countdown-wrapper">' . ($args['title'] ? '<h4><a href="' . get_permalink($next->get_id()) . '">' . $next->get_title() . '</a></h4>' : '') . "<div id='eab_next_event_countdown{$id}' {$class} data-height='{$height}' data-size='" . $args['size'] . "'></div>" . '</div>';
        if ($transform && !empty($args['allow_scaling'])) {
            $markup .= <<<EOStandardTransformCSS
<style type="text/css">
#eab_next_event_countdown{$id} .countdown_section {
\ttransform: scale({$transform},{$transform});
\t-ms-transform: scale({$transform},{$transform});
\t-webkit-transform: scale({$transform},{$transform});
}
</style>
EOStandardTransformCSS;
        }
        if (!empty($args['size']) && !empty($args['compact'])) {
            $base_size = $transform && !empty($args['allow_scaling']) ? $args['size'] * $transform : $args['size'];
            $max_width = $base_size * 8 + 20;
            $markup .= <<<EOStandardCompactCSS
<style type="text/css">
#eab_next_event_countdown{$id} {
\tmax-width: {$max_width}px;
}
</style>
EOStandardCompactCSS;
        }
        if ($args['footer_script'] && in_array($args['footer_script'], array('yes', 'true', '1'))) {
            self::add_script($script);
            add_action('wp_footer', array($this, 'inject_queued_scripts'), 99);
        } else {
            $markup .= $script;
        }
        return $markup;
    }