![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/mautic.corals.io/app/bundles/InstallBundle/Configurator/Step/ |
<?php namespace Mautic\InstallBundle\Configurator\Step; use Mautic\CoreBundle\Configurator\Configurator; use Mautic\CoreBundle\Configurator\Step\StepInterface; use Mautic\CoreBundle\Helper\FileHelper; use Mautic\CoreBundle\Security\Cryptography\Cipher\Symmetric\OpenSSLCipher; use Mautic\InstallBundle\Configurator\Form\CheckStepType; use Symfony\Component\HttpFoundation\RequestStack; class CheckStep implements StepInterface { /** * Flag if the configuration file is writable. */ private bool $configIsWritable; /** * Absolute path to cache directory. * Required in step. * * @var string */ public $cache_path = '%kernel.project_dir%/var/cache'; /** * Absolute path to log directory. * Required in step. * * @var string */ public $log_path = '%kernel.project_dir%/var/logs'; /** * Set the domain URL for use in getting the absolute URL for cli/cronjob generated URLs. * * @var string */ public $site_url = ''; /** * Recommended minimum memory limit for Mautic. * * @var string */ public const RECOMMENDED_MEMORY_LIMIT = '512M'; /** * @param Configurator $configurator Configurator service * @param string $projectDir Kernel root path * @param RequestStack $requestStack Request stack */ public function __construct( Configurator $configurator, private string $projectDir, RequestStack $requestStack, private OpenSSLCipher $openSSLCipher ) { $request = $requestStack->getCurrentRequest(); $this->configIsWritable = $configurator->isFileWritable(); if (!empty($request)) { $this->site_url = $request->getSchemeAndHttpHost().$request->getBasePath(); } } public function getFormType(): string { return CheckStepType::class; } public function checkRequirements(): array { $messages = []; if (!is_dir($this->projectDir.'/vendor/composer')) { $messages[] = 'mautic.install.composer.dependencies'; } if (!$this->configIsWritable) { $messages[] = 'mautic.install.config.unwritable'; } if (!is_writable(str_replace('%kernel.project_dir%', $this->projectDir, $this->cache_path))) { $messages[] = 'mautic.install.cache.unwritable'; } if (!is_writable(str_replace('%kernel.project_dir%', $this->projectDir, $this->log_path))) { $messages[] = 'mautic.install.logs.unwritable'; } $timezones = []; foreach (\DateTimeZone::listAbbreviations() as $abbreviations) { foreach ($abbreviations as $abbreviation) { $timezones[$abbreviation['timezone_id']] = true; } } if (!isset($timezones[date_default_timezone_get()])) { $messages[] = 'mautic.install.timezone.not.supported'; } if (!function_exists('json_encode')) { $messages[] = 'mautic.install.function.jsonencode'; } if (!function_exists('session_start')) { $messages[] = 'mautic.install.function.sessionstart'; } if (!function_exists('ctype_alpha')) { $messages[] = 'mautic.install.function.ctypealpha'; } if (!function_exists('token_get_all')) { $messages[] = 'mautic.install.function.tokengetall'; } if (!function_exists('simplexml_import_dom')) { $messages[] = 'mautic.install.function.simplexml'; } if (false === $this->openSSLCipher->isSupported()) { $messages[] = 'mautic.install.extension.openssl'; } if (!function_exists('curl_init')) { $messages[] = 'mautic.install.extension.curl'; } if (!function_exists('finfo_open')) { $messages[] = 'mautic.install.extension.fileinfo'; } if (!function_exists('mb_strtolower')) { $messages[] = 'mautic.install.extension.mbstring'; } if (extension_loaded('xdebug')) { if (ini_get('xdebug.show_exception_trace')) { $messages[] = 'mautic.install.xdebug.exception.trace'; } if (ini_get('xdebug.scream')) { $messages[] = 'mautic.install.xdebug.scream'; } } return $messages; } public function checkOptionalSettings(): array { $messages = []; if (extension_loaded('xdebug')) { $cfgValue = ini_get('xdebug.max_nesting_level'); if ($cfgValue <= 100) { $messages[] = 'mautic.install.xdebug.nesting'; } } if (!extension_loaded('zip')) { $messages[] = 'mautic.install.extension.zip'; } // We set a default timezone in the app bootstrap, but advise the user if their PHP config is missing it if (!ini_get('date.timezone')) { $messages[] = 'mautic.install.date.timezone.not.set'; } if (!class_exists('\\DomDocument')) { $messages[] = 'mautic.install.module.phpxml'; } if (!function_exists('iconv')) { $messages[] = 'mautic.install.function.iconv'; } if (!extension_loaded('xml')) { $messages[] = 'mautic.install.function.xml'; } if (!function_exists('imap_open')) { $messages[] = 'mautic.install.extension.imap'; } if (!$this->site_url || !str_starts_with($this->site_url, 'https')) { $messages[] = 'mautic.install.ssl.certificate'; } if (!defined('PHP_WINDOWS_VERSION_BUILD')) { if (!function_exists('posix_isatty')) { $messages[] = 'mautic.install.function.posix.enable'; } } $memoryLimit = FileHelper::convertPHPSizeToBytes(ini_get('memory_limit')); $suggestedLimit = FileHelper::convertPHPSizeToBytes(self::RECOMMENDED_MEMORY_LIMIT); if ($memoryLimit > -1 && $memoryLimit < $suggestedLimit) { $messages[] = 'mautic.install.memory.limit'; } if (!class_exists('\\Locale')) { $messages[] = 'mautic.install.module.intl'; } if (class_exists('\\Collator')) { try { if (is_null(new \Collator('fr_FR'))) { $messages[] = 'mautic.install.intl.config'; } } catch (\Exception) { $messages[] = 'mautic.install.intl.config'; } } if (-1 !== (int) ini_get('zend.assertions')) { $messages[] = 'mautic.install.zend_assertions'; } return $messages; } public function getTemplate(): string { return '@MauticInstall/Install/check.html.twig'; } /** * @return mixed[] */ public function update(StepInterface $data): array { $parameters = []; foreach ($data as $key => $value) { // Exclude keys from the config if (!in_array($key, ['configIsWritable', 'projectDir'])) { $parameters[$key] = $value; } } return $parameters; } }