Your Moodle version

Authentication: Autoenrol cohort

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

Build status moodle-auth_mcae.svg?branch=v3.1

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 Dan Marsden
Dan Marsden (Lead maintainer)
Picture of Andrew Kama
Andrew Kama: Previous maintainer
Please login to view contributors details and/or to contact them

Comments RSS

Show comments
  • 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?
  • Picture of David Mudrák
    Tue, Dec 1, 2015, 8:10 PM

    This plugin is now seeking new maintainer -

  • Picture of Troy Fennell
    Mon, Dec 21, 2015, 4:53 AM
    I'd like to use this mod to auto enrol a user into a specific cohort the moment the system recognizes they have been added to a specific group.

    I have my system set up to auto enroll a user into a specific group as soon as they enroll that group's parent course. It would be nice to be able to segregate them now into a specific cohort automatically.

    Can someone provide the steps for doing this? Please?
  • Picture of Leandro Campos
    Fri, Jan 22, 2016, 4:03 AM
    Hi. I am with difficults to configure this. I need this:
    All users with domain specific (example will add in cohort (HOTMAIL). How make this?
  • Picture of Blair F.
    Fri, Apr 15, 2016, 11:56 PM
    Leandro, did you ever figure it out? I have a similar situation, but I find it difficult to understand how to configure this plugin.
  • Picture of József Somogyi
    Wed, Jun 15, 2016, 10:37 PM
    Leandro, Blair "did you ever figure it out? I have a similar situation, but I find it difficult to understand how to configure this plugin."
  • Picture of Blair F.
    Sat, Jun 25, 2016, 4:40 AM
    No, József. I never got a response and am not spending any time on it until I do.
  • Picture of it.webdevsupport Master
    Tue, Sep 13, 2016, 6:33 PM
    Hello!! I am using plugin saml2 to authenticate in my web app. Actually, my app doesn't create automatic cohorts with this plugin. So I would like to know if it is possible and what I should do. Thanks.
1 2 3 4
Please login to post comments