e107inc/e107

View on GitHub
e107_plugins/blogcalendar_menu/blogcalendar_menu.php

Summary

Maintainability
A
0 mins
Test Coverage
D
68%
<?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;