/lenasys/trunk

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/lenasys/trunk

« back to all changes in this revision

Viewing changes to codeigniter/system/libraries/Calendar.php

  • Committer: Gustav Hatvigsson
  • Date: 2013-05-30 12:02:31 UTC
  • mfrom: (85.1.28 lenasys)
  • Revision ID: gustav.hartvigsson@gmail.com-20130530120231-ttqgqjqw2w8enn7g
Merged Ohlsons changes:
added function to get ssn and name for the registrationspages in the user model.
added the registrationpage for students.
edited the registration page for instructors
edited the css for both the registrationpages
minor fix to registration css

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 
2
/**
 
3
 * CodeIgniter
 
4
 *
 
5
 * An open source application development framework for PHP 5.1.6 or newer
 
6
 *
 
7
 * @package             CodeIgniter
 
8
 * @author              ExpressionEngine Dev Team
 
9
 * @copyright   Copyright (c) 2008 - 2011, EllisLab, Inc.
 
10
 * @license             http://codeigniter.com/user_guide/license.html
 
11
 * @link                http://codeigniter.com
 
12
 * @since               Version 1.0
 
13
 * @filesource
 
14
 */
 
15
 
 
16
// ------------------------------------------------------------------------
 
17
 
 
18
/**
 
19
 * CodeIgniter Calendar Class
 
20
 *
 
21
 * This class enables the creation of calendars
 
22
 *
 
23
 * @package             CodeIgniter
 
24
 * @subpackage  Libraries
 
25
 * @category    Libraries
 
26
 * @author              ExpressionEngine Dev Team
 
27
 * @link                http://codeigniter.com/user_guide/libraries/calendar.html
 
28
 */
 
