Moodle用户选择器

时间:2019-06-27 19:23:25

标签: php moodle

我说的是带有两列和中间一些箭头的用户选择器。

我试图复制/admin/roles/admins.php中的内容,但没有成功。

我在admin / roles的lib.php中发现了一些有趣的功能,如下所示:

function core_role_get_potential_user_selector(context $context, $name, $options) {
$blockinsidecourse = false;
if ($context->contextlevel == CONTEXT_BLOCK) {
    $parentcontext = $context->get_parent_context();
    $blockinsidecourse = in_array($parentcontext->contextlevel, array(CONTEXT_MODULE, CONTEXT_COURSE));
}

if (($context->contextlevel == CONTEXT_MODULE || $blockinsidecourse) &&
        !is_inside_frontpage($context)) {
    $potentialuserselector = new core_role_potential_assignees_below_course('addselect', $options);
} else {
    $potentialuserselector = new core_role_potential_assignees_course_and_above('addselect', $options);
}

return $potentialuserselector;

}

我正在开发一个本地插件,我希望在给定的课程ID上批量使不同用户的证书过期。

我还能对证书更新进行原始SQL UPDATE查询吗?

我希望能得到一些提示,谢谢!

1 个答案:

答案 0 :(得分:0)

复制admin/roles/admins.php的用户选择器的关键是创建两个扩展user_selector_base的类(每个“用户列表列”一个)(在admins.php中,您将找到示例{{1 }}和core_role_admins_existing_selector

基本上,您需要扩展基类core_role_admins_potential_selector并根据需要实现user_selector_base方法(取决于要在左右两列中显示的用户类型)。

该方法的职责是构建一个SQL查询,该查询将在给定find_users查询的情况下从user表中选择用户(因为选择器具有关联的搜索输入),但除此之外,其余您在WHERE条件下的处理方式取决于您希望在列表中显示的内容(在admins.php示例中,您会发现它们尝试显示按站点管理员ID过滤的站点管理员)。

可以在实例化之后和通常的$search之后通过调用$OUTPUT->header()打印此用户选择器类。

请注意,$selector->display();的其余逻辑是独立于用户选择器而受到“控制”的,这意味着用户选择器本身不负责将用户从一列转移到另一列的逻辑,他们只是打印用户,并允许您恢复有关已选择用户的信息。

如果您注意admins.php,您可能会注意到原始开发人员添加了一些输入提交(和确认步骤)+可选的参数获取功能,最终将负责添加/删除管理员列表的用户。

  

我正在开发一个本地插件,我希望在给定的课程ID上批量使不同用户的证书过期。

在这种情况下,您可能必须使用WHERE / JOIN为一个列/用户选择器类构建查询,该查询针对证书未过期的用户,而另一列/用户选择器类针对已过期证书的用户(给定课程) ID。您可能必须将此课程ID作为参数从其他地方传递到您的页面(然后再传递给用户选择器类),否则,您也必须在此页面中添加课程选择器。

  

我还能对证书更新进行原始SQL UPDATE查询吗?

是的,您将必须编写逻辑以更新证书的过期状态,但是根据所使用的证书插件,可能存在一些帮助程序/ API(您可能希望在编写自己的查询之前对其进行检查)。