diff --git a/web/concrete/controllers/single_page/dashboard/system/environment/info.php b/web/concrete/controllers/single_page/dashboard/system/environment/info.php index 726c1263574..ddc1c82eced 100644 --- a/web/concrete/controllers/single_page/dashboard/system/environment/info.php +++ b/web/concrete/controllers/single_page/dashboard/system/environment/info.php @@ -12,114 +12,28 @@ class Info extends DashboardPageController { public function get_environment_info() { - $activeLocale = Localization::activeLocale(); - if ($activeLocale != 'en_US') { - Localization::changeLocale('en_US'); - } - $maxExecutionTime = ini_get('max_execution_time'); - set_time_limit(5); + $info = $this->app->make('\Concrete\Core\System\Info'); + /* @var \Concrete\Core\System\Info $info */ - $environmentMessage = "# concrete5 Version\n"; - $environmentMessage .= "Core Version - " . \Config::get('concrete.version') . "\n"; - $environmentMessage .= "Version Installed - " . \Config::get('concrete.version_installed') . "\n"; - $environmentMessage .= "Database Version - " . \Config::get('concrete.version_db') . "\n\n"; + echo "# concrete5 Version\n".$info->getCoreVersions()."\n\n"; - $environmentMessage .= "# concrete5 Packages\n"; - $pla = PackageList::get(); - $pl = $pla->getPackages(); - $packages = array(); - foreach ($pl as $p) { - if ($p->isPackageInstalled()) { - $packages[] = $p->getPackageName() . ' (' . $p->getPackageVersion() . ')'; - } - } - if (count($packages) > 0) { - natcasesort($packages); - $environmentMessage .= implode(', ', $packages); - $environmentMessage .= ".\n"; - } else { - $environmentMessage .= "None\n"; - } - $environmentMessage .= "\n"; + echo "# concrete5 Packages\n".($info->getPackages() ?: 'None')."\n\n"; - // overrides - $environmentMessage .= "# concrete5 Overrides\n"; - $env = Environment::get(); - $overrides = $env->getOverrideList(); + echo "# concrete5 Overrides\n".($info->getOverrides() ?: 'None')."\n\n"; - if (count($overrides) > 0) { - $environmentMessage .= implode(', ', $overrides); - $environmentMessage .= "\n"; - } else { - $environmentMessage .= "None\n"; - } - $environmentMessage .= "\n"; + echo "# concrete5 Cache Settings\n".$info->getCache()."\n\n"; - print $environmentMessage; + echo "# Server Software\n".$info->getServerSoftware()."\n\n"; - // cache - $environmentMessage = "# concrete5 Cache Settings\n"; - $environmentMessage .= sprintf("Block Cache - %s\n", Config::get('concrete.cache.blocks') ? 'On' : 'Off'); - $environmentMessage .= sprintf("Overrides Cache - %s\n", Config::get('concrete.cache.overrides') ? 'On' : 'Off'); - $environmentMessage .= sprintf("Full Page Caching - %s\n", (Config::get('concrete.cache.pages') == 'blocks' ? 'On - If blocks on the particular page allow it.' : (Config::get('concrete.cache.pages') == 'all' ? 'On - In all cases.' : 'Off'))); - if (Config::get('concrete.cache.full_page_lifetime')) { - $environmentMessage .= sprintf("Full Page Cache Lifetime - %s\n", (Config::get('concrete.cache.full_page_lifetime') == 'default' ? sprintf('Every %s (default setting).', Core::make('helper/date')->describeInterval(Config::get('concrete.cache.lifetime'))) : (Config::get('concrete.cache.full_page_lifetime') == 'forever' ? 'Only when manually removed or the cache is cleared.' : sprintf('Every %s minutes.', Config::get('concrete.cache.full_page_lifetime_value'))))); - } - $environmentMessage .= "\n"; - print $environmentMessage; + echo "# Server API\n".$info->getServerAPI()."\n\n"; - $environmentMessage = "# Server Software\n" . $_SERVER['SERVER_SOFTWARE'] . "\n\n"; - $environmentMessage .= "# Server API\n" . php_sapi_name() . "\n\n"; - $environmentMessage .= "# PHP Version\n" . PHP_VERSION . "\n\n"; - $environmentMessage .= "# PHP Extensions\n"; - if (function_exists('get_loaded_extensions')) { - $gle = @get_loaded_extensions(); - natcasesort($gle); - $environmentMessage .= implode(', ', $gle); - $environmentMessage .= ".\n"; - } else { - $environmentMessage .= "Unable to determine\n"; - } + echo "# PHP Version\n".$info->getPhpVersion()."\n\n"; - print $environmentMessage; + echo "# PHP Extensions\n".($info->getPhpExtensions() === false ? 'Unable to determine' : $info->getPhpExtensions())."\n\n"; - ob_start(); - phpinfo(); - $section = 'phpinfo'; - $phpinfo = array($section => array()); - if (preg_match_all('#(?:

(?:)?(.*?)(?:)?

)|(?:(.*?)\s*(?:(.*?)\s*(?:(.*?)\s*)?)?)#s', ob_get_clean(), $matches, PREG_SET_ORDER)) { - foreach ($matches as $match) { - if (strlen($match[1])) { - $section = $match[1]; - $phpinfo[$section] = array(); - } elseif (isset($match[3])) { - $phpinfo[$section][$match[2]] = isset($match[4]) ? array($match[3], $match[4]) : $match[3]; - } else { - $phpinfo[$section][] = $match[2]; - } - } - } - $environmentMessage = "\n# PHP Settings\n"; - $environmentMessage .= "max_execution_time - $maxExecutionTime\n"; - foreach ($phpinfo as $name => $section) { - foreach ($section as $key => $val) { - if (preg_match('/.*max_execution_time*/', $key)) { - continue; - } - if (!preg_match('/.*limit.*/', $key) && !preg_match('/.*safe.*/', $key) && !preg_match('/.*max.*/', $key)) { - continue; - } - if (is_array($val)) { - $environmentMessage .= "$key - $val[0]\n"; - } elseif (is_string($key)) { - $environmentMessage .= "$key - $val\n"; - } else { - $environmentMessage .= "$val\n"; - } - } - } + echo "# PHP Settings\n".$info->getPhpSettings(); - print $environmentMessage; exit; } + } diff --git a/web/concrete/src/System/Info.php b/web/concrete/src/System/Info.php new file mode 100644 index 00000000000..1246c331852 --- /dev/null +++ b/web/concrete/src/System/Info.php @@ -0,0 +1,347 @@ +make('config'); + $maxExecutionTime = ini_get('max_execution_time'); + @set_time_limit(5); + + $this->installed = (bool) $app->isInstalled(); + + $this->webRootDirectory = DIR_BASE; + + $this->coreRootDirectory = DIR_BASE_CORE; + + $versions = ['Core Version - '.$config->get('concrete.version')]; + if ($this->installed) { + $versions[] = 'Version Installed - '.$config->get('concrete.version_installed'); + } + $versions[] = 'Database Version - '.$config->get('concrete.version_db'); + $this->coreVersions = implode("\n", $versions); + + $packages = []; + if ($this->installed) { + foreach (PackageList::get()->getPackages() as $p) { + if ($p->isPackageInstalled()) { + $packages[] = $p->getPackageName() . ' (' . $p->getPackageVersion() . ')'; + } + } + } + natcasesort($packages); + $this->packages = implode(', ', $packages); + + $overrides = Environment::get()->getOverrideList(); + if (empty($overrides)) { + $this->overrides = ''; + } else { + $this->overrides = implode(', ', $overrides); + } + + $cache = [ + sprintf('Block Cache - %s', $config->get('concrete.cache.blocks') ? 'On' : 'Off'), + sprintf('Overrides Cache - %s', $config->get('concrete.cache.overrides') ? 'On' : 'Off'), + sprintf('Full Page Caching - %s', + $config->get('concrete.cache.pages') == 'blocks' ? + 'On - If blocks on the particular page allow it.' + : + ( + $config->get('concrete.cache.pages') == 'all' ? + 'On - In all cases.' + : + 'Off' + ) + ), + ]; + if ($config->get('concrete.cache.full_page_lifetime')) { + $cache[] = sprintf("Full Page Cache Lifetime - %s", + $config->get('concrete.cache.full_page_lifetime') == 'default' ? + sprintf('Every %s (default setting).', $app->make('helper/date')->describeInterval($config->get('concrete.cache.lifetime'))) + : + ( + $config->get('concrete.cache.full_page_lifetime') == 'forever' ? + 'Only when manually removed or the cache is cleared.' + : + sprintf('Every %s minutes.', $config->get('concrete.cache.full_page_lifetime_value')) + ) + ); + } + $this->cache = implode("\n", $cache); + + $this->serverSoftware = \Request::getInstance()->server->get('SERVER_SOFTWARE', ''); + + $this->serverAPI = PHP_SAPI; + + $this->phpVersion = PHP_VERSION; + + if (function_exists('get_loaded_extensions')) { + $extensions = @get_loaded_extensions(); + } else { + $extensions = false; + } + if (is_array($extensions)) { + natcasesort($extensions); + $this->phpExtensions = implode(', ', $extensions); + } else { + $this->phpExtensions = false; + } + + ob_start(); + phpinfo(); + $buffer = ob_get_clean(); + $phpinfo = []; + if ($app->isRunThroughCommandLineInterface()) { + $section = null; + foreach (preg_split('/[\r\n]+/', $buffer) as $line) { + $chunks = array_map('trim', explode('=>', $line)); + switch (count($chunks)) { + case 1: + if ($chunks[0] === '') { + continue; + } + $section = $chunks[0]; + break; + case 2: + if ($section !== null) { + $phpinfo[$section][$chunks[0]] = $chunks[1]; + } + break; + default: + if ($section !== null) { + $phpinfo[$section][$chunks[0]] = [$chunks[1], $chunks[2]]; + } + break; + } + } + } else { + $section = 'phpinfo'; + $phpinfo[$section] = []; + if (preg_match_all('#(?:

(?:)?(.*?)(?:)?

)|(?:(.*?)\s*(?:(.*?)\s*(?:(.*?)\s*)?)?)#s', $buffer, $matches, PREG_SET_ORDER)) { + foreach ($matches as $match) { + if ($match[1] !== null && $match[1] !== '') { + $section = $match[1]; + $phpinfo[$section] = []; + } elseif (isset($match[3])) { + $phpinfo[$section][$match[2]] = isset($match[4]) ? [$match[3], $match[4]] : $match[3]; + } else { + $phpinfo[$section][] = $match[2]; + } + } + } + } + $phpSettings = [ + "max_execution_time - $maxExecutionTime", + ]; + foreach ($phpinfo as $name => $section) { + foreach ($section as $key => $val) { + if (preg_match('/.*max_execution_time*/', $key)) { + continue; + } + if (strpos($key, 'limit') === false && strpos($key, 'safe') === false && strpos($key, 'max') === false) { + continue; + } + if (is_array($val)) { + $phpSettings[] = "$key - {$val[0]}"; + } elseif (is_string($key)) { + $phpSettings[] = "$key - $val"; + } else { + $phpSettings[] = $val; + } + } + } + $this->phpSettings = implode("\n", $phpSettings); + if ($currentLocale != 'en_US') { + Localization::changeLocale($currentLocale); + } + } catch (\Exception $x) { + if ($currentLocale != 'en_US') { + Localization::changeLocale($currentLocale); + } + throw $x; + } + } + + /** + * @return bool + */ + public function isInstalled() + { + return $this->installed; + } + + /** + * @return string + */ + public function getWebRootDirectory() + { + return $this->webRootDirectory; + } + + /** + * @return string + */ + public function getCoreRootDirectory() + { + return $this->coreRootDirectory; + } + + /** + * @return string + */ + public function getCoreVersions() + { + return $this->coreVersions; + } + + /** + * @return string + */ + public function getPackages() + { + return $this->packages; + } + + /** + * @return string + */ + public function getOverrides() + { + return $this->overrides; + } + + /** + * @return string + */ + public function getCache() + { + return $this->cache; + } + + /** + * @return string + */ + public function getServerSoftware() + { + return $this->serverSoftware; + } + + /** + * @return string + */ + public function getServerAPI() + { + return $this->serverAPI; + } + + /** + * @return string + */ + public function getPhpVersion() + { + return $this->phpVersion; + } + + /** + * @var string|false + */ + protected $phpExtensions; + + /** + * @return string|false + */ + public function getPhpExtensions() + { + return $this->phpExtensions; + } + + /** + * @var string + */ + protected $phpSettings; + + /** + * @return string + */ + public function getPhpSettings() + { + return $this->phpSettings; + } + + public function getJSONOBject() + { + $o = new \stdClass(); + $o->phpSettings = $this->phpSettings; + $o->phpExtensions = $this->phpExtensions; + $o->phpVersion = $this->phpVersion; + $o->serverAPI = $this->serverAPI; + $o->serverSoftware = $this->serverSoftware; + $o->cache = $this->cache; + $o->overrides = $this->overrides; + $o->packages = $this->packages; + $o->coreVersions = $this->coreVersions; + return $o; + } +} diff --git a/web/concrete/src/Updater/ApplicationUpdate.php b/web/concrete/src/Updater/ApplicationUpdate.php index 592ef0190bb..f83f5c3cd61 100644 --- a/web/concrete/src/Updater/ApplicationUpdate.php +++ b/web/concrete/src/Updater/ApplicationUpdate.php @@ -153,6 +153,9 @@ public function getDiagnosticObject() } $overrides = id(Environment::get())->getOverrideList(); $request->getPost()->set('overrides', $overrides); + $info = \Core::make('\Concrete\Core\System\Info'); + $info = $info->getJSONOBject(); + $request->getPost()->set('environment', json_encode($info)); $client = new Client(); $client->setMethod('POST');