2003-04-01 16:12:34 +02:00
< ? php
// $Id$
// b2 Calendar
//
// Contributed work by:
// Alex King
// http://www.alexking.org
//
// Mike Little for his bug fixes
// http://zed1.com/b2/
//
// Fred Cooper for querystring bugfix
// http://frcooper.com/journal/
//
2003-05-26 01:34:28 +02:00
// b2 is copyright (c) 2001, 2002, 2003 by Michel Valdrighi - m@tidakada.com
2003-04-01 16:12:34 +02:00
//
// Contributed portions copyright (c) various authors with permission
//
// original arrow hack by Alex King
$ak_use_arrows = 1 ; // set to 0 to hide the arrows
$ak_use_tooltip_titles = 1 ; // set to 0 to hide the tooltip titles
/* customize these as you wish */
$calendarmonthdisplay = 1 ; // set this to 0 if you don't want to display the month name
$calendarmonthformat = 'F Y' ;
$calendarmonthstart = '<caption class="b2calendarmonth">' ;
$calendarmonthend = '</caption>' ;
$calendartablestart = '<table class="b2calendartable" summary="Monthly calendar with links to each day\'s posts">' ;
$calendartableend = '</table>' ;
$calendarrowstart = '<tr class="b2calendarrow">' ;
$calendarrowend = '</tr>' ;
$calendarheaderdisplay = 1 ; // set this to 0 if you don't want to display the "Mon Tue Wed..." header
$calendarheadercellstart = '<th class="b2calendarheadercell" abbr="$abbr">' ; // please leave $abbr there !
$calendarheadercellend = '</th>' ;
2003-05-24 01:38:26 +02:00
$calendarheaderabbrlength = 1 ; // length of the shortened weekday
2003-04-01 16:12:34 +02:00
$calendarcellstart = '<td class="b2calendarcell">' ;
$calendarcellend = '</td>' ;
$calendaremptycellstart = '<td class="b2calendaremptycell">' ;
$calendaremptycellend = '</td>' ;
$calendaremptycellcontent = ' ' ;
/* stop customizing (unless you really know what you're doing) */
2003-06-13 00:43:14 +02:00
require_once ( 'wp-config.php' );
2003-05-25 14:43:31 +02:00
require_once ( $abspath . $b2inc . '/b2template.functions.php' );
require_once ( $abspath . $b2inc . '/b2functions.php' );
require_once ( $abspath . $b2inc . '/b2vars.php' );
2003-04-01 16:12:34 +02:00
2003-06-13 00:43:14 +02:00
$w = $HTTP_GET_VARS [ 'w' ];
2003-04-01 16:12:34 +02:00
if ( isset ( $calendar ) && ( $calendar != '' )) {
$thisyear = substr ( $calendar , 0 , 4 );
$thismonth = substr ( $calendar , 4 , 2 );
} else {
2003-06-13 00:43:14 +02:00
if ( isset ( $w ) && ( $w != '' )) {
$thisyear = substr ( $m , 0 , 4 );
$w = '' . intval ( $w );
$d = (( $w - 1 ) * 7 ) + 6 ; //it seems mysqls weeks disagree with php's
$thismonth = $wpdb -> get_var ( " SELECT DATE_FORMAT((DATE_ADD(' ${ thisyear } 0101', INTERVAL $d DAY) ), '%m') " );
} else if ( isset ( $m ) && ( $m != '' )) {
2003-04-01 16:12:34 +02:00
$calendar = substr ( $m , 0 , 6 );
$thisyear = substr ( $m , 0 , 4 );
if ( strlen ( $m ) < 6 ) {
2003-06-13 00:43:14 +02:00
$thismonth = '01' ;
2003-04-01 16:12:34 +02:00
} else {
$thismonth = substr ( $m , 4 , 2 );
}
} else {
$thisyear = date ( 'Y' , time () + ( $time_difference * 3600 ));
$thismonth = date ( 'm' , time () + ( $time_difference * 3600 ));
}
}
$archive_link_m = $siteurl . '/' . $blogfilename . $querystring_start . 'm' . $querystring_equal ;
// original arrow hack by Alex King
$ak_previous_year = $thisyear ;
$ak_next_year = $thisyear ;
$ak_previous_month = $thismonth - 1 ;
$ak_next_month = $thismonth + 1 ;
if ( $ak_previous_month == 0 ) {
$ak_previous_month = 12 ;
-- $ak_previous_year ;
}
if ( $ak_next_month == 13 ) {
$ak_next_month = 1 ;
++ $ak_next_year ;
}
2003-06-01 23:50:43 +02:00
$ak_first_post = $wpdb -> get_row ( " SELECT MONTH(MIN(post_date)) AS min_month, YEAR(MIN(post_date)) AS min_year FROM $tableposts " );
2003-04-01 16:12:34 +02:00
// using text links by default
2003-06-06 23:44:16 +02:00
$ak_previous_month_dim = '<span>«</span> ' ;
$ak_previous_month_active = '<a href="' . $archive_link_m . $ak_previous_year . zeroise ( $ak_previous_month , 2 ) . '" style="text-decoration: none;">«</a> ' ;
$ak_next_month_dim = ' <span>»</span>' ;
$ak_next_month_active = ' <a href="' . $archive_link_m . $ak_next_year . zeroise ( $ak_next_month , 2 ) . '" style="text-decoration: none;">»</a>' ;
2003-04-01 16:12:34 +02:00
if ( $ak_use_arrows == 1 ) {
2003-06-01 23:50:43 +02:00
if ( mktime ( 0 , 0 , 0 , $ak_previous_month , 1 , $ak_previous_year ) < mktime ( 0 , 0 , 0 , $ak_first_post -> min_month , 1 , $ak_first_post -> min_year )) {
$ak_previous_month_link = $ak_previous_month_dim ;
} else {
$ak_previous_month_link = $ak_previous_month_active ;
2003-04-01 16:12:34 +02:00
}
if ( mktime ( 0 , 0 , 0 , $ak_next_month , 1 , $ak_next_year ) > mktime ()) {
$ak_next_month_link = $ak_next_month_dim ;
2003-06-01 23:50:43 +02:00
} else {
2003-04-01 16:12:34 +02:00
$ak_next_month_link = $ak_next_month_active ;
}
2003-06-01 23:50:43 +02:00
} else {
2003-04-01 16:12:34 +02:00
$ak_previous_month_link = " " ;
$ak_next_month_link = " " ;
}
$end_of_week = (( $start_of_week + 7 ) % 7 );
$calendarmonthwithpost = 0 ;
while ( $calendarmonthwithpost == 0 ) {
2003-06-01 23:50:43 +02:00
$arc_sql = " SELECT DISTINCT YEAR(post_date), MONTH(post_date), DAYOFMONTH(post_date) AS dom FROM $tableposts WHERE MONTH(post_date) = ' $thismonth ' AND YEAR(post_date) = ' $thisyear ' ORDER BY post_date DESC " ;
2003-04-01 16:12:34 +02:00
$querycount ++ ;
2003-06-01 23:50:43 +02:00
$arc_results = $wpdb -> get_results ( $arc_sql );
if ( $wpdb -> num_rows > 0 ) {
$daysinmonthwithposts = '-' ;
foreach ( $arc_results as $arc_row ) {
$daysinmonthwithposts .= $arc_row -> dom . '-' ;
2003-04-01 16:12:34 +02:00
}
$calendarmonthwithpost = 1 ;
} elseif ( $calendar != '' ) {
$daysinmonthwithposts = '' ;
$calendarmonthwithpost = 1 ;
} else {
$thismonth = zeroise ( intval ( $thismonth ) - 1 , 2 );
if ( $thismonth == '00' ) {
$thismonth = '12' ;
$thisyear = '' . ( intval ( $thisyear ) - 1 );
}
}
}
$daysinmonth = intval ( date ( 't' , mktime ( 0 , 0 , 0 , $thismonth , 1 , $thisyear )));
$datestartofmonth = $thisyear . '-' . $thismonth . '-01' ;
$dateendofmonth = $thisyear . '-' . $thismonth . '-' . $daysinmonth ;
// caution: offset bug inside
$calendarblah = get_weekstartend ( $datestartofmonth , $start_of_week );
if ( mysql2date ( 'w' , $datestartofmonth ) == $start_of_week ) {
$calendarfirst = $calendarblah [ 'start' ] + 1 + 3600 ; // adjust for daylight savings time
} else {
$calendarfirst = $calendarblah [ 'end' ] - 604799 + 3600 ; // adjust for daylight savings time
}
$calendarblah = get_weekstartend ( $dateendofmonth , $end_of_week );
if ( mysql2date ( 'w' , $dateendofmonth ) == $end_of_week ) {
$calendarlast = $calendarblah [ 'start' ] + 1 ;
} else {
$calendarlast = $calendarblah [ 'end' ] + 10000 ;
}
$beforethismonth = zeroise ( intval ( $thismonth ) - 1 , 2 );
$afterthismonth = zeroise ( intval ( $thismonth ) - 1 , 2 );
// here the offset bug is corrected
if (( intval ( date ( 'd' , $calendarfirst )) > 1 ) && ( intval ( date ( 'm' , $calendarfirst )) == intval ( $thismonth ))) {
$calendarfirst = $calendarfirst - 604800 ;
}
// displays everything
echo $calendartablestart . " \n " ;
if ( $calendarmonthdisplay ) {
echo $calendarmonthstart ;
echo $ak_previous_month_link ;
echo date_i18n ( $calendarmonthformat , mktime ( 0 , 0 , 0 , $thismonth , 1 , $thisyear ));
echo $ak_next_month_link ;
echo $calendarmonthend . " \n " ;
}
if ( $calendarheaderdisplay ) {
echo $calendarrowstart . " \n " ;
for ( $i = $start_of_week ; $i < ( $start_of_week + 7 ); $i = $i + 1 ) {
echo str_replace ( '$abbr' , $weekday [( $i % 7 )], $calendarheadercellstart );
2003-05-24 01:38:26 +02:00
echo ucwords ( substr ( $weekday [( $i % 7 )], 0 , $calendarheaderabbrlength ));
2003-04-01 16:12:34 +02:00
echo $calendarheadercellend ;
}
echo $calendarrowend . " \n " ;
}
echo $calendarrowstart . " \n " ;
$newrow = 0 ;
$j = 0 ;
$k = 1 ;
// original tooltip hack by Alex King
if ( $ak_use_tooltip_titles == 1 ) {
2003-06-09 03:02:00 +02:00
$ak_days_result = $wpdb -> get_results ( " SELECT post_title, post_date FROM $tableposts WHERE YEAR(post_date) = ' $thisyear ' AND MONTH(post_date) = ' $thismonth ' AND post_status = 'publish' " );
2003-04-01 16:12:34 +02:00
$ak_day_title_array = array ();
2003-06-13 00:43:14 +02:00
if ( $ak_days_result ) {
foreach ( $ak_days_result as $ak_temp ) {
$ak_day_title_array [] = $ak_temp ;
}
}
2003-04-01 16:12:34 +02:00
if ( strstr ( $HTTP_SERVER_VARS [ " HTTP_USER_AGENT " ], " MSIE " )) {
$ak_title_separator = " \n " ;
$ak_trim = 1 ;
}
else {
$ak_title_separator = " , " ;
$ak_trim = 2 ;
}
}
for ( $i = $calendarfirst ; $i < ( $calendarlast + 86400 ); $i = $i + 86400 ) {
if ( $newrow == 1 ) {
if ( $k > $daysinmonth ) {
break ;
}
echo $calendarrowend . " \n " ;
2003-06-06 23:44:16 +02:00
//if (($i+86400) < ($calendarlast+86400)) {
2003-04-01 16:12:34 +02:00
echo $calendarrowstart . " \n " ;
2003-06-06 23:44:16 +02:00
//}
2003-04-01 16:12:34 +02:00
$newrow = 0 ;
}
if ( date ( 'm' , $i ) != $thismonth ) {
echo $calendaremptycellstart ;
echo $calendaremptycellcontent ;
echo $calendaremptycellend ;
} else {
$k = $k + 1 ;
echo $calendarcellstart ;
$calendarblah = '-' . date ( 'j' , $i ) . '-' ;
$calendarthereisapost = ereg ( $calendarblah , $daysinmonthwithposts );
$calendartoday = ( date ( 'Ymd' , $i ) == date ( 'Ymd' , ( time () + ( $time_difference * 3600 ))));
if ( $calendarthereisapost ) {
// original tooltip hack by Alex King
if ( $ak_use_tooltip_titles == 1 ) { // check to see if we want to show the tooltip titles
$ak_day_titles = " " ;
2003-06-13 00:43:14 +02:00
foreach ( $ak_day_title_array as $post ) {
2003-06-01 23:50:43 +02:00
if ( substr ( $post -> post_date , 8 , 2 ) == date ( 'd' , $i )) {
2003-06-07 01:59:25 +02:00
$ak_day_titles = $ak_day_titles . htmlspecialchars ( stripslashes ( $post -> post_title )) . $ak_title_separator ;
2003-04-01 16:12:34 +02:00
}
}
$ak_day_titles = substr ( $ak_day_titles , 0 , strlen ( $ak_day_titles ) - $ak_trim );
echo '<a href="' . $siteurl . '/' . $blogfilename . $querystring_start . 'm' . $querystring_equal . $thisyear . $thismonth . date ( 'd' , $i ) . '" class="b2calendarlinkpost" title="' . $ak_day_titles . '">' ;
}
else {
echo '<a href="' . $siteurl . '/' . $blogfilename . $querystring_start . 'm' . $querystring_equal . $thisyear . $thismonth . date ( 'd' , $i ) . '" class="b2calendarlinkpost">' ;
}
}
if ( $calendartoday ) {
echo '<span class="b2calendartoday">' ;
}
echo date ( 'j' , $i );
if ( $calendartoday ) {
echo '</span>' ;
}
if ( $calendarthereisapost ) {
echo '</a>' ;
}
echo $calendarcellend . " \n " ;
}
$j = $j + 1 ;
if ( $j == 7 ) {
$j = 0 ;
$newrow = 1 ;
}
}
echo $calendarrowend . " \n " ;
echo $calendartableend ;
?>