diff --git a/grade/import/xmlurl/fetch.php b/grade/import/xml/fetch.php
similarity index 100%
rename from grade/import/xmlurl/fetch.php
rename to grade/import/xml/fetch.php
diff --git a/grade/import/xmlurl/grade_import_form.php b/grade/import/xml/grade_import_form.php
similarity index 74%
rename from grade/import/xmlurl/grade_import_form.php
rename to grade/import/xml/grade_import_form.php
index 9662bcbe44a2f..17eabb733d046 100644
--- a/grade/import/xmlurl/grade_import_form.php
+++ b/grade/import/xml/grade_import_form.php
@@ -7,15 +7,20 @@ function definition () {
$mform =& $this->_form;
- $strrequired = get_string('required');
+ $this->set_upload_manager(new upload_manager('userfile', false, false, null, false, 0, true, true, false));
// course id needs to be passed for auth purposes
$mform->addElement('hidden', 'id', optional_param('id'));
$mform->setType('id', PARAM_INT);
$mform->addElement('header', 'general', get_string('importfile', 'grades'));
+ $mform->disabledIf('url', 'userfile', 'noteq', '');
+
// file upload
- $mform->addElement('text', 'url', get_string('importfile', 'grades'), 'size="80"');
- $mform->addRule('url', $strrequired, 'required', null, 'client');
+ $mform->addElement('file', 'userfile', get_string('file'));
+ $mform->setType('userfile', PARAM_FILE);
+ $mform->disabledIf('userfile', 'url', 'noteq', '');
+
+ $mform->addElement('text', 'url', get_string('fileurl', 'gradeimport_xml'), 'size="80"');
if (!empty($CFG->gradepublishing)) {
$mform->addElement('header', 'publishing', get_string('publishing', 'grades'));
@@ -38,8 +43,13 @@ function definition () {
$mform->addElement('date_time_selector', 'validuntil', get_string('keyvaliduntil', 'userkey'), array('optional'=>true));
$mform->setHelpButton('validuntil', array(false, get_string('keyvaliduntil', 'userkey'),
false, true, false, get_string("keyvaliduntilhelp", 'userkey')));
- $mform->disabledIf('iprestriction', 'key', get_string('createnewkey', 'userkey'));
- $mform->disabledIf('validuntil', 'key', get_string('createnewkey', 'userkey'));
+
+ $mform->disabledIf('iprestriction', 'key', 'noteq', 1);
+ $mform->disabledIf('validuntil', 'key', 'noteq', 1);
+
+ $mform->disabledIf('iprestriction', 'url', 'eq', '');
+ $mform->disabledIf('validuntil', 'url', 'eq', '');
+ $mform->disabledIf('key', 'url', 'eq', '');
}
$this->add_action_buttons(false, get_string('uploadgrades', 'grades'));
@@ -48,7 +58,9 @@ function definition () {
function validation($data) {
$err = array();
- if ($data['url'] != clean_param($data['url'], PARAM_URL)) {
+ $strrequired = get_string('required');
+
+ if (array_key_exists('url', $data) and $data['url'] != clean_param($data['url'], PARAM_URL)) {
$err['url'] = get_string('error');
}
diff --git a/grade/import/xmlurl/index.php b/grade/import/xml/import.php
old mode 100755
new mode 100644
similarity index 61%
rename from grade/import/xmlurl/index.php
rename to grade/import/xml/import.php
index 7018c6179dd00..a52370842fef0
--- a/grade/import/xmlurl/index.php
+++ b/grade/import/xml/import.php
@@ -24,11 +24,11 @@
///////////////////////////////////////////////////////////////////////////
require_once '../../../config.php';
-require_once $CFG->dirroot.'/grade/lib.php';
-require_once 'grade_import_form.php';
-require_once '../lib.php';
+require_once 'lib.php';
+require_once $CFG->libdir.'/filelib.php';
-$id = required_param('id', PARAM_INT); // course id
+$url = required_param('url', PARAM_URL); // only real urls here
+$id = required_param('id', PARAM_INT); // course id
if (!$course = get_record('course', 'id', $id)) {
print_error('nocourseid');
@@ -36,43 +36,55 @@
require_login($course);
$context = get_context_instance(CONTEXT_COURSE, $id);
+
require_capability('moodle/grade:import', $context);
-require_capability('gradeimport/xml_getch:view', $context);
+require_capability('gradeimport/xml:view', $context);
+
-// print header
-$strgrades = get_string('grades', 'grades');
-$actionstr = get_string('modulename', 'gradeimport_xmlurl');
-$navigation = grade_build_nav(__FILE__, $actionstr, array('courseid' => $course->id));
+// Large files are likely to take their time and memory. Let PHP know
+// that we'll take longer, and that the process should be recycled soon
+// to free up memory.
+@set_time_limit(0);
+@raise_memory_limit("256M");
+if (function_exists('apache_child_terminate')) {
+ @apache_child_terminate();
+}
-$mform = new grade_import_form();
+$text = download_file_content($url);
+if ($text === false) {
+ error('Can not read file');
+}
-if ($data = $mform->get_data()) {
+$error = '';
+$importcode = import_xml_grades($text, $course, $error);
- if (empty($data->key)) {
- redirect('import.php?id='.$id.'&url='.urlencode($data->url));
+if ($importcode !== false) {
+ /// comit the code if we are up this far
- } else {
- if ($data->key == 1) {
- $data->key = create_user_key('grade/import', $USER->id, $course->id, $data->iprestriction, $data->validuntil);
+ if (defined('USER_KEY_LOGIN')) {
+ if (grade_import_commit($id, $importcode, false)) {
+ echo 'ok';
+ die;
+ } else {
+ error('Grade import error'); //TODO: localize
}
+ } else {
+ $strgrades = get_string('grades', 'grades');
+ $actionstr = get_string('xml', 'grades');
+ $navigation = grade_build_nav(__FILE__, $actionstr, array('courseid' => $course->id));
+
print_header($course->shortname.': '.get_string('grades'), $course->fullname, $navigation);
- print_grade_plugin_selector($id, 'import', 'xmlurl');
+ print_grade_plugin_selector($id, 'import', 'xml');
+
+ grade_import_commit($id, $importcode);
- echo '
';
- $link = $CFG->wwwroot.'/grade/import/xmlurl/fetch.php?id='.$id.'&url='.urlencode($data->url).'&key='.$data->key;
- echo get_string('import', 'grades').':
'.$link.'';
- echo '
';
print_footer();
die;
}
-}
-print_header($course->shortname.': '.get_string('grades'), $course->fullname, $navigation);
-print_grade_plugin_selector($id, 'import', 'xmlurl');
-
-$mform->display();
-
-print_footer();
+} else {
+ error($error);
+}
-?>
+?>
\ No newline at end of file
diff --git a/grade/import/xml/index.php b/grade/import/xml/index.php
index c2309ec705481..912eedfd8eb2c 100755
--- a/grade/import/xml/index.php
+++ b/grade/import/xml/index.php
@@ -1,15 +1,31 @@
libdir.'/gradelib.php';
-require_once $CFG->dirroot.'/grade/lib.php';
-require_once '../grade_import_form.php';
-require_once '../lib.php';
+require_once 'lib.php';
+require_once 'grade_import_form.php';
$id = required_param('id', PARAM_INT); // course id
@@ -22,151 +38,65 @@
require_capability('moodle/grade:import', $context);
require_capability('gradeimport/xml:view', $context);
-
// print header
$strgrades = get_string('grades', 'grades');
-$actionstr = get_string('xml', 'grades');
+$actionstr = get_string('modulename', 'gradeimport_xml');
$navigation = grade_build_nav(__FILE__, $actionstr, array('courseid' => $course->id));
-print_header($course->shortname.': '.get_string('grades'), $course->fullname, $navigation);
-print_grade_plugin_selector($id, 'import', 'xml');
$mform = new grade_import_form();
-if ( $formdata = $mform->get_data()) {
-
- // array to hold all grades to be inserted
- $newgrades = array();
-
- $filename = $mform->get_userfile_name();
+if ($data = $mform->get_data()) {
// Large files are likely to take their time and memory. Let PHP know
// that we'll take longer, and that the process should be recycled soon
// to free up memory.
@set_time_limit(0);
- @raise_memory_limit("192M");
+ @raise_memory_limit("256M");
if (function_exists('apache_child_terminate')) {
@apache_child_terminate();
}
- $text = my_file_get_contents($filename);
-
- // trim utf-8 bom
- $textlib = textlib_get_instance();
- // converts to propert unicode
- $text = $textlib->convert($text, $formdata->encoding);
- $text = $textlib->trim_utf8_bom($text);
- // Fix mac/dos newlines
- $text = preg_replace('!\r\n?!',"\n",$text);
-
- // text is the text, we should xmlize it
- include_once($CFG->dirroot.'/lib/xmlize.php');
- $content = xmlize($text);
-
- if ($results = $content['results']['#']['result']) {
-
- // import batch identifier timestamp
- $importcode = time();
- $status = true;
-
- $numlines = 0;
-
- // print some previews
- print_heading(get_string('importpreview', 'grades'));
-
- echo '';
- foreach ($results as $i => $result) {
- if ($numlines < $formdata->previewrows && isset($results[$i+1])) {
- echo '';
- foreach ($result['#'] as $fieldname => $val) {
- echo ''.$fieldname.' > '.$val[0]['#'].' | ';
- }
- echo '
';
- $numlines ++;
- } else if ($numlines == $formdata->previewrows || !isset($results[$i+1])) {
- echo '
';
- $numlines ++;
- }
-
- if (!$gradeitem = new grade_item(array('idnumber'=>$result['#']['assignment'][0]['#'], 'courseid'=>$course->id))) {
- // gradeitem does not exist
- // no data in temp table so far, abort
- $status = false;
- break;
- }
-
- // grade item locked, abort
- if ($gradeitem->locked) {
- $status = false;
- notify(get_string('gradeitemlocked', 'grades'));
- break 3;
- }
-
- // check if grade_grade is locked and if so, abort
- if ($grade_grade = new grade_grade(array('itemid'=>$gradeitem->id, 'userid'=>$result['#']['student'][0]['#']))) {
- if ($grade_grade->locked) {
- // individual grade locked, abort
- $status = false;
- notify(get_string('gradegradeslocked', 'grades'));
- break 2;
- }
- }
- unset($newgrade);
-
- if (isset($result['#']['score'][0]['#'])) {
- $newgrade -> itemid = $gradeitem->id;
- $newgrade -> rawgrade = $result['#']['score'][0]['#'];
- $newgrade-> userid = $result['#']['student'][0]['#'];
- $newgrades[] = $newgrade;
- }
- }
-
- // loop through info collected so far
- if ($status && !empty($newgrades)) {
- foreach ($newgrades as $newgrade) {
-
- // check if user exist
- if (!$user = get_record('user', 'id', addslashes($newgrade->userid))) {
- // no user found, abort
- $status = false;
- import_cleanup($importcode);
- notify(get_string('baduserid', 'grades'));
- notify(get_string('importfailed', 'grades'));
- break;
- }
-
- // check grade value is a numeric grade
- if (!is_numeric($newgrade->rawgrade)) {
- $status = false;
- import_cleanup($importcode);
- notify(get_string('badgrade', 'grades'));
- break;
- }
-
- // insert this grade into a temp table
- $newgrade->import_code = $importcode;
- if (!insert_record('grade_import_values', addslashes_recursive($newgrade))) {
- $status = false;
- // could not insert into temp table
- import_cleanup($importcode);
- notify(get_string('importfailed', 'grades'));
- break;
- }
- }
- }
+ if ($text = $mform->get_file_content('userfile')) {
+ print_header($course->shortname.': '.get_string('grades'), $course->fullname, $navigation);
+ print_grade_plugin_selector($id, 'import', 'xml');
- // if all ok, we proceed
- if ($status) {
- /// comit the code if we are up this far
+ $error = '';
+ $importcode = import_xml_grades($text, $course, $error);
+ if ($importcode) {
grade_import_commit($id, $importcode);
+ print_footer();
+ die;
+ } else {
+ notify($error);
+ print_continue($CFG->wwwroot.'/grade/index.php?id='.$course->id);
+ print_footer();
+ die;
}
+
+ } else if (empty($data->key)) {
+ redirect('import.php?id='.$id.'&url='.urlencode($data->url));
+
} else {
- // no results section found in xml,
- // assuming bad format, abort import
- notify('badxmlformat', 'grade');
+ if ($data->key == 1) {
+ $data->key = create_user_key('grade/import', $USER->id, $course->id, $data->iprestriction, $data->validuntil);
+ }
+
+ print_header($course->shortname.': '.get_string('grades'), $course->fullname, $navigation);
+ print_grade_plugin_selector($id, 'import', 'xml');
+
+ echo '';
+ $link = $CFG->wwwroot.'/grade/import/xml/fetch.php?id='.$id.'&url='.urlencode($data->url).'&key='.$data->key;
+ echo get_string('import', 'grades').':
'.$link.'';
+ echo '
';
+ print_footer();
+ die;
}
-} else {
- // display the standard upload file form
- $mform->display();
}
+print_header($course->shortname.': '.get_string('grades'), $course->fullname, $navigation);
+print_grade_plugin_selector($id, 'import', 'xml');
+
+$mform->display();
+
print_footer();
+
?>
diff --git a/grade/import/xml/lib.php b/grade/import/xml/lib.php
new file mode 100644
index 0000000000000..419709f939ab4
--- /dev/null
+++ b/grade/import/xml/lib.php
@@ -0,0 +1,103 @@
+libdir.'/gradelib.php';
+require_once($CFG->libdir.'/xmlize.php');
+require_once $CFG->dirroot.'/grade/lib.php';
+require_once $CFG->dirroot.'/grade/import/lib.php';
+
+function import_xml_grades($text, $course, &$error) {
+ $importcode = time(); //TODO: fix predictable+colliding import code!
+ $newgrades = array();
+
+ $status = true;
+
+ $content = xmlize($text);
+
+ if ($results = $content['results']['#']['result']) {
+
+ foreach ($results as $i => $result) {
+ if (!$grade_items = grade_item::fetch_all(array('idnumber'=>$result['#']['assignment'][0]['#'], 'courseid'=>$course->id))) {
+ // gradeitem does not exist
+ // no data in temp table so far, abort
+ $status = false;
+ $error = get_string('errincorrectidnumber', 'gradeimport_xml');
+ break;
+ } else if (count($grade_items) != 1) {
+ $status = false;
+ $error = get_string('errduplicateidnumber', 'gradeimport_xml');
+ break;
+ } else {
+ $grade_item = reset($grade_items);
+ }
+
+ // grade item locked, abort
+ if ($grade_item->locked) {
+ $status = false;
+ $error = get_string('gradeitemlocked', 'grades');
+ break;
+ }
+
+ // check if grade_grade is locked and if so, abort
+ if ($grade_grade = new grade_grade(array('itemid'=>$grade_item->id, 'userid'=>$result['#']['student'][0]['#']))) {
+ if ($grade_grade->locked) {
+ // individual grade locked, abort
+ $status = false;
+ $error = get_string('gradegradeslocked', 'grades');
+ break;
+ }
+ }
+
+ if (isset($result['#']['score'][0]['#'])) {
+ $newgrade = new object();
+ $newgrade->itemid = $grade_item->id;
+ $newgrade->grade = $result['#']['score'][0]['#'];
+ $newgrade->userid = $result['#']['student'][0]['#'];
+ $newgrades[] = $newgrade;
+ }
+ }
+
+ // loop through info collected so far
+ if ($status && !empty($newgrades)) {
+ foreach ($newgrades as $newgrade) {
+
+ // check if user exist
+ if (!$user = get_record('user', 'id', addslashes($newgrade->userid))) {
+ // no user found, abort
+ $status = false;
+ $error = get_string('baduserid', 'grades');
+ break;
+ }
+
+ // check grade value is a numeric grade
+ if (!is_numeric($newgrade->grade)) {
+ $status = false;
+ $error = get_string('badgrade', 'grades');
+ break;
+ }
+
+ // insert this grade into a temp table
+ $newgrade->import_code = $importcode;
+ if (!insert_record('grade_import_values', addslashes_recursive($newgrade))) {
+ $status = false;
+ // could not insert into temp table
+ $error = get_string('importfailed', 'grades');
+ break;
+ }
+ }
+ }
+ } else {
+ // no results section found in xml,
+ // assuming bad format, abort import
+ $status = false;
+ $error = get_string('errbadxmlformat', 'gradeimport_xml');
+ }
+
+ if ($status) {
+ return $importcode;
+
+ } else {
+ import_cleanup($importcode);
+ return false;
+ }
+}
+?>
\ No newline at end of file
diff --git a/grade/import/xml/version.php b/grade/import/xml/version.php
index 55d7451372e08..d616882fb9bdb 100644
--- a/grade/import/xml/version.php
+++ b/grade/import/xml/version.php
@@ -1,6 +1,6 @@
version = 2007072500;
-$plugin->requires = 2007072402;
+$plugin->version = 2007092600;
+$plugin->requires = 2007092002;
?>
diff --git a/grade/import/xmlurl/db/access.php b/grade/import/xmlurl/db/access.php
deleted file mode 100644
index 2cd83369095f6..0000000000000
--- a/grade/import/xmlurl/db/access.php
+++ /dev/null
@@ -1,16 +0,0 @@
- array(
- 'captype' => 'write',
- 'contextlevel' => CONTEXT_COURSE,
- 'legacy' => array(
- 'admin' => CAP_ALLOW
- )
- )
-);
-
-?>
-
-
diff --git a/grade/import/xmlurl/import.php b/grade/import/xmlurl/import.php
deleted file mode 100644
index eb74353a45d6c..0000000000000
--- a/grade/import/xmlurl/import.php
+++ /dev/null
@@ -1,178 +0,0 @@
-libdir.'/filelib.php';
-require_once($CFG->libdir.'/xmlize.php');
-require_once($CFG->libdir.'/gradelib.php');
-require_once $CFG->dirroot.'/grade/lib.php';
-require_once $CFG->dirroot.'/grade/import/lib.php';
-
-$url = required_param('url', PARAM_URL); // only real urls here
-$id = required_param('id', PARAM_INT); // course id
-
-if (!$course = get_record('course', 'id', $id)) {
- print_error('nocourseid');
-}
-
-require_login($course);
-$context = get_context_instance(CONTEXT_COURSE, $id);
-
-require_capability('moodle/grade:import', $context);
-require_capability('gradeimport/xmlurl:view', $context);
-
-
-// Large files are likely to take their time and memory. Let PHP know
-// that we'll take longer, and that the process should be recycled soon
-// to free up memory.
-@set_time_limit(0);
-@raise_memory_limit("192M");
-if (function_exists('apache_child_terminate')) {
- @apache_child_terminate();
-}
-
-$text = download_file_content($url);
-if ($text === false) {
- error('Can not read file');
-}
-
-$status = true;
-$error = '';
-
-$importcode = time();
-$newgrades = array();
-
-$content = xmlize($text);
-
-if ($results = $content['results']['#']['result']) {
-
- foreach ($results as $i => $result) {
- if (!$grade_items = grade_item::fetch_all(array('idnumber'=>$result['#']['assignment'][0]['#'], 'courseid'=>$course->id))) {
- // gradeitem does not exist
- // no data in temp table so far, abort
- $status = false;
- $error = 'incorrect grade item idnumber'; //TODO: localize
- break;
- } else if (count($grade_items) != 1) {
- $status = false;
- $error = 'duplicate grade item idnumber'; //TODO: localize
- break;
- } else {
- $grade_item = reset($grade_items);
- }
-
- // grade item locked, abort
- if ($grade_item->locked) {
- $status = false;
- $error = get_string('gradeitemlocked', 'grades');
- break;
- }
-
- // check if grade_grade is locked and if so, abort
- if ($grade_grade = new grade_grade(array('itemid'=>$grade_item->id, 'userid'=>$result['#']['student'][0]['#']))) {
- if ($grade_grade->locked) {
- // individual grade locked, abort
- $status = false;
- $error = get_string('gradegradeslocked', 'grades');
- break;
- }
- }
-
- if (isset($result['#']['score'][0]['#'])) {
- $newgrade = new object();
- $newgrade->itemid = $grade_item->id;
- $newgrade->grade = $result['#']['score'][0]['#'];
- $newgrade->userid = $result['#']['student'][0]['#'];
- $newgrades[] = $newgrade;
- }
- }
-
- // loop through info collected so far
- if ($status && !empty($newgrades)) {
- foreach ($newgrades as $newgrade) {
-
- // check if user exist
- if (!$user = get_record('user', 'id', addslashes($newgrade->userid))) {
- // no user found, abort
- $status = false;
- $error = get_string('baduserid', 'grades');
- break;
- }
-
- // check grade value is a numeric grade
- if (!is_numeric($newgrade->grade)) {
- $status = false;
- $error = get_string('badgrade', 'grades');
- break;
- }
-
- // insert this grade into a temp table
- $newgrade->import_code = $importcode;
- if (!insert_record('grade_import_values', addslashes_recursive($newgrade))) {
- $status = false;
- // could not insert into temp table
- $error = get_string('importfailed', 'grades');
- break;
- }
- }
- }
-} else {
- // no results section found in xml,
- // assuming bad format, abort import
- $status = false;
- $error = get_string('badxmlformat', 'grade');
-}
-
-if ($status) {
- /// comit the code if we are up this far
-
- if (defined('USER_KEY_LOGIN')) {
- if (grade_import_commit($id, $importcode, false)) {
- echo 'ok';
- die;
- } else {
- error('Grade import error'); //TODO: localize
- }
-
- } else {
- $strgrades = get_string('grades', 'grades');
- $actionstr = get_string('xmlurl', 'grades');
- $navigation = grade_build_nav(__FILE__, $actionstr, array('courseid' => $course->id));
-
- print_header($course->shortname.': '.get_string('grades'), $course->fullname, $navigation);
- print_grade_plugin_selector($id, 'import', 'xmlurl');
-
- grade_import_commit($id, $importcode);
-
- print_footer();
- die;
- }
-
-} else {
- import_cleanup($importcode);
- error($error);
-}
-
-?>
\ No newline at end of file
diff --git a/grade/import/xmlurl/version.php b/grade/import/xmlurl/version.php
deleted file mode 100644
index 9da38254da06d..0000000000000
--- a/grade/import/xmlurl/version.php
+++ /dev/null
@@ -1,6 +0,0 @@
-version = 2007092501;
-$plugin->requires = 2007092002;
-
-?>
diff --git a/lang/en_utf8/gradeimport_xml.php b/lang/en_utf8/gradeimport_xml.php
index e1de4cf608b96..6b76b910eb9c0 100644
--- a/lang/en_utf8/gradeimport_xml.php
+++ b/lang/en_utf8/gradeimport_xml.php
@@ -1,5 +1,9 @@