diff --git a/completion/tests/behat/behat_completion.php b/completion/tests/behat/behat_completion.php index 89b6344b85f..29e96b11905 100644 --- a/completion/tests/behat/behat_completion.php +++ b/completion/tests/behat/behat_completion.php @@ -105,4 +105,20 @@ class behat_completion extends behat_base { return $steps; } + /** + * Toggles completion tracking for course + * + * @When /^completion tracking is "(?P([Ee]nabled|[Dd]isabled)*)" in current course$/ + * @param string $completionstatus + */ + public function completion_is_toggled_in_course($completionstatus) { + + $toggle = strtolower($completionstatus) == 'enabled' ? 'Yes' : 'No'; + + return array( + new Given('I follow "'.get_string('editsettings').'"'), + new Given('I select "'.$toggle.'" from "'.get_string('enablecompletion', 'completion').'"'), + new Given('I press "'.get_string('savechanges').'"') + ); + } } diff --git a/completion/tests/behat/teacher_manual_completion.feature b/completion/tests/behat/teacher_manual_completion.feature new file mode 100644 index 00000000000..f5ced8d7a50 --- /dev/null +++ b/completion/tests/behat/teacher_manual_completion.feature @@ -0,0 +1,45 @@ +@core @core_completion +Feature: Allow teachers to manually mark users as complete when configured + In order for teachers to mark students as complete + As a teacher + I need to be able to use the completion report mark complete functionality + + Scenario: Mark a student as complete using the completion report + Given the following "courses" exists: + | fullname | shortname | category | + | Completion course | CC1 | 0 | + And the following "users" exists: + | username | firstname | lastname | email | + | student1 | Student | First | student1@example.com | + | teacher1 | Teacher | First | teacher1@example.com | + And the following "course enrolments" exists: + | user | course | role | + | student1 | CC1 | student | + | teacher1 | CC1 | editingteacher | + And I log in as "admin" + And I set the following administration settings values: + | Enable completion tracking | 1 | + And I am on homepage + And I follow "Completion course" + And completion tracking is "enabled" in current course + And I follow "Course completion" + And I check "Teacher" + And I press "Save changes" + And I turn editing mode on + And I add the "Course completion status" block + And I log out + And I log in as "student1" + And I follow "Completion course" + And I should see "Status: Not yet started" + And I log out + When I log in as "teacher1" + And I follow "Completion course" + And I follow "View course report" + And I should see "Student First" + And I follow "Click to mark user complete" + And I run the cron + And I am on homepage + And I log out + Then I log in as "student1" + And I follow "Completion course" + And I should see "Status: Complete" diff --git a/course/togglecompletion.php b/course/togglecompletion.php index 53992db8c6c..a23544dfca7 100644 --- a/course/togglecompletion.php +++ b/course/togglecompletion.php @@ -19,6 +19,9 @@ * Toggles the manual completion flag for a particular activity or course completion * and the current user. * + * If by student params: course=2 + * If by manager params: course=2&user=4&rolec=3&sesskey=ghfgsdf + * * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later * @package course */ @@ -31,6 +34,10 @@ $cmid = optional_param('id', 0, PARAM_INT); $courseid = optional_param('course', 0, PARAM_INT); $confirm = optional_param('confirm', 0, PARAM_BOOL); +// Check if we are marking a user complete via the completion report +$user = optional_param('user', 0, PARAM_INT); +$rolec = optional_param('rolec', 0, PARAM_INT); + if (!$cmid && !$courseid) { print_error('invalidarguments'); } @@ -45,16 +52,14 @@ if ($courseid) { require_login($course); $completion = new completion_info($course); + $trackeduser = ($user ? $user : $USER->id); + if (!$completion->is_enabled()) { throw new moodle_exception('completionnotenabled', 'completion'); - } elseif (!$completion->is_tracked_user($USER->id)) { + } elseif (!$completion->is_tracked_user($trackeduser)) { throw new moodle_exception('nottracked', 'completion'); } - // Check if we are marking a user complete via the completion report - $user = optional_param('user', 0, PARAM_INT); - $rolec = optional_param('rolec', 0, PARAM_INT); - if ($user && $rolec) { require_sesskey(); diff --git a/lib/tests/behat/behat_general.php b/lib/tests/behat/behat_general.php index 6e1934c4f35..c958a770895 100644 --- a/lib/tests/behat/behat_general.php +++ b/lib/tests/behat/behat_general.php @@ -879,6 +879,15 @@ class behat_general extends behat_base { $this->getSession()->visit($this->locate_path('/admin/cron.php')); } + /** + * This step triggers cron like a user would do going to admin/cron.php (alias for "I trigger cron") + * + * @Given /^I run the cron$/ + */ + public function i_run_the_cron() { + $this->i_trigger_cron(); + } + /** * Checks that an element and selector type exists in another element and selector type on the current page. * diff --git a/report/completion/index.php b/report/completion/index.php index f9002001f17..ae1786c4356 100644 --- a/report/completion/index.php +++ b/report/completion/index.php @@ -672,8 +672,8 @@ foreach ($progress as $user) { ) ); - print ''.$describe.''; + print ''.$describe.''; } else { print ''.$describe.''; } diff --git a/report/completion/lang/en/report_completion.php b/report/completion/lang/en/report_completion.php index fa91fd738be..da96d5fc4c5 100644 --- a/report/completion/lang/en/report_completion.php +++ b/report/completion/lang/en/report_completion.php @@ -24,6 +24,7 @@ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ +$string['clicktomarkusercomplete'] = 'Click to mark user complete'; $string['completion:view'] = 'View course completion report'; $string['completiondate'] = 'Completion date'; $string['id'] = 'ID';