如何根据 scorm 完成的结果在 moodle 中 hide/show activity

How to hide/show activity in moodle based on results of scorm completion

我正在尝试恢复用户的 scorm 'lesson status',即 'incomplete'、'complete' 等。使用此值,我将隐藏或显示证书 activity基于 SCORM 文件是否已标记为完整。

function block_iomad_progress_monitorable_modules() {
    global $DB;
    $completedCheck = "SELECT id
                                     FROM {scorm_scoes_track}
                                    WHERE scormid = :eventid
                                      AND userid = :userid
                                      AND element = 'cmi.core.lesson_status'
                                      AND {$DB->sql_compare_text('value')} = 'completed'"



    if ($completedCheck == "completed") {
    $link = html_writer::tag('a', $iomadcertificate->name, array('class' => 'dimmed',
            'href' => $CFG->wwwroot . '/mod/iomadcertificate/view.php?id=' . $iomadcertificate->coursemodule));;    
    } else {
        $link = html_writer::tag('a', $iomadcertificate->name, array('class' => 'dimmed',
                'href' => $CFG->wwwroot . '/mod/iomadcertificate/view.php?id=' . $iomadcertificate->coursemodule)); 
    }

这是我到目前为止想出的办法,但它仍然不正确,我似乎没有任何进展。我相信这可能是我的hide/shows。谁能指出正确的方向?

如果这是您函数的完整代码,那么您遗漏了一些东西。

首先你需要在数据库上执行你的查询,因为你现在在 if 条件下所做的是将带有 sql 查询的字符串与不同的字符串 "completed".[=11= 进行比较]

假设你修复了它。我会这样处理:

  • 更改您的查询以利用计数。 (或使用 Moodle 功能 $DB->count_records_sql Moodle Docs Reference
  • 然后在 if 条件下检查它是否大于零。

你可以通过多种方式做到这一点,但不需要额外的逻辑编写 $completedCheck == "completed" 不会工作。

Moodle 具有使活动相互依赖的基本功能。

调用函数 "restrict access"。

参考 activity 完成,您需要的功能被限制访问。或许,参考成绩的限制访问也会起作用。

https://docs.moodle.org/33/en/Restrict_access_settings

可能不需要自己开发?

问候