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');