• Enrolment注册插件


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

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

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

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

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

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

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

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

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

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

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

    enrol_flatfile插件(moodleenrolflatfile)允许自动注册和取消注册操作

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

    交互式注册插件要求用户在注册时进行互动( 如:enrolself(moodleenrolself)和enrolpaypal(moodleenrolpaypal) )。这些插件需要覆盖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。例如 moodleenrolmanuallib.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

  • 相关阅读:
    C# 注册表操作类
    NVelocity for AS“.NET研究”P.NET MVC 狼人:
    C#4.0新特性"协变"“.NET研究”与"逆变"以及背后的编程思想 狼人:
    原创“.NET研究”企业级控件库之图片浏览控件 狼人:
    “.NET研究”关于C# 中的Attribute 特性 狼人:
    如何让ASP.NET默认的资源编程“.NET研究”方式支持非.ResX资源存储 狼人:
    使用 “.NET研究”IIS Express 取代 ASP.NET Development Server 狼人:
    云计算从基础到应用架“.NET研究”构系列云计算的演进 狼人:
    通过自定义配置实现插“.NET研究”件式设计 狼人:
    ASP.NET MVC 3 概述“.NET研究” 狼人:
  • 原文地址:https://www.cnblogs.com/lichihua/p/8394987.html
Copyright © 2020-2023  润新知