MDL-66818 mod_forum: hide portfolio export button based on caps
This commit is contained in:
@@ -56,6 +56,26 @@ class behat_forms extends behat_base {
|
||||
$this->execute('behat_general::i_click_on', [$button, 'button']);
|
||||
}
|
||||
|
||||
/**
|
||||
* Ensure a button exists.
|
||||
* @Then the button :button exists
|
||||
* @param string $button
|
||||
*/
|
||||
public function button_exists(string $button) {
|
||||
$buttonnode = $this->find_button($button);
|
||||
$this->ensure_node_is_visible($buttonnode);
|
||||
}
|
||||
|
||||
/**
|
||||
* Ensure that a button does not exist.
|
||||
* @Then the button :button does not exist
|
||||
* @param string $button
|
||||
*/
|
||||
public function button_does_not_exist(string $button) {
|
||||
$general = behat_context_helper::get('behat_general');
|
||||
$general->should_not_exist($button, 'button');
|
||||
}
|
||||
|
||||
/**
|
||||
* Press button with specified id|name|title|alt|value and switch to main window.
|
||||
*
|
||||
|
||||
@@ -37,6 +37,7 @@ use mod_forum\local\factories\url as url_factory;
|
||||
use mod_forum\local\factories\vault as vault_factory;
|
||||
use mod_forum\local\managers\capability as capability_manager;
|
||||
use mod_forum\local\renderers\posts as posts_renderer;
|
||||
use forum_portfolio_caller;
|
||||
use core\output\notification;
|
||||
use context;
|
||||
use context_module;
|
||||
@@ -52,6 +53,7 @@ use stdClass;
|
||||
use url_select;
|
||||
|
||||
require_once($CFG->dirroot . '/mod/forum/lib.php');
|
||||
require_once($CFG->dirroot . '/mod/forum/locallib.php');
|
||||
|
||||
/**
|
||||
* Discussion renderer class.
|
||||
@@ -362,6 +364,15 @@ class discussion {
|
||||
|
||||
require_once($CFG->libdir . '/portfoliolib.php');
|
||||
$discussion = $this->discussion;
|
||||
|
||||
// We use the portfolio caller to work out if user should be allowed to see this button.
|
||||
$caller = new forum_portfolio_caller(['discussionid' => $discussion->get_id()]);
|
||||
$caller->set_formats_from_button([]);
|
||||
$caller->load_data();
|
||||
if (!$caller->check_permissions()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$button = new \portfolio_add_button();
|
||||
$button->set_callback_options('forum_portfolio_caller', ['discussionid' => $discussion->get_id()], 'mod_forum');
|
||||
$button = $button->to_html(PORTFOLIO_ADD_FULL_FORM, get_string('exportdiscussion', 'mod_forum'));
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
@mod @mod_forum
|
||||
Feature: Ensure only users with appropriate permissions can export forum discussions.
|
||||
|
||||
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 |
|
||||
@javascript
|
||||
Scenario: A teacher can export discussions to a portfolio.
|
||||
Given the following "activities" exist:
|
||||
| activity | name | intro | course | idnumber | groupmode |
|
||||
| forum | Test forum 1 | Test forum 2 | C1 | forum | 0 |
|
||||
And 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 log in as "student1"
|
||||
And I am on "Course 1" course homepage
|
||||
And I follow "Test forum 1"
|
||||
And I add a new discussion to "Test forum 1" forum with:
|
||||
| Subject | Discussion 1 |
|
||||
| Message | Test post message |
|
||||
And I reload the page
|
||||
And I follow "Discussion 1"
|
||||
And the button "Export whole discussion to portfolio" does not exist
|
||||
And I log out
|
||||
And I log in as "admin"
|
||||
And I am on "Course 1" course homepage
|
||||
And I follow "Test forum 1"
|
||||
And I follow "Discussion 1"
|
||||
And the button "Export whole discussion to portfolio" exists
|
||||
And I press "Export whole discussion to portfolio"
|
||||
Then I should see "Exporting to portfolio"
|
||||
Reference in New Issue
Block a user