+ /**
+ * @param $db_config
+ *
+ * @return array
+ */
+ public function checkMysqlUtf8mb4($db_config) {
+ $results = array(
+ 'title' => 'CiviCRM MySQL utf8mb4 Support',
+ 'severity' => $this::REQUIREMENT_OK,
+ 'details' => 'Your system supports the MySQL utf8mb4 character set.',
+ );
+
+ $conn = $this->connect($db_config);
+ if (!$conn) {
+ $results['severity'] = $this::REQUIREMENT_ERROR;
+ $results['details'] = 'Could not connect to database';
+ return $results;
+ }
+
+ if (!@mysqli_select_db($conn, $db_config['database'])) {
+ $results['severity'] = $this::REQUIREMENT_ERROR;
+ $results['details'] = 'Could not select the database';
+ mysqli_close($conn);
+ return $results;
+ }
+
+ $r = mysqli_query($conn, 'CREATE TABLE civicrm_utf8mb4_test (id VARCHAR(255), PRIMARY KEY(id(255))) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC ENGINE=INNODB');
+ if (!$r) {
+ $results['severity'] = $this::REQUIREMENT_WARNING;
+ $results['details'] = 'It is recommended, though not yet required, to configure your MySQL server for utf8mb4 support. You will need the following MySQL server configuration: innodb_large_prefix=true innodb_file_format=barracuda innodb_file_per_table=true';
+ mysqli_close($conn);
+ return $results;
+ }
+ mysqli_query('DROP TABLE civicrm_utf8mb4_test');
+
+ // Ensure that the MySQL driver supports utf8mb4 encoding.
+ $version = mysqli_get_client_info($conn);
+ if (strpos($version, 'mysqlnd') !== FALSE) {
+ // The mysqlnd driver supports utf8mb4 starting at version 5.0.9.
+ $version = preg_replace('/^\D+([\d.]+).*/', '$1', $version);
+ if (version_compare($version, '5.0.9', '<')) {
+ $results['severity'] = $this::REQUIREMENT_WARNING;
+ $results['details'] = 'It is recommended, though not yet required, to upgrade your PHP MySQL driver (mysqlnd) to >= 5.0.9 for utf8mb4 support.';
+ mysqli_close($conn);
+ return $results;
+ }
+ }
+ else {
+ // The libmysqlclient driver supports utf8mb4 starting at version 5.5.3.
+ if (version_compare($version, '5.5.3', '<')) {
+ $results['severity'] = $this::REQUIREMENT_WARNING;
+ $results['details'] = 'It is recommended, though not yet required, to upgrade your PHP MySQL driver (libmysqlclient) to >= 5.5.3 for utf8mb4 support.';
+ mysqli_close($conn);
+ return $results;
+ }
+ }
+
+ mysqli_close($conn);
+ return $results;
+ }
+