MDL-34914 cohorts: more understandable filter of user list by cohort

This commit is contained in:
Marina Glancy 2014-05-16 17:09:07 +08:00
parent a929fd50f9
commit 88de944a21

View File

@ -50,7 +50,8 @@ class user_filter_cohort extends user_filter_type {
1 => get_string('doesnotcontain', 'filters'),
2 => get_string('isequalto', 'filters'),
3 => get_string('startswith', 'filters'),
4 => get_string('endswith', 'filters'));
4 => get_string('endswith', 'filters'),
5 => get_string('isempty', 'filters'));
}
/**
@ -80,10 +81,16 @@ class user_filter_cohort extends user_filter_type {
$operator = $field.'_op';
if (array_key_exists($operator, $formdata)) {
if ($formdata->$field == '') {
if ($formdata->$operator != 5 and $formdata->$field == '') {
// No data - no change except for empty filter.
return false;
}
return array('operator' => (int)$formdata->$operator, 'value' => $formdata->$field);
// If field value is set then use it, else it's null.
$fieldvalue = null;
if (isset($formdata->$field)) {
$fieldvalue = $formdata->$field;
}
return array('operator' => (int)$formdata->$operator, 'value' => $fieldvalue);
}
return false;
@ -108,13 +115,15 @@ class user_filter_cohort extends user_filter_type {
return '';
}
$not = '';
switch($operator) {
case 0: // Contains.
$res = $DB->sql_like('idnumber', ":$name", false, false);
$params[$name] = "%$value%";
break;
case 1: // Does not contain.
$res = $DB->sql_like('idnumber', ":$name", false, false, true);
$not = 'NOT';
$res = $DB->sql_like('idnumber', ":$name", false, false);
$params[$name] = "%$value%";
break;
case 2: // Equal to.
@ -129,11 +138,16 @@ class user_filter_cohort extends user_filter_type {
$res = $DB->sql_like('idnumber', ":$name", false, false);
$params[$name] = "%$value";
break;
case 5: // Empty.
$not = 'NOT';
$res = '(idnumber IS NOT NULL AND idnumber <> :'.$name.')';
$params[$name] = '';
break;
default:
return '';
}
$sql = "id IN (SELECT userid
$sql = "id $not IN (SELECT userid
FROM {cohort_members}
JOIN {cohort} ON {cohort_members}.cohortid = {cohort}.id
WHERE $res)";
@ -163,6 +177,8 @@ class user_filter_cohort extends user_filter_type {
case 3: // Starts with.
case 4: // Ends with.
return get_string('textlabel', 'filters', $a);
case 5: // Empty.
return get_string('textlabelnovalue', 'filters', $a);
}
return '';