elearningsoftware / moodle-mod_journal

The Moodle journal module for moodle 2.0+
https://moodle.org/plugins/view.php?plugin=mod_journal
16 stars 34 forks source link

PHP Unit Test Fails with, get_users_in_context() is bugged #100

Open andrewnormore opened 12 months ago

andrewnormore commented 12 months ago

This function seems to be broken, it has been updated to select j.userid which there is no column on journal for userid. I have pasted the solution below and will do a pull request to fix it.

` public static function get_users_in_context(userlist $userlist) { $context = $userlist->get_context();

    if (!is_a($context, \context_module::class)) {
        return;
    }

    // Find users with journal entries.
    $sql = "
        SELECT j.userid
          FROM {journal} j
          JOIN {modules} m
            ON m.name = :journal
          JOIN {course_modules} cm
            ON cm.instance = j.id
           AND cm.module = m.id
          JOIN {context} ctx
            ON ctx.instanceid = cm.id
           AND ctx.contextlevel = :modulelevel
         WHERE ctx.id = :contextid";
    $params = ['journal' => 'journal', 'modulelevel' => CONTEXT_MODULE, 'contextid' => $context->id];

    $userlist->add_from_sql('userid', $sql, $params);
}`

SOLUTION: `public static function get_users_in_context(userlist $userlist) { $context = $userlist->get_context();

    if (!is_a($context, \context_module::class)) {
        return;
    }

    // Find users with journal entries.
    $sql = "
            SELECT je.userid
                FROM {journal_entries} je
                JOIN {modules} m
                    ON m.name = :journal
                JOIN {course_modules} cm
                    ON cm.instance = je.id
                AND cm.module = m.id
                JOIN {context} ctx
                    ON ctx.instanceid = cm.id
                AND ctx.contextlevel = :modulelevel
                WHERE ctx.id = :contextid";
    $params = ['journal' => 'journal', 'modulelevel' => CONTEXT_MODULE, 'contextid' => $context->id];

    $userlist->add_from_sql('userid', $sql, $params);
}`
larsbonczek commented 3 months ago

This was fixed in #101