1
0
mirror of https://github.com/e107inc/e107.git synced 2025-02-22 07:47:10 +01:00
php-e107/e107_plugins/calendar_menu/next_event_menu.php

153 lines
4.8 KiB
PHP
Raw Normal View History

2006-12-02 04:36:16 +00:00
<?php
/*
+ ----------------------------------------------------------------------------+
| e107 website system
|
| <EFBFBD>Steve Dunstan 2001-2002
| http://e107.org
| jalist@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/calendar_menu/next_event_menu.php,v $
| $Revision: 1.1.1.1 $
| $Date: 2006-12-02 04:34:47 $
| $Author: mcfly_e107 $
|
| 09.11.06 - Cache support added, templating/shortcode tweaks
+----------------------------------------------------------------------------+
*/
if (!defined('e107_INIT')) { exit; }
global $ecal_dir, $tp;
$ecal_dir = e_PLUGIN . "calendar_menu/";
global $ecal_class;
require_once($ecal_dir."ecal_class.php");
$ecal_class = new ecal_class;
$cache_tag = "nq_event_cal_next";
// See if the page is already in the cache
if($cacheData = $e107cache->retrieve($cache_tag, $ecal_class->max_cache_time))
{
echo $cacheData;
return;
}
include_lan(e_PLUGIN."calendar_menu/languages/".e_LANGUAGE.".php");
// Values defined through admin pages
$menu_title = $pref['eventpost_menuheading'];
$days_ahead = $pref['eventpost_daysforward'];
$show_count = $pref['eventpost_numevents'];
$show_recurring = $pref['eventpost_checkrecur'];
$link_in_heading = $pref['eventpost_linkheader'];
// Now set defaults for anything not defined
if (!$menu_title) $menu_title = EC_LAN_140;
if (!$days_ahead) $days_ahead = 30; // Number of days ahead to go
if (!$show_count) $show_count = 3; // Number of events to show
if (!$show_recurring) $show_recurring = 1; // Zero to exclude recurring events
if (!$link_in_heading) $link_in_heading = 0; // Zero for simple heading, 1 to have clickable link
require($ecal_dir."calendar_shortcodes.php");
if (is_readable(THEME."calendar_template.php"))
{ // Needs to be require in case second
require(THEME."calendar_template.php");
}
else
{
require($ecal_dir."calendar_template.php");
}
$site_time = $ecal_class->cal_timedate;
$end_time = $site_time + (86400 * $days_ahead);
// Build up query bit by bit
$cal_qry = "SELECT e.event_id, e.event_rec_m, e.event_rec_y, e.event_start, e.event_thread, e.event_title, e.event_recurring, e.event_allday, ec.*
FROM #event as e LEFT JOIN #event_cat as ec ON e.event_category = ec.event_cat_id
WHERE (((e.event_start >= {$site_time} AND e.event_start < {$end_time}))";
if ($show_recurring > 0)
{ // This won't work properly under some circumstances if $days_ahead is greater than the number of days in the current month plus next month.
// If that matters, need another test on event_rec_y (which is actually the month) - plus the calculation to generate the values
$cal_datearray = $ecal_class->cal_date;
$first_day = $cal_datearray['mday'];
$first_month = $cal_datearray['mon'];
$end_date = mktime(0,0,0,$first_month,$first_day,0) + (86400 * $days_ahead);
$end_datearray = getdate($end_date);
$last_month = $end_datearray['mon'];
$last_day = $end_datearray['mday'];
$cal_qry .= " OR ((e.event_recurring = '1')
AND ";
if ($first_month == $last_month)
{ // All dates within current month
$cal_qry .= "(((e.event_rec_y = {$first_month})
AND (e.event_rec_m >= {$first_day}) AND (e.event_rec_m < {$last_day}) ) ))";
}
else
{ // Dates overlap one or more months
$cal_qry .= "(((e.event_rec_y = {$first_month}) AND (e.event_rec_m >= {$first_day}))
OR ((e.event_rec_y = {$last_month}) AND (e.event_rec_m < {$last_day}))";
$first_month++;
if ($first_month > 12) $first_month = 1;
if ($first_month <> $last_month)
{ // Add a whole month in the middle
$cal_qry .= " OR (e.event_rec_y = {$first_month}) ";
}
$cal_qry .= "))";
}
}
$cal_qry .= ')'.$ecal_class->extra_query; // Puts in class filter if not calendar admin
if (isset($pref['eventpost_fe_set']))
{
$cal_qry .= " AND find_in_set(ec.event_cat_id,'".$pref['eventpost_fe_set']."')";
}
$cal_qry .= " order by e.event_start LIMIT {$show_count}";
$cal_totev = 0;
$cal_text = '';
$cal_row = array();
global $cal_row, $cal_totev;
$cal_totev = $sql->db_Select_gen($cal_qry);
if ($cal_totev > 0)
{
while ($cal_row = $sql->db_Fetch())
{
$cal_totev --; // Can use this to modify inter-event gap
$cal_text .= $tp->parseTemplate($EVENT_CAL_FE_LINE,FALSE,$calendar_shortcodes);
}
}
else
{
$cal_text.= EC_LAN_141;
}
$calendar_title = $menu_title;
if ($link_in_heading == 1)
{
$calendar_title = "<a class='forumlink' href='" . e_PLUGIN . "calendar_menu/event.php' >" . $menu_title . "</a>";
}
// Now handle the data, cache as well
ob_start(); // Set up a new output buffer
$ns->tablerender($calendar_title, $cal_text, 'next_event_menu');
$cache_data = ob_get_flush(); // Get the page content, and display it
$e107cache->set($cache_tag, $cache_data); // Save to cache
?>