option-wpseo-watcher.php
4.64 KB
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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
<?php
namespace Yoast\WP\SEO\Integrations\Watchers;
use Yoast\WP\SEO\Conditionals\No_Conditionals;
use Yoast\WP\SEO\Helpers\Wordproof_Helper;
use Yoast\WP\SEO\Integrations\Integration_Interface;
/**
* Watcher for the wpseo option.
*
* Represents the option wpseo watcher.
*/
class Option_Wpseo_Watcher implements Integration_Interface {
use No_Conditionals;
/**
* Holds the WordProof helper instance.
*
* @var Wordproof_Helper
*/
protected $wordproof;
/**
* The constructor for a watcher of WPSEO options.
*
* @param Wordproof_Helper $wordproof The WordProof helper instance.
*/
public function __construct( Wordproof_Helper $wordproof ) {
$this->wordproof = $wordproof;
}
/**
* Initializes the integration.
*
* This is the place to register hooks and filters.
*
* @return void
*/
public function register_hooks() {
\add_action( 'update_option_wpseo', [ $this, 'check_semrush_option_disabled' ], 10, 2 );
\add_action( 'update_option_wpseo', [ $this, 'check_wincher_option_disabled' ], 10, 2 );
\add_action( 'update_option_wpseo', [ $this, 'check_wordproof_option_disabled' ], 10, 2 );
\add_action( 'update_option_wpseo', [ $this, 'check_toggle_usage_tracking' ], 10, 2 );
}
/**
* Checks if the SEMrush integration is disabled; if so, deletes the tokens.
*
* We delete the tokens if the SEMrush integration is disabled, no matter if
* the value has actually changed or not.
*
* @param array $old_value The old value of the option.
* @param array $new_value The new value of the option.
*
* @return bool Whether the SEMrush tokens have been deleted or not.
*/
public function check_semrush_option_disabled( $old_value, $new_value ) {
return $this->check_token_option_disabled( 'semrush_integration_active', 'semrush_tokens', $new_value );
}
/**
* Checks if the Wincher integration is disabled; if so, deletes the tokens
* and website id.
*
* We delete them if the Wincher integration is disabled, no matter if the
* value has actually changed or not.
*
* @param array $old_value The old value of the option.
* @param array $new_value The new value of the option.
*
* @return bool Whether the Wincher tokens have been deleted or not.
*/
public function check_wincher_option_disabled( $old_value, $new_value ) {
$disabled = $this->check_token_option_disabled( 'wincher_integration_active', 'wincher_tokens', $new_value );
if ( $disabled ) {
\YoastSEO()->helpers->options->set( 'wincher_website_id', '' );
}
return $disabled;
}
/**
* Checks if the WordProof integration is disabled; if so, deletes the tokens
*
* We delete them if the WordProof integration is disabled, no matter if the
* value has actually changed or not.
*
* @param array $old_value The old value of the option.
* @param array $new_value The new value of the option.
*
* @return bool Whether the WordProof tokens have been deleted or not.
*/
public function check_wordproof_option_disabled( $old_value, $new_value ) {
$disabled = $this->check_token_option_disabled( 'wordproof_integration_active', 'wordproof_tokens', $new_value );
if ( $disabled ) {
$this->wordproof->remove_site_options();
}
return $disabled;
}
/**
* Checks if the usage tracking feature is toggled; if so, set an option to stop us from messing with it.
*
* @param array $old_value The old value of the option.
* @param array $new_value The new value of the option.
*
* @return bool Whether the option is set.
*/
public function check_toggle_usage_tracking( $old_value, $new_value ) {
$option_name = 'tracking';
if ( \array_key_exists( $option_name, $old_value ) && \array_key_exists( $option_name, $new_value ) && $old_value[ $option_name ] !== $new_value[ $option_name ] && $old_value['toggled_tracking'] === false ) {
\YoastSEO()->helpers->options->set( 'toggled_tracking', true );
return true;
}
return false;
}
/**
* Checks if the passed integration is disabled; if so, deletes the tokens.
*
* We delete the tokens if the integration is disabled, no matter if
* the value has actually changed or not.
*
* @param string $integration_option The intergration option name.
* @param string $target_option The target option to remove the tokens from.
* @param array $new_value The new value of the option.
*
* @return bool Whether the tokens have been deleted or not.
*/
protected function check_token_option_disabled( $integration_option, $target_option, $new_value ) {
if ( \array_key_exists( $integration_option, $new_value ) && $new_value[ $integration_option ] === false ) {
\YoastSEO()->helpers->options->set( $target_option, [] );
return true;
}
return false;
}
}