[ Index ] |
PHP Cross Reference of moodle-2.8 |
[Summary view] [Print] [Text view]
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 * prints the form to import items from xml-file 19 * 20 * @author Andreas Grabs 21 * @license http://www.gnu.org/copyleft/gpl.html GNU Public License 22 * @package mod_feedback 23 */ 24 25 require_once("../../config.php"); 26 require_once ("lib.php"); 27 require_once ('import_form.php'); 28 29 // get parameters 30 $id = required_param('id', PARAM_INT); 31 $choosefile = optional_param('choosefile', false, PARAM_PATH); 32 $action = optional_param('action', false, PARAM_ALPHA); 33 34 $url = new moodle_url('/mod/feedback/import.php', array('id'=>$id)); 35 if ($choosefile !== false) { 36 $url->param('choosefile', $choosefile); 37 } 38 if ($action !== false) { 39 $url->param('action', $action); 40 } 41 $PAGE->set_url($url); 42 43 if (! $cm = get_coursemodule_from_id('feedback', $id)) { 44 print_error('invalidcoursemodule'); 45 } 46 47 if (! $course = $DB->get_record("course", array("id"=>$cm->course))) { 48 print_error('coursemisconf'); 49 } 50 51 if (! $feedback = $DB->get_record("feedback", array("id"=>$cm->instance))) { 52 print_error('invalidcoursemodule'); 53 } 54 55 $context = context_module::instance($cm->id); 56 57 require_login($course, true, $cm); 58 59 require_capability('mod/feedback:edititems', $context); 60 61 $mform = new feedback_import_form(); 62 $newformdata = array('id'=>$id, 63 'deleteolditems'=>'1', 64 'action'=>'choosefile', 65 'confirmadd'=>'1', 66 'do_show'=>'templates'); 67 $mform->set_data($newformdata); 68 $formdata = $mform->get_data(); 69 70 if ($mform->is_cancelled()) { 71 redirect('edit.php?id='.$id.'&do_show=templates'); 72 } 73 74 // process if we are happy file is ok 75 if ($choosefile) { 76 $xmlcontent = $mform->get_file_content('choosefile'); 77 78 if (!$xmldata = feedback_load_xml_data($xmlcontent)) { 79 print_error('cannotloadxml', 'feedback', 'edit.php?id='.$id); 80 } 81 82 $importerror = feedback_import_loaded_data($xmldata, $feedback->id); 83 if ($importerror->stat == true) { 84 $url = 'edit.php?id='.$id.'&do_show=templates'; 85 redirect($url, get_string('import_successfully', 'feedback'), 3); 86 exit; 87 } 88 } 89 90 91 /// Print the page header 92 $strfeedbacks = get_string("modulenameplural", "feedback"); 93 $strfeedback = get_string("modulename", "feedback"); 94 95 $PAGE->set_heading($course->fullname); 96 $PAGE->set_title($feedback->name); 97 echo $OUTPUT->header(); 98 echo $OUTPUT->heading(format_string($feedback->name)); 99 /// print the tabs 100 require ('tabs.php'); 101 102 /// Print the main part of the page 103 /////////////////////////////////////////////////////////////////////////// 104 /////////////////////////////////////////////////////////////////////////// 105 /////////////////////////////////////////////////////////////////////////// 106 echo $OUTPUT->heading(get_string('import_questions', 'feedback'), 3); 107 108 if (isset($importerror->msg) AND is_array($importerror->msg)) { 109 echo $OUTPUT->box_start('generalbox errorboxcontent boxaligncenter'); 110 foreach ($importerror->msg as $msg) { 111 echo $msg.'<br />'; 112 } 113 echo $OUTPUT->box_end(); 114 } 115 116 $mform->display(); 117 118 echo $OUTPUT->footer(); 119 120 function feedback_load_xml_data($xmlcontent) { 121 global $CFG; 122 require_once($CFG->dirroot.'/lib/xmlize.php'); 123 124 if (!$xmlcontent = feedback_check_xml_utf8($xmlcontent)) { 125 return false; 126 } 127 128 $data = xmlize($xmlcontent, 1, 'UTF-8'); 129 130 if (intval($data['FEEDBACK']['@']['VERSION']) != 200701) { 131 return false; 132 } 133 $data = $data['FEEDBACK']['#']['ITEMS'][0]['#']['ITEM']; 134 return $data; 135 } 136 137 function feedback_import_loaded_data(&$data, $feedbackid) { 138 global $CFG, $DB; 139 140 feedback_load_feedback_items(); 141 142 $deleteolditems = optional_param('deleteolditems', 0, PARAM_INT); 143 144 $error = new stdClass(); 145 $error->stat = true; 146 $error->msg = array(); 147 148 if (!is_array($data)) { 149 $error->msg[] = get_string('data_is_not_an_array', 'feedback'); 150 $error->stat = false; 151 return $error; 152 } 153 154 if ($deleteolditems) { 155 feedback_delete_all_items($feedbackid); 156 $position = 0; 157 } else { 158 //items will be add to the end of the existing items 159 $position = $DB->count_records('feedback_item', array('feedback'=>$feedbackid)); 160 } 161 162 //depend items we are storing temporary in an mapping list array(new id => dependitem) 163 //we also store a mapping of all items array(oldid => newid) 164 $dependitemsmap = array(); 165 $itembackup = array(); 166 foreach ($data as $item) { 167 $position++; 168 //check the typ 169 $typ = $item['@']['TYPE']; 170 171 //check oldtypes first 172 switch($typ) { 173 case 'radio': 174 $typ = 'multichoice'; 175 $oldtyp = 'radio'; 176 break; 177 case 'dropdown': 178 $typ = 'multichoice'; 179 $oldtyp = 'dropdown'; 180 break; 181 case 'check': 182 $typ = 'multichoice'; 183 $oldtyp = 'check'; 184 break; 185 case 'radiorated': 186 $typ = 'multichoicerated'; 187 $oldtyp = 'radiorated'; 188 break; 189 case 'dropdownrated': 190 $typ = 'multichoicerated'; 191 $oldtyp = 'dropdownrated'; 192 break; 193 default: 194 $oldtyp = $typ; 195 } 196 197 $itemclass = 'feedback_item_'.$typ; 198 if ($typ != 'pagebreak' AND !class_exists($itemclass)) { 199 $error->stat = false; 200 $error->msg[] = 'type ('.$typ.') not found'; 201 continue; 202 } 203 $itemobj = new $itemclass(); 204 205 $newitem = new stdClass(); 206 $newitem->feedback = $feedbackid; 207 $newitem->template = 0; 208 $newitem->typ = $typ; 209 $newitem->name = trim($item['#']['ITEMTEXT'][0]['#']); 210 $newitem->label = trim($item['#']['ITEMLABEL'][0]['#']); 211 $newitem->options = trim($item['#']['OPTIONS'][0]['#']); 212 $newitem->presentation = trim($item['#']['PRESENTATION'][0]['#']); 213 //check old types of radio, check, and so on 214 switch($oldtyp) { 215 case 'radio': 216 $newitem->presentation = 'r>>>>>'.$newitem->presentation; 217 break; 218 case 'dropdown': 219 $newitem->presentation = 'd>>>>>'.$newitem->presentation; 220 break; 221 case 'check': 222 $newitem->presentation = 'c>>>>>'.$newitem->presentation; 223 break; 224 case 'radiorated': 225 $newitem->presentation = 'r>>>>>'.$newitem->presentation; 226 break; 227 case 'dropdownrated': 228 $newitem->presentation = 'd>>>>>'.$newitem->presentation; 229 break; 230 } 231 232 if (isset($item['#']['DEPENDITEM'][0]['#'])) { 233 $newitem->dependitem = intval($item['#']['DEPENDITEM'][0]['#']); 234 } else { 235 $newitem->dependitem = 0; 236 } 237 if (isset($item['#']['DEPENDVALUE'][0]['#'])) { 238 $newitem->dependvalue = trim($item['#']['DEPENDVALUE'][0]['#']); 239 } else { 240 $newitem->dependvalue = ''; 241 } 242 $olditemid = intval($item['#']['ITEMID'][0]['#']); 243 244 if ($typ != 'pagebreak') { 245 $newitem->hasvalue = $itemobj->get_hasvalue(); 246 } else { 247 $newitem->hasvalue = 0; 248 } 249 $newitem->required = intval($item['@']['REQUIRED']); 250 $newitem->position = $position; 251 $newid = $DB->insert_record('feedback_item', $newitem); 252 253 $itembackup[$olditemid] = $newid; 254 if ($newitem->dependitem) { 255 $dependitemsmap[$newid] = $newitem->dependitem; 256 } 257 258 } 259 //remapping the dependency 260 foreach ($dependitemsmap as $key => $dependitem) { 261 $newitem = $DB->get_record('feedback_item', array('id'=>$key)); 262 $newitem->dependitem = $itembackup[$newitem->dependitem]; 263 $DB->update_record('feedback_item', $newitem); 264 } 265 266 return $error; 267 } 268 269 function feedback_check_xml_utf8($text) { 270 //find the encoding 271 $searchpattern = '/^\<\?xml.+(encoding=\"([a-z0-9-]*)\").+\?\>/is'; 272 273 if (!preg_match($searchpattern, $text, $match)) { 274 return false; //no xml-file 275 } 276 277 //$match[0] = \<\? xml ... \?\> (without \) 278 //$match[1] = encoding="...." 279 //$match[2] = ISO-8859-1 or so on 280 if (isset($match[0]) AND !isset($match[1])) { //no encoding given. we assume utf-8 281 return $text; 282 } 283 284 //encoding is given in $match[2] 285 if (isset($match[0]) AND isset($match[1]) AND isset($match[2])) { 286 $enc = $match[2]; 287 return core_text::convert($text, $enc); 288 } 289 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Fri Nov 28 20:29:05 2014 | Cross-referenced by PHPXref 0.7.1 |