"git@git.ethitter.com:wp-plugins/taxonomy-dropdown-widget.git" did not exist on "ded26962bc7626b8dff83b07323e3510623d2345"
Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
<?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();
}
}