original_string: public static function get_activity_allowed_groups($cmid, $userid = 0) {
          global $USER;
  
          // Warnings array, it can be empty at the end but is mandatory.
          $warnings = array();
  
          $params = array(
              'cmid' => $cmid,
              'userid' => $userid
          );
          $params = self::validate_parameters(self::get_activity_allowed_groups_parameters(), $params);
          $cmid = $params['cmid'];
          $userid = $params['userid'];
  
          $cm = get_coursemodule_from_id(null, $cmid, 0, false, MUST_EXIST);
  
          // Security checks.
          $context = context_module::instance($cm->id);
          $coursecontext = context_course::instance($cm->course);
          self::validate_context($context);
  
          if (empty($userid)) {
              $userid = $USER->id;
          }
  
          $user = core_user::get_user($userid, '*', MUST_EXIST);
          core_user::require_active_user($user);
  
           // Check if we have permissions for retrieve the information.
          if ($user->id != $USER->id) {
              if (!has_capability('moodle/course:managegroups', $context)) {
                  throw new moodle_exception('accessdenied', 'admin');
              }
  
              // Validate if the user is enrolled in the course.
              $course = get_course($cm->course);
              if (!can_access_course($course, $user, '', true)) {
                  // We return a warning because the function does not fail for not enrolled users.
                  $warning = array();
                  $warning['item'] = 'course';
                  $warning['itemid'] = $cm->course;
                  $warning['warningcode'] = '1';
                  $warning['message'] = "User $user->id cannot access course $cm->course";
                  $warnings[] = $warning;
              }
          }
  
          $usergroups = array();
          if (empty($warnings)) {
              $groups = groups_get_activity_allowed_groups($cm, $user->id);
  
              foreach ($groups as $group) {
                  list($group->description, $group->descriptionformat) =
                      external_format_text($group->description, $group->descriptionformat,
                              $coursecontext->id, 'group', 'description', $group->id);
                  $group->courseid = $cm->course;
                  $usergroups[] = $group;
              }
          }
  
          $results = array(
              'groups' => $usergroups,
              'canaccessallgroups' => has_capability('moodle/site:accessallgroups', $context, $user),
              'warnings' => $warnings
          );
          return $results;
      }
code: public static function get_activity_allowed_groups($cmid, $userid = 0) {
          global $USER;
  
          // Warnings array, it can be empty at the end but is mandatory.
          $warnings = array();
  
          $params = array(
              'cmid' => $cmid,
              'userid' => $userid
          );
          $params = self::validate_parameters(self::get_activity_allowed_groups_parameters(), $params);
          $cmid = $params['cmid'];
          $userid = $params['userid'];
  
          $cm = get_coursemodule_from_id(null, $cmid, 0, false, MUST_EXIST);
  
          // Security checks.
          $context = context_module::instance($cm->id);
          $coursecontext = context_course::instance($cm->course);
          self::validate_context($context);
  
          if (empty($userid)) {
              $userid = $USER->id;
          }
  
          $user = core_user::get_user($userid, '*', MUST_EXIST);
          core_user::require_active_user($user);
  
           // Check if we have permissions for retrieve the information.
          if ($user->id != $USER->id) {
              if (!has_capability('moodle/course:managegroups', $context)) {
                  throw new moodle_exception('accessdenied', 'admin');
              }
  
              // Validate if the user is enrolled in the course.
              $course = get_course($cm->course);
              if (!can_access_course($course, $user, '', true)) {
                  // We return a warning because the function does not fail for not enrolled users.
                  $warning = array();
                  $warning['item'] = 'course';
                  $warning['itemid'] = $cm->course;
                  $warning['warningcode'] = '1';
                  $warning['message'] = "User $user->id cannot access course $cm->course";
                  $warnings[] = $warning;
              }
          }
  
          $usergroups = array();
          if (empty($warnings)) {
              $groups = groups_get_activity_allowed_groups($cm, $user->id);
  
              foreach ($groups as $group) {
                  list($group->description, $group->descriptionformat) =
                      external_format_text($group->description, $group->descriptionformat,
                              $coursecontext->id, 'group', 'description', $group->id);
                  $group->courseid = $cm->course;
                  $usergroups[] = $group;
              }
          }
  
          $results = array(
              'groups' => $usergroups,
              'canaccessallgroups' => has_capability('moodle/site:accessallgroups', $context, $user),
              'warnings' => $warnings
          );
          return $results;
      }
code_tokens: public static function get_activity_allowed_groups ( $ cmid , $ userid = 0 ) { global $ USER ; // Warnings array, it can be empty at the end but is mandatory. $ warnings = array ( ) ; $ params = array ( 'cmid' => $ cmid , 'userid' => $ userid ) ; $ params = self :: validate_parameters ( self :: get_activity_allowed_groups_parameters ( ) , $ params ) ; $ cmid = $ params [ 'cmid' ] ; $ userid = $ params [ 'userid' ] ; $ cm = get_coursemodule_from_id ( null , $ cmid , 0 , false , MUST_EXIST ) ; // Security checks. $ context = context_module :: instance ( $ cm -> id ) ; $ coursecontext = context_course :: instance ( $ cm -> course ) ; self :: validate_context ( $ context ) ; if ( empty ( $ userid ) ) { $ userid = $ USER -> id ; } $ user = core_user :: get_user ( $ userid , '*' , MUST_EXIST ) ; core_user :: require_active_user ( $ user ) ; // Check if we have permissions for retrieve the information. if ( $ user -> id != $ USER -> id ) { if ( ! has_capability ( 'moodle/course:managegroups' , $ context ) ) { throw new moodle_exception ( 'accessdenied' , 'admin' ) ; } // Validate if the user is enrolled in the course. $ course = get_course ( $ cm -> course ) ; if ( ! can_access_course ( $ course , $ user , '' , true ) ) { // We return a warning because the function does not fail for not enrolled users. $ warning = array ( ) ; $ warning [ 'item' ] = 'course' ; $ warning [ 'itemid' ] = $ cm -> course ; $ warning [ 'warningcode' ] = '1' ; $ warning [ 'message' ] = "User $user->id cannot access course $cm->course" ; $ warnings [ ] = $ warning ; } } $ usergroups = array ( ) ; if ( empty ( $ warnings ) ) { $ groups = groups_get_activity_allowed_groups ( $ cm , $ user -> id ) ; foreach ( $ groups as $ group ) { list ( $ group -> description , $ group -> descriptionformat ) = external_format_text ( $ group -> description , $ group -> descriptionformat , $ coursecontext -> id , 'group' , 'description' , $ group -> id ) ; $ group -> courseid = $ cm -> course ; $ usergroups [ ] = $ group ; } } $ results = array ( 'groups' => $ usergroups , 'canaccessallgroups' => has_capability ( 'moodle/site:accessallgroups' , $ context , $ user ) , 'warnings' => $ warnings ) ; return $ results ; }
docstring: Gets a list of groups that the user is allowed to access within the specified activity.
  
  @throws moodle_exception
  @param int $cmid course module id
  @param int $userid id of user.
  @return array of group objects (id, name, description, format) and possible warnings.
  @since Moodle 3.0
docstring_tokens: Gets a list of groups that the user is allowed to access within the specified activity .