All Users page. * * This file is part of the WP-Members plugin by Chad Butler * You can find out more about this plugin at http://rocketgeek.com * Copyright (c) 2006-2017 Chad Butler * WP-Members(tm) is a trademark of butlerblog.com * * @package WP-Members * @author Chad Butler * @copyright 2006-2017 * * Functions included: * - wpmem_bulk_user_action * - wpmem_insert_activate_link * - wpmem_users_page_load * - wpmem_users_admin_notices * - wpmem_users_views * - wpmem_add_user_column * - wpmem_add_user_column_content * - wpmem_a_activate_user * - wpmem_a_deactivate_user * - wpmem_a_pre_user_query * - wpmem_set_new_user_non_active * - wpmem_set_activated_user * - wpmem_set_deactivated_user * - wpmem_set_user_status */ /** * Function to add activate/export to the bulk dropdown list. * * @since 2.8.2 */ function wpmem_bulk_user_action() { global $wpmem; ?> ID ) && $wpmem->mod_reg == 1 ) { $var = get_user_meta( $user_object->ID, 'active', true ); if ( $var != 1 ) { $url = add_query_arg( array( 'action' => 'activate-single', 'user' => $user_object->ID ), "users.php" ); $url = wp_nonce_url( $url, 'activate-user' ); $actions['activate'] = '' . __( 'Activate', 'wp-members' ) . ''; } } return $actions; } /** * Function to handle bulk actions at page load. * * @since 2.8.2 * * @uses WP_Users_List_Table */ function wpmem_users_page_load() { // If exporting all users, do it, then exit. if ( isset( $_REQUEST['export_all'] ) && $_REQUEST['export_all'] == __( 'Export All Users', 'wp-members' ) ) { include_once( WPMEM_PATH . 'admin/user-export.php' ); $today = date( "m-d-y" ); wpmem_export_users( array( 'export'=>'all', 'filename'=>'user-export-' . $today . '.csv' ), '' ); exit(); } $wp_list_table = _get_list_table( 'WP_Users_List_Table' ); $action = $wp_list_table->current_action(); $sendback = ''; if ( $action == 'activate' || 'activate-single' ) { // Find out if we need to set passwords. $chk_pass = false; $wpmem_fields = wpmem_fields(); foreach ( $wpmem_fields as $field ) { if ( $field['type'] == 'password' && $field['register'] ) { $chk_pass = true; break; } } } switch ( $action ) { case 'activate': // Validate nonce. check_admin_referer( 'bulk-users' ); // Get the users. if ( isset( $_REQUEST['users'] ) ) { $users = $_REQUEST['users']; // Update the users. $x = 0; foreach ( $users as $user ) { // Check to see if the user is already activated, if not, activate. if ( ! get_user_meta( $user, 'active', true ) ) { wpmem_a_activate_user( $user, $chk_pass ); $x++; } } $msg = urlencode( sprintf( __( '%s users activated', 'wp-members' ), $x ) ); } else { $msg = urlencode( __( 'No users selected', 'wp-members' ) ); } // Set the return message. $sendback = add_query_arg( array( 'activated' => $msg ), $sendback ); break; case 'activate-single': // Validate nonce. check_admin_referer( 'activate-user' ); // Get the users. $users = $_REQUEST['user']; // Check to see if the user is already activated, if not, activate. if ( ! get_user_meta( $users, 'active', true ) ) { wpmem_a_activate_user( $users, $chk_pass ); // Get the user data. $user_info = get_userdata( $users ); // Set the return message. $msg = urlencode( sprintf( __( "%s activated", 'wp-members' ), $user_info->user_login ) ); } else { // Set the return message. $msg = urlencode( __( "That user is already active", 'wp-members' ) ); } $sendback = add_query_arg( array( 'activated' => $msg ), $sendback ); break; case 'show': add_action( 'pre_user_query', 'wpmem_a_pre_user_query' ); return; break; case 'export': $users = ( isset( $_REQUEST['users'] ) ) ? $_REQUEST['users'] : false; include_once( WPMEM_PATH . 'admin/user-export.php' ); wpmem_export_users( array( 'export'=>'selected' ), $users ); return; break; default: return; break; } // If we did not return already, we need to wp_redirect. wp_redirect( $sendback ); exit(); } /** * Function to echo admin update message. * * @since 2.8.2 */ function wpmem_users_admin_notices() { global $pagenow, $user_action_msg; if( $pagenow == 'users.php' && isset( $_REQUEST['activated'] ) ) { $message = $_REQUEST['activated']; echo "

