- Adds new Requirements Checker class
- Updates Initializer to check requirements
This commit is contained in:
@@ -39,12 +39,8 @@ class Env {
|
|||||||
self::$assets_path = self::$path . '/assets';
|
self::$assets_path = self::$path . '/assets';
|
||||||
self::$assets_url = plugins_url('/assets', $file);
|
self::$assets_url = plugins_url('/assets', $file);
|
||||||
$wp_upload_dir = wp_upload_dir();
|
$wp_upload_dir = wp_upload_dir();
|
||||||
self::$temp_path = self::intializePath(
|
self::$temp_path = $wp_upload_dir['basedir'] . '/' . self::$plugin_name;
|
||||||
$wp_upload_dir['basedir'] . '/' . self::$plugin_name
|
self::$cache_path = self::$temp_path . '/cache';
|
||||||
);
|
|
||||||
self::$cache_path = self::intializePath(
|
|
||||||
self::$temp_path . '/cache'
|
|
||||||
);
|
|
||||||
self::$temp_url = $wp_upload_dir['baseurl'] . '/' . self::$plugin_name;
|
self::$temp_url = $wp_upload_dir['baseurl'] . '/' . self::$plugin_name;
|
||||||
self::$languages_path = self::$path . '/lang';
|
self::$languages_path = self::$path . '/lang';
|
||||||
self::$lib_path = self::$path . '/lib';
|
self::$lib_path = self::$path . '/lib';
|
||||||
@@ -68,20 +64,6 @@ class Env {
|
|||||||
self::$db_timezone_offset = self::getDbTimezoneOffset();
|
self::$db_timezone_offset = self::getDbTimezoneOffset();
|
||||||
}
|
}
|
||||||
|
|
||||||
static function intializePath($path) {
|
|
||||||
if(!is_dir($path)) {
|
|
||||||
@mkdir($path);
|
|
||||||
if(!is_dir($path)) {
|
|
||||||
throw new \Exception(__("Failed to create a temporary folder inside the WordPress's uploads folder."));
|
|
||||||
}
|
|
||||||
file_put_contents(
|
|
||||||
$path . '/index.php',
|
|
||||||
str_replace('\n', PHP_EOL, '<?php\n\n// Silence is golden')
|
|
||||||
);
|
|
||||||
}
|
|
||||||
return $path;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static function dbSourceName($host, $socket, $port) {
|
private static function dbSourceName($host, $socket, $port) {
|
||||||
$source_name = array(
|
$source_name = array(
|
||||||
(!$socket) ? 'mysql:host=' : 'mysql:unix_socket=',
|
(!$socket) ? 'mysql:host=' : 'mysql:unix_socket=',
|
||||||
|
@@ -18,14 +18,11 @@ class Initializer {
|
|||||||
'file' => '',
|
'file' => '',
|
||||||
'version' => '1.0.0'
|
'version' => '1.0.0'
|
||||||
)) {
|
)) {
|
||||||
try {
|
|
||||||
Env::init($params['file'], $params['version']);
|
Env::init($params['file'], $params['version']);
|
||||||
} catch(\Exception $e) {
|
|
||||||
$this->handleFailedInitialization($e->getMessage());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function init() {
|
function init() {
|
||||||
|
$this->checkRequirements();
|
||||||
$this->setupDB();
|
$this->setupDB();
|
||||||
|
|
||||||
register_activation_hook(Env::$file, array($this, 'runMigrator'));
|
register_activation_hook(Env::$file, array($this, 'runMigrator'));
|
||||||
@@ -36,6 +33,11 @@ class Initializer {
|
|||||||
add_action('widgets_init', array($this, 'setupWidget'));
|
add_action('widgets_init', array($this, 'setupWidget'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function checkRequirements() {
|
||||||
|
$requrements = new RequirementsChecker();
|
||||||
|
$requrements->check();
|
||||||
|
}
|
||||||
|
|
||||||
function setupDB() {
|
function setupDB() {
|
||||||
\ORM::configure(Env::$db_source_name);
|
\ORM::configure(Env::$db_source_name);
|
||||||
\ORM::configure('username', Env::$db_username);
|
\ORM::configure('username', Env::$db_username);
|
||||||
|
76
lib/Config/RequirementsChecker.php
Normal file
76
lib/Config/RequirementsChecker.php
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
<?php
|
||||||
|
namespace MailPoet\Config;
|
||||||
|
|
||||||
|
use MailPoet\WP\Notice as WPNotice;
|
||||||
|
|
||||||
|
if(!defined('ABSPATH')) exit;
|
||||||
|
|
||||||
|
class RequirementsChecker {
|
||||||
|
function check() {
|
||||||
|
$available_tests = array(
|
||||||
|
'PHPVersion',
|
||||||
|
'WritableTempAndCacheFolders',
|
||||||
|
'PDOExtension',
|
||||||
|
'MbstringExtension'
|
||||||
|
);
|
||||||
|
$test_results = array();
|
||||||
|
foreach($available_tests as $test) {
|
||||||
|
$test_results[$test] = call_user_func(array($this, 'check' . $test));
|
||||||
|
}
|
||||||
|
return $test_results;
|
||||||
|
}
|
||||||
|
|
||||||
|
function checkPHPVersion() {
|
||||||
|
if(version_compare(phpversion(), '5.3.0', '<')) {
|
||||||
|
return $this->displayError(
|
||||||
|
__('This plugin requires PHP version 5.3 or newer.', 'mailpoet')
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function checkWritableTempAndCacheFolders() {
|
||||||
|
$paths = array(
|
||||||
|
'temp_path' => Env::$temp_path,
|
||||||
|
'cache_path' => Env::$cache_path
|
||||||
|
);
|
||||||
|
if(!is_dir($paths['cache_path']) && !wp_mkdir_p($paths['cache_path'])) {
|
||||||
|
return $this->displayError(
|
||||||
|
__('This plugin requires read/write permissions inside a WordPress uploads folder.', 'mailpoet')
|
||||||
|
);
|
||||||
|
}
|
||||||
|
foreach($paths as $path) {
|
||||||
|
$index_file = $path . '/index.php';
|
||||||
|
if(!file_exists($index_file)) {
|
||||||
|
file_put_contents(
|
||||||
|
$path . '/index.php',
|
||||||
|
str_replace('\n', PHP_EOL, '<?php\n\n// Silence is golden')
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function checkPDOExtension() {
|
||||||
|
if(!extension_loaded('pdo') && !extension_loaded('pdo_mysql')) {
|
||||||
|
$this->displayError(
|
||||||
|
__('This plugin requires PDO and PDO_MYSQL PHP extensions.', 'mailpoet')
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function checkMbstringExtension() {
|
||||||
|
if(!extension_loaded('mbstring')) {
|
||||||
|
return $this->displayError(
|
||||||
|
__('This plugin requires mbstring PHP extension.', 'mailpoet')
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function displayError($error) {
|
||||||
|
WPNotice::displayError($error);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
@@ -54,15 +54,6 @@ class EnvTest extends MailPoetTest {
|
|||||||
expect(Env::$db_charset)->equals($charset);
|
expect(Env::$db_charset)->equals($charset);
|
||||||
}
|
}
|
||||||
|
|
||||||
function testItCanInitializeTempAndCacheFolders() {
|
|
||||||
// temp and cache folders should exist and contain index.php
|
|
||||||
expect(is_dir(Env::$temp_path))->true();
|
|
||||||
expect(file_exists(Env::$temp_path . '/index.php'))->true();
|
|
||||||
expect(file_get_contents(Env::$temp_path . '/index.php'))->contains('<?php');
|
|
||||||
expect(is_dir(Env::$cache_path))->true();
|
|
||||||
expect(file_get_contents(Env::$cache_path . '/index.php'))->contains('<?php');
|
|
||||||
}
|
|
||||||
|
|
||||||
function testItCanGenerateDbSourceName() {
|
function testItCanGenerateDbSourceName() {
|
||||||
$source_name = ((!ENV::$db_socket) ? 'mysql:host=' : 'mysql:unix_socket=') .
|
$source_name = ((!ENV::$db_socket) ? 'mysql:host=' : 'mysql:unix_socket=') .
|
||||||
ENV::$db_host . ';port=' . ENV::$db_port . ';dbname=' . DB_NAME;
|
ENV::$db_host . ';port=' . ENV::$db_port . ';dbname=' . DB_NAME;
|
||||||
|
Reference in New Issue
Block a user