Proyectos de Subversion Moodle

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 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/>.
16
 
17
/**
18
 * CLI Bulk course registration script from a comma separated file.
19
 *
20
 * @package    tool_uploadcourse
21
 * @copyright  2012 Piers Harding
22
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
23
 */
24
 
25
define('CLI_SCRIPT', true);
26
 
27
require(__DIR__ . '/../../../../config.php');
28
require_once($CFG->libdir . '/clilib.php');
29
require_once($CFG->libdir . '/csvlib.class.php');
30
 
31
$courseconfig = get_config('moodlecourse');
32
 
33
// Now get cli options.
34
list($options, $unrecognized) = cli_get_params(array(
35
    'help' => false,
36
    'mode' => '',
37
    'updatemode' => 'nothing',
38
    'file' => '',
39
    'delimiter' => 'comma',
40
    'encoding' => 'UTF-8',
41
    'shortnametemplate' => '',
42
    'templatecourse' => false,
43
    'restorefile' => false,
44
    'allowdeletes' => false,
45
    'allowrenames' => false,
46
    'allowresets' => false,
47
    'reset' => false,
48
    'category' => core_course_category::get_default()->id,
49
),
50
array(
51
    'h' => 'help',
52
    'm' => 'mode',
53
    'u' => 'updatemode',
54
    'f' => 'file',
55
    'd' => 'delimiter',
56
    'e' => 'encoding',
57
    't' => 'templatecourse',
58
    'r' => 'restorefile',
59
    'g' => 'format',
60
));
61
 
62
if ($unrecognized) {
63
    $unrecognized = implode("\n  ", $unrecognized);
64
    cli_error(get_string('cliunknowoption', 'admin', $unrecognized));
65
}
66
 
67
$help =
68
"Execute Course Upload.
69
 
70
Options:
71
-h, --help                 Print out this help
72
-m, --mode                 Import mode: createnew, createall, createorupdate, update
73
-u, --updatemode           Update mode: nothing, dataonly, dataordefaults¸ missingonly
74
-f, --file                 CSV file
75
-d, --delimiter            CSV delimiter: colon, semicolon, tab, cfg, comma
76
-e, --encoding             CSV file encoding: utf8, ... etc
77
-t, --templatecourse       Shortname of the course to restore after import
78
-r, --restorefile          Backup file to restore after import
79
--reset                    Run the course reset after each course import
80
--allowdeletes             Allow courses to be deleted
81
--allowrenames             Allow courses to be renamed
82
--allowresets              Allow courses to be reset
83
--shortnametemplate        Template to generate the shortname from
84
--category                 ID of default category (--updatemode dataordefaults will use this value)
85
 
86
 
87
Example:
88
\$sudo -u www-data /usr/bin/php admin/tool/uploadcourse/cli/uploadcourse.php --mode=createnew \\
89
       --updatemode=dataonly --file=./courses.csv --delimiter=comma
90
";
91
 
92
if ($options['help']) {
93
    echo $help;
94
    die();
95
}
96
echo "Moodle course uploader running ...\n";
97
 
98
$processoroptions = array(
99
    'allowdeletes' => $options['allowdeletes'],
100
    'allowrenames' => $options['allowrenames'],
101
    'allowresets' => $options['allowresets'],
102
    'reset' => $options['reset'],
103
    'shortnametemplate' => $options['shortnametemplate']
104
);
105
 
106
// Confirm that the mode is valid.
107
$modes = array(
108
    'createnew' => tool_uploadcourse_processor::MODE_CREATE_NEW,
109
    'createall' => tool_uploadcourse_processor::MODE_CREATE_ALL,
110
    'createorupdate' => tool_uploadcourse_processor::MODE_CREATE_OR_UPDATE,
111
    'update' => tool_uploadcourse_processor::MODE_UPDATE_ONLY
112
);
113
if (!isset($options['mode']) || !isset($modes[$options['mode']])) {
114
    echo get_string('invalidmode', 'tool_uploadcourse')."\n";
115
    echo $help;
116
    die();
117
}
118
$processoroptions['mode'] = $modes[$options['mode']];
119
 
