'item', //singular name of the listed records
'plural' => 'items', //plural name of the listed records
'ajax' => false //does this table support ajax?
) );
}
function column_default($item, $column_name){
return $item[$column_name];
}
function column_ID($item){
//$tab = strip_tags($_REQUEST['tab']);
$delete_url = sprintf('admin.php?page=%s&action=%s&user_id=%s', AIOWPSEC_USER_REGISTRATION_MENU_SLUG, 'delete_acct', $item['ID']);
//Add nonce to delete URL
$delete_url_nonce = wp_nonce_url($delete_url, "delete_user_acct", "aiowps_nonce");
$block_ip = sprintf('admin.php?page=%s&action=%s&ip_address=%s', AIOWPSEC_USER_REGISTRATION_MENU_SLUG, 'block_ip', $item['ip_address']);
//Add nonce to block IP
$block_ip_nonce = wp_nonce_url($block_ip, "block_ip", "aiowps_nonce");
//Build row actions
$actions = array(
'view' => sprintf('View',$item['ID']),
'approve_acct' => sprintf('Approve',AIOWPSEC_USER_REGISTRATION_MENU_SLUG,'approve_acct',$item['ID']),
'delete_acct' => 'Delete',
'block_ip' => 'Block IP',
);
//Return the user_login contents
return sprintf('%1$s %2$s',
/*$1%s*/ $item['ID'],
/*$2%s*/ $this->row_actions($actions)
);
}
function column_ip_address($item){
if (AIOWPSecurity_Blocking::is_ip_blocked($item['ip_address'])){
return $item['ip_address'].'
'.__('blocked','WPS').'';
} else{
return $item['ip_address'];
}
}
function column_cb($item){
return sprintf(
'',
/*$1%s*/ $this->_args['singular'], //Let's simply repurpose the table's singular label
/*$2%s*/ $item['ID'] //The value of the checkbox should be the record's id
);
}
function get_columns(){
$columns = array(
'cb' => '', //Render a checkbox
'ID' => 'User ID',
'user_login' => 'Login Name',
'user_email' => 'Email',
'user_registered' => 'Register Date',
'account_status' => 'Account Status',
'ip_address' => 'IP Address'
);
return $columns;
}
function get_sortable_columns() {
$sortable_columns = array(
// 'ID' => array('ID',false),
// 'user_login' => array('user_login',false),
// 'user_email' => array('user_email',false),
// 'user_registered' => array('user_registered',false),
// 'account_status' => array('account_status',false),
);
return $sortable_columns;
}
function get_bulk_actions() {
$actions = array(
'approve' => 'Approve',
'delete' => 'Delete',
'block' => 'Block IP'
);
return $actions;
}
function process_bulk_action() {
if('approve'===$this->current_action())
{//Process approve bulk actions
if(!isset($_REQUEST['item']))
{
AIOWPSecurity_Admin_Menu::show_msg_error_st(__('Please select some records using the checkboxes','all-in-one-wp-security-and-firewall'));
}else
{
$this->approve_selected_accounts(($_REQUEST['item']));
}
}
if('delete'===$this->current_action())
{//Process delete bulk actions
if(!isset($_REQUEST['item']))
{
AIOWPSecurity_Admin_Menu::show_msg_error_st(__('Please select some records using the checkboxes','all-in-one-wp-security-and-firewall'));
}else
{
$this->delete_selected_accounts(($_REQUEST['item']));
}
}
if('block'===$this->current_action())
{//Process block bulk actions
if(!isset($_REQUEST['item']))
{
AIOWPSecurity_Admin_Menu::show_msg_error_st(__('Please select some records using the checkboxes','all-in-one-wp-security-and-firewall'));
}else
{
$this->block_selected_ips(($_REQUEST['item']));
}
}
}
function approve_selected_accounts($entries)
{
global $wpdb, $aio_wp_security;
$meta_key = 'aiowps_account_status';
$meta_value = 'approved'; //set account status
$failed_accts = ''; //string to store comma separated accounts which failed to update
$at_least_one_updated = false;
if (is_array($entries))
{
//Let's go through each entry and approve
foreach($entries as $user_id)
{
$result = update_user_meta($user_id, $meta_key, $meta_value);
if($result === false)
{
$failed_accts .= ' '.$user_id.',';
$aio_wp_security->debug_logger->log_debug("AIOWPSecurity_List_Registered_Users::approve_selected_accounts() - could not approve account ID: $user_id",4);
}else{
$at_least_one_updated = true;
$user = get_user_by('id', $user_id);
if($user === false){
//don't send mail
}else{
$email_msg = '';
$to_email_address = $user->user_email;
$subject = '['.get_option('siteurl').'] '. __('Your account is now active','all-in-one-wp-security-and-firewall');
$email_msg .= __('Your account with user ID:','all-in-one-wp-security-and-firewall').$user->ID.__(' is now active','all-in-one-wp-security-and-firewall')."\n";
$site_title = get_bloginfo( 'name' );
$from_name = empty($site_title)?'WordPress':$site_title;
$subject = apply_filters( 'aiowps_register_approval_email_subject', $subject );
$email_msg = apply_filters( 'aiowps_register_approval_email_msg', $email_msg, $user ); //also pass the WP_User object
$from_name = apply_filters( 'aiowps_register_approval_email_from_name', $from_name );
$email_header = 'From: '.$from_name.' <'.get_bloginfo('admin_email').'>' . "\r\n\\";
$sendMail = wp_mail($to_email_address, $subject, $email_msg, $email_header);
if(FALSE === $sendMail){
$aio_wp_security->debug_logger->log_debug("Manual account approval notification email failed to send to ".$to_email_address,4);
}
}
}
}
if ($at_least_one_updated){
AIOWPSecurity_Admin_Menu::show_msg_updated_st(__('The selected accounts were approved successfully!','all-in-one-wp-security-and-firewall'));
}
if ($failed_accts != ''){//display any failed account updates
rtrim($failed_accts);
AIOWPSecurity_Admin_Menu::show_msg_error_st(__('The following accounts failed to update successfully: ','all-in-one-wp-security-and-firewall').$failed_accts);
}
} elseif ($entries != NULL)
{
//Approve single account
$result = update_user_meta($entries, $meta_key, $meta_value);
if($result)
{
AIOWPSecurity_Admin_Menu::show_msg_updated_st(__('The selected account was approved successfully!','all-in-one-wp-security-and-firewall'));
$user = get_user_by('id', $entries);
$to_email_address = $user->user_email;
$email_msg = '';
$subject = '['.get_option('siteurl').'] '. __('Your account is now active','all-in-one-wp-security-and-firewall');
$email_msg .= __('Your account with username: ','all-in-one-wp-security-and-firewall').$user->user_login.__(' is now active','all-in-one-wp-security-and-firewall')."\n";
$site_title = get_bloginfo( 'name' );
$from_name = empty($site_title)?'WordPress':$site_title;
$subject = apply_filters( 'aiowps_register_approval_email_subject', $subject );
$email_msg = apply_filters( 'aiowps_register_approval_email_msg', $email_msg, $user ); //also pass the WP_User object
$from_name = apply_filters( 'aiowps_register_approval_email_from_name', $from_name );
$email_header = 'From: '.$from_name.' <'.get_bloginfo('admin_email').'>' . "\r\n\\";
$sendMail = wp_mail($to_email_address, $subject, $email_msg, $email_header);
if(FALSE === $sendMail){
$aio_wp_security->debug_logger->log_debug("Manual account approval notification email failed to send to ".$to_email_address,4);
}
}else if($result === false){
$aio_wp_security->debug_logger->log_debug("AIOWPSecurity_List_Registered_Users::approve_selected_accounts() - could not approve account ID: $user_id",4);
}
}
}
function delete_selected_accounts($entries)
{
global $wpdb, $aio_wp_security;
if (is_array($entries))
{
if (isset($_REQUEST['_wp_http_referer']))
{
//Let's go through each entry and delete account
foreach($entries as $user_id)
{
$result = wp_delete_user($user_id);
if($result !== true)
{
$aio_wp_security->debug_logger->log_debug("AIOWPSecurity_List_Registered_Users::delete_selected_accounts() - could not delete account ID: $user_id",4);
}
}
AIOWPSecurity_Admin_Menu::show_msg_updated_st(__('The selected accounts were deleted successfully!','all-in-one-wp-security-and-firewall'));
}
} elseif ($entries != NULL)
{
$nonce=isset($_GET['aiowps_nonce'])?$_GET['aiowps_nonce']:'';
if (!isset($nonce) ||!wp_verify_nonce($nonce, 'delete_user_acct'))
{
$aio_wp_security->debug_logger->log_debug("Nonce check failed for delete registered user account operation!",4);
die(__('Nonce check failed for delete registered user account operation!','all-in-one-wp-security-and-firewall'));
}
//Delete single account
$result = wp_delete_user($entries);
if($result === true)
{
AIOWPSecurity_Admin_Menu::show_msg_updated_st(__('The selected account was deleted successfully!','all-in-one-wp-security-and-firewall'));
}
else
{
$aio_wp_security->debug_logger->log_debug("AIOWPSecurity_List_Registered_Users::delete_selected_accounts() - could not delete account ID: $entries",4);
}
}
}
function block_selected_ips($entries)
{
global $wpdb, $aio_wp_security;
if (is_array($entries))
{
if (isset($_REQUEST['_wp_http_referer']))
{
//Let's go through each entry and block IP
foreach($entries as $id)
{
$ip_address = get_user_meta($id, 'aiowps_registrant_ip', true);
$result = AIOWPSecurity_Blocking::add_ip_to_block_list($ip_address, 'registration_spam');
if($result === false)
{
$aio_wp_security->debug_logger->log_debug("AIOWPSecurity_List_Registered_Users::block_selected_ips() - could not block IP : $ip_address",4);
}
}
$msg = __('The selected IP addresses were successfully added to the permanent block list!','all-in-one-wp-security-and-firewall');
$msg .= ' '.__('View Blocked IPs','all-in-one-wp-security-and-firewall').'';
AIOWPSecurity_Admin_Menu::show_msg_updated_st($msg);
}
} elseif ($entries != NULL)
{
$nonce=isset($_GET['aiowps_nonce'])?$_GET['aiowps_nonce']:'';
if (!isset($nonce) ||!wp_verify_nonce($nonce, 'block_ip'))
{
$aio_wp_security->debug_logger->log_debug("Nonce check failed for block IP operation of registered user!",4);
die(__('Nonce check failed for block IP operation of registered user!','all-in-one-wp-security-and-firewall'));
}
//Block single IP
$result = AIOWPSecurity_Blocking::add_ip_to_block_list($entries, 'registration_spam');
if($result === true)
{
$msg = __('The selected IP was successfully added to the permanent block list!','all-in-one-wp-security-and-firewall');
$msg .= ' '.__('View Blocked IPs','all-in-one-wp-security-and-firewall').'';
AIOWPSecurity_Admin_Menu::show_msg_updated_st($msg);
}
else
{
$aio_wp_security->debug_logger->log_debug("AIOWPSecurity_List_Registered_Users::block_selected_ips() - could not block IP: $entries",4);
}
}
}
function prepare_items() {
//First, lets decide how many records per page to show
$per_page = 20;
$columns = $this->get_columns();
$hidden = array();
$sortable = $this->get_sortable_columns();
$search = isset( $_REQUEST['s'] ) ? sanitize_text_field( $_REQUEST['s'] ) : '';
$this->_column_headers = array($columns, $hidden, $sortable);
$this->process_bulk_action();
//Get registered users which have the special 'aiowps_account_status' meta key set to 'pending'
$data = $this->get_registered_user_data('pending', $search);
$current_page = $this->get_pagenum();
$total_items = count($data);
$data = array_slice($data,(($current_page-1)*$per_page),$per_page);
$this->items = $data;
$this->set_pagination_args( array(
'total_items' => $total_items, //WE have to calculate the total number of items
'per_page' => $per_page, //WE have to determine how many items to show on a page
'total_pages' => ceil($total_items/$per_page) //WE have to calculate the total number of pages
));
}
//Returns all users who have the special 'aiowps_account_status' meta key
function get_registered_user_data($status='', $search='')
{
$user_fields = array( 'ID', 'user_login', 'user_email', 'user_registered');
$user_query = new WP_User_Query(array('meta_key' => 'aiowps_account_status', 'meta_value' => $status, 'fields' => $user_fields));
$user_results = $user_query->results;
$final_data = array();
foreach ($user_results as $user)
{
$temp_array = get_object_vars($user); //Turn the object into array
$temp_array['account_status'] = get_user_meta($temp_array['ID'], 'aiowps_account_status', true);
$ip = get_user_meta($temp_array['ID'], 'aiowps_registrant_ip', true);
$temp_array['ip_address'] = empty($ip)?'':$ip;
if(empty($search)) {
$final_data[] = $temp_array;
} else {
$input = preg_quote($search, '~'); // don't forget to quote input string!
$result = preg_grep('~' . $input . '~', $temp_array);
if(!empty($result)) $final_data[] = $temp_array;
}
}
return $final_data;
}
}