[ Index ] |
PHP Cross Reference of moodle-2.8 |
[Summary view] [Print] [Text view]
1 <?php 2 3 // This file is part of Moodle - http://moodle.org/ 4 // 5 // Moodle is free software: you can redistribute it and/or modify 6 // it under the terms of the GNU General Public License as published by 7 // the Free Software Foundation, either version 3 of the License, or 8 // (at your option) any later version. 9 // 10 // Moodle is distributed in the hope that it will be useful, 11 // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 // GNU General Public License for more details. 14 // 15 // You should have received a copy of the GNU General Public License 16 // along with Moodle. If not, see <http://www.gnu.org/licenses/>. 17 18 /** 19 * This file contains backup and restore output renderers 20 * 21 * @package moodlecore 22 * @copyright 2010 Sam Hemelryk 23 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 24 */ 25 26 /** 27 * The primary renderer for the backup. 28 * 29 * Can be retrieved with the following code: 30 * <?php 31 * $renderer = $PAGE->get_renderer('core','backup'); 32 * ?> 33 * 34 * @copyright 2010 Sam Hemelryk 35 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 36 */ 37 class core_backup_renderer extends plugin_renderer_base { 38 /** 39 * Renderers a progress bar for the backup or restore given the items that 40 * make it up. 41 * @param array $items An array of items 42 * @return string 43 */ 44 public function progress_bar(array $items) { 45 foreach ($items as &$item) { 46 $text = $item['text']; 47 unset($item['text']); 48 if (array_key_exists('link', $item)) { 49 $link = $item['link']; 50 unset($item['link']); 51 $item = html_writer::link($link, $text, $item); 52 } else { 53 $item = html_writer::tag('span', $text, $item); 54 } 55 } 56 return html_writer::tag('div', join(get_separator(), $items), array('class'=>'backup_progress clearfix')); 57 } 58 59 /** 60 * The backup and restore pages may display a log (if any) in a scrolling box. 61 * 62 * @param string $loghtml Log content in HTML format 63 * @return string HTML content that shows the log 64 */ 65 public function log_display($loghtml) { 66 global $OUTPUT; 67 $out = html_writer::start_div('backup_log'); 68 $out .= $OUTPUT->heading(get_string('backuplog', 'backup')); 69 $out .= html_writer::start_div('backup_log_contents'); 70 $out .= $loghtml; 71 $out .= html_writer::end_div(); 72 $out .= html_writer::end_div(); 73 return $out; 74 } 75 76 /** 77 * Prints a dependency notification 78 * @param string $message 79 * @return string 80 */ 81 public function dependency_notification($message) { 82 return html_writer::tag('div', $message, array('class'=>'notification dependencies_enforced')); 83 } 84 85 /** 86 * Displays the details of a backup file 87 * 88 * @param stdClass $details 89 * @param moodle_url $nextstageurl 90 * @return string 91 */ 92 public function backup_details($details, $nextstageurl) { 93 $yestick = $this->output->pix_icon('i/valid', get_string('yes')); 94 $notick = $this->output->pix_icon('i/invalid', get_string('no')); 95 96 $html = html_writer::start_tag('div', array('class'=>'backup-restore')); 97 98 $html .= html_writer::start_tag('div', array('class'=>'backup-section')); 99 $html .= $this->output->heading(get_string('backupdetails', 'backup'), 2, array('class'=>'header')); 100 $html .= $this->backup_detail_pair(get_string('backuptype', 'backup'), get_string('backuptype'.$details->type, 'backup')); 101 $html .= $this->backup_detail_pair(get_string('backupformat', 'backup'), get_string('backupformat'.$details->format, 'backup')); 102 $html .= $this->backup_detail_pair(get_string('backupmode', 'backup'), get_string('backupmode'.$details->mode, 'backup')); 103 $html .= $this->backup_detail_pair(get_string('backupdate', 'backup'), userdate($details->backup_date)); 104 $html .= $this->backup_detail_pair(get_string('moodleversion', 'backup'), 105 html_writer::tag('span', $details->moodle_release, array('class'=>'moodle_release')). 106 html_writer::tag('span', '['.$details->moodle_version.']', array('class'=>'moodle_version sub-detail'))); 107 $html .= $this->backup_detail_pair(get_string('backupversion', 'backup'), 108 html_writer::tag('span', $details->backup_release, array('class'=>'moodle_release')). 109 html_writer::tag('span', '['.$details->backup_version.']', array('class'=>'moodle_version sub-detail'))); 110 $html .= $this->backup_detail_pair(get_string('originalwwwroot', 'backup'), 111 html_writer::tag('span', $details->original_wwwroot, array('class'=>'originalwwwroot')). 112 html_writer::tag('span', '['.$details->original_site_identifier_hash.']', array('class'=>'sitehash sub-detail'))); 113 if (!empty($details->include_file_references_to_external_content)) { 114 $message = ''; 115 if (backup_general_helper::backup_is_samesite($details)) { 116 $message = $yestick . ' ' . get_string('filereferencessamesite', 'backup'); 117 } else { 118 $message = $notick . ' ' . get_string('filereferencesnotsamesite', 'backup'); 119 } 120 $html .= $this->backup_detail_pair(get_string('includefilereferences', 'backup'), $message); 121 } 122 123 $html .= html_writer::end_tag('div'); 124 125 $html .= html_writer::start_tag('div', array('class'=>'backup-section settings-section')); 126 $html .= $this->output->heading(get_string('backupsettings', 'backup'), 2, array('class'=>'header')); 127 foreach ($details->root_settings as $label=>$value) { 128 if ($label == 'filename' or $label == 'user_files') { 129 continue; 130 } 131 $html .= $this->backup_detail_pair(get_string('rootsetting'.str_replace('_','',$label), 'backup'), $value?$yestick:$notick); 132 } 133 $html .= html_writer::end_tag('div'); 134 135 if ($details->type === 'course') { 136 $html .= html_writer::start_tag('div', array('class'=>'backup-section')); 137 $html .= $this->output->heading(get_string('backupcoursedetails', 'backup'), 2, array('class'=>'header')); 138 $html .= $this->backup_detail_pair(get_string('coursetitle', 'backup'), $details->course->title); 139 $html .= $this->backup_detail_pair(get_string('courseid', 'backup'), $details->course->courseid); 140 141 $html .= html_writer::start_tag('div', array('class'=>'backup-sub-section')); 142 $html .= $this->output->heading(get_string('backupcoursesections', 'backup'), 3, array('class'=>'subheader')); 143 foreach ($details->sections as $key=>$section) { 144 $included = $key.'_included'; 145 $userinfo = $key.'_userinfo'; 146 if ($section->settings[$included] && $section->settings[$userinfo]) { 147 $value = get_string('sectionincanduser','backup'); 148 } else if ($section->settings[$included]) { 149 $value = get_string('sectioninc','backup'); 150 } else { 151 continue; 152 } 153 $html .= $this->backup_detail_pair(get_string('backupcoursesection', 'backup', $section->title), $value); 154 $table = null; 155 foreach ($details->activities as $activitykey=>$activity) { 156 if ($activity->sectionid != $section->sectionid) { 157 continue; 158 } 159 if (empty($table)) { 160 $table = new html_table(); 161 $table->head = array(get_string('module','backup'), get_string('title','backup'), get_string('userinfo','backup')); 162 $table->colclasses = array('modulename', 'moduletitle', 'userinfoincluded'); 163 $table->align = array('left','left', 'center'); 164 $table->attributes = array('class'=>'activitytable generaltable'); 165 $table->data = array(); 166 } 167 $name = get_string('pluginname', $activity->modulename); 168 $icon = new pix_icon('icon', $name, $activity->modulename, array('class' => 'iconlarge icon-pre')); 169 $table->data[] = array( 170 $this->output->render($icon).$name, 171 $activity->title, 172 ($activity->settings[$activitykey.'_userinfo'])?$yestick:$notick, 173 ); 174 } 175 if (!empty($table)) { 176 $html .= $this->backup_detail_pair(get_string('sectionactivities','backup'), html_writer::table($table)); 177 } 178 179 } 180 $html .= html_writer::end_tag('div'); 181 $html .= html_writer::end_tag('div'); 182 } 183 184 $html .= $this->output->single_button($nextstageurl, get_string('continue'), 'post'); 185 $html .= html_writer::end_tag('div'); 186 187 return $html; 188 } 189 190 /** 191 * Displays the general information about a backup file with non-standard format 192 * 193 * @param moodle_url $nextstageurl URL to send user to 194 * @param array $details basic info about the file (format, type) 195 * @return string HTML code to display 196 */ 197 public function backup_details_nonstandard($nextstageurl, array $details) { 198 199 $html = html_writer::start_tag('div', array('class' => 'backup-restore nonstandardformat')); 200 $html .= html_writer::start_tag('div', array('class' => 'backup-section')); 201 $html .= $this->output->heading(get_string('backupdetails', 'backup'), 2, 'header'); 202 $html .= $this->output->box(get_string('backupdetailsnonstandardinfo', 'backup'), 'noticebox'); 203 $html .= $this->backup_detail_pair( 204 get_string('backupformat', 'backup'), 205 get_string('backupformat'.$details['format'], 'backup')); 206 $html .= $this->backup_detail_pair( 207 get_string('backuptype', 'backup'), 208 get_string('backuptype'.$details['type'], 'backup')); 209 $html .= html_writer::end_tag('div'); 210 $html .= $this->output->single_button($nextstageurl, get_string('continue'), 'post'); 211 $html .= html_writer::end_tag('div'); 212 213 return $html; 214 } 215 216 /** 217 * Displays the general information about a backup file with unknown format 218 * 219 * @param moodle_url $nextstageurl URL to send user to 220 * @return string HTML code to display 221 */ 222 public function backup_details_unknown(moodle_url $nextstageurl) { 223 224 $html = html_writer::start_div('unknownformat'); 225 $html .= $this->output->heading(get_string('errorinvalidformat', 'backup'), 2); 226 $html .= $this->output->notification(get_string('errorinvalidformatinfo', 'backup'), 'notifyproblem'); 227 $html .= $this->output->single_button($nextstageurl, get_string('continue'), 'post'); 228 $html .= html_writer::end_div(); 229 230 return $html; 231 } 232 233 /** 234 * Displays a course selector for restore 235 * 236 * @param moodle_url $nextstageurl 237 * @param bool $wholecourse true if we are restoring whole course (as with backup::TYPE_1COURSE), false otherwise 238 * @param restore_category_search $categories 239 * @param restore_course_search $courses 240 * @param int $currentcourse 241 * @return string 242 */ 243 public function course_selector(moodle_url $nextstageurl, $wholecourse = true, restore_category_search $categories = null, restore_course_search $courses=null, $currentcourse = null) { 244 global $CFG, $PAGE; 245 require_once($CFG->dirroot.'/course/lib.php'); 246 247 // These variables are used to check if the form using this function was submitted. 248 $target = optional_param('target', false, PARAM_INT); 249 $targetid = optional_param('targetid', null, PARAM_INT); 250 251 // Check if they submitted the form but did not provide all the data we need. 252 $missingdata = false; 253 if ($target and is_null($targetid)) { 254 $missingdata = true; 255 } 256 257 $nextstageurl->param('sesskey', sesskey()); 258 259 $form = html_writer::start_tag('form', array('method' => 'post', 'action' => $nextstageurl->out_omit_querystring(), 260 'class' => 'mform')); 261 foreach ($nextstageurl->params() as $key=>$value) { 262 $form .= html_writer::empty_tag('input', array('type'=>'hidden', 'name'=>$key, 'value'=>$value)); 263 } 264 265 $hasrestoreoption = false; 266 267 $html = html_writer::start_tag('div', array('class'=>'backup-course-selector backup-restore')); 268 if ($wholecourse && !empty($categories) && ($categories->get_count() > 0 || $categories->get_search())) { 269 // New course 270 $hasrestoreoption = true; 271 $html .= $form; 272 $html .= html_writer::start_tag('div', array('class'=>'bcs-new-course backup-section')); 273 $html .= $this->output->heading(get_string('restoretonewcourse', 'backup'), 2, array('class'=>'header')); 274 $html .= $this->backup_detail_input(get_string('restoretonewcourse', 'backup'), 'radio', 'target', backup::TARGET_NEW_COURSE, array('checked'=>'checked')); 275 $selectacategoryhtml = $this->backup_detail_pair(get_string('selectacategory', 'backup'), $this->render($categories)); 276 // Display the category selection as required if the form was submitted but this data was not supplied. 277 if ($missingdata && $target == backup::TARGET_NEW_COURSE) { 278 $html .= html_writer::span(get_string('required'), 'error'); 279 $html .= html_writer::start_tag('fieldset', array('class' => 'error')); 280 $html .= $selectacategoryhtml; 281 $html .= html_writer::end_tag('fieldset'); 282 } else { 283 $html .= $selectacategoryhtml; 284 } 285 $html .= $this->backup_detail_pair('', html_writer::empty_tag('input', array('type'=>'submit', 'value'=>get_string('continue')))); 286 $html .= html_writer::end_tag('div'); 287 $html .= html_writer::end_tag('form'); 288 } 289 290 if ($wholecourse && !empty($currentcourse)) { 291 // Current course 292 $hasrestoreoption = true; 293 $html .= $form; 294 $html .= html_writer::empty_tag('input', array('type'=>'hidden', 'name'=>'targetid', 'value'=>$currentcourse)); 295 $html .= html_writer::start_tag('div', array('class'=>'bcs-current-course backup-section')); 296 $html .= $this->output->heading(get_string('restoretocurrentcourse', 'backup'), 2, array('class'=>'header')); 297 $html .= $this->backup_detail_input(get_string('restoretocurrentcourseadding', 'backup'), 'radio', 'target', backup::TARGET_CURRENT_ADDING, array('checked'=>'checked')); 298 $html .= $this->backup_detail_input(get_string('restoretocurrentcoursedeleting', 'backup'), 'radio', 'target', backup::TARGET_CURRENT_DELETING); 299 $html .= $this->backup_detail_pair('', html_writer::empty_tag('input', array('type'=>'submit', 'value'=>get_string('continue')))); 300 $html .= html_writer::end_tag('div'); 301 $html .= html_writer::end_tag('form'); 302 } 303 304 if (!empty($courses) && ($courses->get_count() > 0 || $courses->get_search())) { 305 // Existing course 306 $hasrestoreoption = true; 307 $html .= $form; 308 $html .= html_writer::start_tag('div', array('class'=>'bcs-existing-course backup-section')); 309 $html .= $this->output->heading(get_string('restoretoexistingcourse', 'backup'), 2, array('class'=>'header')); 310 if ($wholecourse) { 311 $html .= $this->backup_detail_input(get_string('restoretoexistingcourseadding', 'backup'), 'radio', 'target', backup::TARGET_EXISTING_ADDING, array('checked'=>'checked')); 312 $html .= $this->backup_detail_input(get_string('restoretoexistingcoursedeleting', 'backup'), 'radio', 'target', backup::TARGET_EXISTING_DELETING); 313 } else { 314 // We only allow restore adding to existing for now. Enforce it here. 315 $html .= html_writer::empty_tag('input', array('type'=>'hidden', 'name'=>'target', 'value'=>backup::TARGET_EXISTING_ADDING)); 316 $courses->invalidate_results(); // Clean list of courses 317 $courses->set_include_currentcourse(); // Show current course in the list 318 } 319 $selectacoursehtml = $this->backup_detail_pair(get_string('selectacourse', 'backup'), $this->render($courses)); 320 // Display the course selection as required if the form was submitted but this data was not supplied. 321 if ($missingdata && $target == backup::TARGET_EXISTING_ADDING) { 322 $html .= html_writer::span(get_string('required'), 'error'); 323 $html .= html_writer::start_tag('fieldset', array('class' => 'error')); 324 $html .= $selectacoursehtml; 325 $html .= html_writer::end_tag('fieldset'); 326 } else { 327 $html .= $selectacoursehtml; 328 } 329 $html .= $this->backup_detail_pair('', html_writer::empty_tag('input', array('type'=>'submit', 'value'=>get_string('continue')))); 330 $html .= html_writer::end_tag('div'); 331 $html .= html_writer::end_tag('form'); 332 } 333 334 if (!$hasrestoreoption) { 335 echo $this->output->notification(get_string('norestoreoptions','backup')); 336 } 337 338 $html .= html_writer::end_tag('div'); 339 return $html; 340 } 341 342 /** 343 * Displays the import course selector 344 * 345 * @param moodle_url $nextstageurl 346 * @param import_course_search $courses 347 * @return string 348 */ 349 public function import_course_selector(moodle_url $nextstageurl, import_course_search $courses=null) { 350 $html = html_writer::start_tag('div', array('class'=>'import-course-selector backup-restore')); 351 $html .= html_writer::start_tag('form', array('method'=>'post', 'action'=>$nextstageurl->out_omit_querystring())); 352 foreach ($nextstageurl->params() as $key=>$value) { 353 $html .= html_writer::empty_tag('input', array('type'=>'hidden', 'name'=>$key, 'value'=>$value)); 354 } 355 // We only allow import adding for now. Enforce it here. 356 $html .= html_writer::empty_tag('input', array('type'=>'hidden', 'name'=>'target', 'value'=>backup::TARGET_CURRENT_ADDING)); 357 $html .= html_writer::start_tag('div', array('class'=>'ics-existing-course backup-section')); 358 $html .= $this->output->heading(get_string('importdatafrom'), 2, array('class'=>'header')); 359 $html .= $this->backup_detail_pair(get_string('selectacourse', 'backup'), $this->render($courses)); 360 $html .= $this->backup_detail_pair('', html_writer::empty_tag('input', array('type'=>'submit', 'value'=>get_string('continue')))); 361 $html .= html_writer::end_tag('div'); 362 $html .= html_writer::end_tag('form'); 363 $html .= html_writer::end_tag('div'); 364 return $html; 365 } 366 367 /** 368 * Creates a detailed pairing (key + value) 369 * 370 * @staticvar int $count 371 * @param string $label 372 * @param string $value 373 * @return string 374 */ 375 protected function backup_detail_pair($label, $value) { 376 static $count= 0; 377 $count++; 378 $html = html_writer::start_tag('div', array('class'=>'detail-pair')); 379 $html .= html_writer::tag('label', $label, array('class'=>'detail-pair-label', 'for'=>'detail-pair-value-'.$count)); 380 $html .= html_writer::tag('div', $value, array('class'=>'detail-pair-value', 'name'=>'detail-pair-value-'.$count)); 381 $html .= html_writer::end_tag('div'); 382 return $html; 383 } 384 385 /** 386 * Created a detailed pairing with an input 387 * 388 * @param string $label 389 * @param string $type 390 * @param string $name 391 * @param string $value 392 * @param array $attributes 393 * @param string|null $description 394 * @return string 395 */ 396 protected function backup_detail_input($label, $type, $name, $value, array $attributes=array(), $description=null) { 397 if (!empty ($description)) { 398 $description = html_writer::tag('span', $description, array('class'=>'description')); 399 } else { 400 $description = ''; 401 } 402 return $this->backup_detail_pair($label, html_writer::empty_tag('input', $attributes+array('name'=>$name, 'type'=>$type, 'value'=>$value)).$description); 403 } 404 405 /** 406 * Creates a detailed pairing with a select 407 * 408 * @param string $label 409 * @param string $name 410 * @param array $options 411 * @param string $selected 412 * @param bool $nothing 413 * @param array $attributes 414 * @param string|null $description 415 * @return string 416 */ 417 protected function backup_detail_select($label, $name, $options, $selected='', $nothing=false, array $attributes=array(), $description=null) { 418 if (!empty ($description)) { 419 $description = html_writer::tag('span', $description, array('class'=>'description')); 420 } else { 421 $description = ''; 422 } 423 return $this->backup_detail_pair($label, html_writer::select($options, $name, $selected, false, $attributes).$description); 424 } 425 426 /** 427 * Displays precheck notices 428 * 429 * @param array $results 430 * @return string 431 */ 432 public function precheck_notices($results) { 433 $output = html_writer::start_tag('div', array('class'=>'restore-precheck-notices')); 434 if (array_key_exists('errors', $results)) { 435 foreach ($results['errors'] as $error) { 436 $output .= $this->output->notification($error); 437 } 438 } 439 if (array_key_exists('warnings', $results)) { 440 foreach ($results['warnings'] as $warning) { 441 $output .= $this->output->notification($warning, 'notifyproblem'); 442 } 443 } 444 return $output.html_writer::end_tag('div'); 445 } 446 447 /** 448 * Displays substage buttons 449 * 450 * @param bool $haserrors 451 * @return string 452 */ 453 public function substage_buttons($haserrors) { 454 $output = html_writer::start_tag('div', array('continuebutton')); 455 if (!$haserrors) { 456 $output .= html_writer::empty_tag('input', array('type'=>'submit', 'value'=>get_string('continue'))); 457 } 458 $output .= html_writer::empty_tag('input', array('type'=>'submit', 'name'=>'cancel', 'value'=>get_string('cancel'))); 459 $output .= html_writer::end_tag('div'); 460 return $output; 461 } 462 463 /** 464 * Displays a role mapping interface 465 * 466 * @param array $rolemappings 467 * @param array $roles 468 * @return string 469 */ 470 public function role_mappings($rolemappings, $roles) { 471 $roles[0] = get_string('none'); 472 $output = html_writer::start_tag('div', array('class'=>'restore-rolemappings')); 473 $output .= $this->output->heading(get_string('restorerolemappings', 'backup'), 2); 474 foreach ($rolemappings as $id=>$mapping) { 475 $label = $mapping->name; 476 $name = 'mapping'.$id; 477 $selected = $mapping->targetroleid; 478 $output .= $this->backup_detail_select($label, $name, $roles, $mapping->targetroleid, false, array(), $mapping->description); 479 } 480 $output .= html_writer::end_tag('div'); 481 return $output; 482 } 483 484 /** 485 * Displays a continue button 486 * 487 * @param string|moodle_url $url 488 * @param string $method 489 * @return string 490 */ 491 public function continue_button($url, $method='post') { 492 if (!($url instanceof moodle_url)) { 493 $url = new moodle_url($url); 494 } 495 if ($method != 'post') { 496 $method = 'get'; 497 } 498 $url->param('sesskey', sesskey()); 499 $button = new single_button($url, get_string('continue'), $method); 500 $button->class = 'continuebutton'; 501 return $this->render($button); 502 } 503 /** 504 * Print a backup files tree 505 * @param array $options 506 * @return string 507 */ 508 public function backup_files_viewer(array $options = null) { 509 $files = new backup_files_viewer($options); 510 return $this->render($files); 511 } 512 513 /** 514 * Displays a backup files viewer 515 * 516 * @global stdClass $USER 517 * @param backup_files_viewer $tree 518 * @return string 519 */ 520 public function render_backup_files_viewer(backup_files_viewer $viewer) { 521 global $CFG; 522 $files = $viewer->files; 523 524 $table = new html_table(); 525 $table->attributes['class'] = 'backup-files-table generaltable'; 526 $table->head = array(get_string('filename', 'backup'), get_string('time'), get_string('size'), get_string('download'), get_string('restore')); 527 $table->width = '100%'; 528 $table->data = array(); 529 530 foreach ($files as $file) { 531 if ($file->is_directory()) { 532 continue; 533 } 534 $fileurl = moodle_url::make_pluginfile_url($file->get_contextid(), $file->get_component(), $file->get_filearea(), null, $file->get_filepath(), $file->get_filename(), true); 535 $params = array(); 536 $params['action'] = 'choosebackupfile'; 537 $params['filename'] = $file->get_filename(); 538 $params['filepath'] = $file->get_filepath(); 539 $params['component'] = $file->get_component(); 540 $params['filearea'] = $file->get_filearea(); 541 $params['filecontextid'] = $file->get_contextid(); 542 $params['contextid'] = $viewer->currentcontext->id; 543 $params['itemid'] = $file->get_itemid(); 544 $restoreurl = new moodle_url('/backup/restorefile.php', $params); 545 $table->data[] = array( 546 $file->get_filename(), 547 userdate($file->get_timemodified()), 548 display_size($file->get_filesize()), 549 html_writer::link($fileurl, get_string('download')), 550 html_writer::link($restoreurl, get_string('restore')), 551 ); 552 } 553 554 $html = html_writer::table($table); 555 $html .= $this->output->single_button(new moodle_url('/backup/backupfilesedit.php', array('currentcontext'=>$viewer->currentcontext->id, 'contextid'=>$viewer->filecontext->id, 'filearea'=>$viewer->filearea, 'component'=>$viewer->component, 'returnurl'=>$this->page->url->out())), get_string('managefiles', 'backup'), 'post'); 556 557 return $html; 558 } 559 560 /** 561 * Renders a restore course search object 562 * 563 * @param restore_course_search $component 564 * @return string 565 */ 566 public function render_restore_course_search(restore_course_search $component) { 567 $url = $component->get_url(); 568 569 $output = html_writer::start_tag('div', array('class' => 'restore-course-search')); 570 $output .= html_writer::start_tag('div', array('class' => 'rcs-results')); 571 572 $table = new html_table(); 573 $table->head = array('', get_string('shortnamecourse'), get_string('fullnamecourse')); 574 $table->data = array(); 575 if ($component->get_count() !== 0) { 576 foreach ($component->get_results() as $course) { 577 $row = new html_table_row(); 578 $row->attributes['class'] = 'rcs-course'; 579 if (!$course->visible) { 580 $row->attributes['class'] .= ' dimmed'; 581 } 582 $row->cells = array( 583 html_writer::empty_tag('input', array('type'=>'radio', 'name'=>'targetid', 'value'=>$course->id)), 584 format_string($course->shortname, true, array('context' => context_course::instance($course->id))), 585 format_string($course->fullname, true, array('context' => context_course::instance($course->id))) 586 ); 587 $table->data[] = $row; 588 } 589 if ($component->has_more_results()) { 590 $cell = new html_table_cell(get_string('moreresults', 'backup')); 591 $cell->colspan = 3; 592 $cell->attributes['class'] = 'notifyproblem'; 593 $row = new html_table_row(array($cell)); 594 $row->attributes['class'] = 'rcs-course'; 595 $table->data[] = $row; 596 } 597 } else { 598 $cell = new html_table_cell(get_string('nomatchingcourses', 'backup')); 599 $cell->colspan = 3; 600 $cell->attributes['class'] = 'notifyproblem'; 601 $row = new html_table_row(array($cell)); 602 $row->attributes['class'] = 'rcs-course'; 603 $table->data[] = $row; 604 } 605 $output .= html_writer::table($table); 606 $output .= html_writer::end_tag('div'); 607 608 $output .= html_writer::start_tag('div', array('class'=>'rcs-search')); 609 $output .= html_writer::empty_tag('input', array('type'=>'text', 'name'=>restore_course_search::$VAR_SEARCH, 'value'=>$component->get_search())); 610 $output .= html_writer::empty_tag('input', array('type'=>'submit', 'name'=>'searchcourses', 'value'=>get_string('search'))); 611 $output .= html_writer::end_tag('div'); 612 613 $output .= html_writer::end_tag('div'); 614 return $output; 615 } 616 617 /** 618 * Renders an import course search object 619 * 620 * @param import_course_search $component 621 * @return string 622 */ 623 public function render_import_course_search(import_course_search $component) { 624 $url = $component->get_url(); 625 626 $output = html_writer::start_tag('div', array('class' => 'import-course-search')); 627 if ($component->get_count() === 0) { 628 $output .= $this->output->notification(get_string('nomatchingcourses', 'backup')); 629 630 $output .= html_writer::start_tag('div', array('class'=>'ics-search')); 631 $output .= html_writer::empty_tag('input', array('type'=>'text', 'name'=>restore_course_search::$VAR_SEARCH, 'value'=>$component->get_search())); 632 $output .= html_writer::empty_tag('input', array('type'=>'submit', 'name'=>'searchcourses', 'value'=>get_string('search'))); 633 $output .= html_writer::end_tag('div'); 634 635 $output .= html_writer::end_tag('div'); 636 return $output; 637 } 638 639 $countstr = ''; 640 if ($component->has_more_results()) { 641 $countstr = get_string('morecoursesearchresults', 'backup', $component->get_count()); 642 } else { 643 $countstr = get_string('totalcoursesearchresults', 'backup', $component->get_count()); 644 } 645 646 $output .= html_writer::tag('div', $countstr, array('class'=>'ics-totalresults')); 647 $output .= html_writer::start_tag('div', array('class' => 'ics-results')); 648 649 $table = new html_table(); 650 $table->head = array('', get_string('shortnamecourse'), get_string('fullnamecourse')); 651 $table->data = array(); 652 foreach ($component->get_results() as $course) { 653 $row = new html_table_row(); 654 $row->attributes['class'] = 'ics-course'; 655 if (!$course->visible) { 656 $row->attributes['class'] .= ' dimmed'; 657 } 658 $row->cells = array( 659 html_writer::empty_tag('input', array('type'=>'radio', 'name'=>'importid', 'value'=>$course->id)), 660 format_string($course->shortname, true, array('context' => context_course::instance($course->id))), 661 format_string($course->fullname, true, array('context' => context_course::instance($course->id))) 662 ); 663 $table->data[] = $row; 664 } 665 if ($component->has_more_results()) { 666 $cell = new html_table_cell(get_string('moreresults', 'backup')); 667 $cell->colspan = 3; 668 $cell->attributes['class'] = 'notifyproblem'; 669 $row = new html_table_row(array($cell)); 670 $row->attributes['class'] = 'rcs-course'; 671 $table->data[] = $row; 672 } 673 $output .= html_writer::table($table); 674 $output .= html_writer::end_tag('div'); 675 676 $output .= html_writer::start_tag('div', array('class'=>'ics-search')); 677 $output .= html_writer::empty_tag('input', array('type'=>'text', 'name'=>restore_course_search::$VAR_SEARCH, 'value'=>$component->get_search())); 678 $output .= html_writer::empty_tag('input', array('type'=>'submit', 'name'=>'searchcourses', 'value'=>get_string('search'))); 679 $output .= html_writer::end_tag('div'); 680 681 $output .= html_writer::end_tag('div'); 682 return $output; 683 } 684 685 /** 686 * Renders a restore category search object 687 * 688 * @param restore_category_search $component 689 * @return string 690 */ 691 public function render_restore_category_search(restore_category_search $component) { 692 $url = $component->get_url(); 693 694 $output = html_writer::start_tag('div', array('class' => 'restore-course-search')); 695 $output .= html_writer::start_tag('div', array('class' => 'rcs-results')); 696 697 $table = new html_table(); 698 $table->head = array('', get_string('name'), get_string('description')); 699 $table->data = array(); 700 701 if ($component->get_count() !== 0) { 702 foreach ($component->get_results() as $category) { 703 $row = new html_table_row(); 704 $row->attributes['class'] = 'rcs-course'; 705 if (!$category->visible) { 706 $row->attributes['class'] .= ' dimmed'; 707 } 708 $row->cells = array( 709 html_writer::empty_tag('input', array('type'=>'radio', 'name'=>'targetid', 'value'=>$category->id)), 710 format_string($category->name, true, array('context' => context_coursecat::instance($category->id))), 711 format_text($category->description, $category->descriptionformat, array('overflowdiv'=>true)) 712 ); 713 $table->data[] = $row; 714 } 715 if ($component->has_more_results()) { 716 $cell = new html_table_cell(get_string('moreresults', 'backup')); 717 $cell->attributes['class'] = 'notifyproblem'; 718 $cell->colspan = 3; 719 $row = new html_table_row(array($cell)); 720 $row->attributes['class'] = 'rcs-course'; 721 $table->data[] = $row; 722 } 723 } else { 724 $cell = new html_table_cell(get_string('nomatchingcourses', 'backup')); 725 $cell->colspan = 3; 726 $cell->attributes['class'] = 'notifyproblem'; 727 $row = new html_table_row(array($cell)); 728 $row->attributes['class'] = 'rcs-course'; 729 $table->data[] = $row; 730 } 731 $output .= html_writer::table($table); 732 $output .= html_writer::end_tag('div'); 733 734 $output .= html_writer::start_tag('div', array('class'=>'rcs-search')); 735 $output .= html_writer::empty_tag('input', array('type'=>'text', 'name'=>restore_category_search::$VAR_SEARCH, 'value'=>$component->get_search())); 736 $output .= html_writer::empty_tag('input', array('type'=>'submit', 'name'=>'searchcourses', 'value'=>get_string('search'))); 737 $output .= html_writer::end_tag('div'); 738 739 $output .= html_writer::end_tag('div'); 740 return $output; 741 } 742 } 743 744 /** 745 * Data structure representing backup files viewer 746 * 747 * @copyright 2010 Dongsheng Cai 748 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 749 * @since Moodle 2.0 750 */ 751 class backup_files_viewer implements renderable { 752 public $files; 753 public $filecontext; 754 public $component; 755 public $filearea; 756 public $currentcontext; 757 758 /** 759 * Constructor of backup_files_viewer class 760 * @param array $options 761 */ 762 public function __construct(array $options = null) { 763 global $CFG, $USER; 764 $fs = get_file_storage(); 765 $this->currentcontext = $options['currentcontext']; 766 $this->filecontext = $options['filecontext']; 767 $this->component = $options['component']; 768 $this->filearea = $options['filearea']; 769 $files = $fs->get_area_files($this->filecontext->id, $this->component, $this->filearea, false, 'timecreated'); 770 $this->files = array_reverse($files); 771 } 772 }
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 |