e107_plugins/blogcalendar_menu/blogcalendar_menu.php
<?php
/*
+ ----------------------------------------------------------------------------+
| e107 website system
|
| Copyright (C) 2008-2009 e107 Inc (e107.org)
| http://e107.org
|
|
| Released under the terms and conditions of the
| GNU General Public License (http://gnu.org).
|
| $Source: /cvs_backup/e107_0.8/e107_plugins/blogcalendar_menu/blogcalendar_menu.php,v $
| $Revision$
| $Date$
| $Author$
+----------------------------------------------------------------------------+
| Based on code by: Thomas Bouve (crahan@gmx.net)
*/
if (!defined('e107_INIT')) { exit; }
$parm = isset($parm) && is_string($parm) ? $parm : '';
$cString = 'nq_news_blogacalendar_menu_'.preg_replace('#[^\w]#', '', $parm);
$cached = e107::getCache()->retrieve($cString);
if(false === $cached)
{
$sql = e107::getDb();
require_once(e_PLUGIN."blogcalendar_menu/calendar.php");
require_once(e_PLUGIN."blogcalendar_menu/functions.php");
// ------------------------------
// initialization + fetch options
// ------------------------------
$prefix = e_PLUGIN_ABS."blogcalendar_menu";
$marray = e107::getDate()->terms('month');
$pref['blogcal_ws'] = "monday";
// ----------------------------------------------
// get the requested and current date information
// ----------------------------------------------
list($cur_year, $cur_month, $cur_day) = explode(" ", date("Y n j"));
if (e_PAGE == 'news.php' && strpos(e_QUERY, "day") !== false)
{
$tmp = explode(".", e_QUERY);
// Core now support legacy queries - use just the old way
//$tmp = e107::getUrl()->parseRequest('core:news', 'main', urldecode(e_QUERY));
$item = $tmp[1];
$req_year = intval(substr($item, 0, 4));
$req_month = intval(substr($item, 4, 2));
// decide on the behaviour here, do we highlight
// the day being viewed? or only 'today'?
//$req_day = substr($item, 6, 2);
// if the requested year and month are the current, then add
// the current day to the mix so the calendar highlights it
if (($req_year == $cur_year) && ($req_month == $cur_month))
{
$req_day = $cur_day;
}
else
{
$req_day = "";
}
}
elseif(e_PAGE == 'news.php' && strpos(e_QUERY, "month") !== false)
{
$tmp = explode(".", e_QUERY);
// Core now support legacy queries - use just the old way
//$tmp = e107::getUrl()->parseRequest('core:news', 'main', urldecode(e_QUERY));
$item = $tmp[1];
$req_year = intval(substr($item, 0, 4));
$req_month = intval(substr($item, 4, 2));
// if the requested year and month are the current, then add
// the current day to the mix so the calendar highlights it
if (($req_year == $cur_year) && ($req_month == $cur_month))
{
$req_day = $cur_day;
}
else
{
$req_day = "";
}
}
else
{
$req_year = $cur_year;
$req_month = $cur_month;
$req_day = $cur_day;
}
// -------------------------------
// create the month selection item
// -------------------------------
// get all newsposts since the beginning of the year till now
// -------------------------------------------
// get links to all newsitems in current month
// -------------------------------------------
$month_start = mktime(0, 0, 0, $req_month, 1, $req_year);
$lastday = date("t", $month_start);
$month_end = mktime(23, 59, 59, $req_month, $lastday, $req_year);
$start = mktime(0, 0, 0, 1, 1, 1980);
$end = time();
$year_start = mktime(0, 0, 0, 1, 1, $req_year);
$year_end = mktime(23, 59, 59, 12, 31, $req_year);
$sql->select("news", "news_id, news_datestamp", "news_class IN (".USERCLASS_LIST.") AND (FIND_IN_SET('0', news_render_type) OR FIND_IN_SET(1, news_render_type)) AND news_datestamp > ".intval($start)." AND news_datestamp < ".intval($end));
$links = array();
$months = array();
while ($news = $sql->fetch())
{
$xmonth = date("n", $news['news_datestamp']);
$xyear = date("Y", $news['news_datestamp']);
if (empty($month_links[$xmonth]))
{
$month_links[$xmonth] = e107::getUrl()->create('news/list/month', 'id='.formatDate($xyear, $xmonth));//e_BASE."news.php?month.".formatDate($req_year, $xmonth);
}
// if(($news['news_datestamp'] >= $month_start && $news['news_datestamp'] <= $month_end) || (deftrue('BOOTSTRAP') && $news['news_datestamp'] >= $year_start && $news['news_datestamp'] <= $year_end))
{
$xday = date("j", $news['news_datestamp']);
if (!isset($links[$xyear][$xmonth][$xday]))
{
$links[$xyear][$xmonth][$xday] = e107::getUrl()->create('news/list/day', 'id='.formatDate($xyear, $xmonth, $xday));//e_BASE."news.php?day.".formatDate($req_year, $req_month, $xday);
$day_links[$xday] = e107::getUrl()->create('news/list/day', 'id='.formatDate($xyear, $xmonth, $xday));//e_BASE."news.php?day.".formatDate($req_year, $req_month, $xday);
}
}
$months[$xyear][$xmonth] = 1;
}
// if we're listing the current year, add the current month to the list regardless of posts
if ($req_year == $cur_year)
{
$month_links[$cur_month] = e107::getUrl()->create('news/list/month', 'id='.formatDate($cur_year, $cur_month));//e_BASE."news.php?month.".formatDate($cur_year, $cur_month);
}
// go over the link array and create the option fields
if(!isset($months[$cur_year][$cur_month])) // display current month even if no links available.
{
$months[$cur_year][$cur_month] = 1;
}
// ------------------------
// create and show calendar
// ------------------------
/*
$menu = "<div style='text-align: center;'><table border='0' cellspacing='7'>";
$menu .= "<tr><td>$month_selector";
$menu .= "<div style='text-align:center'>".calendar($req_day, $req_month, $req_year, $day_links, $pref['blogcal_ws'])."</div>";
$menu .= "<div class='forumheader' style='text-align: center; margin-top:2px;'><span class='smalltext'><a href='$prefix/archive.php'>".BLOGCAL_L2."</a></span></div></td></tr>";
$menu .= "</table></div>";
*/
if(deftrue('BOOTSTRAP')) // v2.x
{
$month_selector = '<span class="btn-group pull-right float-right float-end"><a class="btn btn-mini btn-default btn-secondary btn-sm btn-xs " href="#blogCalendar" data-slide="prev" data-bs-slide="prev">‹</a>
<a class="btn btn-mini btn-default btn-secondary btn-sm btn-xs" href="#blogCalendar" data-slide="next" data-bs-slide="next">›</a></span>';
$caption = "<span class='inline-text'>".defset('BLOGCAL_L1')." ".$month_selector."</span>";
$menu = "<div id='blogCalendar' data-interval='false' class='carousel slide blogcalendar-block text-center'>";
$menu .= "<div class='blogcalendar-day-selector carousel-inner'>";
foreach($months as $year=>$val)
{
foreach($val as $month=>$v)
{
$menu .= calendar($req_day, $month, $year, varset($links[$year][$month],array()), $pref['blogcal_ws']);
}
}
$menu .= "</div>";
$menu .= "<div class='blogcalendar-archive-link' >
<a class='blogcalendar-archive-link btn btn-small btn-sm btn-primary' href='$prefix/archive.php'>".BLOGCAL_L2."</a>
</div>
</div>";
}
else // BC
{
$month_selector = "<div class='forumheader' style='text-align: center; margin-bottom: 2px;'>";
$month_selector .= "<select name='activate' onchange='urljump(this.options[selectedIndex].value)' class='tbox'>";
foreach($month_links as $index => $val)
{
$month_selector .= "<option value='".$val."'";
$month_selector .= ($index == $req_month)?" selected='selected'": "";
$month_selector .= ">".$marray[$index]."</option>";
}
$month_selector .= "</select></div>";
$menu = "<div class='blogcalendar-block' style='text-align: center; max-width: 100%; overflow: hidden;'>
<table class='blogcalendar-table' border='0' cellspacing='7' cellpadding='0'>";
$menu .= "<tr><td class='blogcalendar-month-selector'>".$month_selector;
$menu .= "<div class='blogcalendar-day-selector' style='text-align:center'>".calendar($req_day, $req_month, $req_year, $day_links, $pref['blogcal_ws'])."</div>";
$menu .= "<div class='forumheader blogcalendar-archive-link' style='text-align: center; margin-top:2px;'><span class='smalltext'><a class='blogcalendar-archive-link' href='$prefix/archive.php'>".BLOGCAL_L2."</a></span></div></td></tr>";
$menu .= "</table></div>";
$caption = "<span class='form-inline'>".BLOGCAL_L1." ".$req_year."</span>";
}
$cached = $ns->tablerender($caption, $menu, 'blog_calendar', true);
// echo "day= ".$req_day. " month=".$req_month." year=".$req_year." links=".print_a($day_links)." ws=".$pref['blogcal_ws'];
e107::getCache()->set($cString, $menu);
}
echo $cached;