29
class CI_Calendar {
 
30
 
 
31
        var $CI;
 
32
        var $lang;
 
33
        var $local_time;
 
34
        var $template           = '';
 
35
        var $start_day          = 'sunday';
 
36
        var $month_type         = 'long';
 
37
        var $day_type           = 'abr';
 
38
        var $show_next_prev     = FALSE;
 
39
        var $next_prev_url      = '';
 
40
 
 
41
        /**
 
42
         * Constructor
 
43
         *
 
44
         * Loads the calendar language file and sets the default time reference
 
45
         */
 
46
        public function __construct($config = array())
 
47
        {
 
48
                $this->CI =& get_instance();
 
49
 
 
50
                if ( ! in_array('calendar_lang.php', $this->CI->lang->is_loaded, TRUE))
 
51
                {
 
52
                        $this->CI->lang->load('calendar');
 
53
                }
 
54
 
 
55
                $this->local_time = time();
 
56
 
 
57
                if (count($config) > 0)
 
58
                {
 
59
                        $this->initialize($config);
 
60
                }
 
61
 
 
62
                log_message('debug', "Calendar Class Initialized");
 
63
        }
 
64
 
 
65
        // --------------------------------------------------------------------
 
66
 
 
67
        /**
 
68
         * Initialize the user preferences
 
69
         *
 
70
         * Accepts an associative array as input, containing display preferences
 
71
         *
 
72
         * @access      public
 
73
         * @param       array   config preferences
 
74
         * @return      void
 
75
         */
 
76
        function initialize($config = array())
 
77
        {
 
78
                foreach ($config as $key => $val)
 
79
                {
 
80
                        if (isset($this->$key))
 
81
                        {
 
82
                                $this->$key = $val;
 
83
                        }
 
84
                }
 
85
        }
 
86
 
 
87
        // --------------------------------------------------------------------
 
88
 
 
89
        /**
 
90
         * Generate the calendar
 
91
         *
 
92
         * @access      public
 
93
         * @param       integer the year
 
94
         * @param       integer the month
 
95
         * @param       array   the data to be shown in the calendar cells
 
96
         * @return      string
 
97
         */
 
98
        function generate($year = '', $month = '', $data = array())
 
99
        {
 
100
                // Set and validate the supplied month/year
 
101
                if ($year == '')
 
102
                        $year  = date("Y", $this->local_time);
 
103
 
 
104
                if ($month == '')
 
105
                        $month = date("m", $this->local_time);
 
106
 
 
107
                if (strlen($year) == 1)
 
108
                        $year = '200'.$year;
 
109
 
 
110
                if (strlen($year) == 2)
 
111
                        $year = '20'.$year;
 
112
 
 
113
                if (strlen($month) == 1)
 
114
                        $month = '0'.$month;
 
115
 
 
116
                $adjusted_date = $this->adjust_date($month, $year);
 
117
 
 
118
                $month  = $adjusted_date['month'];
 
119
                $year   = $adjusted_date['year'];
 
120
 
 
121
                // Determine the total days in the month
 
122
                $total_days = $this->get_total_days($month, $year);
 
123
 
 
124
                // Set the starting day of the week
 
125
                $start_days     = array('sunday' => 0, 'monday' => 1, 'tuesday' => 2, 'wednesday' => 3, 'thursday' => 4, 'friday' => 5, 'saturday' => 6);
 
126
                $start_day = ( ! isset($start_days[$this->start_day])) ? 0 : $start_days[$this->start_day];
 
127
 
 
128
                // Set the starting day number
 
129
                $local_date = mktime(12, 0, 0, $month, 1, $year);
 
130
                $date = getdate($local_date);
 
131
                $day  = $start_day + 1 - $date["wday"];
 
132
 
 
133
                while ($day > 1)
 
134
                {
 
135
                        $day -= 7;
 
136
                }
 
137
 
 
138
                // Set the current month/year/day
 
139
                // We use this to determine the "today" date
 
140
                $cur_year       = date("Y", $this->local_time);
 
141
                $cur_month      = date("m", $this->local_time);
 
142
                $cur_day        = date("j", $this->local_time);
 
143
 
 
144
                $is_current_month = ($cur_year == $year AND $cur_month == $month) ? TRUE : FALSE;
 
145
 
 
146
                // Generate the template data array
 
147
                $this->parse_template();
 
148
 
 
149
                // Begin building the calendar output
 
150
                $out = $this->temp['table_open'];
 
151
                $out .= "\n";
 
152
 
 
153
                $out .= "\n";
 
154
                $out .= $this->temp['heading_row_start'];
 
155
                $out .= "\n";
 
156
 
 
157
                // "previous" month link
 
158
                if ($this->show_next_prev == TRUE)
 
159
                {
 
160
                        // Add a trailing slash to the  URL if needed
 
161
                        $this->next_prev_url = preg_replace("/(.+?)\/*$/", "\\1/",  $this->next_prev_url);
 
162
 
 
163
                        $adjusted_date = $this->adjust_date($month - 1, $year);
 
164
                        $out .= str_replace('{previous_url}', $this->next_prev_url.$adjusted_date['year'].'/'.$adjusted_date['month'], $this->temp['heading_previous_cell']);
 
165
                        $out .= "\n";
 
166
                }
 
167
 
 
168
                // Heading containing the month/year
 
169
                $colspan = ($this->show_next_prev == TRUE) ? 5 : 7;
 
170
 
 
171
                $this->temp['heading_title_cell'] = str_replace('{colspan}', $colspan, $this->temp['heading_title_cell']);
 
172
                $this->temp['heading_title_cell'] = str_replace('{heading}', $this->get_month_name($month)."&nbsp;".$year, $this->temp['heading_title_cell']);
 
173
 
 
174
                $out .= $this->temp['heading_title_cell'];
 
175
                $out .= "\n";
 
176
 
 
177
                // "next" month link
 
178
                if ($this->show_next_prev == TRUE)
 
179
                {
 
180
                        $adjusted_date = $this->adjust_date($month + 1, $year);
 
181
                        $out .= str_replace('{next_url}', $this->next_prev_url.$adjusted_date['year'].'/'.$adjusted_date['month'], $this->temp['heading_next_cell']);
 
182
                }
 
183
 
 
184
                $out .= "\n";
 
185
                $out .= $this->temp['heading_row_end'];
 
186
                $out .= "\n";
 
187
 
 
188
                // Write the cells containing the days of the week
 
189
                $out .= "\n";
 
190
                $out .= $this->temp['week_row_start'];
 
191
                $out .= "\n";
 
192
 
 
193
                $day_names = $this->get_day_names();
 
194
 
 
195
                for ($i = 0; $i < 7; $i ++)
 
196
                {
 
197
                        $out .= str_replace('{week_day}', $day_names[($start_day + $i) %7], $this->temp['week_day_cell']);
 
198
                }
 
199
 
 
200
                $out .= "\n";
 
201
                $out .= $this->temp['week_row_end'];
 
202
                $out .= "\n";
 
203
 
 
204
                // Build the main body of the calendar
 
205
                while ($day <= $total_days)
 
206
                {
 
207
                        $out .= "\n";
 
208
                        $out .= $this->temp['cal_row_start'];
 
209
                        $out .= "\n";
 
210
 
 
211
                        for ($i = 0; $i < 7; $i++)
 
212
                        {
 
213
                                $out .= ($is_current_month == TRUE AND $day == $cur_day) ? $this->temp['cal_cell_start_today'] : $this->temp['cal_cell_start'];
 
214
 
 
215
                                if ($day > 0 AND $day <= $total_days)
 
216
                                {
 
217
                                        if (isset($data[$day]))
 
218
                                        {
 
219
                                                // Cells with content
 
220
                                                $temp = ($is_current_month == TRUE AND $day == $cur_day) ? $this->temp['cal_cell_content_today'] : $this->temp['cal_cell_content'];
 
221
                                                $out .= str_replace('{day}', $day, str_replace('{content}', $data[$day], $temp));
 
222
                                        }
 
223
                                        else
 
224
                                        {
 
225
                                                // Cells with no content
 
226
                                                $temp = ($is_current_month == TRUE AND $day == $cur_day) ? $this->temp['cal_cell_no_content_today'] : $this->temp['cal_cell_no_content'];
 
227
                                                $out .= str_replace('{day}', $day, $temp);
 
228
                                        }
 
229
                                }
 
230
                                else
 
231
                                {
 
232
                                        // Blank cells
 
233
                                        $out .= $this->temp['cal_cell_blank'];
 
234
                                }
 
235
 
 
236
                                $out .= ($is_current_month == TRUE AND $day == $cur_day) ? $this->temp['cal_cell_end_today'] : $this->temp['cal_cell_end'];                                     
 
237
                                $day++;
 
238
                        }
 
239
 
 
240
                        $out .= "\n";
 
241
                        $out .= $this->temp['cal_row_end'];
 
242
                        $out .= "\n";
 
243
                }
 
244
 
 
245
                $out .= "\n";
 
246
                $out .= $this->temp['table_close'];
 
247
 
 
248
                return $out;
 
249
        }
 
250
 
 
251
        // --------------------------------------------------------------------
 
252
 
 
253
        /**
 
254
         * Get Month Name
 
255
         *
 
256
         * Generates a textual month name based on the numeric
 
257
         * month provided.
 
258
         *
 
259
         * @access      public
 
260
         * @param       integer the month
 
261
         * @return      string
 
262
         */
 
263
        function get_month_name($month)
 
264
        {
 
265
                if ($this->month_type == 'short')
 
266
                {
 
267
                        $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');
 
268
                }
 
269
                else
 
270
                {
 
271
                        $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');
 
272
                }
 
273
 
 
274
                $month = $month_names[$month];
 
275
 
 
276
                if ($this->CI->lang->line($month) === FALSE)
 
277
                {
 
278
                        return ucfirst(str_replace('cal_', '', $month));
 
279
                }
 
280
 
 
281
                return $this->CI->lang->line($month);
 
282
        }
 
283
 
 
284
        // --------------------------------------------------------------------
 
285
 
 
286
        /**
 
287
         * Get Day Names
 
288
         *
 
289
         * Returns an array of day names (Sunday, Monday, etc.) based
 
290
         * on the type.  Options: long, short, abrev
 
291
         *
 
292
         * @access      public
 
293
         * @param       string
 
294
         * @return      array
 
295
         */
 
296
        function get_day_names($day_type = '')
 
297
        {
 
298
                if ($day_type != '')
 
299
                        $this->day_type = $day_type;
 
300
 
 
301
                if ($this->day_type == 'long')
 
302
                {
 
303
                        $day_names = array('sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday');
 
304
                }
 
305
                elseif ($this->day_type == 'short')
 
306
                {
 
307
                        $day_names = array('sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat');
 
308
                }
 
309
                else
 
310
                {
 
311
                        $day_names = array('su', 'mo', 'tu', 'we', 'th', 'fr', 'sa');
 
312
                }
 
313
 
 
314
                $days = array();
 
315
                foreach ($day_names as $val)
 
316
                {
 
317
                        $days[] = ($this->CI->lang->line('cal_'.$val) === FALSE) ? ucfirst($val) : $this->CI->lang->line('cal_'.$val);
 
318
                }
 
319
 
 
320
                return $days;
 
321
        }
 
322
 
 
323
        // --------------------------------------------------------------------
 
324
 
 
325
        /**
 
326
         * Adjust Date
 
327
         *
 
328
         * This function makes sure that we have a valid month/year.
 
329
         * For example, if you submit 13 as the month, the year will
 
330
         * increment and the month will become January.
 
331
         *
 
332
         * @access      public
 
333
         * @param       integer the month
 
334
         * @param       integer the year
 
335
         * @return      array
 
336
         */
 
337
        function adjust_date($month, $year)
 
338
        {
 
339
                $date = array();
 
340
 
 
341
                $date['month']  = $month;
 
342
                $date['year']   = $year;
 
343
 
 
344
                while ($date['month'] > 12)
 
345
                {
 
346
                        $date['month'] -= 12;
 
347
                        $date['year']++;
 
348
                }
 
349
 
 
350
                while ($date['month'] <= 0)
 
351
                {
 
352
                        $date['month'] += 12;
 
353
                        $date['year']--;
 
354
                }
 
355
 
 
356
                if (strlen($date['month']) == 1)
 
357
                {
 
358
                        $date['month'] = '0'.$date['month'];
 
359
                }
 
360
 
 
361
                return $date;
 
362
        }
 
363
 
 
364
        // --------------------------------------------------------------------
 
365
 
 
366
        /**
 
367
         * Total days in a given month
 
368
         *
 
369
         * @access      public
 
370
         * @param       integer the month
 
371
         * @param       integer the year
 
372
         * @return      integer
 
373
         */
 
374
        function get_total_days($month, $year)
 
375
        {
 
376
                $days_in_month  = array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
 
377
 
 
378
                if ($month < 1 OR $month > 12)
 
379
                {
 
380
                        return 0;
 
381
                }
 
382
 
 
383
                // Is the year a leap year?
 
384
                if ($month == 2)
 
385
                {
 
386
                        if ($year % 400 == 0 OR ($year % 4 == 0 AND $year % 100 != 0))
 
387
                        {
 
388
                                return 29;
 
389
                        }
 
390
                }
 
391
 
 
392
                return $days_in_month[$month - 1];
 
393
        }
 
394
 
 
395
        // --------------------------------------------------------------------
 
396
 
 
397
        /**
 
398
         * Set Default Template Data
 
399
         *
 
400
         * This is used in the event that the user has not created their own template
 
401
         *
 
402
         * @access      public
 
403
         * @return array
 
404
         */
 
405
        function default_template()
 
406
        {
 
407
                return  array (
 
408
                                                'table_open'                            => '<table border="0" cellpadding="4" cellspacing="0">',
 
409
                                                'heading_row_start'                     => '<tr>',
 
410
                                                'heading_previous_cell'         => '<th><a href="{previous_url}">&lt;&lt;</a></th>',
 
411
                                                'heading_title_cell'            => '<th colspan="{colspan}">{heading}</th>',
 
412
                                                'heading_next_cell'                     => '<th><a href="{next_url}">&gt;&gt;</a></th>',
 
413
                                                'heading_row_end'                       => '</tr>',
 
414
                                                'week_row_start'                        => '<tr>',
 
415
                                                'week_day_cell'                         => '<td>{week_day}</td>',
 
416
                                                'week_row_end'                          => '</tr>',
 
417
                                                'cal_row_start'                         => '<tr>',
 
418
                                                'cal_cell_start'                        => '<td>',
 
419
                                                'cal_cell_start_today'          => '<td>',
 
420
                                                'cal_cell_content'                      => '<a href="{content}">{day}</a>',
 
421
                                                'cal_cell_content_today'        => '<a href="{content}"><strong>{day}</strong></a>',
 
422
                                                'cal_cell_no_content'           => '{day}',
 
423
                                                'cal_cell_no_content_today'     => '<strong>{day}</strong>',
 
424
                                                'cal_cell_blank'                        => '&nbsp;',
 
425
                                                'cal_cell_end'                          => '</td>',
 
426
                                                'cal_cell_end_today'            => '</td>',
 
427
                                                'cal_row_end'                           => '</tr>',
 
428
                                                'table_close'                           => '</table>'
 
429
                                        );
 
430
        }
 
431
 
 
432
        // --------------------------------------------------------------------
 
433
 
 
434
        /**
 
435
         * Parse Template
 
436
         *
 
437
         * Harvests the data within the template {pseudo-variables}
 
438
         * used to display the calendar
 
439
         *
 
440
         * @access      public
 
441
         * @return      void
 
442
         */
 
443
        function parse_template()
 
444
        {
 
445
                $this->temp = $this->default_template();
 
446
 
 
447
                if ($this->template == '')
 
448
                {
 
449
                        return;
 
450
                }
 
451
 
 
452
                $today = array('cal_cell_start_today', 'cal_cell_content_today', 'cal_cell_no_content_today', 'cal_cell_end_today');
 
453
 
 
454
                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)
 
455
                {
 
456
                        if (preg_match("/\{".$val."\}(.*?)\{\/".$val."\}/si", $this->template, $match))
 
457
                        {
 
458
                                $this->temp[$val] = $match['1'];
 
459
                        }
 
460
                        else
 
461
                        {
 
462
                                if (in_array($val, $today, TRUE))
 
463
                                {
 
464
                                        $this->temp[$val] = $this->temp[str_replace('_today', '', $val)];
 
465
                                }
 
466
                        }
 
467
                }
 
468
        }
 
469
 
 
470
}
 
471
 
 
472
// END CI_Calendar class
 
473
 
 
474
/* End of file Calendar.php */
 
475
/* Location: ./system/libraries/Calendar.php */
 
 
b'\\ No newline at end of file'