From fd1b874449ba11fbf27552c2d1f60dddccb9f4cd Mon Sep 17 00:00:00 2001 From: Sara Arjona Date: Mon, 8 Aug 2022 15:23:00 +0200 Subject: [PATCH 1/2] MDL-75275 mod_data: Add user support to entry behat generator The 'user' parameter has been added to the 'mod_data > entries' generator, to let define the author of the entry. When it's not defined, admin is used as the author. --- .../tests/generator/behat_mod_data_generator.php | 9 +++++++-- mod/data/tests/generator/lib.php | 14 +++++++++++++- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/mod/data/tests/generator/behat_mod_data_generator.php b/mod/data/tests/generator/behat_mod_data_generator.php index 8f39d2d02c5..121570094fc 100644 --- a/mod/data/tests/generator/behat_mod_data_generator.php +++ b/mod/data/tests/generator/behat_mod_data_generator.php @@ -35,7 +35,7 @@ class behat_mod_data_generator extends behat_generator_base { 'singular' => 'entry', 'datagenerator' => 'entry', 'required' => ['database'], - 'switchids' => ['database' => 'databaseid'], + 'switchids' => ['database' => 'databaseid', 'user' => 'userid'], ], 'fields' => [ 'singular' => 'field', @@ -81,6 +81,11 @@ class behat_mod_data_generator extends behat_generator_base { $database = $DB->get_record('data', ['id' => $data['databaseid']], '*', MUST_EXIST); unset($data['databaseid']); + $userid = 0; + if (array_key_exists('userid', $data)) { + $userid = $data['userid']; + unset($data['userid']); + } $data = array_reduce(array_keys($data), function ($fields, $fieldname) use ($data, $database) { global $DB; @@ -92,7 +97,7 @@ class behat_mod_data_generator extends behat_generator_base { return $fields; }, []); - $this->get_data_generator()->create_entry($database, $data); + $this->get_data_generator()->create_entry($database, $data, 0, [], null, $userid); } /** diff --git a/mod/data/tests/generator/lib.php b/mod/data/tests/generator/lib.php index a1497e9faa7..2e31f41485e 100644 --- a/mod/data/tests/generator/lib.php +++ b/mod/data/tests/generator/lib.php @@ -208,11 +208,19 @@ class mod_data_generator extends testing_module_generator { * @param int $groupid * @param array $tags * @param array $options + * @param int $userid if defined, it will be the author of the entry * @return int id of the generated record in table {data_records} */ - public function create_entry($data, array $contents, $groupid = 0, $tags = [], array $options = null) { + public function create_entry($data, array $contents, $groupid = 0, $tags = [], array $options = null, int $userid = 0) { global $DB, $USER, $CFG; + // Set current user if defined. + if (!empty($userid)) { + $currentuser = $USER; + $user = \core_user::get_user($userid); + $this->set_user($user); + } + $this->databaserecordcount++; $recordid = data_add_record($data, $groupid); @@ -362,6 +370,10 @@ class mod_data_generator extends testing_module_generator { context_module::instance($cm->id), $tags); } + if (isset($currentuser)) { + $this->set_user($currentuser); + } + return $recordid; } From 2acda39537604bca7e71281422c05268abda89ce Mon Sep 17 00:00:00 2001 From: Sara Arjona Date: Fri, 5 Aug 2022 17:03:00 +0200 Subject: [PATCH 2/2] MDL-75275 mod_data: Add ##actionsmenu## action tag --- mod/data/classes/manager.php | 4 + .../classes/output/template_editor_tools.php | 1 + mod/data/classes/template.php | 130 +++++++ mod/data/lang/en/data.php | 2 + mod/data/styles.css | 3 +- .../templates/template_editor_tools.mustache | 4 + .../behat/actionsmenu_replacement.feature | 349 ++++++++++++++++++ mod/data/tests/template_test.php | 146 ++++++++ 8 files changed, 638 insertions(+), 1 deletion(-) create mode 100644 mod/data/tests/behat/actionsmenu_replacement.feature diff --git a/mod/data/classes/manager.php b/mod/data/classes/manager.php index 6d5b5a3a277..ff848719b7e 100644 --- a/mod/data/classes/manager.php +++ b/mod/data/classes/manager.php @@ -276,6 +276,10 @@ class manager { $options['comments'] = true; $options['ratings'] = true; } + if ($templatename === 'listtemplate') { + // The "Show more" button should be only displayed in the listtemplate. + $options['showmore'] = true; + } return new template($this, $templatecontent, $options); } diff --git a/mod/data/classes/output/template_editor_tools.php b/mod/data/classes/output/template_editor_tools.php index ca2e02325b8..54915c95c87 100644 --- a/mod/data/classes/output/template_editor_tools.php +++ b/mod/data/classes/output/template_editor_tools.php @@ -127,6 +127,7 @@ class template_editor_tools implements templatable, renderable { '##delete##' => get_string('delete', 'data'), '##approve##' => get_string('approve', 'data'), '##disapprove##' => get_string('disapprove', 'data'), + '##actionsmenu##' => get_string('actionsmenu', 'data'), ]; if ($templatename != 'rsstemplate') { $taglist['##export##'] = get_string('export', 'data'); diff --git a/mod/data/classes/template.php b/mod/data/classes/template.php index 17231d8a957..eb5db80f834 100644 --- a/mod/data/classes/template.php +++ b/mod/data/classes/template.php @@ -16,6 +16,8 @@ namespace mod_data; +use action_menu; +use action_menu_link_secondary; use core\output\checkbox_toggleall; use html_writer; use mod_data\manager; @@ -59,6 +61,9 @@ class template { /** @var bool if comments must be added if not present in the template. */ private $forcecomments; + /** @var bool if show more option must be added. */ + private $showmore; + /** @var bool if the current user can manage entries. */ private $canmanageentries = null; @@ -115,6 +120,7 @@ class template { $this->search = $options['search'] ?? null; $this->ratings = $options['ratings'] ?? false; $this->forcecomments = $options['comments'] ?? false; + $this->showmore = $options['showmore'] ?? false; } /** @@ -320,6 +326,11 @@ class template { */ protected function get_tag_more_replacement(stdClass $entry, bool $canmanageentry): string { global $OUTPUT; + + if (!$this->showmore) { + return ''; + } + $url = new moodle_url($this->baseurl, [ 'rid' => $entry->id, 'filter' => 1, @@ -599,4 +610,123 @@ class template { return (string) $entry->id; } + /** + * Returns the ##actionsmenu## tag replacement for an entry. + * + * @param stdClass $entry the entry object + * @param bool $canmanageentry if the current user can manage this entry + * @return string the tag replacement + */ + protected function get_tag_actionsmenu_replacement(stdClass $entry, bool $canmanageentry): string { + global $OUTPUT, $CFG; + + $actionmenu = new action_menu(); + $icon = $OUTPUT->pix_icon('i/menu', get_string('actions')); + $actionmenu->set_menu_trigger($icon, 'btn btn-icon d-flex align-items-center justify-content-center'); + $actionmenu->set_action_label(get_string('actions')); + $actionmenu->attributes['class'] .= ' entry-actionsmenu'; + + // Show more. + if ($this->showmore) { + $showmoreurl = new moodle_url($this->baseurl, [ + 'rid' => $entry->id, + 'filter' => 1, + ]); + $actionmenu->add(new action_menu_link_secondary( + $showmoreurl, + null, + get_string('showmore', 'mod_data') + )); + } + + if ($canmanageentry) { + // Edit entry. + $backurl = new moodle_url($this->baseurl, [ + 'rid' => $entry->id, + 'mode' => 'single', + ]); + $editurl = new moodle_url('/mod/data/edit.php', $this->baseurl->params()); + $editurl->params([ + 'rid' => $entry->id, + 'sesskey' => sesskey(), + 'backto' => urlencode($backurl->out(false)) + ]); + + $actionmenu->add(new action_menu_link_secondary( + $editurl, + null, + get_string('edit') + )); + + // Delete entry. + $deleteurl = new moodle_url($this->baseurl, [ + 'delete' => $entry->id, + 'sesskey' => sesskey(), + 'mode' => 'single', + ]); + + $actionmenu->add(new action_menu_link_secondary( + $deleteurl, + null, + get_string('delete') + )); + } + + // Approve/disapprove entry. + $context = $this->manager->get_context(); + if (has_capability('mod/data:approve', $context) && $this->instance->approval) { + if ($entry->approved) { + $disapproveurl = new moodle_url($this->baseurl, [ + 'disapprove' => $entry->id, + 'sesskey' => sesskey(), + ]); + $actionmenu->add(new action_menu_link_secondary( + $disapproveurl, + null, + get_string('disapprove', 'mod_data') + )); + } else { + $approveurl = new moodle_url($this->baseurl, [ + 'approve' => $entry->id, + 'sesskey' => sesskey(), + ]); + $actionmenu->add(new action_menu_link_secondary( + $approveurl, + null, + get_string('approve', 'mod_data') + )); + } + } + + // Export entry to portfolio. + if (!empty($CFG->enableportfolios)) { + // Check the user can export the entry. + $cm = $this->manager->get_coursemodule(); + $canexportall = has_capability('mod/data:exportentry', $context); + $canexportown = has_capability('mod/data:exportownentry', $context); + if ($canexportall || (data_isowner($entry->id) && $canexportown)) { + // Add the portfolio export button. + require_once($CFG->libdir . '/portfoliolib.php'); + $button = new portfolio_add_button(); + $button->set_callback_options( + 'data_portfolio_caller', + ['id' => $cm->id, 'recordid' => $entry->id], + 'mod_data' + ); + $fields = $this->manager->get_fields(); + list($formats, $files) = data_portfolio_caller::formats($fields, $entry); + $button->set_formats($formats); + $exporturl = $button->to_html(PORTFOLIO_ADD_MOODLE_URL); + if (!is_null($exporturl)) { + $actionmenu->add(new action_menu_link_secondary( + $exporturl, + null, + get_string('addtoportfolio', 'portfolio') + )); + } + } + } + + return $OUTPUT->render($actionmenu); + } } diff --git a/mod/data/lang/en/data.php b/mod/data/lang/en/data.php index 327517a9742..9c7db38e764 100644 --- a/mod/data/lang/en/data.php +++ b/mod/data/lang/en/data.php @@ -24,6 +24,7 @@ */ $string['action'] = 'Action'; +$string['actionsmenu'] = 'Actions menu'; $string['add'] = 'Add entry'; $string['addcomment'] = 'Add comment'; $string['addentries'] = 'Add entries'; @@ -387,6 +388,7 @@ $string['selectedrequired'] = 'All selected required'; $string['selectfields'] = 'Select fields'; $string['selectexportoptions'] = 'Select export options'; $string['showall'] = 'Show all entries'; +$string['showmore'] = 'Show more'; $string['single'] = 'View single'; $string['singleview'] = 'Single view'; $string['singletemplate'] = 'Single template'; diff --git a/mod/data/styles.css b/mod/data/styles.css index 53026c90bea..ff8d7f96e05 100644 --- a/mod/data/styles.css +++ b/mod/data/styles.css @@ -149,6 +149,7 @@ padding-left: 10px; } -.preset_action_menu .dropdown-toggle::after { +.preset_action_menu .dropdown-toggle::after, +.entry-actionsmenu .dropdown-toggle::after { display: none; } diff --git a/mod/data/templates/template_editor_tools.mustache b/mod/data/templates/template_editor_tools.mustache index 5b65f171d95..4c13e06b84a 100644 --- a/mod/data/templates/template_editor_tools.mustache +++ b/mod/data/templates/template_editor_tools.mustache @@ -41,6 +41,10 @@ { "name": "Actions", "tags": [ + { + "tag": "##actionsmenu##", + "tagname": "Actions menu - ##actionsmenu##" + }, { "tag": "##edit##", "tagname": "Edit - ##edit##" diff --git a/mod/data/tests/behat/actionsmenu_replacement.feature b/mod/data/tests/behat/actionsmenu_replacement.feature new file mode 100644 index 00000000000..0f13e265b5a --- /dev/null +++ b/mod/data/tests/behat/actionsmenu_replacement.feature @@ -0,0 +1,349 @@ +@mod @mod_data +Feature: Users can add the ##actionsmenu## replacement to the database templates + In order to display all the actions for entries in templates + As a teacher + I need to edit the templates and add the actionsmenu replacement + + Background: + Given the following "users" exist: + | username | firstname | lastname | email | + | teacher1 | Teacher | 1 | teacher1@example.com | + | student1 | Student | 1 | student1@example.com | + And the following "courses" exist: + | fullname | shortname | category | + | Course 1 | C1 | 0 | + And the following "course enrolments" exist: + | user | course | role | + | teacher1 | C1 | editingteacher | + | student1 | C1 | student | + And the following "activities" exist: + | activity | name | intro | course | idnumber | + | data | Test database name | Database intro | C1 | data1 | + And the following "mod_data > fields" exist: + | database | type | name | description | + | data1 | text | field1 | Test field description | + | data1 | text | field2 | Test field 2 description | + And the following "mod_data > templates" exist: + | database | name | + | data1 | singletemplate | + | data1 | listtemplate | + | data1 | addtemplate | + | data1 | asearchtemplate | + | data1 | rsstemplate | + And the following "mod_data > entries" exist: + | database | user | field1 | field2 | + | data1 | student1 | Student entry 1 | Some student content 1 | + | data1 | teacher1 | Teacher entry 1 | Some teacher content 1 | + And I am on the "Test database name" "data activity" page logged in as teacher1 + And I navigate to "Templates" in current page administration + And I set the following fields to these values: + | Header | | + | Repeated entry | | + | Footer |
[[field1]]##actionsmenu##
| + And I click on "Save template" "button" + And I set the field "Templates tertiary navigation" to "Single template" + And I set the following fields to these values: + | Single template |
[[field1]][[field2]]##actionsmenu##
| + And I click on "Save template" "button" + + @javascript + Scenario: The ##actionsmenu## replacement displays the expected actions with default settings depending on the user permissions + Given I navigate to "Database" in current page administration + # Teachers should be able to edit/delete all the entries. + When I open the action menu in "Student entry 1" "table_row" + Then I should see "Show more" + And I should see "Edit" + And I should see "Delete" + But I should not see "Approve" + And I should not see "Undo approval" + And I should not see "Export to portfolio" + And I press the escape key + And I open the action menu in "Teacher entry 1" "table_row" + And I should see "Show more" + And I should see "Edit" + And I should see "Delete" + # Single view (for teacher). + And I choose "Show more" in the open action menu + And I should see "Teacher entry 1" + And I should see "Some teacher content 1" + And I should not see "Student entry 1" + And I open the action menu in "Teacher entry 1" "table_row" + And I should not see "Show more" + And I should see "Edit" + And I should see "Delete" + And I should not see "Approve" + And I should not see "Undo approval" + And I should not see "Export to portfolio" + And I press the escape key + And I follow "Previous page" + And I should see "Student entry 1" + And I should see "Some student content 1" + And I should not see "Teacher entry 1" + And I open the action menu in "Student entry 1" "table_row" + And I should not see "Show more" + And I should see "Edit" + And I should see "Delete" + And I log out + # Students only should edit/delete their entries. + But I am on the "Test database name" "data activity" page logged in as student1 + And I open the action menu in "Student entry 1" "table_row" + And I should see "Show more" + And I should see "Edit" + And I should see "Delete" + And I should not see "Approve" + And I should not see "Undo approval" + And I should not see "Export to portfolio" + And I press the escape key + And I open the action menu in "Teacher entry 1" "table_row" + And I should see "Show more" + And I should not see "Edit" + And I should not see "Delete" + # Single view (for student). + And I choose "Show more" in the open action menu + And I should see "Teacher entry 1" + And I should see "Some teacher content 1" + And I should not see "Student entry 1" + And I should not see "Actions" in the "Teacher entry 1" "table_row" + And I follow "Previous page" + And I should see "Student entry 1" + And I should see "Some student content 1" + And I should not see "Teacher entry 1" + And I open the action menu in "Student entry 1" "table_row" + And I should not see "Show more" + And I should see "Edit" + And I should see "Delete" + And I should not see "Approve" + And I should not see "Undo approval" + And I should not see "Export to portfolio" + + @javascript + Scenario: The ##actionsmenu## replacement displays the Approval/Undo approval options + Given I navigate to "Settings" in current page administration + And I follow "Entries" + And I set the field "Approval required" to "Yes" + And I press "Save and display" + When I navigate to "Database" in current page administration + # Teachers should be able to approve/unapprove all the entries from list view. + And I open the action menu in "Student entry 1" "table_row" + Then I should see "Approve" + And I should not see "Undo approval" + And I choose "Approve" in the open action menu + And I should see "Entry approved" + And I press "Dismiss this notification" + And I open the action menu in "Student entry 1" "table_row" + And I should see "Undo approval" + And I should not see "Approve" in the ".menu-action-text" "css_element" + And I press the escape key + And I open the action menu in "Teacher entry 1" "table_row" + And I should see "Undo approval" + And I should not see "Approve" in the ".menu-action-text" "css_element" + # Single view (for teacher). + And I choose "Show more" in the open action menu + And I should see "Teacher entry 1" + And I open the action menu in "Teacher entry 1" "table_row" + And I should see "Undo approval" + And I should not see "Approve" + And I press the escape key + And I follow "Previous page" + And I should see "Student entry 1" + And I open the action menu in "Student entry 1" "table_row" + And I should not see "Approve" + And I should see "Undo approval" + # Check entries can be approved/unapproved from single view too. + And I choose "Undo approval" in the open action menu + And I should see "Entry unapproved" + And I press "Dismiss this notification" + And I open the action menu in "Student entry 1" "table_row" + And I should see "Approve" + And I should not see "Undo approval" + And I log out + # Students should not see the Approve/Undo approval options. + But I am on the "Test database name" "data activity" page logged in as student1 + And I open the action menu in "Teacher entry 1" "table_row" + And I should not see "Approve" + And I should not see "Undo approval" + And I press the escape key + And I open the action menu in "Student entry 1" "table_row" + And I should not see "Approve" + And I should not see "Undo approval" + # Single view (for student). + And I choose "Show more" in the open action menu + And I should see "Student entry 1" + And I open the action menu in "Student entry 1" "table_row" + And I should not see "Approve" + And I should not see "Undo approval" + And I follow "Next page" + And I should see "Teacher entry 1" + And I should not see "Actions" in the "Teacher entry 1" "table_row" + + @javascript + Scenario: The ##actionsmenu## replacement displays the Export to portfolio options + Given I log in as "admin" + And the following config values are set as admin: + | enableportfolios | 1 | + And I navigate to "Plugins > Portfolios > Manage portfolios" in site administration + And I set portfolio instance "File download" to "Enabled and visible" + And I click on "Save" "button" + And I log out + And I am on the "Test database name" "data activity" page logged in as teacher1 + # Teachers should be able to export to portfolio all the entries from list view. + When I open the action menu in "Student entry 1" "table_row" + Then I should see "Export to portfolio" + And I choose "Export to portfolio" in the open action menu + And I should see "Configure exported data" + And I press "Cancel" + And I click on "Yes" "button" in the "Confirm" "dialogue" + And I open the action menu in "Teacher entry 1" "table_row" + And I should see "Export to portfolio" + # Single view (for teacher). + And I choose "Show more" in the open action menu + And I should see "Teacher entry 1" + And I open the action menu in "Teacher entry 1" "table_row" + And I should see "Export to portfolio" + And I press the escape key + And I follow "Previous page" + And I should see "Student entry 1" + And I open the action menu in "Student entry 1" "table_row" + And I should see "Export to portfolio" + # Check entries can be exported from single view too. + And I choose "Export to portfolio" in the open action menu + And I should see "Configure exported data" + And I log out + # Students should only export their entries. + But I am on the "Test database name" "data activity" page logged in as student1 + And I open the action menu in "Teacher entry 1" "table_row" + And I should not see "Export to portfolio" + And I press the escape key + And I open the action menu in "Student entry 1" "table_row" + And I should see "Export to portfolio" + And I choose "Export to portfolio" in the open action menu + And I should see "Configure exported data" + And I press "Cancel" + And I click on "Yes" "button" in the "Confirm" "dialogue" + And I open the action menu in "Teacher entry 1" "table_row" + # Single view (for student). + And I choose "Show more" in the open action menu + And I should see "Teacher entry 1" + And I should not see "Actions" in the "Teacher entry 1" "table_row" + And I follow "Previous page" + And I should see "Student entry 1" + And I open the action menu in "Student entry 1" "table_row" + And I should see "Export to portfolio" + And I choose "Export to portfolio" in the open action menu + And I should see "Configure exported data" + + @javascript + Scenario: The ##actionsmenu## replacement does not display the Export to portfolio option when there are no portfolios enabled + Given I log in as "admin" + And the following config values are set as admin: + | enableportfolios | 1 | + And I log out + And I am on the "Test database name" "data activity" page logged in as teacher1 + When I open the action menu in "Student entry 1" "table_row" + Then I should not see "Export to portfolio" + And I log out + # If we enable, at least, one portfolio, the Export to portfolio option should be displayed. + But I log in as "admin" + And I navigate to "Plugins > Portfolios > Manage portfolios" in site administration + And I set portfolio instance "File download" to "Enabled and visible" + And I click on "Save" "button" + And I log out + And I am on the "Test database name" "data activity" page logged in as teacher1 + And I open the action menu in "Student entry 1" "table_row" + And I should see "Export to portfolio" + + @javascript + Scenario: The Edit option in the ##actionsmenu## replacement is working + Given I navigate to "Database" in current page administration + # Teachers should be able to edit any entry. + And I open the action menu in "Student entry 1" "table_row" + When I choose "Edit" in the open action menu + And I set the field "field2" to "Some MODIFIED BY THE TEACHER student content 1" + And I click on "Save" "button" + # Single view (for teacher). + Then I should see "Some MODIFIED BY THE TEACHER student content 1" + And I should not see "Some student content 1" + And I open the action menu in "Student entry 1" "table_row" + And I choose "Edit" in the open action menu + And I set the field "field2" to "Some MORE TEACHER MODIFICATIONS FOR student content 1" + And I click on "Save" "button" + And I should see "Some MORE TEACHER MODIFICATIONS FOR student content 1" + And I should not see "Some MODIFIED BY THE TEACHER student content 1" + And I log out + # Students only should edit their entries. + But I am on the "Test database name" "data activity" page logged in as student1 + And I open the action menu in "Student entry 1" "table_row" + And I choose "Edit" in the open action menu + And I set the field "field2" to "Some MODIFIED student content 1" + And I click on "Save" "button" + # Single view (for student). + And I should see "Some MODIFIED student content 1" + And I should not see "Some MORE TEACHER MODIFICATIONS FOR student content 1" + And I open the action menu in "Student entry 1" "table_row" + And I choose "Edit" in the open action menu + And I set the field "field2" to "Some MORE MODIFICATIONS FOR student content 1" + And I click on "Save" "button" + And I should see "Some MORE MODIFICATIONS FOR student content 1" + And I should not see "Some MODIFIED student content 1" + + @javascript + Scenario: The Delete option in the ##actionsmenu## replacement is working + Given the following "mod_data > entries" exist: + | database | user | field1 | field2 | + | data1 | student1 | Student entry 2 | Some student content 2 | + | data1 | teacher1 | Teacher entry 2 | Some teacher content 2 | + And I navigate to "Database" in current page administration + # Teachers should be able to delete any entry. + And I open the action menu in "Student entry 1" "table_row" + When I choose "Delete" in the open action menu + Then I should see "Delete entry" + # Cancel doesn't delete the entry. + And I click on "Cancel" "button" in the "Confirm" "dialogue" + And I open the action menu in "Teacher entry 1" "table_row" + # But Delete removes the entry. + And I choose "Delete" in the open action menu + And I should see "Delete entry" + And I click on "Delete" "button" in the "Confirm" "dialogue" + And I should see "Entry deleted" + And I should not see "Teacher entry 1" + And I should see "Teacher entry 2" + And I should see "Student entry 1" + And I should see "Student entry 2" + # Single view (for teacher). + And I open the action menu in "Teacher entry 2" "table_row" + And I choose "Delete" in the open action menu + And I should see "Delete entry" + And I click on "Delete" "button" in the "Confirm" "dialogue" + And I should see "Entry deleted" + And I should not see "Teacher entry 1" + And I should not see "Teacher entry 2" + And I should see "Student entry 1" + And I should see "Student entry 2" + And I log out + # Students only should edit their entries. + But I am on the "Test database name" "data activity" page logged in as student1 + And I open the action menu in "Student entry 1" "table_row" + When I choose "Delete" in the open action menu + Then I should see "Delete entry" + # Cancel doesn't delete the entry. + And I click on "Cancel" "button" in the "Confirm" "dialogue" + And I open the action menu in "Student entry 1" "table_row" + # But Delete removes the entry. + And I choose "Delete" in the open action menu + And I should see "Delete entry" + And I click on "Delete" "button" in the "Confirm" "dialogue" + And I should see "Entry deleted" + And I should not see "Teacher entry 1" + And I should not see "Teacher entry 2" + And I should not see "Student entry 1" + And I should see "Student entry 2" + # Single view (for student). + And I open the action menu in "Student entry 2" "table_row" + And I choose "Delete" in the open action menu + And I should see "Delete entry" + And I click on "Delete" "button" in the "Confirm" "dialogue" + And I should see "Entry deleted" + And I should not see "Teacher entry 1" + And I should not see "Teacher entry 2" + And I should not see "Student entry 1" + And I should not see "Student entry 2" diff --git a/mod/data/tests/template_test.php b/mod/data/tests/template_test.php index d602e775dd9..a02321ce760 100644 --- a/mod/data/tests/template_test.php +++ b/mod/data/tests/template_test.php @@ -191,11 +191,41 @@ class template_test extends \advanced_testcase { 'templatecontent' => 'Some ##more## tag', 'expected' => '|Some .*more.*{cmid}.*rid.*{entryid}.*More.* tag|', 'rolename' => 'editingteacher', + 'enableexport' => false, + 'approved' => true, + 'enablecomments' => false, + 'enableratings' => false, + 'options' => ['showmore' => true], + ], + 'Teacher more tag with showmore set to false' => [ + 'templatecontent' => 'Some ##more## tag', + 'expected' => '|Some tag|', + 'rolename' => 'editingteacher', + 'enableexport' => false, + 'approved' => true, + 'enablecomments' => false, + 'enableratings' => false, + 'options' => ['showmore' => false], ], 'Teacher moreurl tag' => [ 'templatecontent' => 'Some ##moreurl## tag', 'expected' => '|Some .*/mod/data/view.*{cmid}.*rid.*{entryid}.* tag|', 'rolename' => 'editingteacher', + 'enableexport' => false, + 'approved' => true, + 'enablecomments' => false, + 'enableratings' => false, + 'options' => ['showmore' => true], + ], + 'Teacher moreurl tag with showmore set to false' => [ + 'templatecontent' => 'Some ##moreurl## tag', + 'expected' => '|Some .*/mod/data/view.*{cmid}.*rid.*{entryid}.* tag|', + 'rolename' => 'editingteacher', + 'enableexport' => false, + 'approved' => true, + 'enablecomments' => false, + 'enableratings' => false, + 'options' => ['showmore' => false], ], 'Teacher delcheck tag' => [ 'templatecontent' => 'Some ##delcheck## tag', @@ -361,6 +391,49 @@ class template_test extends \advanced_testcase { 'enableratings' => true, 'options' => ['ratings' => true], ], + 'Teacher actionsmenu tag with default options' => [ + 'templatecontent' => 'Some ##actionsmenu## tag', + 'expected' => '|Some .*edit.*{entryid}.*sesskey.*Edit.* .*delete.*{entryid}.*sesskey.*Delete.* tag|', + 'rolename' => 'editingteacher', + ], + 'Teacher actionsmenu tag with default options (check Show more is not there)' => [ + 'templatecontent' => 'Some ##actionsmenu## tag', + 'expected' => '|^Some((?!Show more).)*tag$|', + 'rolename' => 'editingteacher', + ], + 'Teacher actionsmenu tag with show more enabled' => [ + 'templatecontent' => 'Some ##actionsmenu## tag', + 'expected' => '|Some .*view.*{cmid}.*rid.*{entryid}.*Show more.* .*Edit.* .*Delete.* tag|', + 'rolename' => 'editingteacher', + 'enableexport' => false, + 'approved' => false, + 'enablecomments' => false, + 'enableratings' => false, + 'options' => ['showmore' => true], + ], + 'Teacher actionsmenu tag with export enabled' => [ + 'templatecontent' => 'Some ##actionsmenu## tag', + 'expected' => '|Some .*Edit.* .*Delete.* .*portfolio/add.* tag|', + 'rolename' => 'editingteacher', + 'enableexport' => true, + ], + 'Teacher actionsmenu tag with approved enabled' => [ + 'templatecontent' => 'Some ##actionsmenu## tag', + 'expected' => '|Some .*Edit.* .*Delete.* .*disapprove.*{entryid}.*sesskey.*Undo approval.* tag|', + 'rolename' => 'editingteacher', + 'enableexport' => false, + 'approved' => true, + ], + 'Teacher actionsmenu tag with export, approved and showmore enabled' => [ + 'templatecontent' => 'Some ##actionsmenu## tag', + 'expected' => '|Some .*Show more.* .*Edit.* .*Delete.* .*Undo approval.* .*Export to portfolio.* tag|', + 'rolename' => 'editingteacher', + 'enableexport' => true, + 'approved' => true, + 'enablecomments' => false, + 'enableratings' => false, + 'options' => ['showmore' => true], + ], // Student scenarios. 'Student id tag' => [ 'templatecontent' => 'Some ##id## tag', @@ -403,11 +476,41 @@ class template_test extends \advanced_testcase { 'templatecontent' => 'Some ##more## tag', 'expected' => '|Some .*more.*{cmid}.*rid.*{entryid}.*More.* tag|', 'rolename' => 'student', + 'enableexport' => false, + 'approved' => true, + 'enablecomments' => false, + 'enableratings' => false, + 'options' => ['showmore' => true], + ], + 'Student more tag with showmore set to false' => [ + 'templatecontent' => 'Some ##more## tag', + 'expected' => '|Some tag|', + 'rolename' => 'student', + 'enableexport' => false, + 'approved' => true, + 'enablecomments' => false, + 'enableratings' => false, + 'options' => ['showmore' => false], ], 'Student moreurl tag' => [ 'templatecontent' => 'Some ##moreurl## tag', 'expected' => '|Some .*/mod/data/view.*{cmid}.*rid.*{entryid}.* tag|', 'rolename' => 'student', + 'enableexport' => false, + 'approved' => true, + 'enablecomments' => false, + 'enableratings' => false, + 'options' => ['showmore' => true], + ], + 'Student moreurl tag with showmore set to false' => [ + 'templatecontent' => 'Some ##moreurl## tag', + 'expected' => '|Some .*/mod/data/view.*{cmid}.*rid.*{entryid}.* tag|', + 'rolename' => 'student', + 'enableexport' => false, + 'approved' => true, + 'enablecomments' => false, + 'enableratings' => false, + 'options' => ['showmore' => false], ], 'Student delcheck tag' => [ 'templatecontent' => 'Some ##delcheck## tag', @@ -584,6 +687,49 @@ class template_test extends \advanced_testcase { 'enableratings' => true, 'options' => ['ratings' => true] ], + 'Student actionsmenu tag with default options' => [ + 'templatecontent' => 'Some ##actionsmenu## tag', + 'expected' => '|Some .*edit.*{entryid}.*sesskey.*Edit.* .*delete.*{entryid}.*sesskey.*Delete.* tag|', + 'rolename' => 'student', + ], + 'Student actionsmenu tag with default options (check Show more is not there)' => [ + 'templatecontent' => 'Some ##actionsmenu## tag', + 'expected' => '|^Some((?!Show more).)*tag$|', + 'rolename' => 'student', + ], + 'Student actionsmenu tag with show more enabled' => [ + 'templatecontent' => 'Some ##actionsmenu## tag', + 'expected' => '|Some .*view.*{cmid}.*rid.*{entryid}.*Show more.* .*Edit.* .*Delete.* tag|', + 'rolename' => 'student', + 'enableexport' => false, + 'approved' => false, + 'enablecomments' => false, + 'enableratings' => false, + 'options' => ['showmore' => true], + ], + 'Student actionsmenu tag with export enabled' => [ + 'templatecontent' => 'Some ##actionsmenu## tag', + 'expected' => '|Some .*Edit.* .*Delete.* .*portfolio/add.* tag|', + 'rolename' => 'student', + 'enableexport' => true, + ], + 'Student actionsmenu tag with approved enabled' => [ + 'templatecontent' => 'Some ##actionsmenu## tag', + 'expected' => '|^Some((?!Approve).)*tag$|', + 'rolename' => 'student', + 'enableexport' => false, + 'approved' => true, + ], + 'Student actionsmenu tag with export, approved and showmore enabled' => [ + 'templatecontent' => 'Some ##actionsmenu## tag', + 'expected' => '|Some .*Show more.* .*Edit.* .*Delete.* .*Export to portfolio.* tag|', + 'rolename' => 'student', + 'enableexport' => true, + 'approved' => true, + 'enablecomments' => false, + 'enableratings' => false, + 'options' => ['showmore' => true], + ], ]; }