{$message}

"; } if ( $user_action_msg ) { echo "

{$user_action_msg}

"; } } /** * Function to add user views to the top list. * * @since 2.8.2 * @since 3.1.2 Added user view counts as transient. * * @global object $wpdb * @global object $wpmem * @param array $views * @return array $views */ function wpmem_users_views( $views ) { global $wpmem; // Get the cached user counts. $user_counts = get_transient( 'wpmem_user_counts' ); // check to see if data was successfully retrieved from the cache if ( false === $user_counts ) { // @todo For now, 30 seconds. We'll see how things go. $transient_expires = 30; // Value in seconds, 1 day: ( 60 * 60 * 24 ); global $wpdb; // We need a count of total users. // @todo - need a more elegant way of this entire process. $sql = "SELECT COUNT(*) FROM " . $wpdb->prefix . "users"; $users = $wpdb->get_var( $sql ); // What needs to be counted? $count_metas = array(); if ( defined( 'WPMEM_EXP_MODULE' ) && $wpmem->use_exp == 1 ) { $count_metas['pending'] = 'pending'; } if ( $wpmem->use_trial == 1 ) { $count_metas['trial'] = 'trial'; } if ( defined( 'WPMEM_EXP_MODULE' ) && $wpmem->use_exp == 1 ) { $count_metas['subscription'] = 'subscription'; $count_metas['expired'] = 'expired'; } if ( $wpmem->mod_reg == 1 ) { $count_metas['notactive'] = 'active'; } $count_metas['notexported'] = 'exported'; // Handle various counts. $user_counts = array(); foreach ( $count_metas as $key => $meta_key ) { if ( 'notactive' == $key || 'notexported' == $key ) { $users_with_meta = $wpdb->get_var( "SELECT COUNT(*) FROM $wpdb->usermeta WHERE meta_key='$meta_key' AND meta_value=1" ); $count = $users - $users_with_meta; } if ( 'trial' == $key || 'subscription' == $key ) { $count = $wpdb->get_var( "SELECT COUNT(*) FROM $wpdb->usermeta WHERE meta_key = 'exp_type' AND meta_value = \"$key\"" ); } if ( 'pending' == $key ) { $count = $wpdb->get_var( "SELECT COUNT(*) FROM $wpdb->usermeta WHERE meta_key = 'exp_type' AND meta_value = \"$key\"" ); } if ( 'expired' == $key ) { $count = $wpdb->get_var( "SELECT COUNT(*) FROM $wpdb->usermeta WHERE meta_key = 'expires' AND STR_TO_DATE( meta_value, '%m/%d/%Y' ) < CURDATE() AND meta_value != '01/01/1970'" ); } $user_counts[ $key ] = $count; } set_transient( 'wpmem_user_counts', $user_counts, $transient_expires ); } $arr = array(); if ( defined( 'WPMEM_EXP_MODULE' ) && $wpmem->use_exp == 1 ) { $arr[] = 'Pending'; } if ( $wpmem->use_trial == 1 ) { $arr[] = 'Trial'; } if ( defined( 'WPMEM_EXP_MODULE' ) && $wpmem->use_exp == 1 ) { $arr[] = 'Subscription'; $arr[] = 'Expired'; } if ( $wpmem->mod_reg == 1 ) { $arr[] = 'Not Active'; } $arr[] = 'Not Exported'; $show = ( isset( $_GET['show'] ) ) ? $_GET['show'] : false; for ( $row = 0; $row < count( $arr ); $row++ ) { $link = "users.php?action=show&show="; $lcas = str_replace( " ", "", strtolower( $arr[$row] ) ); $link.= $lcas; $curr = ( $show == $lcas ) ? ' class="current"' : ''; $echolink = true; if ( $lcas == "notactive" && $wpmem->mod_reg != 1 ) { $echolink = false; } if ( $echolink ) { $views[$lcas] = sprintf( '%s (%d)', $link, $curr, $arr[$row], isset( $user_counts[ $lcas ] ) ? $user_counts[ $lcas ] : '' ); } } /** @todo if $show, then run function search query for the users */ return $views; } /** * Function to add custom user columns to the user table. * * @since 2.8.2 * * @param array $columns * @return array $columns */ function wpmem_add_user_column( $columns ) { global $wpmem_user_columns, $wpmem; // Get any columns to be added to the Users > All Users screen. $wpmem_user_columns = get_option( 'wpmembers_utfields' ); if ( $wpmem_user_columns ) { if ( $wpmem->mod_reg != 1 ) { unset( $wpmem_user_columns['active'] ); } $columns = array_merge( $columns, $wpmem_user_columns ); } // Makes WP-Members columns sortable. // @todo - finish debugging class or add sortable functions to users.php. // require_once( WPMEM_PATH . 'admin/includes/class-wp-members-sortable-user-columns.php' ); // new WP_Members_Sortable_User_Columns( $wpmem_user_columns ); return $columns; } /** * Function to add the user content to the custom column. * * @since 2.8.2 * * @param $value * @param $column_name * @param $user_id * @return The user value for the custom column. */ function wpmem_add_user_column_content( $value, $column_name, $user_id ) { // Is the column a WP-Members column? global $wpmem_user_columns, $wpmem; $is_wpmem = ( is_array( $wpmem_user_columns ) && array_key_exists( $column_name, $wpmem_user_columns ) ) ? true : false; if ( $is_wpmem ) { switch ( $column_name ) { case 'active': if ( $wpmem->mod_reg == 1 ) { /* * If the column is "active", then return the value or empty. * Returning in here keeps us from displaying another value. */ return ( get_user_meta( $user_id , 'active', 'true' ) != 1 ) ? __( 'No' ) : ''; } else { return; } break; case 'user_url': case 'user_registered': // Unlike other fields, website/url is not a meta field. $user_info = get_userdata( $user_id ); return $user_info->$column_name; break; default: return get_user_meta( $user_id, $column_name, true ); break; } } return $value; } /** * Activates a user. * * If registration is moderated, sets the activated flag * in the usermeta. Flag prevents login when $wpmem->mod_reg * is true (1). Function is fired from bulk user edit or * user profile update. * * @since 2.4 * @since 3.1.6 Dependencies now loaded by object. * * @param int $user_id * @param bool $chk_pass * @uses $wpdb WordPress Database object. */ function wpmem_a_activate_user( $user_id, $chk_pass = false ) { global $wpmem; // Define new_pass. $new_pass = ''; // If passwords are user defined skip this. if ( ! $chk_pass ) { // Generates a password to send the user. $new_pass = wp_generate_password(); $new_hash = wp_hash_password( $new_pass ); // Update the user with the new password. global $wpdb; $wpdb->update( $wpdb->users, array( 'user_pass' => $new_hash ), array( 'ID' => $user_id ), array( '%s' ), array( '%d' ) ); } // If subscriptions can expire, and the user has no expiration date, set one. if ( $wpmem->use_exp == 1 && ! get_user_meta( $user_id, 'expires', true ) ) { if ( function_exists( 'wpmem_set_exp' ) ) { wpmem_set_exp( $user_id ); } } // Generate and send user approved email to user. wpmem_inc_regemail( $user_id, $new_pass, 2 ); // Set the active flag in usermeta. update_user_meta( $user_id, 'active', 1 ); /** * Fires after the user activation process is complete. * * @since 2.8.2 * * @param int $user_id The user's ID. */ do_action( 'wpmem_user_activated', $user_id ); return; } /** * Deactivates a user. * * Reverses the active flag from the activation process * preventing login when registration is moderated. * * @since 2.7.1 * * @param int $user_id */ function wpmem_a_deactivate_user( $user_id ) { update_user_meta( $user_id, 'active', 0 ); /** * Fires after the user deactivation process is complete. * * @since 2.9.9 * * @param int $user_id The user's ID. */ do_action( 'wpmem_user_deactivated', $user_id ); } /** * Adjusts user query based on custom views. * * @since 2.8.3 * * @param $user_search */ function wpmem_a_pre_user_query( $user_search ) { global $wpdb; $show = $_GET['show']; switch ( $show ) { case 'notactive': case 'notexported': $key = ( $show == 'notactive' ) ? 'active' : 'exported'; $replace_query = "WHERE 1=1 AND {$wpdb->users}.ID NOT IN ( SELECT {$wpdb->usermeta}.user_id FROM $wpdb->usermeta WHERE {$wpdb->usermeta}.meta_key = \"$key\" AND {$wpdb->usermeta}.meta_value = '1' )"; break; case 'trial': case 'subscription': $replace_query = "WHERE 1=1 AND {$wpdb->users}.ID IN ( SELECT {$wpdb->usermeta}.user_id FROM $wpdb->usermeta WHERE {$wpdb->usermeta}.meta_key = 'exp_type' AND {$wpdb->usermeta}.meta_value = \"$show\" )"; break; case 'pending': $replace_query = "WHERE 1=1 AND {$wpdb->users}.ID IN ( SELECT {$wpdb->usermeta}.user_id FROM $wpdb->usermeta WHERE {$wpdb->usermeta}.meta_key = 'exp_type' AND {$wpdb->usermeta}.meta_value = \"$show\" )"; break; case 'expired': $replace_query = "WHERE 1=1 AND {$wpdb->users}.ID IN ( SELECT {$wpdb->usermeta}.user_id FROM $wpdb->usermeta WHERE {$wpdb->usermeta}.meta_key = 'expires' AND STR_TO_DATE( {$wpdb->usermeta}.meta_value, '%m/%d/%Y' ) < CURDATE() AND {$wpdb->usermeta}.meta_value != '01/01/1970' )"; break; } $user_search->query_where = str_replace( 'WHERE 1=1', $replace_query, $user_search->query_where ); } /** * Use wpmem_post_register_data to set the user_status field to 2 using wp_update_user. * http://codex.wordpress.org/Function_Reference/wp_update_user * * @uses wpmem_set_user_status * @param $fields */ function wpmem_set_new_user_non_active( $fields ) { wpmem_set_user_status( $fields['ID'], 2 ); return; } /** * Use wpmem_user_activated to set the user_status field to 0 using wp_update_user. * * @uses wpmem_set_user_status * @param $user_id */ function wpmem_set_activated_user( $user_id ) { wpmem_set_user_status( $user_id, 0 ); return; } /** * Use wpmem_user_deactivated to set the user_status field to 2 using wp_update_user. * * @uses wpmem_set_user_status * @param $user_id */ function wpmem_set_deactivated_user( $user_id ) { wpmem_set_user_status( $user_id, 2 ); return; } /** * Updates the user_status value in the wp_users table. * * @param $user_id * @param $status */ function wpmem_set_user_status( $user_id, $status ) { global $wpdb; $wpdb->update( $wpdb->users, array( 'user_status' => $status ), array( 'ID' => $user_id ) ); return; } // End of file.