Merge branch 'MDL-41722-master' of git://github.com/sammarshallou/moodle
[moodle.git] / calendar / tests / calendartype_test_example.php
1 <?php
2 // This file is part of Moodle - http://moodle.org/
3 //
4 // Moodle is free software: you can redistribute it and/or modify
5 // it under the terms of the GNU General Public License as published by
6 // the Free Software Foundation, either version 3 of the License, or
7 // (at your option) any later version.
8 //
9 // Moodle is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 // GNU General Public License for more details.
13 //
14 // You should have received a copy of the GNU General Public License
15 // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
17 namespace calendartype_test;
18 use \core_calendar\type_base;
20 /**
21  * Handles calendar functions for the test calendar.
22  *
23  * The test calendar is going to be 2 years, 2 days, 2 hours and 2 minutes
24  * in the future of the Gregorian calendar.
25  *
26  * @package core_calendar
27  * @copyright 2013 Mark Nelson <markn@moodle.com>
28  * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
29  */
30 class structure extends type_base {
32     /**
33      * Returns a list of all the possible days for all months.
34      *
35      * This is used to generate the select box for the days
36      * in the date selector elements. Some months contain more days
37      * than others so this function should return all possible days as
38      * we can not predict what month will be chosen (the user
39      * may have JS turned off and we need to support this situation in
40      * Moodle).
41      *
42      * @return array the days
43      */
44     public function get_days() {
45         $days = array();
47         for ($i = 1; $i <= 31; $i++) {
48             $days[$i] = $i;
49         }
51         return $days;
52     }
54     /**
55      * Returns a list of all the names of the months.
56      *
57      * @return array the month names
58      */
59     public function get_months() {
60         $months = array();
62         for ($i = 1; $i <= 12; $i++) {
63             $months[$i] = $i;
64         }
66         return $months;
67     }
69     /**
70      * Returns the minimum year of the calendar.
71      *
72      * @return int the minumum year
73      */
74     public function get_min_year() {
75         return 1970;
76     }
78     /**
79      * Returns the maximum year of the calendar.
80      *
81      * @return int the max year
82      */
83     public function get_max_year() {
84         return 2050;
85     }
87     /**
88      * Returns a formatted string that represents a date in user time.
89      *
90      * @param int $date the timestamp in UTC, as obtained from the database
91      * @param string $format strftime format
92      * @param int|float|string $timezone the timezone to use
93      *        {@link http://docs.moodle.org/dev/Time_API#Timezone}
94      * @param bool $fixday if true then the leading zero from %d is removed,
95      *        if false then the leading zero is maintained
96      * @param bool $fixhour if true then the leading zero from %I is removed,
97      *        if false then the leading zero is maintained
98      * @return string the formatted date/time
99      */
100     public function timestamp_to_date_string($date, $format, $timezone, $fixday, $fixhour) {
101         return '';
102     }
104     /**
105      * Given a $time timestamp in GMT (seconds since epoch), returns an array that represents
106      * the date in user time.
107      *
108      * @param int $time timestamp in GMT
109      * @param float|int|string $timezone the timezone to use to calculate the time
110      *        {@link http://docs.moodle.org/dev/Time_API#Timezone}
111      * @return array an array that represents the date in user time
112      */
113     public function timestamp_to_date_array($time, $timezone) {
114         $gregoriancalendar = \core_calendar\type_factory::get_calendar_instance('gregorian');
115         $date = $gregoriancalendar->timestamp_to_date_array($time, $timezone);
116         $newdate = $this->convert_from_gregorian($date['year'], $date['mon'], $date['mday'],
117             $date['hours'], $date['minutes']);
119         $date['year'] = $newdate['year'];
120         $date['mon'] = $newdate['month'];
121         $date['mday'] = $newdate['day'];
122         $date['hours'] = $newdate['hour'];
123         $date['minutes']  = $newdate['minute'];
125         return $date;
126     }
128     /**
129      * Provided with a day, month, year, hour and minute
130      * convert it into the equivalent Gregorian date.
131      *
132      * @param int $year
133      * @param int $month
134      * @param int $day
135      * @param int $hour
136      * @param int $minute
137      * @return array the converted day, month, year, hour and minute.
138      */
139     public function convert_to_gregorian($year, $month, $day, $hour = 0, $minute = 0) {
140         $timestamp = make_timestamp($year, $month, $day, $hour, $minute);
141         $date = date('Y/n/j/H/i', strtotime('-2 year, -2 months, -2 days, -2 hours, -2 minutes', $timestamp));
143         list($year, $month, $day, $hour, $minute) = explode('/', $date);
145         return array('year' => (int) $year,
146                      'month' => (int) $month,
147                      'day' => (int) $day,
148                      'hour' => (int) $hour,
149                      'minute' => (int) $minute);
151     }
153     /**
154      * Provided with a day, month, year, hour and minute in a Gregorian date
155      * convert it into the specific calendar type date.
156      *
157      * @param int $year
158      * @param int $month
159      * @param int $day
160      * @param int $hour
161      * @param int $minute
162      * @return array the converted day, month, year, hour and minute.
163      */
164     public function convert_from_gregorian($year, $month, $day, $hour = 0, $minute = 0) {
165         $timestamp = make_timestamp($year, $month, $day, $hour, $minute);
166         $date = date('Y/n/j/H/i', strtotime('+2 year, +2 months, +2 days, +2 hours, +2 minutes', $timestamp));
168         list($year, $month, $day, $hour, $minute) = explode('/', $date);
170         return array('year' => (int) $year,
171                      'month' => (int) $month,
172                      'day' => (int) $day,
173                      'hour' => (int) $hour,
174                      'minute' => (int) $minute);
175     }