MDL-76196 mod_folder: Display manual completion if inline display set

This commit is contained in:
David Woloszyn 2022-11-11 19:04:45 +11:00 committed by Huong Nguyen
parent 5877ae306e
commit b0f872a528
2 changed files with 102 additions and 0 deletions

View File

@ -0,0 +1,84 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
declare(strict_types=1);
namespace mod_folder\completion;
use core_completion\activity_custom_completion;
/**
* Activity custom completion subclass for the folder resource.
*
* Class for defining mod_folder's custom completion rules.
*
* @package mod_folder
* @copyright 2022 David Woloszyn <david.woloszyn@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class custom_completion extends activity_custom_completion {
/**
* Fetches the completion state for a given completion rule.
*
* @param string $rule The completion rule.
* @return int The completion state.
*/
public function get_state(string $rule): int {
return COMPLETION_UNKNOWN;
}
/**
* Fetch the list of custom completion rules that this module defines.
*
* @return array
*/
public static function get_defined_custom_rules(): array {
// This activity/resource does not have any custom rules.
return [];
}
/**
* Returns an associative array of the descriptions of custom completion rules.
*
* @return array
*/
public function get_custom_rule_descriptions(): array {
// This activity/resource does not have any custom rule descriptions.
return [];
}
/**
* Show the manual completion button depending on the display option set.
*
* @return bool
*/
public function manual_completion_always_shown(): bool {
$display = $this->cm->customdata->display ?? null;
return ($display == FOLDER_DISPLAY_INLINE ?? false);
}
/**
* Returns an array of all completion rules, in the order they should be displayed to users.
*
* @return array
*/
public function get_sort_order(): array {
// This module only supports manual completion.
return [];
}
}

View File

@ -12,10 +12,12 @@ Feature: View activity completion information in the folder activity
And the following "courses" exist:
| fullname | shortname | enablecompletion | showcompletionconditions |
| Course 1 | C1 | 1 | 1 |
| Course 2 | C2 | 1 | 0 |
And the following "course enrolments" exist:
| user | course | role |
| student1 | C1 | student |
| teacher1 | C1 | editingteacher |
| student1 | C2 | student |
Scenario: View automatic completion items
Given the following "activity" exists:
@ -52,3 +54,19 @@ Feature: View activity completion information in the folder activity
Then the manual completion button of "Music history" is displayed as "Mark as done"
And I toggle the manual completion state of "Music history"
And the manual completion button of "Music history" is displayed as "Done"
@javascript
Scenario: The manual completion button will be shown on the course page for Inline on a course page display mode
Given the following "activity" exists:
| activity | folder |
| course | C2 |
| idnumber | mh2 |
| name | Music history |
| section | 1 |
| completion | 1 |
| display | 1 |
When I am on the "Course 2" course page logged in as student1
Then the manual completion button for "Music history" should exist
And the manual completion button of "Music history" is displayed as "Mark as done"
And I toggle the manual completion state of "Music history"
And the manual completion button of "Music history" is displayed as "Done"