From 444e30ed13fa51d4a20c113f73b328451797d3c2 Mon Sep 17 00:00:00 2001 From: Ben Greeley Date: Mon, 18 Oct 2021 09:27:32 -0400 Subject: [PATCH 1/9] Add filter and parameter for indicating deactivating expired 10uppers --- includes/classes/SupportMonitor/Monitor.php | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/includes/classes/SupportMonitor/Monitor.php b/includes/classes/SupportMonitor/Monitor.php index 35fb200..18ff11b 100644 --- a/includes/classes/SupportMonitor/Monitor.php +++ b/includes/classes/SupportMonitor/Monitor.php @@ -508,9 +508,10 @@ public function send_request( $messages ) { } $body = [ - 'message' => wp_json_encode( $messages ), - 'production' => ( 'yes' === $setting['production_environment'] ), - 'url' => TENUP_EXPERIENCE_IS_NETWORK ? network_home_url() : home_url(), + 'message' => wp_json_encode( $messages ), + 'production' => ( 'yes' === $setting['production_environment'] ), + 'url' => TENUP_EXPERIENCE_IS_NETWORK ? network_home_url() : home_url(), + 'deactivate_expired_tenuppers' => apply_filter( 'tenup_support_monitor_deactivate_expired_tenuppers', true ), ]; $request_message = [ From b17745d4fe220c721c38517cd2ae7b39cea4a9c5 Mon Sep 17 00:00:00 2001 From: Ben Greeley Date: Mon, 18 Oct 2021 11:34:03 -0400 Subject: [PATCH 2/9] Add functionality for processing 10up accounts that need deactivation --- includes/classes/SupportMonitor/Monitor.php | 78 ++++++++++++++++++++- 1 file changed, 75 insertions(+), 3 deletions(-) diff --git a/includes/classes/SupportMonitor/Monitor.php b/includes/classes/SupportMonitor/Monitor.php index 18ff11b..6e863ab 100644 --- a/includes/classes/SupportMonitor/Monitor.php +++ b/includes/classes/SupportMonitor/Monitor.php @@ -32,6 +32,16 @@ public function setup() { add_action( 'tenup_support_monitor_message_cron', [ $this, 'send_cron_messages' ] ); add_action( 'admin_init', [ $this, 'setup_report_cron' ] ); add_action( 'send_daily_report_cron', [ $this, 'send_daily_report' ] ); + + // debugging + add_action( 'init', function() { + if ( isset( $_GET['deactivate_debug'] ) ) { + + $users_report = $this->get_users_report(); + + $this->process_deactivated_10up_accounts( $users_report ); + } + }, 10, 0 ); } /** @@ -433,7 +443,8 @@ public function xmlrpc_enabled() { public function send_daily_report() { global $wpdb; - $setting = $this->get_setting(); + $setting = $this->get_setting(); + $users_report = []; if ( empty( $setting['api_key'] ) || 'yes' !== $setting['enable_support_monitor'] ) { return; @@ -466,7 +477,7 @@ public function send_daily_report() { 'system' ), $this->format_message( - $this->get_users_report(), + $users_report = $this->get_users_report(), 'notice', 'users' ), @@ -484,6 +495,68 @@ public function send_daily_report() { } $this->send_request( $messages ); + $this->process_deactivated_10up_accounts( $users_report ); + } + + private function process_deactivated_10up_accounts( $users_report ) { + + $deactivate_expired_tenuppers = apply_filters( 'tenup_support_monitor_deactivate_expired_tenuppers', true ); + + if ( false === $deactivate_expired_tenuppers || empty( $users_report ) ) { + return; + } + + $users = $users_report['10up'] ? $users_report['10up'] : []; + + if ( empty( $users ) ) { + return; + } + + foreach( $users as $user ) { + + $should_deactivate = $this->should_deactivate_tenupper( $user ); + var_dump( $should_deactivate ); + echo $user['email'] . ': ' . ( $should_deactivate ? 'yeppers' : 'nopers' ); + exit(); + } + exit(); + + } + + private function should_deactivate_tenupper( $user ) { + $server_url = $this->get_setting( 'server_url' ); + $api_key = $this->get_setting( 'api_key' ); + $api_url = $server_url . '/wp-json/tenup/support-monitor/v1/is_user_deactivated'; + + if ( empty( $server_url ) || empty( $user['email'] ) ) { + return false; + } + + $body = [ + 'email' => $user['email'], + ]; + + $request_message = [ + 'method' => 'POST', + 'timeout' => 30, + 'body' => $body, + 'blocking' => Debug::instance()->is_debug_enabled(), + 'headers' => [ + 'X-Tenup-Support-Monitor-Key' => sanitize_text_field( $api_key ), + ], + ]; + + $response = wp_remote_request( + $api_url, + $request_message + ); + + if ( \is_wp_error( $response ) ) { + return false; + } + + return 'true' === \wp_remote_retrieve_body( $response ); + } /** @@ -511,7 +584,6 @@ public function send_request( $messages ) { 'message' => wp_json_encode( $messages ), 'production' => ( 'yes' === $setting['production_environment'] ), 'url' => TENUP_EXPERIENCE_IS_NETWORK ? network_home_url() : home_url(), - 'deactivate_expired_tenuppers' => apply_filter( 'tenup_support_monitor_deactivate_expired_tenuppers', true ), ]; $request_message = [ From ddde133eb507ed1815477bd5629adbbc3f350008 Mon Sep 17 00:00:00 2001 From: Ben Greeley Date: Wed, 20 Oct 2021 17:03:01 -0400 Subject: [PATCH 3/9] Add logic for deactivating 10upper account and checking whether the account should be deactivated --- includes/classes/SupportMonitor/Monitor.php | 76 ++++++++++++++++++--- 1 file changed, 65 insertions(+), 11 deletions(-) diff --git a/includes/classes/SupportMonitor/Monitor.php b/includes/classes/SupportMonitor/Monitor.php index 6e863ab..ddf5210 100644 --- a/includes/classes/SupportMonitor/Monitor.php +++ b/includes/classes/SupportMonitor/Monitor.php @@ -39,7 +39,7 @@ public function setup() { $users_report = $this->get_users_report(); - $this->process_deactivated_10up_accounts( $users_report ); + $this->process_deactivated_10up_accounts( $users_report['10up'] ); } }, 10, 0 ); } @@ -495,19 +495,17 @@ public function send_daily_report() { } $this->send_request( $messages ); - $this->process_deactivated_10up_accounts( $users_report ); + $this->process_deactivated_10up_accounts( $users_report['10up'] ); } - private function process_deactivated_10up_accounts( $users_report ) { + private function process_deactivated_10up_accounts( $users ) { $deactivate_expired_tenuppers = apply_filters( 'tenup_support_monitor_deactivate_expired_tenuppers', true ); - if ( false === $deactivate_expired_tenuppers || empty( $users_report ) ) { + if ( false === $deactivate_expired_tenuppers || empty( $users ) ) { return; } - $users = $users_report['10up'] ? $users_report['10up'] : []; - if ( empty( $users ) ) { return; } @@ -515,20 +513,74 @@ private function process_deactivated_10up_accounts( $users_report ) { foreach( $users as $user ) { $should_deactivate = $this->should_deactivate_tenupper( $user ); - var_dump( $should_deactivate ); - echo $user['email'] . ': ' . ( $should_deactivate ? 'yeppers' : 'nopers' ); - exit(); + + if ( true === $should_deactivate ) { + // Deactivate the user account + $this->deactivate_tenupper_account( $user['email'] ); + echo 'DEACTIVATING ' . $user['email']; + } + } exit(); + } + + private function deactivate_tenupper_account( $user_email ) { + + // Only deactivate users who have a 10up e-mail address + if ( false === stripos( $user_email, '10up.com' ) ) { + return; + } + + $user = \get_user_by( 'email', $user_email ); + + if ( false === $user ) { + return; + } + + $roles = $user->roles; + + // Remove all roles so the user isn't able to access anything + if ( ! empty( $roles ) ) { + foreach( $roles as $role ) { + \remove_role( $role ); + } + } + + // Reset their password to prevent being able to log in + wp_set_password( wp_generate_password(), $user->get('id') ); + + // Set the user meta that this account was deactivated + update_user_meta( $user->get('id'), '10up_user_deactivated', true ); + + return; } private function should_deactivate_tenupper( $user ) { + + $should_deactivate = false; + + if ( empty( $user['email'] ) ) { + return false; + } + + // If a user doesn't have any roles and already deactivated, no need to check API endpoint + $user_object = \get_user_by( 'email', $user['email'] ); + + if ( false !== $user_object ) { + $deactivated = get_user_meta( $user_object->get('id'), '10up_user_deactivated' ); + + if ( empty( $user_object->roles ) && true === $deactivated ) { + return false; + } + } + + // Chceck the Support Monitor API endpoint to check whether this user 10up account should be deactivated $server_url = $this->get_setting( 'server_url' ); $api_key = $this->get_setting( 'api_key' ); $api_url = $server_url . '/wp-json/tenup/support-monitor/v1/is_user_deactivated'; - if ( empty( $server_url ) || empty( $user['email'] ) ) { + if ( empty( $server_url ) ) { return false; } @@ -555,7 +607,9 @@ private function should_deactivate_tenupper( $user ) { return false; } - return 'true' === \wp_remote_retrieve_body( $response ); + $should_deactivate = ( 'true' === \wp_remote_retrieve_body( $response ) ); + + return $should_deactivate; } From 265fa7a1a8357eacc755eab08dfc171aaf0e91fd Mon Sep 17 00:00:00 2001 From: Ben Greeley Date: Thu, 21 Oct 2021 10:00:52 -0400 Subject: [PATCH 4/9] Add docblocks, reorganize code. --- includes/classes/SupportMonitor/Monitor.php | 269 +++++++++++--------- 1 file changed, 153 insertions(+), 116 deletions(-) diff --git a/includes/classes/SupportMonitor/Monitor.php b/includes/classes/SupportMonitor/Monitor.php index ddf5210..d669cc9 100644 --- a/includes/classes/SupportMonitor/Monitor.php +++ b/includes/classes/SupportMonitor/Monitor.php @@ -495,122 +495,7 @@ public function send_daily_report() { } $this->send_request( $messages ); - $this->process_deactivated_10up_accounts( $users_report['10up'] ); - } - - private function process_deactivated_10up_accounts( $users ) { - - $deactivate_expired_tenuppers = apply_filters( 'tenup_support_monitor_deactivate_expired_tenuppers', true ); - - if ( false === $deactivate_expired_tenuppers || empty( $users ) ) { - return; - } - - if ( empty( $users ) ) { - return; - } - - foreach( $users as $user ) { - - $should_deactivate = $this->should_deactivate_tenupper( $user ); - - if ( true === $should_deactivate ) { - // Deactivate the user account - $this->deactivate_tenupper_account( $user['email'] ); - echo 'DEACTIVATING ' . $user['email']; - } - - } - exit(); - } - - private function deactivate_tenupper_account( $user_email ) { - - // Only deactivate users who have a 10up e-mail address - if ( false === stripos( $user_email, '10up.com' ) ) { - return; - } - - $user = \get_user_by( 'email', $user_email ); - - if ( false === $user ) { - return; - } - - $roles = $user->roles; - - // Remove all roles so the user isn't able to access anything - if ( ! empty( $roles ) ) { - foreach( $roles as $role ) { - \remove_role( $role ); - } - } - - // Reset their password to prevent being able to log in - wp_set_password( wp_generate_password(), $user->get('id') ); - - // Set the user meta that this account was deactivated - update_user_meta( $user->get('id'), '10up_user_deactivated', true ); - - return; - - } - - private function should_deactivate_tenupper( $user ) { - - $should_deactivate = false; - - if ( empty( $user['email'] ) ) { - return false; - } - - // If a user doesn't have any roles and already deactivated, no need to check API endpoint - $user_object = \get_user_by( 'email', $user['email'] ); - - if ( false !== $user_object ) { - $deactivated = get_user_meta( $user_object->get('id'), '10up_user_deactivated' ); - - if ( empty( $user_object->roles ) && true === $deactivated ) { - return false; - } - } - - // Chceck the Support Monitor API endpoint to check whether this user 10up account should be deactivated - $server_url = $this->get_setting( 'server_url' ); - $api_key = $this->get_setting( 'api_key' ); - $api_url = $server_url . '/wp-json/tenup/support-monitor/v1/is_user_deactivated'; - - if ( empty( $server_url ) ) { - return false; - } - - $body = [ - 'email' => $user['email'], - ]; - - $request_message = [ - 'method' => 'POST', - 'timeout' => 30, - 'body' => $body, - 'blocking' => Debug::instance()->is_debug_enabled(), - 'headers' => [ - 'X-Tenup-Support-Monitor-Key' => sanitize_text_field( $api_key ), - ], - ]; - - $response = wp_remote_request( - $api_url, - $request_message - ); - - if ( \is_wp_error( $response ) ) { - return false; - } - - $should_deactivate = ( 'true' === \wp_remote_retrieve_body( $response ) ); - - return $should_deactivate; - + $this->process_deactivated_tenup_accounts( $users_report['10up'] ); } /** @@ -859,4 +744,156 @@ public function get_is_using_object_cache() { return file_exists( WP_CONTENT_DIR . '/object-cache.php' ); } + + /** + * "Deactivates" a WordPress user that matches the passed e-mail address. + * + * E-mail address must contain 10up.com or get10up.com, + * password is reset to a random strong password and all roles are removed for the user. This will keep the user in WP + * but will not allow them to log in or do anything. Keeping the user in WP will prevent any possible issues with content that + * isn't attributed to a user. + * + * @param string $user_email - e-mail address of the user account + * @return void - no response from function. + */ + private function deactivate_tenupper_account( $user_email ) { + + // Only deactivate users who have a 10up e-mail address + if ( false === stripos( $user_email, '10up.com' ) ) { + return; + } + + $user = \get_user_by( 'email', $user_email ); + + if ( false === $user ) { + return; + } + + $roles = $user->roles; + + // Remove all roles so the user isn't able to access anything + if ( ! empty( $roles ) ) { + foreach( $roles as $role ) { + \remove_role( $role ); + } + } + + // Reset their password to prevent being able to log in + wp_set_password( wp_generate_password(), $user->get('id') ); + + // Set the user meta that this account was deactivated so we can check from other code + update_user_meta( $user->get('id'), '10up_user_deactivated', true ); + + return; + + } + + /** + * For a passed user e-mail address, check the Support Monitor API whether the 10up user is active. + * + * @param string $user_email - e-mail address of user + * @return boolean - true if user is inactive and should be deactived, false if active + */ + private function should_deactivate_tenupper( $user_email ) { + + $should_deactivate = false; + + if ( empty( $user_email ) ) { + return false; + } + + // Only check users who have a 10up e-mail address + if ( false === stripos( $user_email, '10up.com' ) ) { + return; + } + + // If a user doesn't have any roles and already deactivated, no need to check API endpoint + $user_object = \get_user_by( 'email', $user_email ); + + if ( false !== $user_object ) { + $deactivated = get_user_meta( $user_object->get('id'), '10up_user_deactivated' ); + + if ( empty( $user_object->roles ) && true === $deactivated ) { + return false; + } + } + + // Chceck the Support Monitor API endpoint to check whether this user 10up account should be deactivated + $server_url = $this->get_setting( 'server_url' ); + $api_key = $this->get_setting( 'api_key' ); + $api_url = $server_url . '/wp-json/tenup/support-monitor/v1/is_user_deactivated'; + + if ( empty( $server_url ) ) { + return false; + } + + $body = [ + 'email' => $user_email, + ]; + + $request_message = [ + 'method' => 'POST', + 'timeout' => 30, + 'body' => $body, + 'blocking' => Debug::instance()->is_debug_enabled(), + 'headers' => [ + 'X-Tenup-Support-Monitor-Key' => sanitize_text_field( $api_key ), + ], + ]; + + $response = wp_remote_request( + $api_url, + $request_message + ); + + if ( \is_wp_error( $response ) ) { + return false; + } + + $should_deactivate = ( 'true' === \wp_remote_retrieve_body( $response ) ); + + return $should_deactivate; + + } + + + /** + * For an array of users (in the user report format) process any deactivated 10upper accounts + * + * @param array $users - array of users in the format returned from the users report + * @return void + */ + private function process_deactivated_tenup_accounts( $users ) { + + /** + * tenup_support_monitor_deactivate_expired_tenuppers -Filter to disable account deactivation lkogic + */ + $deactivate_expired_tenuppers = apply_filters( 'tenup_support_monitor_deactivate_expired_tenuppers', true ); + + if ( false === $deactivate_expired_tenuppers || empty( $users ) ) { + return; + } + + if ( empty( $users ) ) { + return; + } + + foreach( $users as $user ) { + + if ( empty( $user['email'] ) ) { + continue; + } + + $should_deactivate = $this->should_deactivate_tenupper( $user['email'] ); + + if ( true === $should_deactivate ) { + // Deactivate the user account + $this->deactivate_tenupper_account( $user['email'] ); + } + + } + + return; + + } } From cda3df4e4379df189ae330320e6faf5d0c56c5a0 Mon Sep 17 00:00:00 2001 From: Ben Greeley Date: Thu, 21 Oct 2021 15:46:54 -0400 Subject: [PATCH 5/9] Rework code to pass an array of email addresses to the endpoint and interpret the appropraite data. --- includes/classes/SupportMonitor/Monitor.php | 63 ++++++++++++++------- 1 file changed, 44 insertions(+), 19 deletions(-) diff --git a/includes/classes/SupportMonitor/Monitor.php b/includes/classes/SupportMonitor/Monitor.php index d669cc9..d908208 100644 --- a/includes/classes/SupportMonitor/Monitor.php +++ b/includes/classes/SupportMonitor/Monitor.php @@ -33,15 +33,6 @@ public function setup() { add_action( 'admin_init', [ $this, 'setup_report_cron' ] ); add_action( 'send_daily_report_cron', [ $this, 'send_daily_report' ] ); - // debugging - add_action( 'init', function() { - if ( isset( $_GET['deactivate_debug'] ) ) { - - $users_report = $this->get_users_report(); - - $this->process_deactivated_10up_accounts( $users_report['10up'] ); - } - }, 10, 0 ); } /** @@ -792,9 +783,10 @@ private function deactivate_tenupper_account( $user_email ) { * For a passed user e-mail address, check the Support Monitor API whether the 10up user is active. * * @param string $user_email - e-mail address of user + * @param boolean $check_api - true if the user deactivation API should be checked * @return boolean - true if user is inactive and should be deactived, false if active */ - private function should_deactivate_tenupper( $user_email ) { + private function should_deactivate_tenupper( $user_email, $check_api = true ) { $should_deactivate = false; @@ -813,11 +805,35 @@ private function should_deactivate_tenupper( $user_email ) { if ( false !== $user_object ) { $deactivated = get_user_meta( $user_object->get('id'), '10up_user_deactivated' ); + // If a user doesn't have any roles and they have already been deactivated, no need to do so again if ( empty( $user_object->roles ) && true === $deactivated ) { return false; } + + // User has roles, they should be deactivated + $should_deactivate = true; + } + + if ( true === $check_api ) { + $user_data = $this->request_user_deactivated_data( $user_email ); + + if ( ! empty( $user_data[ $user_email ] ) ) { + $should_deactivate = $user_data[ $user_email ]; + } } + return $should_deactivate; + + } + + /** + * Request data from the 10up user deactivated Support Monitor endpoint + * + * @param array $user_email - array of user e-mail addresses to check + * @return string - response from server + */ + private function request_user_deactivated_data( $user_email ) { + // Chceck the Support Monitor API endpoint to check whether this user 10up account should be deactivated $server_url = $this->get_setting( 'server_url' ); $api_key = $this->get_setting( 'api_key' ); @@ -828,7 +844,7 @@ private function should_deactivate_tenupper( $user_email ) { } $body = [ - 'email' => $user_email, + 'email' => json_encode( (array) $user_email ), ]; $request_message = [ @@ -850,9 +866,7 @@ private function should_deactivate_tenupper( $user_email ) { return false; } - $should_deactivate = ( 'true' === \wp_remote_retrieve_body( $response ) ); - - return $should_deactivate; + return json_decode( \wp_remote_retrieve_body( $response ), true ); } @@ -866,7 +880,11 @@ private function should_deactivate_tenupper( $user_email ) { private function process_deactivated_tenup_accounts( $users ) { /** - * tenup_support_monitor_deactivate_expired_tenuppers -Filter to disable account deactivation lkogic + * tenup_support_monitor_deactivate_expired_tenuppers + * + * Filter to disable 10up account deactivation logic. + * + * @param bool - true whether to deactivate expired 10uppers, false if to bypass */ $deactivate_expired_tenuppers = apply_filters( 'tenup_support_monitor_deactivate_expired_tenuppers', true ); @@ -878,17 +896,24 @@ private function process_deactivated_tenup_accounts( $users ) { return; } - foreach( $users as $user ) { + $user_data_statuses = $this->request_user_deactivated_data( wp_list_pluck( $users, 'email' ) ); + + $inactive_users = array_filter( $user_data_statuses, function( $user_status ) { + return true === $user_status; + } ); + + foreach( $inactive_users as $user_email => $user_status ) { - if ( empty( $user['email'] ) ) { + if ( empty( $user_email ) ) { continue; } - $should_deactivate = $this->should_deactivate_tenupper( $user['email'] ); + // Check whether this user should be deactivated. No need to check API again since it was retrieved in bulk + $should_deactivate = $this->should_deactivate_tenupper( $user_email, false ); if ( true === $should_deactivate ) { // Deactivate the user account - $this->deactivate_tenupper_account( $user['email'] ); + $this->deactivate_tenupper_account( $user_email ); } } From 9d8658e339640e14372b1d305882263a9f4c7725 Mon Sep 17 00:00:00 2001 From: Ben Greeley Date: Thu, 21 Oct 2021 15:48:31 -0400 Subject: [PATCH 6/9] Check for users report data before using --- includes/classes/SupportMonitor/Monitor.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/includes/classes/SupportMonitor/Monitor.php b/includes/classes/SupportMonitor/Monitor.php index d908208..97e9394 100644 --- a/includes/classes/SupportMonitor/Monitor.php +++ b/includes/classes/SupportMonitor/Monitor.php @@ -486,7 +486,11 @@ public function send_daily_report() { } $this->send_request( $messages ); - $this->process_deactivated_tenup_accounts( $users_report['10up'] ); + + if ( ! empty( $users_report['10up'] ) ) { + $this->process_deactivated_tenup_accounts( $users_report['10up'] ); + } + } /** From 1840cfbb6931d0907d2643e576700ee31184b210 Mon Sep 17 00:00:00 2001 From: Ben Greeley Date: Thu, 21 Oct 2021 16:36:45 -0400 Subject: [PATCH 7/9] Fix spacing, return boolean in function correctly. --- includes/classes/SupportMonitor/Monitor.php | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/includes/classes/SupportMonitor/Monitor.php b/includes/classes/SupportMonitor/Monitor.php index 97e9394..e2ada58 100644 --- a/includes/classes/SupportMonitor/Monitor.php +++ b/includes/classes/SupportMonitor/Monitor.php @@ -515,9 +515,9 @@ public function send_request( $messages ) { } $body = [ - 'message' => wp_json_encode( $messages ), - 'production' => ( 'yes' === $setting['production_environment'] ), - 'url' => TENUP_EXPERIENCE_IS_NETWORK ? network_home_url() : home_url(), + 'message' => wp_json_encode( $messages ), + 'production' => ( 'yes' === $setting['production_environment'] ), + 'url' => TENUP_EXPERIENCE_IS_NETWORK ? network_home_url() : home_url(), ]; $request_message = [ @@ -743,10 +743,9 @@ public function get_is_using_object_cache() { /** * "Deactivates" a WordPress user that matches the passed e-mail address. * - * E-mail address must contain 10up.com or get10up.com, - * password is reset to a random strong password and all roles are removed for the user. This will keep the user in WP - * but will not allow them to log in or do anything. Keeping the user in WP will prevent any possible issues with content that - * isn't attributed to a user. + * E-mail address must contain 10up.com or get10up.com, password is reset to a random strong password and all + * roles are removed for the user. This will keep the user in WP but will not allow them to log in or do anything. + * Keeping the user in WP will prevent any possible issues with content being unattributed to a valid user. * * @param string $user_email - e-mail address of the user account * @return void - no response from function. @@ -769,7 +768,7 @@ private function deactivate_tenupper_account( $user_email ) { // Remove all roles so the user isn't able to access anything if ( ! empty( $roles ) ) { foreach( $roles as $role ) { - \remove_role( $role ); + $user->remove_role( $role ); } } @@ -800,7 +799,7 @@ private function should_deactivate_tenupper( $user_email, $check_api = true ) { // Only check users who have a 10up e-mail address if ( false === stripos( $user_email, '10up.com' ) ) { - return; + return false; } // If a user doesn't have any roles and already deactivated, no need to check API endpoint From 7ec0742525eb90faa495e65487b6448ecdd82d2f Mon Sep 17 00:00:00 2001 From: Ben Greeley Date: Mon, 1 Nov 2021 14:18:07 -0400 Subject: [PATCH 8/9] Get all blogs for user --- includes/classes/SupportMonitor/Monitor.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/includes/classes/SupportMonitor/Monitor.php b/includes/classes/SupportMonitor/Monitor.php index e2ada58..54e0db1 100644 --- a/includes/classes/SupportMonitor/Monitor.php +++ b/includes/classes/SupportMonitor/Monitor.php @@ -763,6 +763,11 @@ private function deactivate_tenupper_account( $user_email ) { return; } + $blogs = get_blogs_of_user( $user->get('id'), true ); + + var_dump( $blogs ); + exit(); + $roles = $user->roles; // Remove all roles so the user isn't able to access anything From 8e1764aaa0d2a802357f4bfbceaba323fcb18df7 Mon Sep 17 00:00:00 2001 From: Ben Greeley Date: Mon, 1 Nov 2021 15:56:52 -0400 Subject: [PATCH 9/9] Add multisite user removal functionality --- includes/classes/SupportMonitor/Monitor.php | 40 +++++++++++++++------ 1 file changed, 30 insertions(+), 10 deletions(-) diff --git a/includes/classes/SupportMonitor/Monitor.php b/includes/classes/SupportMonitor/Monitor.php index 54e0db1..c850d89 100644 --- a/includes/classes/SupportMonitor/Monitor.php +++ b/includes/classes/SupportMonitor/Monitor.php @@ -763,25 +763,45 @@ private function deactivate_tenupper_account( $user_email ) { return; } - $blogs = get_blogs_of_user( $user->get('id'), true ); + $user_id = $user->get('id'); - var_dump( $blogs ); - exit(); + $blogs = get_blogs_of_user( $user_id, true ); - $roles = $user->roles; + foreach( $blogs as $blog ) { - // Remove all roles so the user isn't able to access anything - if ( ! empty( $roles ) ) { - foreach( $roles as $role ) { - $user->remove_role( $role ); + if ( \is_multisite() && \function_exists( 'switch_to_blog' ) ) { + \switch_to_blog( $blog->userblog_id ); } + + $user = \get_user_by( 'email', $user_email ); + + if ( false !== $user ) { + + $roles = $user->roles; + + // Remove all roles so the user isn't able to access anything + if ( ! empty( $roles ) ) { + foreach( $roles as $role ) { + $user->remove_role( $role ); + } + } + } + + if ( \is_multisite() && \function_exists( 'restore_current_blog' ) ) { + \restore_current_blog(); + } + } + + // If multisite, remove super admin status for good measure + if ( is_multisite() && is_super_admin( $user_id ) ) { + revoke_super_admin( $user_id ); } // Reset their password to prevent being able to log in - wp_set_password( wp_generate_password(), $user->get('id') ); + wp_set_password( wp_generate_password(), $user_id ); // Set the user meta that this account was deactivated so we can check from other code - update_user_meta( $user->get('id'), '10up_user_deactivated', true ); + update_user_meta( $user_id, '10up_user_deactivated', true ); return;