Merge branch 'MDL-41792_master' of https://github.com/markn86/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_example;
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 the name of the calendar.
34      *
35      * @return string the calendar name
36      */
37     public function get_name() {
38         return 'test_example';
39     }
41     /**
42      * Returns a list of all the possible days for all months.
43      *
44      * This is used to generate the select box for the days
45      * in the date selector elements. Some months contain more days
46      * than others so this function should return all possible days as
47      * we can not predict what month will be chosen (the user
48      * may have JS turned off and we need to support this situation in
49      * Moodle).
50      *
51      * @return array the days
52      */
53     public function get_days() {
54         $days = array();
56         for ($i = 1; $i <= 31; $i++) {
57             $days[$i] = $i;
58         }
60         return $days;
61     }
63     /**
64      * Returns a list of all the names of the months.
65      *
66      * @return array the month names
67      */
68     public function get_months() {
69         $months = array();
71         for ($i = 1; $i <= 12; $i++) {
72             $months[$i] = $i;
73         }
75         return $months;
76     }
78     /**
79      * Returns the minimum year of the calendar.
80      *
81      * @return int the minumum year
82      */
83     public function get_min_year() {
84         return 1970;
85     }
87     /**
88      * Returns the maximum year of the calendar.
89      *
90      * @return int the max year
91      */
92     public function get_max_year() {
93         return 2050;
94     }
96     /**
97      * Returns the number of days in a week.
98      *
99      * @return int the number of days
100      */
101     public function get_num_weekdays() {
102         return 7;
103     }
105     /**
106      * Returns an indexed list of all the names of the weekdays.
107      *
108      * The list starts with the index 0. Each index, representing a
109      * day, must be an array that contains the indexes 'shortname'
110      * and 'fullname'.
111      *
112      * @return array array of days
113      */
114     public function get_weekdays() {
115         return '';
116     }
118     /**
119      * Returns the index of the starting week day.
120      *
121      * @return int
122      */
123     public function get_starting_weekday() {
124         return '';
125     }
127     /**
128      * Returns the index of the weekday for a specific calendar date.
129      *
130      * @param int $year
131      * @param int $month
132      * @param int $day
133      * @return int
134      */
135     public function get_weekday($year, $month, $day) {
136         return '';
137     }
139     /**
140      * Returns the number of days in a given month.
141      *
142      * @param int $year
143      * @param int $month
144      * @return int the number of days
145      */
146     public function get_num_days_in_month($year, $month) {
147         return '';
148     }
150     /**
151      * Get the previous month.
152      *
153      * If the current month is January, it will get the last month of the previous year.
154      *
155      * @param int $year
156      * @param int $month
157      * @return array previous month and year
158      */
159     public function get_prev_month($year, $month) {
160         return '';
161     }
163     /**
164      * Get the next month.
165      *
166      * If the current month is December, it will get the first month of the following year.
167      *
168      * @param int $year
169      * @param int $month
170      * @return array the following month and year
171      */
172     public function get_next_month($year, $month) {
173         return '';
174     }
176     /**
177      * Returns a formatted string that represents a date in user time.
178      *
179      * @param int $time the timestamp in UTC, as obtained from the database
180      * @param string $format strftime format
181      * @param int|float|string $timezone the timezone to use
182      *        {@link http://docs.moodle.org/dev/Time_API#Timezone}
183      * @param bool $fixday if true then the leading zero from %d is removed,
184      *        if false then the leading zero is maintained
185      * @param bool $fixhour if true then the leading zero from %I is removed,
186      *        if false then the leading zero is maintained
187      * @return string the formatted date/time
188      */
189     public function timestamp_to_date_string($time, $format, $timezone, $fixday, $fixhour) {
190         return '';
191     }
193     /**
194      * Given a $time timestamp in GMT (seconds since epoch), returns an array that represents
195      * the date in user time.
196      *
197      * @param int $time timestamp in GMT
198      * @param float|int|string $timezone the timezone to use to calculate the time
199      *        {@link http://docs.moodle.org/dev/Time_API#Timezone}
200      * @return array an array that represents the date in user time
201      */
202     public function timestamp_to_date_array($time, $timezone = 99) {
203         $gregoriancalendar = \core_calendar\type_factory::get_calendar_instance('gregorian');
204         $date = $gregoriancalendar->timestamp_to_date_array($time, $timezone);
205         $newdate = $this->convert_from_gregorian($date['year'], $date['mon'], $date['mday'],
206             $date['hours'], $date['minutes']);
208         $date['year'] = $newdate['year'];
209         $date['mon'] = $newdate['month'];
210         $date['mday'] = $newdate['day'];
211         $date['hours'] = $newdate['hour'];
212         $date['minutes']  = $newdate['minute'];
214         return $date;
215     }
217     /**
218      * Provided with a day, month, year, hour and minute
219      * convert it into the equivalent Gregorian date.
220      *
221      * @param int $year
222      * @param int $month
223      * @param int $day
224      * @param int $hour
225      * @param int $minute
226      * @return array the converted day, month, year, hour and minute.
227      */
228     public function convert_to_gregorian($year, $month, $day, $hour = 0, $minute = 0) {
229         $timestamp = make_timestamp($year, $month, $day, $hour, $minute);
230         $date = date('Y/n/j/H/i', strtotime('-2 year, -2 months, -2 days, -2 hours, -2 minutes', $timestamp));
232         list($year, $month, $day, $hour, $minute) = explode('/', $date);
234         return array('year' => (int) $year,
235             'month' => (int) $month,
236             'day' => (int) $day,
237             'hour' => (int) $hour,
238             'minute' => (int) $minute);
240     }
242     /**
243      * Provided with a day, month, year, hour and minute in a Gregorian date
244      * convert it into the specific calendar type date.
245      *
246      * @param int $year
247      * @param int $month
248      * @param int $day
249      * @param int $hour
250      * @param int $minute
251      * @return array the converted day, month, year, hour and minute.
252      */
253     public function convert_from_gregorian($year, $month, $day, $hour = 0, $minute = 0) {
254         $timestamp = make_timestamp($year, $month, $day, $hour, $minute);
255         $date = date('Y/n/j/H/i', strtotime('+2 year, +2 months, +2 days, +2 hours, +2 minutes', $timestamp));
257         list($year, $month, $day, $hour, $minute) = explode('/', $date);
259         return array('year' => (int) $year,
260             'month' => (int) $month,
261             'day' => (int) $day,
262             'hour' => (int) $hour,
263             'minute' => (int) $minute);
264     }