GaryJones/Calendar-Category — pull request #5 by kaede1128 (2013-11-18 01:53:10+00:00)
Title: Develop

'widget_calendar', 'description' => __( 'A calendar of your site’s posts') );
$this->WP_Widget( 'calendar_category', __( 'Calendar with Categories' ), $widget_ops );
}

function widget( $args, $instance ) {
extract( $args );
$title = apply_filters( 'widget_title', empty( $instance['title']) ? ' ' : $instance['title'], $instance, $this->id_base );
echo $before_widget;
if ( $title )
echo $before_title . $title . $after_title;
echo '

';
calcat_get_calendar( true, true, $instance['posts_cat'] );
echo '

';
echo $after_widget;
}

function update( $new_instance, $old_instance ) {
$instance = $old_instance;
$instance['title'] = strip_tags( $new_instance['title'] );
$instance['posts_cat'] = $new_instance['posts_cat'];
return $instance;
}

function form( $instance ) {
$instance = wp_parse_args( (array) $instance, array( 'title' => '', 'posts_cat' => -1 ) );
$title = strip_tags( $instance['title'] );
?>

:
$this->get_field_name( 'posts_cat' ), 'selected' => $instance['posts_cat'], 'orderby' => 'Name' , 'hierarchical' => 1, 'show_option_all' => __( 'All Categories' ), 'hide_empty' => '0' ) ); ?>

get_var( "SELECT 1 as test FROM $wpdb->posts WHERE post_type = 'post' AND post_status = 'publish' LIMIT 1" );
if ( ! $gotsome ) {
$cache[ $key ] = '';
wp_cache_set( 'get_calendar', $cache, 'calendar' );
return;
}
}

if ( isset( $_GET['w'] ) )
$w = '' . intval( $_GET['w'] );

// week_begins = 0 stands for Sunday
$week_begins = intval( get_option( 'start_of_week' ) );

// 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 );

