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; } }
/** * 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; }