自moodle2.0注册插件必须继承 lib/enrollib.php的  enrol_plugin 抽象类;这个基类包含所有标准方法和开发人员文档

课程注册信息存储在enrol和user_enrolments表中,其他定制的可选数据库表由单个注册插件定义。每个插件都有自己的实例记录和用户注册,默认用户注册是受保护的,不能由教师手动修改

注册为用户提供以下特权:

活跃的注册(active enrolment也可称选课)的用户可以进入课程,其他用户需要需要临时访客访问权或moodle/course:view能力

“我的课程”展示了当前用户的活跃的入学率(active enrolments)列表。

课程参与-一些活动只限制参与注册的用户。行为是由每个活动独立定义的,例如,只有注册的用户具有提交能力才能提交作业,仅凭能力是不够的

只有注册用户才可能是组的成员

成绩单追踪所有注册用户的等级(成绩 grades ),分数的可见性由角色成员控制

注册和角色分配现在是分开的概念,你可以注册,没有任何角色,你可以在课程中扮演一个角色,而不需要注册。当然,上下文级别和下面的角色可以由注册插件控制

1 用户注册流程  注意:注册就是选课

手动注册插件是处理用户注册的最简单的方式。这个最简单的插件是enrolmanual(moodle\enrol\manual),有必要权限的用户可以手动注册或取消注册用户

enrol_flatfile插件(moodle\enrol\flatfile)允许自动注册和取消注册操作

全自动插件的配置在系统层面,它们将用户注册与存储在外部系统中的信息进行同步(如:enrol_ldap(moodle\enrol\ldap),enrol_database(moodle\enrol\database)和enrol_category)。一些非互动插件可能需要注册实例配置(如:enrol_cohort(moodle\enrol\cohort)和enrol_meta(moodle\enrol\meta))

交互式注册插件要求用户在注册时进行互动( 如:enrolself(moodle\enrol\self)和enrolpaypal(moodle\enrol\paypal) )。这些插件需要覆盖enrol_plugin::show_enrolme_link(),enrol_plugin::enrol_page_hook() 并实现注册实例的添加和编辑

2 注册过期(选课过期)和暂停

如符合下列所有条件,用户可参加

用户在user_enrolments表中有记录

用户选课已经开始

用户选课未过期

用户注册有活跃的状态

注册实例在enrol表中有活跃状态

启用注册插件

大多数同步插件包括设置外部unenrol(取消注册)行动。它是用来决定当先前注册的用户不应该再注册时会发生什么。同步通常是执行CLI / sync.php或标准(cron)计划部分

基于过期的时间是在Moodle 2.5中实现的。在 user_enrolments表中设置timeend的插件可能需要指定过期操作enrol_plugin::process_expirations()和可选的过期通知enrol_plugin::send_expiry_notifications()

3手动修改选课(注册)

标准的用户注册UI不能直接使用以下方法,因此开发人员需要通过enrol_plugin::get_user_enrolment_actions()描述所有可能的UI注册操作,在所有外部的方法中遵守这些限制是非常重要的

下面的方法描述了允许修改每个注册实例的

enrol_plugin::roles_protected():True意味着保护角色(非空组件+itemid)不能被任何其他插件修改。如果您希望允许用户删除该插件分配的所有角色,则返回false。因为Moodle 2.5,即使角色没有被保护,它也可以分配组件+itemid

enrol_plugin::allow_enrol():True意味着其他代码可以调用enrolplugin::enroluser(),false意味着只有插件可以注册用户。每个插件都负责实现自己的注册用户界面。参考enrol_plugin:get_manual_enrol_link();

enrol_plugin::allow_unenrol()和enrol_plugin::allow_unenrol_user():其他的代码是否允许从一个实例或一个特定的用户中取消所有的人?当然,当为tue时需要进行课程重置和手动取消选课

enrol_plugin:allow_manage():如果插件允许手动修改用户注册从其他代码,则返回true。通常从与外部系统同步数据的插件中返回False,否则手动更改将在同步时立即恢复

从Moodle 3.4开始,注册插件不需要覆盖enrol_plugin::get_user_enrolment_actions(), 除非你的注册插件除了编辑注册和取消用户注册行为的同时,还提供其他的注册行为;

