diff --git a/classes/tables/manage.php b/classes/tables/manage.php index 418fba8..54678db 100644 --- a/classes/tables/manage.php +++ b/classes/tables/manage.php @@ -52,46 +52,13 @@ class manage extends \flexible_table { } public function set_data(array $outages, $editdelete) { - global $OUTPUT; if (!is_bool($editdelete)) { throw new \InvalidArgumentException('$editdelete must be a bool.'); } foreach ($outages as $outage) { - $buttons = \html_writer::link( - new \moodle_url('/auth/outage/info.php', ['id' => $outage->id]), - \html_writer::empty_tag('img', [ - 'src' => $OUTPUT->pix_url('t/preview'), - 'alt' => get_string('view'), - 'class' => 'iconsmall', - - ]), - [ - 'title' => get_string('view'), - 'target' => '_blank', - ] - ); $title = $outage->get_title(); if ($editdelete) { - $buttons .= \html_writer::link( - new \moodle_url('/auth/outage/edit.php', ['id' => $outage->id]), - \html_writer::empty_tag('img', [ - 'src' => $OUTPUT->pix_url('t/edit'), - 'alt' => get_string('edit'), - 'class' => 'iconsmall' - ]), - ['title' => get_string('edit')] - ) - . \html_writer::link( - new \moodle_url('/auth/outage/delete.php', ['id' => $outage->id]), - \html_writer::empty_tag('img', [ - 'src' => $OUTPUT->pix_url('t/delete'), - 'alt' => get_string('delete'), - 'class' => 'iconsmall' - ]), - ['title' => get_string('delete')] - ); - $title = \html_writer::link( new \moodle_url('/auth/outage/edit.php', ['id' => $outage->id]), $title, @@ -104,8 +71,68 @@ class manage extends \flexible_table { userdate($outage->starttime, get_string('datetimeformat', 'auth_outage')), format_time($outage->get_duration()), $title, - $buttons, + $this->set_data_buttons($outage, $editdelete), ]); } } + + private function set_data_buttons($outage, $editdelete) { + global $OUTPUT; + $buttons = ''; + + // View button. + $buttons .= \html_writer::link( + new \moodle_url('/auth/outage/info.php', ['id' => $outage->id]), + \html_writer::empty_tag('img', [ + 'src' => $OUTPUT->pix_url('t/preview'), + 'alt' => get_string('view'), + 'class' => 'iconsmall', + + ]), + [ + 'title' => get_string('view'), + 'target' => '_blank', + ] + ); + + // Edit button. + if ($editdelete) { + $buttons .= \html_writer::link( + new \moodle_url('/auth/outage/edit.php', ['id' => $outage->id]), + \html_writer::empty_tag('img', [ + 'src' => $OUTPUT->pix_url('t/edit'), + 'alt' => get_string('edit'), + 'class' => 'iconsmall' + ]), + ['title' => get_string('edit')] + ); + } + + // Clone button. + $buttons .= \html_writer::link( + new \moodle_url('/auth/outage/clone.php', ['id' => $outage->id]), + \html_writer::empty_tag('img', [ + 'src' => $OUTPUT->pix_url('t/copy'), + 'alt' => get_string('clone', 'auth_outage'), + 'class' => 'iconsmall', + + ]), + ['title' => get_string('clone', 'auth_outage')] + ); + + // Delete button. + if ($editdelete) { + $buttons .= \html_writer::link( + new \moodle_url('/auth/outage/delete.php', ['id' => $outage->id]), + \html_writer::empty_tag('img', [ + 'src' => $OUTPUT->pix_url('t/delete'), + 'alt' => get_string('delete'), + 'class' => 'iconsmall' + ]), + ['title' => get_string('delete')] + ); + } + + return $buttons; + } } \ No newline at end of file diff --git a/clone.php b/clone.php new file mode 100644 index 0000000..2adbcd4 --- /dev/null +++ b/clone.php @@ -0,0 +1,59 @@ +. + +/** + * Clone outage. + * + * @package auth_outage + * @author Daniel Thee Roperto + * @copyright Catalyst IT + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +use auth_outage\models\outage; +use auth_outage\outagedb; +use auth_outage\outagelib; + +require_once('../../config.php'); +require_once($CFG->libdir . '/adminlib.php'); +require_once($CFG->libdir . '/formslib.php'); + +$renderer = outagelib::pagesetup(); + +$mform = new \auth_outage\forms\outage\edit(); + +if ($mform->is_cancelled()) { + redirect('/auth/outage/manage.php'); +} else if ($outage = $mform->get_data()) { + $id = outagedb::save($outage); + redirect('/auth/outage/manage.php#auth_outage_id_' . $id); +} + +$id = required_param('id', PARAM_INT); +$outage = outagedb::get_by_id($id); +if ($outage == null) { + throw new invalid_parameter_exception('Outage #' . $id . ' not found.'); +} + +// Remove outage id to force creating a new one. +$outage->id = null; +$mform->set_data($outage); + +$PAGE->navbar->add($outage->get_title()); +echo $OUTPUT->header(); +echo $renderer->rendersubtitle('outageclone'); +$mform->display(); +echo $OUTPUT->footer(); diff --git a/lang/en/auth_outage.php b/lang/en/auth_outage.php index db1ec24..0ed94cc 100644 --- a/lang/en/auth_outage.php +++ b/lang/en/auth_outage.php @@ -24,6 +24,7 @@ */ $string['auth_outagedescription'] = 'Auxiliary plugin that warns users about a future outage and prevents them from logging in once the outage starts.'; +$string['clone'] = 'Clone'; $string['datetimeformat'] = '%d %h %Y at %I:%M%P'; $string['defaultlayoutcss'] = 'Layout CSS'; $string['defaultlayoutcssdescription'] = 'This CSS code will be used to display the Outage Warning Bar.'; @@ -51,6 +52,7 @@ $string['messageoutageongoing'] = 'Our system will be under maintenance until {$ $string['messageoutagewarning'] = 'Shutting down in {{countdown}} ...'; $string['notfound'] = 'No outages found.'; $string['outageedit'] = 'Edit Outage'; +$string['outageclone'] = 'Clone Outage'; $string['outagecreate'] = 'Create Outage'; $string['outagedelete'] = 'Delete Outage'; $string['outagedeletewarning'] = 'You are about to permanently delete the outage below. This cannot be undone.';