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
|
<?php /** * WPSEO plugin file. * * @package WPSEO\Plugin_Compatibility */
/** * Class WPSEO_Plugin_Compatibility. */ class WPSEO_Plugin_Compatibility {
/** * @var string */ protected $current_wpseo_version;
/** * @var WPSEO_Plugin_Availability */ protected $availability_checker;
/** * @var array */ protected $installed_plugins;
/** * WPSEO_Plugin_Compatibility constructor. * * @param string $version The version to check against. * @param null|class $availability_checker The checker to use. */ public function __construct( $version, $availability_checker = null ) { // We trim off the patch version, as this shouldn't break the comparison. $this->current_wpseo_version = $this->get_major_minor_version( $version ); $this->availability_checker = $this->retrieve_availability_checker( $availability_checker ); $this->installed_plugins = $this->availability_checker->get_installed_plugins(); }
/** * Retrieves the availability checker. * * @param null|object $checker The checker to set. * * @return WPSEO_Plugin_Availability The checker to use. */ private function retrieve_availability_checker( $checker ) { if ( is_null( $checker ) || ! is_object( $checker ) ) { $checker = new WPSEO_Plugin_Availability(); $checker->register(); }
return $checker; }
/** * Wraps the availability checker's get_installed_plugins method. * * @return array Array containing all the installed plugins. */ public function get_installed_plugins() { return $this->installed_plugins; }
/** * Creates a list of installed plugins and whether or not they are compatible. * * @return array Array containing the installed plugins and compatibility. */ public function get_installed_plugins_compatibility() { foreach ( $this->installed_plugins as $key => $plugin ) {
$this->installed_plugins[ $key ]['compatible'] = $this->is_compatible( $key ); }
return $this->installed_plugins; }
/** * Checks whether or not a plugin is compatible. * * @param string $plugin The plugin to look for and match. * * @return bool Whether or not the plugin is compatible. */ public function is_compatible( $plugin ) { $plugin = $this->availability_checker->get_plugin( $plugin );
// If we are not syncing versions, we are always compatible. if ( ! isset( $plugin['version_sync'] ) || $plugin['version_sync'] !== true ) { return true; }
$plugin_version = $this->availability_checker->get_version( $plugin ); return $this->get_major_minor_version( $plugin_version ) === $this->current_wpseo_version; }
/** * Gets the major/minor version of the plugin for easier comparing. * * @param string $version The version to trim. * * @return string The major/minor version of the plugin. */ protected function get_major_minor_version( $version ) { return substr( $version, 0, 3 ); } }
|