Skip to content
Snippets Groups Projects

On activation and deactivation, clean up tokens in previous storage

Merged Erick Hitter requested to merge add/activation-hooks into master
2 files
+ 96
0
Compare changes
  • Side-by-side
  • Inline
Files
2
+ 93
0
 
<?php
 
/**
 
* Plugin activation hooks to migrate and clean up data.
 
*
 
* @package Redis_User_Session_Storage
 
*/
 
 
namespace Redis_User_Session_Storage;
 
 
/**
 
* Class Activation_Deactivation_Hooks.
 
*/
 
final class Activation_Deactivation_Hooks {
 
/**
 
* Cron hook for usermeta session cleanup.
 
*
 
* @var string
 
*/
 
private $cron_hook = 'redis_user_session_storage_clean_usermeta_storage';
 
 
/**
 
* Activation_Hooks constructor.
 
*
 
* @param string $plugin_file Path to plugin's main file.
 
*/
 
public function __construct( $plugin_file ) {
 
register_activation_hook(
 
$plugin_file,
 
array( $this, 'clean_usermeta_storage' )
 
);
 
 
register_deactivation_hook(
 
$plugin_file,
 
array( $this, 'clean_redis_storage' )
 
);
 
 
add_action(
 
$this->cron_hook,
 
array( $this, 'do_scheduled_cleanup' )
 
);
 
}
 
 
/**
 
* Remove all sessions from usermeta on activation.
 
*
 
* @return void
 
*/
 
public function clean_usermeta_storage() {
 
wp_schedule_single_event(
 
time() + 600,
 
'redis_user_session_storage_clean_usermeta_storage'
 
);
 
}
 
 
/**
 
* Remove session data from usermeta using cron to avoid excessive load.
 
*
 
* While this could use `WP_User_Meta_Session_Tokens::drop_sessions()`, this
 
* approach is safer for large sites.
 
*
 
* @return void
 
*/
 
public function do_scheduled_cleanup() {
 
global $wpdb;
 
 
$this->clean_usermeta_storage();
 
 
$key = 'session_tokens';
 
 
$count = $wpdb->get_var(
 
"SELECT COUNT(*) FROM $wpdb->usermeta WHERE meta_key = '$key'"
 
);
 
 
if ( ! $count ) {
 
wp_clear_scheduled_hook( $this->cron_hook );
 
}
 
 
$wpdb->query(
 
"DELETE FROM $wpdb->usermeta WHERE meta_key = '$key' LIMIT 500"
 
);
 
}
 
 
/**
 
* Remove all sessions from Redis on deactivation.
 
*
 
* @return void
 
*/
 
public function clean_redis_storage() {
 
wp_clear_scheduled_hook( $this->cron_hook );
 
 
Plugin::drop_sessions();
 
}
 
}
Loading