ID, false ); if ( $disabled ) { return new WP_Error('ul_user_disabled', __('ERROR: This user account is disabled.', 'user-locker')); } $locked = get_user_option( 'ul_locked', $user->ID, false ); if ( $locked ) { return new WP_Error('ul_user_locked', __('ERROR: This user account is locked for security reasons. Please use Lost Password option to unlock it.', 'user-locker')); } return $user; } // Set password check flag function check_password( $check ) { $this->pass_check = true; return $check; } // Increment bad attempt counter and finally lock account function wp_login_failed( $username ) { if ( !$this->pass_check ) { // Function called too early return; } $user = get_userdatabylogin($username); if ( !$user || ($user->user_login != $username) ) { // Invalid username return; } $disabled = get_user_option( 'ul_disabled', $user->ID, false ); $locked = get_user_option( 'ul_locked', $user->ID, false ); if ( !$disabled && !$locked ) { $cnt = get_user_option( 'ul_bad_attempts', $user->ID, false ); if ( $cnt === false ) { $cnt = 1; } else { ++$cnt; } update_user_option( $user->ID, 'ul_bad_attempts', $cnt, false ); if ( $cnt >= get_option( 'userlocker_max_attempts' ) ) { $this->locked = true; update_user_option( $user->ID, 'ul_locked', true, false ); } } } // Reset account lock on pass reset function password_reset( $user ) { $this->unlock_user( $user->ID ); } // Reset account lock on valid login function wp_login( $username ) { $user = get_userdatabylogin( $username ); $this->unlock_user( $user->ID ); } // Unlock account for given user function unlock_user( $user_id ) { update_user_option( $user_id, 'ul_bad_attempts', 0, false ); update_user_option( $user_id, 'ul_locked', false, false ); } // Add info about account lock function login_errors( $errors ) { if ( $this->locked ) { $errors .= __('ERROR: This user account has been locked for security reasons. Please use Lost Password option to unlock it.', 'user-locker') . "
\n"; } return $errors; } function edit_user_profile() { if ( !current_user_can( 'edit_users' ) ) { return; } global $user_id; // User cannot disable itself $current_user = wp_get_current_user(); $current_user_id = $current_user->ID; if ( $current_user_id == $user_id ) { return; } ?>

ID; if ( $current_user_id == $user_id ) { return; } $locked = get_user_option( 'ul_locked', $user_id, false ); $new_locked = isset( $_POST['ul_locked'] ); if ( $locked != $new_locked ) { update_user_option( $user_id, 'ul_locked', $new_locked, false ); if ( !$new_locked ) { update_user_option( $user_id, 'ul_bad_attempts', 0, false ); } } $new_disabled = isset( $_POST['ul_disabled'] ); update_user_option( $user_id, 'ul_disabled', $new_disabled, false ); } // Compare current WP version with given one. // Returns positive number when current version is greater, 0 when equal and negative when smaller. // Note: version number can have up to 3 parts (x.x.x) function check_wp_version( $v1, $v2, $v3 = 0 ) { global $wp_version; $ver = explode( '.', $wp_version ); $n = (int)$ver[0] - $v1; if ( $n != 0 ) { return $n; } $n = (int)$ver[1] - $v2; if ( $n != 0 ) { return $n; } if ( count( $ver ) >= 3 ) { return (int)$ver[2] - $v3; } else { return 0 - $v3; } } // Add new column to the user list page function manage_users_columns( $columns ) { // This requires WP 2.8+ if ( $this->check_wp_version( 2, 8 ) >= 0 ) { $columns['userlocker'] = __('Locked / Disabled', 'user-locker'); } return $columns; } // Add column content for each user on user list function manage_users_custom_column( $value, $column_name, $user_id ) { if ( $column_name == 'userlocker' ) { if ( get_user_option( 'ul_locked', $user_id, false ) ) { $ret = ''.__('Yes', 'user-locker').''; } else { $ret = __('No', 'user-locker'); } $ret .= ' / '; if ( get_user_option( 'ul_disabled', $user_id, false ) ) { $ret .= ''.__('Yes', 'user-locker').''; } else { $ret .= __('No', 'user-locker'); } return $ret; } return $value; } function sanitize_nonnegative( $value ) { $value = (int)$value; if ( $value < 0 ) { $value = 0; } return $value; } // Display settings form function options_panel() { $message = null; if ( isset($_POST['action']) ) { check_admin_referer( 'user-locker-options' ); $message = __('Configuration has been saved.', 'user-locker'); echo '

', $message, '

', "\n"; } ?>