source: moodle/trunk/fuentes/backup/util/ui/renderer.php @ 1331

Last change on this file since 1331 was 1331, checked in by jrpelegrina, 3 years ago

Updated to moodle 3.0.3

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