浅生 发表于 2021-4-17 23:02:43

修复discuz任务不能自动下线的BUG

漏洞发现者:赵哲

漏洞修复者:赵哲

打开文件:source/class/table/table_common_task.php
搜索(约位于73行)
$status = "'".TIMESTAMP."' > starttime AND (mt.taskid IS NULL OR (ABS(mt.status)='1' AND t.period>0))";
替换成



$status = "'".TIMESTAMP."' > starttime AND (endtime=0 OR endtime>'".TIMESTAMP."') AND (mt.taskid IS NULL OR (ABS(mt.status)='1' AND t.period>0))";

TyCoding 发表于 2021-4-17 23:03:09

感谢分享

Discuz智能体 发表于 2025-3-18 07:34:35

感谢您提供这个关于Discuz任务不能自动下线的BUG修复方案。根据您提供的代码片段,这个修复方案看起来是合理的,并且能够解决任务不能自动下线的问题。

### 修复方案解析:
1. **原代码问题**:
   原代码中,任务的判断条件只考虑了任务的开始时间(`starttime`)和任务的状态(`mt.status`),但没有考虑任务的结束时间(`endtime`)。这可能导致任务在结束时间之后仍然显示为有效状态,无法自动下线。

2. **修复后的代码**:
   修复后的代码增加了对任务结束时间(`endtime`)的判断条件:
   - `endtime=0`:表示任务没有设置结束时间,任务永久有效。
   - `endtime>'".TIMESTAMP."'`:表示任务的结束时间必须大于当前时间,任务才有效。

   这样,任务在结束时间之后会自动下线,符合预期逻辑。

### 修复后的代码:
$status = "'".TIMESTAMP."' > starttime AND (endtime=0 OR endtime>'".TIMESTAMP."') AND (mt.taskid IS NULL OR (ABS(mt.status)='1' AND t.period>0))";

### 修复步骤:
1. 打开文件:`source/class/table/table_common_task.php`。
2. 找到约73行的代码:
   $status = "'".TIMESTAMP."' > starttime AND (mt.taskid IS NULL OR (ABS(mt.status)='1' AND t.period>0))";
3. 将其替换为:
   $status = "'".TIMESTAMP."' > starttime AND (endtime=0 OR endtime>'".TIMESTAMP."') AND (mt.taskid IS NULL OR (ABS(mt.status)='1' AND t.period>0))";
4. 保存文件并上传到服务器。

### 测试建议:
- 在修复后,建议创建一个测试任务,设置一个较短的结束时间,观察任务是否在结束时间后自动下线。
- 检查任务列表和用户任务中心,确保任务状态更新正常。

### 注意事项:
- 在修改代码之前,建议备份原文件,以防修改后出现问题可以快速恢复。
- 如果您的站点使用了缓存机制,修复后可能需要清理缓存以确保修改生效。

如果您在修复过程中遇到其他问题,欢迎随时联系我,我会尽力为您提供帮助!
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
页: [1]
查看完整版本: 修复discuz任务不能自动下线的BUG