示例#1
0
/**
 * Get the users
 * $meta_filter can be '', MAILUSERS_ACCEPT_NOTIFICATION_USER_META, or MAILUSERS_ACCEPT_MASS_EMAIL_USER_META
 */
function mailusers_get_users($exclude_id = '', $meta_filter = '', $args = array(), $sortby = null, $meta_value = 'true', $meta_compare = '=')
{
    if (MAILUSERS_DEBUG) {
        printf('<!-- %s::%s -->%s', basename(__FILE__), __LINE__, PHP_EOL);
    }
    if ($sortby == null) {
        $sortby = mailusers_get_default_sort_users_by();
    }
    //  Set up the arguments for get_users()
    $args = array_merge($args, array('exclude' => array($exclude_id), 'fields' => 'all', 'offset' => '0', 'number' => '500'));
    //  Apply the meta filter
    if ($meta_filter != '') {
        $args = array_merge($args, array('meta_key' => $meta_filter, 'meta_value' => $meta_value, 'meta_like_escape' => false, 'meta_compare' => $meta_compare));
        if (!array_key_exists('include', $args)) {
            $args['include'] = '';
        }
        if (!array_key_exists('exclude', $args)) {
            $args['exclude'] = '';
        }
        //  Note:  WordPress 3.5.1 and earlier do not support 'LIKE'
        //  constructs on meta queries - they get wrapped with SQL
        //  protection.  A patch has been submitted for WordPress 3.6
        //  to allow LIKE and NOT LIKE to work properly.
        //
        //  http://core.trac.wordpress.org/ticket/23373
        //  Is it a LIKE comparison?  If so, handle it differently ...
        if (in_array(strtoupper(trim($meta_compare)), array('LIKE', 'NOT LIKE'))) {
            $args = array_merge($args, array('meta_like_escape' => true, 'meta_compare' => strtoupper(trim($meta_compare))));
        }
    }
    //  Filter users with no role on site from list?
    $nr = array();
    if (mailusers_get_no_role_filter() == 'true') {
        $roles = new WP_Roles();
        //  Find all the users which have a role
        $u = array();
        foreach ($roles->get_names() as $role) {
            $u = array_merge($u, get_users(array('role' => $role, 'fields' => 'ID')));
        }
        //  Now find all of the users which don't have a role
        $nr = get_users(array('exclude' => $u, 'fields' => 'ID'));
        $args['exclude'] = array_merge($args['exclude'], $nr);
    }
    if (MAILUSERS_DEBUG) {
        printf('<!-- %s::%s -->%s', basename(__FILE__), __LINE__, PHP_EOL);
    }
    if (MAILUSERS_DEBUG) {
        printf('<!-- %s::%s -->%s', basename(__FILE__), __LINE__, PHP_EOL);
    }
    if (MAILUSERS_DEBUG) {
        printf('<!-- %s%s -->%s', PHP_EOL, print_r(count_users(), true), PHP_EOL);
    }
    if (MAILUSERS_DEBUG) {
        printf('<!-- %s::%s -->%s', basename(__FILE__), __LINE__, PHP_EOL);
    }
    if (MAILUSERS_DEBUG) {
        printf('<!-- %s%s -->%s', PHP_EOL, print_r($args, true), PHP_EOL);
    }
    if (MAILUSERS_DEBUG) {
        printf('<!-- %s::%s -->%s', basename(__FILE__), __LINE__, PHP_EOL);
    }
    //  On some sites with a large number of users, it is possible to run out of memory
    //  when calling get_users() with the arguments 'fields' => 'all_with_meta' (which is
    //  no longer being used as it become unnecessary in WordPress 3.x).  To limit the
    //  potential of memory exhaustion, the query is done in chunks and a result is assembled.
    //  Retrieve the list of users
    $users = count_users();
    $total = $users['total_users'];
    $users = array();
    $q = 1;
    while ($args['offset'] < $total) {
        if (MAILUSERS_DEBUG) {
            printf('<!-- %s::%s  Query #%s  Memory Usage:  %s -->%s', basename(__FILE__), __LINE__, $q++, mailusers_memory_usage(true), PHP_EOL);
        }
        $users = array_merge($users, get_users($args));
        $args['offset'] += $args['number'];
    }
    if (MAILUSERS_DEBUG) {
        printf('<!-- %s%s -->%s', PHP_EOL, print_r(count($users), true), PHP_EOL);
    }
    //  Sort the users based on the plugin settings
    if (!empty($users)) {
        switch ($sortby) {
            case 'fl':
            case 'flul':
                usort($users, 'mailusers_sort_users_by_first_name');
                break;
            case 'lf':
            case 'lful':
                usort($users, 'mailusers_sort_users_by_last_name');
                break;
            case 'ul':
            case 'uldn':
            case 'ulfn':
            case 'ulln':
                usort($users, 'mailusers_sort_users_by_user_login');
                break;
            case 'display name':
                usort($users, 'mailusers_sort_users_by_display_name');
                break;
            default:
                break;
        }
    }
    if (MAILUSERS_DEBUG) {
        printf('<!-- %s::%s -->%s', basename(__FILE__), __LINE__, PHP_EOL);
    }
    return $users;
}
?>
><?php 
_e('User Login (Display Name)', MAILUSERS_I18N_DOMAIN);
?>
</option>
				<option value="ulfl" <?php 
if (mailusers_get_default_sort_users_by() == 'ulfl') {
    echo 'selected="true"';
}
?>
><?php 
_e('User Login (First Name Last Name)', MAILUSERS_I18N_DOMAIN);
?>
</option>
				<option value="ullf" <?php 
if (mailusers_get_default_sort_users_by() == 'ullf') {
    echo 'selected="true"';
}
?>
><?php 
_e('User Login (Last Name, First Name)', MAILUSERS_I18N_DOMAIN);
?>
</option>
			</select><br/><i><small><?php 
_e('Determine how to sort and display names in the User selection list?', MAILUSERS_I18N_DOMAIN);
?>
</small></i></td>
	</tr>
	<tr>
		<th scope="row" valign="top">
			<label for="max_bcc_recipients"><?php 
} else {
    _e('You can select multiple users by pressing the CTRL key.  When selecting multiple users, any user who should not receive Mass Email will be filtered from the recipient list.', MAILUSERS_I18N_DOMAIN);
}
?>
			</small></label></th>
			<td>
				<select id="send_users" name="send_users[]" size="8" style="width: 654px; height: 250px;" <?php 
if (current_user_can(MAILUSERS_EMAIL_MULTIPLE_USERS_CAP)) {
    echo 'multiple="multiple"';
}
?>
 >
				<?php 
//  Display of users is based on plugin setting
$na = __('N/A', MAILUSERS_I18N_DOMAIN);
$sortby = mailusers_get_default_sort_users_by();
$users = mailusers_get_users($user_ID);
foreach ($users as $user) {
    switch ($sortby) {
        case 'fl':
            //  First Last
            $name = sprintf('%s %s', is_null($user->first_name) ? $na : $user->first_name, is_null($user->last_name) ? $na : $user->last_name);
            break;
        case 'flul':
            //  First Last User Login
            $name = sprintf('%s %s (%s)', is_null($user->first_name) ? $na : $user->first_name, is_null($user->last_name) ? $na : $user->last_name, $user->user_login);
            break;
        case 'lf':
            $name = sprintf('%s, %s', is_null($user->last_name) ? $na : $user->last_name, is_null($user->first_name) ? $na : $user->first_name);
            break;
        case 'lful':