如何根据scorm完成的结果隐藏/显示moodle中的活动

时间:2017-10-18 10:23:52

标签: php mysql moodle

我试图恢复用户的课程状态'即不完整的','完成'使用此值,我将根据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)); 
    }

到目前为止,这是我设法提出的,但它仍然是不正确的,我似乎无法到达任何地方。我相信这可能是我的隐藏/表演。任何人都可以指出正确的方向吗?

2 个答案:

答案 0 :(得分:0)

如果这是你的功能的完整代码,那么你会遗漏一些东西。

首先,您需要在数据库上执行查询,因为如果条件是将字符串与sql查询与不同的字符串“completed”进行比较,那么您现在正在执行的操作。

假设你修复它。我会这样做:

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

您可以通过多种方式执行此操作,但无需额外的逻辑编写 $ completedCheck ==“completed”将无效。

答案 1 :(得分:0)

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

该功能被称为"限制访问"。

您需要的功能是参考活动完成的限制访问。也许,参考成绩的限制访问也会有效。

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

也许你不需要自己开发?

Greetins