/** * 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':