MDL-38559 Reorganise course completion settings form
authorDavid Mudrák <david@moodle.com>
Mon, 6 May 2013 19:58:17 +0000 (21:58 +0200)
committerDavid Mudrák <david@moodle.com>
Thu, 9 May 2013 21:14:57 +0000 (23:14 +0200)
This is a result of a pretty intensive effort to make the form less
sucky, given the completion strings mess around. It partially solves
MDL-39419 too as it clarifies the course completion link in the course
administration block.

I must admit and record here that I'm pretty desperate by the current
state of the core_completion and how strings from it are inconsistently
used at various places with different meanings. For example the 'Completion
tracking' may mean the mode of how activities are tracked within the
course as well as the overall feature of course and activities tracking.
While a same phrase can be used in English for both this meanings, not
all languages have such luck and translating it is a pain in the ass.

Finally, let me give the credit for wording and UI design suggestions to
Helen Foster and all others who helped with this. This has been one of
the most ugliest forms in Moodle and we believe we made it better
(although we know it's far from perfect).

completion/criteria/completion_criteria_date.php
completion/criteria/completion_criteria_duration.php
completion/criteria/completion_criteria_grade.php
completion/criteria/completion_criteria_unenrol.php
course/completion_form.php
lang/en/completion.php
lib/navigationlib.php

index baecc20..883fa5a 100644 (file)
@@ -59,7 +59,8 @@ class completion_criteria_date extends completion_criteria {
      */
     public function config_form_display(&$mform, $data = null) {
         $mform->addElement('checkbox', 'criteria_date', get_string('enable'));
-        $mform->addElement('date_selector', 'criteria_date_value', get_string('afterspecifieddate', 'completion'));
+        $mform->addElement('date_selector', 'criteria_date_value', get_string('completionondatevalue', 'core_completion'));
+        $mform->disabledIf('criteria_date_value', 'criteria_date');
 
         // If instance of criteria exists
         if ($this->id) {
index ead1a55..aa34c60 100644 (file)
@@ -61,12 +61,32 @@ class completion_criteria_duration extends completion_criteria {
 
         $mform->addElement('checkbox', 'criteria_duration', get_string('enable'));
 
-        $thresholdmenu=array();
-        for ($i=1; $i<=30; $i++) {
-            $seconds = $i * 86400;
-            $thresholdmenu[$seconds] = get_string('numdays', '', $i);
+        // Populate the duration length drop down.
+        $thresholdmenu = array(
+            // We have strings for 1 - 6 days in the core.
+            86400 => get_string('secondstotime86400', 'core'),
+            172800 => get_string('secondstotime172800', 'core'),
+            259200 => get_string('secondstotime259200', 'core'),
+            345600 => get_string('secondstotime345600', 'core'),
+            432000 => get_string('secondstotime432000', 'core'),
+            518400 => get_string('secondstotime518400', 'core'),
+            518400 => get_string('secondstotime518400', 'core'),
+        );
+        // Append strings for 7 - 30 days (step by 1 day).
+        for ($i = 7; $i <= 30; $i++) {
+            $seconds = $i * DAYSECS;
+            $thresholdmenu[$seconds] = get_string('numdays', 'core', $i);
         }
-        $mform->addElement('select', 'criteria_duration_days', get_string('daysafterenrolment', 'completion'), $thresholdmenu);
+        // Append strings for 40 - 180 days (step by 10 days).
+        for ($i = 40; $i <= 180; $i = $i + 10) {
+            $seconds = $i * DAYSECS;
+            $thresholdmenu[$seconds] = get_string('numdays', 'core', $i);
+        }
+        // Append string for 1 year.
+        $thresholdmenu[365 * DAYSECS] = get_string('numdays', 'core', 365);
+
+        $mform->addElement('select', 'criteria_duration_days', get_string('enrolmentdurationlength', 'core_completion'), $thresholdmenu);
+        $mform->disabledIf('criteria_duration_days', 'criteria_duration');
 
         if ($this->id) {
             $mform->setDefault('criteria_duration', 1);
index c7847c5..3836e0c 100644 (file)
@@ -63,9 +63,9 @@ class completion_criteria_grade extends completion_criteria {
     public function config_form_display(&$mform, $data = null) {
         $mform->addElement('checkbox', 'criteria_grade', get_string('enable'));
         $mform->addElement('text', 'criteria_grade_value', get_string('graderequired', 'completion'));
+        $mform->disabledIf('criteria_grade_value', 'criteria_grade');
         $mform->setType('criteria_grade_value', PARAM_RAW); // Uses unformat_float.
         $mform->setDefault('criteria_grade_value', format_float($data));
-        $mform->addElement('static', 'criteria_grade_value_note', '', get_string('criteriagradenote', 'completion'));
 
         if ($this->id) {
             $mform->setDefault('criteria_grade', 1);
index 62f3072..6eaab0e 100644 (file)
@@ -58,7 +58,7 @@ class completion_criteria_unenrol extends completion_criteria {
      * @param stdClass $data Form data
      */
     public function config_form_display(&$mform, $data = null) {
-        $mform->addElement('checkbox', 'criteria_unenrol', get_string('completiononunenrolment','completion'));
+        $mform->addElement('checkbox', 'criteria_unenrol', get_string('enable'));
 
         if ($this->id) {
             $mform->setDefault('criteria_unenrol', 1);
index 5eac778..ce4880a 100644 (file)
@@ -61,12 +61,68 @@ class course_completion_form extends moodleform {
         $aggregation_methods = $completion->get_aggregation_methods();
 
         // Overall criteria aggregation.
-        $mform->addElement('header', 'overallcriteria', get_string('overallcriteriaaggregation', 'completion'));
-        $mform->addElement('select', 'overall_aggregation', get_string('aggregationmethod', 'completion'), $aggregation_methods);
+        $mform->addElement('header', 'overallcriteria', get_string('general', 'core_form'));
+        // Map aggregation methods to context-sensitive human readable dropdown menu.
+        $overallaggregationmenu = array();
+        foreach ($aggregation_methods as $methodcode => $methodname) {
+            if ($methodcode === COMPLETION_AGGREGATION_ALL) {
+                $overallaggregationmenu[COMPLETION_AGGREGATION_ALL] = get_string('overallaggregation_all', 'core_completion');
+            } else if ($methodcode === COMPLETION_AGGREGATION_ANY) {
+                $overallaggregationmenu[COMPLETION_AGGREGATION_ANY] = get_string('overallaggregation_any', 'core_completion');
+            } else {
+                $overallaggregationmenu[$methodcode] = $methodname;
+            }
+        }
+        $mform->addElement('select', 'overall_aggregation', get_string('overallaggregation', 'core_completion'), $overallaggregationmenu);
         $mform->setDefault('overall_aggregation', $completion->get_aggregation_method());
 
+        // Activity completion criteria
+        $label = get_string('coursecompletioncondition', 'core_completion', get_string('activitiescompleted', 'core_completion'));
+        $mform->addElement('header', 'activitiescompleted', $label);
+        // Get the list of currently specified conditions and expand the section if some are found.
+        $current = $completion->get_criteria(COMPLETION_CRITERIA_TYPE_ACTIVITY);
+        if (!empty($current)) {
+            $mform->setExpanded('activitiescompleted');
+        }
+
+        $activities = $completion->get_activities();
+        if (!empty($activities)) {
+
+            foreach ($activities as $activity) {
+                $params_a = array('moduleinstance' => $activity->id);
+                $criteria = new completion_criteria_activity(array_merge($params, $params_a));
+                $criteria->config_form_display($mform, $activity);
+            }
+            $mform->addElement('static', 'criteria_role_note', '', get_string('activitiescompletednote', 'core_completion'));
+
+            if (count($activities) > 1) {
+                // Map aggregation methods to context-sensitive human readable dropdown menu.
+                $activityaggregationmenu = array();
+                foreach ($aggregation_methods as $methodcode => $methodname) {
+                    if ($methodcode === COMPLETION_AGGREGATION_ALL) {
+                        $activityaggregationmenu[COMPLETION_AGGREGATION_ALL] = get_string('activityaggregation_all', 'core_completion');
+                    } else if ($methodcode === COMPLETION_AGGREGATION_ANY) {
+                        $activityaggregationmenu[COMPLETION_AGGREGATION_ANY] = get_string('activityaggregation_any', 'core_completion');
+                    } else {
+                        $activityaggregationmenu[$methodcode] = $methodname;
+                    }
+                }
+                $mform->addElement('select', 'activity_aggregation', get_string('activityaggregation', 'core_completion'), $activityaggregationmenu);
+                $mform->setDefault('activity_aggregation', $completion->get_aggregation_method(COMPLETION_CRITERIA_TYPE_ACTIVITY));
+            }
+
+        } else {
+            $mform->addElement('static', 'noactivities', '', get_string('err_noactivities', 'completion'));
+        }
+
         // Course prerequisite completion criteria.
-        $mform->addElement('header', 'courseprerequisites', get_string('completiondependencies', 'completion'));
+        $label = get_string('coursecompletioncondition', 'core_completion', get_string('dependenciescompleted', 'core_completion'));
+        $mform->addElement('header', 'courseprerequisites', $label);
+        // Get the list of currently specified conditions and expand the section if some are found.
+        $current = $completion->get_criteria(COMPLETION_CRITERIA_TYPE_COURSE);
+        if (!empty($current)) {
+            $mform->setExpanded('courseprerequisites');
+        }
 
         // Get applicable courses (prerequisites).
         $courses = $DB->get_records_sql("
@@ -78,11 +134,6 @@ class course_completion_form extends moodleform {
                        AND c.id <> {$course->id}");
 
         if (!empty($courses)) {
-            if (count($courses) > 1) {
-                $mform->addElement('select', 'course_aggregation', get_string('aggregationmethod', 'completion'), $aggregation_methods);
-                $mform->setDefault('course_aggregation', $completion->get_aggregation_method(COMPLETION_CRITERIA_TYPE_COURSE));
-            }
-
             // Get category list.
             require_once($CFG->libdir. '/coursecatlib.php');
             $list = coursecat::make_categories_list();
@@ -110,66 +161,67 @@ class course_completion_form extends moodleform {
             // Explain list.
             $mform->addElement('static', 'criteria_courses_explaination', '', get_string('coursesavailableexplaination', 'completion'));
 
-        } else {
-            $mform->addElement('static', 'nocourses', '', get_string('err_nocourses', 'completion'));
-        }
-
-        // Manual self completion
-        $mform->addElement('header', 'manualselfcompletion', get_string('manualselfcompletion', 'completion'));
-        $criteria = new completion_criteria_self($params);
-        $criteria->config_form_display($mform);
-
-        // Role completion criteria
-        $mform->addElement('header', 'roles', get_string('manualcompletionby', 'completion'));
-
-        $roles = get_roles_with_capability('moodle/course:markcomplete', CAP_ALLOW, context_course::instance($course->id, IGNORE_MISSING));
-
-        if (!empty($roles)) {
-            $mform->addElement('select', 'role_aggregation', get_string('aggregationmethod', 'completion'), $aggregation_methods);
-            $mform->setDefault('role_aggregation', $completion->get_aggregation_method(COMPLETION_CRITERIA_TYPE_ROLE));
-
-            foreach ($roles as $role) {
-                $params_a = array('role' => $role->id);
-                $criteria = new completion_criteria_role(array_merge($params, $params_a));
-                $criteria->config_form_display($mform, $role);
-            }
-        } else {
-            $mform->addElement('static', 'noroles', '', get_string('err_noroles', 'completion'));
-        }
-
-        // Activity completion criteria
-        $mform->addElement('header', 'activitiescompleted', get_string('activitiescompleted', 'completion'));
-
-        $activities = $completion->get_activities();
-        if (!empty($activities)) {
-            if (count($activities) > 1) {
-                $mform->addElement('select', 'activity_aggregation', get_string('aggregationmethod', 'completion'), $aggregation_methods);
-                $mform->setDefault('activity_aggregation', $completion->get_aggregation_method(COMPLETION_CRITERIA_TYPE_ACTIVITY));
+            if (count($courses) > 1) {
+                // Map aggregation methods to context-sensitive human readable dropdown menu.
+                $courseaggregationmenu = array();
+                foreach ($aggregation_methods as $methodcode => $methodname) {
+                    if ($methodcode === COMPLETION_AGGREGATION_ALL) {
+                        $courseaggregationmenu[COMPLETION_AGGREGATION_ALL] = get_string('courseaggregation_all', 'core_completion');
+                    } else if ($methodcode === COMPLETION_AGGREGATION_ANY) {
+                        $courseaggregationmenu[COMPLETION_AGGREGATION_ANY] = get_string('courseaggregation_any', 'core_completion');
+                    } else {
+                        $courseaggregationmenu[$methodcode] = $methodname;
+                    }
+                }
+                $mform->addElement('select', 'course_aggregation', get_string('courseaggregation', 'core_completion'), $courseaggregationmenu);
+                $mform->setDefault('course_aggregation', $completion->get_aggregation_method(COMPLETION_CRITERIA_TYPE_COURSE));
             }
 
-            foreach ($activities as $activity) {
-                $params_a = array('moduleinstance' => $activity->id);
-                $criteria = new completion_criteria_activity(array_merge($params, $params_a));
-                $criteria->config_form_display($mform, $activity);
-            }
         } else {
-            $mform->addElement('static', 'noactivities', '', get_string('err_noactivities', 'completion'));
+            $mform->addElement('static', 'nocourses', '', get_string('err_nocourses', 'completion'));
         }
 
         // Completion on date
-        $mform->addElement('header', 'date', get_string('date'));
+        $label = get_string('coursecompletioncondition', 'core_completion', get_string('completionondate', 'core_completion'));
+        $mform->addElement('header', 'date', $label);
+        // Expand the condition section if it is currently enabled.
+        $current = $completion->get_criteria(COMPLETION_CRITERIA_TYPE_DATE);
+        if (!empty($current)) {
+            $mform->setExpanded('date');
+        }
         $criteria = new completion_criteria_date($params);
         $criteria->config_form_display($mform);
 
         // Completion after enrolment duration
-        $mform->addElement('header', 'duration', get_string('durationafterenrolment', 'completion'));
+        $label = get_string('coursecompletioncondition', 'core_completion', get_string('enrolmentduration', 'core_completion'));
+        $mform->addElement('header', 'duration', $label);
+        // Expand the condition section if it is currently enabled.
+        $current = $completion->get_criteria(COMPLETION_CRITERIA_TYPE_DURATION);
+        if (!empty($current)) {
+            $mform->setExpanded('duration');
+        }
         $criteria = new completion_criteria_duration($params);
         $criteria->config_form_display($mform);
 
-        // Completion on course grade
-        $mform->addElement('header', 'grade', get_string('coursegrade', 'completion'));
+        // Completion on unenrolment
+        $label = get_string('coursecompletioncondition', 'core_completion', get_string('unenrolment', 'core_completion'));
+        $mform->addElement('header', 'unenrolment', $label);
+        // Expand the condition section if it is currently enabled.
+        $current = $completion->get_criteria(COMPLETION_CRITERIA_TYPE_UNENROL);
+        if (!empty($current)) {
+            $mform->setExpanded('unenrolment');
+        }
+        $criteria = new completion_criteria_unenrol($params);
+        $criteria->config_form_display($mform);
 
-        // Grade enable and passing grade
+        // Completion on course grade
+        $label = get_string('coursecompletioncondition', 'core_completion', get_string('coursegrade', 'core_completion'));
+        $mform->addElement('header', 'grade', $label);
+        // Expand the condition section if it is currently enabled.
+        $current = $completion->get_criteria(COMPLETION_CRITERIA_TYPE_GRADE);
+        if (!empty($current)) {
+            $mform->setExpanded('grade');
+        }
         $course_grade = $DB->get_field('grade_items', 'gradepass', array('courseid' => $course->id, 'itemtype' => 'course'));
         if (!$course_grade) {
             $course_grade = '0.00000';
@@ -177,10 +229,52 @@ class course_completion_form extends moodleform {
         $criteria = new completion_criteria_grade($params);
         $criteria->config_form_display($mform, $course_grade);
 
-        // Completion on unenrolment
-        $mform->addElement('header', 'unenrolment', get_string('unenrolment', 'completion'));
-        $criteria = new completion_criteria_unenrol($params);
+        // Manual self completion
+        $label = get_string('coursecompletioncondition', 'core_completion', get_string('manualselfcompletion', 'core_completion'));
+        $mform->addElement('header', 'manualselfcompletion', $label);
+        // Expand the condition section if it is currently enabled.
+        $current = $completion->get_criteria(COMPLETION_CRITERIA_TYPE_SELF);
+        if (!empty($current)) {
+            $mform->setExpanded('manualselfcompletion');
+        }
+        $criteria = new completion_criteria_self($params);
         $criteria->config_form_display($mform);
+        $mform->addElement('static', 'criteria_self_note', '', get_string('manualselfcompletionnote', 'core_completion'));
+
+        // Role completion criteria
+        $label = get_string('coursecompletioncondition', 'core_completion', get_string('manualcompletionby', 'core_completion'));
+        $mform->addElement('header', 'roles', $label);
+        // Expand the condition section if it is currently enabled.
+        $current = $completion->get_criteria(COMPLETION_CRITERIA_TYPE_ROLE);
+        if (!empty($current)) {
+            $mform->setExpanded('roles');
+        }
+        $roles = get_roles_with_capability('moodle/course:markcomplete', CAP_ALLOW, context_course::instance($course->id, IGNORE_MISSING));
+
+        if (!empty($roles)) {
+            foreach ($roles as $role) {
+                $params_a = array('role' => $role->id);
+                $criteria = new completion_criteria_role(array_merge($params, $params_a));
+                $criteria->config_form_display($mform, $role);
+            }
+            $mform->addElement('static', 'criteria_role_note', '', get_string('manualcompletionbynote', 'core_completion'));
+            // Map aggregation methods to context-sensitive human readable dropdown menu.
+            $roleaggregationmenu = array();
+            foreach ($aggregation_methods as $methodcode => $methodname) {
+                if ($methodcode === COMPLETION_AGGREGATION_ALL) {
+                    $roleaggregationmenu[COMPLETION_AGGREGATION_ALL] = get_string('roleaggregation_all', 'core_completion');
+                } else if ($methodcode === COMPLETION_AGGREGATION_ANY) {
+                    $roleaggregationmenu[COMPLETION_AGGREGATION_ANY] = get_string('roleaggregation_any', 'core_completion');
+                } else {
+                    $roleaggregationmenu[$methodcode] = $methodname;
+                }
+            }
+            $mform->addElement('select', 'role_aggregation', get_string('roleaggregation', 'core_completion'), $roleaggregationmenu);
+            $mform->setDefault('role_aggregation', $completion->get_aggregation_method(COMPLETION_CRITERIA_TYPE_ROLE));
+
+        } else {
+            $mform->addElement('static', 'noroles', '', get_string('err_noroles', 'completion'));
+        }
 
         // Add common action buttons.
         $this->add_action_buttons();
index 03fe228..3cc14c0 100644 (file)
 
 $string['achievinggrade'] = 'Achieving grade';
 $string['activities'] = 'Activities';
-$string['activitiescompleted'] = 'Activities completed';
+$string['activityaggregation'] = 'Condition requires';
+$string['activityaggregation_all'] = 'ALL selected activities to be completed';
+$string['activityaggregation_any'] = 'ANY selected activities to be completed';
+$string['activitiescompleted'] = 'Activity completion';
+$string['activitiescompletednote'] = 'Note: Activity completion must be set for an activity to appear in the above list.';
 $string['activitycompletion'] = 'Activity completion';
-$string['afterspecifieddate'] = 'After specified date';
 $string['aggregationmethod'] = 'Aggregation method';
 $string['all'] = 'All';
 $string['any'] = 'Any';
@@ -62,7 +65,6 @@ A tick next to the activity name on the course page indicates when the activity
 $string['completion_link'] = 'activity/completion';
 $string['completion_manual'] = 'Students can manually mark the activity as completed';
 $string['completion_none'] = 'Do not indicate activity completion';
-$string['completiondependencies'] = 'Completion dependencies';
 $string['completiondisabled'] = 'Disabled, not shown in activity settings';
 $string['completionenabled'] = 'Enabled, control via completion and activity settings';
 $string['completionexpected'] = 'Expect completed on';
@@ -77,7 +79,9 @@ $string['completionmenuitem'] = 'Completion';
 $string['completionnotenabled'] = 'Completion is not enabled';
 $string['completionnotenabledforcourse'] = 'Completion is not enabled for this course';
 $string['completionnotenabledforsite'] = 'Completion is not enabled for this site';
-$string['completiononunenrolment'] = 'Completion on unenrolment';
+$string['completionondate'] = 'Date';
+$string['completionondatevalue'] = 'User must remain enrolled until';
+$string['completionduration'] = 'Enrolment';
 $string['completionsettingslocked'] = 'Completion settings locked';
 $string['completionusegrade'] = 'Require grade';
 $string['completionusegrade_desc'] = 'Student must receive a grade to complete this activity';
@@ -86,43 +90,48 @@ $string['completionview'] = 'Require view';
 $string['completionview_desc'] = 'Student must view this activity to complete it';
 $string['configenablecompletion'] = 'When enabled, this lets you turn on completion tracking (progress) features at course level.';
 $string['confirmselfcompletion'] = 'Confirm self completion';
+$string['courseaggregation'] = 'Condition requires';
+$string['courseaggregation_all'] = 'ALL selected courses to be completed';
+$string['courseaggregation_any'] = 'ANY selected courses to be completed';
 $string['coursealreadycompleted'] = 'You have already completed this course';
 $string['coursecomplete'] = 'Course complete';
 $string['coursecompleted'] = 'Course completed';
+$string['coursecompletion'] = 'Course completion';
+$string['coursecompletioncondition'] = 'Condition: {$a}';
 $string['coursegrade'] = 'Course grade';
 $string['coursesavailable'] = 'Courses available';
-$string['coursesavailableexplaination'] = '<i>Course completion criteria must be set for a course to appear in this list</i>';
+$string['coursesavailableexplaination'] = 'Note: Course completion conditions must be set for a course to appear in the above list.';
 $string['criteria'] = 'Criteria';
-$string['criteriagradenote'] = 'Please note that updating the required grade here will not update the current course pass grade.';
 $string['criteriagroup'] = 'Criteria group';
 $string['criteriarequiredall'] = 'All criteria below are required';
 $string['criteriarequiredany'] = 'Any criteria below are required';
 $string['csvdownload'] = 'Download in spreadsheet format (UTF-8 .csv)';
 $string['datepassed'] = 'Date passed';
 $string['days'] = 'Days';
-$string['daysafterenrolment'] = 'Days after enrolment';
 $string['deletecompletiondata'] = 'Delete completion data';
 $string['dependencies'] = 'Dependencies';
-$string['dependenciescompleted'] = 'Dependencies completed';
-$string['durationafterenrolment'] = 'Duration after enrolment';
+$string['dependenciescompleted'] = 'Completion of other courses';
 $string['editcoursecompletionsettings'] = 'Edit course completion settings';
 $string['enablecompletion'] = 'Enable completion tracking';
 $string['enablecompletion_help'] = 'Once enabled, the completion tracking settings are displayed in the completion tracking page, and in the activity settings.';
-$string['enrolmentduration'] = 'Days left';
+$string['enrolmentduration'] = 'Enrolment duration';
+$string['enrolmentdurationlength'] = 'User must remain enrolled for';
 $string['err_noactivities'] = 'Completion information is not enabled for any activity, so none can be displayed. You can enable completion information by editing the settings for an activity.';
 $string['err_nocourses'] = 'Course completion is not enabled for any other courses, so none can be displayed. You can enable course completion in the course settings.';
 $string['err_nograde'] = 'A course pass grade has not been set for this course. To enable this criteria type you must create a pass grade for this course.';
-$string['err_noroles'] = 'There are no roles with the capability \'moodle/course:markcomplete\' in this course. You can enable this criteria type by adding this capability to role(s).';
+$string['err_noroles'] = 'There are no roles with the capability moodle/course:markcomplete in this course.';
 $string['err_nousers'] = 'There are no students on this course or group for whom completion information is displayed. (By default, completion information is displayed only for students, so if there are no students, you will see this error. Administrators can alter this option via the admin screens.)';
 $string['err_settingslocked'] = 'One or more students have already completed a criteria so the settings have been locked. Unlocking the completion criteria settings will delete any existing user data and may cause confusion.';
 $string['err_system'] = 'An internal error occurred in the completion system. (System administrators can enable debugging information to see more detail.)';
 $string['excelcsvdownload'] = 'Download in Excel-compatible format (.csv)';
 $string['fraction'] = 'Fraction';
-$string['graderequired'] = 'Grade required';
+$string['graderequired'] = 'Required course grade';
 $string['gradexrequired'] = '{$a} required';
 $string['inprogress'] = 'In progress';
-$string['manualcompletionby'] = 'Manual completion by';
+$string['manualcompletionby'] = 'Manual completion by others';
+$string['manualcompletionbynote'] = 'Note: The capability moodle/course:markcomplete must be allowed for a role to appear in the list.';
 $string['manualselfcompletion'] = 'Manual self completion';
+$string['manualselfcompletionnote'] = 'Note: The self completion block should be added to the course if manual self completion is enabled.';
 $string['markcomplete'] = 'Mark complete';
 $string['markedcompleteby'] = 'Marked complete by {$a}';
 $string['markingyourselfcomplete'] = 'Marking yourself complete';
@@ -132,7 +141,9 @@ $string['notcompleted'] = 'Not completed';
 $string['notenroled'] = 'You are not enrolled in this course';
 $string['nottracked'] = 'You are currently not being tracked by completion in this course';
 $string['notyetstarted'] = 'Not yet started';
-$string['overallcriteriaaggregation'] = 'Overall criteria type aggregation';
+$string['overallaggregation'] = 'Completion requirements';
+$string['overallaggregation_all'] = 'Course is complete when ALL conditions are met';
+$string['overallaggregation_any'] = 'Course is complete when ANY of the conditions are met';
 $string['pending'] = 'Pending';
 $string['periodpostenrolment'] = 'Period post enrolment';
 $string['progress'] = 'Student progress';
@@ -144,12 +155,15 @@ $string['remainingenroleduntildate'] = 'Remaining enrolled until a specified dat
 $string['reportpage'] = 'Showing users {$a->from} to {$a->to} of {$a->total}.';
 $string['requiredcriteria'] = 'Required criteria';
 $string['restoringcompletiondata'] = 'Writing completion data';
+$string['roleaggregation'] = 'Condition requires';
+$string['roleaggregation_all'] = 'ALL selected roles to mark when the condition is met';
+$string['roleaggregation_any'] = 'ANY selected roles to mark when the condition is met';
 $string['saved'] = 'Saved';
 $string['seedetails'] = 'See details';
 $string['self'] = 'Self';
 $string['selfcompletion'] = 'Self completion';
 $string['showinguser'] = 'Showing user';
-$string['unenrolingfromcourse'] = 'Unenroling from course';
+$string['unenrolingfromcourse'] = 'Unenrolling from course';
 $string['unenrolment'] = 'Unenrolment';
 $string['unit'] = 'Unit';
 $string['unlockcompletion'] = 'Unlock completion options';
index fe4bceb..f1930dc 100644 (file)
@@ -3518,7 +3518,7 @@ class settings_navigation extends navigation_node {
             // Add the course completion settings link
             if ($CFG->enablecompletion && $course->enablecompletion) {
                 $url = new moodle_url('/course/completion.php', array('id'=>$course->id));
-                $coursenode->add(get_string('completion', 'completion'), $url, self::TYPE_SETTING, null, null, new pix_icon('i/settings', ''));
+                $coursenode->add(get_string('coursecompletion', 'completion'), $url, self::TYPE_SETTING, null, null, new pix_icon('i/settings', ''));
             }
         }