diff --git a/mod/folder/classes/completion/custom_completion.php b/mod/folder/classes/completion/custom_completion.php new file mode 100644 index 00000000000..b44ff3b93a3 --- /dev/null +++ b/mod/folder/classes/completion/custom_completion.php @@ -0,0 +1,84 @@ +. + +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 + * @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 []; + } +} diff --git a/mod/folder/tests/behat/folder_activity_completion.feature b/mod/folder/tests/behat/folder_activity_completion.feature index 1cbe278b0dd..04cf1332a1d 100644 --- a/mod/folder/tests/behat/folder_activity_completion.feature +++ b/mod/folder/tests/behat/folder_activity_completion.feature @@ -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"