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.
547 sites
23 fans

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 Blair A
    Sun, 1 Feb 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, 18 Feb 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, 20 Apr 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, 4 May 2015, 5:06 AM
    Yes, please, please udate! I love this plugin, it made things so much easier for me!
  • I sell cookies
    Sun, 10 May 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, 29 May 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, 13 Aug 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, 1 Dec 2015, 8:10 PM

    This plugin is now seeking new maintainer -

  • Picture of Troy Fennell
    Mon, 21 Dec 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, 22 Jan 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, 15 Apr 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, 15 Jun 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, 25 Jun 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, 13 Sep 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.
  • Picture of Derek Lawrie
    Thu, 2 Feb 2017, 5:55 PM
    Is anyone still using this on any version 2 install?
    I use it quite happily, but was wondering if there is a way to remove suspended user accounts from the cohorts?
    As it's suspended the user will never login again so they won't be removed.
    If there is a way to "force" run the plugin via cli that would do the trick.
1 2 3 4
Please login to post comments