Фильтры Moodle - ГРУППА ПО - PullRequest
0 голосов
/ 06 мая 2020

Как мы можем заставить работать фильтры Moodle, когда форма GROUP BY - select используется в качестве поля mform фильтра. Когда я выбирал курс, я не получал желаемого результата. GROUP BY не учитывается при вызове функции sql_like:

require_once($CFG->dirroot.'/filter_form.php');    
$mform = new filter_form();
$coursefilter = '';

if ($formdata = $mform->get_data()) {
    $coursefilter = $formdata->course;
}

$mform->set_data($formdata);
$mform->display();

$reporttable = new html_table();
$reporttable->head = array('course', 'users');
$reporttable->attributes['class'] = 'table';

$sql = "SELECT c.fullname, count(cc.userid) AS 'completed'
        FROM {course_completions} cc JOIN {course} ON c.id = cc.course WHERE cc.timestarted > 0
        GROUP BY c.fullname ";

$params = array();
if (!empty($coursefilter)) {
    $params['fullname'] = '%' . $DB->sql_like_escape($coursefilter) . '%';  
    $sql .= " AND " . $DB->sql_like('c.fullname', ':fullname', false);
}

$mds = $DB->get_records_sql($sql, $params);    
foreach ($mds as $m) {
    $reporttable->data[] = new html_table_row(array(implode(array($m->fullname. $m->lastname)), 
                           $m->completed ));
}                              
echo html_writer::table($reporttable); 

1 Ответ

0 голосов
/ 07 мая 2020

Добавьте GROUP BY после фильтра.

if (!empty($coursefilter)) {
    $params['fullname'] = '%' . $DB->sql_like_escape($coursefilter) . '%';  
    $sql .= " AND " . $DB->sql_like('c.fullname', ':fullname', false);
}

$sql .= " GROUP BY c.fullname ";
...