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; } }