Your Moodle version

Authentication: Autoenrol cohort

Maintained by Picture of Andrew Kama Andrew Kama
This Authentication plugin automatically enrol users into cohorts. Cohort name depends on user profile field.

Release notes

Autoenrol cohort authentication plugin for moodle 2.x

This authentication plugin automatically enrol users into cohorts.

Cohort name depends on user profile field.

Cohorts are created in CONTEXT_SYSTEM.


  • Download the archive and extract the files, or clone the repository from GitHub
  • Copy the 'mcae' folder into your_moodle/auth
  • Visit Site administration - Notifications page and follow the instructions

If you use an Email based self registration or similar plugin and users enrolls into cohort after second login copy/paste this code into moodle/themes/your_theme/layout/general.php (or default.php)

> NOTE: Enable and configure mcae plugin first!


global $SESSION, $USER;

if ($USER->id != 0) { // Only for autenticated users
    $mcae = get_auth_plugin('mcae'); //Get mcae plugin

    if (isset($SESSION->mcautoenrolled)) {
        if (!$SESSION->mcautoenrolled) {
            $mcae->user_authenticated_hook($USER,$USER->username,""); //Autoenrol if mcautoenrolled FALSE
    } else {
        $mcae->user_authenticated_hook($USER,$USER->username,""); //Autoenrol if mcautoenrolled NOT SET



  • Replace the your_moodle/auth/mcae folder with new one
  • Visit Site administration - Notifications page and follow the instructions
  • !!! If you update to version 2.9 you must rewrite templates! See configuration section.


Template for cohort name

1 template per line.

In the template you may use any characters (except '{' and '}') and profile field values. To insert a profile field value, use {{ field_name }} tag.

An email field have 3 variants:

  • {{ email.full }} - full email
  • {{ email.username }} - only username
  • {{ email.domain }} - only domain
  • {{ email.rootdomain }} - root domain

By default moodle provides this fields

{{ id }}, {{ auth }}, {{ confirmed }}, {{ policyagreed }}, {{ deleted }}, {{ suspended }}, {{ mnethostid }}, {{ username }}, {{ idnumber }}, {{ firstname }}, {{ lastname }}, {{ email.full }}, {{ email.username }}, {{ email.domain }}, {{ email.rootdomain }}, {{ emailstop }}, {{ icq }}, {{ skype }}, {{ yahoo }}, {{ aim }}, {{ msn }}, {{ phone1 }}, {{ phone2 }}, {{ institution }}, {{ department }}, {{ address }}, {{ city }}, {{ country }}, {{ lang }}, {{ calendartype }}, {{ theme }}, {{ timezone }}, {{ firstaccess }}, {{ lastaccess }}, {{ lastlogin }}, {{ currentlogin }}, {{ lastip }}, {{ secret }}, {{ picture }}, {{ url }}, {{ descriptionformat }}, {{ mailformat }}, {{ maildigest }}, {{ maildisplay }}, {{ autosubscribe }}, {{ trackforums }}, {{ timecreated }}, {{ timemodified }}, {{ trustbitmask }}, {{ imagealt }}, {{ lastnamephonetic }}, {{ firstnamephonetic }}, {{ middlename }}, {{ alternatename }}, {{ lastcourseaccess }}, {{ currentcourseaccess }}, {{ groupmember }}

Additional tags become available if you have some custom profile fields. For example if you create custom profile fields

  • checkboxtest - type Checkbox
  • datetimetest - type Date/Time
  • droptest - type Dropdown menu
  • textinputtext - type Text input
  • and textareatest - type Text area

You be able to use this tags: {{ profile.checkboxtest }}, {{ profile.datetimetest }}, {{ profile.droptest }}, {{ profile.textinputtext }}, {{ profile_field_checkboxtest }}, {{ profile_field_datetimetest }}, {{ profile_field_droptest }}, {{ profile_field_textareatest.text }}, {{ profile_field_textareatest.format }}, {{ profile_field_textinputtext }}

> Note: Profile field templates is case sensitive. {{ username }} and {{ UserName }} are two different fields!

Split arguments: Synopsis: %split(fieldname|delimiter)

Returns multiple cohorts, each of which is formed by splitting field on boundaries formed by the delimiter.


  • fieldname - Profile field name. The same as tag, but without '{{' and '}}'
  • delimiter - The boundary string. 1 - 5 signs.


User John set custom profile field "Known languages" to "English, Spanish, Chinese"

Main template contains string "Language - %split(knownlanguage|, )"

John will be enrolled in 3 cohorts: Language - English, Language - Spanish and Language - Chinese

Replace empty field

If profile field is empty then it's replaced with this value.

Replacement array

You can change the cohort name after it's generation.

1 replacement per line, format - old value|new value

very long cohort name|shortname

Note: The name must not be longer than 100 characters or it will be stripped


Unenrol users from cohorts after profile change.

To use an unenrol feature:

  • Go to Plugins - Authentication - Autoenrol cohort and enable unenrol function
  • Go to yourmoodle/auth/mcae/convert.php and convert cohorts you want to "auth_mcae".

Convert only cohorts that are created by the "auth_mcae" module!

At yourmoodle/auth/mcae/convert.php page you may view, delete or convert cohorts into "manual" or "auth_mcae" mode.

Ignore users

List of users to ignore. Comma separated usernames.


Usage example

You have a custom profile fields "status" (student, teacher or admin) and "course".

You wnat to enrol many users into cohorts like "course - status" than enrol cohorts into courses.

At configuration page set:

Main template to {{ profile_field_course }} - {{ profile_field_status }}

Empty field text to none


  • When 1st course student logins, he enrol to cohort named "1 - student"
  • When 1st course teacher logins, he enrol to cohort named "1 - teacher"
  • When admin logins, he enrol to cohort named "none - admin" (Course not set, status - admin)

To rename "none - admin" cohort to "Administration" you must set a replacement array field at the configuration page In our case: none - admin|Administrator


When admin logins, he enrol to cohort named "Administrator"


Screenshot #0
Screenshot #1
Screenshot #2


Picture of Andrew Kama
Andrew Kama (Lead maintainer)
Please login to view contributors details and/or to contact them

Comments RSS

Show comments
  • Floyd Saner - Tail of the Dragon, U.S. 129, NC
    Thu, Jul 17, 2014, 9:52 AM
    Also looking for a Moodle 2.7 version
  • Picture of Daniel Dubbeldam
    Mon, Aug 4, 2014, 5:09 PM
    okay. So I have this plugin working on Moodle 2.7.
    however, for now, i'm stuk with the following:

    I want to give people the option, to use checkboxes as customprofilefield.
    1 have to options: option1 and option2.

    my main template lines are

    even when just 1 checkbox is checked, student comes into 2 cohorts....
    what do I miss here? since checkboxes returns 0's and 1's... where should I add the "1" ?
  • Picture of Andrew C
    Thu, Aug 7, 2014, 9:26 PM
    Hi Andrew, in the php log of Moodle 2.6, I get the following PHP Warning: Creating default object from empty value in www\auth\mcae\auth.php on line 314. Although the warning presents no problem that I can see, would the following being added before 314 work to remove the warning?
    if (!isset($SESSION))
    $SESSION= new stdClass();
    Thanks, Andrew
  • Picture of Andrew Kama
    Sun, Aug 10, 2014, 10:13 PM
    Hi, Andrew. To remove the warning update plugin from github.
  • Picture of Francis Vendrell
    Wed, Aug 20, 2014, 2:50 PM
    Is this plugin compatible with Moodle 2.6 ?
  • Picture of Nathan Bruley
    Tue, Sep 9, 2014, 3:33 AM
    @Francis Seems to work in 2.6

    Does anyone know if it's possible to manually add people to a cohort created with this plugin? I'd like to add previous users that joined before adding the plugin who may not sign in.
  • Picture of Kyla Lacey-Davidson
    Wed, Nov 12, 2014, 7:52 PM
    We use this on our site to enrol staff and volunteers into different cohorts. We also enrol all of our staff and volunteers into cohorts based on which Directorate they work in. It would be great if you were able to enrol people into cohorts based on more than one condition. For example, 'Volunteer' in our Licence field AND Fundraising in our Directorate field. Is there any scope to develop this?
  • Picture of Annalise Duca
    Sat, Nov 15, 2014, 12:37 AM
    Not sure if I am using this plugin correctly. But what I would like to do is very simple. I would like to add those people who choose EN in a Cohort named English, those who choose Italian in a cohort named italian. I did many different versions but don't seem to be working correctly - the user is still going to both cohorts. What is wrong.


    New Registered EN %split(%language|,0 )
    New Registered IT %split(%language|,1 )

    What is wrong?
  • Picture of Blair A
    Sun, Feb 1, 2015, 10:01 PM
    If you add the hook for email registration to your theme in 2.6+, the loginas functionality will break. I added the following to the hook function in auth.php to ignore admins logged in as students.

    if (\core\session\manager::is_loggedinas()) {
    $SESSION->mcautoenrolled = TRUE;
    return true;
  • Picture of Deepak G
    Wed, Feb 18, 2015, 1:21 PM
    Hi there,

    Can you send a welcome message once a user is enrolled in a cohort and that cohort is enrolled in a course?
  • Picture of Chris Simpson
    Mon, Apr 20, 2015, 1:45 PM
    It worked great up to 2.7 but now wont function with 2.8. Is there any chance of an update??
  • Picture of Paul Perger
    Mon, May 4, 2015, 5:06 AM
    Yes, please, please udate! I love this plugin, it made things so much easier for me!
  • I sell cookies
    Sun, May 10, 2015, 2:04 AM
    I'd also love to see a 2.8 version - or even better, a 2.9 version. Can anyone share their updates if you've done this?
  • Picture of Dave Feasey
    Fri, May 29, 2015, 2:22 AM
    I would like (as with Kevin Treussier) to be able to use an enumerated list in a single field to separate users into multiple cohorts. For example user with a user field "isATP;isPartner" should go into two cohorts isATP and isPartner. I can't figure out how to define the separator and make this work.

    Using version 1.2 of the plugin (2014121815 1.2) with Moodle 2.8.3+ (Build: 20150219) Version 2014111003.03

  • Floyd Saner - Tail of the Dragon, U.S. 129, NC
    Thu, Aug 13, 2015, 5:05 AM
    I installed the latest GitHub pull on Moodle 2.8. The plugin works OK for standard accounts. I tried to use the plugin with email-based registration, but as documented in the readme file, extra code needs to be added. The problem is that the new Moodle Themes do not have a /layout/general.php or /layout/default.php file. Where should I insert the code? When will this plugin be updated for Moodle 2.8?
1 2 3 4
Please login to post comments