我说的是带有两列和中间一些箭头的用户选择器。
我试图复制/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查询吗?
我希望能得到一些提示,谢谢!
答案 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(您可能希望在编写自己的查询之前对其进行检查)。