diff --git a/plugins/bcc-login/bcc-login.php b/plugins/bcc-login/bcc-login.php index 5be994c..528f135 100644 --- a/plugins/bcc-login/bcc-login.php +++ b/plugins/bcc-login/bcc-login.php @@ -28,6 +28,7 @@ require_once( 'includes/class-bcc-storage.php' ); require_once( 'includes/class-bcc-notifications.php' ); require_once( 'includes/class-exclusive-lock.php' ); +require_once( 'includes/class-bcc-login-cleanup.php' ); class BCC_Login { /** @@ -51,7 +52,8 @@ class BCC_Login { private BCC_Coreapi_Client $_coreapi; private BCC_Notifications $_notifications; private BCC_Storage $_storage; - + private BCC_Login_Cleanup $_cleanup; + /** * Initialize the plugin. */ @@ -73,6 +75,7 @@ private function __construct(){ $this->_feed = new BCC_Login_Feed( $this->_settings, $this->_client ); $this->_updater = new BCC_Login_Updater( $this->plugin, $this->plugin_slug, $this->plugin_version, $this->plugin_name ); $this->_notifications = new BCC_Notifications( $this->_settings, $this->_coreapi ); + $this->_cleanup = new BCC_Login_Cleanup(); if (!empty($this->_settings->site_groups) || !empty($this->_settings->full_content_access_groups)) { $this->_coreapi->ensure_subscription_to_person_updates(); @@ -265,6 +268,7 @@ static function activate_plugin() { * Called when plugin is deactivated */ static function deactivate_plugin() { + BCC_Login_Cleanup::unschedule(); flush_rewrite_rules(); } diff --git a/plugins/bcc-login/includes/class-bcc-login-cleanup.php b/plugins/bcc-login/includes/class-bcc-login-cleanup.php new file mode 100644 index 0000000..54dfe18 --- /dev/null +++ b/plugins/bcc-login/includes/class-bcc-login-cleanup.php @@ -0,0 +1,69 @@ +get_results( + "SELECT meta_key, COUNT(*) AS count + FROM {$wpdb->usermeta} + WHERE meta_key LIKE 'openid-connect-generic%' + GROUP BY meta_key" + ); + + $deleted = 0; + foreach ( (array) $legacy_meta_keys as $legacy_meta_key ) { + // Unlike a plain DELETE query, this also clears the cached meta of the users. + delete_metadata( 'user', 0, $legacy_meta_key->meta_key, '', true ); + $deleted += (int) $legacy_meta_key->count; + } + + $remaining = $wpdb->get_var( + "SELECT COUNT(*) FROM {$wpdb->usermeta} WHERE meta_key LIKE 'openid-connect-generic%'" + ); + + // Null means the query failed. + if ( null === $remaining || (int) $remaining > 0 ) { + return false; + } + + return $deleted; + } +} diff --git a/plugins/bcc-login/includes/class-bcc-login-settings.php b/plugins/bcc-login/includes/class-bcc-login-settings.php index f4149a8..7baf398 100644 --- a/plugins/bcc-login/includes/class-bcc-login-settings.php +++ b/plugins/bcc-login/includes/class-bcc-login-settings.php @@ -653,8 +653,9 @@ function render_delete_subscribers_button () {