// Get the next and previous month and year with at least one post
$previous = $wpdb->get_row( "SELECT DISTINCT MONTH(post_date) AS month, YEAR(post_date) AS year
FROM $wpdb->posts " . calcat_maybe_single_category_joins( $category ) . "
WHERE post_date < '$thisyear-$thismonth-01'" . calcat_maybe_single_category_cat( $category ) . "
AND post_type = 'post' AND post_status = 'publish'
ORDER BY post_date DESC
LIMIT 1" );
$next = $wpdb->get_row( "SELECT	DISTINCT MONTH(post_date) AS month, YEAR(post_date) AS year
FROM $wpdb->posts " . calcat_maybe_single_category_joins( $category ) . "
WHERE post_date >	'$thisyear-$thismonth-01'" . calcat_maybe_single_category_cat( $category ) . "
AND MONTH( post_date ) != MONTH( '$thisyear-$thismonth-01' )
AND post_type = 'post' AND post_status = 'publish'
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' );
$calendar_output = '

' . sprintf( $calendar_caption, $wp_locale->get_month( $thismonth ), date( 'Y', $unixmonth ) ) . '

';

$myweek = array();

for ( $wdcount = 0; $wdcount <= 6; $wdcount++ ) {
$myweek[] = $wp_locale->get_weekday( ( $wdcount + $week_begins ) % 7 );
}

foreach ( $myweek as $wd ) {
$day_name = ( true == $initial ) ? $wp_locale->get_weekday_initial( $wd ) : $wp_locale->get_weekday_abbrev( $wd );
$wd = esc_attr( $wd );
$calendar_output .= "\n\t\t	$day_name";
}

$calendar_output .= '

';

if ( $previous ) {
$calendar_output .= "\n\t\t".'	« ' . $wp_locale->get_month_abbrev( $wp_locale->get_month( $previous->month ) ) . '';
} else {
$calendar_output .= "\n\t\t".'	';
}

$calendar_output .= "\n\t\t".'	';

if ( $next ) {
$calendar_output .= "\n\t\t".'	' . $wp_locale->get_month_abbrev( $wp_locale->get_month( $next->month ) ) . ' »';
} else {
$calendar_output .= "\n\t\t".'	';
}

$calendar_output .= '

';

// Get days with posts
$sql = "SELECT DISTINCT DAYOFMONTH(post_date)
FROM $wpdb->posts " . calcat_maybe_single_category_joins( $category ) . "WHERE MONTH(post_date) = '$thismonth'
AND YEAR(post_date) = '$thisyear'" . calcat_maybe_single_category_cat( $category ) . "
AND post_type = 'post' AND post_status = 'publish'
AND post_date < '" . current_time( 'mysql' ) . '\'';

$dayswithposts = $wpdb->get_results( $sql, ARRAY_N );

if ( $dayswithposts ) {
foreach ( (array) $dayswithposts as $daywith ) {
$daywithpost[] = $daywith[0];
}
} else {
$daywithpost = array();
}

if ( strpos( $_SERVER['HTTP_USER_AGENT'], 'MSIE' ) !== false || stripos( $_SERVER['HTTP_USER_AGENT'], 'camino' ) !== false || stripos( $_SERVER['HTTP_USER_AGENT'], 'safari' ) !== false )
$ak_title_separator = "\n";
else
$ak_title_separator = ', ';

$ak_titles_for_day = array();
$sql = "SELECT DISTINCT ID, post_title, DAYOFMONTH(post_date) as dom "
."FROM $wpdb->posts " . calcat_maybe_single_category_joins( $category )
."WHERE YEAR(post_date) = '$thisyear' "
."AND MONTH(post_date) = '$thismonth' " . calcat_maybe_single_category_cat( $category )
."AND post_date < '".current_time( 'mysql' )."' "
."AND post_type = 'post' AND post_status = 'publish'";

$ak_post_titles = $wpdb->get_results( $sql );
if ( $ak_post_titles ) {
foreach ( (array) $ak_post_titles as $ak_post_title ) {

$post_title = esc_attr( apply_filters( 'the_title', $ak_post_title->post_title, $ak_post_title->ID ) );

if ( empty( $ak_titles_for_day['day_'.$ak_post_title->dom] ) )
$ak_titles_for_day['day_'.$ak_post_title->dom] = '';
if ( empty( $ak_titles_for_day["$ak_post_title->dom"]) ) // first one
$ak_titles_for_day["$ak_post_title->dom"] = $post_title;
else
$ak_titles_for_day["$ak_post_title->dom"] .= $ak_title_separator . $post_title;
}
}

// See how much we should pad in the beginning
$pad = calendar_week_mod( date( 'w', $unixmonth) -$week_begins );
if ( 0 != $pad )
$calendar_output .= "\n\t\t".'	';

$daysinmonth = intval( date( 't', $unixmonth ) );
for ( $day = 1; $day <= $daysinmonth; ++$day ) {
if ( isset( $newrow ) && $newrow )
$calendar_output .= "\n\t
\n\t
\n\t\t";
$newrow = false;

if ( $day == gmdate( 'j', current_time( 'timestamp' )) && $thismonth == gmdate( 'm', current_time( 'timestamp' ) ) && $thisyear == gmdate( 'Y', current_time( 'timestamp' ) ) )
$calendar_output .= '	$day";
else
$calendar_output .= $day;
$calendar_output .= '';

if ( 6 == calendar_week_mod( date( 'w', mktime( 0, 0 , 0, $thismonth, $day, $thisyear ) )-$week_begins ) )
$newrow = true;
}

$pad = 7 - calendar_week_mod( date( 'w', mktime( 0, 0 , 0, $thismonth, $day, $thisyear ) )-$week_begins );
if ( $pad != 0 && $pad != 7 )
$calendar_output .= "\n\t\t".'	';

$calendar_output .= "\n\t
\n\t
\n\t

";

$cache[$key] = $calendar_output;
wp_cache_set( 'get_calendar', $cache, 'calendar' );

if ( $echo )
echo apply_filters( 'get_calendar', $calendar_output );
else
return apply_filters( 'get_calendar', $calendar_output );
}

/**
*
* Optionally return SQL for category join.
*
* @since 1.0
*
* @global wpdb $wpdb
* @param integer $category Category ID, or -1 for all categories
* @return string SQL or empty string
*/
function calcat_maybe_single_category_joins( $category ) {
global $wpdb;
if ( -1 != $category ) {
return "wposts LEFT JOIN $wpdb->postmeta wpostmeta ON wposts.ID = wpostmeta.post_id
LEFT JOIN $wpdb->term_relationships ON (wposts.ID = $wpdb->term_relationships.object_id)
LEFT JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id) ";
}
return '';
}

/**
* Optionally return SQL to query single category.
*
* @since 1.0
*
* @global wpdb $wpdb
* @param integer $category Category ID, or -1 for all categories
* @return string SQL or empty string
*/
function calcat_maybe_single_category_cat( $category ) {
global $wpdb;
if ( -1 != $category )
return "AND $wpdb->term_taxonomy.taxonomy = 'category'
AND $wpdb->term_taxonomy.term_id IN($category) ";
return '';
}

add_action( 'pre_get_posts', 'calcat_amend_query' );
/**
* Make querystring parameter available to $wp_query.
*
* @since 1.0
*
* @global WP_Query $wp_query
*/
function calcat_amend_query() {
global $wp_query;
if ( isset( $_GET['calcat'] ) ) {
$wp_query->query_vars['cat'] = $_GET['calcat'];
}
}