* Invision Power Services * IP.Board v3.4.5 * Calendar functions * Last Updated: $Date: 2013-03-20 17:00:11 -0400 (Wed, 20 Mar 2013) $ * * * @author $Author: AndyMillne $ * @copyright (c) 2001 - 2009 Invision Power Services, Inc. * @license http://www.invisionpower.com/company/standards.php#license * @package IP.Board * @subpackage Calendar * @link http://www.invisionpower.com * @since 5th January 2005 * @version $Revision: 12096 $ */ if ( ! defined( 'IN_IPB' ) ) { print "

Incorrect access

You cannot access this file directly."; exit(); } class app_calendar_classes_functions { /**#@+ * Registry objects * * @access protected * @var object */ protected $registry; protected $DB; protected $settings; protected $request; protected $lang; protected $member; protected $memberData; protected $cache; protected $caches; /**#@-*/ /** * Current calendar ID * * @var int */ protected $calendarId; /** * Calendar arrays (permissions checked) * * @var array */ protected $calendars = array(); /** * Constructor * * @param object Registry object * @param bool Ignore permission check * @param bool Return instead of throwing an error * @return @e bool Initiated successfully */ public function __construct( ipsRegistry $registry, $ignorePermissions=false, $return=false ) { /* Make object */ $this->registry = $registry; $this->DB = $this->registry->DB(); $this->settings =& $this->registry->fetchSettings(); $this->request =& $this->registry->fetchRequest(); $this->lang = $this->registry->getClass('class_localization'); $this->member = $this->registry->member(); $this->memberData =& $this->registry->member()->fetchMemberData(); $this->cache = $this->registry->cache(); $this->caches =& $this->registry->cache()->fetchCaches(); //----------------------------------------- // Make sure calendar app is installed // (this is primarily here for API methods) //----------------------------------------- if( ! IPSLib::appIsInstalled( 'calendar' ) AND ( !defined('IPS_IS_INSTALLER') OR !IPS_IS_INSTALLER ) AND ( !defined('IPS_IS_UPGRADER') OR !IPS_IS_UPGRADER ) ) { if( $return ) { return false; } $this->registry->output->showError( 'no_permission', 1076, null, null, 404 ); } //----------------------------------------- // Check cache //----------------------------------------- if( ! count( $this->caches['calendars'] ) ) { $this->cache->rebuildCache( 'calendars', 'calendar' ); } //----------------------------------------- // Loop through, check perms, etc. //----------------------------------------- $_noPermission = array(); if ( count( $this->caches['calendars'] ) AND is_array( $this->caches['calendars'] ) ) { foreach( $this->caches['calendars'] as $cal_id => $cal ) { //----------------------------------------- // Automatic FURL fix //----------------------------------------- if( !$cal['cal_title_seo'] ) { $cal['cal_title_seo'] = IPSText::makeSeoTitle( $cal['cal_title'] ); $this->DB->update( 'cal_calendars', array( 'cal_title_seo' => $cal['cal_title_seo'] ), 'cal_id=' . $cal_id ); } //----------------------------------------- // Check permissions //----------------------------------------- if( !$this->registry->permissions->check( 'view', $cal ) AND !$ignorePermissions ) { $_noPermission[] = $cal['cal_id']; continue; } $this->calendars[ $cal['cal_id'] ] = $cal; } } //----------------------------------------- // What calendar are we requesting? //----------------------------------------- if( is_string( $this->request['cal_id'] ) AND !empty($this->request['cal_id']) AND isset( $this->calendars[ $this->request['cal_id'] ] ) ) { $this->calendarId = intval($this->request['cal_id']); } else if( !empty($this->request['cal_id']) AND !IN_ACP ) { //----------------------------------------- // Calendar requested but it's not in $this->calendars // Either the cal_id doesn't exist, or user does not have view permissions //----------------------------------------- if( $return ) { return false; } $_header = ( !empty($this->request['cal_id']) AND in_array( $this->request['cal_id'], $_noPermission ) ) ? 403 : 404; $this->registry->output->showError( 'cal_no_perm', 1040, null, null, $_header ); } else { $this->calendarId = ( is_array( $this->calendars ) ) ? key( $this->calendars ) : 0; } return true; } /** * Get calendar array * * @param integer [$calendar_id] Optional calendar ID to retrieve, otherwise defaults to calendar id in request, or default calendar set by admin * @return array */ public function getCalendar( $calendar_id=0 ) { return $this->calendars[ !empty($calendar_id) ? ( isset( $this->calendars[ $calendar_id ] ) ? $calendar_id : $this->calendarId ) : $this->calendarId ]; } /** * Get all calendars * * @return array */ public function getCalendars() { return $this->calendars; } /** * Get calendar jump menu * * @param int [$cal_id] Default calendar ID to select * @param array [$extra] Additional permission bits to check * @return string */ public function getCalendarJump( $selected=0, $extra=array() ) { $return = ""; foreach( $this->calendars as $calendar ) { //----------------------------------------- // Check any extra permissions //----------------------------------------- if( is_array($extra) AND count($extra) ) { foreach( $extra as $_bit ) { if( !$this->registry->permissions->check( $_bit, $calendar ) ) { continue 2; } } } $return .= "\n"; } return $return; } /** * Return an HTML options list of days * * @param integer $day Default selected day * @return string HTML options */ public function returnDayDropdown( $day=0 ) { $return = ""; $day = intval($day); for( $x = 1 ; $x <= 31 ; $x++ ) { $return .= "\t\n"; } return $return; } /** * Returns an HTML options list of months * * @param integer $month Month to select by default * @return string HTML options */ public function returnMonthDropdown( $month=0 ) { $return = ""; $month = intval($month); for( $x = 1 ; $x <= 12 ; $x++ ) { $return .= "\t\n"; } return $return; } /** * Builds a year dropdown * * @param integer $year Year to select by default * @return string HTML dropdown */ public function returnYearDropdown( $year=0 ) { $return = ""; $year = intval($year); $this->settings['start_year'] = $this->settings['start_year'] ? ( $this->settings['start_year'] <= gmstrftime('%Y') ? $this->settings['start_year'] : gmstrftime('%Y') - 2 ) : gmstrftime('%Y') - 2; $this->settings['year_limit'] = $this->settings['year_limit'] ? $this->settings['year_limit'] : 5; if( $this->settings['start_year'] + $this->settings['year_limit'] < gmstrftime('%Y') ) { $this->settings['year_limit'] = gmstrftime('%Y') - $this->settings['start_year']; } for( $x = $this->settings['start_year'], $xy = $this->settings['start_year'] + $this->settings['year_limit'] ; $x <= $xy ; $x++ ) { $return .= "\t\n"; } return $return; } }