#134 Add ability to duplicate templates
This commit is contained in:
parent
a211f97931
commit
909d376b95
6 changed files with 116 additions and 45 deletions
|
@ -93,6 +93,17 @@ class manage_templates_table extends \table_sql {
|
||||||
$editlink = new \moodle_url('/mod/customcert/edit.php', array('tid' => $template->id));
|
$editlink = new \moodle_url('/mod/customcert/edit.php', array('tid' => $template->id));
|
||||||
$editicon = $OUTPUT->action_icon($editlink, new \pix_icon('t/edit', get_string('edit')));
|
$editicon = $OUTPUT->action_icon($editlink, new \pix_icon('t/edit', get_string('edit')));
|
||||||
|
|
||||||
|
// Link to duplicate the template.
|
||||||
|
$duplicatelink = new \moodle_url('/mod/customcert/manage_templates.php',
|
||||||
|
array(
|
||||||
|
'tid' => $template->id,
|
||||||
|
'action' => 'duplicate',
|
||||||
|
'sesskey' => sesskey()
|
||||||
|
)
|
||||||
|
);
|
||||||
|
$duplicateicon = $OUTPUT->action_icon($duplicatelink, new \pix_icon('t/copy', get_string('duplicate')), null,
|
||||||
|
array('class' => 'action-icon duplicate-icon'));
|
||||||
|
|
||||||
// Link to delete the template.
|
// Link to delete the template.
|
||||||
$deletelink = new \moodle_url('/mod/customcert/manage_templates.php',
|
$deletelink = new \moodle_url('/mod/customcert/manage_templates.php',
|
||||||
array(
|
array(
|
||||||
|
@ -104,7 +115,7 @@ class manage_templates_table extends \table_sql {
|
||||||
$deleteicon = $OUTPUT->action_icon($deletelink, new \pix_icon('t/delete', get_string('delete')), null,
|
$deleteicon = $OUTPUT->action_icon($deletelink, new \pix_icon('t/delete', get_string('delete')), null,
|
||||||
array('class' => 'action-icon delete-icon'));
|
array('class' => 'action-icon delete-icon'));
|
||||||
|
|
||||||
return $editicon . $deleteicon;
|
return $editicon . $duplicateicon . $deleteicon;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -312,6 +312,57 @@ class template {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handles duplicating the template.
|
||||||
|
*
|
||||||
|
* @param int|null $copytotemplateid The template id to copy to, null if creating a new template
|
||||||
|
*/
|
||||||
|
public function duplicate($copytotemplateid = null) {
|
||||||
|
global $DB;
|
||||||
|
|
||||||
|
if (is_null($copytotemplateid)) {
|
||||||
|
// Create another template at the same level.
|
||||||
|
$template = new \stdClass();
|
||||||
|
$template->name = $this->name . ' (' . strtolower(get_string('duplicate', 'customcert')) . ')';
|
||||||
|
$template->contextid = $this->contextid;
|
||||||
|
$template->timecreated = time();
|
||||||
|
$template->timemodified = $template->timecreated;
|
||||||
|
|
||||||
|
$copytotemplateid = $DB->insert_record('customcert_templates', $template);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the pages for the template, there should always be at least one page for each template.
|
||||||
|
if ($templatepages = $DB->get_records('customcert_pages', array('templateid' => $this->id))) {
|
||||||
|
// Loop through the pages.
|
||||||
|
foreach ($templatepages as $templatepage) {
|
||||||
|
$page = clone($templatepage);
|
||||||
|
$page->templateid = $copytotemplateid;
|
||||||
|
$page->timecreated = time();
|
||||||
|
$page->timemodified = $page->timecreated;
|
||||||
|
// Insert into the database.
|
||||||
|
$page->id = $DB->insert_record('customcert_pages', $page);
|
||||||
|
// Now go through the elements we want to load.
|
||||||
|
if ($templateelements = $DB->get_records('customcert_elements', array('pageid' => $templatepage->id))) {
|
||||||
|
foreach ($templateelements as $templateelement) {
|
||||||
|
$element = clone($templateelement);
|
||||||
|
$element->pageid = $page->id;
|
||||||
|
$element->timecreated = time();
|
||||||
|
$element->timemodified = $element->timecreated;
|
||||||
|
// Ok, now we want to insert this into the database.
|
||||||
|
$element->id = $DB->insert_record('customcert_elements', $element);
|
||||||
|
// Load any other information the element may need to for the template.
|
||||||
|
if ($e = \mod_customcert\element_factory::get_element_instance($element)) {
|
||||||
|
if (!$e->copy_element($templateelement)) {
|
||||||
|
// Failed to copy - delete the element.
|
||||||
|
$e->delete();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handles moving an item on a template.
|
* Handles moving an item on a template.
|
||||||
*
|
*
|
||||||
|
|
|
@ -47,6 +47,9 @@ $string['deleteissueconfirm'] = 'Are you sure you want to delete this certificat
|
||||||
$string['deletepageconfirm'] = 'Are you sure you want to delete this certificate page?';
|
$string['deletepageconfirm'] = 'Are you sure you want to delete this certificate page?';
|
||||||
$string['deletetemplateconfirm'] = 'Are you sure you want to delete this certificate template?';
|
$string['deletetemplateconfirm'] = 'Are you sure you want to delete this certificate template?';
|
||||||
$string['description'] = 'Description';
|
$string['description'] = 'Description';
|
||||||
|
$string['duplicate'] = 'Duplicate';
|
||||||
|
$string['duplicateconfirm'] = 'Duplicate confirmation';
|
||||||
|
$string['duplicatetemplateconfirm'] = 'Are you sure you want to duplicate this certificate template?';
|
||||||
$string['editcustomcert'] = 'Edit certificate';
|
$string['editcustomcert'] = 'Edit certificate';
|
||||||
$string['editelement'] = 'Edit element';
|
$string['editelement'] = 'Edit element';
|
||||||
$string['edittemplate'] = 'Edit template';
|
$string['edittemplate'] = 'Edit template';
|
||||||
|
|
|
@ -61,39 +61,8 @@ if ($confirm && confirm_sesskey()) {
|
||||||
// Delete the pages.
|
// Delete the pages.
|
||||||
$DB->delete_records('customcert_pages', array('templateid' => $template->get_id()));
|
$DB->delete_records('customcert_pages', array('templateid' => $template->get_id()));
|
||||||
|
|
||||||
// Store the current time in a variable.
|
// Copy the items across.
|
||||||
$time = time();
|
$loadtemplate->duplicate($template->get_id());
|
||||||
|
|
||||||
// Now, get the template data we want to load.
|
|
||||||
if ($templatepages = $DB->get_records('customcert_pages', array('templateid' => $ltid))) {
|
|
||||||
// Loop through the pages.
|
|
||||||
foreach ($templatepages as $templatepage) {
|
|
||||||
$page = clone($templatepage);
|
|
||||||
$page->templateid = $tid;
|
|
||||||
$page->timecreated = $time;
|
|
||||||
$page->timemodified = $time;
|
|
||||||
// Insert into the database.
|
|
||||||
$page->id = $DB->insert_record('customcert_pages', $page);
|
|
||||||
// Now go through the elements we want to load.
|
|
||||||
if ($templateelements = $DB->get_records('customcert_elements', array('pageid' => $templatepage->id))) {
|
|
||||||
foreach ($templateelements as $templateelement) {
|
|
||||||
$element = clone($templateelement);
|
|
||||||
$element->pageid = $page->id;
|
|
||||||
$element->timecreated = $time;
|
|
||||||
$element->timemodified = $time;
|
|
||||||
// Ok, now we want to insert this into the database.
|
|
||||||
$element->id = $DB->insert_record('customcert_elements', $element);
|
|
||||||
// Load any other information the element may need to for the template.
|
|
||||||
if ($e = \mod_customcert\element_factory::get_element_instance($element)) {
|
|
||||||
if (!$e->copy_element($templateelement)) {
|
|
||||||
// Failed to copy - delete the element.
|
|
||||||
$e->delete();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Redirect.
|
// Redirect.
|
||||||
$url = new moodle_url('/mod/customcert/edit.php', array('tid' => $tid));
|
$url = new moodle_url('/mod/customcert/edit.php', array('tid' => $tid));
|
||||||
|
|
|
@ -53,21 +53,21 @@ $pageurl = new moodle_url('/mod/customcert/manage_templates.php');
|
||||||
// Additional page setup.
|
// Additional page setup.
|
||||||
$PAGE->navbar->add(get_string('managetemplates', 'customcert'));
|
$PAGE->navbar->add(get_string('managetemplates', 'customcert'));
|
||||||
|
|
||||||
// Check if we are deleting a template.
|
|
||||||
if ($tid) {
|
if ($tid) {
|
||||||
if ($action && confirm_sesskey()) {
|
if ($action && confirm_sesskey()) {
|
||||||
|
$nourl = new moodle_url('/mod/customcert/manage_templates.php');
|
||||||
|
$yesurl = new moodle_url('/mod/customcert/manage_templates.php',
|
||||||
|
array(
|
||||||
|
'tid' => $tid,
|
||||||
|
'action' => $action,
|
||||||
|
'confirm' => 1,
|
||||||
|
'sesskey' => sesskey()
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
// Check if we are deleting a template.
|
||||||
if ($action == 'delete') {
|
if ($action == 'delete') {
|
||||||
if (!$confirm) {
|
if (!$confirm) {
|
||||||
$nourl = new moodle_url('/mod/customcert/manage_templates.php');
|
|
||||||
$yesurl = new moodle_url('/mod/customcert/manage_templates.php',
|
|
||||||
array(
|
|
||||||
'tid' => $tid,
|
|
||||||
'action' => 'delete',
|
|
||||||
'confirm' => 1,
|
|
||||||
'sesskey' => sesskey()
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
// Show a confirmation page.
|
// Show a confirmation page.
|
||||||
$strheading = get_string('deleteconfirm', 'customcert');
|
$strheading = get_string('deleteconfirm', 'customcert');
|
||||||
$PAGE->navbar->add($strheading);
|
$PAGE->navbar->add($strheading);
|
||||||
|
@ -83,6 +83,25 @@ if ($tid) {
|
||||||
// Delete the template.
|
// Delete the template.
|
||||||
$template->delete();
|
$template->delete();
|
||||||
|
|
||||||
|
// Redirect back to the manage templates page.
|
||||||
|
redirect(new moodle_url('/mod/customcert/manage_templates.php'));
|
||||||
|
} else if ($action == 'duplicate') {
|
||||||
|
if (!$confirm) {
|
||||||
|
// Show a confirmation page.
|
||||||
|
$strheading = get_string('duplicateconfirm', 'customcert');
|
||||||
|
$PAGE->navbar->add($strheading);
|
||||||
|
$PAGE->set_title($strheading);
|
||||||
|
$message = get_string('duplicatetemplateconfirm', 'customcert');
|
||||||
|
echo $OUTPUT->header();
|
||||||
|
echo $OUTPUT->heading($strheading);
|
||||||
|
echo $OUTPUT->confirm($message, $yesurl, $nourl);
|
||||||
|
echo $OUTPUT->footer();
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Duplicate the template.
|
||||||
|
$template->duplicate();
|
||||||
|
|
||||||
// Redirect back to the manage templates page.
|
// Redirect back to the manage templates page.
|
||||||
redirect(new moodle_url('/mod/customcert/manage_templates.php'));
|
redirect(new moodle_url('/mod/customcert/manage_templates.php'));
|
||||||
}
|
}
|
||||||
|
|
|
@ -82,3 +82,21 @@ Feature: Being able to manage site templates
|
||||||
And I click on ".delete-icon" "css_element" in the "Site template" "table_row"
|
And I click on ".delete-icon" "css_element" in the "Site template" "table_row"
|
||||||
And I press "Continue"
|
And I press "Continue"
|
||||||
And I should not see "Site template"
|
And I should not see "Site template"
|
||||||
|
|
||||||
|
Scenario: Duplicating a site template
|
||||||
|
And I navigate to "Plugins" in site administration
|
||||||
|
And I follow "Manage activities"
|
||||||
|
And I click on "Settings" "link" in the "Custom certificate" "table_row"
|
||||||
|
And I follow "Manage templates"
|
||||||
|
And I press "Create template"
|
||||||
|
And I set the field "Name" to "Site template"
|
||||||
|
And I press "Save changes"
|
||||||
|
And I follow "Manage templates"
|
||||||
|
And I click on ".duplicate-icon" "css_element" in the "Site template" "table_row"
|
||||||
|
And I press "Cancel"
|
||||||
|
And I should see "Site template"
|
||||||
|
And I should not see "Site template (duplicate)"
|
||||||
|
And I click on ".duplicate-icon" "css_element" in the "Site template" "table_row"
|
||||||
|
And I press "Continue"
|
||||||
|
And I should see "Site template"
|
||||||
|
And I should see "Site template (duplicate)"
|
||||||
|
|
Loading…
Reference in a new issue