MDL-12101 cleanup/fixing/refactoring of user bulk operation and admin user browsing
This commit is contained in:
@@ -169,7 +169,7 @@ if ($formdata = $mform->is_cancelled()) {
|
||||
|
||||
// clear bilk selection
|
||||
if ($bulk) {
|
||||
$SESSION->bulk_susers = array();
|
||||
$SESSION->bulk_users = array();
|
||||
}
|
||||
|
||||
// init csv import helper
|
||||
@@ -483,8 +483,8 @@ if ($formdata = $mform->is_cancelled()) {
|
||||
}
|
||||
|
||||
if ($bulk == 2 or $bulk == 3) {
|
||||
if (!in_array($user->id, $SESSION->bulk_susers)) {
|
||||
$SESSION->bulk_susers[] = $user->id;
|
||||
if (!in_array($user->id, $SESSION->bulk_users)) {
|
||||
$SESSION->bulk_users[] = $user->id;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -547,8 +547,8 @@ if ($formdata = $mform->is_cancelled()) {
|
||||
get_context_instance(CONTEXT_PERSONAL, $user->id);
|
||||
|
||||
if ($bulk == 1 or $bulk == 3) {
|
||||
if (!in_array($user->id, $SESSION->bulk_susers)) {
|
||||
$SESSION->bulk_susers[] = $user->id;
|
||||
if (!in_array($user->id, $SESSION->bulk_users)) {
|
||||
$SESSION->bulk_users[] = $user->id;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+18
-134
@@ -2,6 +2,7 @@
|
||||
|
||||
require_once('../config.php');
|
||||
require_once($CFG->libdir.'/adminlib.php');
|
||||
require_once($CFG->dirroot.'/user/filters/lib.php');
|
||||
|
||||
$delete = optional_param('delete', 0, PARAM_INT);
|
||||
$confirm = optional_param('confirm', '', PARAM_ALPHANUM); //md5 confirmation hash
|
||||
@@ -10,9 +11,6 @@
|
||||
$dir = optional_param('dir', 'ASC', PARAM_ALPHA);
|
||||
$page = optional_param('page', 0, PARAM_INT);
|
||||
$perpage = optional_param('perpage', 30, PARAM_INT); // how many per page
|
||||
$search = trim(optional_param('search', '', PARAM_RAW));
|
||||
$lastinitial = optional_param('lastinitial', '', PARAM_CLEAN); // only show students with this last initial
|
||||
$firstinitial = optional_param('firstinitial', '', PARAM_CLEAN); // only show students with this first initial
|
||||
$ru = optional_param('ru', '2', PARAM_INT); // show remote users
|
||||
$lu = optional_param('lu', '2', PARAM_INT); // show local users
|
||||
$acl = optional_param('acl', '0', PARAM_INT); // id of user to tweak mnet ACL (requires $access)
|
||||
@@ -20,37 +18,7 @@
|
||||
|
||||
admin_externalpage_setup('editusers');
|
||||
|
||||
// Let's see if we have *any* mnet users. Just ask for a single record
|
||||
$mnet_users = get_records_select('user', " auth='mnet' AND mnethostid != '{$CFG->mnet_localhost_id}' ", '', '*', '0', '1');
|
||||
if(is_array($mnet_users) && count($mnet_users) > 0) {
|
||||
$mnet_auth_users = true;
|
||||
} else {
|
||||
$mnet_auth_users = false;
|
||||
}
|
||||
|
||||
if($mnet_auth_users) {
|
||||
// Determine which users we are looking at (local, remote, or both). Start with both.
|
||||
if (!isset($_SESSION['admin-user-remoteusers'])) {
|
||||
$_SESSION['admin-user-remoteusers'] = 1;
|
||||
$_SESSION['admin-user-localusers'] = 1;
|
||||
}
|
||||
if ($ru == 0 or $ru == 1) {
|
||||
$_SESSION['admin-user-remoteusers'] = $ru;
|
||||
}
|
||||
if ($lu == 0 or $lu == 1) {
|
||||
$_SESSION['admin-user-localusers'] = $lu;
|
||||
}
|
||||
$remoteusers = $_SESSION['admin-user-remoteusers'];
|
||||
$localusers = $_SESSION['admin-user-localusers'];
|
||||
|
||||
// if neither remote nor local, set to sensible local only
|
||||
if (!$remoteusers and !$localusers) {
|
||||
$_SESSION['admin-user-localusers'] = 1;
|
||||
$localusers = 1;
|
||||
}
|
||||
}
|
||||
|
||||
$sitecontext = get_context_instance(CONTEXT_SYSTEM, SITEID);
|
||||
$sitecontext = get_context_instance(CONTEXT_SYSTEM);
|
||||
$site = get_site();
|
||||
|
||||
if (!has_capability('moodle/user:update', $sitecontext) and !has_capability('moodle/user:delete', $sitecontext)) {
|
||||
@@ -60,7 +28,6 @@
|
||||
$stredit = get_string('edit');
|
||||
$strdelete = get_string('delete');
|
||||
$strdeletecheck = get_string('deletecheck');
|
||||
$strsearch = get_string('search');
|
||||
$strshowallusers = get_string('showallusers');
|
||||
|
||||
if (empty($CFG->loginhttps)) {
|
||||
@@ -151,6 +118,9 @@
|
||||
. "' access now set to '$accessctrl'.");
|
||||
}
|
||||
|
||||
// create the user filter form
|
||||
$ufiltering = new user_filtering();
|
||||
|
||||
// Carry on with the user listing
|
||||
|
||||
$columns = array("firstname", "lastname", "email", "city", "country", "lastaccess");
|
||||
@@ -174,28 +144,19 @@
|
||||
$columnicon = " <img src=\"$CFG->pixpath/t/$columnicon.gif\" alt=\"\" />";
|
||||
|
||||
}
|
||||
$$column = "<a href=\"user.php?sort=$column&dir=$columndir&search=".urlencode(stripslashes($search))."&firstinitial=$firstinitial&lastinitial=$lastinitial\">".$string[$column]."</a>$columnicon";
|
||||
$$column = "<a href=\"user.php?sort=$column&dir=$columndir\">".$string[$column]."</a>$columnicon";
|
||||
}
|
||||
|
||||
if ($sort == "name") {
|
||||
$sort = "firstname";
|
||||
}
|
||||
|
||||
// tell the query which users we are looking at (local, remote, or both)
|
||||
$remotewhere = '';
|
||||
if($mnet_auth_users && ($localusers XOR $remoteusers)) {
|
||||
if ($localusers) {
|
||||
$remotewhere .= " and mnethostid = {$CFG->mnet_localhost_id} ";
|
||||
} else {
|
||||
$remotewhere .= " and mnethostid <> {$CFG->mnet_localhost_id} ";
|
||||
}
|
||||
}
|
||||
|
||||
$users = get_users_listing($sort, $dir, $page*$perpage, $perpage, $search, $firstinitial, $lastinitial, $remotewhere);
|
||||
$usercount = get_users(false);
|
||||
$usersearchcount = get_users(false, $search, true, "", "", $firstinitial, $lastinitial);
|
||||
|
||||
if ($search or $firstinitial or $lastinitial) {
|
||||
$extrasql = $ufiltering->get_sql_filter();
|
||||
$users = get_users_listing($sort, $dir, $page*$perpage, $perpage, '', '', '', $extrasql);
|
||||
$usercount = get_users(false);
|
||||
$usersearchcount = get_users(false, '', true, "", "", '', '', '', '', '*', $extrasql);
|
||||
|
||||
if ($extrasql !== '') {
|
||||
print_heading("$usersearchcount / $usercount ".get_string('users'));
|
||||
$usercount = $usersearchcount;
|
||||
} else {
|
||||
@@ -205,65 +166,15 @@
|
||||
$alphabet = explode(',', get_string('alphabet'));
|
||||
$strall = get_string('all');
|
||||
|
||||
|
||||
/// Bar of first initials
|
||||
|
||||
echo "<p style=\"text-align:center\">";
|
||||
echo get_string("firstname")." : ";
|
||||
if ($firstinitial) {
|
||||
echo " <a href=\"user.php?sort=firstname&dir=ASC&".
|
||||
"perpage=$perpage&lastinitial=$lastinitial\">$strall</a> ";
|
||||
} else {
|
||||
echo " <b>$strall</b> ";
|
||||
}
|
||||
foreach ($alphabet as $letter) {
|
||||
if ($letter == $firstinitial) {
|
||||
echo " <b>$letter</b> ";
|
||||
} else {
|
||||
echo " <a href=\"user.php?sort=firstname&dir=ASC&".
|
||||
"perpage=$perpage&lastinitial=$lastinitial&firstinitial=$letter\">$letter</a> ";
|
||||
}
|
||||
}
|
||||
echo "<br />";
|
||||
|
||||
/// Bar of last initials
|
||||
|
||||
echo get_string("lastname")." : ";
|
||||
if ($lastinitial) {
|
||||
echo " <a href=\"user.php?sort=lastname&dir=ASC&".
|
||||
"perpage=$perpage&firstinitial=$firstinitial\">$strall</a> ";
|
||||
} else {
|
||||
echo " <b>$strall</b> ";
|
||||
}
|
||||
foreach ($alphabet as $letter) {
|
||||
if ($letter == $lastinitial) {
|
||||
echo " <b>$letter</b> ";
|
||||
} else {
|
||||
echo " <a href=\"user.php?sort=lastname&dir=ASC&".
|
||||
"perpage=$perpage&firstinitial=$firstinitial&lastinitial=$letter\">$letter</a> ";
|
||||
}
|
||||
}
|
||||
echo "</p>";
|
||||
|
||||
print_paging_bar($usercount, $page, $perpage,
|
||||
"user.php?sort=$sort&dir=$dir&perpage=$perpage&firstinitial=$firstinitial&lastinitial=$lastinitial&search=".urlencode(stripslashes($search))."&");
|
||||
"user.php?sort=$sort&dir=$dir&perpage=$perpage&");
|
||||
|
||||
flush();
|
||||
|
||||
|
||||
if (!$users) {
|
||||
$match = array();
|
||||
if ($search !== '') {
|
||||
$match[] = s($search);
|
||||
}
|
||||
if ($firstinitial) {
|
||||
$match[] = get_string('firstname').": $firstinitial"."___";
|
||||
}
|
||||
if ($lastinitial) {
|
||||
$match[] = get_string('lastname').": $lastinitial"."___";
|
||||
}
|
||||
$matchstring = implode(", ", $match);
|
||||
print_heading(get_string('nousersmatching', '', $matchstring));
|
||||
print_heading(get_string('nousersfound'));
|
||||
|
||||
$table = NULL;
|
||||
|
||||
@@ -367,34 +278,9 @@
|
||||
}
|
||||
}
|
||||
|
||||
if($mnet_auth_users) {
|
||||
echo "<p style=\"text-align:center\">";
|
||||
if ($localusers == 1 && $remoteusers == 1) {
|
||||
echo '<a href="?lu=0">'.get_string('hidelocal','mnet').'</a> | ';
|
||||
} elseif ($localusers == 0) {
|
||||
echo '<a href="?lu=1">'.get_string('showlocal','mnet').'</a> | ';
|
||||
} else {
|
||||
echo get_string('hidelocal','mnet').' | ';
|
||||
}
|
||||
if ($localusers == 1 && $remoteusers == 1) {
|
||||
echo '<a href="?ru=0">'.get_string('hideremote','mnet').'</a>';
|
||||
} elseif ($remoteusers == 0) {
|
||||
echo '<a href="?ru=1">'.get_string('showremote','mnet').'</a>';
|
||||
} else {
|
||||
echo get_string('hideremote','mnet');
|
||||
}
|
||||
echo "</p>";
|
||||
}
|
||||
|
||||
echo "<table class=\"searchbox\" style=\"margin-left:auto;margin-right:auto\" cellpadding=\"10\"><tr><td>";
|
||||
echo "<form action=\"user.php\" method=\"get\"><fieldset class=\"invisiblefieldset\">";
|
||||
echo "<input type=\"text\" name=\"search\" value=\"".s($search, true)."\" size=\"20\" />";
|
||||
echo "<input type=\"submit\" value=\"$strsearch\" />";
|
||||
if ($search) {
|
||||
echo "<input type=\"button\" onclick=\"document.location='user.php';\" value=\"$strshowallusers\" />";
|
||||
}
|
||||
echo "</fieldset></form>";
|
||||
echo "</td></tr></table>";
|
||||
// add filters
|
||||
$ufiltering->display_add();
|
||||
$ufiltering->display_active();
|
||||
|
||||
if (has_capability('moodle/user:create', $sitecontext)) {
|
||||
print_heading('<a href="'.$securewwwroot.'/user/editadvanced.php?id=-1">'.get_string('addnewuser').'</a>');
|
||||
@@ -402,14 +288,12 @@
|
||||
if (!empty($table)) {
|
||||
print_table($table);
|
||||
print_paging_bar($usercount, $page, $perpage,
|
||||
"user.php?sort=$sort&dir=$dir&perpage=$perpage".
|
||||
"&firstinitial=$firstinitial&lastinitial=$lastinitial&search=".urlencode(stripslashes($search))."&");
|
||||
"user.php?sort=$sort&dir=$dir&perpage=$perpage&");
|
||||
if (has_capability('moodle/user:create', $sitecontext)) {
|
||||
print_heading('<a href="'.$securewwwroot.'/user/editadvanced.php?id=-1">'.get_string('addnewuser').'</a>');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
admin_externalpage_print_footer();
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,53 @@
|
||||
<?php //$Id$
|
||||
|
||||
require_once($CFG->dirroot.'/user/filters/lib.php');
|
||||
|
||||
if (!defined('MAX_BULK_USERS')) {
|
||||
define('MAX_BULK_USERS', 2000);
|
||||
}
|
||||
|
||||
function add_selection_all($ufiltering) {
|
||||
global $SESSION;
|
||||
|
||||
$guest = get_guest();
|
||||
$sqlwhere = $ufiltering->get_sql_filter("id<>{$guest->id} AND deleted <> 1");
|
||||
|
||||
if ($rs = get_recordset_select('user', $sqlwhere, 'fullname', 'id,'.sql_fullname().' AS fullname')) {
|
||||
while ($user = rs_fetch_next_record($rs)) {
|
||||
if (!in_array($user->id, $SESSION->bulk_users)) {
|
||||
$SESSION->bulk_users[] = $user->id;
|
||||
}
|
||||
}
|
||||
rs_close($rs);
|
||||
}
|
||||
}
|
||||
|
||||
function get_selection_data($ufiltering) {
|
||||
global $SESSION;
|
||||
|
||||
// get the SQL filter
|
||||
$guest = get_guest();
|
||||
$sqlwhere = $ufiltering->get_sql_filter("id<>{$guest->id} AND deleted <> 1");
|
||||
|
||||
$total = count_records_select('user', "id<>{$guest->id} AND deleted <> 1");
|
||||
$acount = count_records_select('user', $sqlwhere);
|
||||
$scount = count($SESSION->bulk_users);
|
||||
|
||||
$userlist = array('acount'=>$acount, 'scount'=>$scount, 'ausers'=>false, 'susers'=>false, 'total'=>$total);
|
||||
$userlist['ausers'] = get_records_select_menu('user', $sqlwhere, 'fullname', 'id,'.sql_fullname().' AS fullname', 0, MAX_BULK_USERS);
|
||||
|
||||
if ($scount) {
|
||||
if ($scount < MAX_BULK_USERS) {
|
||||
$in = implode(',', $SESSION->bulk_users);
|
||||
} else {
|
||||
$bulkusers = array_slice($SESSION->bulk_users, 0, MAX_BULK_USERS);
|
||||
$in = implode(',', $bulkusers);
|
||||
}
|
||||
$userlist['susers'] = get_records_select_menu('user', "id IN ($in)", 'fullname', 'id,'.sql_fullname().' AS fullname');
|
||||
}
|
||||
|
||||
return $userlist;
|
||||
}
|
||||
|
||||
|
||||
?>
|
||||
+75
-73
@@ -1,82 +1,84 @@
|
||||
<?php //$Id$
|
||||
require_once('../../config.php');
|
||||
require_once($CFG->libdir.'/adminlib.php');
|
||||
require_once($CFG->libdir.'/dmllib.php');
|
||||
|
||||
require_once($CFG->dirroot.'/user/filters/text.php');
|
||||
require_once($CFG->dirroot.'/user/filters/date.php');
|
||||
require_once($CFG->dirroot.'/user/filters/select.php');
|
||||
require_once($CFG->dirroot.'/user/filters/courserole.php');
|
||||
require_once($CFG->dirroot.'/user/filters/globalrole.php');
|
||||
require_once($CFG->dirroot.'/user/filters/profilefield.php');
|
||||
require_once($CFG->dirroot.'/user/filters/yesno.php');
|
||||
require_once('../../config.php');
|
||||
require_once($CFG->libdir.'/adminlib.php');
|
||||
require_once($CFG->dirroot.'/'.$CFG->admin.'/user/lib.php');
|
||||
require_once($CFG->dirroot.'/'.$CFG->admin.'/user/user_bulk_forms.php');
|
||||
|
||||
require_once($CFG->dirroot.'/admin/user/user_bulk_form.php');
|
||||
define("MAX_USERS_PER_PAGE", 5000);
|
||||
admin_externalpage_setup('userbulk');
|
||||
|
||||
$sitecontext = get_context_instance(CONTEXT_SYSTEM, SITEID);
|
||||
if (!isset($SESSION->bulk_users)) {
|
||||
$SESSION->bulk_users = array();
|
||||
}
|
||||
// create the user filter form
|
||||
$ufiltering = new user_filtering();
|
||||
|
||||
// array of bulk operations
|
||||
$actions = array();
|
||||
$actions[1] = get_string('confirm');
|
||||
if (has_capability('moodle/site:readallmessages', $sitecontext) && !empty($CFG->messaging)) {
|
||||
$actions[2] = get_string('messageselectadd');
|
||||
}
|
||||
$actions[3] = get_string('delete');
|
||||
$actions[4] = get_string('displayonpage');
|
||||
// create the bulk operations form
|
||||
$user_bulk_form =& new user_bulk_form(null, $actions);
|
||||
// array of bulk operations
|
||||
// create the bulk operations form
|
||||
$action_form = new user_bulk_action_form();
|
||||
if ($data = $action_form->get_data(false)) {
|
||||
// check if an action should be performed and do so
|
||||
switch ($user_bulk_form->getAction()) {
|
||||
case 1:
|
||||
redirect($CFG->wwwroot . '/admin/user/user_bulk_confirm.php');
|
||||
break;
|
||||
case 2:
|
||||
redirect($CFG->wwwroot . '/admin/user/user_bulk_message.php');
|
||||
break;
|
||||
case 3:
|
||||
redirect($CFG->wwwroot . '/admin/user/user_bulk_delete.php');
|
||||
break;
|
||||
case 4:
|
||||
redirect($CFG->wwwroot . '/admin/user/user_bulk_display.php');
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
switch ($data->action) {
|
||||
case 1: redirect($CFG->wwwroot.'/'.$CFG->admin.'/user/user_bulk_confirm.php');
|
||||
case 2: redirect($CFG->wwwroot.'/'.$CFG->admin.'/user/user_bulk_message.php');
|
||||
case 3: redirect($CFG->wwwroot.'/'.$CFG->admin.'/user/user_bulk_delete.php');
|
||||
case 4: redirect($CFG->wwwroot.'/'.$CFG->admin.'/user/user_bulk_display.php');
|
||||
}
|
||||
}
|
||||
|
||||
$user_bulk_form = new user_bulk_form(null, get_selection_data($ufiltering));
|
||||
|
||||
if ($data = $user_bulk_form->get_data(false)) {
|
||||
if (!empty($data->addall)) {
|
||||
add_selection_all($ufiltering);
|
||||
|
||||
} else if (!empty($data->addsel)) {
|
||||
if (!empty($data->ausers)) {
|
||||
if (in_array(0, $data->ausers)) {
|
||||
add_selection_all($ufiltering);
|
||||
} else {
|
||||
foreach($data->ausers as $userid) {
|
||||
if ($userid == -1) {
|
||||
continue;
|
||||
}
|
||||
if (!in_array($userid, $SESSION->bulk_users)) {
|
||||
$SESSION->bulk_users[] = $userid;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} else if (!empty($data->removeall)) {
|
||||
$SESSION->bulk_users= array();
|
||||
|
||||
} else if (!empty($data->removesel)) {
|
||||
if (!empty($data->susers)) {
|
||||
if (in_array(0, $data->susers)) {
|
||||
$SESSION->bulk_users= array();
|
||||
} else {
|
||||
foreach($data->susers as $userid) {
|
||||
if ($userid == -1) {
|
||||
continue;
|
||||
}
|
||||
unset($SESSION->bulk_users[$userid]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// prepare user filter types
|
||||
$filters[] = new user_filter_text('username', get_string('username'), 'username');
|
||||
$filters[] = new user_filter_text('realname', get_string('fullname'), sql_fullname());
|
||||
$filters[] = new user_filter_text('email', get_string('email'), 'email');
|
||||
$filters[] = new user_filter_text('city', get_string('city'), 'city');
|
||||
$filters[] = new user_filter_select('country', get_string('country'), 'country', get_list_of_countries());
|
||||
$filters[] = new user_filter_yesno('confirmed', get_string('confirm'), 'confirmed');
|
||||
$filters[] = new user_filter_profilefield('profile', get_string('profile'));
|
||||
$filters[] = new user_filter_courserole('course', get_string('courserole', 'filters'));
|
||||
$filters[] = new user_filter_globalrole('system', get_string('globalrole', 'role'));
|
||||
$filters[] = new user_filter_date('date', get_string('date'), 'lastaccess', array('lastlogin'=> get_string('lastlogin'), 'firstaccess' => get_string('firstaccess', 'filters'), 'lastaccess' => get_string('lastaccess'), 'timemodified' => get_string('lastmodified')));
|
||||
|
||||
// create the user filter form
|
||||
$user_filter_form =& new user_filter_form(null, $filters);
|
||||
|
||||
// do output
|
||||
admin_externalpage_setup('userbulk');
|
||||
admin_externalpage_print_header();
|
||||
|
||||
// put the user filter form first
|
||||
$user_filter_form->display();
|
||||
// get the SQL filter
|
||||
$where =& $user_filter_form->getSQLFilter('id<>1 AND deleted <> 1');
|
||||
$ausercount = count_records_select('user', $where);
|
||||
// limit the number of options
|
||||
$comment = null;
|
||||
if($ausercount <= MAX_USERS_PER_PAGE) {
|
||||
$user_bulk_form->setAvailableUsersSQL($where);
|
||||
} else {
|
||||
$comment = get_string('toomanytoshow');
|
||||
}
|
||||
$user_bulk_form->setUserCount($ausercount, $comment);
|
||||
// display the bulk user form
|
||||
$user_bulk_form->display();
|
||||
admin_externalpage_print_footer();
|
||||
// reset the form selections
|
||||
unset($_POST);
|
||||
$user_bulk_form = new user_bulk_form(null, get_selection_data($ufiltering));
|
||||
}
|
||||
// do output
|
||||
admin_externalpage_print_header();
|
||||
|
||||
$ufiltering->display_add();
|
||||
$ufiltering->display_active();
|
||||
|
||||
$user_bulk_form->display();
|
||||
$action_form->display();
|
||||
|
||||
admin_externalpage_print_footer();
|
||||
|
||||
?>
|
||||
|
||||
@@ -6,46 +6,48 @@
|
||||
require_once('../../config.php');
|
||||
require_once($CFG->libdir.'/adminlib.php');
|
||||
|
||||
$confirm = optional_param('confirm', 0, PARAM_BOOL);
|
||||
$sitecontext = get_context_instance(CONTEXT_SYSTEM, SITEID);
|
||||
require_capability('moodle/user:update', $sitecontext);
|
||||
|
||||
// clean-up users list
|
||||
$primaryadmin = get_admin();
|
||||
$userlist = array();
|
||||
foreach ($SESSION->bulk_susers as $k => $v) {
|
||||
$user = get_record('user', 'id', $v, null, null, null, null, 'id,firstname,lastname,username,secret,confirmed,mnethostid,auth');
|
||||
if (!empty($user) && $user->id != $primaryadmin->id && !$user->confirmed && !is_mnet_remote_user($user)) {
|
||||
$userlist[$k] = $user;
|
||||
}
|
||||
}
|
||||
|
||||
if (empty($userlist)) {
|
||||
redirect($CFG->wwwroot . '/admin/user/user_bulk.php');
|
||||
}
|
||||
$confirm = optional_param('confirm', 0, PARAM_BOOL);
|
||||
|
||||
admin_externalpage_setup('userbulk');
|
||||
require_capability('moodle/user:update', get_context_instance(CONTEXT_SYSTEM));
|
||||
|
||||
$return = $CFG->wwwroot.'/'.$CFG->admin.'/user/user_bulk.php';
|
||||
|
||||
if (empty($SESSION->bulk_users)) {
|
||||
redirect($return);
|
||||
}
|
||||
|
||||
admin_externalpage_print_header();
|
||||
|
||||
if (empty($confirm)) {
|
||||
$usernames = array();
|
||||
foreach ($userlist as $user) {
|
||||
$usernames[] =& fullname($user, true);
|
||||
//TODO: add support for large number of users
|
||||
|
||||
if ($confirm and confirm_sesskey()) {
|
||||
$in = implode(',', $SESSION->bulk_users);
|
||||
if ($rs = get_recordset_select('user', "id IN ($in)", '', 'id, username, secret, confirmed, auth, firstname, lastname')) {
|
||||
while ($user = rs_fetch_next_record($rs)) {
|
||||
if ($user->confirmed) {
|
||||
continue;
|
||||
}
|
||||
$auth = get_auth_plugin($user->auth);
|
||||
$result = $auth->user_confirm(addslashes($user->username), addslashes($user->secret));
|
||||
if ($result != AUTH_CONFIRM_OK && $result != AUTH_CONFIRM_ALREADY) {
|
||||
notify(get_string('usernotconfirmed', '', fullname($user, true)));
|
||||
}
|
||||
}
|
||||
rs_close($rs);
|
||||
}
|
||||
$usernames = implode(', ', $usernames);
|
||||
redirect($return, get_string('changessaved'));
|
||||
|
||||
} else {
|
||||
$in = implode(',', $SESSION->bulk_users);
|
||||
$userlist = get_records_select_menu('user', "id IN ($in)", 'fullname', 'id,'.sql_fullname().' AS fullname');
|
||||
$usernames = implode(', ', $userlist);
|
||||
$optionsyes = array();
|
||||
$optionsyes['confirm'] = 1;
|
||||
$optionsyes['sesskey'] = sesskey();
|
||||
print_heading(get_string('confirmation', 'admin'));
|
||||
notice_yesno(get_string('confirmcheckfull', '', $usernames), 'user_bulk_confirm.php', 'user_bulk.php', $optionsyes, NULL, 'post', 'get');
|
||||
} else {
|
||||
foreach ($userlist as $k => $user) {
|
||||
$auth = get_auth_plugin($user->auth);
|
||||
$result = $auth->user_confirm(addslashes($user->username), addslashes($user->secret));
|
||||
if ($result != AUTH_CONFIRM_OK && $result != AUTH_CONFIRM_ALREADY) {
|
||||
notify(get_string('usernotconfirmed', '', fullname($user, true)));
|
||||
}
|
||||
}
|
||||
redirect($CFG->wwwroot . '/admin/user/user_bulk.php', get_string('changessaved'));
|
||||
}
|
||||
|
||||
admin_externalpage_print_footer();
|
||||
?>
|
||||
@@ -6,46 +6,47 @@
|
||||
require_once('../../config.php');
|
||||
require_once($CFG->libdir.'/adminlib.php');
|
||||
|
||||
$confirm = optional_param('confirm', 0, PARAM_BOOL);
|
||||
$sitecontext = get_context_instance(CONTEXT_SYSTEM, SITEID);
|
||||
|
||||
require_capability('moodle/user:delete', $sitecontext);
|
||||
|
||||
// clean-up users list
|
||||
$primaryadmin = get_admin();
|
||||
$userlist = array();
|
||||
foreach ($SESSION->bulk_susers as $k => $v) {
|
||||
$user = get_record('user', 'id', $v, null, null, null, null, 'id,firstname,lastname,email,auth');
|
||||
if (!empty($user) && $user->id != $primaryadmin->id) {
|
||||
$userlist[$k] = $user;
|
||||
}
|
||||
}
|
||||
|
||||
if (empty($userlist)) {
|
||||
redirect($CFG->wwwroot . '/admin/user/user_bulk.php');
|
||||
}
|
||||
$confirm = optional_param('confirm', 0, PARAM_BOOL);
|
||||
|
||||
admin_externalpage_setup('userbulk');
|
||||
require_capability('moodle/user:delete', get_context_instance(CONTEXT_SYSTEM));
|
||||
|
||||
$return = $CFG->wwwroot.'/'.$CFG->admin.'/user/user_bulk.php';
|
||||
|
||||
if (empty($SESSION->bulk_users)) {
|
||||
redirect($return);
|
||||
}
|
||||
|
||||
admin_externalpage_print_header();
|
||||
if (empty($confirm)) {
|
||||
$usernames = array();
|
||||
foreach ($userlist as $user) {
|
||||
$usernames[] =& fullname($user, true);
|
||||
|
||||
//TODO: add support for large number of users
|
||||
|
||||
if ($confirm and confirm_sesskey()) {
|
||||
$primaryadmin = get_admin();
|
||||
|
||||
$in = implode(',', $SESSION->bulk_users);
|
||||
if ($rs = get_recordset_select('user', "id IN ($in)")) {
|
||||
while ($user = rs_fetch_next_record($rs)) {
|
||||
if ($primaryadmin->id != $user->id and $USER->id != $user->id and delete_user($user)) {
|
||||
unset($SESSION->bulk_users[$user->id]);
|
||||
} else {
|
||||
notify(get_string('deletednot', '', fullname($user, true)));
|
||||
}
|
||||
}
|
||||
rs_close($rs);
|
||||
}
|
||||
$usernames = implode(', ', $usernames);
|
||||
redirect($return, get_string('changessaved'));
|
||||
|
||||
} else {
|
||||
$in = implode(',', $SESSION->bulk_users);
|
||||
$userlist = get_records_select_menu('user', "id IN ($in)", 'fullname', 'id,'.sql_fullname().' AS fullname');
|
||||
$usernames = implode(', ', $userlist);
|
||||
$optionsyes = array();
|
||||
$optionsyes['confirm'] = 1;
|
||||
$optionsyes['sesskey'] = sesskey();
|
||||
print_heading(get_string('confirmation', 'admin'));
|
||||
notice_yesno(get_string('deletecheckfull', '', $usernames), 'user_bulk_delete.php', 'user_bulk.php', $optionsyes, NULL, 'post', 'get');
|
||||
} else {
|
||||
foreach ($userlist as $k => $user) {
|
||||
if (delete_user($user)) {
|
||||
unset($SESSION->bulk_susers[$k]);
|
||||
} else {
|
||||
notify(get_string('deletednot', '', fullname($user, true)));
|
||||
}
|
||||
}
|
||||
redirect($CFG->wwwroot . '/admin/user/user_bulk.php', get_string('changessaved'));
|
||||
}
|
||||
|
||||
admin_externalpage_print_footer();
|
||||
?>
|
||||
|
||||
@@ -1,76 +1,81 @@
|
||||
<?php // $Id$
|
||||
|
||||
require_once('../../config.php');
|
||||
require_once($CFG->libdir.'/adminlib.php');
|
||||
require_once('../../config.php');
|
||||
require_once($CFG->libdir.'/adminlib.php');
|
||||
|
||||
if(empty($SESSION->bulk_susers)) {
|
||||
redirect($CFG->wwwroot . '/admin/user/user_bulk.php');
|
||||
$sort = optional_param('sort', 'fullname', PARAM_ALPHA);
|
||||
$dir = optional_param('dir', 'asc', PARAM_ALPHA);
|
||||
|
||||
admin_externalpage_setup('userbulk');
|
||||
|
||||
$return = $CFG->wwwroot.'/'.$CFG->admin.'/user/user_bulk.php';
|
||||
|
||||
if (empty($SESSION->bulk_users)) {
|
||||
redirect($return);
|
||||
}
|
||||
|
||||
$users = $SESSION->bulk_users;
|
||||
$usertotal = get_users(false);
|
||||
$usercount = count($users);
|
||||
|
||||
$strnever = get_string('never');
|
||||
|
||||
admin_externalpage_print_header();
|
||||
|
||||
$countries = get_list_of_countries();
|
||||
|
||||
foreach ($users as $key => $id) {
|
||||
$user = get_record('user', 'id', $id, null, null, null, null, 'id, firstname, lastname, username, email, country, lastaccess, city');
|
||||
$user->fullname = fullname($user, true);
|
||||
$user->country = @$countries[$user->country];
|
||||
unset($user->firstname);
|
||||
unset($user->lastname);
|
||||
$users[$key] = $user;
|
||||
}
|
||||
unset($countries);
|
||||
|
||||
// Need to sort by date
|
||||
function sort_compare($a, $b) {
|
||||
global $sort, $dir;
|
||||
if($sort == 'lastaccess') {
|
||||
$rez = $b->lastaccess - $a->lastaccess;
|
||||
} else {
|
||||
$rez = strcasecmp(@$a->$sort, @$b->$sort);
|
||||
}
|
||||
$users = $SESSION->bulk_susers;
|
||||
$usertotal = get_users(false);
|
||||
$usercount = count($users);
|
||||
return $dir == 'desc' ? -$rez : $rez;
|
||||
}
|
||||
usort($users, 'sort_compare');
|
||||
|
||||
$sort = optional_param('sort', 'fullname', PARAM_ALPHA);
|
||||
$dir = optional_param('dir', 'asc', PARAM_ALPHA);
|
||||
|
||||
$strnever = get_string('never');
|
||||
$sitecontext = get_context_instance(CONTEXT_SYSTEM, SITEID);
|
||||
$site = get_site();
|
||||
|
||||
admin_externalpage_setup('userbulk');
|
||||
admin_externalpage_print_header();
|
||||
|
||||
$countries =& get_list_of_countries();
|
||||
foreach ($users as $key => $id) {
|
||||
$user =& get_record('user', 'id', $id, null, null, null, null, 'id,firstname,lastname,username,email,country,lastaccess,city');
|
||||
$user->fullname = fullname($user, true);
|
||||
$user->country = @$countries[$user->country];
|
||||
unset($user->firstname);
|
||||
unset($user->lastname);
|
||||
$users[$key] = $user;
|
||||
}
|
||||
unset($countries);
|
||||
|
||||
// Need to sort by data
|
||||
function sort_compare($a, $b) {
|
||||
global $sort, $dir;
|
||||
if($sort == 'lastaccess') {
|
||||
$rez = $b->lastaccess - $a->lastaccess;
|
||||
} else {
|
||||
$rez = strcasecmp(@$a->$sort, @$b->$sort);
|
||||
}
|
||||
return $dir == 'desc' ? -$rez : $rez;
|
||||
}
|
||||
usort($users, 'sort_compare');
|
||||
|
||||
$table->width = "95%";
|
||||
$columns = array('fullname', 'username', 'email', 'city', 'country', 'lastaccess');
|
||||
foreach ($columns as $column) {
|
||||
$strtitle = get_string($column);
|
||||
if ($sort != $column) {
|
||||
$columnicon = '';
|
||||
$columndir = 'asc';
|
||||
} else {
|
||||
$columndir = $dir == 'asc' ? 'desc' : 'asc';
|
||||
$columnicon = ' <img src="' . $CFG->pixpath . '/t/' . ($dir == 'asc' ? 'down' : 'up' ). '.gif" alt="" />';
|
||||
}
|
||||
$table->head[] = '<a href="user_bulk_display.php?sort=' . $column . '&dir=' . $columndir .'">' .$strtitle . '</a>' . $columnicon;
|
||||
$table->align[] = 'left';
|
||||
$table->width = "95%";
|
||||
$columns = array('fullname', /*'username', */'email', 'city', 'country', 'lastaccess');
|
||||
foreach ($columns as $column) {
|
||||
$strtitle = get_string($column);
|
||||
if ($sort != $column) {
|
||||
$columnicon = '';
|
||||
$columndir = 'asc';
|
||||
} else {
|
||||
$columndir = $dir == 'asc' ? 'desc' : 'asc';
|
||||
$columnicon = ' <img src="'.$CFG->pixpath.'/t/'.($dir == 'asc' ? 'down' : 'up' ).'.gif" alt="" />';
|
||||
}
|
||||
$table->head[] = '<a href="user_bulk_display.php?sort='.$column.'&dir='.$columndir.'">'.$strtitle.'</a>'.$columnicon;
|
||||
$table->align[] = 'left';
|
||||
}
|
||||
|
||||
foreach($users as $user) {
|
||||
$table->data[] = array (
|
||||
'<a href="' . $CFG->wwwroot . '/user/view.php?id=' . $user->id . '&course=' . $site->id .'">' . $user->fullname .'</a>',
|
||||
$user->username,
|
||||
$user->email,
|
||||
$user->city,
|
||||
$user->country,
|
||||
$user->lastaccess ? format_time(time() - $user->lastaccess) : $strnever
|
||||
);
|
||||
}
|
||||
foreach($users as $user) {
|
||||
$table->data[] = array (
|
||||
'<a href="'.$CFG->wwwroot.'/user/view.php?id='.$user->id.'&course='.SITEID.'">'.$user->fullname.'</a>',
|
||||
// $user->username,
|
||||
$user->email,
|
||||
$user->city,
|
||||
$user->country,
|
||||
$user->lastaccess ? format_time(time() - $user->lastaccess) : $strnever
|
||||
);
|
||||
}
|
||||
|
||||
print_heading("$usercount / $usertotal ".get_string('users'));
|
||||
print_table($table);
|
||||
print_heading("$usercount / $usertotal ".get_string('users'));
|
||||
print_table($table);
|
||||
|
||||
admin_externalpage_print_footer();
|
||||
print_continue($return);
|
||||
|
||||
admin_externalpage_print_footer();
|
||||
?>
|
||||
@@ -1,182 +0,0 @@
|
||||
<?php //$Id$
|
||||
|
||||
require_once($CFG->libdir.'/formslib.php');
|
||||
require_once($CFG->libdir . '/datalib.php');
|
||||
|
||||
class user_bulk_form extends moodleform {
|
||||
/**
|
||||
* Quickform select object for the available users.
|
||||
*/
|
||||
var $ausers;
|
||||
/**
|
||||
* Quickform select object for the selected users.
|
||||
*/
|
||||
var $susers;
|
||||
// form definition
|
||||
function definition() {
|
||||
$mform =& $this->_form;
|
||||
$mform->addElement('header', 'users', get_string('usersinlist', 'bulkusers'));
|
||||
|
||||
$this->ausers =& $mform->createElement('select', 'ausers', get_string('available', 'bulkusers'), null, 'size="15"');
|
||||
$this->ausers->setMultiple(true);
|
||||
$this->susers =& $mform->createElement('select', 'susers', get_string('selected', 'bulkusers'), null, 'size="15"');
|
||||
$this->susers->setMultiple(true);
|
||||
|
||||
$objs = array();
|
||||
$objs[] = &$this->ausers;
|
||||
$objs[] = &$this->susers;
|
||||
|
||||
$grp =& $mform->addElement('group', 'usersgrp', get_string('users'), $objs, ' ', false);
|
||||
$grp->setHelpButton(array('lists','','bulkusers'));
|
||||
|
||||
$mform->addElement('static', 'comment');
|
||||
|
||||
$objs = array();
|
||||
$objs[] =& $mform->createElement('submit', 'addone', get_string('addsel', 'bulkusers'));
|
||||
$objs[] =& $mform->createElement('submit', 'addall', get_string('addall', 'bulkusers'));
|
||||
$objs[] =& $mform->createElement('submit', 'deletesel', get_string('deletesel', 'bulkusers'));
|
||||
$objs[] =& $mform->createElement('submit', 'deleteall', get_string('deleteall', 'bulkusers'));
|
||||
$grp =& $mform->addElement('group', 'buttonsgrp', get_string('selectedlist', 'bulkusers'), $objs, array(' ', '<br />'), false);
|
||||
$grp->setHelpButton(array('selectedlist','','bulkusers'));
|
||||
|
||||
$objs = array();
|
||||
$objs[] =& $mform->createElement('select', 'action', get_string('withselected'), @$this->_customdata);
|
||||
$objs[] =& $mform->createElement('submit', 'doaction', get_string('go'));;
|
||||
$mform->addElement('group', 'actionsgrp', get_string('withselectedusers'), $objs, ' ', false);
|
||||
|
||||
$renderer =& $mform->defaultRenderer();
|
||||
$template = '<label class="qflabel" style="vertical-align:top">{label}</label> {element}';
|
||||
$renderer->setGroupElementTemplate($template, 'usersgrp');
|
||||
}
|
||||
|
||||
function setUserCount($count=-1, $comment=null) {
|
||||
global $SESSION;
|
||||
if($count < 0) {
|
||||
$count = count($SESSION->bulk_ausers);
|
||||
}
|
||||
$obj =& $this->_form->getElement('comment');
|
||||
$obj->setLabel($comment);
|
||||
$obj->setText(get_string('usersfound', 'bulkusers', $count) . ' ' .get_string('usersselected', 'bulkusers', count(@$SESSION->bulk_susers)));
|
||||
}
|
||||
|
||||
function definition_after_data() {
|
||||
global $SESSION;
|
||||
$this->_updateSelection($this->get_data());
|
||||
$this->setSelectedUsers($SESSION->bulk_susers);
|
||||
if(empty($SESSION->bulk_susers)) {
|
||||
$this->_form->removeElement('actionsgrp');
|
||||
}
|
||||
//$this->setUserCount();
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates the user selection based on the data submited to the form.
|
||||
* @param object $data object with data received by the form
|
||||
*/
|
||||
function _updateSelection($data) {
|
||||
global $SESSION;
|
||||
if(!is_array(@$SESSION->bulk_susers)) {
|
||||
$SESSION->bulk_susers = array();
|
||||
}
|
||||
// if the forms was not submited, then quit
|
||||
if(is_null($data)){
|
||||
return;
|
||||
}
|
||||
if(@$data->addall) {
|
||||
if(!empty($SESSION->bulk_ausers)) {
|
||||
$SESSION->bulk_susers = array_merge($SESSION->bulk_susers, $SESSION->bulk_ausers);
|
||||
}
|
||||
} else if(@$data->addone) {
|
||||
if(!empty($data->ausers)) {
|
||||
$SESSION->bulk_susers = array_merge($SESSION->bulk_susers, array_values($data->ausers));
|
||||
}
|
||||
} else if(@$data->deletesel) {
|
||||
if(!empty($data->susers)) {
|
||||
$SESSION->bulk_susers = array_diff($SESSION->bulk_susers, array_values($data->susers));
|
||||
}
|
||||
} else if(@$data->deleteall) {
|
||||
$SESSION->bulk_susers = array();
|
||||
}
|
||||
$SESSION->bulk_susers = array_unique($SESSION->bulk_susers);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the available users list, based on their ids
|
||||
* @param array $ausers array of user ids
|
||||
*/
|
||||
function setAvailableUsers($ausers) {
|
||||
$sqlwhere = null;
|
||||
if(!empty($ausers)) {
|
||||
$sqlwhere = 'id IN (' . implode(',', $ausers) . ')';
|
||||
}
|
||||
$this->setAvailableUsersSQL($sqlwhere);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the available users list, based on a SQL where condition
|
||||
* @param string $sqlwhere filter for the users
|
||||
*/
|
||||
function setAvailableUsersSQL($sqlwhere=null) {
|
||||
global $SESSION;
|
||||
if(is_null($sqlwhere) || ($users =& $this->getUserData($sqlwhere))===false) {
|
||||
$users = array();
|
||||
}
|
||||
$SESSION->bulk_ausers =& array_keys($users);
|
||||
$this->ausers->load($users);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the selected users list, based on their ids
|
||||
* @param array $ausers array of user ids
|
||||
*/
|
||||
function setSelectedUsers($susers) {
|
||||
$sqlwhere = null;
|
||||
if(!empty($susers)) {
|
||||
$sqlwhere = 'id IN (' . implode(',', $susers) . ')';
|
||||
}
|
||||
$this->setSelectedUsersSQL($sqlwhere);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the selected users list, based on a SQL where condition
|
||||
* @param string $sqlwhere filter for the users
|
||||
*/
|
||||
function setSelectedUsersSQL($sqlwhere=null) {
|
||||
global $SESSION;
|
||||
if(is_null($sqlwhere) || ($users =& $this->getUserData($sqlwhere))===false) {
|
||||
$users = array();
|
||||
}
|
||||
$SESSION->bulk_susers =& array_keys($users);
|
||||
$this->susers->load($users);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns information about the users.
|
||||
* @param string $sqlwhere filter for the users
|
||||
*/
|
||||
function getUserData($sqlwhere) {
|
||||
return get_records_select_menu('user', $sqlwhere, 'fullname', 'id,' . sql_fullname() . ' AS fullname');
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an array of ids of selected users.
|
||||
* @return array of selected users' ids
|
||||
*/
|
||||
function getSelectedUsers() {
|
||||
global $SESSION;
|
||||
return $SESSION->bulk_susers;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an int code of the action to be performed.
|
||||
* @return int code of the action or false if no action should be performed
|
||||
*/
|
||||
function getAction() {
|
||||
$data =& $this->get_data();
|
||||
if(!$this->is_submitted() || empty($data->doaction)){
|
||||
return false;
|
||||
}
|
||||
return $data->action;
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -0,0 +1,106 @@
|
||||
<?php //$Id$
|
||||
|
||||
require_once($CFG->libdir.'/formslib.php');
|
||||
require_once($CFG->libdir.'/datalib.php');
|
||||
|
||||
class user_bulk_action_form extends moodleform {
|
||||
function definition() {
|
||||
global $CFG;
|
||||
|
||||
$mform =& $this->_form;
|
||||
|
||||
$syscontext = get_context_instance(CONTEXT_SYSTEM);
|
||||
$actions = array(0=>get_string('choose').'...');
|
||||
if (has_capability('moodle/user:update', $syscontext)) {
|
||||
$actions[1] = get_string('confirm');
|
||||
}
|
||||
if (has_capability('moodle/site:readallmessages', $syscontext) && !empty($CFG->messaging)) {
|
||||
$actions[2] = get_string('messageselectadd');
|
||||
}
|
||||
if (has_capability('moodle/user:delete', $syscontext)) {
|
||||
$actions[3] = get_string('delete');
|
||||
}
|
||||
$actions[4] = get_string('displayonpage');
|
||||
|
||||
$objs = array();
|
||||
$objs[] =& $mform->createElement('select', 'action', null, $actions);
|
||||
$objs[] =& $mform->createElement('submit', 'doaction', get_string('go'));
|
||||
$mform->addElement('group', 'actionsgrp', get_string('withselectedusers'), $objs, ' ', false);
|
||||
}
|
||||
}
|
||||
|
||||
class user_bulk_form extends moodleform {
|
||||
function definition() {
|
||||
|
||||
$mform =& $this->_form;
|
||||
$acount =& $this->_customdata['acount'];
|
||||
$scount =& $this->_customdata['scount'];
|
||||
$ausers =& $this->_customdata['ausers'];
|
||||
$susers =& $this->_customdata['susers'];
|
||||
$total =& $this->_customdata['total'];
|
||||
|
||||
$achoices = array();
|
||||
$schoices = array();
|
||||
|
||||
if (is_array($ausers)) {
|
||||
if ($total == $acount) {
|
||||
$achoices[0] = get_string('allusers', 'bulkusers', $total);
|
||||
} else {
|
||||
$a = new object();
|
||||
$a->total = $total;
|
||||
$a->count = $acount;
|
||||
$achoices[0] = get_string('allfilteredusers', 'bulkusers', $a);
|
||||
}
|
||||
$achoices = $achoices + $ausers;
|
||||
|
||||
if ($acount > MAX_BULK_USERS) {
|
||||
$achoices[-1] = '...';
|
||||
}
|
||||
|
||||
} else {
|
||||
$achoices[-1] = get_string('nofilteredusers', 'bulkusers', $total);
|
||||
}
|
||||
|
||||
if (is_array($susers)) {
|
||||
$a = new object();
|
||||
$a->total = $total;
|
||||
$a->count = $scount;
|
||||
$schoices[0] = get_string('allselectedusers', 'bulkusers', $a);
|
||||
$schoices = $schoices + $susers;
|
||||
|
||||
if ($scount > MAX_BULK_USERS) {
|
||||
$schoices[-1] = '...';
|
||||
}
|
||||
|
||||
} else {
|
||||
$schoices[-1] = get_string('noselectedusers', 'bulkusers');
|
||||
}
|
||||
|
||||
$mform->addElement('header', 'users', get_string('usersinlist', 'bulkusers'));
|
||||
|
||||
$objs = array();
|
||||
$objs[0] =& $mform->createElement('select', 'ausers', get_string('available', 'bulkusers'), $achoices, 'size="15"');
|
||||
$objs[0]->setMultiple(true);
|
||||
$objs[1] =& $mform->createElement('select', 'susers', get_string('selected', 'bulkusers'), $schoices, 'size="15"');
|
||||
$objs[1]->setMultiple(true);
|
||||
|
||||
|
||||
$grp =& $mform->addElement('group', 'usersgrp', get_string('users'), $objs, ' ', false);
|
||||
$grp->setHelpButton(array('lists','','bulkusers'));
|
||||
|
||||
$mform->addElement('static', 'comment');
|
||||
|
||||
$objs = array();
|
||||
$objs[] =& $mform->createElement('submit', 'addsel', get_string('addsel', 'bulkusers'));
|
||||
$objs[] =& $mform->createElement('submit', 'removesel', get_string('removesel', 'bulkusers'));
|
||||
$objs[] =& $mform->createElement('submit', 'addall', get_string('addall', 'bulkusers'));
|
||||
$objs[] =& $mform->createElement('submit', 'removeall', get_string('removeall', 'bulkusers'));
|
||||
$grp =& $mform->addElement('group', 'buttonsgrp', get_string('selectedlist', 'bulkusers'), $objs, array(' ', '<br />'), false);
|
||||
$grp->setHelpButton(array('selectedlist','','bulkusers'));
|
||||
|
||||
$renderer =& $mform->defaultRenderer();
|
||||
$template = '<label class="qflabel" style="vertical-align:top">{label}</label> {element}';
|
||||
$renderer->setGroupElementTemplate($template, 'usersgrp');
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -1,48 +1,71 @@
|
||||
<?php //$Id$
|
||||
require_once('../../config.php');
|
||||
require_once($CFG->dirroot.'/message/lib.php');
|
||||
require_once($CFG->libdir.'/adminlib.php');
|
||||
|
||||
require_login();
|
||||
require_capability('moodle/site:readallmessages', $sitecontext);
|
||||
// fix for MDL-10112
|
||||
if (empty($CFG->messaging)) {
|
||||
error("Messaging is disabled on this site");
|
||||
}
|
||||
|
||||
$users = $SESSION->bulk_susers;
|
||||
$sitecontext = get_context_instance(CONTEXT_SYSTEM, SITEID);
|
||||
|
||||
require_once($CFG->dirroot.'/message/lib.php');
|
||||
require_once('user_message_form.php');
|
||||
$extradata['userlist'] =& $users;
|
||||
$noteform =& new user_message_form('user_bulk_message.php', $extradata);
|
||||
// if no users or action canceled, return to users page
|
||||
if (empty($users) || $noteform->is_cancelled()) {
|
||||
redirect($CFG->wwwroot . '/admin/user/user_bulk.php');
|
||||
}
|
||||
|
||||
$formdata =& $noteform->get_data();
|
||||
// if we have the message and the command, then send it
|
||||
if ($noteform->is_submitted() && !empty($formdata->send)) {
|
||||
if(empty($formdata->messagebody)) {
|
||||
notify(get_string('allfieldsrequired'));
|
||||
} else {
|
||||
foreach ($users as $u) {
|
||||
if ($user = get_record('user', 'id', $u)) {
|
||||
message_post_message($USER, $user, addslashes($formdata->messagebody), $formdata->format, 'direct');
|
||||
}
|
||||
}
|
||||
redirect($CFG->wwwroot . '/admin/user/user_bulk.php');
|
||||
}
|
||||
}
|
||||
$msg = optional_param('msg', '', PARAM_CLEAN);
|
||||
$confirm = optional_param('confirm', 0, PARAM_BOOL);
|
||||
|
||||
admin_externalpage_setup('userbulk');
|
||||
admin_externalpage_print_header();
|
||||
if ($noteform->is_submitted() && !empty($formdata->preview)) {
|
||||
echo '<h3>'.get_string('previewhtml').'</h3>';
|
||||
echo '<div class="messagepreview">'. format_text(stripslashes($formdata->messagebody),$formdata->format). '</div>';
|
||||
require_capability('moodle/site:readallmessages', get_context_instance(CONTEXT_SYSTEM));
|
||||
|
||||
$return = $CFG->wwwroot.'/'.$CFG->admin.'/user/user_bulk.php';
|
||||
|
||||
if (empty($SESSION->bulk_users)) {
|
||||
redirect($return);
|
||||
}
|
||||
|
||||
$noteform->display();
|
||||
if (empty($CFG->messaging)) {
|
||||
error("Messaging is disabled on this site");
|
||||
}
|
||||
|
||||
//TODO: add support for large number of users
|
||||
|
||||
if ($confirm and !empty($msg) and confirm_sesskey()) {
|
||||
$in = implode(',', $SESSION->bulk_users);
|
||||
if ($rs = get_recordset_select('user', "id IN ($in)")) {
|
||||
while ($user = rs_fetch_next_record($rs)) {
|
||||
message_post_message($USER, $user, $msg, FORMAT_HTML, 'direct');
|
||||
}
|
||||
}
|
||||
redirect($return);
|
||||
}
|
||||
|
||||
// disable html editor if not enabled in preferences
|
||||
if (!get_user_preferences('message_usehtmleditor', 0)) {
|
||||
$CFG->htmleditor = '';
|
||||
}
|
||||
|
||||
$msgform = new user_message_form('user_bulk_message.php');
|
||||
|
||||
if ($msgform->is_cancelled()) {
|
||||
redirect($return);
|
||||
|
||||
} else if ($formdata = $msgform->get_data(false)) {
|
||||
$options = new object();
|
||||
$options->para = false;
|
||||
$options->newlines = true;
|
||||
$options->smiley = false;
|
||||
|
||||
$msg = format_text($formdata->messagebody, $formdata->format, $options);
|
||||
|
||||
$in = implode(',', $SESSION->bulk_users);
|
||||
$userlist = get_records_select_menu('user', "id IN ($in)", 'fullname', 'id,'.sql_fullname().' AS fullname');
|
||||
$usernames = implode(', ', $userlist);
|
||||
$optionsyes = array();
|
||||
$optionsyes['confirm'] = 1;
|
||||
$optionsyes['sesskey'] = sesskey();
|
||||
$optionsyes['msg'] = $msg;
|
||||
admin_externalpage_print_header();
|
||||
print_heading(get_string('confirmation', 'admin'));
|
||||
print_box($msg, 'boxwidthnarrow boxaligncenter generalbox', 'preview');
|
||||
notice_yesno(get_string('confirmmessage', 'bulkusers', $usernames), 'user_bulk_message.php', 'user_bulk.php', $optionsyes, NULL, 'post', 'get');
|
||||
admin_externalpage_print_footer();
|
||||
die;
|
||||
}
|
||||
|
||||
admin_externalpage_print_header();
|
||||
$msgform->display();
|
||||
admin_externalpage_print_footer();
|
||||
?>
|
||||
@@ -5,29 +5,16 @@ require_once($CFG->libdir.'/formslib.php');
|
||||
class user_message_form extends moodleform {
|
||||
|
||||
function definition() {
|
||||
$mform =& $this->_form;
|
||||
$mform =& $this->_form;
|
||||
$mform->addElement('header', 'general', get_string('message', 'message'));
|
||||
|
||||
$mform->addElement('textarea', 'messagebody', get_string('messagebody'), array('rows'=>15, 'cols'=>30));
|
||||
$mform->setType('messagebody', PARAM_CLEANHTML);
|
||||
|
||||
$mform->addElement('textarea', 'messagebody', get_string('messagebody'), array('rows'=>15, 'cols'=>60));
|
||||
$mform->addRule('messagebody', '', 'required', null, 'client');
|
||||
$mform->setHelpButton('messagebody', array('writing', 'reading', 'questions', 'richtext'), false, 'editorhelpbutton');
|
||||
|
||||
$mform->addElement('format', 'format', get_string('format'));
|
||||
|
||||
$objs = array();
|
||||
foreach($this->_customdata['userlist'] as $k=>$u) {
|
||||
$user = get_record('user', 'id', $u);
|
||||
$objs[] =& $mform->createElement('static', null, null, '<input type="checkbox" name="userid['. $k .']" checked="checked" value="'.$u . '" />'. fullname($user));
|
||||
}
|
||||
$mform->addElement('group', 'users', 'Users', $objs, '<br />', false);
|
||||
|
||||
$objs = array();
|
||||
$objs[] = &$mform->createElement('submit', 'send', 'Send');
|
||||
$objs[] = &$mform->createElement('submit', 'preview', 'Preview');
|
||||
$objs[] = &$mform->createElement('cancel');
|
||||
$mform->addElement('group', 'buttonar', '', $objs, ' ', false);
|
||||
$mform->closeHeaderBefore('buttonar');
|
||||
$this->add_action_buttons();
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -1,11 +1,17 @@
|
||||
<?php //$Id$
|
||||
$string['usersinlist'] = 'Users in list';
|
||||
$string['addall'] = 'Add all to selection';
|
||||
$string['addsel'] = 'Add to selection';
|
||||
$string['deleteall'] = 'Clear all users';
|
||||
$string['deletesel'] = 'Clear selected users';
|
||||
$string['allfilteredusers'] = 'All filtered ($a->count/$a->total)';
|
||||
$string['allselectedusers'] = 'All selected ($a->count/$a->total)';
|
||||
$string['allusers'] = 'All users ($a)';
|
||||
$string['available'] = 'Available';
|
||||
$string['addall'] = 'Add all';
|
||||
$string['addsel'] = 'Add to selection';
|
||||
$string['confirmmessage'] = 'Do you really want to send the message above to all these users?<br />$a' ;
|
||||
$string['noselectedusers'] = 'No users selected';
|
||||
$string['nofilteredusers'] = 'No users found (0/$a)';
|
||||
$string['removesel'] = 'Remove from selection';
|
||||
$string['removeall'] = 'Remove all';
|
||||
$string['selected'] = 'Selected';
|
||||
$string['selectedlist'] = 'Selected user list...';
|
||||
$string['usersfound'] = '$a user(s) found.';
|
||||
$string['usersselected'] = '$a user(s) selected.';
|
||||
$string['usersinlist'] = 'Users in list';
|
||||
$string['usersselected'] = '$a user(s) selected.';
|
||||
|
||||
+29
-20
@@ -1,28 +1,37 @@
|
||||
<?php //$Id$
|
||||
$string['actfilterhdr'] = 'Active filters (ORed together)';
|
||||
$string['actfilterhdr'] = 'Active filters';
|
||||
$string['addfilter'] = 'Add filter';
|
||||
$string['anyvalue'] = 'any value';
|
||||
$string['anyrole'] = 'any role';
|
||||
$string['anyfield'] = 'any field';
|
||||
$string['newfilter'] = 'New filter';
|
||||
$string['setfilter'] = 'Set filter';
|
||||
$string['removeall'] = 'Remove all';
|
||||
$string['removeselected'] = 'Remove selected';
|
||||
$string['anycourse'] = 'any course';
|
||||
$string['anycategory'] = 'any category';
|
||||
$string['anycourse'] = 'any course';
|
||||
$string['anyfield'] = 'any field';
|
||||
$string['anyrole'] = 'any role';
|
||||
$string['anyvalue'] = 'any value';
|
||||
$string['categoryrole'] = 'Category role';
|
||||
$string['contains'] = 'contains';
|
||||
$string['courserole'] = 'Course role';
|
||||
$string['courserolelabel'] = '$a->label is $a->rolename in $a->coursename from $a->categoryname';
|
||||
$string['courserolelabelerror'] = '$a->label error: course $a->coursename does not exist';
|
||||
$string['datelabelisafter'] = '$a->label is after $a->after';
|
||||
$string['datelabelisbefore'] = '$a->label is before $a->before';
|
||||
$string['datelabelisbetween'] = '$a->label is between $a->after and $a->before';
|
||||
$string['doesnotcontain'] = 'doesn\'t contain';
|
||||
$string['endswith'] = 'ends with';
|
||||
$string['firstaccess'] = 'First access';
|
||||
$string['globalrolelabel'] = '$a->label is $a->value';
|
||||
$string['isanyvalue'] = 'is any value';
|
||||
$string['isafter'] = 'is after';
|
||||
$string['isbefore'] = 'is before';
|
||||
$string['isdefined'] = 'is defined';
|
||||
$string['isempty'] = 'is empty';
|
||||
$string['isequalto'] = 'is equal to';
|
||||
$string['isnotequalto'] = 'isn\'t equal to';
|
||||
$string['startswith'] = 'starts with';
|
||||
$string['endswith'] = 'ends with';
|
||||
$string['isempty'] = 'is empty';
|
||||
$string['isbefore'] = 'is before $a';
|
||||
$string['isafter'] = 'is after $a';
|
||||
$string['isbetween'] = 'is between $a[0] and $a[1]';
|
||||
$string['isnotdefined'] = 'isn\'t defined';
|
||||
$string['isdefined'] = 'is defined';
|
||||
$string['isanyvalue'] = 'is any value';
|
||||
$string['categoryrole'] = 'Category role';
|
||||
$string['courserole'] = 'Course role';
|
||||
$string['firstaccess'] = 'First access';
|
||||
$string['newfilter'] = 'New filter';
|
||||
$string['profilelabel'] = '$a->label: $a->profile $a->operator $a->value';
|
||||
$string['profilelabelnovalue'] = '$a->label: $a->profile $a->operator';
|
||||
$string['removeall'] = 'Remove all filters';
|
||||
$string['removeselected'] = 'Remove selected';
|
||||
$string['selectlabel'] = '$a->label $a->operator $a->value';
|
||||
$string['startswith'] = 'starts with';
|
||||
$string['textlabel'] = '$a->label $a->operator $a->value';
|
||||
$string['textlabelnovalue'] = '$a->label $a->operator';
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
<h2>Selected user list...</h2>
|
||||
|
||||
<ul>
|
||||
<li>Add to selection - adds selected users from the Available list to the Selected list. Multiple users can be selected by holding down the Apple or Ctrl key whilst clicking on the users' names.</li>
|
||||
<li>Add all to selection - adds all users from the Available list to the Selected list.</li>
|
||||
<li>Clear selected users - removes selected users from the Selected list.</li>
|
||||
<li>Clear all users - removes all users from the Selected list.</li>
|
||||
<li>Add to selection - adds selected users from the Available list to the Selected list.
|
||||
Multiple users can be selected by holding down the Apple or Ctrl key whilst clicking on the users' names.</li>
|
||||
<li>Add all - adds all users from the Available list to the Selected list.</li>
|
||||
<li>Remove from selection - removes selected users from the Selected list.</li>
|
||||
<li>Remove all - removes all users from the Selected list.</li>
|
||||
</ul>
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
<h1>Course role filter</h1>
|
||||
<p>This filter allows you to filter users based the role they have assigned in the course specified by its shortname from a specified course category (if the shortname textbox is empty, the category is "any category" and the role is "any role" then the filter is disabled).
|
||||
</p>
|
||||
<p>This filter allows you to filter users based the role they have assigned in the course
|
||||
specified by its shortname from a specified course category (if the shortname textbox is empty,
|
||||
the category is "any category" and the role is "any role" then the filter is not active).</p>
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
<h1>Date filter</h1>
|
||||
<p>This filter allows you to filter information based on a date value.
|
||||
Beside the start and end date, depending on the filter settings, you may select the date field used by the filter.</p>
|
||||
Beside the start and end date, depending on the filter settings.</p>
|
||||
@@ -1,3 +0,0 @@
|
||||
<h1>Radios filter</h1>
|
||||
<p>This filter allows you to filter information based on the option you select.
|
||||
Depending on the filter settings, the first option might be the "any value" option which disables the filter.</p>
|
||||
@@ -0,0 +1,2 @@
|
||||
<h1>Simple select filter</h1>
|
||||
<p>This filter allows you to filter information based on a drop down list. This filter does not have any extra options.</p>
|
||||
@@ -1082,6 +1082,7 @@ $string['notincluded'] = 'Not included';
|
||||
$string['notingroup'] = 'Sorry, but you need to be part of a group to see this activity.';
|
||||
$string['notpublic'] = 'Not public!';
|
||||
$string['nousersmatching'] = 'No users matching \'$a\' were found';
|
||||
$string['nousersfound'] = 'No users found';
|
||||
$string['nousersyet'] = 'There are no users yet';
|
||||
$string['now'] = 'now';
|
||||
$string['novalidcourses'] = 'No valid courses to be shown';
|
||||
|
||||
+9
-3
@@ -215,7 +215,7 @@ function get_site_users($sort='u.lastaccess DESC', $fields='*', $exceptions='')
|
||||
* @return object|false|int {@link $USER} records unless get is false in which case the integer count of the records found is returned. False is returned if an error is encountered.
|
||||
*/
|
||||
function get_users($get=true, $search='', $confirmed=false, $exceptions='', $sort='firstname ASC',
|
||||
$firstinitial='', $lastinitial='', $page='', $recordsperpage='', $fields='*') {
|
||||
$firstinitial='', $lastinitial='', $page='', $recordsperpage='', $fields='*', $extraselect='') {
|
||||
|
||||
global $CFG;
|
||||
|
||||
@@ -251,6 +251,10 @@ function get_users($get=true, $search='', $confirmed=false, $exceptions='', $sor
|
||||
$select .= ' AND lastname '. $LIKE .' \''. $lastinitial .'%\'';
|
||||
}
|
||||
|
||||
if ($extraselect) {
|
||||
$select .= " AND $extraselect ";
|
||||
}
|
||||
|
||||
if ($get) {
|
||||
return get_records_select('user', $select, $sort, $fields, $page, $recordsperpage);
|
||||
} else {
|
||||
@@ -277,7 +281,7 @@ function get_users($get=true, $search='', $confirmed=false, $exceptions='', $sor
|
||||
*/
|
||||
|
||||
function get_users_listing($sort='lastaccess', $dir='ASC', $page=0, $recordsperpage=0,
|
||||
$search='', $firstinitial='', $lastinitial='', $remotewhere='') {
|
||||
$search='', $firstinitial='', $lastinitial='', $extraselect='') {
|
||||
|
||||
global $CFG;
|
||||
|
||||
@@ -299,7 +303,9 @@ function get_users_listing($sort='lastaccess', $dir='ASC', $page=0, $recordsperp
|
||||
$select .= ' AND lastname '. $LIKE .' \''. $lastinitial .'%\' ';
|
||||
}
|
||||
|
||||
$select .= $remotewhere;
|
||||
if ($extraselect) {
|
||||
$select .= " AND $extraselect ";
|
||||
}
|
||||
|
||||
if ($sort) {
|
||||
$sort = ' ORDER BY '. $sort .' '. $dir;
|
||||
|
||||
+85
-68
@@ -1,41 +1,28 @@
|
||||
<?php //$Id$
|
||||
|
||||
require_once($CFG->dirroot . '/user/filters/lib.php');
|
||||
require_once($CFG->dirroot .'/user/filters/lib.php');
|
||||
|
||||
/**
|
||||
* User filter based on roles in a course identified by its shortname.
|
||||
*/
|
||||
class user_filter_courserole extends user_filter_type {
|
||||
/**
|
||||
* User role (0 = any role)
|
||||
*/
|
||||
var $_roleid;
|
||||
/**
|
||||
* Course category in which to search the course (0 = all categories).
|
||||
*/
|
||||
var $_categoryid;
|
||||
/**
|
||||
* Constructor
|
||||
* @param string $name the name of the filter instance
|
||||
* @param string $label the label of the filter instance
|
||||
* @param string $field the field used for filtering data
|
||||
* @param string $value the shortname of the course (used for filtering data)
|
||||
* @param int $categoryid id of the category
|
||||
* @param int $roleid id of the role
|
||||
* @param boolean $advanced advanced form element flag
|
||||
*/
|
||||
function user_filter_courserole($name, $label, $field='id', $value=null, $categoryid=0, $roleid=0) {
|
||||
parent::user_filter_type($name, $label, $field, $value);
|
||||
$this->_roleid = $roleid;
|
||||
$this->_categoryid = $categoryid;
|
||||
function user_filter_courserole($name, $label, $advanced) {
|
||||
parent::user_filter_type($name, $label, $advanced);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns an array of available roles
|
||||
* @return array of availble roles
|
||||
*/
|
||||
function getRoles() {
|
||||
$context =& get_context_instance(CONTEXT_SYSTEM);
|
||||
$roles =& array_merge(array(0=> get_string('anyrole','filters')), get_assignable_roles($context));
|
||||
function get_roles() {
|
||||
$context = get_context_instance(CONTEXT_SYSTEM);
|
||||
$roles = array_merge(array(0=> get_string('anyrole','filters')), get_assignable_roles($context));
|
||||
return $roles;
|
||||
}
|
||||
|
||||
@@ -43,7 +30,7 @@ class user_filter_courserole extends user_filter_type {
|
||||
* Returns an array of course categories
|
||||
* @return array of course categories
|
||||
*/
|
||||
function getCourseCategories() {
|
||||
function get_course_categories() {
|
||||
$displaylist = array();
|
||||
$parentlist = array();
|
||||
make_categories_list($displaylist, $parentlist);
|
||||
@@ -56,77 +43,107 @@ class user_filter_courserole extends user_filter_type {
|
||||
*/
|
||||
function setupForm(&$mform) {
|
||||
$objs = array();
|
||||
$objs[] =& $mform->createElement('select', $this->_name . '_rl', null, $this->getRoles());
|
||||
$objs[] =& $mform->createElement('select', $this->_name . '_ct', null, $this->getCourseCategories());
|
||||
$objs[] =& $mform->createElement('select', $this->_name .'_rl', null, $this->get_roles());
|
||||
$objs[] =& $mform->createElement('select', $this->_name .'_ct', null, $this->get_course_categories());
|
||||
$objs[] =& $mform->createElement('text', $this->_name, null);
|
||||
$grp =& $mform->addElement('group', $this->_name . '_grp', $this->_label, $objs, '', false);
|
||||
$grp->setHelpButton(array('courserole','','filters'));
|
||||
$mform->setDefault($this->_name, $this->_value);
|
||||
$mform->setDefault($this->_name . '_rl', $this->_roleid);
|
||||
$mform->setDefault($this->_name . '_ct', $this->_categoryid);
|
||||
$grp =& $mform->addElement('group', $this->_name.'_grp', $this->_label, $objs, '', false);
|
||||
$grp->setHelpButton(array('courserole', '', 'filters'));
|
||||
if ($this->_advanced) {
|
||||
$mform->setAdvanced($this->_name.'_grp');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 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
|
||||
*/
|
||||
function checkData($formdata) {
|
||||
$field = $this->_name;
|
||||
$role = $field . '_rl';
|
||||
$category = $field . '_ct';
|
||||
$this->_value = (string)@$formdata->$field;
|
||||
$this->_roleid = (int)@$formdata->$role;
|
||||
$this->_categoryid = (int)@$formdata->$category;
|
||||
function check_data($formdata) {
|
||||
$field = $this->_name;
|
||||
$role = $field .'_rl';
|
||||
$category = $field .'_ct';
|
||||
|
||||
if (array_key_exists($field, $formdata)) {
|
||||
if (empty($formdata->$field) and empty($formdata->$role) and empty($formdata->$category)) {
|
||||
// nothing selected
|
||||
return false;
|
||||
}
|
||||
return array('value' => (string)$formdata->$field,
|
||||
'roleid' => (int)$formdata->$role,
|
||||
'categoryid' => (int)$formdata->$category);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the condition to be used with SQL where
|
||||
* @param array $data filter settings
|
||||
* @return string the filtering condition or null if the filter is disabled
|
||||
*/
|
||||
function getSQLFilter() {
|
||||
function get_sql_filter($data) {
|
||||
global $CFG;
|
||||
if(empty($this->_value) && empty($this->_roleid) && empty($this->_categoryid)) {
|
||||
return null;
|
||||
$value = addslashes($data['value']);
|
||||
$roleid = $data['roleid'];
|
||||
$categoryid = $data['categoryid'];
|
||||
|
||||
if (empty($value) and empty($roleid) and empty($categoryid)) {
|
||||
return '';
|
||||
}
|
||||
$timenow = time();
|
||||
$where = 'WHERE b.contextlevel=50 AND timestart<' . $timenow .' AND (timeend=0 OR timeend>'. $timenow . ')';
|
||||
if($this->_roleid) {
|
||||
$where.= ' AND roleid='. $this->_roleid;
|
||||
|
||||
$timenow = round(time(), 100); // rounding - enable sql caching
|
||||
$where = "b.contextlevel=50 AND a.timestart<$timenow AND (a.timeend=0 OR a.timeend>$timenow)";
|
||||
if ($roleid) {
|
||||
$where .= " AND a.roleid=$roleid";
|
||||
}
|
||||
if($this->_categoryid) {
|
||||
$where .= ' AND category=' . $this->_categoryid;
|
||||
if ($categoryid) {
|
||||
$where .= " AND c.category=$categoryid";
|
||||
}
|
||||
if($this->_value) {
|
||||
$where .= ' AND shortname="' . $this->_value . '"';
|
||||
if ($value) {
|
||||
$where .= " AND c.shortname ".sql_ilike()." '$value'";
|
||||
}
|
||||
return $this->_field . " IN (SELECT userid FROM {$CFG->prefix}role_assignments a ".
|
||||
"INNER JOIN {$CFG->prefix}context b ON a.contextid=b.id ".
|
||||
"INNER JOIN {$CFG->prefix}course c ON b.instanceid=c.id ".
|
||||
$where . ')';
|
||||
return "id IN (SELECT userid
|
||||
FROM {$CFG->prefix}role_assignments a
|
||||
INNER JOIN {$CFG->prefix}context b ON a.contextid=b.id
|
||||
INNER JOIN {$CFG->prefix}course c ON b.instanceid=c.id
|
||||
WHERE $where)";
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns a human friendly description of the filter.
|
||||
* @return string filter description
|
||||
* Returns a human friendly description of the filter used as label.
|
||||
* @param array $data filter settings
|
||||
* @return string active filter label
|
||||
*/
|
||||
function getDescription() {
|
||||
if ($this->_roleid) {
|
||||
$roles =& $this->getRoles();
|
||||
$rolename = '"' . $roles[$this->_roleid]. '"';
|
||||
function get_label($data) {
|
||||
$value = $data['value'];
|
||||
$roleid = $data['roleid'];
|
||||
$categoryid = $data['categoryid'];
|
||||
|
||||
$a = new object();
|
||||
$a->label = $this->_label;
|
||||
|
||||
if ($roleid) {
|
||||
$rolename = get_field('role', 'name', 'id', $roleid);
|
||||
$a->rolename = '"'.format_string($rolename).'"';
|
||||
} else {
|
||||
$rolename = get_string('anyrole','filters');
|
||||
$a->rolename = get_string('anyrole', 'filters');
|
||||
}
|
||||
if ($this->_categoryid) {
|
||||
$categories=& $this->getCourseCategories();
|
||||
$categoryname = '"' . $categories[$this->_categoryid]. '"';
|
||||
|
||||
if ($categoryid) {
|
||||
$catname = get_field('course_categories', 'name', 'id', $categoryid);
|
||||
$a->categoryname = '"'.format_string($catname).'"';
|
||||
} else {
|
||||
$categoryname = get_string('anycategory', 'filters');
|
||||
$a->categoryname = get_string('anycategory', 'filters');
|
||||
}
|
||||
if ($this->_value) {
|
||||
$coursename = '"' . stripslashes($this->_value). '"';
|
||||
|
||||
if ($value) {
|
||||
$a->coursename = '"'.s($value).'"';
|
||||
if (!record_exists('course', 'shortname', addslashes($value))) {
|
||||
return '<span class="notifyproblem">'.get_string('courserolelabelerror', 'filters', $a).'</span>';
|
||||
}
|
||||
} else {
|
||||
$coursename = get_string('anycourse','filters');
|
||||
$a->coursename = get_string('anycourse', 'filters');
|
||||
}
|
||||
return $this->_label . ' is ' . $rolename. ' in ' . $coursename . ' from ' . $categoryname;
|
||||
|
||||
return get_string('courserolelabel', 'filters', $a);
|
||||
}
|
||||
}
|
||||
|
||||
+86
-65
@@ -1,112 +1,133 @@
|
||||
<?php //$Id$
|
||||
|
||||
require_once($CFG->dirroot . '/user/filters/lib.php');
|
||||
require_once($CFG->dirroot.'/user/filters/lib.php');
|
||||
|
||||
/**
|
||||
* Generic filter based on a date.
|
||||
*/
|
||||
class user_filter_date extends user_filter_type {
|
||||
/**
|
||||
* the end Unix timestamp (0 if disabled)
|
||||
*/
|
||||
var $_value2;
|
||||
/**
|
||||
* the fields available for comparisson
|
||||
*/
|
||||
var $_fields;
|
||||
var $_field;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
* @param string $name the name of the filter instance
|
||||
* @param string $label the label of the filter instance
|
||||
* @param string $field the field used for filtering data
|
||||
* @param int $start the start Unix timestamp (0 if disabled)
|
||||
* @param int $end the end Unix timestamp (0 if disabled)
|
||||
* @param boolean $advanced advanced form element flag
|
||||
* @param string $field user table filed name
|
||||
*/
|
||||
function user_filter_date($name, $label, $field, $fields=null, $start=0, $end=0) {
|
||||
parent::user_filter_type($name, $label, $field, $start);
|
||||
$this->_value2 = $end;
|
||||
$this->_fields = $fields;
|
||||
function user_filter_date($name, $label, $advanced, $field) {
|
||||
parent::user_filter_type($name, $label, $advanced);
|
||||
$this->_field = $field;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Adds controls specific to this filter in the form.
|
||||
* @param object $mform a MoodleForm object to setup
|
||||
*/
|
||||
function setupForm(&$mform) {
|
||||
$objs = array();
|
||||
if(is_array($this->_fields)) {
|
||||
$objs[] =& $mform->createElement('select', $this->_name . '_fld', null, $this->_fields);
|
||||
}
|
||||
$objs[] =& $mform->createElement('checkbox', $this->_name . '_sck', null, get_string('isafter', 'filters'));
|
||||
$objs[] =& $mform->createElement('date_selector', $this->_name . '_sdt', null);
|
||||
$objs[] =& $mform->createElement('checkbox', $this->_name . '_eck', null, get_string('isbefore', 'filters'));
|
||||
$objs[] =& $mform->createElement('date_selector', $this->_name . '_edt', null);
|
||||
$grp =& $mform->addElement('group', $this->_name . '_grp', $this->_label, $objs, '', false);
|
||||
|
||||
$objs[] =& $mform->createElement('checkbox', $this->_name.'_sck', null, get_string('isafter', 'filters'));
|
||||
$objs[] =& $mform->createElement('date_selector', $this->_name.'_sdt', null);
|
||||
$objs[] =& $mform->createElement('checkbox', $this->_name.'_eck', null, get_string('isbefore', 'filters'));
|
||||
$objs[] =& $mform->createElement('date_selector', $this->_name.'_edt', null);
|
||||
$grp =& $mform->addElement('group', $this->_name.'_grp', $this->_label, $objs, '', false);
|
||||
$grp->setHelpButton(array('date','','filters'));
|
||||
$mform->setDefault($this->_name . '_sck', !empty($this->_value));
|
||||
$mform->setDefault($this->_name . '_eck', !empty($this->_value2));
|
||||
$mform->setDefault($this->_name . '_sdt', $this->_value);
|
||||
$mform->setDefault($this->_name . '_edt', $this->_value2);
|
||||
if(is_array($this->_fields)) {
|
||||
$mform->setDefault($this->_name . '_fld', $this->_field);
|
||||
|
||||
if ($this->_advanced) {
|
||||
$mform->setAdvanced($this->_name.'_grp');
|
||||
}
|
||||
$mform->disabledIf($this->_name . '_sdt', $this->_name . '_sck');
|
||||
$mform->disabledIf($this->_name . '_edt', $this->_name . '_eck');
|
||||
|
||||
$mform->disabledIf($this->_name.'_sdt[day]', $this->_name.'_sck', 'notchecked');
|
||||
$mform->disabledIf($this->_name.'_sdt[month]', $this->_name.'_sck', 'notchecked');
|
||||
$mform->disabledIf($this->_name.'_sdt[year]', $this->_name.'_sck', 'notchecked');
|
||||
$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');
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 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
|
||||
*/
|
||||
function checkData($formdata) {
|
||||
$fld = $this->_name . '_fld';
|
||||
$sdt = $this->_name . '_sdt';
|
||||
$edt = $this->_name . '_edt';
|
||||
$sck = $this->_name . '_sck';
|
||||
$eck = $this->_name . '_eck';
|
||||
if(@$formdata->$fld) {
|
||||
$this->_field = @$formdata->$fld;
|
||||
function check_data($formdata) {
|
||||
$sck = $this->_name.'_sck';
|
||||
$sdt = $this->_name.'_sdt';
|
||||
$eck = $this->_name.'_eck';
|
||||
$edt = $this->_name.'_edt';
|
||||
|
||||
if (!array_key_exists($sck, $formdata) and !array_key_exists($eck, $formdata)) {
|
||||
return false;
|
||||
}
|
||||
$this->_value = @$formdata->$sck ? (int)@$formdata->$sdt : 0;
|
||||
$this->_value2 = @$formdata->$eck ? (int)@$formdata->$edt : 0;
|
||||
|
||||
$data = array();
|
||||
if (array_key_exists($sck, $formdata)) {
|
||||
$data['after'] = $formdata->$sdt;
|
||||
} else {
|
||||
$data['after'] = 0;
|
||||
}
|
||||
if (array_key_exists($eck, $formdata)) {
|
||||
$data['before'] = $formdata->$edt;
|
||||
} else {
|
||||
$data['before'] = 0;
|
||||
}
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the condition to be used with SQL where
|
||||
* @param array $data filter settings
|
||||
* @return string the filtering condition or null if the filter is disabled
|
||||
*/
|
||||
function getSQLFilter() {
|
||||
if(empty($this->_value) && empty($this->_value2)) {
|
||||
return null;
|
||||
function get_sql_filter($data) {
|
||||
$after = $data['after'];
|
||||
$before = $data['before'];
|
||||
$field = $this->_field;
|
||||
|
||||
if (empty($after) and empty($before)) {
|
||||
return '';
|
||||
}
|
||||
$res = $this->_field . '>0' ;
|
||||
if($this->_value) {
|
||||
$res .= ' AND ' . $this->_field . '>=' . $this->_value;
|
||||
|
||||
$res = "$field > 0" ;
|
||||
|
||||
if ($after) {
|
||||
$res .= " AND $field >= $after";
|
||||
}
|
||||
if($this->_value2) {
|
||||
$res .= ' AND ' . $this->_field . '<=' . $this->_value2;
|
||||
if ($before) {
|
||||
$res .= " AND $field <= $before";
|
||||
}
|
||||
return $res;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns a human friendly description of the filter.
|
||||
* @return string filter description
|
||||
* Returns a human friendly description of the filter used as label.
|
||||
* @param array $data filter settings
|
||||
* @return string active filter label
|
||||
*/
|
||||
function getDescription() {
|
||||
if(is_array($this->_fields)) {
|
||||
$res = $this->_fields[$this->_field] . ' ';
|
||||
} else {
|
||||
$res = $this->_label . ' ';
|
||||
function get_label($data) {
|
||||
$after = $data['after'];
|
||||
$before = $data['before'];
|
||||
$field = $this->_field;
|
||||
|
||||
$a = new object();
|
||||
$a->label = $this->_label;
|
||||
$a->after = userdate($after);
|
||||
$a->before = userdate($before);
|
||||
|
||||
if ($after and $before) {
|
||||
return get_string('datelabelisbetween', 'filters', $a);
|
||||
|
||||
} else if ($after) {
|
||||
return get_string('datelabelisafter', 'filters', $a);
|
||||
|
||||
} else if ($before) {
|
||||
return get_string('datelabelisbefore', 'filters', $a);
|
||||
}
|
||||
if($this->_value && $this->_value2) {
|
||||
$res .= get_string('isbetween', 'filters', array(userdate($this->_value), userdate($this->_value2)));
|
||||
} else if($this->_value) {
|
||||
$res .= get_string('isafter', 'filters', userdate($this->_value));
|
||||
} else {
|
||||
$res .= get_string('isbefore', 'filters', userdate($this->_value2));
|
||||
}
|
||||
return $res;
|
||||
return '';
|
||||
}
|
||||
}
|
||||
?>
|
||||
+45
-30
@@ -1,29 +1,29 @@
|
||||
<?php //$Id$
|
||||
|
||||
require_once($CFG->dirroot . '/user/filters/lib.php');
|
||||
require_once($CFG->dirroot.'/user/filters/lib.php');
|
||||
|
||||
/**
|
||||
* User filter based on global roles.
|
||||
*/
|
||||
class user_filter_globalrole extends user_filter_type {
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
* @param string $name the name of the filter instance
|
||||
* @param string $label the label of the filter instance
|
||||
* @param string $field the field used for filtering data
|
||||
* @param int $value id of the role (used for filtering data); 0 = any role
|
||||
* @param boolean $advanced advanced form element flag
|
||||
*/
|
||||
function user_filter_globalrole($name, $label, $field='id', $value=0) {
|
||||
parent::user_filter_type($name, $label, $field, $value);
|
||||
function user_filter_globalrole($name, $label, $advanced) {
|
||||
parent::user_filter_type($name, $label, $advanced);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns an array of available roles
|
||||
* @return array of availble roles
|
||||
*/
|
||||
function getRoles() {
|
||||
$context =& get_context_instance(CONTEXT_SYSTEM);
|
||||
$roles =& array_merge(array(0=> get_string('anyrole','filters')), get_assignable_roles($context));
|
||||
function get_roles() {
|
||||
$context = get_context_instance(CONTEXT_SYSTEM);
|
||||
$roles = array_merge(array(0=> get_string('anyrole','filters')), get_assignable_roles($context));
|
||||
return $roles;
|
||||
}
|
||||
|
||||
@@ -32,42 +32,57 @@ class user_filter_globalrole extends user_filter_type {
|
||||
* @param object $mform a MoodleForm object to setup
|
||||
*/
|
||||
function setupForm(&$mform) {
|
||||
$obj =& $mform->addElement('select', $this->_name, $this->_label, $this->getRoles());
|
||||
$obj->setHelpButton(array('globalrole','','filters'));
|
||||
$mform->setDefault($this->_name, $this->_value);
|
||||
$obj =& $mform->addElement('select', $this->_name, $this->_label, $this->get_roles());
|
||||
$obj->setHelpButton(array('globalrole', '', 'filters'));
|
||||
$mform->setDefault($this->_name, 0);
|
||||
if ($this->_advanced) {
|
||||
$mform->setAdvanced($this->_name);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 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
|
||||
*/
|
||||
function checkData($formdata) {
|
||||
function check_data($formdata) {
|
||||
$field = $this->_name;
|
||||
$this->_value = (string)@$formdata->$field;
|
||||
|
||||
if (array_key_exists($field, $formdata) and !empty($formdata->$field)) {
|
||||
return array('value' => (int)$formdata->$field);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the condition to be used with SQL where
|
||||
* @param array $data filter settings
|
||||
* @return string the filtering condition or null if the filter is disabled
|
||||
*/
|
||||
function getSQLFilter() {
|
||||
function get_sql_filter($data) {
|
||||
global $CFG;
|
||||
if(empty($this->_value)) {
|
||||
return null;
|
||||
}
|
||||
$timenow = time();
|
||||
$where = 'WHERE contextlevel=10 AND roleid='. $this->_value . ' AND timestart<' . $timenow .' AND (timeend=0 OR timeend>'. $timenow . ')';
|
||||
return $this->_field . " IN (SELECT userid FROM {$CFG->prefix}role_assignments a ".
|
||||
"INNER JOIN {$CFG->prefix}context b ON a.contextid=b.id ".
|
||||
$where . ')';
|
||||
$value = $data['value'];
|
||||
|
||||
$timenow = round(time(), 100);
|
||||
|
||||
return "id IN (SELECT userid
|
||||
FROM {$CFG->prefix}role_assignments a
|
||||
WHERE a.contextid=".SYSCONTEXTID." AND a.roleid=$value AND a.timestart<$timenow
|
||||
AND (a.timeend=0 OR a.timeend>$timenow))";
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns a human friendly description of the filter.
|
||||
* @return string filter description
|
||||
* Returns a human friendly description of the filter used as label.
|
||||
* @param array $data filter settings
|
||||
* @return string active filter label
|
||||
*/
|
||||
function getDescription() {
|
||||
$roles =& $this->getRoles();
|
||||
return $this->_label . ' is ' . $roles[$this->_value];
|
||||
function get_label($data) {
|
||||
$rolename = get_field('role', 'name', 'id', $data['value']);
|
||||
|
||||
$a = new object();
|
||||
$a->label = $this->_label;
|
||||
$a->value = '"'.format_string($rolename).'"';
|
||||
|
||||
return get_string('globalrolelabel', 'filters', $a);
|
||||
}
|
||||
}
|
||||
|
||||
+209
-30
@@ -1,60 +1,239 @@
|
||||
<?php //$Id$
|
||||
|
||||
require_once($CFG->dirroot.'/user/filters/text.php');
|
||||
require_once($CFG->dirroot.'/user/filters/date.php');
|
||||
require_once($CFG->dirroot.'/user/filters/select.php');
|
||||
require_once($CFG->dirroot.'/user/filters/simpleselect.php');
|
||||
require_once($CFG->dirroot.'/user/filters/courserole.php');
|
||||
require_once($CFG->dirroot.'/user/filters/globalrole.php');
|
||||
require_once($CFG->dirroot.'/user/filters/profilefield.php');
|
||||
require_once($CFG->dirroot.'/user/filters/yesno.php');
|
||||
require_once($CFG->dirroot.'/user/filters/user_filter_forms.php');
|
||||
|
||||
|
||||
/**
|
||||
* Library of functions and constants for user filters
|
||||
* User filtering wrapper class.
|
||||
*/
|
||||
class user_filtering {
|
||||
var $_fields;
|
||||
var $_addform;
|
||||
var $_activeform;
|
||||
|
||||
require_once($CFG->dirroot . '/user/filters/user_filter_form.php');
|
||||
/**
|
||||
* Contructor
|
||||
* @param array array of visible user fields
|
||||
* @param string base url used for submission/return, null if the same of current page
|
||||
* @param array extra page parameters
|
||||
*/
|
||||
function user_filtering($fieldnames=null, $baseurl=null, $extraparams=null) {
|
||||
global $SESSION;
|
||||
|
||||
if (!isset($SESSION->user_filtering)) {
|
||||
$SESSION->user_filtering = array();
|
||||
}
|
||||
|
||||
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,
|
||||
'firstaccess'=>1, 'lastaccess'=>1, 'lastlogin'=>1, 'username'=>1, 'auth'=>1, 'mnethostid'=>1);
|
||||
}
|
||||
|
||||
$this->_fields = array();
|
||||
|
||||
foreach ($fieldnames as $fieldname=>$advanced) {
|
||||
if ($field = $this->get_field($fieldname, $advanced)) {
|
||||
$this->_fields[$fieldname] = $field;
|
||||
}
|
||||
}
|
||||
|
||||
// fist the new filter form
|
||||
$this->_addform = new user_add_filter_form($baseurl, array('fields'=>$this->_fields, 'extraparams'=>$extraparams));
|
||||
if ($adddata = $this->_addform->get_data(false)) {
|
||||
foreach($this->_fields as $fname=>$field) {
|
||||
$data = $field->check_data($adddata);
|
||||
if ($data === false) {
|
||||
continue; // nothing new
|
||||
}
|
||||
if (!array_key_exists($fname, $SESSION->user_filtering)) {
|
||||
$SESSION->user_filtering[$fname] = array();
|
||||
}
|
||||
$SESSION->user_filtering[$fname][] = $data;
|
||||
}
|
||||
// clear the form
|
||||
$_POST = array();
|
||||
$this->_addform = new user_add_filter_form($baseurl, array('fields'=>$this->_fields, 'extraparams'=>$extraparams));
|
||||
}
|
||||
|
||||
// now the active filters
|
||||
$this->_activeform = new user_active_filter_form($baseurl, array('fields'=>$this->_fields, 'extraparams'=>$extraparams));
|
||||
if ($adddata = $this->_activeform->get_data(false)) {
|
||||
if (!empty($adddata->removeall)) {
|
||||
$SESSION->user_filtering = array();
|
||||
|
||||
} else if (!empty($adddata->removeselected) and !empty($adddata->filter)) {
|
||||
foreach($adddata->filter as $fname=>$instances) {
|
||||
foreach ($instances as $i=>$val) {
|
||||
if (empty($val)) {
|
||||
continue;
|
||||
}
|
||||
unset($SESSION->user_filtering[$fname][$i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
// clear+reload the form
|
||||
$_POST = array();
|
||||
$this->_activeform = new user_active_filter_form($baseurl, array('fields'=>$this->_fields, 'extraparams'=>$extraparams));
|
||||
}
|
||||
// now the active filters
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates known user filter if present
|
||||
* @param string $fieldname
|
||||
* @param boolean $advanced
|
||||
* @return object filter
|
||||
*/
|
||||
function get_field($fieldname, $advanced) {
|
||||
global $USER;
|
||||
|
||||
switch ($fieldname) {
|
||||
case 'username': return new user_filter_text('username', get_string('username'), $advanced, 'username');
|
||||
case 'realname': return new user_filter_text('realname', get_string('fullname'), $advanced, sql_fullname());
|
||||
case 'lastname': return new user_filter_text('lastname', get_string('lastname'), $advanced, 'lastname');
|
||||
case 'firstname': return new user_filter_text('firstname', get_string('firstname'), $advanced, 'firstname');
|
||||
case 'email': return new user_filter_text('email', get_string('email'), $advanced, 'email');
|
||||
case 'city': return new user_filter_text('city', get_string('city'), $advanced, 'city');
|
||||
case 'country': return new user_filter_select('country', get_string('country'), $advanced, 'country', get_list_of_countries(), $USER->country);
|
||||
case 'confirmed': return new user_filter_yesno('confirmed', get_string('confirm'), $advanced, 'confirmed');
|
||||
case 'profile': return new user_filter_profilefield('profile', get_string('profile'), $advanced);
|
||||
case 'courserole': return new user_filter_courserole('courserole', get_string('courserole', 'filters'), $advanced);
|
||||
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 'auth':
|
||||
$plugins = get_list_of_plugins('auth');
|
||||
$choices = array();
|
||||
foreach ($plugins as $auth) {
|
||||
$choices[$auth] = get_string("auth_{$auth}title", 'auth');
|
||||
}
|
||||
return new user_filter_simpleselect('auth', get_string('authentication'), $advanced, 'auth', $choices);
|
||||
|
||||
case 'mnethostid':
|
||||
if (!$hosts = get_records('mnet_host', '', '', 'id', 'id, wwwroot, name')) {
|
||||
return null;
|
||||
}
|
||||
$choices = array();
|
||||
foreach ($hosts as $host) {
|
||||
if (empty($host->wwwroot)) {
|
||||
continue; // skip all hosts
|
||||
}
|
||||
$choices[$host->id] = $host->name.' ('.$host->wwwroot.')';
|
||||
}
|
||||
if (count($choices < 2)) {
|
||||
return null; // filter not needed
|
||||
}
|
||||
return new user_filter_simpleselect('mnethostid', 'mnethostid', $advanced, 'mnethostid', $choices);
|
||||
|
||||
default: return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns sql where statement based on active user filters
|
||||
* @param string $extra sql
|
||||
* @return string
|
||||
*/
|
||||
function get_sql_filter($extra='') {
|
||||
global $SESSION;
|
||||
|
||||
$sqls = array();
|
||||
if ($extra != '') {
|
||||
$sqls[] = $extra;
|
||||
}
|
||||
|
||||
if (!empty($SESSION->user_filtering)) {
|
||||
foreach ($SESSION->user_filtering as $fname=>$datas) {
|
||||
if (!array_key_exists($fname, $this->_fields)) {
|
||||
continue; // filter not used
|
||||
}
|
||||
$field = $this->_fields[$fname];
|
||||
foreach($datas as $i=>$data) {
|
||||
$sqls[] = $field->get_sql_filter($data);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (empty($sqls)) {
|
||||
return '';
|
||||
} else {
|
||||
return implode(' AND ', $sqls);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Print the add filter form.
|
||||
*/
|
||||
function display_add() {
|
||||
$this->_addform->display();
|
||||
}
|
||||
|
||||
/**
|
||||
* Print the active filter form.
|
||||
*/
|
||||
function display_active() {
|
||||
$this->_activeform->display();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* The base user filter.
|
||||
* The base user filter class. All abstract classes must be implemented.
|
||||
*/
|
||||
class user_filter_type {
|
||||
/**
|
||||
* The name of this filter instance.
|
||||
*/
|
||||
var $_name;
|
||||
|
||||
/**
|
||||
* The label of this filter instance.
|
||||
*/
|
||||
var $_label;
|
||||
|
||||
/**
|
||||
* The field database used for filtering data.
|
||||
* Advanced form element flag
|
||||
*/
|
||||
var $_field;
|
||||
/**
|
||||
* The value used for filtering data.
|
||||
*/
|
||||
var $_value;
|
||||
var $_advanced;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
* @param string $name the name of the filter instance
|
||||
* @param string $label the label of the filter instance
|
||||
* @param string $field the field used for filtering data
|
||||
* @param string $value the value used for filtering data
|
||||
* @param boolean $advanced advanced form element flag
|
||||
*/
|
||||
function user_filter_type($name, $label, $field, $value=null) {
|
||||
$this->_name = $name;
|
||||
$this->_label = $label;
|
||||
$this->_field = $field;
|
||||
$this->_value = $value;
|
||||
function user_filter_type($name, $label, $advanced) {
|
||||
$this->_name = $name;
|
||||
$this->_label = $label;
|
||||
$this->_advanced = $advanced;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns the condition to be used with SQL where
|
||||
* @param array $data filter settings
|
||||
* @return string the filtering condition or null if the filter is disabled
|
||||
*/
|
||||
function getSQLFilter() {
|
||||
return $this->_field . '="' . $this->_value . '"';
|
||||
function get_sql_filter($data) {
|
||||
error('Abstract method get_sql_filter() called - must be implemented');
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 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
|
||||
*/
|
||||
function checkData($formdata) {
|
||||
$field = $this->_name;
|
||||
$this->_value = (string)@$formdata->$field;
|
||||
function check_data($formdata) {
|
||||
error('Abstract method check_data() called - must be implemented');
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -62,15 +241,15 @@ class user_filter_type {
|
||||
* @param object $mform a MoodleForm object to setup
|
||||
*/
|
||||
function setupForm(&$mform) {
|
||||
$mform->addElement('text', $this->_name, $this->_label);
|
||||
$mform->setDefault($this->_name, $this->_value);
|
||||
error('Abstract method setupForm() called - must be implemented');
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns a human friendly description of the filter.
|
||||
* @return string filter description
|
||||
* Returns a human friendly description of the filter used as label.
|
||||
* @param array $data filter settings
|
||||
* @return string active filter label
|
||||
*/
|
||||
function getDescription() {
|
||||
return $this->_label . ' is "' . $this->_value . '"';
|
||||
function get_label($data) {
|
||||
error('Abstract method get_label() called - must be implemented');
|
||||
}
|
||||
}
|
||||
|
||||
+112
-120
@@ -1,61 +1,46 @@
|
||||
<?php //$Id$
|
||||
|
||||
require_once($CFG->dirroot . '/user/filters/lib.php');
|
||||
require_once($CFG->dirroot.'/user/filters/lib.php');
|
||||
|
||||
/**
|
||||
* User filter based on values of custom profile fields.
|
||||
*/
|
||||
class user_filter_profilefield extends user_filter_type {
|
||||
/**
|
||||
* operator used for comparison of data
|
||||
*/
|
||||
var $_operator;
|
||||
/**
|
||||
* profile field to look at (0 - all fields)
|
||||
*/
|
||||
var $_profile_field;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
* @param string $name the name of the filter instance
|
||||
* @param string $label the label of the filter instance
|
||||
* @param string $field the field used for filtering data
|
||||
* @param string $value the value of the profile field (used for filtering data)
|
||||
* @param int $profile_field id of the profile field to look in
|
||||
* @param int $operator code of the comparison operator
|
||||
* @param boolean $advanced advanced form element flag
|
||||
*/
|
||||
function user_filter_profilefield($name, $label, $field='id', $value=null, $profile_field=0, $operator=0) {
|
||||
parent::user_filter_type($name, $label, $field, $value);
|
||||
$this->_operator = $operator;
|
||||
$this->_profile_field = $profile_field;
|
||||
function user_filter_profilefield($name, $label, $advanced) {
|
||||
parent::user_filter_type($name, $label, $advanced);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns an array of comparison operators
|
||||
* @return array of comparison operators
|
||||
*/
|
||||
function getOperators() {
|
||||
return array(
|
||||
get_string('contains', 'filters'),
|
||||
get_string('doesnotcontain','filters'),
|
||||
get_string('isequalto','filters'),
|
||||
get_string('startswith','filters'),
|
||||
get_string('endswith','filters'),
|
||||
get_string('isempty','filters'),
|
||||
get_string('isnotdefined','filters'),
|
||||
get_string('isdefined','filters'),
|
||||
);
|
||||
function get_operators() {
|
||||
return array(0 => get_string('contains', 'filters'),
|
||||
1 => get_string('doesnotcontain','filters'),
|
||||
2 => get_string('isequalto','filters'),
|
||||
3 => get_string('startswith','filters'),
|
||||
4 => get_string('endswith','filters'),
|
||||
5 => get_string('isempty','filters'),
|
||||
6 => get_string('isnotdefined','filters'),
|
||||
7 => get_string('isdefined','filters'));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns an array of custom profile fields
|
||||
* @return array of profile fields
|
||||
*/
|
||||
function getProfileFields() {
|
||||
$fields =& get_records_select('user_info_field', '', 'shortname', 'id,shortname');
|
||||
if(empty($fields)) {
|
||||
function get_profile_fields() {
|
||||
if (!$fields = get_records_select('user_info_field', '', 'shortname', 'id,shortname')) {
|
||||
return null;
|
||||
}
|
||||
$res[0] = get_string('anyfield','filters');
|
||||
$res = array(0 => get_string('anyfield', 'filters'));
|
||||
foreach($fields as $k=>$v) {
|
||||
$res[$k] = $v->shortname;
|
||||
}
|
||||
@@ -67,116 +52,123 @@ class user_filter_profilefield extends user_filter_type {
|
||||
* @param object $mform a MoodleForm object to setup
|
||||
*/
|
||||
function setupForm(&$mform) {
|
||||
$profile_fields =& $this->getProfileFields();
|
||||
if(empty($profile_fields)) {
|
||||
$profile_fields = $this->get_profile_fields();
|
||||
if (empty($profile_fields)) {
|
||||
return;
|
||||
}
|
||||
$objs = array();
|
||||
$objs[] =& $mform->createElement('select', $this->_name . '_fld', null, $profile_fields);
|
||||
$objs[] =& $mform->createElement('select', $this->_name . '_op', null, $this->getOperators());
|
||||
$objs[] =& $mform->createElement('select', $this->_name.'_fld', null, $profile_fields);
|
||||
$objs[] =& $mform->createElement('select', $this->_name.'_op', null, $this->get_operators());
|
||||
$objs[] =& $mform->createElement('text', $this->_name, null);
|
||||
$grp =& $mform->addElement('group', $this->_name . '_grp', $this->_label, $objs, '', false);
|
||||
$grp =& $mform->addElement('group', $this->_name.'_grp', $this->_label, $objs, '', false);
|
||||
$grp->setHelpButton(array('profilefield','','filters'));
|
||||
$mform->setDefault($this->_name . '_fld', $this->_profile_field);
|
||||
$mform->setDefault($this->_name . '_op', $this->_operator);
|
||||
$mform->setDefault($this->_name, $this->_value);
|
||||
if ($this->_advanced) {
|
||||
$mform->setAdvanced($this->_name.'_grp');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 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
|
||||
*/
|
||||
function checkData($formdata) {
|
||||
$field = $this->_name;
|
||||
$operator = $field . '_op';
|
||||
$profile_field = $field . '_fld';
|
||||
$this->_value = (string)@$formdata->$field;
|
||||
$this->_operator = (int)@$formdata->$operator;
|
||||
$this->_profile_field = (int)@$formdata->$profile_field;
|
||||
function check_data($formdata) {
|
||||
$field = $this->_name;
|
||||
$operator = $field.'_op';
|
||||
$profile = $field.'_fld';
|
||||
|
||||
if (array_key_exists($profile, $formdata)) {
|
||||
if ($formdata->$operator < 5 and $formdata->$field === '') {
|
||||
return false;
|
||||
}
|
||||
|
||||
return array('value' => (string)$formdata->$field,
|
||||
'operator' => (int)$formdata->$operator,
|
||||
'profile' => (int)$formdata->$profile);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the condition to be used with SQL where
|
||||
* @param array $data filter settings
|
||||
* @return string the filtering condition or null if the filter is disabled
|
||||
*/
|
||||
function getSQLFilter() {
|
||||
function get_sql_filter($data) {
|
||||
global $CFG;
|
||||
$where = '';
|
||||
$op = ' IN ';
|
||||
switch($this->_operator) {
|
||||
case 0: // contains
|
||||
if(empty($this->_value)) {
|
||||
return null;
|
||||
}
|
||||
$where = 'data ' . sql_ilike(). ' "%' . $this->_value . '%"';
|
||||
break;
|
||||
case 1: // does not contain
|
||||
if(empty($this->_value)) {
|
||||
return null;
|
||||
}
|
||||
$where = 'data NOT ' . sql_ilike(). ' "%' . $this->_value . '%"';
|
||||
break;
|
||||
case 2: // equal to
|
||||
if(empty($this->_value)) {
|
||||
return null;
|
||||
}
|
||||
$where = 'data="' . $this->_value . '"';
|
||||
break;
|
||||
case 3: // starts with
|
||||
if(empty($this->_value)) {
|
||||
return null;
|
||||
}
|
||||
$where = 'data ' . sql_ilike(). ' "' . $this->_value . '%"';
|
||||
break;
|
||||
case 4: // ends with
|
||||
if(empty($this->_value)) {
|
||||
return null;
|
||||
}
|
||||
$where = 'data ' . sql_ilike(). ' "%' . $this->_value . '"';
|
||||
break;
|
||||
case 5: // empty
|
||||
$where = 'data=""';
|
||||
break;
|
||||
case 6: // is not defined
|
||||
$op = ' NOT IN ';
|
||||
break;
|
||||
case 7: // is defined
|
||||
break;
|
||||
|
||||
$profile = $data['profile'];
|
||||
$operator = $data['operator'];
|
||||
$value = addslashes($data['value']);
|
||||
|
||||
$where = "";
|
||||
$op = " IN ";
|
||||
$ilike = sql_ilike();
|
||||
|
||||
if ($operator < 5 and $value === '') {
|
||||
return '';
|
||||
}
|
||||
if(!empty($this->_profile_field)) {
|
||||
if(!empty($where)) {
|
||||
$where = ' AND ' . $where;
|
||||
|
||||
switch($operator) {
|
||||
case 0: // contains
|
||||
$where = "data $ilike '%$value%'"; break;
|
||||
case 1: // does not contain
|
||||
$where = "data NOT $ilike '%$value%'"; break;
|
||||
case 2: // equal to
|
||||
$where = "data $ilike '$value'"; break;
|
||||
case 3: // starts with
|
||||
$where = "data $ilike '$value%'"; break;
|
||||
case 4: // ends with
|
||||
$where = "data $ilike '%$value'"; break;
|
||||
case 5: // empty
|
||||
$where = "data=''"; break;
|
||||
case 6: // is not defined
|
||||
$op = " NOT IN "; break;
|
||||
case 7: // is defined
|
||||
break;
|
||||
}
|
||||
if ($profile) {
|
||||
if ($where !== '') {
|
||||
$where = " AND $where";
|
||||
}
|
||||
$where = 'fieldid=' . $this->_profile_field . $where;
|
||||
$where = "fieldid=$profile $where";
|
||||
}
|
||||
if(!empty($where)) {
|
||||
$where = ' WHERE ' . $where;
|
||||
if ($where !== '') {
|
||||
$where = "WHERE $where";
|
||||
}
|
||||
return $this->_field . $op . "(SELECT userid FROM {$CFG->prefix}user_info_data" . $where . ')';
|
||||
return "id $op (SELECT userid FROM {$CFG->prefix}user_info_data $where)";
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns a human friendly description of the filter.
|
||||
* @return string filter description
|
||||
* Returns a human friendly description of the filter used as label.
|
||||
* @param array $data filter settings
|
||||
* @return string active filter label
|
||||
*/
|
||||
function getDescription() {
|
||||
$res = '';
|
||||
$operators =& $this->getOperators();
|
||||
$profilefields =& $this->getProfileFields();
|
||||
switch($this->_operator) {
|
||||
case 0: // contains
|
||||
case 1: // doesn't contain
|
||||
case 2: // equal to
|
||||
case 3: // starts with
|
||||
case 4: // ends with
|
||||
$res = $this->_label . ': '. $profilefields[$this->_profile_field] . ' ' . $operators[$this->_operator]. ' "' . stripslashes($this->_value) . '"';
|
||||
break;
|
||||
case 5: // empty
|
||||
case 6: // is not defined
|
||||
case 7: // is defined
|
||||
$res = $this->_label . ': '. $profilefields[$this->_profile_field] . ' ' . $operators[$this->_operator];
|
||||
break;
|
||||
function get_label($data) {
|
||||
$operators = $this->get_operators();
|
||||
$profilefields = $this->get_profile_fields();
|
||||
|
||||
$profile = $data['profile'];
|
||||
$operator = $data['operator'];
|
||||
$value = $data['value'];
|
||||
|
||||
$a = new object();
|
||||
$a->label = $this->_label;
|
||||
$a->value = $value;
|
||||
$a->profile = $profilefields[$profile];
|
||||
$a->operator = $operators[$operator];
|
||||
|
||||
switch($operator) {
|
||||
case 0: // contains
|
||||
case 1: // doesn't contain
|
||||
case 2: // equal to
|
||||
case 3: // starts with
|
||||
case 4: // ends with
|
||||
return get_string('profilelabel', 'filters', $a);
|
||||
case 5: // empty
|
||||
case 6: // is not defined
|
||||
case 7: // is defined
|
||||
return get_string('profilelabelnovalue', 'filters', $a);
|
||||
}
|
||||
return $res;
|
||||
return '';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,80 +0,0 @@
|
||||
<?php //$Id$
|
||||
|
||||
require_once($CFG->dirroot . '/user/filters/lib.php');
|
||||
|
||||
/**
|
||||
* Generic filter with radio buttons for integer fields.
|
||||
*/
|
||||
class user_filter_radios extends user_filter_type {
|
||||
/**
|
||||
* options for the radio buttons
|
||||
*/
|
||||
var $_options;
|
||||
/**
|
||||
* id of the option which disables the filter
|
||||
*/
|
||||
var $_offoption;
|
||||
/**
|
||||
* Constructor
|
||||
* @param string $name the name of the filter instance
|
||||
* @param string $label the label of the filter instance
|
||||
* @param string $field the field used for filtering data
|
||||
* @param array $options associative array used to generate the radio buttons
|
||||
* @param boolean $offoption true if a "don't care" option should be generated
|
||||
* @param int $value the value used for filtering data
|
||||
*/
|
||||
function user_filter_radios($name, $label, $field, $options, $offoption=true, $value=null) {
|
||||
parent::user_filter_type($name, $label, $field, $value);
|
||||
$this->_options = $options;
|
||||
if($offoption) {
|
||||
$this->_offoption = @min(array_keys($options)) - 1;
|
||||
} else {
|
||||
$this->_offoption = null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds controls specific to this filter in the form.
|
||||
* @param object $mform a MoodleForm object to setup
|
||||
*/
|
||||
function setupForm(&$mform) {
|
||||
$objs = array();
|
||||
if(!is_null($this->_offoption)) {
|
||||
$objs[] =& $mform->createElement('radio', $this->_name, null, get_string('anyvalue', 'filters'), $this->_offoption);
|
||||
}
|
||||
foreach($this->_options as $k=>$v) {
|
||||
$objs[] =& $mform->createElement('radio', $this->_name, null, $v, $k);
|
||||
}
|
||||
$grp =& $mform->addElement('group', $this->_name . '_grp', $this->_label, $objs, '', false);
|
||||
$mform->setDefault($this->_name, $this->_value);
|
||||
$grp->setHelpButton(array('radios','','filters'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves data from the form data
|
||||
* @param object $formdata data submited with the form
|
||||
*/
|
||||
function checkData($formdata) {
|
||||
$field = $this->_name;
|
||||
$this->_value = (int)@$formdata->$field;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the condition to be used with SQL where
|
||||
* @return string the filtering condition or null if the filter is disabled
|
||||
*/
|
||||
function getSQLFilter() {
|
||||
if($this->_value === $this->_offoption) {
|
||||
return null;
|
||||
}
|
||||
return $this->_field . '=' . $this->_value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a human friendly description of the filter.
|
||||
* @return string filter description
|
||||
*/
|
||||
function getDescription() {
|
||||
return $this->_label . ' is ' . $this->_options[$this->_value];
|
||||
}
|
||||
}
|
||||
+73
-51
@@ -1,43 +1,44 @@
|
||||
<?php //$Id$
|
||||
|
||||
require_once($CFG->dirroot . '/user/filters/lib.php');
|
||||
require_once($CFG->dirroot.'/user/filters/lib.php');
|
||||
|
||||
/**
|
||||
* Generic filter based on a list of values.
|
||||
*/
|
||||
class user_filter_select extends user_filter_type {
|
||||
/**
|
||||
* operator used for comparison of data
|
||||
*/
|
||||
var $_operator;
|
||||
/**
|
||||
* options for the list values
|
||||
*/
|
||||
var $_options;
|
||||
|
||||
var $_field;
|
||||
|
||||
var $_default;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
* @param string $name the name of the filter instance
|
||||
* @param string $label the label of the filter instance
|
||||
* @param string $field the field used for filtering data
|
||||
* @param string $value the value used for filtering data
|
||||
* @param int $operator code of the comparison operator
|
||||
* @param boolean $advanced advanced form element flag
|
||||
* @param string $field user table filed name
|
||||
* @param array $options select options
|
||||
* @param mixed $default option
|
||||
*/
|
||||
function user_filter_select($name, $label, $field, $options, $value=null, $operator=null) {
|
||||
parent::user_filter_type($name, $label, $field, $value);
|
||||
$this->_operator = $operator;
|
||||
function user_filter_select($name, $label, $advanced, $field, $options, $default=null) {
|
||||
parent::user_filter_type($name, $label, $advanced);
|
||||
$this->_field = $field;
|
||||
$this->_options = $options;
|
||||
$this->_default = $default;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns an array of comparison operators
|
||||
* @return array of comparison operators
|
||||
*/
|
||||
function getOperators() {
|
||||
return array(
|
||||
get_string('isanyvalue','filters'),
|
||||
get_string('isequalto','filters'),
|
||||
get_string('isnotequalto','filters'),
|
||||
);
|
||||
function get_operators() {
|
||||
return array(0 => get_string('isanyvalue','filters'),
|
||||
1 => get_string('isequalto','filters'),
|
||||
2 => get_string('isnotequalto','filters'));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -46,56 +47,77 @@ class user_filter_select extends user_filter_type {
|
||||
*/
|
||||
function setupForm(&$mform) {
|
||||
$objs = array();
|
||||
$objs[] =& $mform->createElement('select', $this->_name . '_op', null, $this->getOperators());
|
||||
$objs[] =& $mform->createElement('select', $this->_name.'_op', null, $this->get_operators());
|
||||
$objs[] =& $mform->createElement('select', $this->_name, null, $this->_options);
|
||||
$grp =& $mform->addElement('group', $this->_name . '_grp', $this->_label, $objs, '', false);
|
||||
$grp->setHelpButton(array('select','','filters'));
|
||||
$mform->setDefault($this->_name . '_op', $this->_operator);
|
||||
$mform->setDefault($this->_name, $this->_value);
|
||||
$grp =& $mform->addElement('group', $this->_name.'_grp', $this->_label, $objs, '', false);
|
||||
$grp->setHelpButton(array('select', '', 'filters'));
|
||||
$mform->disabledIf($this->_name, $this->_name.'_op', 'eq', 0);
|
||||
if (!is_null($this->_default)) {
|
||||
$mform->setDefault($this->_name, $this->_default);
|
||||
}
|
||||
if ($this->_advanced) {
|
||||
$mform->setAdvanced($this->_name.'_grp');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 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
|
||||
*/
|
||||
function checkData($formdata) {
|
||||
$field = $this->_name;
|
||||
$operator = $field . '_op';
|
||||
$this->_value = (string)@$formdata->$field;
|
||||
$this->_operator = (int)@$formdata->$operator;
|
||||
function check_data($formdata) {
|
||||
$field = $this->_name;
|
||||
$operator = $field.'_op';
|
||||
|
||||
if (array_key_exists($field, $formdata) and !empty($formdata->$operator)) {
|
||||
return array('operator' => (int)$formdata->$operator,
|
||||
'value' => (string)$formdata->$field);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the condition to be used with SQL where
|
||||
* @param array $data filter settings
|
||||
* @return string the filtering condition or null if the filter is disabled
|
||||
*/
|
||||
function getSQLFilter() {
|
||||
switch($this->_operator) {
|
||||
default:
|
||||
return null;
|
||||
case 1: // equal to
|
||||
$res = '="' . $this->_value . '"';
|
||||
break;
|
||||
case 2: // not equal to
|
||||
$res = '<>"' . $this->_value . '"';
|
||||
break;
|
||||
function get_sql_filter($data) {
|
||||
$operator = $data['operator'];
|
||||
$value = addslashes($data['value']);
|
||||
$field = $this->_field;
|
||||
|
||||
switch($operator) {
|
||||
case 1: // equal to
|
||||
$res = "='$value'"; break;
|
||||
case 2: // not equal to
|
||||
$res = "<>'$value'"; break;
|
||||
default:
|
||||
return '';
|
||||
}
|
||||
return $this->_field . $res;
|
||||
return $field.$res;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns a human friendly description of the filter.
|
||||
* @return string filter description
|
||||
* Returns a human friendly description of the filter used as label.
|
||||
* @param array $data filter settings
|
||||
* @return string active filter label
|
||||
*/
|
||||
function getDescription() {
|
||||
$operators = $this->getOperators();
|
||||
switch($this->_operator) {
|
||||
case 1: // equal to
|
||||
case 2: // not equal to
|
||||
$res = $this->_label . ' ' . $operators[$this->_operator]. ' "' . $this->_options[stripslashes($this->_value)] . '"';
|
||||
break;
|
||||
function get_label($data) {
|
||||
$operators = $this->get_operators();
|
||||
$operator = $data['operator'];
|
||||
$value = $data['value'];
|
||||
|
||||
if (empty($operator)) {
|
||||
return '';
|
||||
}
|
||||
return $res;
|
||||
|
||||
$a = new object();
|
||||
$a->label = $this->_label;
|
||||
$a->value = '"'.s($this->_options[$value]).'"';
|
||||
$a->operator = $operators[$operator];
|
||||
|
||||
return get_string('selectlabel', 'filters', $a);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,88 @@
|
||||
<?php //$Id$
|
||||
|
||||
require_once($CFG->dirroot.'/user/filters/lib.php');
|
||||
|
||||
/**
|
||||
* Generic filter based on a list of values.
|
||||
*/
|
||||
class user_filter_simpleselect extends user_filter_type {
|
||||
/**
|
||||
* options for the list values
|
||||
*/
|
||||
var $_options;
|
||||
|
||||
var $_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 string $field user table filed name
|
||||
* @param array $options select options
|
||||
*/
|
||||
function user_filter_simpleselect($name, $label, $advanced, $field, $options) {
|
||||
parent::user_filter_type($name, $label, $advanced);
|
||||
$this->_field = $field;
|
||||
$this->_options = $options;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds controls specific to this filter in the form.
|
||||
* @param object $mform a MoodleForm object to setup
|
||||
*/
|
||||
function setupForm(&$mform) {
|
||||
$choices = array(''=>get_string('anyvalue', 'filters')) + $this->_options;
|
||||
$mform->addElement('select', $this->_name, $this->_label, $choices);
|
||||
$mform->setHelpButton($this->_name, array('simpleselect', '', 'filters'));
|
||||
if ($this->_advanced) {
|
||||
$mform->setAdvanced($this->_name);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 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
|
||||
*/
|
||||
function check_data($formdata) {
|
||||
$field = $this->_name;
|
||||
|
||||
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 string the filtering condition or null if the filter is disabled
|
||||
*/
|
||||
function get_sql_filter($data) {
|
||||
$value = addslashes($data['value']);
|
||||
$field = $this->_field;
|
||||
if ($value == '') {
|
||||
return '';
|
||||
}
|
||||
return "$field='$value'";
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a human friendly description of the filter used as label.
|
||||
* @param array $data filter settings
|
||||
* @return string active filter label
|
||||
*/
|
||||
function get_label($data) {
|
||||
$value = $data['value'];
|
||||
|
||||
$a = new object();
|
||||
$a->label = $this->_label;
|
||||
$a->value = '"'.s($this->_options[$value]).'"';
|
||||
$a->operator = get_string('isequalto','filters');
|
||||
|
||||
return get_string('selectlabel', 'filters', $a);
|
||||
}
|
||||
}
|
||||
|
||||
+89
-87
@@ -1,41 +1,36 @@
|
||||
<?php //$Id$
|
||||
|
||||
require_once($CFG->dirroot . '/user/filters/lib.php');
|
||||
require_once($CFG->dirroot.'/user/filters/lib.php');
|
||||
|
||||
/**
|
||||
* Generic filter for text fields.
|
||||
*/
|
||||
class user_filter_text extends user_filter_type {
|
||||
/**
|
||||
* operator used for comparison of data
|
||||
*/
|
||||
var $_operator;
|
||||
var $_field;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
* @param string $name the name of the filter instance
|
||||
* @param string $label the label of the filter instance
|
||||
* @param string $field the field used for filtering data
|
||||
* @param string $value the value used for filtering data
|
||||
* @param int $operator code of the comparison operator
|
||||
* @param boolean $advanced advanced form element flag
|
||||
* @param string $field user table filed name
|
||||
*/
|
||||
function user_filter_text($name, $label, $field, $value=null, $operator=0) {
|
||||
parent::user_filter_type($name, $label, $field, $value);
|
||||
$this->_operator = $operator;
|
||||
function user_filter_text($name, $label, $advanced, $field) {
|
||||
parent::user_filter_type($name, $label, $advanced);
|
||||
$this->_field = $field;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns an array of comparison operators
|
||||
* @return array of comparison operators
|
||||
*/
|
||||
function getOperators() {
|
||||
return array(
|
||||
get_string('contains', 'filters'),
|
||||
get_string('doesnotcontain','filters'),
|
||||
get_string('isequalto','filters'),
|
||||
get_string('startswith','filters'),
|
||||
get_string('endswith','filters'),
|
||||
get_string('isempty','filters'),
|
||||
);
|
||||
return array(0 => get_string('contains', 'filters'),
|
||||
1 => get_string('doesnotcontain','filters'),
|
||||
2 => get_string('isequalto','filters'),
|
||||
3 => get_string('startswith','filters'),
|
||||
4 => get_string('endswith','filters'),
|
||||
5 => get_string('isempty','filters'));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -44,91 +39,98 @@ class user_filter_text extends user_filter_type {
|
||||
*/
|
||||
function setupForm(&$mform) {
|
||||
$objs = array();
|
||||
$objs[] =& $mform->createElement('select', $this->_name . '_op', null, $this->getOperators());
|
||||
$objs[] =& $mform->createElement('select', $this->_name.'_op', null, $this->getOperators());
|
||||
$objs[] =& $mform->createElement('text', $this->_name, null);
|
||||
$grp =& $mform->addElement('group', $this->_name . '_grp', $this->_label, $objs, '', false);
|
||||
$grp =& $mform->addElement('group', $this->_name.'_grp', $this->_label, $objs, '', false);
|
||||
$grp->setHelpButton(array('text','','filters'));
|
||||
$mform->setDefault($this->_name, $this->_value);
|
||||
$mform->setDefault($this->_name . '_op', $this->_operator);
|
||||
$mform->disabledIf($this->_name, $this->_name.'_op', 'eq', 5);
|
||||
if ($this->_advanced) {
|
||||
$mform->setAdvanced($this->_name.'_grp');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 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
|
||||
*/
|
||||
function checkData($formdata) {
|
||||
$field = $this->_name;
|
||||
$operator = $field . '_op';
|
||||
$this->_value = (string)@$formdata->$field;
|
||||
$this->_operator = (int)@$formdata->$operator;
|
||||
function check_data($formdata) {
|
||||
$field = $this->_name;
|
||||
$operator = $field.'_op';
|
||||
|
||||
if (array_key_exists($operator, $formdata)) {
|
||||
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);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the condition to be used with SQL where
|
||||
* @param array $data filter settings
|
||||
* @return string the filtering condition or null if the filter is disabled
|
||||
*/
|
||||
function getSQLFilter() {
|
||||
switch($this->_operator) {
|
||||
default:
|
||||
return null;
|
||||
case 0: // contains
|
||||
if(empty($this->_value)) {
|
||||
return null;
|
||||
}
|
||||
$res = ' ' . sql_ilike(). ' "%' . $this->_value . '%"';
|
||||
break;
|
||||
case 1: // does not contain
|
||||
if(empty($this->_value)) {
|
||||
return null;
|
||||
}
|
||||
$res = ' NOT ' . sql_ilike(). ' "%' . $this->_value . '%"';
|
||||
break;
|
||||
case 2: // equal to
|
||||
if(empty($this->_value)) {
|
||||
return null;
|
||||
}
|
||||
$res = '="' . $this->_value . '"';
|
||||
break;
|
||||
case 3: // starts with
|
||||
if(empty($this->_value)) {
|
||||
return null;
|
||||
}
|
||||
$res = ' ' . sql_ilike(). ' "' . $this->_value . '%"';
|
||||
break;
|
||||
case 4: // ends with
|
||||
if(empty($this->_value)) {
|
||||
return null;
|
||||
}
|
||||
$res = ' ' . sql_ilike(). ' "%' . $this->_value . '"';
|
||||
break;
|
||||
case 5: // empty
|
||||
if(empty($this->_value)) {
|
||||
return null;
|
||||
}
|
||||
$res = '=""';
|
||||
break;
|
||||
function get_sql_filter($data) {
|
||||
$operator = $data['operator'];
|
||||
$value = addslashes($data['value']);
|
||||
$field = $this->_field;
|
||||
|
||||
if ($operator != 5 and $value === '') {
|
||||
return '';
|
||||
}
|
||||
return $this->_field . $res;
|
||||
|
||||
$ilike = sql_ilike();
|
||||
|
||||
switch($operator) {
|
||||
case 0: // contains
|
||||
$res = "$ilike '%$value%'"; break;
|
||||
case 1: // does not contain
|
||||
$res = "NOT $ilike '%$value%'"; break;
|
||||
case 2: // equal to
|
||||
$res = "$ilike '$value'"; break;
|
||||
case 3: // starts with
|
||||
$res = "$ilike '$value%'"; break;
|
||||
case 4: // ends with
|
||||
$res = "$ilike '%$value'"; break;
|
||||
case 5: // empty
|
||||
$res = "=''"; break;
|
||||
default:
|
||||
return '';
|
||||
}
|
||||
return $field.' '.$res;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns a human friendly description of the filter.
|
||||
* @return string filter description
|
||||
* Returns a human friendly description of the filter used as label.
|
||||
* @param array $data filter settings
|
||||
* @return string active filter label
|
||||
*/
|
||||
function getDescription() {
|
||||
function get_label($data) {
|
||||
$operator = $data['operator'];
|
||||
$value = $data['value'];
|
||||
$operators = $this->getOperators();
|
||||
switch($this->_operator) {
|
||||
case 0: // contains
|
||||
case 1: // doesn't contain
|
||||
case 2: // equal to
|
||||
case 3: // starts with
|
||||
case 4: // ends with
|
||||
$res = $operators[$this->_operator]. ' "' . stripslashes($this->_value) . '"';
|
||||
break;
|
||||
case 5: // empty
|
||||
$res = $operators[$this->_operator];
|
||||
break;
|
||||
|
||||
$a = new object();
|
||||
$a->label = $this->_label;
|
||||
$a->value = '"'.s($value).'"';
|
||||
$a->operator = $operators[$operator];
|
||||
|
||||
|
||||
switch ($operator) {
|
||||
case 0: // contains
|
||||
case 1: // doesn't contain
|
||||
case 2: // equal to
|
||||
case 3: // starts with
|
||||
case 4: // ends with
|
||||
return get_string('textlabel', 'filters', $a);
|
||||
case 5: // empty
|
||||
return get_string('textlabelnovalue', 'filters', $a);
|
||||
}
|
||||
return $this->_label . ' ' . $res;
|
||||
|
||||
return '';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,178 +0,0 @@
|
||||
<?php //$Id$
|
||||
|
||||
require_once($CFG->libdir.'/formslib.php');
|
||||
//require_once($CFG->libdir . '/form/submit.php'); // (abautu) is it necesary? i don't think so
|
||||
|
||||
class user_filter_form extends moodleform {
|
||||
/**
|
||||
* array of filter type objects
|
||||
*/
|
||||
var $_filtersTypes = array();
|
||||
|
||||
// form definition
|
||||
function definition() {
|
||||
global $SESSION;
|
||||
// add controls for each filter type in the new filter group
|
||||
$mform =& $this->_form;
|
||||
$this->_filtersTypes =& $this->_customdata;
|
||||
$mform->addElement('header', 'newfilter', get_string('newfilter','filters'));
|
||||
foreach($this->_filtersTypes as $ft) {
|
||||
$ft->setupForm($mform);
|
||||
}
|
||||
$objs = array();
|
||||
$objs[] = &$mform->createElement('submit', 'add ', get_string('addfilter','filters'));
|
||||
$objs[] = &$mform->createElement('submit', 'set', get_string('setfilter','filters'));
|
||||
$mform->addElement('group', 'addfilterbar', '', $objs, ' ', false);
|
||||
|
||||
// add controls for each active filter in the active filters group
|
||||
$mform->addElement('header', 'actfilterhdr', get_string('actfilterhdr','filters'));
|
||||
$objs = array();
|
||||
$objs[] = &$mform->createElement('cancel', 'remove', get_string('removeselected','filters'));
|
||||
$objs[] = &$mform->createElement('cancel', 'cancel', get_string('removeall','filters'));
|
||||
$mform->addElement('group', 'actfiltergrp', '', $objs, ' ', false);
|
||||
// insert the controls before the buttons
|
||||
if(!empty($SESSION->user_filter_descriptions)) {
|
||||
foreach($SESSION->user_filter_descriptions as $k => $f) {
|
||||
$obj = &$mform->createElement('checkbox', 'filter['.$k.']', null, $f);
|
||||
$mform->insertElementBefore($obj, 'actfiltergrp');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes an active filter from the form and filters list.
|
||||
* @param int $key id of filter to remove
|
||||
*/
|
||||
function _removeFilter($key) {
|
||||
global $SESSION;
|
||||
unset($SESSION->user_filter_clauses[$key]);
|
||||
unset($SESSION->user_filter_descriptions[$key]);
|
||||
$this->_form->removeElement('filter['.$key.']');
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes all active filters from the form and filters list.
|
||||
*/
|
||||
function _removeFilters() {
|
||||
global $SESSION;
|
||||
if(!empty($SESSION->user_filter_clauses)) {
|
||||
foreach($SESSION->user_filter_clauses as $key=>$f) {
|
||||
$this->_removeFilter($key);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Stores an active filter to the form and filters list.
|
||||
* @param int $key id of filter to remove
|
||||
* @param string $description human friendly description of the filter
|
||||
* @param string $clauses SQL where condition
|
||||
*/
|
||||
function _insertFilter($key, $description, $clause) {
|
||||
global $SESSION;
|
||||
$SESSION->user_filter_clauses[$key] = $clause;
|
||||
$SESSION->user_filter_descriptions[$key] = $description;
|
||||
$mform =& $this->_form;
|
||||
$obj = &$mform->createElement('checkbox', 'filter['.$key.']', null, $description);
|
||||
$mform->insertElementBefore($obj, 'actfiltergrp');
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates form and filters list based on data received
|
||||
* @param object $data object with data received by the form
|
||||
*/
|
||||
function _updateFilters($data) {
|
||||
global $SESSION;
|
||||
// if the forms was not submited, then quit
|
||||
if(is_null($data)){
|
||||
return;
|
||||
}
|
||||
// if cancel was pressed, then remove all filters
|
||||
if(!empty($data->cancel)) {
|
||||
$this->_removeFilters();
|
||||
return;
|
||||
}
|
||||
|
||||
// if remove was pressed, then remove selected filters
|
||||
if(!empty($data->remove)) {
|
||||
if(!empty($data->filter)) {
|
||||
foreach($data->filter as $k=>$f) {
|
||||
$this->_removeFilter($k);
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// if set was pressed, then remove all filters before adding new ones
|
||||
if(!empty($data->set)) {
|
||||
$this->_removeFilters();
|
||||
}
|
||||
|
||||
// in any other case, add the selected filter
|
||||
// first build the filter out of each active filter type
|
||||
$clauses = array();
|
||||
$descriptions = array();
|
||||
foreach($this->_filtersTypes as $ft) {
|
||||
$ft->checkData($data);
|
||||
$sqlFilter = $ft->getSQLFilter();
|
||||
// ignore disabled filters
|
||||
if(!empty($sqlFilter)) {
|
||||
$clauses[] = $sqlFilter;
|
||||
$descriptions[] = $ft->getDescription();
|
||||
}
|
||||
}
|
||||
// if no filters are active, then quit
|
||||
if(empty($clauses)) {
|
||||
return;
|
||||
}
|
||||
|
||||
// join the filter parts and their descriptions together
|
||||
$clauses = implode(' AND ', $clauses);
|
||||
$descriptions = implode(', ', $descriptions);
|
||||
|
||||
// check if this filter is a duplicate; if so, then quit
|
||||
$lastkey = -1;
|
||||
if(!empty($SESSION->user_filter_descriptions)) {
|
||||
foreach($SESSION->user_filter_descriptions as $k=>$c) {
|
||||
if($c == $descriptions) {
|
||||
return;
|
||||
}
|
||||
$lastkey = $k;
|
||||
}
|
||||
}
|
||||
// append the new filter
|
||||
$this->_insertFilter($lastkey + 1, $descriptions, $clauses);
|
||||
}
|
||||
|
||||
function definition_after_data() {
|
||||
global $SESSION;
|
||||
$mform =& $this->_form;
|
||||
// update the filters
|
||||
$this->_updateFilters($this->get_data());
|
||||
// remove the active filters section if no filters are defined
|
||||
if(empty($SESSION->user_filter_descriptions)) {
|
||||
$mform->removeElement('actfiltergrp');
|
||||
$mform->removeElement('actfilterhdr');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the complete SQL where condition coresponding to the active filters and the extra conditions
|
||||
* @param mixed $extra array of SQL where conditions to be conected by ANDs or a string SQL where condition, which will be connected to the active filters conditions by AND
|
||||
* @return string SQL where condition
|
||||
*/
|
||||
function getSQLFilter($extra='') {
|
||||
global $SESSION;
|
||||
if(is_array($extra)) {
|
||||
$extra = implode(' AND ', $extra);
|
||||
}
|
||||
// join sql filters with ORs and put inside paranteses
|
||||
if(!empty($SESSION->user_filter_clauses)) {
|
||||
if(!empty($extra)) {
|
||||
$extra .= ' AND ';
|
||||
}
|
||||
$extra .= '((' . implode(') OR (',$SESSION->user_filter_clauses) . '))';
|
||||
}
|
||||
return $extra;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
<?php //$Id$
|
||||
|
||||
require_once($CFG->libdir.'/formslib.php');
|
||||
|
||||
class user_add_filter_form extends moodleform {
|
||||
|
||||
function definition() {
|
||||
$mform =& $this->_form;
|
||||
$fields = $this->_customdata['fields'];
|
||||
$extraparams = $this->_customdata['extraparams'];
|
||||
|
||||
$mform->addElement('header', 'newfilter', get_string('newfilter','filters'));
|
||||
|
||||
foreach($fields as $ft) {
|
||||
$ft->setupForm($mform);
|
||||
}
|
||||
|
||||
// in case we wasnt to track some page params
|
||||
if ($extraparams) {
|
||||
foreach ($extraparams as $key=>$value) {
|
||||
$mform->addElement('hidden', $key, $value);
|
||||
}
|
||||
}
|
||||
|
||||
// Add button
|
||||
$mform->addElement('submit', 'addfilter', get_string('addfilter','filters'));
|
||||
|
||||
// Don't use last advanced state
|
||||
$mform->setShowAdvanced(false);
|
||||
}
|
||||
}
|
||||
|
||||
class user_active_filter_form extends moodleform {
|
||||
|
||||
function definition() {
|
||||
global $SESSION; // this is very hacky :-(
|
||||
|
||||
$mform =& $this->_form;
|
||||
$fields = $this->_customdata['fields'];
|
||||
$extraparams = $this->_customdata['extraparams'];
|
||||
|
||||
if (!empty($SESSION->user_filtering)) {
|
||||
// add controls for each active filter in the active filters group
|
||||
$mform->addElement('header', 'actfilterhdr', get_string('actfilterhdr','filters'));
|
||||
|
||||
foreach ($SESSION->user_filtering as $fname=>$datas) {
|
||||
if (!array_key_exists($fname, $fields)) {
|
||||
continue; // filter not used
|
||||
}
|
||||
$field = $fields[$fname];
|
||||
foreach($datas as $i=>$data) {
|
||||
$description = $field->get_label($data);
|
||||
$mform->addElement('checkbox', 'filter['.$fname.']['.$i.']', null, $description);
|
||||
}
|
||||
}
|
||||
|
||||
if ($extraparams) {
|
||||
foreach ($extraparams as $key=>$value) {
|
||||
$mform->addElement('hidden', $key, $value);
|
||||
}
|
||||
}
|
||||
|
||||
$objs = array();
|
||||
$objs[] = &$mform->createElement('submit', 'removeselected', get_string('removeselected','filters'));
|
||||
$objs[] = &$mform->createElement('submit', 'removeall', get_string('removeall','filters'));
|
||||
$mform->addElement('group', 'actfiltergrp', '', $objs, ' ', false);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,19 +1,18 @@
|
||||
<?php //$Id$
|
||||
|
||||
require_once($CFG->dirroot . '/user/filters/radios.php');
|
||||
|
||||
/**
|
||||
* Generic yes/no filter with radio buttons for integer fields.
|
||||
*/
|
||||
class user_filter_yesno extends user_filter_radios {
|
||||
class user_filter_yesno extends user_filter_simpleselect {
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
* @param string $name the name of the filter instance
|
||||
* @param string $label the label of the filter instance
|
||||
* @param string $field the field used for filtering data
|
||||
* @param int $value the value used for filtering data
|
||||
* @param boolean $advanced advanced form element flag
|
||||
* @param string $field user table filed name
|
||||
*/
|
||||
function user_filter_yesno($name, $label, $field, $value=-1) {
|
||||
parent::user_filter_radios($name, $label, $field, array(0=>get_string('no'), 1=>get_string('yes')), true, $value);
|
||||
function user_filter_yesno($name, $label, $advanced, $field) {
|
||||
parent::user_filter_simpleselect($name, $label, $advanced, $field, array(0=>get_string('no'), 1=>get_string('yes')));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user