为了支持您的插件的编辑注册,只需覆盖enrol_plugin::allow_manage() 返回true。为了支持取消注册,请确保覆盖了enrol_plugin::allow_unenrol_user() 或enrol_plugin::allow_unenrol() 返回true。例如 moodle\enrol\manual\lib.php:

class enrol_my_awesome_plugin extends enrol_plugin {
public function allow_manage(stdClass $instance) {
//只要让这个函数返回true,就会在参与者(participants)列表中显示编辑注册操作,如果用户有'enrol/pluginname:manage'功能
        return true;
}
public function allow_unenrol(stdClass $instance) {
// 只要让这个函数返回true,就会在参与者列表中显示取消注册的操作 如果用户有'enrol/pluginname:unenrol'的功能.
return true;
}
}

如果你的注册插件除了编辑注册和取消注册之外,还提供其他的注册行为,你可以覆盖enrol_plugin::get_user_enrolment_actions().例如:

public function get_user_enrolment_actions(course_enrolment_manager $manager, $ue) {
// 获得标准的用户注册操作
$actions = parent::get_user_enrolment_actions(); // 添加您的自定义用户注册操作...
$actions[] = ...;
...
return $actions;
}

4 基本的能力(capabilities)

enrol/xxx:enrol - 必需定义当 enrol_plugin::allow_enrol()返回true

enrol/xxx:unenrol - 必需定义当enrol_plugin::allow_unenrol()或者enrol_plugin::allow_unenrol_user()返回 true

enrol/xxx:manage - 必需定义当 enrol_plugin::allow_manage()返回true

enrol/xxx:unenrolself - 通常是在插件支持自主取消注册时实现.

enrol/xxx:config - 当插件允许用户修改实例属性时实现。自动同步插件通常不需要这种功能.

5 标准编辑UI

参见ui6

在Moodle 3.1中,对注册插件基类进行了更改,这样插件就不必定义自己的添加/编辑界面了。为了使用这个新的逻辑,注册插件类必须覆盖并返回true:

    /**
* 我们是一个很好的插件并且并没有构造自定义的UI/validation代码路径
*
* @return boolean
*/
public function use_standard_editing_ui() {
return true;
}

这意味着插件的下列功能将被调用来构建添加/编辑表单,执行数据验证,并将标准导航链接添加到管理注册页面和课程导航中

    /**
* 在编辑实例表单中添加元素.
*
* @param stdClass $instance
* @param MoodleQuickForm $mform
* @param context $context
* @return bool
*/
public function edit_instance_form($instance, MoodleQuickForm $mform, $context) {...}
 /**
* 执行用于编辑实例的数据的自定义验证.
*
* @param array $data ("fieldname"=>value) 数组格式的表单提交数据
* @param array $files array of uploaded files "element_name"=>tmp_file_path数组格式的上传文件
* @param object $instance 从DB中加载的实例
* @param context $context 我们正在编辑的实例的上下文
* @return 一切正常返回空数组如果出现错误返回"element_name"=>"error_description" 格式的数组
* @return void
*/
public function edit_instance_validation($data, $files, $instance, $context) {}
   /**
* 如果我们可以在本课程中添加一个新实例,返回true.
*
* @param int $courseid
* @return boolean
*/
public function can_add_instance($courseid) { }

将来,只有使用这个标准ui代码路径的插件才能提供一个有用的API,例如工具上传课程,通过对提交的数据进行完整的验证来添加/编辑注册实例

moodle自带几种注册插件的开启方法和使用方法参考这个地址:  https://docs.moodle.org/34/en/Enrolments

常见的问题请参考:https://docs.moodle.org/34/en/Enrolment_FAQ

论坛:https://moodle.org/mod/forum/view.php?id=2981

