PluginProbe ʕ •ᴥ•ʔ
Matomo Analytics – Powerful, Privacy-First Insights for WordPress / 5.13.0
Matomo Analytics – Powerful, Privacy-First Insights for WordPress v5.13.0
5.13.0 5.12.1 5.12.0 5.11.1 5.11.0 5.10.2 5.10.1 trunk 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.1.0 1.1.1 1.1.2 1.1.3 1.2.0 1.3.0 1.3.1 1.3.2 4.0.0 4.0.1 4.0.2 4.0.3 4.0.4 4.1.0 4.1.1 4.1.2 4.1.3 4.10.0 4.11.0 4.12.0 4.13.0 4.13.2 4.13.3 4.13.4 4.13.5 4.14.0 4.14.1 4.14.2 4.15.0 4.15.1 4.15.2 4.15.3 4.2.0 4.3.0 4.3.1 4.4.1 4.4.2 4.5.0 4.6.0 5.0.1 5.0.2 5.0.3 5.0.4 5.0.5 5.0.6 5.0.7 5.0.8 5.1.0 5.1.1 5.1.2 5.1.3 5.1.4 5.1.5 5.1.6 5.1.7 5.10.0 5.2.0 5.2.1 5.2.2 5.3.0 5.3.1 5.3.2 5.3.3 5.6.0 5.6.1 5.7.0 5.7.1 5.8.0 5.8.1 5.8.2
matomo / classes / WpMatomo / MinimumRequirements.php
matomo / classes / WpMatomo Last commit date
Admin 1 week ago Commands 1 week ago Db 1 week ago Ecommerce 1 month ago Report 1 month ago Site 1 week ago TrackingCode 1 week ago Updater 5 years ago User 1 week ago Workarounds 2 years ago WpStatistics 1 month ago views 1 month ago AIBotTracking.php 1 month ago API.php 1 month ago Access.php 1 week ago AjaxTracker.php 6 months ago Annotations.php 1 month ago Bootstrap.php 1 year ago Capabilities.php 1 week ago Compatibility.php 1 month ago Email.php 1 month ago ErrorNotice.php 1 month ago Feature.php 4 months ago Installer.php 1 month ago Logger.php 1 year ago MinimumRequirements.php 1 week ago MinimumRequirementsNotice.php 1 week ago MinimumRequirementsUpdateGuard.php 1 week ago OptOut.php 3 months ago Paths.php 1 month ago PluginActionLinks.php 4 months ago PluginAdminOverrides.php 1 month ago PluginInit.php 1 month ago PrivacyBadge.php 5 years ago RedirectOnActivation.php 4 months ago Referral.php 4 months ago Request.php 1 week ago Roles.php 4 months ago ScheduledTasks.php 1 month ago Settings.php 1 week ago Site.php 1 week ago TrackingCode.php 1 month ago Uninstaller.php 1 week ago Updater.php 1 month ago User.php 1 week ago
MinimumRequirements.php
144 lines
1 <?php
2 /**
3 * Matomo - free/libre analytics platform
4 *
5 * @link https://matomo.org
6 * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
7 * @package matomo
8 */
9
10 namespace WpMatomo;
11
12 if ( ! defined( 'ABSPATH' ) ) {
13 exit; // if accessed directly
14 }
15
16 /**
17 * Checks if the system requirements for Matomo core are met by the current system.
18 *
19 * This class is used while the plugin is still booting (see WpMatomo::is_safe_mode())
20 * and on servers that may not be able to run the bundled Matomo at all. It must
21 * stay parseable on the oldest PHP version the plugin supports and must
22 * never load anything from app/.
23 */
24 class MinimumRequirements {
25
26 const REQUIRED_PHP_VERSION = '8.1';
27 const REQUIRED_MYSQL_VERSION = '8.0';
28 const REQUIRED_MARIADB_VERSION = '10.6';
29
30 /**
31 * The first plugin version that actually requires the versions above. Until the
32 * plugin is updated to that version everything in this class is only used to warn
33 * users about the upcoming change.
34 */
35 const ENFORCED_FROM_VERSION = '6.0.0';
36
37 /**
38 * @var array|null
39 */
40 private $db_server;
41
42 /**
43 * @param string $plugin_version
44 * @return bool
45 */
46 public function does_plugin_version_require_new_minimums( $plugin_version ) {
47 if ( empty( $plugin_version ) ) {
48 return false;
49 }
50
51 return version_compare( $plugin_version, self::ENFORCED_FROM_VERSION, '>=' );
52 }
53
54 /**
55 * @param string $plugin_version
56 * @param string $php_version
57 * @return bool
58 */
59 public function can_this_system_run_plugin_version( $plugin_version, $php_version = PHP_VERSION ) {
60 if ( ! $this->does_plugin_version_require_new_minimums( $plugin_version ) ) {
61 return true;
62 }
63
64 return ! $this->get_unmet_requirements( $php_version );
65 }
66
67 /**
68 * @param string $php_version
69 * @return string[]
70 */
71 public function get_unmet_requirements( $php_version = PHP_VERSION ) {
72 $unmet = [];
73
74 if ( version_compare( $php_version, self::REQUIRED_PHP_VERSION, '<' ) ) {
75 $unmet[] = sprintf(
76 __( 'PHP %1$s or higher is required (you are currently using PHP %2$s).', 'matomo' ),
77 self::REQUIRED_PHP_VERSION,
78 $php_version
79 );
80 }
81
82 $db = $this->get_db_server();
83 if ( ! empty( $db['version'] ) ) {
84 if ( $db['is_mariadb'] ) {
85 if ( version_compare( $db['version'], self::REQUIRED_MARIADB_VERSION, '<' ) ) {
86 $unmet[] = sprintf(
87 __( 'MariaDB %1$s or higher is required (you are currently using MariaDB %2$s).', 'matomo' ),
88 self::REQUIRED_MARIADB_VERSION,
89 $db['version']
90 );
91 }
92 } elseif ( version_compare( $db['version'], self::REQUIRED_MYSQL_VERSION, '<' ) ) {
93 $unmet[] = sprintf(
94 __( 'MySQL %1$s or higher is required (you are currently using MySQL %2$s).', 'matomo' ),
95 self::REQUIRED_MYSQL_VERSION,
96 $db['version']
97 );
98 }
99 }
100
101 return $unmet;
102 }
103
104 /**
105 * Detects the database server this WordPress install is connected to.
106 *
107 * @return array an array with an `is_mariadb` bool and a `version` string. The version
108 * is empty when it cannot be detected.
109 */
110 public function get_db_server() {
111 if ( isset( $this->db_server ) ) {
112 return $this->db_server;
113 }
114
115 global $wpdb;
116
117 if ( empty( $wpdb ) || empty( $wpdb->is_mysql ) ) {
118 $this->db_server = [
119 'is_mariadb' => false,
120 'version' => '',
121 ];
122
123 return $this->db_server;
124 }
125
126 $server_info = method_exists( $wpdb, 'db_server_info' ) ? $wpdb->db_server_info() : '';
127 $is_mariadb = $server_info && false !== stripos( $server_info, 'mariadb' );
128
129 if ( $is_mariadb && preg_match( '/(?:5\.5\.5-)?(\d+\.\d+\.\d+).*?mariadb/i', $server_info, $matches ) ) {
130 $version = $matches[1];
131 } else {
132 // db_version() strips any suffix and returns the numeric version only.
133 $version = (string) $wpdb->db_version();
134 }
135
136 $this->db_server = [
137 'is_mariadb' => $is_mariadb,
138 'version' => $version,
139 ];
140
141 return $this->db_server;
142 }
143 }
144