Best practice forum (Archived)
This forum discussion has been removed
Don't know about 2.2, or 2.4, but in 1.1 it was deliberate behaviour that users were enrolled into courses as they tried to access them.
Ie if user tries to enrol in course, see if they are given access to course by a program they are in, otherwise ask for password, ask if they want to enrol, or outright deny them, as per other config settings.
I suspect that this was done this way so that when a cohort of 30,000 ppl was added to a program of 30 courses, you didn't suddenly have to add 900,000 course enrolments.
I'm pretty sure that they didn't need to arrived directly from the program link in 1.1.
Hi Amir,
A lot depends on the order of the enrolment methods and which are switched on, Totara will attempt to enrol in order of top down, so it is possible to enrol in dependant courses directly if self enrolment is made avaiable and is ahead of Program enrolments. The way to avoid this is to have only Program enrolment enabled. In the case of the users not being enrolled and having no records - is the Guest access enrolment enabled?
regards,
George.
I think the Moodle enrolment plugin architecture is written this way for performance reasons. The thinking was probably: As long as a user has access under one enrolment plugin then that is enough, there's no need to check all plugins and add multiple records to user_enrolments. It is also for performance reasons that we do not automatically add program plugin enrolments when users are assigned to a program - we have customers assigning programs to Audiences containing tens of thousands of users which would kill any server.
It is really only an issue if the Guest plugin is enabled and comes before the Program (or indeed any other) plugin in the list - then they'll enter the course as a guest and so no completion data will be tracked.
I think a better way to do this may be to check all plugins *except* Guest first - in this way if they have access under any of the other plugins they will arrive in the course as an enrolled authenticated user and completion tracking will begin. Then if Guest plugin is enabled, and no other plugin works, check the Guest plugin as a last resort.
Well I don't think it actually matters which enrolment plugin they enter the course under, as long as it is not Guest - all the other enrolment plugins should trigger course completion which then (should!) be collated by the Program cron daily.
As far as I know there isn't any actual other benefit or consequence of entering the course under program enrolment vs, say, manual (apart from the "You have been enrolled via the Program" message, which also only appears if the Program plugin is the first one that allows access). I don't think that really matters if they also have access to the course under a different enrolment plugin anyway.
So as long as Guest is checked last, after all other plugins, this issue should be resolved.
Hi Amir,
I understand your perspective on this, however there are also other factors at play that may not apply for you but do impact on other clients using this feature.
If we were to just straight enrol users in all courses that a program makes accessible to them at the moment they are assigned to the program there would be a few consequences:
- Every course would appearing in the user's record of learning.
- If "Course completion begins on enrollment" is enabled (the default), a "not yet started" completion record would be created.
Now imagine a situation where the first courseset includes 10 courses, but the user is only expected to complete any one of the 10. If we auto-enrol them in all 10 (to give them access to them all) they will have a lot of unwanted courses appearing, with "not yet started" statuses messing up their reports.
This was a genuine problem and the reason why we need to enrol users when they go to access the course instead of immediately.
The choice to use an enrolment plugin to handle this in 2.2+ was (as you say) because of the introduction of enrolment plugins in 2.x, and makes sense because often organisations do want people to be able to enrol in courses even if they aren't assigned via a program. This approach gives the most flexibility on a course-by-course basis.
I don't believe you will have problems if just the "manual" or "self" enrollment method before program since a user's enrolment doesn't normally depend on the method, it just goes through each method from the top and enrols them as soon as the first plugin allows it. Access and completion should work the same independent of enrollment method.
From what I can tell, the problem you are having is that when the "guest" enrolment plugin is active and above the "program" enrolment plugin. That's because Guest access that is a bit of a special case - users are being given guest privileges instead of being fully enrolled and therefore completion is not working.
The fact that this happens has nothing to do with the program enrolment plugin, it's a moodle issue. You can see this yourself as follows:
- Create a course with "guest" as the first enrolment method, and "manual" enrolment as the second.
- Manually enrol a user.
- Visit the course as that user. They will be given guest access only.
Where they come from makes no difference, there is nothing special about the link from the program page to the course - it's just a normal link.
Simon
Hi Simon,
I think you have a good point. But for some of us we really prefer that when we "assign" learners at the program or certification level, it will also automatically enroll them at the course level, for compliances and auditing purposes.
I think it would be great to have a site level setting for the site admins to be able to choose which way they want the system to behave.
Also, I would suggest to add a "timedue" (and maybe a "timeassigned" field for the table mdl_course_completions table. My $0.02...