Enrolment注册插件的更多相关文章

  1. 在标准实体特殊消息上注册插件及Dynamics CRM 2015中计算字段的使用

    关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复157或者20151005可方便获取本文,同时可以在第一时间得到我发布的最新的博文信息,follow me! 前面的 插件系列博客教程 讲述了 ...

  2. Dynamics CRM 注册插件dll到GAC

    以server2012为例,搜索cmd,打开红框中的命令框,gacutil.exe -i "dll路径" 通过该命令把需要用到dll注册进gac(这里包括你的插件dll和你插件中引 ...

  3. WordPress插件:自定义登录注册插件:DX Login Register

    众所周知,wordpress自带的注册系统比较简单,需要接收邮件密码才能完成.不过对于国内的站长来说,会碰到不少麻烦.首先个人站长一般都使用虚拟主机,有不少还是使用国外的,你的服务器不一定会提供邮件发 ...

  4. Dynamics 365中开发和注册插件介绍

    我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...

  5. sublimeTest3的安装注册插件

    [感谢:https://blog.csdn.net/wxl1555/article/details/69941451 ]1)下载:http://www.sublimetext.com/32)安装:(我 ...

  6. k3 cloud注册插件的时候提示,请选择一个有效的插件程序集

    插件类的访问类型需要是public类型的,由于你的插件类没有标记为public类型,所以注册的时候并没有发现有插件,就是下面的单据体没有加载出数据.标记public之后,下面会有你的插件,然后选择对应 ...

  7. smarty插件开发代替注册插件方法registerPlugin

  8. Dynamic CRM 2013学习笔记(四)单据编号及插件批量注册工具

    基本上每个实体form上都会有单据编号,而且不同的实体编号要求还不太一样,这时就需要一个通用的单据编号插件,可配置以应对不同的需求. 下面简单介绍下实现步骤: 1. 创建二个实体,以保存各实体所要求的 ...

  9. 如何利用WordPress创建自定义注册表单插件

    来源:http://www.ido321.com/1031.html 原文:Creating a Custom WordPress Registration Form Plugin 译文:创建一个定制 ...

随机推荐

  1. Android 常用正则表达式

    前言 闲扯一下,已经有好久没更新博客了,记得上一篇博客的更新时间为 2017-05-12 15:20.截止到今天,超过一百天没更新了. 这篇博客的内容大多数是从别的博客摘抄过来的,写这篇博客的目的主要 ...

  2. 设置 Confluence 6 外部索引站点

    Confluence 并不能比较容易的对外部站点进行搜索,这个是因为 Confluence 使用的是 Lucene 内部查找,但是你还是有下面 2 个可选的方案: 嵌入外部页面到 Confluence ...

  3. Flex布局新旧混合写法详解

    flex是个非常好用的属性,如果说有什么可以完全代替 float 和 position ,那么肯定是非它莫属了(虽然现在还有很多不支持 flex 的浏览器).然而国内很多浏览器对 Flex 的支持都不 ...

  4. LeetCode(66): 加一

    Easy! 题目描述: 给定一个非负整数组成的非空数组,在该数的基础上加一,返回一个新的数组. 最高位数字存放在数组的首位, 数组中每个元素只存储一个数字. 你可以假设除了整数 0 之外,这个整数不会 ...

  5. java Web工程师面试题集绵

    一.Java 基础 1.JDK .JRE 和JVM关系是什么? 答:A. JDK(Java Development Kit)即Java开发工具包,包含编写Java程序所必须的编译.运行等开发工具以及J ...

  6. Gson将字符串转map时,int默认为double类型

      gson能够将json字符串转换成map, 但是在转成map时, 会默认将字符串中的int , long型的数字, 转换成double类型 , 数字会多一个小数点 , 如 1 会转成 1.0 Gs ...

  7. openstack 网络更改版

    Openstack环境部署 (参考文献:http://www.cnblogs.com/kevingrace/p/5707003.html 和 https://docs.openstack.org/mi ...

  8. tensorflow:验证码的识别(上)

    验证码的识别 主要分成四个部分:验证码的生成.将生成的图片制作成tfrecord文件.训练识别模型.测试模型 使用pyCharm作为编译器.本文先介绍前两个部分 验证码的识别有两种方法: 验证码识别方 ...

  9. 史上最简单的 SpringCloud 教程 | 第一篇: 服务的注册与发现(Eureka)

    一.spring cloud简介 spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.事件总线.全局锁.决策竞选.分布式会话等等.它运 ...

  10. Python中的日志处理

    在日常项目中,总是需要记录下一些细小信息或者错误码.错误信息的,这个时候就需要进行日志的操作.python中用于日志创建.设置和记录等功能的模块,就是logging了,下面是对其基本使用方法的介绍: ...