diff --git a/mod/forum/classes/local/renderers/discussion.php b/mod/forum/classes/local/renderers/discussion.php index 82ac80063a6..d7fa820325b 100644 --- a/mod/forum/classes/local/renderers/discussion.php +++ b/mod/forum/classes/local/renderers/discussion.php @@ -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')); diff --git a/mod/forum/tests/behat/portfolio_export.feature b/mod/forum/tests/behat/portfolio_export.feature new file mode 100644 index 00000000000..0bf6df2fea4 --- /dev/null +++ b/mod/forum/tests/behat/portfolio_export.feature @@ -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 | + + 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 + When 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" + Then "Export whole discussion to portfolio" "button" should not exist + And I log out + And I log in as "teacher1" + And I am on "Course 1" course homepage + And I follow "Test forum 1" + And I follow "Discussion 1" + And "Export whole discussion to portfolio" "button" should exist + And I press "Export whole discussion to portfolio" + And I should see "Exporting to portfolio"