original_string: public static function role_assigned(\core\event\role_assigned $event) {
          global $DB;
  
          if (!enrol_is_enabled('category')) {
              return;
          }
  
          $ra = new stdClass();
          $ra->roleid = $event->objectid;
          $ra->userid = $event->relateduserid;
          $ra->contextid = $event->contextid;
  
          //only category level roles are interesting
          $parentcontext = context::instance_by_id($ra->contextid);
          if ($parentcontext->contextlevel != CONTEXT_COURSECAT) {
              return;
          }
  
          // Make sure the role is to be actually synchronised,
          // please note we are ignoring overrides of the synchronised capability (for performance reasons in full sync).
          $syscontext = context_system::instance();
          if (!$DB->record_exists('role_capabilities', array('contextid'=>$syscontext->id, 'roleid'=>$ra->roleid, 'capability'=>'enrol/category:synchronised', 'permission'=>CAP_ALLOW))) {
              return;
          }
  
          // Add necessary enrol instances.
          $plugin = enrol_get_plugin('category');
          $sql = "SELECT c.*
                    FROM {course} c
                    JOIN {context} ctx ON (ctx.instanceid = c.id AND ctx.contextlevel = :courselevel AND ctx.path LIKE :match)
               LEFT JOIN {enrol} e ON (e.courseid = c.id AND e.enrol = 'category')
                   WHERE e.id IS NULL";
          $params = array('courselevel'=>CONTEXT_COURSE, 'match'=>$parentcontext->path.'/%');
          $rs = $DB->get_recordset_sql($sql, $params);
          foreach ($rs as $course) {
              $plugin->add_instance($course);
          }
          $rs->close();
  
          // Now look for missing enrolments.
          $sql = "SELECT e.*
                    FROM {course} c
                    JOIN {context} ctx ON (ctx.instanceid = c.id AND ctx.contextlevel = :courselevel AND ctx.path LIKE :match)
                    JOIN {enrol} e ON (e.courseid = c.id AND e.enrol = 'category')
               LEFT JOIN {user_enrolments} ue ON (ue.enrolid = e.id AND ue.userid = :userid)
                   WHERE ue.id IS NULL";
          $params = array('courselevel'=>CONTEXT_COURSE, 'match'=>$parentcontext->path.'/%', 'userid'=>$ra->userid);
          $rs = $DB->get_recordset_sql($sql, $params);
          foreach ($rs as $instance) {
              $plugin->enrol_user($instance, $ra->userid, null, time());
          }
          $rs->close();
      }
code: public static function role_assigned(\core\event\role_assigned $event) {
          global $DB;
  
          if (!enrol_is_enabled('category')) {
              return;
          }
  
          $ra = new stdClass();
          $ra->roleid = $event->objectid;
          $ra->userid = $event->relateduserid;
          $ra->contextid = $event->contextid;
  
          //only category level roles are interesting
          $parentcontext = context::instance_by_id($ra->contextid);
          if ($parentcontext->contextlevel != CONTEXT_COURSECAT) {
              return;
          }
  
          // Make sure the role is to be actually synchronised,
          // please note we are ignoring overrides of the synchronised capability (for performance reasons in full sync).
          $syscontext = context_system::instance();
          if (!$DB->record_exists('role_capabilities', array('contextid'=>$syscontext->id, 'roleid'=>$ra->roleid, 'capability'=>'enrol/category:synchronised', 'permission'=>CAP_ALLOW))) {
              return;
          }
  
          // Add necessary enrol instances.
          $plugin = enrol_get_plugin('category');
          $sql = "SELECT c.*
                    FROM {course} c
                    JOIN {context} ctx ON (ctx.instanceid = c.id AND ctx.contextlevel = :courselevel AND ctx.path LIKE :match)
               LEFT JOIN {enrol} e ON (e.courseid = c.id AND e.enrol = 'category')
                   WHERE e.id IS NULL";
          $params = array('courselevel'=>CONTEXT_COURSE, 'match'=>$parentcontext->path.'/%');
          $rs = $DB->get_recordset_sql($sql, $params);
          foreach ($rs as $course) {
              $plugin->add_instance($course);
          }
          $rs->close();
  
          // Now look for missing enrolments.
          $sql = "SELECT e.*
                    FROM {course} c
                    JOIN {context} ctx ON (ctx.instanceid = c.id AND ctx.contextlevel = :courselevel AND ctx.path LIKE :match)
                    JOIN {enrol} e ON (e.courseid = c.id AND e.enrol = 'category')
               LEFT JOIN {user_enrolments} ue ON (ue.enrolid = e.id AND ue.userid = :userid)
                   WHERE ue.id IS NULL";
          $params = array('courselevel'=>CONTEXT_COURSE, 'match'=>$parentcontext->path.'/%', 'userid'=>$ra->userid);
          $rs = $DB->get_recordset_sql($sql, $params);
          foreach ($rs as $instance) {
              $plugin->enrol_user($instance, $ra->userid, null, time());
          }
          $rs->close();
      }
