$Date: 2008-04-10 14:23:41 -0400 (Thu, 10 Apr 2008) $
| > $Revision: 1235 $
| > $Author: jason $
+---------------------------------------------------------------------------
|
| > Calendar functions library
| > Module written by Matt Mecham
| > Date started: 12th June 2002
|
| > Module Version Number: 1.0.0
| > DBA Checked: Wed 19 May 2004
| > Quality Checked: Wed 15 Sept. 2004
+--------------------------------------------------------------------------
*/
if ( ! defined( 'IN_IPB' ) )
{
print "
Incorrect access
You cannot access this file directly. If you have recently upgraded, make sure you upgraded all the relevant files.";
exit();
}
class calendar
{
# Classes
var $ipsclass;
var $post;
# Others
var $output = "";
var $base_url = "";
var $html = "";
var $page_title = "";
var $nav;
var $chosen_month = "";
var $chosen_year = "";
var $now_date = "";
var $now = array( 'mday' => '', 'mon' => '', 'year' => '' );
var $our_datestamp = "";
var $offset = "";
var $start_date = "";
var $first_day_array = "";
var $month_words = array();
var $day_words = array();
var $query_month_cache = array();
var $query_bday_cache = array();
var $event_cache = array();
var $shown_events = array();
var $calendar_id = 1;
var $calendar = array();
var $calendar_jump = "";
var $calenar_cache = array();
var $parsed_members = array();
# Permissions
var $can_read = 0;
var $can_post = 0;
var $can_avoid_queue = 0;
var $can_moderate = 0;
/*-------------------------------------------------------------------------*/
// AUTO-RUN
/*-------------------------------------------------------------------------*/
function auto_run()
{
//-----------------------------------------
// Load lang and templs
//-----------------------------------------
$this->ipsclass->load_language('lang_calendar');
$this->ipsclass->load_template('skin_calendar');
$this->ipsclass->vars['bday_show_cal_max'] = 5;
//-----------------------------------------
// Get "this" calendar details
//-----------------------------------------
if ( $this->ipsclass->input['cal_id'] OR $this->ipsclass->input['calendar_id'] )
{
$this->calendar_id = intval($this->ipsclass->input['cal_id']) ? intval($this->ipsclass->input['cal_id']) : intval($this->ipsclass->input['calendar_id']);
}
else
{
$this->calendar_id = 1;
}
//-----------------------------------------
// Sneaky cheaty
//-----------------------------------------
$this->ipsclass->input['_cal_id'] =& $this->calendar_id;
//-----------------------------------------
// Get all calendar details
//-----------------------------------------
if( ! count( $this->ipsclass->cache['calendars'] ) )
{
$this->ipsclass->DB->build_query( array( 'select' => '*', 'from' => 'cal_calendars', 'order' => 'cal_position ASC' ) );
$this->ipsclass->DB->exec_query();
while( $cal = $this->ipsclass->DB->fetch_row() )
{
$this->ipsclass->cache['calendars'][ $cal['cal_id'] ] = $cal;
}
}
if ( count( $this->ipsclass->cache['calendars'] ) AND is_array( $this->ipsclass->cache['calendars'] ) )
{
foreach( $this->ipsclass->cache['calendars'] as $cal_id => $cal )
{
$selected = "";
$perms = unserialize( $cal['cal_permissions'] );
//-----------------------------------------
// Got a perm?
//-----------------------------------------
if ( $this->ipsclass->check_perms( $perms['perm_read'] ) != TRUE )
{
continue;
}
if ( $cal['cal_id'] == $this->calendar_id )
{
$this->calendar = array_merge( $cal, $perms);
$selected = " selected='selected'";
}
$this->calendar_cache[ $cal['cal_id'] ] = array_merge( $cal, $perms);
$this->calendar_jump .= "\n";
}
}
if( ! $this->calendar )
{
if( count( $this->calendar_cache ) )
{
$tmp_resort = $this->calendar_cache;
ksort($tmp_resort);
reset($tmp_resort);
$default_calid = key( $tmp_resort );
$this->calendar_id = $default_calid;
$this->calendar = $tmp_resort[ $default_calid ];
unset( $tmp_resort );
}
}
//-----------------------------------------
// Got viewing perms?
//-----------------------------------------
$this->build_permissions();
if ( ! $this->can_read )
{
$this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'cal_no_perm') );
}
//-----------------------------------------
// Prep our chosen dates
//-----------------------------------------
// There is something whacky with getdate and GMT
// This handrolled method seems to take into account
// DST where getdate refuses.
$a = explode( ',', gmdate( 'Y,n,j,G,i,s', time() + $this->ipsclass->get_time_offset() ) );
$this->now_date = array(
'year' => $a[0],
'mon' => $a[1],
'mday' => $a[2],
'hours' => $a[3],
'minutes' => $a[4],
'seconds' => $a[5]
);
if ( isset($this->ipsclass->input['year']) )
{
$this->ipsclass->input['y'] = $this->ipsclass->input['year'];
}
$this->chosen_month = ( !isset($this->ipsclass->input['m']) OR !intval($this->ipsclass->input['m']) ) ? $this->now_date['mon'] : intval($this->ipsclass->input['m']);
$this->chosen_year = ( !isset($this->ipsclass->input['y']) OR !intval($this->ipsclass->input['y']) ) ? $this->now_date['year'] : intval($this->ipsclass->input['y']);
//-----------------------------------------
// Make sure the date is in range.
//-----------------------------------------
if ( ! checkdate( $this->chosen_month, 1 , $this->chosen_year ) )
{
$this->chosen_month = $this->now_date['mon'];
$this->chosen_year = $this->now_date['year'];
}
//-----------------------------------------
// Get the timestamp for our chosen date
//-----------------------------------------
$this->our_datestamp = mktime( 0,0,1, $this->chosen_month, 1, $this->chosen_year);
$this->first_day_array = $this->ipsclass->date_getgmdate($this->our_datestamp);
//-----------------------------------------
// Finally, build up the lang arrays
//-----------------------------------------
$this->month_words = array( $this->ipsclass->lang['M_1'] , $this->ipsclass->lang['M_2'] , $this->ipsclass->lang['M_3'] ,
$this->ipsclass->lang['M_4'] , $this->ipsclass->lang['M_5'] , $this->ipsclass->lang['M_6'] ,
$this->ipsclass->lang['M_7'] , $this->ipsclass->lang['M_8'] , $this->ipsclass->lang['M_9'] ,
$this->ipsclass->lang['M_10'], $this->ipsclass->lang['M_11'], $this->ipsclass->lang['M_12'] );
if( !$this->ipsclass->vars['ipb_calendar_mon'] )
{
$this->day_words = array( $this->ipsclass->lang['D_0'], $this->ipsclass->lang['D_1'], $this->ipsclass->lang['D_2'],
$this->ipsclass->lang['D_3'], $this->ipsclass->lang['D_4'], $this->ipsclass->lang['D_5'],
$this->ipsclass->lang['D_6'] );
}
else
{
$this->day_words = array( $this->ipsclass->lang['D_1'], $this->ipsclass->lang['D_2'], $this->ipsclass->lang['D_3'],
$this->ipsclass->lang['D_4'], $this->ipsclass->lang['D_5'], $this->ipsclass->lang['D_6'],
$this->ipsclass->lang['D_0'] );
}
switch( $this->ipsclass->input['code'] )
{
case 'newevent':
$this->cal_event_form('add');
break;
case 'addnewevent':
$this->cal_event_save('add');
break;
case 'edit':
$this->cal_event_form('edit');
break;
case 'doedit':
$this->cal_event_save('edit');
break;
case 'event_approve':
$this->event_approve();
break;
case 'showday':
$this->show_day();
break;
case 'showevent':
$this->show_event();
break;
case 'birthdays':
$this->show_birthdays();
break;
case 'showweek':
$this->show_week();
break;
case 'delete':
$this->cal_delete();
break;
case 'find':
$this->find_date();
break;
default:
$this->show_month();
break;
}
if ($this->page_title == "")
{
$this->page_title = $this->ipsclass->vars['board_name']." ".$this->ipsclass->lang['page_title'];
}
if (! is_array($this->nav) )
{
$this->nav[] = "{$this->ipsclass->lang['page_title']}";
$this->nav[] = "{$this->calendar['cal_title']}";
}
$this->ipsclass->print->add_output("$this->output");
$this->ipsclass->print->do_output( array( 'TITLE' => $this->page_title, 'JS' => 0, 'NAV' => $this->nav ) );
}
/*-------------------------------------------------------------------------*/
// Event Approve
/*-------------------------------------------------------------------------*/
function cal_delete()
{
//-----------------------------------------
// INIT
//-----------------------------------------
$cal_id = intval( $this->ipsclass->input['cal_id'] );
$event_id = intval( $this->ipsclass->input['event_id'] );
$md5check = trim( $this->ipsclass->input['md5check'] );
//-----------------------------------------
// Get permissions
//-----------------------------------------
$this->build_permissions( $cal_id );
//-----------------------------------------
// Check
//-----------------------------------------
$this->ipsclass->DB->build_query( array( 'select' => '*', 'from' => 'cal_events', 'where' => "event_id=$event_id AND event_calendar_id=$cal_id" ) );
$this->ipsclass->DB->exec_query();
$memcheck = $this->ipsclass->DB->fetch_row();
if ( ! $cal_id OR ! $event_id )
{
$this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'no_permission') );
}
if ( ! $this->can_moderate && ( $this->ipsclass->member['id'] > 0 && $this->ipsclass->member['id'] <> $memcheck['event_member_id'] ) )
{
$this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'no_permission') );
}
//-----------------------------------------
// Check MD5
//-----------------------------------------
if ( $md5check != $this->ipsclass->md5_check )
{
$this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'no_permission') );
}
//-----------------------------------------
// Delete...
//-----------------------------------------
$this->ipsclass->DB->build_and_exec_query( array( 'delete' => 'cal_events', 'where' => "event_id=$event_id AND event_calendar_id=$cal_id" ) );
//-----------------------------------------
// Recache...
//-----------------------------------------
$this->_call_recache();
//-----------------------------------------
// Boing...
//-----------------------------------------
$this->ipsclass->print->redirect_screen( $this->ipsclass->lang['cal_event_delete'] , "act=calendar&cal_id={$cal_id}" );
}
/*-------------------------------------------------------------------------*/
// Event Approve
/*-------------------------------------------------------------------------*/
function event_approve()
{
//-----------------------------------------
// INIT
//-----------------------------------------
$cal_id = intval( $this->ipsclass->input['cal_id'] );
$event_id = intval( $this->ipsclass->input['event_id'] );
$approve = intval( $this->ipsclass->input['approve'] );
$modfilter = trim( $this->ipsclass->input['modfilter'] );
$quicktime = trim( $this->ipsclass->input['qt'] );
$md5check = trim( $this->ipsclass->input['md5check'] );
list( $month, $day, $year ) = explode( "-", $quicktime );
//-----------------------------------------
// Get permissions
//-----------------------------------------
$this->build_permissions( $cal_id );
//-----------------------------------------
// Check
//-----------------------------------------
if ( ! $this->can_moderate )
{
$this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'no_permission') );
}
//-----------------------------------------
// Check MD5
//-----------------------------------------
if ( $md5check != $this->ipsclass->md5_check )
{
$this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'no_permission') );
}
//-----------------------------------------
// Check Dates
//-----------------------------------------
if ( ! $day OR ! $month OR ! $year )
{
$this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'no_permission') );
}
//-----------------------------------------
// Get Event
//-----------------------------------------
$event = $this->ipsclass->DB->build_and_exec_query( array( 'select' => '*', 'from' => 'cal_events', 'where' => "event_calendar_id={$cal_id} and event_id={$event_id}" ) );
if ( ! $event['event_id'] )
{
$this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'no_permission') );
}
//-----------------------------------------
// Update event...
//-----------------------------------------
$this->ipsclass->DB->do_update( 'cal_events', array( 'event_approved' => $event['event_approved'] ? 0 : 1 ), 'event_id='.$event_id );
//-----------------------------------------
// Recache...
//-----------------------------------------
$this->_call_recache();
//-----------------------------------------
// Boink...
//-----------------------------------------
$this->ipsclass->boink_it( $this->ipsclass->base_url."act=calendar&cal_id={$cal_id}&modfilter={$modfilter}&code=showday&y={$year}&m={$month}&d={$day}");
}
/*-------------------------------------------------------------------------*/
// Build Permissions
/*-------------------------------------------------------------------------*/
function build_permissions( $cal_id=0 )
{
$this->can_read = 0;
$this->can_post = 0;
$this->can_avoid_queue = 0;
$this->can_moderate = 0;
//-----------------------------------------
// Got an idea?
//-----------------------------------------
if ( ! $cal_id )
{
$cal_id = $this->calendar_id;
}
$calendar = $this->calendar_cache[ $cal_id ];
//-----------------------------------------
// Read
//-----------------------------------------
if ( $this->ipsclass->check_perms( $calendar['perm_read'] ) == TRUE )
{
$this->can_read = 1;
}
//-----------------------------------------
// Post
//-----------------------------------------
if ( $this->ipsclass->check_perms( $calendar['perm_post'] ) == TRUE )
{
$this->can_post = 1;
}
//-----------------------------------------
// Mod Queue
//-----------------------------------------
if ( $this->ipsclass->check_perms( $calendar['perm_nomod'] ) == TRUE )
{
$this->can_avoid_queue = 1;
}
//-----------------------------------------
// Moderate
//-----------------------------------------
if ( $this->ipsclass->member['g_is_supmod'] )
{
$this->can_moderate = 1;
}
}
/*-------------------------------------------------------------------------*/
// Find
/*-------------------------------------------------------------------------*/
function find_date()
{
if ( $this->ipsclass->input['what'] )
{
if ( $this->ipsclass->input['what'] == 'thismonth' )
{
$this->ipsclass->boink_it( $this->ipsclass->base_url."act=calendar&cal_id={$this->calendar_id}&m={$this->now_date['mon']}&y={$this->now_date['year']}" );
}
else
{
$time = time() + $this->ipsclass->get_time_offset();
$this->ipsclass->boink_it( $this->ipsclass->base_url."act=calendar&cal_id={$this->calendar_id}&code=showweek&week={$time}" );
}
}
else
{
$this->show_month();
}
}
/*-------------------------------------------------------------------------*/
// Show WEEK
/*-------------------------------------------------------------------------*/
function show_week()
{
$in_week = intval($this->ipsclass->input['week']);
//-----------------------------------------
// Get start of week
//-----------------------------------------
$startweek = $this->ipsclass->date_getgmdate( $in_week );
if( !$this->ipsclass->vars['ipb_calendar_mon'] )
{
//-----------------------------------------
// Not Sunday? Go back..
//-----------------------------------------
$startweek['wday'] = intval($startweek['wday']);
if ( $startweek['wday'] > 0 )
{
while ( $startweek['wday'] != 0 )
{
$startweek['wday']--;
$in_week -= 86400;
}
$startweek = $this->ipsclass->date_getgmdate( $in_week );
}
}
else
{
//-----------------------------------------
// Not Monday, rewind...
// date_getgmdate will set weekday start to 1
// PHP 5.1 allows for 'N' which will fix
// this, but we support earlier versions..
//-----------------------------------------
if ( $startweek['wday'] != 1 )
{
$startweek['wday'] = $startweek['wday'] == 0 ? 7 : $startweek['wday'];
while ( $startweek['wday'] != 1 )
{
$startweek['wday']--;
$in_week -= 86400;
}
$startweek = $this->ipsclass->date_getgmdate( $in_week );
}
}
//-----------------------------------------
// Get end of week
//-----------------------------------------
$endweek = $this->ipsclass->date_getgmdate( $in_week + 604800 );
$our_datestamp = gmmktime( 0,0,0, $startweek['mon'], $startweek['mday'], $startweek['year']);
$our_timestamp = $in_week;
$seen_days = array(); // Holds yday
$seen_ids = array();
//-----------------------------------------
// Figure out the next / previous links
//-----------------------------------------
$prev_month = $this->get_prev_month($this->chosen_month, $this->chosen_year);
$next_month = $this->get_next_month($this->chosen_month, $this->chosen_year);
$prev_week = $this->ipsclass->date_getgmdate( $in_week - 604800 );
$next_week = $this->ipsclass->date_getgmdate( $in_week + 604800 );
$this->output .= $this->ipsclass->compiled_templates['skin_calendar']->cal_week_content( $startweek['mday'], $this->month_words[$startweek['mon'] - 1], $startweek['year'], $prev_week, $next_week);
$last_month_id = -1;
//-----------------------------------------
// Get the events
//-----------------------------------------
$this->get_events_sql($startweek['mon'], $startweek['year']);
//-----------------------------------------
// Print each effing day :D
//-----------------------------------------
$cal_output = "";
for ( $i = 0 ; $i <= 6 ; $i++ )
{
$year = gmdate('Y', $our_datestamp);
$month = gmdate('n', $our_datestamp);
$day = gmdate('j', $our_datestamp);
$today = $this->ipsclass->date_getgmdate($our_datestamp);
$this_day_events = "";
if ( $last_month_id != $today['mon'] )
{
$last_month_id = $today['mon'];
$cal_output .= $this->ipsclass->compiled_templates['skin_calendar']->cal_week_monthbar( $this->month_words[$today['mon'] - 1], $today['year'] );
//-----------------------------------------
// Get the birthdays from the database
//-----------------------------------------
if ( $this->ipsclass->vars['show_bday_calendar'] )
{
$birthdays = array();
$this->get_birthday_sql($today['mon']);
$birthdays = $this->query_bday_cache[ $today['mon'] ];
}
//-----------------------------------------
// Get the events
//-----------------------------------------
$this->get_events_sql($month, $year);
}
$events = $this->get_day_events( $month, $day, $year );
$queued_event = 0;
if ( is_array( $events ) AND count( $events ) )
{
foreach( $events as $event )
{
if ( !isset($this->shown_events[ $month.'-'.$day.'-'.$year ][ $event['event_id'] ]) OR !$this->shown_events[ $month.'-'.$day.'-'.$year ][ $event['event_id'] ] )
{
//-----------------------------------------
// Recurring
//-----------------------------------------
if ( $event['recurring'] )
{
$this_day_events .= $this->ipsclass->compiled_templates['skin_calendar']->cal_events_wrap_recurring( $event );
}
else if ( $event['single'] )
{
$this_day_events .= $this->ipsclass->compiled_templates['skin_calendar']->cal_events_wrap( $event );
}
else
{
$this_day_events .= $this->ipsclass->compiled_templates['skin_calendar']->cal_events_wrap_range( $event );
}
$this->shown_events[ $month.'-'.$day.'-'.$year ][ $event['event_id'] ] = 1;
}
//-----------------------------------------
// Queued events?
//-----------------------------------------
if ( ! $event['event_approved'] AND $this->can_moderate )
{
$queued_event = 1;
}
}
}
//-----------------------------------------
// Birthdays
//-----------------------------------------
if ( $this->calendar['cal_bday_limit'] )
{
if ( isset($birthdays[ $today['mday'] ]) and count( $birthdays[ $today['mday'] ] ) > 0 )
{
$no_bdays = count($birthdays[ $today['mday'] ]);
if ( $this->calendar['cal_bday_limit'] and $no_bdays <= $this->calendar['cal_bday_limit'] )
{
foreach( $birthdays[ $today['mday'] ] as $user )
{
$this_day_events .= $this->ipsclass->compiled_templates['skin_calendar']->cal_week_events_wrap(
"code=birthdays&y=".$today['year']."&m=".$today['mon']."&d=".$today['mday'],
$user['members_display_name'].$this->ipsclass->lang['bd_birthday']
);
}
}
else
{
$this_day_events .= $this->ipsclass->compiled_templates['skin_calendar']->cal_week_events_wrap(
"code=birthdays&y=".$today['year']."&m=".$today['mon']."&d=".$today['mday'],
sprintf( $this->ipsclass->lang['entry_birthdays'], count($birthdays[ $today['mday'] ]) )
);
}
}
}
if ($this_day_events == "")
{
$this_day_events = ' ';
}
if( $this->ipsclass->vars['ipb_calendar_mon'] )
{
// Reset if Monday is first day
$today['wday'] = $today['wday'] == 0 ? 6 : $today['wday'] - 1;
}
$cal_output .= $this->ipsclass->compiled_templates['skin_calendar']->cal_week_dayentry( $this->day_words[ $today['wday'] ], $today['mday'], $this->month_words[$today['mon'] - 1], $today['mon'], $today['year'], $this_day_events, $queued_event );
$our_datestamp += 86400;
unset($this_day_events);
}
//-----------------------------------------
// Switch the HTML tags...
//-----------------------------------------
$this->output = str_replace( "" , $cal_output, $this->output );
$this->output = str_replace( "" , $this->get_month_dropdown(), $this->output );
$this->output = str_replace( "" , $this->get_year_dropdown() , $this->output );
//-----------------------------------------
// Get prev / this / next calendars
//-----------------------------------------
$this->output = str_replace( "", $this->get_mini_calendar( $prev_month['month_id'], $prev_month['year_id'] ), $this->output );
$this->output = str_replace( "", $this->get_mini_calendar( $this->chosen_month , $this->chosen_year ), $this->output );
$this->output = str_replace( "", $this->get_mini_calendar( $next_month['month_id'], $next_month['year_id'] ), $this->output );
$this->nav[] = "{$this->ipsclass->lang['page_title']}";
$this->nav[] = "{$this->calendar['cal_title']}";
$this->nav[] = $this->month_words[$this->chosen_month - 1]." ".$this->chosen_year;
}
/*-------------------------------------------------------------------------*/
// SHOW MONTH
/*-------------------------------------------------------------------------*/
function show_month()
{
//-----------------------------------------
// Figure out the next / previous links
//-----------------------------------------
$prev_month = $this->get_prev_month($this->chosen_month, $this->chosen_year);
$next_month = $this->get_next_month($this->chosen_month, $this->chosen_year);
$this->output .= $this->ipsclass->compiled_templates['skin_calendar']->cal_main_content($this->month_words[$this->chosen_month - 1], $this->chosen_year, $prev_month, $next_month, $this->calendar_jump, $this->calendar_id);
//-----------------------------------------
// Print the days table top row
//-----------------------------------------
$day_output = "";
$cal_output = "";
foreach ($this->day_words as $day)
{
$day_output .= $this->ipsclass->compiled_templates['skin_calendar']->cal_day_bit($day);
}
$cal_output = $this->get_month_events($this->chosen_month, $this->chosen_year);
//-----------------------------------------
// Switch the HTML tags...
//-----------------------------------------
$this->output = str_replace( "", $day_output, $this->output );
$this->output = str_replace( "" , $cal_output, $this->output );
$this->output = str_replace( "" , $this->get_month_dropdown(), $this->output );
$this->output = str_replace( "" , $this->get_year_dropdown() , $this->output );
//-----------------------------------------
// Get prev / this / next calendars
//-----------------------------------------
$this->output = str_replace( "", $this->get_mini_calendar( $prev_month['month_id'], $prev_month['year_id'] ), $this->output );
$this->output = str_replace( "", $this->get_mini_calendar( $this->chosen_month , $this->chosen_year ), $this->output );
$this->output = str_replace( "", $this->get_mini_calendar( $next_month['month_id'], $next_month['year_id'] ), $this->output );
$this->nav[] = "{$this->ipsclass->lang['page_title']}";
$this->nav[] = "{$this->calendar['cal_title']}";
$this->nav[] = $this->month_words[$this->chosen_month - 1]." ".$this->chosen_year;
}
/*-------------------------------------------------------------------------*/
// POST NEW CALENDAR EVENT
/*-------------------------------------------------------------------------*/
function cal_event_form( $type='add' )
{
//-----------------------------------------
// Load post class
//-----------------------------------------
require_once( ROOT_PATH.'sources/classes/post/class_post.php' );
$this->post = new class_post();
$this->post->ipsclass =& $this->ipsclass;
$this->post->load_classes();
//-----------------------------------------
// INIT
//-----------------------------------------
$event_id = isset($this->ipsclass->input['event_id']) ? intval( $this->ipsclass->input['event_id'] ) : 0;
$calendar_id = isset($this->ipsclass->input['calendar_id']) ? intval( $this->ipsclass->input['calendar_id'] ) : 0;
$form_type = $this->ipsclass->input['formtype'];
$recur_menu = "";
$calendar_jump = "";
$divhide = "none";
//-----------------------------------------
// CHECK
//-----------------------------------------
if ( ! $this->ipsclass->member['id'])
{
$this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'no_permission') );
}
//-----------------------------------------
// Got permission to post to this calendar?
//-----------------------------------------
$this->build_permissions( $calendar_id );
if ( ! $this->can_post )
{
$this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'no_permission') );
}
//-----------------------------------------
// Edit calendar option
//-----------------------------------------
foreach( $this->calendar_cache as $data )
{
if ( $this->ipsclass->check_perms( $data['perm_post'] ) == TRUE AND $this->ipsclass->check_perms( $data['perm_read'] ) == TRUE )
{
$selected = $calendar_id == $data['cal_id'] ? ' selected="selected" ' : '';
$calendar_jump .= "\n";
}
}
//-----------------------------------------
// WHICHISIT
//-----------------------------------------
if ( $type == 'add' )
{
$tmp = isset($this->ipsclass->input['nd']) ? explode( "-", $this->ipsclass->input['nd'] ) : array();
$nd = isset($tmp[2]) ? intval( $tmp[2] ) : 0;
$nm = isset($tmp[1]) ? intval( $tmp[1] ) : 0;
$ny = isset($tmp[0]) ? intval( $tmp[0] ) : 0;
$public = "";
$private = "";
$event = array( 'event_smilies' => 1, 'event_content' => '' );
$fd = $nd = $nd ? $nd : $this->now['mday'];
$fm = $nm = $nm ? $nm : $this->now['mon'];
$fy = $ny = $ny ? $ny : $this->now['year'];
$tz_offset = ( $this->ipsclass->member['time_offset'] != "" ) ? $this->ipsclass->member['time_offset'] : $this->ipsclass->vars['time_offset'];
$recur_menu = "";
$code = 'addnewevent';
$button = $this->ipsclass->lang['calendar_submit'];
$event['event_timeset'] = "";
}
else
{
if ( ! $event_id )
{
$this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'cal_no_events') );
}
//-----------------------------------------
// Get the event
//-----------------------------------------
$this->ipsclass->DB->simple_construct( array( 'select' => '*', 'from' => 'cal_events', 'where' => "event_id=$event_id" ) );
$this->ipsclass->DB->simple_exec();
if ( ! $event = $this->ipsclass->DB->fetch_row() )
{
$this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'cal_no_events') );
}
//-----------------------------------------
// Do we have permission to edit this event?
//-----------------------------------------
if ( $this->ipsclass->member['id'] == $event['event_member_id'] )
{
$can_edit = 1;
}
else if ( $this->ipsclass->member['g_is_supmod'] == 1 )
{
$can_edit = 1;
}
else
{
$can_edit = 0;
}
if ( $can_edit != 1 )
{
$this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'cal_no_events') );
}
//-----------------------------------------
// Do we have permission to see the event?
//-----------------------------------------
if ( $event['event_perms'] != '*' )
{
$this_member_mgroups[] = $this->ipsclass->member['mgroup'];
if( $this->ipsclass->member['mgroup_others'] )
{
$this_member_mgroups = array_merge( $this_member_mgroups, explode( ",", $this->ipsclass->clean_perm_string( $this->ipsclass->member['mgroup_others'] ) ) );
}
$check = 0;
foreach( $this_member_mgroups as $this_member_mgroup )
{
if ( preg_match( "/(^|,)".$this_member_mgroup."(,|$)/", $event['event_perms'] ) )
{
$check = 1;
}
}
if( $check == 0 )
{
$this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'cal_no_events') );
}
}
$tz_offset = $event['event_tz'];
//-----------------------------------------
// Date stuff
//-----------------------------------------
$convert_hours = 0;
if( $event['event_timeset'] )
{
$divhide = "";
$hour_min = explode(":", $event['event_timeset']);
$convert_hours = ($hour_min[0] * 3600) + ($hour_min[1] * 60);
}
if( $tz_offset && $event['event_timeset'] AND !$event['event_all_day'] )
{
$convert_hours = $tz_offset * 3600 + $convert_hours;
}
$_unix_from = explode('-', gmdate('n-j-Y', $event['event_unix_from'] - $convert_hours ));
if( $convert_hours && $event['event_unix_to'] )
{
$event['event_unix_to'] -= $convert_hours;
}
$_unix_to = explode('-', gmdate('n-j-Y', $event['event_unix_to'] ));
$nd = $_unix_from[1];
$nm = $_unix_from[0];
$ny = $_unix_from[2];
$fd = $_unix_to[1];
$fm = $_unix_to[0];
$fy = $_unix_to[2];
//-----------------------------------------
// Form stuff
//-----------------------------------------
if ( $event['event_recurring'] )
{
$form_type = 'recur';
}
else if ( ! $event['event_recurring'] AND $event['event_unix_to'] )
{
$form_type = 'range';
}
else
{
$form_type = 'single';
}
//-----------------------------------------
// Private?
//-----------------------------------------
if ( $event['event_private'] == 1 )
{
$private = ' selected';
}
else
{
$public = ' selected';
}
//-----------------------------------------
// Recur stuff
//-----------------------------------------
$recur_menu .= $event['event_recurring'] == '1' ? ""
: "";
$recur_menu .= $event['event_recurring'] == '2' ? ""
: "";
$recur_menu .= $event['event_recurring'] == '3' ? ""
: "";
$code = 'doedit';
$button = $this->ipsclass->lang['calendar_edit_submit'];
}
//-----------------------------------------
// Do TZ form
//-----------------------------------------
$this->ipsclass->load_language( 'lang_ucp' );
$time_select = "";
//-----------------------------------------
// Start off nav
//-----------------------------------------
$this->nav[] = "{$this->ipsclass->lang['page_title']}";
$this->nav[] = "{$this->calendar['cal_title']}";
$this->nav[] = $this->ipsclass->lang['post_new_event'];
//-----------------------------------------
// Start off form
//-----------------------------------------
$this->output .= $this->ipsclass->compiled_templates['skin_calendar']->calendar_start_form( $code, $this->calendar_id, $form_type, $event_id );
$this->output .= $this->ipsclass->compiled_templates['skin_calendar']->table_top($this->ipsclass->lang['post_new_event']);
$this->output .= $this->ipsclass->compiled_templates['skin_calendar']->calendar_event_title( isset($event['event_title']) ? $event['event_title'] : '' );
//-----------------------------------------
// Alright... Which form type?
//-----------------------------------------
if ( $form_type == 'single' )
{
$this->output .= $this->ipsclass->compiled_templates['skin_calendar']->calendar_choose_date_single(
$this->get_day_dropdown($nd), $this->get_month_dropdown($nm), $this->get_year_dropdown($ny) );
}
else if ( $form_type == 'range' )
{
$this->output .= $this->ipsclass->compiled_templates['skin_calendar']->calendar_choose_date_range(
$this->get_day_dropdown($nd), $this->get_month_dropdown($nm), $this->get_year_dropdown($ny),
$this->get_day_dropdown($fd), $this->get_month_dropdown($fm), $this->get_year_dropdown($fy) );
}
else
{
$this->output .= $this->ipsclass->compiled_templates['skin_calendar']->calendar_choose_date_recur(
$this->get_day_dropdown($nd), $this->get_month_dropdown($nm), $this->get_year_dropdown($ny),
$recur_menu,
array(
'd' => $this->get_day_dropdown($fd),
'm' => $this->get_month_dropdown($fm),
'y' => $this->get_year_dropdown($fy)
) );
}
$this->output .= $this->ipsclass->compiled_templates['skin_calendar']->calendar_event_type( $public, $private, $time_select, $this->calendar_jump,
array('formtype' => $form_type, 'timestart' => $event['event_timeset'], 'divhide' => $divhide, 'checked' => $divhide == '' ? "checked='checked'" : '' ) );
if ($this->ipsclass->member['mgroup'] == $this->ipsclass->vars['admin_group'])
{
//-----------------------------------------
// Get all the group ID's and names from
// the DB and build the selection box
//-----------------------------------------
$group_choices = "";
foreach( $this->ipsclass->cache['group_cache'] as $r )
{
$selected = "";
if ( isset($event['event_perms']) AND preg_match( "/(^|,)".$r['g_id']."(,|$)/", $event['event_perms'] ) )
{
$selected = ' selected';
}
$group_choices .= "\n";
}
$this->output .= $this->ipsclass->compiled_templates['skin_calendar']->calendar_admin_group_box($group_choices);
}
//-----------------------------------------
// Using RTE? Convert BBCode to HTML
//-----------------------------------------
if ( $event['event_content'] )
{
$this->post->parser->parse_html = 0;
$this->post->parser->parse_smilies = intval($event['event_smilies']);
$this->post->parser->parse_bbcode = 1;
if ( $this->post->han_editor->method == 'rte' )
{
#$event['event_content'] = $this->post->parser->pre_edit_parse( $event['event_content'] );
$event['event_content'] = $this->post->parser->convert_ipb_html_to_html( $event['event_content'] );
}
else
{
$event['event_content'] = $this->post->parser->pre_edit_parse( $event['event_content'] );
}
}
//-----------------------------------------
// Generate text editor
//-----------------------------------------
$this->output .= $this->post->html_add_smilie_box( $this->post->html_post_body( $event['event_content'] ) );
$this->output = str_replace( '' , $this->ipsclass->compiled_templates['skin_post']->get_box_enableemo( $event['event_smilies'] ? 'checked="checked"' : "" ) , $this->output );
$this->output .= $this->ipsclass->compiled_templates['skin_calendar']->calendar_end_form( $button );
}
/*-------------------------------------------------------------------------*/
// ADD NEW CALENDAR EVENT TO THE DB
/*-------------------------------------------------------------------------*/
function cal_event_save( $type='add' )
{
//-----------------------------------------
// Load post class
//-----------------------------------------
require_once( ROOT_PATH.'sources/classes/post/class_post.php' );
$this->post = new class_post();
$this->post->ipsclass =& $this->ipsclass;
$this->post->load_classes();
//-----------------------------------------
// INIT
//-----------------------------------------
$read_perms = '*';
$end_day = "";
$end_month = "";
$end_year = "";
$end_date = "";
$event_ranged = 0;
$event_repeat = 0;
$can_edit = 0;
$form_type = $this->ipsclass->input['formtype'];
$event_id = intval($this->ipsclass->input['event_id']);
$calendar_id = intval( $this->ipsclass->input['calendar_id'] );
$allow_emoticons = $this->ipsclass->input['enableemo'] == 'yes' ? 1 : 0;
$private_event = $this->ipsclass->input['e_type'] == 'private' ? 1 : 0;
$event_title = trim($this->ipsclass->input['event_title']);
$day = intval($this->ipsclass->input['e_day']);
$month = intval($this->ipsclass->input['e_month']);
$year = intval($this->ipsclass->input['e_year']);
$end_day = intval($this->ipsclass->input['end_day']);
$end_month = intval($this->ipsclass->input['end_month']);
$end_year = intval($this->ipsclass->input['end_year']);
$recur_unit = intval($this->ipsclass->input['recur_unit']);
$event_tz = intval($this->ipsclass->input['event_tz']);
$offset = 0;
$event_all_day = 0;
$event_calendar_id = intval($this->ipsclass->input['event_calendar_id']);
$set_time = intval($this->ipsclass->input['set_times']);
$hour_min = array();
if( $set_time )
{
$hour_min = strstr($this->ipsclass->input['event_timestart'], ":") ? explode(":", $this->ipsclass->input['event_timestart']) : 0;
if( intval($hour_min[0]) < 0 || intval($hour_min[0]) > 23 )
{
$hour_min[0] = 0;
}
if( intval($hour_min[1]) < 0 || intval($hour_min[1]) > 59 )
{
$hour_min[1] = 0;
}
if( $hour_min[0] || $hour_min[1] )
{
$offset = $event_tz * 3600;
}
else
{
$hour_min = array();
$offset = 0;
}
}
else
{
$event_all_day = 1;
}
$this->ipsclass->vars['max_post_length'] = $this->ipsclass->vars['max_post_length'] ? $this->ipsclass->vars['max_post_length'] : 2140000;
//-----------------------------------------
// CHECK
//-----------------------------------------
if ( ! $this->ipsclass->member['id'])
{
$this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'no_permission') );
}
//-----------------------------------------
// Got permission to post to this calendar?
//-----------------------------------------
$this->build_permissions( $event_calendar_id );
if ( ! $this->can_post )
{
$this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'no_permission') );
}
//-----------------------------------------
// WHATDOWEDO?
//-----------------------------------------
if ( $type == 'add' )
{
}
else
{
if ( ! $event_id )
{
$this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'no_post') );
}
//-----------------------------------------
// Get the event
//-----------------------------------------
$this->ipsclass->DB->simple_construct( array( 'select' => '*', 'from' => 'cal_events', 'where' => "event_id=$event_id" ) );
$this->ipsclass->DB->simple_exec();
if ( ! $event = $this->ipsclass->DB->fetch_row() )
{
$this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'cal_no_events') );
}
//-----------------------------------------
// Do we have permission to edit this event?
//-----------------------------------------
if ( $this->ipsclass->member['id'] == $event['event_member_id'] )
{
$can_edit = 1;
}
else if ( $this->ipsclass->member['g_is_supmod'] == 1 )
{
$can_edit = 1;
}
if ( $can_edit != 1 )
{
$this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'cal_no_events') );
}
}
//-----------------------------------------
// Do we have a valid post?
//-----------------------------------------
if (strlen( trim($_POST['Post']) ) < 1)
{
$this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'no_post') );
}
if (strlen( $_POST['Post'] ) > ($this->ipsclass->vars['max_post_length']*1024))
{
$this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'post_too_long') );
}
//-----------------------------------------
// Fix up the Event Title
//-----------------------------------------
if ( (strlen($event_title) < 2) or (!$event_title) )
{
$this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'cal_title_none') );
}
if ( strlen($event_title) > 64 )
{
$this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'cal_title_long') );
}
//-----------------------------------------
// Are we an admin, and have we set w/groups
// can see?
//-----------------------------------------
if ( $this->ipsclass->member['mgroup'] == $this->ipsclass->vars['admin_group'] )
{
if ( is_array( $_POST['e_groups'] ) )
{
$read_perms = implode( ",", $_POST['e_groups'] );
$read_perms .= ",".$this->ipsclass->vars['admin_group'];
}
if ($read_perms == "")
{
$read_perms = '*';
}
}
//-----------------------------------------
// Check dates: Range
//-----------------------------------------
if ( $form_type == 'range' )
{
if ( $end_year < $year )
{
$this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'cal_range_wrong') );
}
if ( $end_year == $year )
{
if ( $end_month < $month )
{
$this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'cal_range_wrong') );
}
if ( $end_month == $month AND $end_day <= $day )
{
$this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'cal_range_wrong') );
}
}
$_final_unix_from = gmmktime(0 , 0, 0 , $month , $day , $year ) - $offset;// + $offset; # Midday
$_final_unix_to = gmmktime(23, 59, 59, $end_month, $end_day, $end_year) - $offset;// + $offset; # End of the day
$event_ranged = 1;
$set_time = 0;
$hour_min = array();
}
//-----------------------------------------
// Check dates: Recur
//-----------------------------------------
elseif ( $form_type == 'recur' )
{
if ( $this->ipsclass->input['recur_unit'] )
{
$event_repeat = 1;
}
if ( $end_year < $year )
{
$this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'cal_range_wrong') );
}
if ( $end_year == $year )
{
if ( $end_month < $month )
{
$this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'cal_range_wrong') );
}
if ( $end_month == $month AND $end_day <= $day )
{
$this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'cal_range_wrong') );
}
}
$hour = 0;
$min = 0;
if( $set_time )
{
if( is_array( $hour_min ) )
{
$hour = $hour_min[0];
$min = $hour_min[1];
}
}
$_final_unix_from = gmmktime($hour , $min , 0 , $month , $day , $year ) - $offset;// + $offset;
$_final_unix_to = gmmktime($hour, $min, 0, $end_month, $end_day, $end_year) - $offset;// + $offset; # End of the day
$event_recur = 1;
}
//-----------------------------------------
// Check dates: Single
//-----------------------------------------
else
{
$hour = 0;
$min = 0;
if( $set_time )
{
if( is_array( $hour_min ) )
{
$hour = $hour_min[0];
$min = $hour_min[1];
}
}
$_final_unix_from = gmmktime($hour, $min, 0, $month, $day, $year) - $offset;// + $offset;
$_final_unix_to = 0;
}
//-----------------------------------------
// Do we have a sensible date?
//-----------------------------------------
if ( ! checkdate( $month, $day , $year ) )
{
$this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'cal_date_oor') );
}
//-----------------------------------------
// Post process the editor
// Now we have safe HTML and bbcode
//-----------------------------------------
$this->post->parser->parse_html = 0;
$this->post->parser->parse_smilies = intval($allow_emoticons);
$this->post->parser->parse_bbcode = 1;
$this->ipsclass->input['Post'] = $this->post->han_editor->process_raw_post( 'Post' );
$this->ipsclass->input['Post'] = $this->post->parser->pre_db_parse( $this->ipsclass->input['Post'] );
$this->ipsclass->input['Post'] = $this->post->parser->pre_display_parse( $this->ipsclass->input['Post'] );
$this->ipsclass->input['Post'] = $this->post->parser->bad_words( $this->ipsclass->input['Post'] );
//-----------------------------------------
// Event approved?
//-----------------------------------------
$event_approved = $this->can_avoid_queue ? 1 : ( $this->calendar_cache[ $event_calendar_id ]['cal_moderate'] ? 0 : 1 );
if( $private_event == 1 )
{
$event_approved = 1;
}
if ( $type == 'add' )
{
//-----------------------------------------
// Add it to the DB
//-----------------------------------------
$this->ipsclass->DB->do_insert( 'cal_events', array (
'event_calendar_id' => $event_calendar_id,
'event_member_id' => $this->ipsclass->member['id'],
'event_content' => $this->ipsclass->input['Post'],
'event_title' => $event_title,
'event_smilies' => $allow_emoticons,
'event_perms' => $read_perms,
'event_private' => $private_event,
'event_approved' => $event_approved,
'event_unixstamp' => time(),
'event_recurring' => $recur_unit,
'event_tz' => $event_tz,
'event_timeset' => count($hour_min) > 0 ? intval($hour_min[0]).":".intval($hour_min[1]) : 0,
'event_unix_from' => $_final_unix_from,
'event_unix_to' => $_final_unix_to,
'event_all_day' => $event_all_day ) );
$this->_call_recache();
if ( $event_approved )
{
$this->ipsclass->print->redirect_screen( $this->ipsclass->lang['new_event_redirect'] , "act=calendar&cal_id={$event_calendar_id}" );
}
else
{
$this->ipsclass->print->redirect_screen( $this->ipsclass->lang['new_event_mod'] , "act=calendar&cal_id={$event_calendar_id}" );
}
}
else
{
//-----------------------------------------
// Add it to the DB
//-----------------------------------------
$this->ipsclass->DB->do_update( 'cal_events', array (
'event_calendar_id' => $event_calendar_id,
'event_content' => $this->ipsclass->input['Post'],
'event_title' => $event_title,
'event_smilies' => $allow_emoticons,
'event_perms' => $read_perms,
'event_private' => $private_event,
'event_approved' => $event_approved,
'event_unixstamp' => time(),
'event_recurring' => $recur_unit,
'event_tz' => $event_tz,
'event_timeset' => count($hour_min) > 0 ? intval($hour_min[0]).":".intval($hour_min[1]) : 0,
'event_unix_from' => $_final_unix_from,
'event_unix_to' => $_final_unix_to,
'event_all_day' => $event_all_day ), 'event_id='.$event_id );
$this->_call_recache();
if ( $event_approved )
{
$this->ipsclass->print->redirect_screen( $this->ipsclass->lang['edit_event_redirect'] , "act=calendar&cal_id={$event_calendar_id}&code=showevent&event_id=$event_id" );
}
else
{
$this->ipsclass->print->redirect_screen( $this->ipsclass->lang['new_event_mod'] , "act=calendar&cal_id={$event_calendar_id}" );
}
}
}
/*-------------------------------------------------------------------------*/
// SHOW DAYS EVENTS
/*-------------------------------------------------------------------------*/
function show_day()
{
$day = intval($this->ipsclass->input['d']);
$month = intval($this->ipsclass->input['m']);
$year = intval($this->ipsclass->input['y']);
$seen_ids = array();
$timenow = gmmktime( 0,0,0, $month, $day, $year);
$day_array = $this->ipsclass->date_getgmdate( $timenow );
$printed = 0;
//-----------------------------------------
// Do we have a sensible date?
//-----------------------------------------
if ( ! checkdate( $month, $day , $year ) )
{
$this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'cal_date_oor') );
}
$this->output .= $this->ipsclass->compiled_templates['skin_calendar']->cal_page_events_start();
//-----------------------------------------
// Get the events
//-----------------------------------------
$this->get_events_sql($month, $year);
$events = $this->get_day_events( $month, $day, $year );
if ( is_array( $events ) AND count( $events ) )
{
foreach( $events as $event )
{
if ( !isset($this->shown_events[ $month.'-'.$day.'-'.$year ][ $event['event_id'] ]) OR !$this->shown_events[ $month.'-'.$day.'-'.$year ][ $event['event_id'] ] )
{
//-----------------------------------------
// Is it a private event?
//-----------------------------------------
if ( $event['event_private'] == 1 and $this->ipsclass->member['id'] != $event['event_member_id'] )
{
continue;
}
//-----------------------------------------
// Do we have permission to see the event?
//-----------------------------------------
if ( $event['event_perms'] != '*' )
{
$this_member_mgroups[] = $this->ipsclass->member['mgroup'];
if( $this->ipsclass->member['mgroup_others'] )
{
$this_member_mgroups = array_merge( $this_member_mgroups, explode( ",", $this->ipsclass->clean_perm_string( $this->ipsclass->member['mgroup_others'] ) ) );
}
$check = 0;
foreach( $this_member_mgroups as $this_member_mgroup )
{
if ( preg_match( "/(^|,)".$this_member_mgroup."(,|$)/", $event['event_perms'] ) )
{
$check = 1;
}
}
if( $check == 0 )
{
continue;
}
}
if ( !isset($seen_ids[ $event['eventid'] ]) OR !$seen_ids[ $event['eventid'] ] )
{
$this->output .= $this->make_event_html($event);
$printed++;
$seen_ids[ $event['event_id'] ] = 1;
}
}
}
}
//-----------------------------------------
// Do we have any printed events?
//-----------------------------------------
if ($printed > 0)
{
$switch = 1;
}
else
{
// Error if no birthdays
$switch = 0;
}
$this->output .= $this->make_birthday_html($month, $day, $switch);
$this->output .= $this->ipsclass->compiled_templates['skin_calendar']->cal_page_events_end();
$this->nav[] = "{$this->ipsclass->lang['page_title']}";
$this->nav[] = "{$this->calendar['cal_title']}";
$this->nav[] = $day." ".$this->month_words[$this->chosen_month - 1]." ".$this->chosen_year;
}
/*-------------------------------------------------------------------------*/
// SHOW A SINGLE EVENT BASED ON eventid
/*-------------------------------------------------------------------------*/
function show_event()
{
//-----------------------------------------
// INIT
//-----------------------------------------
$event_id = intval($this->ipsclass->input['event_id']);
//-----------------------------------------
// CHECK
//-----------------------------------------
if ( ! $event_id )
{
$this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'cal_no_events') );
}
//-----------------------------------------
// Get it from the DB
//-----------------------------------------
$this->ipsclass->DB->simple_construct( array( 'select' => '*', 'from' => 'cal_events', 'where' => "event_id=$event_id" ) );
$this->ipsclass->DB->simple_exec();
if ( ! $event = $this->ipsclass->DB->fetch_row() )
{
$this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'cal_no_events') );
}
$set_offset = 0;
if( $event['event_timeset'] )
{
$set_offset = $this->ipsclass->member['time_offset'] * 3600;
}
$event['event_unix_from'] = $event['event_unix_from'] - $set_offset;
//$event['event_unix_to'] = $event['event_unix_to'] ? $event['event_unix_to'] + ( $this->ipsclass->member['time_offset'] * 3600 ) : 0;
//-----------------------------------------
// Is it a private event?
//-----------------------------------------
if ( $event['event_private'] == 1 and $this->ipsclass->member['id'] != $event['event_member_id'] )
{
$this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'cal_no_events') );
}
//-----------------------------------------
// Do we have permission to see the event?
//-----------------------------------------
if ( $event['event_perms'] != '*' )
{
$this_member_mgroups[] = $this->ipsclass->member['mgroup'];
if( $this->ipsclass->member['mgroup_others'] )
{
$this_member_mgroups = array_merge( $this_member_mgroups, explode( ",", $this->ipsclass->clean_perm_string( $this->ipsclass->member['mgroup_others'] ) ) );
}
$check = 0;
foreach( $this_member_mgroups as $this_member_mgroup )
{
if ( preg_match( "/(^|,)".$this_member_mgroup."(,|$)/", $event['event_perms'] ) )
{
$check = 1;
}
}
if( $check == 0 )
{
$this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'cal_no_events') );
}
}
$this->output .= $this->ipsclass->compiled_templates['skin_calendar']->cal_page_events_start() . $this->make_event_html($event) . $this->ipsclass->compiled_templates['skin_calendar']->cal_page_events_end();
$this->nav[] = "{$this->ipsclass->lang['page_title']}";
$this->nav[] = "{$this->calendar['cal_title']}";
$this->nav[] = $event['event_title'];
}
/*-------------------------------------------------------------------------*/
// MAKE EVENT HTML (return HTML for bdays)
/*-------------------------------------------------------------------------*/
function make_event_html($event)
{
$approve_button = "";
//-----------------------------------------
// What kind of event is it?
//-----------------------------------------
$event_type = $this->ipsclass->lang['public_event'];
if ($event['event_private'] == 1)
{
$event_type = $this->ipsclass->lang['private_event'];
}
else if ($event['event_perms'] != '*')
{
$event_type = $this->ipsclass->lang['restricted_event'];
}
//-----------------------------------------
// Do we have an edit button?
//-----------------------------------------
$edit_button = "";
//-----------------------------------------
// Are we a super dooper moderator?
//-----------------------------------------
if ( $this->ipsclass->member['g_is_supmod'] == 1 )
{
$edit_button = $this->ipsclass->compiled_templates['skin_calendar']->cal_edit_del_button($event['event_id'], $event['event_calendar_id']);
}
//-----------------------------------------
// Are we the OP of this event?
//-----------------------------------------
else if ( $this->ipsclass->member['id'] == $event['event_member_id'] )
{
$edit_button = $this->ipsclass->compiled_templates['skin_calendar']->cal_edit_del_button($event['event_id'], $event['event_calendar_id']);
}
//-----------------------------------------
// Get the member details and stuff
//-----------------------------------------
if( $this->parsed_members[ $event['event_member_id'] ] )
{
$member = $this->parsed_members[ $event['event_member_id'] ];
}
else
{
$this->ipsclass->DB->cache_add_query( 'generic_get_all_member', array( 'mid' => $event['event_member_id'] ) );
$this->ipsclass->DB->cache_exec_query();
$member = $this->ipsclass->DB->fetch_row();
$member = $this->ipsclass->parse_member( $member, 0, 'skin_calendar' );
$this->parsed_members[ $member['id'] ] = $member;
}
if ( $member['id'] )
{
$member['_members_display_name'] = "{$member['members_display_name_short']}";
}
//-----------------------------------------
// Date
//-----------------------------------------
$set_offset = 0;
if( $event['event_timeset'] AND !$event['event_all_day'] )
{
$set_offset = $this->ipsclass->member['time_offset'] * 3600;
}
$tmp = explode( ',', gmdate( 'n,j,Y,G,i', $event['event_unix_from'] ) );
$event['mday'] = $tmp[1];
$event['month'] = $tmp[0];
$event['year'] = $tmp[2];
$event['month_text'] = $this->month_words[ $tmp[0] - 1 ];
$this->ipsclass->input['d'] = $event['mday'];
$this->ipsclass->input['m'] = $event['month'];
$this->ipsclass->input['y'] = $event['year'];
$type = $this->ipsclass->lang['se_normal'];
$de = "";
if ( $event['event_recurring'] == 0 AND $event['event_unix_to'] )
{
$type = $this->ipsclass->lang['se_range'];
$de = $this->ipsclass->lang['se_ends'].' '.gmdate( $this->ipsclass->vars['clock_joined'], $event['event_unix_to'] );
}
else if ( $event['event_recurring'] == 1 )
{
$type = $this->ipsclass->lang['se_recur'];
$de = $this->ipsclass->lang['se_ends'].' '.gmdate( $this->ipsclass->vars['clock_joined'], $event['event_unix_to'] - $set_offset );
}
if( $type == $this->ipsclass->lang['se_normal'] )
{
if( $tmp[3] > 0 )
{
$event['year'] .= " {$tmp[3]}:{$tmp[4]}";
}
}
//-----------------------------------------
// Moderated?
//-----------------------------------------
$event['_quicktime'] = intval($event['month']).'-'.intval($event['mday']).'-'.intval( $event['year']);
if ( $this->can_moderate )
{
if ( ! $event['event_approved'] )
{
$event['_event_css_1'] = 'row2shaded';
$event['_event_css_2'] = 'row4shaded';
$approve_button = $this->ipsclass->compiled_templates['skin_calendar']->cal_approve_button($event['event_id'], $event['event_calendar_id'], $event);
}
else
{
$event['_event_css_1'] = 'row1';
$event['_event_css_2'] = 'row2';
$approve_button = $this->ipsclass->compiled_templates['skin_calendar']->cal_unapprove_button($event['event_id'], $event['event_calendar_id'], $event);
}
}
else
{
$event['_event_css_1'] = 'row1';
$event['_event_css_2'] = 'row2';
}
//-----------------------------------------
// Show
//-----------------------------------------
return $this->ipsclass->compiled_templates['skin_calendar']->cal_show_event($event, $member, $event_type, $edit_button, $approve_button, $type, $de );
}
/*-------------------------------------------------------------------------*/
// GET MINI CALENDAR
/*-------------------------------------------------------------------------*/
function get_mini_calendar($month, $year)
{
$cal_output = "";
foreach ($this->day_words as $day)
{
$day = $this->ipsclass->txt_mbsubstr( $day, 0, 1 );
$cal_output .= $this->ipsclass->compiled_templates['skin_calendar']->mini_cal_day_bit( $day );
}
//-----------------------------------------
// Print the main calendar body
//-----------------------------------------
$cal_output .= $this->get_month_events( $month, $year, 1 );
return $this->ipsclass->compiled_templates['skin_calendar']->mini_cal_mini_wrap($this->month_words[$month - 1], $month, $year, $cal_output);
}
/*-------------------------------------------------------------------------*/
// Get BIRTHDAYS
/*-------------------------------------------------------------------------*/
function get_birthday_sql($month)
{
if ( !isset($this->query_bday_cache[ $month ]) OR !is_array( $this->query_bday_cache[ $month ] ) )
{
// We are just going to query next and previous month
// so let's do it in one query and cache it...
$prev_month = $this->get_prev_month( $month, date("Y") );
$next_month = $this->get_next_month( $month, date("Y") );
$this->query_bday_cache[ $month ] = array();
$this->query_bday_cache[ $next_month['month_id'] ] = array();
$this->query_bday_cache[ $prev_month['month_id'] ] = array();
$this->ipsclass->DB->simple_construct( array( 'select' => 'bday_day, bday_month, id, members_display_name', 'from' => 'members', 'where' => 'bday_month IN('.$prev_month['month_id'].','.$month.','.$next_month['month_id'].')' ) );
$this->ipsclass->DB->simple_exec();
while ($r = $this->ipsclass->DB->fetch_row())
{
$this->query_bday_cache[ $r['bday_month'] ][ $r['bday_day'] ][] = $r;
}
}
}
/*-------------------------------------------------------------------------*/
// Get EVENTS
/*-------------------------------------------------------------------------*/
function get_events_sql( $month=0, $year=0, $get_cached=array() )
{
//-----------------------------------------
// INIT
//-----------------------------------------
if ( ! count( $get_cached ) )
{
//-----------------------------------------
// Mini-cal is going to call next month and
// previous month anyways....let's just pull
// it all in one query and cache it
//-----------------------------------------
$next_month = $this->get_next_month( $month, $year );
$prev_month = $this->get_prev_month( $month, $year );
$numberdays = date('t', mktime(0, 0, 0, $next_month['month_id'], 1, $next_month['year_id'] ) );
$timenow = gmmktime( 0, 0, 1 , $prev_month['month_id'], 1, $prev_month['year_id'] ) - (12 * 3600);
$timethen = gmmktime( 23, 59, 59, $next_month['month_id'], $numberdays, $next_month['year_id']) + (12 * 3600);
$getcached = 0;
}
else
{
$next_month = array( 'month_id' => 0 );
$prev_month = array( 'month_id' => 0 );
$timenow = $get_cached['timenow'];
$timethen = $get_cached['timethen'];
list( $month, $day, $year ) = explode( ',', gmdate('n,j,Y', $get_cached['timenow']) );
$getcached = 1;
}
//-----------------------------------------
// Get the events
//-----------------------------------------
if ( !isset($this->event_cache[ $month ]) OR ! is_array( $this->event_cache[ $month ] ) )
{
//-----------------------------------------
// Get for cache
//-----------------------------------------
if ( $getcached )
{
$extra = ( isset($get_cached['cal_id']) AND $get_cached['cal_id'] ) ? "event_calendar_id=".intval($get_cached['cal_id'])." AND " : '';
$this->ipsclass->DB->cache_add_query( 'calendar_get_events_cache', array( 'extra' => $extra,
'timenow' => $timenow,
'timethen' => $timethen,
'month' => $month )
);
/*$this->ipsclass->DB->simple_construct( array( 'select' => '*',
'from' => 'cal_events',
'where' => "$extra event_approved=1
AND ( (event_unix_to >= $timenow AND event_unix_from <= $timethen )
OR ( event_unix_to=0 AND event_unix_from >= $timenow AND event_unix_from <= $timethen )
OR ( event_recurring=3 AND FROM_UNIXTIME(event_unix_from,'%c')={$month} AND event_unix_to <= $timethen ) )" ) );*/
$this->ipsclass->DB->cache_exec_query();
}
else
{
//-----------------------------------------
// Get for display
//-----------------------------------------
$approved = $this->can_moderate ? "event_approved IN (0,1)" : "event_approved=1";
$this->ipsclass->DB->cache_add_query( 'calendar_get_events', array( 'approved' => $approved,
'calendar_id' => $this->calendar_id,
'timenow' => $timenow,
'timethen' => $timethen,
'month' => $prev_month['month_id'].','.$month.','.$next_month['month_id'] )
);
/*$this->ipsclass->DB->simple_construct( array( 'select' => '*',
'from' => 'cal_events',
'where' => "event_calendar_id = {$this->calendar_id} AND {$approved}
AND ( (event_unix_to >= $timenow AND event_unix_from <= $timethen )
OR ( event_unix_to=0 AND event_unix_from >= $timenow AND event_unix_from <= $timethen )
OR ( event_recurring=3 AND FROM_UNIXTIME(event_unix_from,'%c')={$month} AND event_unix_to <= $timethen ) )" ) );*/
$this->ipsclass->DB->cache_exec_query();
}
while ( $r = $this->ipsclass->DB->fetch_row() )
{
//-----------------------------------------
// Private event?
//-----------------------------------------
if ( $r['event_private'] == 1 AND ! $getcached )
{
if ( ! $this->ipsclass->member['id'] )
{
continue;
}
if ( $this->ipsclass->member['id'] != $r['event_member_id'] )
{
continue;
}
}
//-----------------------------------------
// Got permission?
//-----------------------------------------
if ( $r['event_perms'] != '*' AND ! $getcached )
{
$this_member_mgroups[] = $this->ipsclass->member['mgroup'];
if( $this->ipsclass->member['mgroup_others'] )
{
$this_member_mgroups = array_merge( $this_member_mgroups, explode( ",", $this->ipsclass->clean_perm_string( $this->ipsclass->member['mgroup_others'] ) ) );
}
$check = 0;
foreach( $this_member_mgroups as $this_member_mgroup )
{
if ( preg_match( "/(^|,)".$this_member_mgroup."(,|$)/", $r['event_perms'] ) )
{
$check = 1;
}
}
if( $check == 0 )
{
continue;
}
}
//-----------------------------------------
// Times
//-----------------------------------------
$set_offset = 0;
if( $r['event_timeset'] AND !$r['event_all_day'] )
{
$set_offset = $this->ipsclass->member['time_offset'] * 3600;
}
$r['_unix_from'] = $r['event_unix_from'] ? $r['event_unix_from'] + $set_offset : 0;
$r['_unix_to'] = $r['event_unix_to'] > 0 ? $r['event_unix_to'] + $set_offset : 0;
//-----------------------------------------
// Recurring event?
//-----------------------------------------
if ( $r['event_recurring'] > 0 )
{
$r['recurring'] = 1;
// Get recurring months
$r_month = 0;
$r_stamp = $r['event_unix_from'];
$r_month = gmdate('n', $r['_unix_from']);
$r_year = gmdate('Y', $r['_unix_from']);
if( $r_month == $month && ($r_year == $year OR $r['event_recurring']==3) && $getcached == 0 )
{
$this->event_cache[ $r_month ]['recurring'][] = $r;
}
while( $r_stamp < $r['_unix_to'] )
{
// Stop Duplicates!
$shouldpass = 1;
if ( isset($this->event_cache[ $r_month ]['recurring']) AND count( $this->event_cache[ $r_month ]['recurring'] ) )
{
foreach ( $this->event_cache[ $r_month ]['recurring'] as $eventarray )
{
if ( $eventarray['event_id'] == $r['event_id'] )
{
$shouldpass = 0;
}
}
}
if( ( ( $r_month != $month AND $r_month != $next_month['month_id'] AND $r_month != $prev_month['month_id'] )
OR $r_year != $year) AND $getcached == 0 )
{
$shouldpass = 0;
}
if ( $shouldpass == 1 )
{
$this->event_cache[ $r_month ]['recurring'][] = $r;
}
if ( $r['event_recurring'] == 1 )
{
$r_stamp += 604800;
}
elseif ( $r['event_recurring'] == 2 )
{
$r_stamp += 86400 * 30;
}
else
{
// No need to check year, as month would then match anyways
$r_stamp += 31536000;
}
if ( $r_month != gmdate('n', $r_stamp) )
{
$r_month = gmdate('n', $r_stamp);
}
if( $r_year != gmdate('Y', $r_stamp) )
{
$r_year = gmdate('Y', $r_stamp);
}
}
}
//-----------------------------------------
// Ranged event?
// OK, this is getting silly.....
// _checkdate -> gmmtime( 0,0,0 $_checkdate..
// was showing a day earlier than allowed
//-----------------------------------------
else if ( $r['event_recurring'] == 0 AND $r['_unix_to'] )
{
$_gotit = array();
$_begin = gmdate( "z", $r['_unix_from'] );
$_checkdate = gmdate( "z", $r['_unix_to'] );
$_checkts = $r['_unix_from'];
$_cur_mo = $month; // Store to retrieve later if necessary
$_tmp = '';
$r['ranged'] = 1;
// Lapse over a year?
if( $_checkdate < $_begin )
{
$tmp_difference = 365 + $_checkdate - $_begin;
if( $tmp_difference > 0 )
{
$_checkdate = $_begin + $tmp_difference;
}
unset( $tmp_difference );
}
while ( $_begin <= $_checkdate )
{
// Did we lapse over the month?
// How about the year? If so,
// let's go ahead and reset ourselves
$realday = gmdate( "j", $_checkts );
$month = gmdate( "n", $_checkts );
if ( !array_key_exists( $month, $_gotit ) )
{
$_gotit[ $month ] = array();
}
if ( !in_array( $realday, $_gotit[ $month ] ) )
{
$this->event_cache[ $month ]['ranged'][ $realday ][] = $r;
$_count = count( $this->event_cache[ $month ]['ranged'][ $realday ] ) - 1;
$_tmp = $this->event_cache[ $month ]['ranged'][ $realday ][ $_count ];
$_gotit[ $month ][] = $realday;
}
else
{
if ( $r['_unix_to'] != $r['event_unix_from'] )
{
$this->event_cache[ $month ]['ranged'][ $realday ][] = $_tmp;
}
}
$_begin += 1;
$_checkts += 86400;
}
$month = $_cur_mo;
}
//-----------------------------------------
// Single event
//-----------------------------------------
else
{
$r['single'] = 1;
# Make sure correct month is used for cached queries
list( $_month, $_day, $_year ) = explode( ',', gmdate('n,j,Y', $r['_unix_from'] ) );
$this->event_cache[ $_month ]['single'][ $_day ][] = $r;
}
}
}
}
/*-------------------------------------------------------------------------*/
// Get day's events
/*-------------------------------------------------------------------------*/
function get_day_events( $month="", $day="", $year="" )
{
//-----------------------------------------
// INIT
//-----------------------------------------
$return = array();
//-----------------------------------------
// Ranged
//-----------------------------------------
if ( isset($this->event_cache[ $month ]['ranged'][ $day ]) AND is_array( $this->event_cache[ $month ]['ranged'][ $day ] ) and count( $this->event_cache[ $month ]['ranged'][ $day ] ) )
{
foreach( $this->event_cache[ $month ]['ranged'][ $day ] as $idx => $data )
{
$return[] = $this->event_cache[ $month ]['ranged'][ $day ][ $idx ];
}
}
//-----------------------------------------
// Recurring
//-----------------------------------------
if ( isset($this->event_cache[ $month ]['recurring']) AND is_array( $this->event_cache[ $month ]['recurring'] ) and count( $this->event_cache[ $month ]['recurring'] ) )
{
foreach( $this->event_cache[ $month ]['recurring'] as $idx => $data )
{
if ( $this->get_info_events( $data, $month, $day, $year ) )
{
$return[] = $this->event_cache[ $month ]['recurring'][ $idx ];
}
}
}
//-----------------------------------------
// Single day
//-----------------------------------------
if ( isset($this->event_cache[ $month ]['single'][ $day ]) AND is_array( $this->event_cache[ $month ]['single'][ $day ] ) and count( $this->event_cache[ $month ]['single'][ $day ] ) )
{
foreach( $this->event_cache[ $month ]['single'][ $day ] as $idx => $data )
{
$return[] = $this->event_cache[ $month ]['single'][ $day ][ $idx ];
}
}
return $return;
}
/*-------------------------------------------------------------------------*/
// Get event info
/*-------------------------------------------------------------------------*/
function get_info_events( $event, $month, $day, $year, $adj=1 )
{
//-----------------------------------------
// INIT
//-----------------------------------------
$_start = gmmktime(0 , 0 , 0 , $month, $day, $year);
$_lunch = gmmktime(12, 0 , 0 , $month, $day, $year);
$_end = gmmktime(23, 59, 59, $month, $day, $year) + 1;
$_month = gmmktime(0 , 0 , 0 , $month, 1 , $year);
$_offset = 0; // - Set at time of save: $event['event_tz'] * 3600;
//-----------------------------------------
// Already seen it?
//-----------------------------------------
if ( $event['event_id'] AND isset($this->shown_events[ $month.'-'.$day.'-'.$year ][ $event['event_id'] ]) AND $this->shown_events[ $month.'-'.$day.'-'.$year ][ $event['event_id'] ] )
{
return FALSE;
}
//-----------------------------------------
// Check we're in range
//-----------------------------------------
if ( isset($event['single']) AND $event['single'] )
{
if ( $month.','.$day.','.$year == gmdate('n,j,Y', $event['_unix_from']) )
{
$this->shown_events[ $month.'-'.$day.'-'.$year ][ $event['event_id'] ] = 1;
return TRUE;
}
}
if ( ($event['_unix_to']) < $_start OR ($event['_unix_from'] ) > $_end )
{
return FALSE;
}
//-----------------------------------------
// Check recurring
//-----------------------------------------
if ( $event['event_recurring'] )
{
if ( $adj AND gmdate('w', $event['_unix_from']) != gmdate('w', $event['event_unix_from']) )
{
if ( $event['_unix_from'] > $event['event_unix_from'])
{
$_lunch -= 86400;
}
else
{
$_lunch += 86400;
}
}
//-----------------------------------------
// Weekly
//-----------------------------------------
if ( $event['event_recurring'] == 1 )
{
if ( gmdate('w', $event['event_unix_from']) != gmdate('w', $_lunch ) )
{
return FALSE;
}
else
{
return TRUE;
}
}
//-----------------------------------------
// Monthly
//-----------------------------------------
else if ( $event['event_recurring'] == 2 )
{
if ( gmdate('j', $event['event_unix_from']) == gmdate('j', $_lunch ) )
{
return TRUE;
}
else
{
return FALSE;
}
}
//-----------------------------------------
// Yearly
//-----------------------------------------
else if ( $event['event_recurring'] == 3 )
{
if ( (gmdate('j', $event['event_unix_from']) == gmdate('j', $_lunch )) AND (gmdate('n', $event['event_unix_from']) == gmdate('n', $_lunch )) )
{
return TRUE;
}
else
{
return FALSE;
}
}
}
return TRUE;
}
/*-------------------------------------------------------------------------*/
// Get month stuff
/*-------------------------------------------------------------------------*/
function get_month_events( $month="", $year="", $minical=0 )
{
//-----------------------------------------
// Reset shown events
//-----------------------------------------
$this->shown_events = array();
//-----------------------------------------
// Work out timestamps
//-----------------------------------------
$our_datestamp = gmmktime( 0,0,0, $month, 1, $year);
$first_day_array = $this->ipsclass->date_getgmdate($our_datestamp);
if( $this->ipsclass->vars['ipb_calendar_mon'] )
{
$first_day_array['wday'] = $first_day_array['wday'] == 0 ? 7 : $first_day_array['wday'];
}
//-----------------------------------------
// Get the birthdays from the database
//-----------------------------------------
if ( $this->ipsclass->vars['show_bday_calendar'] )
{
$birthdays = array();
$this->get_birthday_sql($month);
$birthdays = $this->query_bday_cache[ $month ];
}
//-----------------------------------------
// Get the events
//-----------------------------------------
$this->get_events_sql($month, $year);
//-----------------------------------------
// Get events
//-----------------------------------------
$seen_days = array();
$seen_ids = array();
$cal_output = "";
for ( $c = 0 ; $c < 42; $c++ )
{
//-----------------------------------------
// Work out timestamps
//-----------------------------------------
$_year = gmdate('Y', $our_datestamp);
$_month = gmdate('n', $our_datestamp);
$_day = gmdate('j', $our_datestamp);
$day_array = $this->ipsclass->date_getgmdate($our_datestamp);
$check_against = $c;
if( $this->ipsclass->vars['ipb_calendar_mon'] )
{
$check_against = $c+1;
}
if ( (($c) % 7 ) == 0 )
{
//-----------------------------------------
// Kill the loop if we are no longer on our month
//-----------------------------------------
if ($day_array['mon'] != $month)
{
break;
}
if ( $minical )
{
$cal_output .= $this->ipsclass->compiled_templates['skin_calendar']->mini_cal_new_row( $our_datestamp );
}
else
{
$cal_output .= $this->ipsclass->compiled_templates['skin_calendar']->cal_new_row( $our_datestamp );
}
}
//-----------------------------------------
// Run out of legal days for this month?
// Or have we yet to get to the first day?
//-----------------------------------------
if ( ($check_against < $first_day_array['wday']) or ($day_array['mon'] != $month) )
{
$cal_output .= $minical ? $this->ipsclass->compiled_templates['skin_calendar']->mini_cal_blank_cell()
: $this->ipsclass->compiled_templates['skin_calendar']->cal_blank_cell();
}
else
{
if ( isset($seen_days[ $day_array['yday'] ]) AND $seen_days[ $day_array['yday'] ] == 1 )
{
continue;
}
$seen_days[ $day_array['yday'] ] = 1;
$tmp_cevents = array();
$this_day_events = "";
$cal_date = $day_array['mday'];
$queued_event = 0;
$cal_date_queued = "";
//-----------------------------------------
// Get events
//-----------------------------------------
$events = $this->get_day_events( $_month, $_day, $_year );
if ( is_array( $events ) AND count( $events ) )
{
foreach( $events as $event )
{
if ( !isset($this->shown_events[ $_month.'-'.$_day.'-'.$_year ][ $event['event_id'] ]) OR !$this->shown_events[ $_month.'-'.$_day.'-'.$_year ][ $event['event_id'] ] )
{
//-----------------------------------------
// Recurring
//-----------------------------------------
if ( isset($event['recurring']) )
{
$tmp_cevents[ $event['event_id'] ] = $this->ipsclass->compiled_templates['skin_calendar']->cal_events_wrap_recurring( $event );
}
else if ( isset($event['single']) )
{
$tmp_cevents[ $event['event_id'] ] = $this->ipsclass->compiled_templates['skin_calendar']->cal_events_wrap( $event );
}
else
{
$tmp_cevents[ $event['event_id'] ] = $this->ipsclass->compiled_templates['skin_calendar']->cal_events_wrap_range( $event );
}
$this->shown_events[ $_month.'-'.$_day.'-'.$_year ][ $event['event_id'] ] = 1;
//-----------------------------------------
// Queued events?
//-----------------------------------------
if ( ! $event['event_approved'] AND $this->can_moderate )
{
$queued_event = 1;
}
}
}
//-----------------------------------------
// How many events?
//-----------------------------------------
if ( count($tmp_cevents) >= $this->calendar['cal_event_limit'] )
{
$this_day_events = $this->ipsclass->compiled_templates['skin_calendar']->cal_events_wrap_manual(
"cal_id={$this->calendar_id}&code=showday&y=".$day_array['year']."&m=".$day_array['mon']."&d=".$day_array['mday'],
sprintf( $this->ipsclass->lang['show_n_events'], intval(count($tmp_cevents)) ) );
}
else if ( count( $tmp_cevents ) )
{
$this_day_events = implode( "\n", $tmp_cevents );
}
$tmp_cevents[] = array();
}
//-----------------------------------------
// Birthdays
//-----------------------------------------
if ( $this->calendar['cal_bday_limit'] )
{
if ( isset($birthdays[ $day_array['mday'] ]) and count( $birthdays[ $day_array['mday'] ] ) > 0 )
{
$no_bdays = count($birthdays[ $day_array['mday'] ]);
if ( $no_bdays )
{
if ( $this->calendar['cal_bday_limit'] and $no_bdays <= $this->calendar['cal_bday_limit'] )
{
foreach( $birthdays[ $day_array['mday'] ] as $user )
{
$this_day_events .= $this->ipsclass->compiled_templates['skin_calendar']->cal_events_wrap_manual(
"cal_id={$this->calendar_id}&code=birthdays&y=".$day_array['year']."&m=".$day_array['mon']."&d=".$day_array['mday'],
$user['members_display_name'].$this->ipsclass->lang['bd_birthday'] );
}
}
else
{
$this_day_events .= $this->ipsclass->compiled_templates['skin_calendar']->cal_events_wrap_manual(
"cal_id={$this->calendar_id}&code=birthdays&y=".$day_array['year']."&m=".$day_array['mon']."&d=".$day_array['mday'],
sprintf( $this->ipsclass->lang['entry_birthdays'], $no_bdays ) );
}
}
}
}
//-----------------------------------------
// Show it
//-----------------------------------------
if ($this_day_events != "")
{
$cal_date = "{$day_array['mday']}";
$cal_date_queued = "{$this->ipsclass->base_url}act=calendar&cal_id={$this->calendar_id}&modfilter=queued&code=showday&y=".$year."&m=".$month."&d=".$day_array['mday'];
$this_day_events = $this->ipsclass->compiled_templates['skin_calendar']->cal_events_start() . $this_day_events . $this->ipsclass->compiled_templates['skin_calendar']->cal_events_end();
}
if ( ($day_array['mday'] == $this->now_date['mday']) and ($this->now_date['mon'] == $day_array['mon']) and ($this->now_date['year'] == $day_array['year']))
{
$cal_output .= $minical ? $this->ipsclass->compiled_templates['skin_calendar']->mini_cal_date_cell_today($cal_date, $this_day_events) : $this->ipsclass->compiled_templates['skin_calendar']->cal_date_cell_today($cal_date, $this_day_events, $cal_date_queued, $queued_event);
}
else
{
$cal_output .= $minical ? $this->ipsclass->compiled_templates['skin_calendar']->mini_cal_date_cell($cal_date, $this_day_events) : $this->ipsclass->compiled_templates['skin_calendar']->cal_date_cell($cal_date, $this_day_events, $cal_date_queued, $queued_event);
}
unset($this_day_events);
$our_datestamp += 86400;
}
}
return $cal_output;
}
/*-------------------------------------------------------------------------*/
// SHOW BIRTHDAYS
/*-------------------------------------------------------------------------*/
function show_birthdays()
{
$day = intval($this->ipsclass->input['d']);
$month = intval($this->ipsclass->input['m']);
$year = intval($this->ipsclass->input['y']);
//-----------------------------------------
// Do we have a sensible date?
//-----------------------------------------
if ( ! checkdate( $month, $day , $year ) )
{
$this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'cal_date_oor') );
}
$this->output .= $this->ipsclass->compiled_templates['skin_calendar']->cal_page_events_start() . $this->make_birthday_html($month, $day) . $this->ipsclass->compiled_templates['skin_calendar']->cal_page_events_end();
$this->nav[] = "{$this->ipsclass->lang['page_title']}";
$this->nav[] = "{$this->calendar['cal_title']}";
$this->nav[] = $this->ipsclass->lang['cal_birthdays']." ".$day." ".$this->month_words[$this->chosen_month - 1]." ".$this->chosen_year;
}
/*-------------------------------------------------------------------------*/
// MAKE BIRTHDAY HTML (return HTML for bdays)
/*-------------------------------------------------------------------------*/
function make_birthday_html($month, $day, $switch=0)
{
if ( ! $this->ipsclass->vars['show_bday_calendar'] )
{
return;
}
//-----------------------------------------
// Is it leapyear?
//-----------------------------------------
if( !date("L") )
{
if( $month == "2" AND $day == "28" )
{
$where_string = "bday_month=".$month." AND (bday_day={$day} OR bday_day=29)";
}
else
{
$where_string = 'bday_month='.$month . " AND bday_day={$day}";
}
}
else
{
$where_string = 'bday_month='.$month . " AND bday_day={$day}";
}
//-----------------------------------------
// Get the birthdays from the database
//-----------------------------------------
$birthdays = array();
$output = "";
$this->ipsclass->DB->simple_construct( array( 'select' => 'bday_day, bday_month, bday_year, id, members_display_name',
'from' => 'members',
'where' => $where_string ) );
$this->ipsclass->DB->simple_exec();
if ( ! $this->ipsclass->DB->get_num_rows() )
{
if ($switch == 1)
{
return;
}
else
{
$this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'cal_no_events') );
}
}
else
{
$output .= $this->ipsclass->compiled_templates['skin_calendar']->cal_birthday_start();
while ( $r = $this->ipsclass->DB->fetch_row() )
{
$age = $this->chosen_year - $r['bday_year'];
$output .= $this->ipsclass->compiled_templates['skin_calendar']->cal_birthday_entry($r['id'], $r['members_display_name'], $age);
}
$output .= $this->ipsclass->compiled_templates['skin_calendar']->cal_birthday_end();
}
return $output;
}
/*-------------------------------------------------------------------------*/
// Internal
/*-------------------------------------------------------------------------*/
function get_month_dropdown($month="")
{
$return = "";
if ($month == "")
{
$month = $this->chosen_month;
}
for ( $x = 1 ; $x <= 12 ; $x++ )
{
$return .= "\t\n";
}
return $return;
}
/*-------------------------------------------------------------------------*/
// Internal
/*-------------------------------------------------------------------------*/
function get_year_dropdown($year="")
{
$return = "";
$this->ipsclass->vars['start_year'] = (isset($this->ipsclass->vars['start_year'])) ? $this->ipsclass->vars['start_year'] : 2001;
$this->ipsclass->vars['year_limit'] = (isset($this->ipsclass->vars['year_limit'])) ? $this->ipsclass->vars['year_limit'] : 5;
if ($year == "")
{
$year = $this->chosen_year;
}
for ( $x = $this->ipsclass->vars['start_year'] ; $x <= $this->now_date['year'] + $this->ipsclass->vars['year_limit'] ; $x++ )
{
$return .= "\t