120
// Check that the update mode is valid.
121
$updatemodes = array(
122
    'nothing' => tool_uploadcourse_processor::UPDATE_NOTHING,
123
    'dataonly' => tool_uploadcourse_processor::UPDATE_ALL_WITH_DATA_ONLY,
124
    'dataordefaults' => tool_uploadcourse_processor::UPDATE_ALL_WITH_DATA_OR_DEFAUTLS,
125
    'missingonly' => tool_uploadcourse_processor::UPDATE_MISSING_WITH_DATA_OR_DEFAUTLS
126
);
127
if (($processoroptions['mode'] === tool_uploadcourse_processor::MODE_CREATE_OR_UPDATE ||
128
        $processoroptions['mode'] === tool_uploadcourse_processor::MODE_UPDATE_ONLY)
129
        && (!isset($options['updatemode']) || !isset($updatemodes[$options['updatemode']]))) {
130
    echo get_string('invalideupdatemode', 'tool_uploadcourse')."\n";
131
    echo $help;
132
    die();
133
}
134
$processoroptions['updatemode'] = $updatemodes[$options['updatemode']];
135
 
136
// File.
137
if (!empty($options['file'])) {
138
    $options['file'] = realpath($options['file']);
139
}
140
if (!file_exists($options['file'])) {
141
    echo get_string('invalidcsvfile', 'tool_uploadcourse')."\n";
142
    echo $help;
143
    die();
144
}
145
 
146
// Encoding.
147
$encodings = core_text::get_encodings();
148
if (!isset($encodings[$options['encoding']])) {
149
    echo get_string('invalidencoding', 'tool_uploadcourse')."\n";
150
    echo $help;
151
    die();
152
}
153
 
154
// Default values.
155
$defaults = array();
156
$defaults['category'] = $options['category'];
157
$defaults['startdate'] = time() + 3600 * 24;
158
$defaults['enddate'] = $defaults['startdate'] + intval(get_config('moodlecourse', 'courseduration'));
159
$defaults['newsitems'] = $courseconfig->newsitems;
160
$defaults['showgrades'] = $courseconfig->showgrades;
161
$defaults['showreports'] = $courseconfig->showreports;
162
$defaults['maxbytes'] = $courseconfig->maxbytes;
163
$defaults['legacyfiles'] = $CFG->legacyfilesinnewcourses;
164
$defaults['groupmode'] = $courseconfig->groupmode;
165
$defaults['groupmodeforce'] = $courseconfig->groupmodeforce;
166
$defaults['visible'] = $courseconfig->visible;
167
$defaults['lang'] =  $courseconfig->lang;
168
$defaults['enablecompletion'] = $courseconfig->enablecompletion;
169
$defaults['showactivitydates'] = $courseconfig->showactivitydates;
170
 
171
// Course template.
172
if (isset($options['templatecourse'])) {
173
    $processoroptions['templatecourse'] = $options['templatecourse'];
174
}
175
 
176
// Restore file.
177
if ($options['restorefile']) {
178
    $options['restorefile'] = realpath($options['restorefile']);
179
}
180
if ($options['restorefile'] && !file_exists($options['restorefile'])) {
181
    echo get_string('invalidrestorefile', 'tool_uploadcourse')."\n";
182
    echo $help;
183
    die();
184
}
185
$processoroptions['restorefile'] = $options['restorefile'];
186
 
187
// Emulate normal session.
188
\core\cron::setup_user();
189
 
190
// Let's get started!
191
$content = file_get_contents($options['file']);
192
$importid = csv_import_reader::get_new_iid('uploadcourse');
193
$cir = new csv_import_reader($importid, 'uploadcourse');
194
$readcount = $cir->load_csv_content($content, $options['encoding'], $options['delimiter']);
195
unset($content);
196
if ($readcount === false) {
197
    throw new \moodle_exception('csvfileerror', 'tool_uploadcourse', '', $cir->get_error());
198
} else if ($readcount == 0) {
199
    throw new \moodle_exception('csvemptyfile', 'error', '', $cir->get_error());
200
}
201
$processor = new tool_uploadcourse_processor($cir, $processoroptions, $defaults);
202
$processor->execute(new tool_uploadcourse_tracker(tool_uploadcourse_tracker::OUTPUT_PLAIN));