From 094c57dd4fcd1c5d0f9e86b852a91e28adc0e279 Mon Sep 17 00:00:00 2001 From: Marina Glancy Date: Fri, 15 Apr 2016 21:01:15 +0800 Subject: [PATCH] MDL-53638 mod_feedback: JS confirmation on delete entry and template --- mod/feedback/classes/responses_table.php | 7 +-- mod/feedback/classes/templates_table.php | 5 +- mod/feedback/delete_template.php | 50 ++++++++----------- mod/feedback/show_entries.php | 14 ++---- mod/feedback/tests/behat/anonymous.feature | 2 - .../tests/behat/non_anonymous.feature | 2 - mod/feedback/tests/behat/templates.feature | 13 +++-- 7 files changed, 39 insertions(+), 54 deletions(-) diff --git a/mod/feedback/classes/responses_table.php b/mod/feedback/classes/responses_table.php index 6130a1bdced..64070e02293 100644 --- a/mod/feedback/classes/responses_table.php +++ b/mod/feedback/classes/responses_table.php @@ -183,9 +183,10 @@ class mod_feedback_responses_table extends table_sql { */ public function col_deleteentry($row) { global $OUTPUT; - $icon = $OUTPUT->render(new \pix_icon('t/delete', get_string('delete_entry', 'feedback'))); - $deleteentryurl = new moodle_url($this->baseurl, ['delete' => $row->id]); - return html_writer::link($deleteentryurl, $icon); + $deleteentryurl = new moodle_url($this->baseurl, ['delete' => $row->id, 'sesskey' => sesskey()]); + $deleteaction = new confirm_action(get_string('confirmdeleteentry', 'feedback')); + return $OUTPUT->action_icon($deleteentryurl, + new pix_icon('t/delete', get_string('delete_entry', 'feedback')), $deleteaction); } /** diff --git a/mod/feedback/classes/templates_table.php b/mod/feedback/classes/templates_table.php index aa572241782..be01a447036 100644 --- a/mod/feedback/classes/templates_table.php +++ b/mod/feedback/classes/templates_table.php @@ -77,9 +77,10 @@ class mod_feedback_templates_table extends flexible_table { foreach ($templates as $template) { $data = array(); $data[] = format_string($template->name); - $url = new moodle_url($this->baseurl, array('deletetempl' => $template->id)); + $url = new moodle_url($this->baseurl, array('deletetempl' => $template->id, 'sesskey' => sesskey())); - $data[] = $OUTPUT->single_button($url, $strdeletefeedback, 'post'); + $deleteaction = new confirm_action(get_string('confirmdeletetemplate', 'feedback')); + $data[] = $OUTPUT->action_icon($url, new pix_icon('t/delete', $strdeletefeedback), $deleteaction); $this->add_data($data); } $this->finish_output(); diff --git a/mod/feedback/delete_template.php b/mod/feedback/delete_template.php index 7d73350f932..0e109fb2ef6 100644 --- a/mod/feedback/delete_template.php +++ b/mod/feedback/delete_template.php @@ -43,7 +43,8 @@ $feedback = $PAGE->activityrecord; $systemcontext = context_system::instance(); // Process template deletion. -if ($deletetempl && optional_param('confirm', 0, PARAM_BOOL) && confirm_sesskey()) { +if ($deletetempl) { + require_sesskey(); $template = $DB->get_record('feedback_template', array('id' => $deletetempl), '*', MUST_EXIST); if ($template->ispublic) { @@ -69,36 +70,29 @@ echo $OUTPUT->heading(format_string($feedback->name)); /// print the tabs require('tabs.php'); -/// Print the main part of the page -/////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////// +// Print the main part of the page. echo $OUTPUT->heading($strdeletefeedback, 3); -if ($deletetempl) { - $continueurl = new moodle_url($baseurl, array('deletetempl' => $deletetempl, 'confirm' => 1, 'sesskey' => sesskey())); - echo $OUTPUT->confirm(get_string('confirmdeletetemplate', 'feedback'), $continueurl, $baseurl); -} else { - // First we get the course templates. - $templates = feedback_get_template_list($course, 'own'); - echo $OUTPUT->box_start('coursetemplates'); - echo $OUTPUT->heading(get_string('course'), 4); - $tablecourse = new mod_feedback_templates_table('feedback_template_course_table', $baseurl); - $tablecourse->display($templates); - echo $OUTPUT->box_end(); - // Now we get the public templates if it is permitted. - if (has_capability('mod/feedback:createpublictemplate', $systemcontext) AND - has_capability('mod/feedback:deletetemplate', $systemcontext)) { - $templates = feedback_get_template_list($course, 'public'); - echo $OUTPUT->box_start('publictemplates'); - echo $OUTPUT->heading(get_string('public', 'feedback'), 4); - $tablepublic = new mod_feedback_templates_table('feedback_template_public_table', $baseurl); - $tablepublic->display($templates); - echo $OUTPUT->box_end(); - } - $url = new moodle_url('/mod/feedback/edit.php', array('id' => $id, 'do_show' => 'templates')); - echo $OUTPUT->single_button($url, get_string('back'), 'post'); +// First we get the course templates. +$templates = feedback_get_template_list($course, 'own'); +echo $OUTPUT->box_start('coursetemplates'); +echo $OUTPUT->heading(get_string('course'), 4); +$tablecourse = new mod_feedback_templates_table('feedback_template_course_table', $baseurl); +$tablecourse->display($templates); +echo $OUTPUT->box_end(); +// Now we get the public templates if it is permitted. +if (has_capability('mod/feedback:createpublictemplate', $systemcontext) AND + has_capability('mod/feedback:deletetemplate', $systemcontext)) { + $templates = feedback_get_template_list($course, 'public'); + echo $OUTPUT->box_start('publictemplates'); + echo $OUTPUT->heading(get_string('public', 'feedback'), 4); + $tablepublic = new mod_feedback_templates_table('feedback_template_public_table', $baseurl); + $tablepublic->display($templates); + echo $OUTPUT->box_end(); } +$url = new moodle_url('/mod/feedback/edit.php', array('id' => $id, 'do_show' => 'templates')); +echo $OUTPUT->single_button($url, get_string('back'), 'post'); + echo $OUTPUT->footer(); diff --git a/mod/feedback/show_entries.php b/mod/feedback/show_entries.php index 7b0a99081e0..8d89e373a53 100644 --- a/mod/feedback/show_entries.php +++ b/mod/feedback/show_entries.php @@ -54,12 +54,10 @@ require_capability('mod/feedback:viewreports', $context); if ($deleteid) { // This is a request to delete a reponse. require_capability('mod/feedback:deletesubmissions', $context); + require_sesskey(); $feedbackstructure = new mod_feedback_completion($feedback, $cm, 0, true, $deleteid); - if (optional_param('confirm', 0, PARAM_BOOL) && confirm_sesskey()) { - // Process delete template result. - feedback_delete_completed($feedbackstructure->get_completed(), $feedback, $cm); - redirect($baseurl); - } + feedback_delete_completed($feedbackstructure->get_completed(), $feedback, $cm); + redirect($baseurl); } else if ($showcompleted || $userid) { // Viewing individual response. $feedbackstructure = new mod_feedback_completion($feedback, $cm, 0, true, $showcompleted, $userid); @@ -98,11 +96,7 @@ require('tabs.php'); /////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////// -if ($deleteid) { - // Print confirmation form to delete a response. - $continueurl = new moodle_url($baseurl, array('delete' => $deleteid, 'confirm' => 1, 'sesskey' => sesskey())); - echo $OUTPUT->confirm(get_string('confirmdeleteentry', 'feedback'), $continueurl, $baseurl); -} else if ($userid || $showcompleted) { +if ($userid || $showcompleted) { // Print the response of the given user. $completedrecord = $feedbackstructure->get_completed(); diff --git a/mod/feedback/tests/behat/anonymous.feature b/mod/feedback/tests/behat/anonymous.feature index b6673980634..b279660b274 100644 --- a/mod/feedback/tests/behat/anonymous.feature +++ b/mod/feedback/tests/behat/anonymous.feature @@ -233,8 +233,6 @@ Feature: Anonymous feedback And I follow "Back" # Delete anonymous response And I click on "Delete entry" "link" in the "Response number: 1" "table_row" - And I should see "Are you sure you want to delete this entry?" - And I press "Continue" And I should see "Anonymous entries (1)" And I should not see "Response number: 1" And I should see "Response number: 2" diff --git a/mod/feedback/tests/behat/non_anonymous.feature b/mod/feedback/tests/behat/non_anonymous.feature index 26c560b945a..a7d5c91bb27 100644 --- a/mod/feedback/tests/behat/non_anonymous.feature +++ b/mod/feedback/tests/behat/non_anonymous.feature @@ -162,8 +162,6 @@ Feature: Non anonymous feedback And I follow "Back" # Delete non anonymous response And I click on "Delete entry" "link" in the "Username 1" "table_row" - And I should see "Are you sure you want to delete this entry?" - And I press "Continue" And I should see "Non anonymous entries (1)" And I should not see "Username 1" And I should see "Username 2" diff --git a/mod/feedback/tests/behat/templates.feature b/mod/feedback/tests/behat/templates.feature index 11c1c51b3ee..dbf7e1d467b 100644 --- a/mod/feedback/tests/behat/templates.feature +++ b/mod/feedback/tests/behat/templates.feature @@ -153,9 +153,7 @@ Feature: Saving, using and deleting feedback templates Then I should not see "My public template" And ".publictemplates" "css_element" should not exist And "My course template" "text" should exist in the ".coursetemplates" "css_element" - And I click on "Delete" "button" in the "My course template" "table_row" - And I should see "Are you sure you want to delete this template?" - And I press "Continue" + And I click on "Delete" "link" in the "My course template" "table_row" And I should see "Template deleted" And "My course template" "text" should not exist in the ".coursetemplates" "css_element" And "No templates available yet" "text" should exist in the ".coursetemplates" "css_element" @@ -164,6 +162,7 @@ Feature: Saving, using and deleting feedback templates And the "Use a template" select box should contain "My public template" And I log out + @javascript Scenario: Manager can delete both course and public templates # Save feedback as both public and course template When I log in as "manager" @@ -180,17 +179,17 @@ Feature: Saving, using and deleting feedback templates And I follow "Delete template..." Then "My public template" "text" should exist in the ".publictemplates" "css_element" And "My course template" "text" should exist in the ".coursetemplates" "css_element" - And I click on "Delete" "button" in the "My course template" "table_row" + And I click on "Delete" "link" in the "My course template" "table_row" And I should see "Are you sure you want to delete this template?" - And I press "Continue" + And I press "Yes" And I should see "Template deleted" And "My course template" "text" should not exist in the ".coursetemplates" "css_element" And "No templates available yet" "text" should exist in the ".coursetemplates" "css_element" # Delete public template And "My public template" "text" should exist in the ".publictemplates" "css_element" - And I click on "Delete" "button" in the "My public template" "table_row" + And I click on "Delete" "link" in the "My public template" "table_row" And I should see "Are you sure you want to delete this template?" - And I press "Continue" + And I press "Yes" And I should see "Template deleted" And "My public template" "text" should not exist in the ".publictemplates" "css_element" And "No templates available yet" "text" should exist in the ".publictemplates" "css_element"