gpt4 book ai didi

mysql - 如何编辑moodle sql来定时访问

转载 作者:行者123 更新时间:2023-11-29 13:12:04 24 4
gpt4 key购买 nike

我正在尝试更改 2.6 版本中的 Moodle。我想做这样的事情:当用户登录时,他有权观看所有 Material ,但仅当他的帐户处于事件状态时。我想编辑 sql 数据库以添加 1 个字段“is_active”并在那里设置日期时间戳。例如,我有用户 John Doe,我将 2014 年 2 月 25 日的“is_active”字段放入数据库中,他可以观看 2014 年 2 月 25 日之前的所有类(class)和内容,之后他的帐户将停用,当他尝试登录时,他将获得信息他的帐户未激活,他必须与管理员联系。

你能告诉我当用户尝试登录时数据库查询会发生变化以检查该权限吗?我认为解决方案是从服务器获取当前日期并与数据库中的日期进行检查。如果系统日期较低,则数据库用户有权访问,如果日期较高,则用户无权访问,但他会获取信息。

如果有人不明白,抱歉我的英语写在评论中,我会尝试描述更多。

最佳答案

我将创建一个用户配置文件字段“is_active”,选择日期时间并将其设置为“不可见”

网站管理员 -> 用户 -> 帐户 -> 用户个人资料字段

http://docs.moodle.org/26/en/User_profile_fields

然后创建一个本地插件,使用 cron 检查日期并将用户设置为暂停

在/local/is_active/version.php - http://docs.moodle.org/dev/version.php

defined('MOODLE_INTERNAL') || die();

$plugin->version = 201402301; // Plugin version
$plugin->requires = 2013051402; // Moodle version.
$plugin->component = 'local_is_active'; // Component name
$plugin->cron = 1; // In seconds - how often should this be run?

在/local/is_active/lang/en/local_is_active.php

$string['pluginname'] = 'Is active';

在/local/is_active/lib.php 中有一个 cron 函数 local_xxx_cron() ,该函数将用户表更新为挂起。我还没有测试过 SQL,但是类似这样

defined('MOODLE_INTERNAL') || die();

function local_is_active_cron() {
$sql = "UPDATE {user}
SET suspended = :suspended
WHERE EXISTS (SELECT userid
FROM {user_info_field} f
JOIN {user_info_data} d ON d.fieldid = f.id
AND d.data < :now
AND d.userid = mdl_user
WHERE f.shortname = :shortname)";
$params = array('suspended' => 1,
'now' => time(),
'shortname' => 'is_active');
$DB->execute($sql, $params);
}

编辑:忘记添加您需要转到通知来安装插件 - 站点管理 -> 通知 - 然后 Moodle 将在 cron 运行时自动调用 cron 函数。

您可以通过转到/admin/cron.php手动运行cron

作为网站管理员,您可以通过用户个人资料编辑日期 - 转到网站管理 -> 用户 -> 帐户 -> 浏览用户列表 -> 然后单击用户个人资料旁边的铅笔

或者使用类似的方法更新日期 - 数据字段需要是 unix 时间戳而不是字符串类型日期

$activedate = strtotime('2014-02-23'); // Timestamp
$fieldid = $DB->get_field('user_info_field', 'id', array('shortname' => 'is_active'));
$params = array('fieldid' => $fieldid, 'userid' => $userid);
if ($DB->record_exists('user_info_data', $params)) {
$DB->set_field('user_info_data', 'data', $activedate, $params);
} else {
$data = new stdClass();
$data->fieldid = $fieldid;
$data->userid = $userid;
$data->data = $activedate;
$data->dataformat = 0;
$DB->insert_record('user_info_data', $data);
}

关于mysql - 如何编辑moodle sql来定时访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21972654/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com