function gce_print_calendar($feed_ids, $display = 'grid', $args = array(), $widget = false, $uid = null) { // Set static unique ID for setting id attributes if ($uid == null) { static $uid = 1; } $defaults = array('title_text' => '', 'sort' => 'asc', 'grouped' => 0, 'month' => null, 'year' => null, 'widget' => 0, 'paging_interval' => null, 'max_events' => null, 'start_offset' => null, 'paging_type' => null, 'paging' => null, 'max_num' => null, 'range_start' => null, 'show_tooltips' => null); $args = array_merge($defaults, $args); extract($args); $ids = explode('-', str_replace(' ', '', $feed_ids)); //Create new display object, passing array of feed id(s) $d = new GCE_Display($ids, $title_text, $sort); $markup = ''; $start = current_time('timestamp'); if ($widget) { foreach ($ids as $f) { $paging = get_post_meta($f, 'gce_paging_widget', true); $old_paging[] = get_post_meta($f, 'gce_paging', true); if ($paging) { update_post_meta($f, 'gce_paging', true); } $paging_interval = get_post_meta($f, 'gce_widget_paging_interval', true); } } // If paging is not set then we need to set it now foreach ($ids as $id) { if ($paging === null) { $paging = get_post_meta($id, 'gce_paging', true); } if (empty($show_tooltips) && $show_tooltips != 0) { $tooltips = get_post_meta($id, 'gce_show_tooltips', true); } else { $tooltips = $show_tooltips; } if (!empty($tooltips) && ($tooltips === true || $tooltips == 'true' || $tooltips == '1' || $tooltips == 1)) { $show_tooltips = 'true'; } else { $show_tooltips = 'false'; } if ('date-range-grid' === $display) { $start = get_post_meta($id, 'gce_feed_range_start', true); $start = gce_date_unix($start); $year = date('Y', $start); $month = date('n', $start); } } if ('grid' == $display) { global $localize; $target = 'gce-' . $uid; $localize[$target] = array('target_element' => $target, 'feed_ids' => $feed_ids, 'title_text' => $title_text, 'type' => $widget == 1 ? 'widget' : 'page', 'show_tooltips' => $show_tooltips == 'true' || $show_tooltips == '1' ? 'true' : 'false'); $data_attr = sprintf('data-feed="%s"', htmlspecialchars(json_encode($localize), ENT_QUOTES, 'UTF-8')); if ($widget == 1) { $markup .= '<div class="gce-widget-grid gce-widget-' . esc_attr($feed_ids) . '" id="gce-' . $uid . '" ' . $data_attr . '>'; } else { $markup .= '<div class="gce-page-grid gce-page-grid-' . esc_attr($feed_ids) . '" id="gce-' . $uid . '" ' . $data_attr . '>'; } $markup .= $d->get_grid($year, $month, $widget, $paging); $markup .= '</div>'; } else { if ('list' == $display || 'list-grouped' == $display) { if ($widget) { $markup = '<div class="gce-widget-list gce-widget-list-' . esc_attr($feed_ids) . '" id="gce-' . $uid . '">' . $d->get_list($grouped, $start + $start_offset, $paging, $paging_interval, $start_offset, $max_events, $paging_type, $max_num) . '</div>'; } else { $markup = '<div class="gce-page-list gce-page-list-' . esc_attr($feed_ids) . '" id="gce-' . $uid . '">' . $d->get_list($grouped, $start + $start_offset, $paging, $paging_interval, $start_offset, $max_events, $paging_type) . '</div>'; } } else { if ('date-range-list' == $display) { $paging_interval = 'date-range'; if ($widget) { $markup = '<div class="gce-widget-list gce-widget-list-' . esc_attr($feed_ids) . '" id="gce-' . $uid . '">' . $d->get_list($grouped, $range_start, false, $paging_interval, $start_offset, INF, $paging_type, $max_num) . '</div>'; } else { $markup = '<div class="gce-page-list gce-page-list-' . esc_attr($feed_ids) . '" id="gce-' . $uid . '">' . $d->get_list($grouped, $range_start, false, $paging_interval, $start_offset, INF, $paging_type, INF) . '</div>'; } } elseif ('date-range-grid' == $display) { global $localize; $target = 'gce-' . $uid; $localize[$target] = array('target_element' => $target, 'feed_ids' => $feed_ids, 'title_text' => $title_text, 'type' => $widget == 1 ? 'widget' : 'page', 'show_tooltips' => $show_tooltips == 'true' || $show_tooltips == '1' ? 'true' : 'false'); $data_attr = sprintf('data-feed="%s"', htmlspecialchars(json_encode($localize), ENT_QUOTES, 'UTF-8')); if ($widget) { $markup = '<div class="gce-widget-grid gce-widget-grid-' . esc_attr($feed_ids) . '" id="gce-' . $uid . '"' . $data_attr . '>' . $d->get_grid($year, $month, $widget, $paging) . '</div>'; } else { $markup = '<div class="gce-page-grid gce-page-grid-' . esc_attr($feed_ids) . '" id="gce-' . $uid . '"' . $data_attr . '>' . $d->get_grid($year, $month, $widget, $paging) . '</div>'; } } } } // Reset post meta if ($widget) { $i = 0; foreach ($ids as $f) { update_post_meta($f, 'gce_paging', $old_paging[$i]); $i++; } } $uid++; return $markup; }
/** * Widget HTML output * * @since 2.0.0 */ function widget($args, $instance) { extract($args); //Output before widget stuff echo $before_widget; $paging = isset($instance['paging']) ? $instance['paging'] : null; $max_num = isset($instance['per_page_num']) ? $instance['per_page_num'] : null; $max_length = isset($instance['events_per_page']) ? $instance['events_per_page'] : null; $max_events = null; $display_type = isset($instance['display_type']) ? $instance['display_type'] : null; // Start offset $offset_num = isset($instance['list_start_offset_num']) ? $instance['list_start_offset_num'] : 0; $offset_length = 86400; $offset_direction = isset($instance['list_start_offset_direction']) ? $instance['list_start_offset_direction'] : null; $invalid_id = false; // Get custom date range if set if ('date-range-list' == $display_type || 'date-range-grid' == $display_type) { $range_start = isset($instance['feed_range_start']) ? $instance['feed_range_start'] : null; $range_end = isset($instance['feed_range_end']) ? $instance['feed_range_end'] : null; if ($range_start !== null && !empty($range_start)) { $range_start = gce_date_unix($range_start); } if ($range_end !== null && !empty($range_end)) { $range_end = gce_date_unix($range_end); } } if (!isset($instance['show_tooltips'])) { $show_tooltips = 1; } else { $show_tooltips = isset($instance['show_tooltips']) ? $instance['show_tooltips'] : 'false'; } if ($offset_direction == 'back') { $offset_direction = -1; } else { $offset_direction = 1; } $start_offset = $offset_num * $offset_length * $offset_direction; $paging_interval = null; if ($display_type == 'date-range-list' || $display_type == 'date-range-grid') { $max_length = 'date-range'; } if ($max_length == 'days') { $paging_interval = $max_num * 86400; } else { if ($max_length == 'events') { $max_events = $max_num; } else { if ($max_length == 'week') { $paging_interval = 604800; } else { if ($max_length == 'month') { $paging_interval = 2629743; } } } } // Check whether any feeds have been added yet if (wp_count_posts('gce_feed')->publish > 0) { //Output title stuff $title = empty($instance['title']) ? '' : apply_filters('widget_title', $instance['title']); if (!empty($title)) { echo $before_title . $title . $after_title; } $no_feeds_exist = true; $feed_ids = array(); if (!empty($instance['id'])) { //Break comma delimited list of feed ids into array $feed_ids = explode(',', str_replace(' ', '', $instance['id'])); //Check each id is an integer, if not, remove it from the array foreach ($feed_ids as $key => $feed_id) { if (0 == absint($feed_id)) { unset($feed_ids[$key]); } if (!('publish' == get_post_status($feed_id))) { $invalid_id = true; } } //If at least one of the feed ids entered exists, set no_feeds_exist to false foreach ($feed_ids as $feed_id) { if (false !== get_post_meta($feed_id)) { $no_feeds_exist = false; } } foreach ($feed_ids as $feed_id) { if ($paging) { update_post_meta($feed_id, 'gce_paging_widget', true); } else { delete_post_meta($feed_id, 'gce_paging_widget'); } update_post_meta($feed_id, 'gce_widget_paging_interval', $paging_interval); } } else { if (current_user_can('manage_options')) { _e('No valid Feed IDs have been entered for this widget. Please check that you have entered the IDs correctly in the widget settings (Appearance > Widgets), and that the Feeds have not been deleted.', 'gce'); } } //Check that at least one valid feed id has been entered if (!empty($feed_ids)) { //Turns feed_ids back into string or feed ids delimited by '-' ('1-2-3-4' for example) $feed_ids = implode('-', $feed_ids); $title_text = !empty($instance['display_title_text']) ? $instance['display_title_text'] : null; $sort_order = isset($instance['order']) ? $instance['order'] : 'asc'; $args = array('title_text' => $title_text, 'sort' => $sort_order, 'month' => null, 'year' => null, 'widget' => 1, 'max_events' => $max_events, 'start_offset' => $start_offset, 'paging_type' => $max_length, 'max_num' => $max_num, 'show_tooltips' => $show_tooltips); if ('list-grouped' == $display_type) { $args['grouped'] = 1; } if ('date-range-list' == $display_type) { $args['max_events'] = INF; $args['max_num'] = INF; } $markup = gce_print_calendar($feed_ids, $display_type, $args, true); if (!$invalid_id) { echo $markup; } else { if (current_user_can('manage_options')) { echo '<p>' . __('There was a problem with one or more of your feed IDs. Please check your widget settings and make sure they are correct.', 'gce') . '</p>'; } } } } else { if (current_user_can('manage_options')) { _e('You have not added any feeds yet.', 'gce'); } else { echo ''; } } //Output after widget stuff echo $after_widget; }
private function get_feed_end() { $range = get_post_meta($this->id, 'gce_display_mode', true); $use_range = $range == 'date-range-list' || $range == 'date-range-grid' ? true : false; if ($use_range) { $end = get_post_meta($this->id, 'gce_feed_range_end', true); $end = gce_date_unix($end); $interval = 'date-range'; } else { $end = get_post_meta($this->id, 'gce_feed_end_num', true); $interval = get_post_meta($this->id, 'gce_feed_end', true); if (empty($end) && $end !== '0') { $end = 1; } } switch ($interval) { case 'days': return time() + $end * 86400; case 'months': return time() + $end * 2629743; case 'years': return time() + $end * 31556926; case 'date-range': return mktime(23, 59, 59, date('n', $end), date('j', $end), date('Y', $end)); } // Falls back to 1 year ahead just in case return time() + 31556926; }