Files
ultimatemember/includes/admin/core/class-admin-users.php
T
nikitozzzzzzz cbf06f5835 - fixed bbPress restrict content message on forums;
- fixed issues with permalinks (issue #375);
- fixed replacing placeholders in [show_content_for_role] shortcode;
2018-02-18 13:27:46 +02:00

295 lines
10 KiB
PHP

<?php
namespace um\admin\core;
// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) exit;
if ( ! class_exists( 'Admin_Users' ) ) {
class Admin_Users {
function __construct() {
$this->custom_role = 'um_role';
add_action( 'restrict_manage_users', array( &$this, 'restrict_manage_users' ) );
add_filter( 'user_row_actions', array( &$this, 'user_row_actions' ), 10, 2 );
add_filter( 'pre_user_query', array( &$this, 'sort_by_newest' ) );
add_filter( 'pre_user_query', array( &$this, 'filter_users_by_status' ) );
add_filter( 'views_users', array( &$this, 'add_status_links' ) );
add_action( 'admin_init', array( &$this, 'um_bulk_users_edit' ), 9 );
}
/**
* Add UM Bulk actions to Users List Table
*
*/
function restrict_manage_users() { ?>
<div style="float:right;margin:0 4px">
<label class="screen-reader-text" for="um_bulk_action"><?php _e( 'UM Action', 'ultimate-member' ); ?></label>
<select name="um_bulk_action[]" id="um_bulk_action" class="" style="width: 200px">
<option value="0"><?php _e( 'UM Action', 'ultimate-member' ); ?></option>
<?php echo $this->get_bulk_admin_actions(); ?>
</select>
<input name="um_bulkedit" id="um_bulkedit" class="button" value="<?php _e( 'Apply', 'ultimate-member' ); ?>" type="submit" />
</div>
<?php if ( ! empty( $_REQUEST['status'] ) ) { ?>
<input type="hidden" name="status" id="um_status" value="<?php echo esc_attr( $_REQUEST['status'] );?>"/>
<?php }
}
/**
* Get UM bulk actions HTML
*
* @return string
*/
function get_bulk_admin_actions() {
$actions = apply_filters( 'um_admin_bulk_user_actions_hook', array(
'um_approve_membership' => array(
'label' => __( 'Approve Membership', 'ultimate-member' )
),
'um_reject_membership' => array(
'label' => __( 'Reject Membership', 'ultimate-member' )
),
'um_put_as_pending' => array(
'label' => __( 'Put as Pending Review', 'ultimate-member' )
),
'um_resend_activation' => array(
'label' => __( 'Resend Activation E-mail', 'ultimate-member' )
),
'um_deactivate' => array(
'label' => __( 'Deactivate', 'ultimate-member' )
),
'um_reenable' => array(
'label' => __( 'Reactivate', 'ultimate-member' )
)
) );
$output = '';
foreach ( $actions as $id => $action_data ) {
$output .= '<option value="' . $id . '" '. disabled( isset( $arr['disabled'] ), true, false ) . '>' . $action_data['label'] . '</option>';
}
return $output;
}
/**
* Custom row actions for users page
*
* @param array $actions
* @param $user_object \WP_User
* @return array
*/
function user_row_actions( $actions, $user_object ) {
$user_id = $user_object->ID;
$actions['frontend_profile'] = "<a class='' href='" . UM()->user()->get_profile_link( $user_id ) . "'>" . __( 'View profile', 'ultimate-member' ) . "</a>";
$submitted = get_user_meta( $user_id, 'submitted', true );
if ( ! empty( $submitted ) )
$actions['view_info'] = '<a href="#" data-modal="UM_preview_registration" data-modal-size="smaller" data-dynamic-content="um_admin_review_registration" data-arg1="' . $user_id . '" data-arg2="edit_registration">' . __( 'Info', 'ultimate-member' ) . '</a>';
$actions = apply_filters( 'um_admin_user_row_actions', $actions, $user_id );
return $actions;
}
/**
* Change default sorting at WP Users list table
*
* @param $query
* @return mixed
*/
function sort_by_newest( $query ) {
global $pagenow;
if ( is_admin() && $pagenow == 'users.php' ) {
if ( ! isset( $_REQUEST['orderby'] ) ) {
$query->query_vars["order"] = 'desc';
$query->query_orderby = " ORDER BY user_registered " . ( $query->query_vars["order"] == "desc" ? "desc " : "asc " ); //set sort order
}
}
return $query;
}
/**
* Filter WP users by UM Status
*
* @param $query
* @return mixed
*/
function filter_users_by_status( $query ) {
global $wpdb, $pagenow;
if ( is_admin() && $pagenow == 'users.php' && ! empty( $_GET['status'] ) ) {
$status = urldecode( $_GET['status'] );
if ( $status == 'needs-verification' ) {
$query->query_where = str_replace('WHERE 1=1',
"WHERE 1=1 AND {$wpdb->users}.ID IN (
SELECT {$wpdb->usermeta}.user_id FROM $wpdb->usermeta
WHERE {$wpdb->usermeta}.meta_key = '_um_verified'
AND {$wpdb->usermeta}.meta_value = 'pending')",
$query->query_where
);
} else {
$query->query_where = str_replace('WHERE 1=1',
"WHERE 1=1 AND {$wpdb->users}.ID IN (
SELECT {$wpdb->usermeta}.user_id FROM $wpdb->usermeta
WHERE {$wpdb->usermeta}.meta_key = 'account_status'
AND {$wpdb->usermeta}.meta_value = '{$status}')",
$query->query_where
);
}
}
return $query;
}
/**
* Add status links to WP Users List Table
*
* @param $views
* @return array|mixed|void
*/
function add_status_links( $views ) {
remove_filter( 'pre_user_query', array( &$this, 'filter_users_by_status' ) );
$old_views = $views;
$views = array();
if ( ! isset( $_REQUEST['role'] ) && ! isset( $_REQUEST['status'] ) ) {
$views['all'] = '<a href="' . admin_url( 'users.php' ) . '" class="current">All <span class="count">(' . UM()->query()->count_users() . ')</span></a>';
} else {
$views['all'] = '<a href="' . admin_url( 'users.php' ) . '">All <span class="count">(' . UM()->query()->count_users() . ')</span></a>';
}
$status = array(
'approved' => __( 'Approved', 'ultimate-member' ),
'awaiting_admin_review' => __( 'Pending review', 'ultimate-member' ),
'awaiting_email_confirmation' => __( 'Waiting e-mail confirmation', 'ultimate-member' ),
'inactive' => __( 'Inactive', 'ultimate-member' ),
'rejected' => __( 'Rejected', 'ultimate-member' )
);
UM()->query()->count_users_by_status( 'unassigned' );
foreach ( $status as $k => $v ) {
if ( isset( $_REQUEST['status'] ) && $_REQUEST['status'] == $k ) {
$current = 'class="current"';
} else {
$current = '';
}
$views[$k] = '<a href="' . admin_url( 'users.php' ) . '?status=' . $k . '" ' . $current . '>'. $v . ' <span class="count">('.UM()->query()->count_users_by_status( $k ).')</span></a>';
}
$views = apply_filters( 'um_admin_views_users', $views );
// remove all filters
unset( $old_views['all'] );
// add separator
$views['subsep'] = '<span></span>';
// merge views
foreach ( $old_views as $key => $view ) {
$views[ $key ] = $view;
}
return $views;
}
/***
*** @Bulk user editing actions
***/
function um_bulk_users_edit() {
$admin_err = 0;
// bulk edit users
if ( ! empty( $_REQUEST['users'] ) && ! empty( $_REQUEST['um_bulkedit'] ) && ! empty( $_REQUEST['um_bulk_action'] ) ) {
if ( ! current_user_can( 'edit_users' ) )
wp_die( __( 'You do not have enough permissions to do that.', 'ultimate-member' ) );
check_admin_referer( 'bulk-users' );
$users = $_REQUEST['users'];
$bulk_action = current( array_filter( $_REQUEST['um_bulk_action'] ) );
foreach ( $users as $user_id ) {
UM()->user()->set( $user_id );
if ( ! um_user( 'super_admin' ) ) {
do_action( "um_admin_user_action_hook", $bulk_action );
do_action( "um_admin_user_action_{$bulk_action}_hook" );
} else {
$admin_err = 1;
}
}
// Finished. redirect now
if ( $admin_err == 0 ) {
$uri = $this->set_redirect_uri( admin_url( 'users.php' ) );
$uri = add_query_arg( 'update', 'users_updated', $uri );
wp_redirect( $uri );
exit;
} else {
wp_redirect( admin_url( 'users.php?update=err_users_updated' ) );
exit;
}
} else if ( ! empty( $_REQUEST['um_bulkedit'] ) ) {
$uri = $this->set_redirect_uri( admin_url( 'users.php' ) );
wp_redirect( $uri );
exit;
}
}
/**
* Sets redirect URI after bulk action
*
* @param string $uri
* @return string
*/
function set_redirect_uri( $uri ) {
if ( ! empty( $_REQUEST['s'] ) )
$uri = add_query_arg( 's', $_REQUEST['s'], $uri );
if ( ! empty( $_REQUEST['status'] ) )
$uri = add_query_arg( 'status', $_REQUEST['status'], $uri );
return $uri;
}
}
}