977 lines
32 KiB
PHP
977 lines
32 KiB
PHP
<?php
|
|
|
|
/*
|
|
+--------------------------------------------------------------------------
|
|
| Invision Power Board
|
|
| =============================================
|
|
| by Matthew Mecham
|
|
| (c) 2001 - 2006 Invision Power Services, Inc.
|
|
| http://www.invisionpower.com
|
|
| =============================================
|
|
| Web: http://www.invisionboard.com
|
|
| Licence Info: http://www.invisionboard.com/?license
|
|
+---------------------------------------------------------------------------
|
|
| > $Date: 2008-04-10 14:23:41 -0400 (Thu, 10 Apr 2008) $
|
|
| > $Revision: 1235 $
|
|
| > $Author: jason $
|
|
+---------------------------------------------------------------------------
|
|
|
|
|
| > Components Functions
|
|
| > Module written by Matt Mecham
|
|
| > Date started: 12th April 2005 (13:09)
|
|
+--------------------------------------------------------------------------
|
|
*/
|
|
|
|
# CALENDAR SORTING!
|
|
|
|
if ( ! defined( 'IN_ACP' ) )
|
|
{
|
|
print "<h1>Incorrect access</h1>You cannot access this file directly. If you have recently upgraded, make sure you upgraded 'admin.php'.";
|
|
exit();
|
|
}
|
|
|
|
class ad_calendars
|
|
{
|
|
# Globals
|
|
var $ipsclass;
|
|
|
|
var $perm_main = 'content';
|
|
var $perm_child = 'calendars';
|
|
|
|
/*-------------------------------------------------------------------------*/
|
|
// Main handler
|
|
/*-------------------------------------------------------------------------*/
|
|
|
|
function auto_run()
|
|
{
|
|
$this->ipsclass->admin->nav[] = array( $this->ipsclass->form_code, 'Manage Calendars' );
|
|
$this->html = $this->ipsclass->acp_load_template('cp_skin_management');
|
|
|
|
switch($this->ipsclass->input['code'])
|
|
{
|
|
case 'calendar_list':
|
|
$this->ipsclass->admin->cp_permission_check( $this->perm_main.'|'.$this->perm_child.':' );
|
|
$this->calendar_list();
|
|
break;
|
|
|
|
case 'calendar_delete':
|
|
$this->ipsclass->admin->cp_permission_check( $this->perm_main.'|'.$this->perm_child.':remove' );
|
|
$this->calendar_delete();
|
|
break;
|
|
|
|
case 'calendar_add':
|
|
$this->ipsclass->admin->cp_permission_check( $this->perm_main.'|'.$this->perm_child.':add' );
|
|
$this->calendar_form('add');
|
|
break;
|
|
case 'calendar_add_do':
|
|
$this->ipsclass->admin->cp_permission_check( $this->perm_main.'|'.$this->perm_child.':add' );
|
|
$this->calendar_save('add');
|
|
break;
|
|
|
|
case 'calendar_edit':
|
|
$this->ipsclass->admin->cp_permission_check( $this->perm_main.'|'.$this->perm_child.':edit' );
|
|
$this->calendar_form('edit');
|
|
break;
|
|
case 'calendar_edit_do':
|
|
$this->ipsclass->admin->cp_permission_check( $this->perm_main.'|'.$this->perm_child.':edit' );
|
|
$this->calendar_save('edit');
|
|
break;
|
|
|
|
|
|
case 'calendar_move':
|
|
$this->ipsclass->admin->cp_permission_check( $this->perm_main.'|'.$this->perm_child.':edit' );
|
|
$this->calendar_move();
|
|
break;
|
|
case 'calendar_rebuildcache':
|
|
$this->ipsclass->admin->cp_permission_check( $this->perm_main.'|'.$this->perm_child.':recache' );
|
|
$this->calendar_rebuildcache( 1 );
|
|
break;
|
|
case 'calendar_rss_cache':
|
|
$this->ipsclass->admin->cp_permission_check( $this->perm_main.'|'.$this->perm_child.':recache' );
|
|
$this->calendar_rss_cache( intval($this->ipsclass->input['cal_id']), 1 );
|
|
break;
|
|
|
|
default:
|
|
$this->ipsclass->admin->cp_permission_check( $this->perm_main.'|'.$this->perm_child.':' );
|
|
$this->calendar_list();
|
|
break;
|
|
}
|
|
}
|
|
|
|
/*-------------------------------------------------------------------------*/
|
|
// Components: Delete
|
|
/*-------------------------------------------------------------------------*/
|
|
|
|
function calendar_delete()
|
|
{
|
|
//--------------------------------------------
|
|
// INIT
|
|
//--------------------------------------------
|
|
|
|
$cal_id = intval($this->ipsclass->input['cal_id']);
|
|
|
|
//--------------------------------------------
|
|
// Checks...
|
|
//--------------------------------------------
|
|
|
|
if ( ! $cal_id )
|
|
{
|
|
$this->ipsclass->main_msg = "No ID was passed, please try again";
|
|
$this->components_list();
|
|
return;
|
|
}
|
|
|
|
//--------------------------------------------
|
|
// Delete calendar events
|
|
//--------------------------------------------
|
|
|
|
$this->ipsclass->DB->build_and_exec_query( array( 'delete' => 'cal_events', 'where' => 'event_calendar_id='.$cal_id ) );
|
|
|
|
//--------------------------------------------
|
|
// Delete calendar
|
|
//--------------------------------------------
|
|
|
|
$this->ipsclass->DB->build_and_exec_query( array( 'delete' => 'cal_calendars', 'where' => 'cal_id='.$cal_id ) );
|
|
|
|
//--------------------------------------------
|
|
// Recache and re-RSS
|
|
//--------------------------------------------
|
|
|
|
$this->calendars_rebuildcache();
|
|
$this->calendar_rebuildcache();
|
|
$this->calendar_rss_cache();
|
|
|
|
$this->ipsclass->main_msg = "Calendar Removed";
|
|
$this->calendar_list();
|
|
}
|
|
|
|
/*-------------------------------------------------------------------------*/
|
|
// Components: Position
|
|
/*-------------------------------------------------------------------------*/
|
|
|
|
function calendar_move()
|
|
{
|
|
//--------------------------------------------
|
|
// INIT
|
|
//--------------------------------------------
|
|
|
|
$cal_id = intval($this->ipsclass->input['cal_id']);
|
|
$move = trim($this->ipsclass->input['move']);
|
|
|
|
//--------------------------------------------
|
|
// Checks...
|
|
//--------------------------------------------
|
|
|
|
if ( ! $cal_id OR ! $move )
|
|
{
|
|
$this->ipsclass->main_msg = "No ID was passed, please try again";
|
|
$this->calendar_list();
|
|
return;
|
|
}
|
|
|
|
//--------------------------------------------
|
|
// Get from database
|
|
//--------------------------------------------
|
|
|
|
$calendar = $this->ipsclass->DB->simple_exec_query( array( 'select' => '*', 'from' => 'cal_calendars', 'where' => 'cal_id='.$cal_id ) );
|
|
|
|
$new_position = ( $move == 'up' ) ? intval($calendar['cal_position']) - 1 : intval($calendar['cal_position']) + 1;
|
|
|
|
$this->ipsclass->DB->do_update( 'cal_calendars', array( 'cal_position' => $new_position ), 'cal_id='.$cal_id );
|
|
|
|
$this->calendars_rebuildcache();
|
|
|
|
$this->ipsclass->main_msg = "Calendar repositioned";
|
|
$this->calendar_list();
|
|
}
|
|
|
|
/*-------------------------------------------------------------------------*/
|
|
// Components Rebuild Cache
|
|
/*-------------------------------------------------------------------------*/
|
|
|
|
function calendar_rss_cache( $calendar_id='all', $return=0 )
|
|
{
|
|
//--------------------------------------------
|
|
// INIT
|
|
//--------------------------------------------
|
|
|
|
$seenids = array();
|
|
$calevents = "";
|
|
|
|
//--------------------------------------------
|
|
// Get classes
|
|
//--------------------------------------------
|
|
|
|
require_once( ROOT_PATH . 'sources/action_public/calendar.php' );
|
|
$calendar = new calendar();
|
|
$calendar->ipsclass =& $this->ipsclass;
|
|
|
|
//--------------------------------------------
|
|
// Require classes
|
|
//--------------------------------------------
|
|
|
|
require_once( KERNEL_PATH . 'class_rss.php' );
|
|
$class_rss = new class_rss();
|
|
$class_rss->ipsclass =& $this->ipsclass;
|
|
$class_rss->use_sockets = $this->use_sockets;
|
|
$class_rss->doc_type = $this->ipsclass->vars['gb_char_set'];
|
|
|
|
//-----------------------------------------
|
|
// Make sure we have the HTML component
|
|
//-----------------------------------------
|
|
|
|
if ( ! is_object( $this->html ) )
|
|
{
|
|
$this->html = $this->ipsclass->acp_load_template('cp_skin_management');
|
|
}
|
|
|
|
//--------------------------------------------
|
|
// Reset rss_export cache
|
|
//--------------------------------------------
|
|
|
|
$this->ipsclass->cache['rss_calendar'] = array();
|
|
|
|
//--------------------------------------------
|
|
// Get stuff
|
|
//--------------------------------------------
|
|
|
|
$this->ipsclass->DB->build_query( array( 'select' => '*', 'from' => 'cal_calendars', 'where' => 'cal_rss_export_days > 0 AND cal_rss_export_max > 0 AND cal_rss_export=1' ) );
|
|
$outer = $this->ipsclass->DB->exec_query();
|
|
|
|
while( $row = $this->ipsclass->DB->fetch_row( $outer ) )
|
|
{
|
|
if ( $row['cal_rss_export'] )
|
|
{
|
|
$this->ipsclass->cache['rss_calendar'][] = array( 'url' => $this->ipsclass->vars['board_url'].'/index.php?act=rssout&type=calendar&id='.$row['cal_id'],
|
|
'title' => $row['cal_title'] );
|
|
}
|
|
|
|
if ( $calendar_id == $row['cal_id'] OR $calendar_id == 'all' )
|
|
{
|
|
//--------------------------------------------
|
|
// Create Channel
|
|
//--------------------------------------------
|
|
|
|
$channel_id = $class_rss->create_add_channel( array( 'title' => $row['cal_title'],
|
|
'link' => $this->ipsclass->vars['board_url'].'/index.php?act=calendar&calendar_id='.$row['cal_id'],
|
|
'pubDate' => $class_rss->rss_unix_to_rfc( time() ),
|
|
'ttl' => $row['cal_rss_update'],
|
|
'description' => $row['cal_title']
|
|
) );
|
|
|
|
//--------------------------------------------
|
|
// Check permissions
|
|
//--------------------------------------------
|
|
|
|
$_perms = unserialize( $row['cal_permissions'] );
|
|
$pass = 0;
|
|
|
|
if ( $_perms['perm_read'] == '*' OR preg_match( "/(^|,)".$this->ipsclass->vars['guest_group']."(,|$)/", $_perms['perm_read'] ) )
|
|
{
|
|
$pass = 1;
|
|
}
|
|
|
|
if ( ! $pass )
|
|
{
|
|
continue;
|
|
}
|
|
|
|
//--------------------------------------------
|
|
// Sort out dates
|
|
//--------------------------------------------
|
|
|
|
list( $month, $day, $year ) = explode( ',', gmdate('n,j,Y', time()) );
|
|
|
|
$timenow = gmmktime( 0,0,0, $month, 1, $year );
|
|
$timethen = time() + ($row['cal_rss_export_days'] * 86400) + 86400;
|
|
$nowtime = time() - 86400;
|
|
$items = 0;
|
|
|
|
//--------------------------------------------
|
|
// Get events
|
|
//--------------------------------------------
|
|
|
|
$calendar->get_events_sql( 0, 0, array('timenow' => $timenow, 'timethen' => $timethen, 'cal_id' => $row['cal_id'] ), 0 );
|
|
|
|
//--------------------------------------------
|
|
// OK.. Go through days and check events
|
|
//--------------------------------------------
|
|
|
|
for( $i = 1 ; $i <= $row['cal_rss_export_days'] ; $i++ )
|
|
{
|
|
//--------------------------------------------
|
|
// Get more then!
|
|
//--------------------------------------------
|
|
|
|
list( $month, $day, $year ) = explode( ',', gmdate('n,j,Y', $nowtime) );
|
|
|
|
$eventcache = $calendar->get_day_events( $month, $day, $year );
|
|
|
|
foreach( $eventcache as $event )
|
|
{
|
|
if ( ! in_array( $event['event_id'], $seenids ) )
|
|
{
|
|
//--------------------------------------------
|
|
// Got enough?
|
|
//--------------------------------------------
|
|
|
|
if ( $row['cal_rss_export_max'] <= $items )
|
|
{
|
|
break;
|
|
}
|
|
|
|
if ( $calendar->get_info_events( $event, $month, $day, $year, 0 ) )
|
|
{
|
|
if ( ! $event['event_approved'] )
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if ( $event['event_private'] )
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if ( $event['event_perms'] != '*' AND ! preg_match( "/(^|,)".$this->ipsclass->vars['guest_group']."(,|$)/", $event['event_perms'] ) )
|
|
{
|
|
continue;
|
|
}
|
|
|
|
//--------------------------------------------
|
|
// Get dates
|
|
//--------------------------------------------
|
|
|
|
list( $m , $d , $y ) = explode( ",", gmdate('n,j,Y', $event['event_unix_from'] ) );
|
|
list( $m1, $d1, $y1 ) = explode( ",", gmdate('n,j,Y', $event['event_unix_to'] ) );
|
|
|
|
$event['_from_month'] = $m;
|
|
$event['_from_day'] = $d;
|
|
$event['_from_year'] = $y;
|
|
$event['_to_month'] = $m1;
|
|
$event['_to_day'] = $d1;
|
|
$event['_to_year'] = $y1;
|
|
|
|
if ( $event['recurring'] )
|
|
{
|
|
$event['event_content'] = $this->html->calendar_rss_recurring( $event );
|
|
}
|
|
else if ( $event['single'] )
|
|
{
|
|
$event['event_content'] = $this->html->calendar_rss_single( $event );
|
|
}
|
|
else
|
|
{
|
|
$event['event_content'] = $this->html->calendar_rss_range( $event );
|
|
}
|
|
|
|
$event['event_unix_from'] = $this->ipsclass->vars['time_offset'] > 0 ? $event['event_unix_from'] + ( $this->ipsclass->vars['time_offset'] * 3600 ) : $event['event_unix_from'];
|
|
|
|
$class_rss->create_add_item( $channel_id, array( 'title' => $event['event_title'],
|
|
'link' => $this->ipsclass->vars['board_url'].'/index.php?act=calendar&code=showevent&calendar_id='.$row['cal_id'].'&event_id='.$event['event_id'],
|
|
'description' => $event['event_content'],
|
|
'pubDate' => $class_rss->rss_unix_to_rfc( $event['event_unix_from'] ),
|
|
'guid' => $event['event_id']
|
|
) );
|
|
|
|
}
|
|
|
|
//--------------------------------------------
|
|
// Increment
|
|
//--------------------------------------------
|
|
|
|
$seenids[ $event['event_id'] ] = $event['event_id'];
|
|
$items++;
|
|
}
|
|
}
|
|
|
|
$nowtime += 86400;
|
|
}
|
|
|
|
//--------------------------------------------
|
|
// Compile and save RSS document
|
|
//--------------------------------------------
|
|
|
|
$class_rss->rss_create_document();
|
|
|
|
//--------------------------------------------
|
|
// Update the cache
|
|
//--------------------------------------------
|
|
|
|
$this->ipsclass->DB->do_update( 'cal_calendars', array( 'cal_rss_update_last' => time(),
|
|
'cal_rss_cache' => $class_rss->rss_document ), 'cal_id='.$row['cal_id'] );
|
|
}
|
|
}
|
|
|
|
//--------------------------------------------
|
|
// Update cache
|
|
//--------------------------------------------
|
|
|
|
$this->ipsclass->update_cache( array( 'name' => 'rss_calendar', 'deletefirst' => 1, 'donow' => 1, 'array' => 1 ) );
|
|
|
|
if ( $return )
|
|
{
|
|
$this->ipsclass->main_msg = "Calendar Events RSS Recached";
|
|
$this->calendar_list();
|
|
}
|
|
else
|
|
{
|
|
return $class_rss->rss_document;
|
|
}
|
|
}
|
|
|
|
/*-------------------------------------------------------------------------*/
|
|
// Components Rebuild Cache
|
|
/*-------------------------------------------------------------------------*/
|
|
|
|
function calendar_rebuildcache( $return=0 )
|
|
{
|
|
//--------------------------------------------
|
|
// INIT
|
|
//--------------------------------------------
|
|
|
|
$this->ipsclass->vars['calendar_limit'] = intval($this->ipsclass->vars['calendar_limit']) < 2 ? 1 : intval($this->ipsclass->vars['calendar_limit']);
|
|
|
|
//--------------------------------------------
|
|
// Grab an extra day for the TZ diff
|
|
//--------------------------------------------
|
|
|
|
$this->ipsclass->vars['calendar_limit']++;
|
|
|
|
list( $month, $day, $year ) = explode( ',', gmdate('n,j,Y', time() ) );
|
|
|
|
$timenow = gmmktime( 0,0,0, $month, 1, $year );
|
|
$timethen = time() + (intval($this->ipsclass->vars['calendar_limit']) * 86400);
|
|
$seenids = array();
|
|
$nowtime = time() - 86400;
|
|
$birthdays = "";
|
|
$calevents = "";
|
|
$calendars = array();
|
|
|
|
$a = explode( ',', gmdate( 'Y,n,j,G,i,s', time() ) );
|
|
$day = $a[2];
|
|
$month = $a[1];
|
|
$year = $a[0];
|
|
$daysinmonth = date( 't', time() );
|
|
|
|
//-----------------------------------------
|
|
// Get 24hr before and 24hr after to make
|
|
// sure we don't break any timezones
|
|
//-----------------------------------------
|
|
|
|
$last_day = $day - 1;
|
|
$last_month = $month;
|
|
$last_year = $year;
|
|
$next_day = $day + 1;
|
|
$next_month = $month;
|
|
$next_year = $year;
|
|
|
|
//-----------------------------------------
|
|
// Calculate dates..
|
|
//-----------------------------------------
|
|
|
|
if ( $last_day == 0 )
|
|
{
|
|
$last_month -= 1;
|
|
$last_day = gmdate( 't', time() );
|
|
}
|
|
|
|
if ( $last_month == 0 )
|
|
{
|
|
$last_month = 12;
|
|
$last_year -= 1;
|
|
}
|
|
|
|
if ( $next_day > gmdate( 't', time() ) )
|
|
{
|
|
$next_month += 1;
|
|
$next_day = 1;
|
|
}
|
|
|
|
if ( $next_month == 13 )
|
|
{
|
|
$next_month = 1;
|
|
$next_year += 1;
|
|
}
|
|
|
|
//--------------------------------------------
|
|
// Get classes
|
|
//--------------------------------------------
|
|
|
|
require_once( ROOT_PATH . 'sources/action_public/calendar.php' );
|
|
$calendar = new calendar();
|
|
$calendar->ipsclass =& $this->ipsclass;
|
|
|
|
//--------------------------------------------
|
|
// Get stuff
|
|
//--------------------------------------------
|
|
|
|
$this->ipsclass->DB->build_query( array( 'select' => '*', 'from' => 'cal_calendars' ) );
|
|
$this->ipsclass->DB->exec_query();
|
|
|
|
while( $row = $this->ipsclass->DB->fetch_row() )
|
|
{
|
|
$perms = unserialize( $row['cal_permissions'] );
|
|
$row['_perm_read'] = $perms['perm_read'];
|
|
|
|
$calendars[ $row['cal_id'] ] = $row;
|
|
}
|
|
|
|
$calendar->get_events_sql( 0, 0, array('timenow' => $timenow, 'timethen' => $timethen ) );
|
|
|
|
//echo "<pre>";print_r($calendar->event_cache);exit;
|
|
//--------------------------------------------
|
|
// OK.. Go through days and check events
|
|
//--------------------------------------------
|
|
|
|
for( $i = 0 ; $i <= $this->ipsclass->vars['calendar_limit'] ; $i++ )
|
|
{
|
|
list( $_month, $tday, $year ) = explode( ',', gmdate('n,j,Y', $nowtime) );
|
|
|
|
$eventcache = $calendar->get_day_events( $_month, $tday, $year );
|
|
|
|
foreach( $eventcache as $event )
|
|
{
|
|
if ( ! in_array( $event['event_id'], $seenids ) )
|
|
{
|
|
if ( $calendar->get_info_events( $event, $_month, $tday, $year, 0 ) )
|
|
{
|
|
if ( ! $event['event_approved'] )
|
|
{
|
|
continue;
|
|
}
|
|
|
|
unset( $event['event_content'], $event['event_smilies'] );
|
|
|
|
$event['_perm_read'] = $calendars[ $event['event_calendar_id'] ]['_perm_read'];
|
|
$calevents[ $event['event_id'] ] = $event;
|
|
}
|
|
|
|
$seenids[ $event['event_id'] ] = $event['event_id'];
|
|
}
|
|
}
|
|
|
|
$nowtime += 86400;
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Grab birthdays
|
|
//-----------------------------------------
|
|
|
|
$append_string = "";
|
|
|
|
if( !date("L") )
|
|
{
|
|
if( $month == "2" AND ( $day == "28" OR $day == "27" ) )
|
|
{
|
|
$append_string = " or( bday_month=2 AND bday_day=29 )";
|
|
}
|
|
}
|
|
|
|
$this->ipsclass->DB->simple_construct( array( 'select' => 'id, members_display_name, mgroup, bday_day, bday_month, bday_year',
|
|
'from' => 'members',
|
|
'where' => "( bday_day=$last_day AND bday_month=$last_month )
|
|
or ( bday_day=$day AND bday_month=$month )
|
|
or ( bday_day=$next_day AND bday_month=$next_month ) {$append_string}"
|
|
) );
|
|
|
|
$this->ipsclass->DB->simple_exec();
|
|
|
|
while ( $r = $this->ipsclass->DB->fetch_row() )
|
|
{
|
|
$birthdays[ $r['id'] ] = $r;
|
|
}
|
|
|
|
//--------------------------------------------
|
|
// Update calendar array
|
|
//--------------------------------------------
|
|
|
|
$this->ipsclass->cache['birthdays'] =& $birthdays;
|
|
$this->ipsclass->cache['calendar'] =& $calevents;
|
|
|
|
$this->ipsclass->update_cache( array( 'name' => 'calendar', 'array' => 1, 'deletefirst' => 1 ) );
|
|
$this->ipsclass->update_cache( array( 'name' => 'birthdays', 'array' => 1, 'deletefirst' => 1 ) );
|
|
|
|
if ( $return )
|
|
{
|
|
$this->ipsclass->main_msg = "Calendar Events Recached";
|
|
$this->calendar_list();
|
|
}
|
|
}
|
|
|
|
|
|
/*-------------------------------------------------------------------------*/
|
|
// Components Save
|
|
/*-------------------------------------------------------------------------*/
|
|
|
|
function calendar_save($type='add')
|
|
{
|
|
//--------------------------------------------
|
|
// INIT
|
|
//--------------------------------------------
|
|
|
|
$cal_id = intval($this->ipsclass->input['cal_id']);
|
|
$cal_title = trim( $this->ipsclass->txt_stripslashes( $this->ipsclass->txt_htmlspecialchars($_POST['cal_title'])) );
|
|
$cal_moderate = intval($this->ipsclass->input['cal_moderate']);
|
|
$cal_event_limit = intval($this->ipsclass->input['cal_event_limit']);
|
|
$cal_bday_limit = intval($this->ipsclass->input['cal_bday_limit']);
|
|
$cal_rss_export = intval($this->ipsclass->input['cal_rss_export']);
|
|
$cal_rss_export_days = intval($this->ipsclass->input['cal_rss_export_days']);
|
|
$cal_rss_export_max = intval($this->ipsclass->input['cal_rss_export_max']);
|
|
$cal_rss_update = intval($this->ipsclass->input['cal_rss_update']);
|
|
$cal_perms = array( 'perm_read' => '', 'perm_post' => '', 'perm_nomod' => '' );
|
|
|
|
//--------------------------------------------
|
|
// Checks...
|
|
//--------------------------------------------
|
|
|
|
if ( $type == 'edit' )
|
|
{
|
|
if ( ! $cal_id OR ! $cal_title )
|
|
{
|
|
$this->ipsclass->main_msg = "No ID was passed, please try again";
|
|
$this->calendar_list();
|
|
return;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if ( ! $cal_title )
|
|
{
|
|
$this->ipsclass->main_msg = "You must complete the entire form.";
|
|
$this->calendar_form( $type );
|
|
return;
|
|
}
|
|
}
|
|
|
|
//--------------------------------------------
|
|
// Permission: Read
|
|
//--------------------------------------------
|
|
|
|
if ( $this->ipsclass->input['perm_read_all'] )
|
|
{
|
|
$cal_perms['perm_read'] = '*';
|
|
}
|
|
else if ( is_array( $_POST['perm_read'] ) )
|
|
{
|
|
$cal_perms['perm_read'] = implode( ',', $_POST['perm_read'] );
|
|
}
|
|
|
|
//--------------------------------------------
|
|
// Permission: Start
|
|
//--------------------------------------------
|
|
|
|
if ( $this->ipsclass->input['perm_post_all'] )
|
|
{
|
|
$cal_perms['perm_post'] = '*';
|
|
}
|
|
else if ( is_array( $_POST['perm_post'] ) )
|
|
{
|
|
$cal_perms['perm_post'] = implode( ',', $_POST['perm_post'] );
|
|
}
|
|
|
|
//--------------------------------------------
|
|
// Permission: No mod
|
|
//--------------------------------------------
|
|
|
|
if ( $this->ipsclass->input['perm_nomod_all'] )
|
|
{
|
|
$cal_perms['perm_nomod'] = '*';
|
|
}
|
|
else if ( is_array( $_POST['perm_nomod'] ) )
|
|
{
|
|
$cal_perms['perm_nomod'] = implode( ',', $_POST['perm_nomod'] );
|
|
}
|
|
|
|
//--------------------------------------------
|
|
// Save...
|
|
//--------------------------------------------
|
|
|
|
$array = array( 'cal_title' => $cal_title,
|
|
'cal_moderate' => $cal_moderate,
|
|
'cal_event_limit' => $cal_event_limit,
|
|
'cal_bday_limit' => $cal_bday_limit,
|
|
'cal_rss_export' => $cal_rss_export,
|
|
'cal_rss_export_days' => $cal_rss_export_days,
|
|
'cal_rss_export_max' => $cal_rss_export_max,
|
|
'cal_rss_update' => $cal_rss_update,
|
|
'cal_permissions' => serialize($cal_perms),
|
|
);
|
|
|
|
if ( $type == 'add' )
|
|
{
|
|
$this->ipsclass->DB->do_insert( 'cal_calendars', $array );
|
|
$cal_id = $this->ipsclass->DB->get_insert_id();
|
|
|
|
$this->ipsclass->main_msg = 'New Calendar Added';
|
|
}
|
|
else
|
|
{
|
|
|
|
$this->ipsclass->DB->do_update( 'cal_calendars', $array, 'cal_id='.$cal_id );
|
|
$this->ipsclass->main_msg = 'Calendar Edited';
|
|
}
|
|
|
|
$this->calendars_rebuildcache();
|
|
$this->calendar_rebuildcache( $cal_id, 0 );
|
|
$this->calendar_rss_cache( $cal_id, 0 );
|
|
$this->calendar_list();
|
|
}
|
|
|
|
/*-------------------------------------------------------------------------*/
|
|
// Components: Form
|
|
/*-------------------------------------------------------------------------*/
|
|
|
|
function calendar_form( $type='add' )
|
|
{
|
|
//-----------------------------------------
|
|
// Init Vars
|
|
//-----------------------------------------
|
|
|
|
$cal_id = isset($this->ipsclass->input['cal_id']) ? intval($this->ipsclass->input['cal_id']) : 0;
|
|
$form = array();
|
|
$form['perm_read'] = "";
|
|
$form['perm_post'] = "";
|
|
$form['perm_nomod'] = "";
|
|
$form['perm_read_all'] = "";
|
|
$form['perm_post_all'] = "";
|
|
$form['perm_nomod_all'] = "";
|
|
|
|
//-----------------------------------------
|
|
// Check (please?)
|
|
//-----------------------------------------
|
|
|
|
if ( $type == 'add' )
|
|
{
|
|
$formcode = 'calendar_add_do';
|
|
$title = "Add New Calendar";
|
|
$button = "Add New Calendar";
|
|
|
|
$calendar = array( 'perm_read' => '',
|
|
'perm_post' => '',
|
|
'perm_nomod' => '',
|
|
'cal_title' => '',
|
|
'cal_moderate' => '',
|
|
'cal_event_limit' => '',
|
|
'cal_bday_limit' => '',
|
|
'cal_rss_export' => '',
|
|
'cal_rss_update' => '',
|
|
'cal_rss_export_days' => '',
|
|
'cal_rss_export_max' => '',
|
|
'cal_id' => 0 );
|
|
}
|
|
else
|
|
{
|
|
$calendar = $this->ipsclass->DB->simple_exec_query( array( 'select' => '*', 'from' => 'cal_calendars', 'where' => 'cal_id='.$cal_id ) );
|
|
$calendar = array_merge( $calendar, unserialize( $calendar['cal_permissions'] ) );
|
|
|
|
if ( ! $calendar['cal_id'] )
|
|
{
|
|
$this->ipsclass->main_msg = "No ID was passed, please try again.";
|
|
$this->components_list();
|
|
return;
|
|
}
|
|
|
|
$formcode = 'calendar_edit_do';
|
|
$title = "Edit Calendar ".$calendar['cal_title'];
|
|
$button = "Save Changes";
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Build Groups
|
|
//-----------------------------------------
|
|
|
|
$perm_read_array = ( isset($_POST['perm_read']) AND is_array( $_POST['perm_read'] ) ) ? $_POST['perm_read'] : explode( ',', $calendar['perm_read'] );
|
|
$perm_post_array = ( isset($_POST['perm_post']) AND is_array( $_POST['perm_post'] ) ) ? $_POST['perm_post'] : explode( ',', $calendar['perm_post'] );
|
|
$perm_nomod_array = ( isset($_POST['perm_nomod']) AND is_array( $_POST['perm_nomod'] ) ) ? $_POST['perm_nomod'] : explode( ',', $calendar['perm_nomod'] );
|
|
$perm_read_all = FALSE;
|
|
$perm_post_all = FALSE;
|
|
$perm_nomod_all = FALSE;
|
|
|
|
if ( in_array( '*', $perm_read_array ) OR ( isset($_POST['perm_read_all']) AND $_POST['perm_read_all'] ) )
|
|
{
|
|
$perm_read_all = TRUE;
|
|
$form['perm_read_all'] = ' checked="checked"';
|
|
}
|
|
|
|
if ( in_array( '*', $perm_post_array ) OR ( isset($_POST['perm_post_all']) AND $_POST['perm_post_all'] ) )
|
|
{
|
|
$perm_post_all = TRUE;
|
|
$form['perm_post_all'] = ' checked="checked"';
|
|
}
|
|
|
|
if ( in_array( '*', $perm_nomod_array ) OR ( isset($_POST['perm_nomod_all']) AND $_POST['perm_nomod_all'] ) )
|
|
{
|
|
$perm_nomod_all = TRUE;
|
|
$form['perm_nomod_all'] = ' checked="checked"';
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Perms masks section
|
|
//-----------------------------------------
|
|
|
|
$this->ipsclass->DB->simple_construct( array( 'select' => '*', 'from' => 'forum_perms' ) );
|
|
$this->ipsclass->DB->simple_exec();
|
|
|
|
while ( $data = $this->ipsclass->DB->fetch_row() )
|
|
{
|
|
//-----------------------------------------
|
|
// READ
|
|
//-----------------------------------------
|
|
|
|
if ( is_array($perm_read_array) AND in_array( $data['perm_id'], $perm_read_array ) OR $perm_read_all == TRUE )
|
|
{
|
|
$form['perm_read'] .= "<option value='{$data['perm_id']}' selected='selected'>{$data['perm_name']}</option>";
|
|
}
|
|
else
|
|
{
|
|
$form['perm_read'] .= "<option value='{$data['perm_id']}'>{$data['perm_name']}</option>";
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// POST
|
|
//-----------------------------------------
|
|
|
|
if ( is_array($perm_post_array) AND in_array( $data['perm_id'], $perm_post_array ) OR $perm_post_all == TRUE )
|
|
{
|
|
$form['perm_post'] .= "<option value='{$data['perm_id']}' selected='selected'>{$data['perm_name']}</option>";
|
|
}
|
|
else
|
|
{
|
|
$form['perm_post'] .= "<option value='{$data['perm_id']}'>{$data['perm_name']}</option>";
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// NO MOD
|
|
//-----------------------------------------
|
|
|
|
if ( is_array($perm_nomod_array) AND in_array( $data['perm_id'], $perm_nomod_array ) OR $perm_nomod_all == TRUE )
|
|
{
|
|
$form['perm_nomod'] .= "<option value='{$data['perm_id']}' selected='selected'>{$data['perm_name']}</option>";
|
|
}
|
|
else
|
|
{
|
|
$form['perm_nomod'] .= "<option value='{$data['perm_id']}'>{$data['perm_name']}</option>";
|
|
}
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Form elements
|
|
//-----------------------------------------
|
|
|
|
$form['cal_title'] = $this->ipsclass->adskin->form_input( 'cal_title' , $this->ipsclass->txt_htmlspecialchars( ( isset($_POST['cal_title']) AND $_POST['cal_title'] ) ? $_POST['cal_title'] : $calendar['cal_title'] ) );
|
|
$form['cal_moderate'] = $this->ipsclass->adskin->form_yes_no( 'cal_moderate' , ( isset($_POST['cal_moderate']) AND $_POST['cal_moderate'] ) ? $_POST['cal_moderate'] : $calendar['cal_moderate'] );
|
|
$form['cal_event_limit'] = $this->ipsclass->adskin->form_simple_input( 'cal_event_limit' , ( isset($_POST['cal_event_limit']) AND $_POST['cal_event_limit'] ) ? $_POST['cal_event_limit'] : $calendar['cal_event_limit'], 5 );
|
|
$form['cal_bday_limit'] = $this->ipsclass->adskin->form_simple_input( 'cal_bday_limit' , ( isset($_POST['cal_bday_limit']) AND $_POST['cal_bday_limit'] ) ? $_POST['cal_bday_limit'] : $calendar['cal_bday_limit'], 5 );
|
|
$form['cal_rss_export'] = $this->ipsclass->adskin->form_yes_no( 'cal_rss_export' , ( isset($_POST['cal_rss_export']) AND $_POST['cal_rss_export'] ) ? $_POST['cal_rss_export'] : $calendar['cal_rss_export'] );
|
|
$form['cal_rss_update'] = $this->ipsclass->adskin->form_simple_input( 'cal_rss_update' , ( isset($_POST['cal_rss_update']) AND $_POST['cal_rss_update'] ) ? $_POST['cal_rss_update'] : $calendar['cal_rss_update'], 5 );
|
|
$form['cal_rss_export_days'] = $this->ipsclass->adskin->form_simple_input( 'cal_rss_export_days' , ( isset($_POST['cal_rss_export_days']) AND $_POST['cal_rss_export_days'] ) ? $_POST['cal_rss_export_days'] : $calendar['cal_rss_export_days'], 5 );
|
|
$form['cal_rss_export_max'] = $this->ipsclass->adskin->form_simple_input( 'cal_rss_export_max' , ( isset($_POST['cal_rss_export_max']) AND $_POST['cal_rss_export_max'] ) ? $_POST['cal_rss_export_max'] : $calendar['cal_rss_export_max'], 5 );
|
|
|
|
$this->ipsclass->html .= $this->html->calendar_form( $form, $title, $formcode, $button, $calendar );
|
|
|
|
$this->ipsclass->html_help_title = "Calendar Manager";
|
|
$this->ipsclass->html_help_msg = "This section will allow you to manage your calendars.";
|
|
|
|
$this->ipsclass->admin->nav[] = array( '', "Add/Edit Calendar" );
|
|
$this->ipsclass->admin->output();
|
|
}
|
|
|
|
/*-------------------------------------------------------------------------*/
|
|
// List current calendars
|
|
/*-------------------------------------------------------------------------*/
|
|
|
|
function calendar_list()
|
|
{
|
|
//-------------------------------
|
|
// INIT
|
|
//-------------------------------
|
|
|
|
$content = "";
|
|
$seen_count = 0;
|
|
$total_items = 0;
|
|
$rows = array();
|
|
|
|
//-------------------------------
|
|
// Get components
|
|
//-------------------------------
|
|
|
|
$this->ipsclass->DB->simple_construct( array( 'select' => '*', 'from' => 'cal_calendars', 'order' => 'cal_position ASC' ) );
|
|
$this->ipsclass->DB->simple_exec();
|
|
|
|
while( $r = $this->ipsclass->DB->fetch_row() )
|
|
{
|
|
$total_items++;
|
|
$rows[] = $r;
|
|
}
|
|
|
|
foreach( $rows as $r )
|
|
{
|
|
//-------------------------------
|
|
// Work out position images
|
|
//-------------------------------
|
|
|
|
$r['_pos_up'] = $this->html->calendar_position_blank($r['cal_id']);
|
|
$r['_pos_down'] = $this->html->calendar_position_blank($r['cal_id']);
|
|
|
|
//-------------------------------
|
|
// Work out position images
|
|
//-------------------------------
|
|
|
|
if ( $total_items > 1 )
|
|
{
|
|
if ( ($seen_count + 1) == $total_items )
|
|
{
|
|
# Show up only
|
|
$r['_pos_up'] = $this->html->calendar_position_up($r['cal_id']);
|
|
}
|
|
else if ( $seen_count > 0 AND $seen_count < $total_items )
|
|
{
|
|
# Show both...
|
|
$r['_pos_up'] = $this->html->calendar_position_up($r['cal_id']);
|
|
$r['_pos_down'] = $this->html->calendar_position_down($r['cal_id']);
|
|
}
|
|
else
|
|
{
|
|
# Show down only
|
|
$r['_pos_down'] = $this->html->calendar_position_down($r['cal_id']);
|
|
}
|
|
}
|
|
|
|
$seen_count++;
|
|
|
|
$content .= $this->html->calendar_row($r);
|
|
}
|
|
|
|
$this->ipsclass->html .= $this->html->calendar_overview( $content );
|
|
|
|
$this->ipsclass->admin->page_title = "Calendar Manager";
|
|
$this->ipsclass->admin->page_detail = "This section will allow you to manage your calendars.";
|
|
$this->ipsclass->admin->output();
|
|
}
|
|
|
|
|
|
/*-------------------------------------------------------------------------*/
|
|
// Builds a cache of the current calendars
|
|
/*-------------------------------------------------------------------------*/
|
|
|
|
function calendars_rebuildcache()
|
|
{
|
|
$this->ipsclass->cache['calendars'] = array();
|
|
|
|
$this->ipsclass->DB->build_query( array( 'select' => '*', 'from' => 'cal_calendars', 'order' => 'cal_position ASC' ) );
|
|
|
|
$this->ipsclass->DB->exec_query();
|
|
|
|
while( $r = $this->ipsclass->DB->fetch_row() )
|
|
{
|
|
$this->ipsclass->cache['calendars'][ $r['cal_id'] ] = $r;
|
|
}
|
|
|
|
$this->ipsclass->update_cache( array( 'name' => 'calendars', 'deletefirst' => 1, 'donow' => 1, 'array' => 1 ) );
|
|
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
|
|
?>
|