blob: 605765bf61ddda380d4e1e55ccaf5ad3d9b96a9e [file] [log] [blame]
Andrey Andreeve8dfc1b2011-12-24 01:22:19 +02001<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
Derek Allard2067d1a2008-11-13 22:59:24 +00002/**
3 * CodeIgniter
4 *
Greg Aker741de1c2010-11-10 14:52:57 -06005 * An open source application development framework for PHP 5.1.6 or newer
Derek Allard2067d1a2008-11-13 22:59:24 +00006 *
Derek Jonesf4a4bd82011-10-20 12:18:42 -05007 * NOTICE OF LICENSE
Andrey Andreeve8dfc1b2011-12-24 01:22:19 +02008 *
Derek Jonesf4a4bd82011-10-20 12:18:42 -05009 * Licensed under the Open Software License version 3.0
Andrey Andreeve8dfc1b2011-12-24 01:22:19 +020010 *
Derek Jonesf4a4bd82011-10-20 12:18:42 -050011 * This source file is subject to the Open Software License (OSL 3.0) that is
12 * bundled with this package in the files license.txt / license.rst. It is
13 * also available through the world wide web at this URL:
14 * http://opensource.org/licenses/OSL-3.0
15 * If you did not receive a copy of the license and are unable to obtain it
16 * through the world wide web, please send an email to
17 * licensing@ellislab.com so we can send you a copy immediately.
18 *
Derek Allard2067d1a2008-11-13 22:59:24 +000019 * @package CodeIgniter
Derek Jonesf4a4bd82011-10-20 12:18:42 -050020 * @author EllisLab Dev Team
21 * @copyright Copyright (c) 2008 - 2011, EllisLab, Inc. (http://ellislab.com/)
22 * @license http://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0)
Derek Allard2067d1a2008-11-13 22:59:24 +000023 * @link http://codeigniter.com
24 * @since Version 1.0
25 * @filesource
26 */
27
28// ------------------------------------------------------------------------
29
30/**
31 * CodeIgniter Calendar Class
32 *
33 * This class enables the creation of calendars
34 *
35 * @package CodeIgniter
36 * @subpackage Libraries
37 * @category Libraries
Derek Jonesf4a4bd82011-10-20 12:18:42 -050038 * @author EllisLab Dev Team
Derek Allard2067d1a2008-11-13 22:59:24 +000039 * @link http://codeigniter.com/user_guide/libraries/calendar.html
40 */
41class CI_Calendar {
42
Andrey Andreeve8dfc1b2011-12-24 01:22:19 +020043 private $CI;
44 public $lang;
45 public $local_time;
46 public $template = '';
47 public $start_day = 'sunday';
48 public $month_type = 'long';
49 public $day_type = 'abr';
50 public $show_next_prev = FALSE;
51 public $next_prev_url = '';
Derek Allard2067d1a2008-11-13 22:59:24 +000052
53 /**
54 * Constructor
55 *
56 * Loads the calendar language file and sets the default time reference
Derek Allard2067d1a2008-11-13 22:59:24 +000057 */
Greg Akera9263282010-11-10 15:26:43 -060058 public function __construct($config = array())
Barry Mienydd671972010-10-04 16:33:58 +020059 {
Derek Allard2067d1a2008-11-13 22:59:24 +000060 $this->CI =& get_instance();
Barry Mienydd671972010-10-04 16:33:58 +020061
Greg Aker3a746652011-04-19 10:59:47 -050062 if ( ! in_array('calendar_lang.php', $this->CI->lang->is_loaded, TRUE))
Derek Allard2067d1a2008-11-13 22:59:24 +000063 {
64 $this->CI->lang->load('calendar');
65 }
66
67 $this->local_time = time();
Barry Mienydd671972010-10-04 16:33:58 +020068
Derek Allard2067d1a2008-11-13 22:59:24 +000069 if (count($config) > 0)
70 {
71 $this->initialize($config);
72 }
Barry Mienydd671972010-10-04 16:33:58 +020073
Derek Allard2067d1a2008-11-13 22:59:24 +000074 log_message('debug', "Calendar Class Initialized");
75 }
Barry Mienydd671972010-10-04 16:33:58 +020076
Derek Allard2067d1a2008-11-13 22:59:24 +000077 // --------------------------------------------------------------------
Barry Mienydd671972010-10-04 16:33:58 +020078
Derek Allard2067d1a2008-11-13 22:59:24 +000079 /**
80 * Initialize the user preferences
81 *
82 * Accepts an associative array as input, containing display preferences
83 *
84 * @access public
85 * @param array config preferences
86 * @return void
Barry Mienydd671972010-10-04 16:33:58 +020087 */
Andrey Andreeve8dfc1b2011-12-24 01:22:19 +020088 public function initialize($config = array())
Derek Allard2067d1a2008-11-13 22:59:24 +000089 {
90 foreach ($config as $key => $val)
91 {
92 if (isset($this->$key))
93 {
94 $this->$key = $val;
95 }
96 }
97 }
Barry Mienydd671972010-10-04 16:33:58 +020098
Derek Allard2067d1a2008-11-13 22:59:24 +000099 // --------------------------------------------------------------------
100
101 /**
102 * Generate the calendar
103 *
104 * @access public
105 * @param integer the year
106 * @param integer the month
107 * @param array the data to be shown in the calendar cells
108 * @return string
109 */
Andrey Andreeve8dfc1b2011-12-24 01:22:19 +0200110 public function generate($year = '', $month = '', $data = array())
Derek Allard2067d1a2008-11-13 22:59:24 +0000111 {
112 // Set and validate the supplied month/year
113 if ($year == '')
Andrey Andreevc7dc07e2011-12-24 16:48:50 +0200114 {
Andrey Andreeve8dfc1b2011-12-24 01:22:19 +0200115 $year = date('Y', $this->local_time);
Andrey Andreevc7dc07e2011-12-24 16:48:50 +0200116 }
Andrey Andreeve8dfc1b2011-12-24 01:22:19 +0200117 elseif (strlen($year) === 1)
Andrey Andreevc7dc07e2011-12-24 16:48:50 +0200118 {
Derek Allard2067d1a2008-11-13 22:59:24 +0000119 $year = '200'.$year;
Andrey Andreevc7dc07e2011-12-24 16:48:50 +0200120 }
Andrey Andreeve8dfc1b2011-12-24 01:22:19 +0200121 elseif (strlen($year) === 2)
Andrey Andreevc7dc07e2011-12-24 16:48:50 +0200122 {
Derek Allard2067d1a2008-11-13 22:59:24 +0000123 $year = '20'.$year;
Andrey Andreevc7dc07e2011-12-24 16:48:50 +0200124 }
Derek Allard2067d1a2008-11-13 22:59:24 +0000125
Andrey Andreeve8dfc1b2011-12-24 01:22:19 +0200126 if ($month == '')
Andrey Andreevc7dc07e2011-12-24 16:48:50 +0200127 {
Andrey Andreeve8dfc1b2011-12-24 01:22:19 +0200128 $month = date('m', $this->local_time);
Andrey Andreevc7dc07e2011-12-24 16:48:50 +0200129 }
Andrey Andreeve8dfc1b2011-12-24 01:22:19 +0200130 elseif (strlen($month) === 1)
Andrey Andreevc7dc07e2011-12-24 16:48:50 +0200131 {
Derek Allard2067d1a2008-11-13 22:59:24 +0000132 $month = '0'.$month;
Andrey Andreevc7dc07e2011-12-24 16:48:50 +0200133 }
Barry Mienydd671972010-10-04 16:33:58 +0200134
Derek Allard2067d1a2008-11-13 22:59:24 +0000135 $adjusted_date = $this->adjust_date($month, $year);
Barry Mienydd671972010-10-04 16:33:58 +0200136
Derek Allard2067d1a2008-11-13 22:59:24 +0000137 $month = $adjusted_date['month'];
138 $year = $adjusted_date['year'];
Barry Mienydd671972010-10-04 16:33:58 +0200139
Derek Allard2067d1a2008-11-13 22:59:24 +0000140 // Determine the total days in the month
141 $total_days = $this->get_total_days($month, $year);
Barry Mienydd671972010-10-04 16:33:58 +0200142
Derek Allard2067d1a2008-11-13 22:59:24 +0000143 // Set the starting day of the week
144 $start_days = array('sunday' => 0, 'monday' => 1, 'tuesday' => 2, 'wednesday' => 3, 'thursday' => 4, 'friday' => 5, 'saturday' => 6);
145 $start_day = ( ! isset($start_days[$this->start_day])) ? 0 : $start_days[$this->start_day];
Barry Mienydd671972010-10-04 16:33:58 +0200146
Derek Allard2067d1a2008-11-13 22:59:24 +0000147 // Set the starting day number
148 $local_date = mktime(12, 0, 0, $month, 1, $year);
149 $date = getdate($local_date);
Derek Jones37f4b9c2011-07-01 17:56:50 -0500150 $day = $start_day + 1 - $date["wday"];
Barry Mienydd671972010-10-04 16:33:58 +0200151
Derek Allard2067d1a2008-11-13 22:59:24 +0000152 while ($day > 1)
153 {
154 $day -= 7;
155 }
Barry Mienydd671972010-10-04 16:33:58 +0200156
Derek Allard2067d1a2008-11-13 22:59:24 +0000157 // Set the current month/year/day
158 // We use this to determine the "today" date
Andrey Andreeve8dfc1b2011-12-24 01:22:19 +0200159 $cur_year = date('Y', $this->local_time);
160 $cur_month = date('m', $this->local_time);
161 $cur_day = date('j', $this->local_time);
Barry Mienydd671972010-10-04 16:33:58 +0200162
Derek Allard2067d1a2008-11-13 22:59:24 +0000163 $is_current_month = ($cur_year == $year AND $cur_month == $month) ? TRUE : FALSE;
Barry Mienydd671972010-10-04 16:33:58 +0200164
Derek Allard2067d1a2008-11-13 22:59:24 +0000165 // Generate the template data array
166 $this->parse_template();
Derek Allard2067d1a2008-11-13 22:59:24 +0000167
Barry Mienydd671972010-10-04 16:33:58 +0200168 // Begin building the calendar output
Andrey Andreevc7dc07e2011-12-24 16:48:50 +0200169 $out = $this->temp['table_open']."\n\n".$this->temp['heading_row_start']."\n";
Barry Mienydd671972010-10-04 16:33:58 +0200170
Derek Allard2067d1a2008-11-13 22:59:24 +0000171 // "previous" month link
172 if ($this->show_next_prev == TRUE)
173 {
Derek Jones37f4b9c2011-07-01 17:56:50 -0500174 // Add a trailing slash to the URL if needed
175 $this->next_prev_url = preg_replace("/(.+?)\/*$/", "\\1/", $this->next_prev_url);
Barry Mienydd671972010-10-04 16:33:58 +0200176
Derek Allard2067d1a2008-11-13 22:59:24 +0000177 $adjusted_date = $this->adjust_date($month - 1, $year);
Andrey Andreeve8dfc1b2011-12-24 01:22:19 +0200178 $out .= str_replace('{previous_url}', $this->next_prev_url.$adjusted_date['year'].'/'.$adjusted_date['month'], $this->temp['heading_previous_cell'])."\n";
Derek Allard2067d1a2008-11-13 22:59:24 +0000179 }
180
181 // Heading containing the month/year
182 $colspan = ($this->show_next_prev == TRUE) ? 5 : 7;
Barry Mienydd671972010-10-04 16:33:58 +0200183
Andrey Andreeve8dfc1b2011-12-24 01:22:19 +0200184 $this->temp['heading_title_cell'] = str_replace('{colspan}', $colspan,
185 str_replace('{heading}', $this->get_month_name($month).'&nbsp;'.$year, $this->temp['heading_title_cell']));
Barry Mienydd671972010-10-04 16:33:58 +0200186
Andrey Andreevc7dc07e2011-12-24 16:48:50 +0200187 $out .= $this->temp['heading_title_cell']."\n";
Derek Allard2067d1a2008-11-13 22:59:24 +0000188
189 // "next" month link
190 if ($this->show_next_prev == TRUE)
Barry Mienydd671972010-10-04 16:33:58 +0200191 {
Derek Allard2067d1a2008-11-13 22:59:24 +0000192 $adjusted_date = $this->adjust_date($month + 1, $year);
193 $out .= str_replace('{next_url}', $this->next_prev_url.$adjusted_date['year'].'/'.$adjusted_date['month'], $this->temp['heading_next_cell']);
194 }
195
Andrey Andreevc7dc07e2011-12-24 16:48:50 +0200196 $out .= "\n".$this->temp['heading_row_end']."\n\n"
Andrey Andreeve8dfc1b2011-12-24 01:22:19 +0200197 // Write the cells containing the days of the week
Andrey Andreevc7dc07e2011-12-24 16:48:50 +0200198 .$this->temp['week_row_start']."\n";
Derek Allard2067d1a2008-11-13 22:59:24 +0000199
200 $day_names = $this->get_day_names();
201
202 for ($i = 0; $i < 7; $i ++)
203 {
204 $out .= str_replace('{week_day}', $day_names[($start_day + $i) %7], $this->temp['week_day_cell']);
205 }
206
Andrey Andreevc7dc07e2011-12-24 16:48:50 +0200207 $out .= "\n".$this->temp['week_row_end']."\n";
Derek Allard2067d1a2008-11-13 22:59:24 +0000208
209 // Build the main body of the calendar
210 while ($day <= $total_days)
211 {
Andrey Andreevc7dc07e2011-12-24 16:48:50 +0200212 $out .= "\n".$this->temp['cal_row_start']."\n";
Derek Allard2067d1a2008-11-13 22:59:24 +0000213
214 for ($i = 0; $i < 7; $i++)
215 {
Andrey Andreeve8dfc1b2011-12-24 01:22:19 +0200216 $out .= ($is_current_month === TRUE AND $day == $cur_day) ? $this->temp['cal_cell_start_today'] : $this->temp['cal_cell_start'];
Barry Mienydd671972010-10-04 16:33:58 +0200217
Derek Allard2067d1a2008-11-13 22:59:24 +0000218 if ($day > 0 AND $day <= $total_days)
Barry Mienydd671972010-10-04 16:33:58 +0200219 {
Derek Allard2067d1a2008-11-13 22:59:24 +0000220 if (isset($data[$day]))
Barry Mienydd671972010-10-04 16:33:58 +0200221 {
Derek Allard2067d1a2008-11-13 22:59:24 +0000222 // Cells with content
Andrey Andreevc7dc07e2011-12-24 16:48:50 +0200223 $temp = ($is_current_month === TRUE AND $day == $cur_day) ?
224 $this->temp['cal_cell_content_today'] : $this->temp['cal_cell_content'];
Andrey Andreeve8dfc1b2011-12-24 01:22:19 +0200225 $out .= str_replace(array('{content}', '{day}'), array($data[$day], $day), $temp);
Derek Allard2067d1a2008-11-13 22:59:24 +0000226 }
227 else
228 {
229 // Cells with no content
Andrey Andreevc7dc07e2011-12-24 16:48:50 +0200230 $temp = ($is_current_month === TRUE AND $day == $cur_day) ?
231 $this->temp['cal_cell_no_content_today'] : $this->temp['cal_cell_no_content'];
Derek Allard2067d1a2008-11-13 22:59:24 +0000232 $out .= str_replace('{day}', $day, $temp);
233 }
234 }
235 else
236 {
237 // Blank cells
238 $out .= $this->temp['cal_cell_blank'];
239 }
Barry Mienydd671972010-10-04 16:33:58 +0200240
Andrey Andreeve8dfc1b2011-12-24 01:22:19 +0200241 $out .= ($is_current_month === TRUE AND $day == $cur_day) ? $this->temp['cal_cell_end_today'] : $this->temp['cal_cell_end'];
Derek Allard2067d1a2008-11-13 22:59:24 +0000242 $day++;
243 }
Barry Mienydd671972010-10-04 16:33:58 +0200244
Andrey Andreevc7dc07e2011-12-24 16:48:50 +0200245 $out .= "\n".$this->temp['cal_row_end']."\n";
Derek Allard2067d1a2008-11-13 22:59:24 +0000246 }
247
Andrey Andreevc7dc07e2011-12-24 16:48:50 +0200248 $out .= "\n".$this->temp['table_close'];
Derek Allard2067d1a2008-11-13 22:59:24 +0000249
250 return $out;
251 }
Barry Mienydd671972010-10-04 16:33:58 +0200252
Derek Allard2067d1a2008-11-13 22:59:24 +0000253 // --------------------------------------------------------------------
254
255 /**
256 * Get Month Name
257 *
258 * Generates a textual month name based on the numeric
259 * month provided.
260 *
261 * @access public
262 * @param integer the month
263 * @return string
264 */
Andrey Andreeve8dfc1b2011-12-24 01:22:19 +0200265 public function get_month_name($month)
Derek Allard2067d1a2008-11-13 22:59:24 +0000266 {
267 if ($this->month_type == 'short')
268 {
269 $month_names = array('01' => 'cal_jan', '02' => 'cal_feb', '03' => 'cal_mar', '04' => 'cal_apr', '05' => 'cal_may', '06' => 'cal_jun', '07' => 'cal_jul', '08' => 'cal_aug', '09' => 'cal_sep', '10' => 'cal_oct', '11' => 'cal_nov', '12' => 'cal_dec');
270 }
271 else
272 {
Derek Allarddefaa172009-08-17 17:24:31 +0000273 $month_names = array('01' => 'cal_january', '02' => 'cal_february', '03' => 'cal_march', '04' => 'cal_april', '05' => 'cal_mayl', '06' => 'cal_june', '07' => 'cal_july', '08' => 'cal_august', '09' => 'cal_september', '10' => 'cal_october', '11' => 'cal_november', '12' => 'cal_december');
Derek Allard2067d1a2008-11-13 22:59:24 +0000274 }
Barry Mienydd671972010-10-04 16:33:58 +0200275
Derek Allard2067d1a2008-11-13 22:59:24 +0000276 $month = $month_names[$month];
Barry Mienydd671972010-10-04 16:33:58 +0200277
Derek Allard2067d1a2008-11-13 22:59:24 +0000278 if ($this->CI->lang->line($month) === FALSE)
279 {
Andrey Andreeve8dfc1b2011-12-24 01:22:19 +0200280 return ucfirst(substr($month, 4));
Derek Allard2067d1a2008-11-13 22:59:24 +0000281 }
282
283 return $this->CI->lang->line($month);
284 }
Barry Mienydd671972010-10-04 16:33:58 +0200285
Derek Allard2067d1a2008-11-13 22:59:24 +0000286 // --------------------------------------------------------------------
287
288 /**
289 * Get Day Names
290 *
291 * Returns an array of day names (Sunday, Monday, etc.) based
Derek Jones37f4b9c2011-07-01 17:56:50 -0500292 * on the type. Options: long, short, abrev
Derek Allard2067d1a2008-11-13 22:59:24 +0000293 *
294 * @access public
295 * @param string
296 * @return array
297 */
Andrey Andreeve8dfc1b2011-12-24 01:22:19 +0200298 public function get_day_names($day_type = '')
Derek Allard2067d1a2008-11-13 22:59:24 +0000299 {
300 if ($day_type != '')
Andrey Andreevc7dc07e2011-12-24 16:48:50 +0200301 {
Derek Allard2067d1a2008-11-13 22:59:24 +0000302 $this->day_type = $day_type;
Andrey Andreevc7dc07e2011-12-24 16:48:50 +0200303 }
Barry Mienydd671972010-10-04 16:33:58 +0200304
Derek Allard2067d1a2008-11-13 22:59:24 +0000305 if ($this->day_type == 'long')
306 {
307 $day_names = array('sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday');
308 }
309 elseif ($this->day_type == 'short')
310 {
311 $day_names = array('sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat');
312 }
313 else
314 {
315 $day_names = array('su', 'mo', 'tu', 'we', 'th', 'fr', 'sa');
316 }
Barry Mienydd671972010-10-04 16:33:58 +0200317
Derek Allard2067d1a2008-11-13 22:59:24 +0000318 $days = array();
Andrey Andreeve8dfc1b2011-12-24 01:22:19 +0200319 for ($i = 0, $c = count($day_names); $i < $c; $i++)
Barry Mienydd671972010-10-04 16:33:58 +0200320 {
Andrey Andreeve8dfc1b2011-12-24 01:22:19 +0200321 $days[] = ($this->CI->lang->line('cal_'.$day_names[$i]) === FALSE) ? ucfirst($day_names[$i]) : $this->CI->lang->line('cal_'.$day_names[$i]);
Derek Allard2067d1a2008-11-13 22:59:24 +0000322 }
Barry Mienydd671972010-10-04 16:33:58 +0200323
Derek Allard2067d1a2008-11-13 22:59:24 +0000324 return $days;
325 }
Barry Mienydd671972010-10-04 16:33:58 +0200326
Derek Allard2067d1a2008-11-13 22:59:24 +0000327 // --------------------------------------------------------------------
328
329 /**
330 * Adjust Date
331 *
332 * This function makes sure that we have a valid month/year.
333 * For example, if you submit 13 as the month, the year will
334 * increment and the month will become January.
335 *
336 * @access public
337 * @param integer the month
338 * @param integer the year
339 * @return array
340 */
Andrey Andreeve8dfc1b2011-12-24 01:22:19 +0200341 public function adjust_date($month, $year)
Derek Allard2067d1a2008-11-13 22:59:24 +0000342 {
343 $date = array();
344
345 $date['month'] = $month;
346 $date['year'] = $year;
347
348 while ($date['month'] > 12)
349 {
350 $date['month'] -= 12;
351 $date['year']++;
352 }
353
354 while ($date['month'] <= 0)
355 {
356 $date['month'] += 12;
357 $date['year']--;
358 }
359
Andrey Andreeve8dfc1b2011-12-24 01:22:19 +0200360 if (strlen($date['month']) === 1)
Derek Allard2067d1a2008-11-13 22:59:24 +0000361 {
362 $date['month'] = '0'.$date['month'];
363 }
364
365 return $date;
366 }
Barry Mienydd671972010-10-04 16:33:58 +0200367
Derek Allard2067d1a2008-11-13 22:59:24 +0000368 // --------------------------------------------------------------------
369
370 /**
371 * Total days in a given month
372 *
373 * @access public
374 * @param integer the month
375 * @param integer the year
376 * @return integer
377 */
Andrey Andreeve8dfc1b2011-12-24 01:22:19 +0200378 public function get_total_days($month, $year)
Derek Allard2067d1a2008-11-13 22:59:24 +0000379 {
380 $days_in_month = array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
381
382 if ($month < 1 OR $month > 12)
383 {
384 return 0;
385 }
386
387 // Is the year a leap year?
388 if ($month == 2)
389 {
390 if ($year % 400 == 0 OR ($year % 4 == 0 AND $year % 100 != 0))
391 {
392 return 29;
393 }
394 }
395
396 return $days_in_month[$month - 1];
397 }
Barry Mienydd671972010-10-04 16:33:58 +0200398
Derek Allard2067d1a2008-11-13 22:59:24 +0000399 // --------------------------------------------------------------------
400
401 /**
402 * Set Default Template Data
403 *
404 * This is used in the event that the user has not created their own template
405 *
406 * @access public
407 * @return array
408 */
Andrey Andreeve8dfc1b2011-12-24 01:22:19 +0200409 public function default_template()
Derek Allard2067d1a2008-11-13 22:59:24 +0000410 {
Derek Jones37f4b9c2011-07-01 17:56:50 -0500411 return array (
Barry Mienydd671972010-10-04 16:33:58 +0200412 'table_open' => '<table border="0" cellpadding="4" cellspacing="0">',
413 'heading_row_start' => '<tr>',
Derek Allard2067d1a2008-11-13 22:59:24 +0000414 'heading_previous_cell' => '<th><a href="{previous_url}">&lt;&lt;</a></th>',
Barry Mienydd671972010-10-04 16:33:58 +0200415 'heading_title_cell' => '<th colspan="{colspan}">{heading}</th>',
416 'heading_next_cell' => '<th><a href="{next_url}">&gt;&gt;</a></th>',
417 'heading_row_end' => '</tr>',
418 'week_row_start' => '<tr>',
419 'week_day_cell' => '<td>{week_day}</td>',
420 'week_row_end' => '</tr>',
421 'cal_row_start' => '<tr>',
422 'cal_cell_start' => '<td>',
Derek Allard2067d1a2008-11-13 22:59:24 +0000423 'cal_cell_start_today' => '<td>',
424 'cal_cell_content' => '<a href="{content}">{day}</a>',
425 'cal_cell_content_today' => '<a href="{content}"><strong>{day}</strong></a>',
426 'cal_cell_no_content' => '{day}',
427 'cal_cell_no_content_today' => '<strong>{day}</strong>',
428 'cal_cell_blank' => '&nbsp;',
429 'cal_cell_end' => '</td>',
430 'cal_cell_end_today' => '</td>',
431 'cal_row_end' => '</tr>',
432 'table_close' => '</table>'
Barry Mienydd671972010-10-04 16:33:58 +0200433 );
Derek Allard2067d1a2008-11-13 22:59:24 +0000434 }
Barry Mienydd671972010-10-04 16:33:58 +0200435
Derek Allard2067d1a2008-11-13 22:59:24 +0000436 // --------------------------------------------------------------------
437
438 /**
439 * Parse Template
440 *
441 * Harvests the data within the template {pseudo-variables}
442 * used to display the calendar
443 *
444 * @access public
445 * @return void
446 */
Andrey Andreeve8dfc1b2011-12-24 01:22:19 +0200447 public function parse_template()
Barry Mienydd671972010-10-04 16:33:58 +0200448 {
Derek Allard2067d1a2008-11-13 22:59:24 +0000449 $this->temp = $this->default_template();
Barry Mienydd671972010-10-04 16:33:58 +0200450
451 if ($this->template == '')
452 {
453 return;
454 }
455
Derek Allard2067d1a2008-11-13 22:59:24 +0000456 $today = array('cal_cell_start_today', 'cal_cell_content_today', 'cal_cell_no_content_today', 'cal_cell_end_today');
Barry Mienydd671972010-10-04 16:33:58 +0200457
Derek Jones37f4b9c2011-07-01 17:56:50 -0500458 foreach (array('table_open', 'table_close', 'heading_row_start', 'heading_previous_cell', 'heading_title_cell', 'heading_next_cell', 'heading_row_end', 'week_row_start', 'week_day_cell', 'week_row_end', 'cal_row_start', 'cal_cell_start', 'cal_cell_content', 'cal_cell_no_content', 'cal_cell_blank', 'cal_cell_end', 'cal_row_end', 'cal_cell_start_today', 'cal_cell_content_today', 'cal_cell_no_content_today', 'cal_cell_end_today') as $val)
Derek Allard2067d1a2008-11-13 22:59:24 +0000459 {
460 if (preg_match("/\{".$val."\}(.*?)\{\/".$val."\}/si", $this->template, $match))
461 {
Andrey Andreeve8dfc1b2011-12-24 01:22:19 +0200462 $this->temp[$val] = $match[1];
Derek Allard2067d1a2008-11-13 22:59:24 +0000463 }
Andrey Andreeve8dfc1b2011-12-24 01:22:19 +0200464 elseif (in_array($val, $today, TRUE))
Derek Allard2067d1a2008-11-13 22:59:24 +0000465 {
Andrey Andreeve8dfc1b2011-12-24 01:22:19 +0200466 $this->temp[$val] = $this->temp[substr($val, 0, -6)];
Derek Allard2067d1a2008-11-13 22:59:24 +0000467 }
Barry Mienydd671972010-10-04 16:33:58 +0200468 }
469 }
Derek Allard2067d1a2008-11-13 22:59:24 +0000470
471}
472
473// END CI_Calendar class
474
475/* End of file Calendar.php */
Andrey Andreeve8dfc1b2011-12-24 01:22:19 +0200476/* Location: ./system/libraries/Calendar.php */