📄 index.php
字号:
<?php //$Id: index.php,v 1.31.2.7 2009/02/17 07:33:37 nicolasconnault Exp $///////////////////////////////////////////////////////////////////////////// //// NOTICE OF COPYRIGHT //// //// Moodle - Modular Object-Oriented Dynamic Learning Environment //// http://moodle.com //// //// Copyright (C) 1999 onwards Martin Dougiamas http://moodle.com //// //// This program is free software; you can redistribute it and/or modify //// it under the terms of the GNU General Public License as published by //// the Free Software Foundation; either version 2 of the License, or //// (at your option) any later version. //// //// This program is distributed in the hope that it will be useful, //// but WITHOUT ANY WARRANTY; without even the implied warranty of //// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //// GNU General Public License for more details: //// //// http://www.gnu.org/copyleft/gpl.html //// /////////////////////////////////////////////////////////////////////////////require_once '../../../config.php';require_once $CFG->libdir.'/gradelib.php';require_once $CFG->dirroot.'/grade/lib.php';require_once '../grade_import_form.php';require_once '../lib.php';$id = required_param('id', PARAM_INT); // course id$separator = optional_param('separator', '', PARAM_ALPHA);$verbosescales = optional_param('verbosescales', 1, PARAM_BOOL);define('GRADE_CSV_LINE_LENGTH', 4096);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/csv:view', $context);// sort out delimiterif (isset($CFG->CSV_DELIMITER)) { $csv_delimiter = '\\' . $CFG->CSV_DELIMITER; $csv_delimiter2 = $CFG->CSV_DELIMITER; if (isset($CFG->CSV_ENCODE)) { $csv_encode = '/\&\#' . $CFG->CSV_ENCODE . '/'; }} else if ($separator == 'tab') { $csv_delimiter = "\t"; $csv_delimiter2 = ""; $csv_encode = "";} else { $csv_delimiter = "\,"; $csv_delimiter2 = ","; $csv_encode = '/\&\#44/';}$strgrades = get_string('grades', 'grades');$actionstr = get_string('csv', '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', 'csv');// set up import form$mform = new grade_import_form(null, array('includeseparator'=>!isset($CFG->CSV_DELIMITER), 'verbosescales'=>true));// set up grade import mapping form$header = '';$gradeitems = array();if ($id) { if ($grade_items = grade_item::fetch_all(array('courseid'=>$id))) { foreach ($grade_items as $grade_item) { // skip course type and category type if ($grade_item->itemtype == 'course' || $grade_item->itemtype == 'category') { continue; } // this was idnumber $gradeitems[$grade_item->id] = $grade_item->get_name(); } }}if ($importcode = optional_param('importcode', '', PARAM_FILE)) { $filename = $CFG->dataroot.'/temp/gradeimport/cvs/'.$USER->id.'/'.$importcode; $fp = fopen($filename, "r"); $header = split($csv_delimiter, fgets($fp,GRADE_CSV_LINE_LENGTH), PARAM_RAW);}$mform2 = new grade_import_mapping_form(null, array('gradeitems'=>$gradeitems, 'header'=>$header));// if import form is submittedif ($formdata = $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"); if (function_exists('apache_child_terminate')) { @apache_child_terminate(); } // use current (non-conflicting) time stamp $importcode = get_new_importcode(); if (!$filename = make_upload_directory('temp/gradeimport/cvs/'.$USER->id, true)) { die; } $filename = $filename.'/'.$importcode; $text = $mform->get_file_content('userfile'); // trim utf-8 bom $textlib = textlib_get_instance(); /// normalize line endings and do the encoding conversion $text = $textlib->convert($text, $formdata->encoding); $text = $textlib->trim_utf8_bom($text); // Fix mac/dos newlines $text = preg_replace('!\r\n?!',"\n",$text); $fp = fopen($filename, "w"); fwrite($fp,$text); fclose($fp); $fp = fopen($filename, "r"); // --- get header (field names) --- $header = split($csv_delimiter, fgets($fp,GRADE_CSV_LINE_LENGTH), PARAM_RAW); // print some preview $numlines = 0; // 0 preview lines displayed print_heading(get_string('importpreview', 'grades')); echo '<table>'; echo '<tr>'; foreach ($header as $h) { $h = clean_param($h, PARAM_RAW); echo '<th>'.$h.'</th>'; } echo '</tr>'; while (!feof ($fp) && $numlines <= $formdata->previewrows) { $lines = split($csv_delimiter, fgets($fp,GRADE_CSV_LINE_LENGTH)); echo '<tr>'; foreach ($lines as $line) { echo '<td>'.$line.'</td>';; } $numlines ++; echo '</tr>'; } echo '</table>'; // display the mapping form with header info processed $mform2 = new grade_import_mapping_form(null, array('gradeitems'=>$gradeitems, 'header'=>$header)); $mform2->set_data(array('importcode'=>$importcode, 'id'=>$id, 'verbosescales'=>$verbosescales, 'separator'=>$separator)); $mform2->display();//} else if (($formdata = data_submitted()) && !empty($formdata->map)) {// else if grade import mapping form is submitted} else if ($formdata = $mform2->get_data()) { $importcode = clean_param($formdata->importcode, PARAM_FILE); $filename = $CFG->dataroot.'/temp/gradeimport/cvs/'.$USER->id.'/'.$importcode; if (!file_exists($filename)) { error('error processing upload file'); } if ($fp = fopen($filename, "r")) { // --- get header (field names) --- $header = split($csv_delimiter, clean_param(fgets($fp,GRADE_CSV_LINE_LENGTH), PARAM_RAW)); foreach ($header as $i => $h) { $h = trim($h); $header[$i] = $h; // remove whitespace } } else { error ('could not open file'); } $map = array(); // loops mapping_0, mapping_1 .. mapping_n and construct $map array foreach ($header as $i => $head) { $map[$i] = $formdata->{'mapping_'.$i}; } // if mapping informatioin is supplied $map[clean_param($formdata->mapfrom, PARAM_RAW)] = clean_param($formdata->mapto, PARAM_RAW); // check for mapto collisions $maperrors = array(); foreach ($map as $i=>$j) { if ($j == 0) { // you can have multiple ignores continue; } else { if (!isset($maperrors[$j])) { $maperrors[$j] = true; } else { // collision unlink($filename); // needs to be uploaded again, sorry error('mapping collision detected, 2 fields maps to the same grade item '.$j); } } } // 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(); } // we only operate if file is readable if ($fp = fopen($filename, "r")) { // read the first line makes sure this doesn't get read again $header = split($csv_delimiter, fgets($fp,GRADE_CSV_LINE_LENGTH)); $newgradeitems = array(); // temporary array to keep track of what new headers are processed $status = true; while (!feof ($fp)) { // add something $line = split($csv_delimiter, fgets($fp,GRADE_CSV_LINE_LENGTH)); if(count($line) <= 1){ // there is no data on this line, move on continue; } // array to hold all grades to be inserted $newgrades = array(); // array to hold all feedback $newfeedbacks = array(); // each line is a student record foreach ($line as $key => $value) { //decode encoded commas $value = clean_param($value, PARAM_RAW); $value = trim($value); if ($csv_encode != $csv_delimiter2) { $value = preg_replace($csv_encode, $csv_delimiter2, $value);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -