Merge branch 'MDL-49058-master' of git://github.com/jethac/moodle
[moodle.git] / admin / tool / timezoneimport / index.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 /**
18  * Automatic update of Timezones from a new source
19  *
20  * @package    tool
21  * @subpackage timezoneimport
22  * @copyright  1999 onwards Martin Dougiamas  {@link http://moodle.com}
23  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
24  */
26     require_once('../../../config.php');
27     require_once($CFG->libdir.'/adminlib.php');
28     require_once($CFG->libdir.'/filelib.php');
29     require_once($CFG->libdir.'/olson.php');
31     admin_externalpage_setup('tooltimezoneimport');
33     $ok = optional_param('ok', 0, PARAM_BOOL);
36 /// Print headings
38     $strimporttimezones = get_string('importtimezones', 'tool_timezoneimport');
40     echo $OUTPUT->header();
42     echo $OUTPUT->heading($strimporttimezones);
44     if (!$ok or !confirm_sesskey()) {
45         $message = '<br /><br />';
46         $message .= $CFG->tempdir.'/olson.txt<br />';
47         $message .= $CFG->tempdir.'/timezone.txt<br />';
48         $message .= '<a href="https://download.moodle.org/timezone/">https://download.moodle.org/timezone/</a><br />';
49         $message .= '<a href="'.$CFG->wwwroot.'/lib/timezone.txt">'.$CFG->dirroot.'/lib/timezone.txt</a><br />';
50         $message .= '<br />';
52         $message = get_string("configintrotimezones", 'tool_timezoneimport', $message);
54         echo $OUTPUT->confirm($message, 'index.php?ok=1', new moodle_url('/admin/index.php'));
56         echo $OUTPUT->footer();
57         exit;
58     }
61 /// Try to find a source of timezones to import from
63     $importdone = false;
65 /// First, look for an Olson file locally
67     $source = $CFG->tempdir.'/olson.txt';
68     if (!$importdone and is_readable($source)) {
69         if ($timezones = olson_to_timezones($source)) {
70             update_timezone_records($timezones);
71             $importdone = $source;
72         }
73     }
75 /// Next, look for a CSV file locally
77     $source = $CFG->tempdir.'/timezone.txt';
78     if (!$importdone and is_readable($source)) {
79         if ($timezones = get_records_csv($source, 'timezone')) {
80             update_timezone_records($timezones);
81             $importdone = $source;
82         }
83     }
85 /// Otherwise, let's try moodle.org's copy
86     $source = 'https://download.moodle.org/timezone/';
87     if (!$importdone && ($content=download_file_content($source))) {
88         if ($file = fopen($CFG->tempdir.'/timezone.txt', 'w')) {            // Make local copy
89             fwrite($file, $content);
90             fclose($file);
91             if ($timezones = get_records_csv($CFG->tempdir.'/timezone.txt', 'timezone')) {  // Parse it
92                 update_timezone_records($timezones);
93                 $importdone = $source;
94             }
95             unlink($CFG->tempdir.'/timezone.txt');
96         }
97     }
100 /// Final resort, use the copy included in Moodle
101     $source = $CFG->dirroot.'/lib/timezone.txt';
102     if (!$importdone and is_readable($source)) {  // Distribution file
103         if ($timezones = get_records_csv($source, 'timezone')) {
104             update_timezone_records($timezones);
105             $importdone = $source;
106         }
107     }
110 /// That's it!
112     if ($importdone) {
113         $a = new stdClass();
114         $a->count = count($timezones);
115         $a->source  = $importdone;
116         echo $OUTPUT->notification(get_string('importtimezonescount', 'tool_timezoneimport', $a), 'notifysuccess');
117         echo $OUTPUT->continue_button(new moodle_url('/admin/index.php'));
119         $timezonelist = array();
120         foreach ($timezones as $timezone) {
121             if (is_array($timezone)) {
122                 $timezone = (object)$timezone;
123             }
124             if (isset($timezonelist[$timezone->name])) {
125                 $timezonelist[$timezone->name]++;
126             } else {
127                 $timezonelist[$timezone->name] = 1;
128             }
129         }
130         ksort($timezonelist);
132         $timezonetable = new html_table();
133         $timezonetable->head = array(
134             get_string('timezone', 'moodle'),
135             get_string('entries', 'moodle')
136         );
137         $rows = array();
138         foreach ($timezonelist as $name => $count) {
139             $row = new html_table_row(
140                 array(
141                     new html_table_cell($name),
142                     new html_table_cell($count)
143                 )
144             );
145             $rows[] = $row;
146         }
147         $timezonetable->data = $rows;
148         echo html_writer::table($timezonetable);
150     } else {
151         echo $OUTPUT->notification(get_string('importtimezonesfailed', 'tool_timezoneimport'));
152         echo $OUTPUT->continue_button(new moodle_url('/admin/index.php'));
153     }
155     echo $OUTPUT->footer();