MDL-29244 Users: Fixed filter for selecting users who never logged in and course...
authorRajesh Taneja <rajesh@moodle.org>
Fri, 16 Sep 2011 08:49:51 +0000 (16:49 +0800)
committerRajesh Taneja <rajesh@moodle.org>
Tue, 27 Sep 2011 04:30:16 +0000 (12:30 +0800)
lang/en/filters.php
user/filters/checkbox.php [new file with mode: 0644]
user/filters/courserole.php
user/filters/date.php
user/filters/lib.php

index 3b70ecb..53b10b3 100644 (file)
@@ -54,7 +54,6 @@ $string['filtersettingsforin'] = 'Filter settings for {$a->filter} in {$a->conte
 $string['filtersettingsin'] = 'Filter settings in {$a}';
 $string['firstaccess'] = 'First access';
 $string['globalrolelabel'] = '{$a->label} is {$a->value}';
-$string['includenever'] = 'Never included';
 $string['isactive'] = 'Active?';
 $string['isafter'] = 'is after';
 $string['isanyvalue'] = 'is any value';
@@ -64,6 +63,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 (file)
index 0000000..ab98eb9
--- /dev/null
@@ -0,0 +1,135 @@
+<?php
+// This file is part of Moodle - http://moodle.org/
+//
+// Moodle is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Moodle is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
+
+/**
+ * moodlelib.php - Moodle main library
+ *
+ * Main library file of miscellaneous general-purpose Moodle functions.
+ * Other main libraries:
+ *  - weblib.php      - functions that produce web output
+ *  - datalib.php     - functions that access the database
+ *
+ * @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
+     * @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;
+    }
+}
index e8172ec..49cb54c 100644 (file)
@@ -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;
     }
 
index 14b43ba..a39c199 100644 (file)
@@ -35,7 +35,6 @@ class user_filter_date extends user_filter_type {
         $objs[] =& $mform->createElement('static', $this->_name.'_break', null, '<br/>');
         $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 '';
     }
index f8c34a8..91bc113 100644 (file)
@@ -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');