code_tokens: public static function role_assigned ( \ core \ event \ role_assigned $ event ) { global $ DB ; if ( ! enrol_is_enabled ( 'category' ) ) { return ; } $ ra = new stdClass ( ) ; $ ra -> roleid = $ event -> objectid ; $ ra -> userid = $ event -> relateduserid ; $ ra -> contextid = $ event -> contextid ; //only category level roles are interesting $ parentcontext = context :: instance_by_id ( $ ra -> contextid ) ; if ( $ parentcontext -> contextlevel != CONTEXT_COURSECAT ) { return ; } // Make sure the role is to be actually synchronised, // please note we are ignoring overrides of the synchronised capability (for performance reasons in full sync). $ syscontext = context_system :: instance ( ) ; if ( ! $ DB -> record_exists ( 'role_capabilities' , array ( 'contextid' => $ syscontext -> id , 'roleid' => $ ra -> roleid , 'capability' => 'enrol/category:synchronised' , 'permission' => CAP_ALLOW ) ) ) { return ; } // Add necessary enrol instances. $ plugin = enrol_get_plugin ( 'category' ) ; $ sql = "SELECT c.*
                    FROM {course} c
                    JOIN {context} ctx ON (ctx.instanceid = c.id AND ctx.contextlevel = :courselevel AND ctx.path LIKE :match)
               LEFT JOIN {enrol} e ON (e.courseid = c.id AND e.enrol = 'category')
                   WHERE e.id IS NULL" ; $ params = array ( 'courselevel' => CONTEXT_COURSE , 'match' => $ parentcontext -> path . '/%' ) ; $ rs = $ DB -> get_recordset_sql ( $ sql , $ params ) ; foreach ( $ rs as $ course ) { $ plugin -> add_instance ( $ course ) ; } $ rs -> close ( ) ; // Now look for missing enrolments. $ sql = "SELECT e.*
                    FROM {course} c
                    JOIN {context} ctx ON (ctx.instanceid = c.id AND ctx.contextlevel = :courselevel AND ctx.path LIKE :match)
                    JOIN {enrol} e ON (e.courseid = c.id AND e.enrol = 'category')
               LEFT JOIN {user_enrolments} ue ON (ue.enrolid = e.id AND ue.userid = :userid)
                   WHERE ue.id IS NULL" ; $ params = array ( 'courselevel' => CONTEXT_COURSE , 'match' => $ parentcontext -> path . '/%' , 'userid' => $ ra -> userid ) ; $ rs = $ DB -> get_recordset_sql ( $ sql , $ params ) ; foreach ( $ rs as $ instance ) { $ plugin -> enrol_user ( $ instance , $ ra -> userid , null , time ( ) ) ; } $ rs -> close ( ) ; }
docstring: Triggered when user is assigned a new role.
  
  @param \core\event\role_assigned $event
docstring_tokens: Triggered when user is assigned a new role .