diff --git a/lang/en/filters.php b/lang/en/filters.php index 3b70ecbc2df..19fa8262b1e 100644 --- a/lang/en/filters.php +++ b/lang/en/filters.php @@ -64,6 +64,8 @@ $string['isempty'] = 'is empty'; $string['isequalto'] = 'is equal to'; $string['isnotdefined'] = 'isn\'t defined'; $string['isnotequalto'] = 'isn\'t equal to'; +$string['neveraccessed'] = 'Never accessed'; +$string['nevermodified'] = 'Never modified'; $string['newfilter'] = 'New filter'; $string['nofiltersenabled'] = 'No filter plugins have been enabled on this site.'; $string['off'] = 'Off'; diff --git a/user/filters/checkbox.php b/user/filters/checkbox.php new file mode 100644 index 00000000000..d6942bb8508 --- /dev/null +++ b/user/filters/checkbox.php @@ -0,0 +1,139 @@ +. + +/** + * Generic checkbox filter. + * + * This will create generic filter with checkbox option and can be used for + * disabling other elements for specific condition. + * + * @package user + * @copyright 2011 Rajesh Taneja + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +require_once($CFG->dirroot.'/user/filters/lib.php'); + +/** + * Generic filter based for checkbox and can be used for disabling items + */ +class user_filter_checkbox extends user_filter_type { + /** + * list of all the fields which needs to be disabled, if checkbox is checked + * @var array + */ + protected $disableelements = array(); + + /** + * name of user table field/fields on which data needs to be compared + * @var mixed + */ + protected $field; + + /** + * Constructor, initalize user_filter_type and sets $disableelements array + * with list of elements to be diabled by checkbox. + * + * @param string $name the name of the filter instance + * @param string $label the label of the filter instance + * @param boolean $advanced advanced form element flag + * @param mixed $field user table field/fields name for comparison + * @param array $disableelements name of fields which should be disabled if this checkbox is checked. + */ + public function __construct($name, $label, $advanced, $field, $disableelements=null) { + parent::__construct($name, $label, $advanced); + $this->field = $field; + if (!empty($disableelements)) { + if (!is_array($disableelements)) { + $this->disableelements = array($disableelements); + } else { + $this->disableelements = $disableelements; + } + } + } + + /** + * Adds controls specific to this filter in the form. + * + * @param moodleform $mform a MoodleQuickForm object in which element will be added + */ + public function setupForm(MoodleQuickForm &$mform) { + $objs = array(); + + $objs[] = $mform->createElement('checkbox', $this->_name, null, ''); + $grp = $mform->addElement('group', $this->_name.'_grp', $this->_label, $objs, '', false); + + if ($this->_advanced) { + $mform->setAdvanced($this->_name.'_grp'); + } + //Check if disable if options are set. if yes then set rules + if (!empty($this->disableelements) && is_array($this->disableelements)) { + foreach ($this->disableelements as $disableelement) { + $mform->disabledIf($disableelement, $this->_name, 'checked'); + } + } + } + + /** + * Retrieves data from the form data + * + * @param object $formdata data submited with the form + * @return mixed array filter data or false when filter not set + */ + public function check_data($formdata) { + $field = $this->_name; + //Check if disable if options are set. if yes then don't add this. + if (!empty($this->disableelements) && is_array($this->disableelements)) { + foreach ($this->disableelements as $disableelement) { + if (array_key_exists($disableelement, $formdata)) { + return false; + } + } + } + if (array_key_exists($field, $formdata) and $formdata->$field !== '') { + return array('value' => (string)$formdata->$field); + } + return false; + } + + /** + * Returns the condition to be used with SQL where + * + * @param array $data filter settings + * @return array sql string and $params + */ + public function get_sql_filter($data) { + $field = $this->field; + if (is_array($field)) { + $res = " {$field[0]} = {$field[1]} "; + } else { + $res = " {$field} = 0 "; + } + return array($res, array()); + } + + /** + * Returns a human friendly description of the filter used as label. + * + * @param array $data filter settings + * @return string active filter label + */ + public function get_label($data) { + return $this->_label; + } +} diff --git a/user/filters/courserole.php b/user/filters/courserole.php index e8172ecbe47..49cb54c9508 100644 --- a/user/filters/courserole.php +++ b/user/filters/courserole.php @@ -22,7 +22,7 @@ class user_filter_courserole extends user_filter_type { */ function get_roles() { $context = get_context_instance(CONTEXT_SYSTEM); - $roles = array(0=> get_string('anyrole','filters')) + get_assignable_roles($context); + $roles = array(0=> get_string('anyrole','filters')) + get_default_enrol_roles($context); return $roles; } diff --git a/user/filters/date.php b/user/filters/date.php index 14b43ba613e..a39c199efc9 100644 --- a/user/filters/date.php +++ b/user/filters/date.php @@ -35,7 +35,6 @@ class user_filter_date extends user_filter_type { $objs[] =& $mform->createElement('static', $this->_name.'_break', null, '
'); $objs[] =& $mform->createElement('checkbox', $this->_name.'_eck', null, get_string('isbefore', 'filters')); $objs[] =& $mform->createElement('date_selector', $this->_name.'_edt', null); - $objs[] = & $mform->createElement('checkbox', $this->_name.'_never', null, get_string('includenever', 'filters')); $grp =& $mform->addElement('group', $this->_name.'_grp', $this->_label, $objs, '', false); @@ -49,8 +48,6 @@ class user_filter_date extends user_filter_type { $mform->disabledIf($this->_name.'_edt[day]', $this->_name.'_eck', 'notchecked'); $mform->disabledIf($this->_name.'_edt[month]', $this->_name.'_eck', 'notchecked'); $mform->disabledIf($this->_name.'_edt[year]', $this->_name.'_eck', 'notchecked'); - - $mform->disabledIf($this->_name.'_never', $this->_name.'_eck', 'notchecked'); } /** @@ -63,7 +60,6 @@ class user_filter_date extends user_filter_type { $sdt = $this->_name.'_sdt'; $eck = $this->_name.'_eck'; $edt = $this->_name.'_edt'; - $never = $this->_name.'_never'; if (!array_key_exists($sck, $formdata) and !array_key_exists($eck, $formdata)) { return false; @@ -80,11 +76,6 @@ class user_filter_date extends user_filter_type { } else { $data['before'] = 0; } - if (array_key_exists($never, $formdata)) { - $data['never'] = $formdata->$never; - } else { - $data['never'] = 0; - } return $data; } @@ -97,7 +88,6 @@ class user_filter_date extends user_filter_type { function get_sql_filter($data) { $after = (int)$data['after']; $before = (int)$data['before']; - $never = (int)$data['never']; $field = $this->_field; @@ -105,13 +95,7 @@ class user_filter_date extends user_filter_type { return array('', array()); } - $res = ''; - - if (!empty($never)) { - $res .= " $field >= 0 " ; - } else { - $res .= " $field > 0 " ; - } + $res = " $field >= 0 " ; if ($after) { $res .= " AND $field >= $after"; @@ -131,7 +115,6 @@ class user_filter_date extends user_filter_type { function get_label($data) { $after = $data['after']; $before = $data['before']; - $never = $data['never']; $field = $this->_field; $a = new stdClass(); @@ -139,20 +122,12 @@ class user_filter_date extends user_filter_type { $a->after = userdate($after); $a->before = userdate($before); - if ($never) { - $strnever = ' ('.get_string('includenever', 'filters').')'; - } else { - $strnever = ''; - } - if ($after and $before) { - return get_string('datelabelisbetween', 'filters', $a).$strnever; - + return get_string('datelabelisbetween', 'filters', $a); } else if ($after) { - return get_string('datelabelisafter', 'filters', $a).$strnever;; - + return get_string('datelabelisafter', 'filters', $a); } else if ($before) { - return get_string('datelabelisbefore', 'filters', $a).$strnever;; + return get_string('datelabelisbefore', 'filters', $a); } return ''; } diff --git a/user/filters/lib.php b/user/filters/lib.php index f8c34a84b5f..91bc1137839 100644 --- a/user/filters/lib.php +++ b/user/filters/lib.php @@ -10,7 +10,7 @@ require_once($CFG->dirroot.'/user/filters/profilefield.php'); require_once($CFG->dirroot.'/user/filters/yesno.php'); require_once($CFG->dirroot.'/user/filters/cohort.php'); require_once($CFG->dirroot.'/user/filters/user_filter_forms.php'); - +require_once($CFG->dirroot.'/user/filters/checkbox.php'); /** * User filtering wrapper class. @@ -36,7 +36,8 @@ class user_filtering { if (empty($fieldnames)) { $fieldnames = array('realname'=>0, 'lastname'=>1, 'firstname'=>1, 'email'=>1, 'city'=>1, 'country'=>1, 'confirmed'=>1, 'profile'=>1, 'courserole'=>1, 'systemrole'=>1, 'cohort'=>1, - 'firstaccess'=>1, 'lastaccess'=>1, 'lastlogin'=>1, 'timemodified'=>1, 'username'=>1, 'auth'=>1, 'mnethostid'=>1); + 'firstaccess'=>1, 'lastaccess'=>1, 'neveraccessed'=>1, 'timemodified'=>1, + 'nevermodified'=>1, 'username'=>1, 'auth'=>1, 'mnethostid'=>1); } $this->_fields = array(); @@ -114,8 +115,9 @@ class user_filtering { case 'systemrole': return new user_filter_globalrole('systemrole', get_string('globalrole', 'role'), $advanced); case 'firstaccess': return new user_filter_date('firstaccess', get_string('firstaccess', 'filters'), $advanced, 'firstaccess'); case 'lastaccess': return new user_filter_date('lastaccess', get_string('lastaccess'), $advanced, 'lastaccess'); - case 'lastlogin': return new user_filter_date('lastlogin', get_string('lastlogin'), $advanced, 'lastlogin'); + case 'neveraccessed': return new user_filter_checkbox('neveraccessed', get_string('neveraccessed', 'filters'), $advanced, 'firstaccess', array('lastaccess_sck', 'lastaccess_eck', 'firstaccess_eck', 'firstaccess_sck')); case 'timemodified': return new user_filter_date('timemodified', get_string('lastmodified'), $advanced, 'timemodified'); + case 'nevermodified': return new user_filter_checkbox('nevermodified', get_string('nevermodified', 'filters'), $advanced, array('timemodified', 'timecreated'), array('timemodified_sck', 'timemodified_eck')); case 'cohort': return new user_filter_cohort($advanced); case 'auth': $plugins = get_plugin_list('auth');