null, 'status' => 'default', 'initial' => true, 'caption_tag' => 'h4', 'show_all_events_link' => false, ); extract( $defaults, EXTR_SKIP ); if ( isset( $id ) ): $calendar = new SP_Calendar( $id ); if ( $status != 'default' ) $calendar->status = $status; $events = $calendar->data(); $event_ids = array(); foreach ( $events as $event ): $event_ids[] = $event->ID; endforeach; $in = 'AND ID IN (' . implode( ', ', $event_ids ) . ')'; else: $in = ''; endif; // week_begins = 0 stands for Sunday $week_begins = intval(get_option('start_of_week')); // Get year and month from query vars $year = isset( $_GET['sp_year'] ) ? $_GET['sp_year'] : $year; $monthnum = isset( $_GET['sp_month'] ) ? $_GET['sp_month'] : $monthnum; // Let's figure out when we are if ( !empty($monthnum) && !empty($year) ) { $thismonth = ''.zeroise(intval($monthnum), 2); $thisyear = ''.intval($year); } elseif ( !empty($w) ) { // We need to get the month from MySQL $thisyear = ''.intval(substr($m, 0, 4)); $d = (($w - 1) * 7) + 6; //it seems MySQL's weeks disagree with PHP's $thismonth = $wpdb->get_var("SELECT DATE_FORMAT((DATE_ADD('{$thisyear}0101', INTERVAL $d DAY) ), '%m')"); } elseif ( !empty($m) ) { $thisyear = ''.intval(substr($m, 0, 4)); if ( strlen($m) < 6 ) $thismonth = '01'; else $thismonth = ''.zeroise(intval(substr($m, 4, 2)), 2); } else { $thisyear = gmdate('Y', current_time('timestamp')); $thismonth = gmdate('m', current_time('timestamp')); } $unixmonth = mktime(0, 0 , 0, $thismonth, 1, $thisyear); $last_day = date('t', $unixmonth); // Get the next and previous month and year with at least one post $previous = $wpdb->get_row("SELECT MONTH(post_date) AS month, YEAR(post_date) AS year FROM $wpdb->posts WHERE post_date < '$thisyear-$thismonth-01' AND post_type = 'sp_event' AND ( post_status = 'publish' OR post_status = 'future' ) $in ORDER BY post_date DESC LIMIT 1"); $next = $wpdb->get_row("SELECT MONTH(post_date) AS month, YEAR(post_date) AS year FROM $wpdb->posts WHERE post_date > '$thisyear-$thismonth-{$last_day} 23:59:59' AND post_type = 'sp_event' AND ( post_status = 'publish' OR post_status = 'future' ) $in ORDER BY post_date ASC LIMIT 1"); /* translators: Calendar caption: 1: month name, 2: 4-digit year */ $calendar_caption = _x('%1$s %2$s', 'calendar caption', 'sportspress'); $calendar_output = '
"; if ( $id && $show_all_events_link ) $calendar_output .= '' . SP()->text->string('View all events') . ''; echo apply_filters( 'sportspress_event_calendar', $calendar_output );