PluginProbe ʕ •ᴥ•ʔ
Matomo Analytics – Powerful, Privacy-First Insights for WordPress / trunk
Matomo Analytics – Powerful, Privacy-First Insights for WordPress vtrunk
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 2 days ago Commands 2 days ago Db 2 days ago Ecommerce 4 weeks ago Report 4 weeks ago Site 2 days ago TrackingCode 2 days ago Updater 4 years ago User 2 days ago Workarounds 2 years ago WpStatistics 4 weeks ago views 4 weeks ago AIBotTracking.php 4 weeks ago API.php 1 month ago Access.php 2 days ago AjaxTracker.php 6 months ago Annotations.php 4 weeks ago Bootstrap.php 1 year ago Capabilities.php 2 days ago Compatibility.php 4 weeks ago Email.php 4 weeks ago ErrorNotice.php 4 weeks ago Feature.php 4 months ago Installer.php 4 weeks ago Logger.php 1 year ago MinimumRequirements.php 2 days ago MinimumRequirementsNotice.php 2 days ago MinimumRequirementsUpdateGuard.php 2 days ago OptOut.php 3 months ago Paths.php 4 weeks ago PluginActionLinks.php 4 months ago PluginAdminOverrides.php 4 weeks ago PluginInit.php 4 weeks ago PrivacyBadge.php 4 years ago RedirectOnActivation.php 4 months ago Referral.php 4 months ago Request.php 2 days ago Roles.php 4 months ago ScheduledTasks.php 4 weeks ago Settings.php 2 days ago Site.php 2 days ago TrackingCode.php 4 weeks ago Uninstaller.php 2 days ago Updater.php 4 weeks ago User.php 2 days 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