displayErrorNotice = $displayErrorNotice; } public function checkAllRequirements() { $availableTests = [ self::TEST_PDO_EXTENSION, self::TEST_FOLDER_PERMISSIONS, self::TEST_XML_EXTENSION, self::TEST_VENDOR_SOURCE, ]; $results = []; foreach ($availableTests as $test) { $callback = [$this, 'check' . $test]; if (is_callable($callback)) { $results[$test] = call_user_func($callback); } } return $results; } public function checkTempFolderCreation() { $paths = [ 'temp_path' => Env::$tempPath, ]; if (!is_dir($paths['temp_path']) && !wp_mkdir_p($paths['temp_path'])) { $error = Helpers::replaceLinkTags( __('MailPoet requires write permissions inside the /wp-content/uploads folder. Please read our [link]instructions[/link] on how to resolve this issue.', 'mailpoet'), 'https://kb.mailpoet.com/article/152-minimum-requirements-for-mailpoet-3#folder_permissions', ['target' => '_blank'] ); return $this->processError($error); } foreach ($paths as $path) { $indexFile = $path . '/index.php'; if (!file_exists($indexFile)) { file_put_contents( $path . '/index.php', str_replace('\n', PHP_EOL, ' '_blank'] ); return $this->processError($error); } public function checkXmlExtension() { if (extension_loaded('xml')) return true; $error = Helpers::replaceLinkTags( __('MailPoet requires an XML PHP extension. Please read our [link]instructions[/link] on how to resolve this issue.', 'mailpoet'), 'https://kb.mailpoet.com/article/152-minimum-requirements-for-mailpoet-3#php_extension', ['target' => '_blank'] ); return $this->processError($error); } public function checkVendorSource() { foreach ($this->vendorClasses as $dependency) { $dependencyPath = $this->getDependencyPath($dependency); if (!$dependencyPath) { $error = sprintf( // translators: %s is the dependency. __('A MailPoet dependency (%s) does not appear to be loaded correctly, thus MailPoet will not work correctly. Please reinstall the plugin.', 'mailpoet'), $dependency ); return $this->processError($error); } $pattern = '#' . preg_quote(Env::$path) . '[\\\/]#'; $isLoadedByPlugin = preg_match($pattern, $dependencyPath); if (!$isLoadedByPlugin) { $error = sprintf( // translators: %1$s is the dependency and %2$s the plugin. __('MailPoet has detected a dependency conflict (%1$s) with another plugin (%2$s), which may cause unexpected behavior. Please disable the offending plugin to fix this issue.', 'mailpoet'), $dependency, $dependencyPath ); return $this->processError($error); } } return true; } private function getDependencyPath($namespacedClass) { try { $reflector = new \ReflectionClass($namespacedClass); return $reflector->getFileName(); } catch (\ReflectionException $ex) { return false; } } public function processError($error) { if ($this->displayErrorNotice) { WPNotice::displayError($error); } return false; } }