PageRenderTime 62ms CodeModel.GetById 34ms RepoModel.GetById 0ms app.codeStats 0ms

/www/manager/controllers/default/system/info.php

https://bitbucket.org/argnist/mohana
PHP | 108 lines | 89 code | 12 blank | 7 comment | 18 complexity | 1b87326b71acc8d81c27f7d04897aec9 MD5 | raw file
Possible License(s): BSD-3-Clause, AGPL-1.0, LGPL-2.1, GPL-2.0, GPL-3.0, LGPL-2.0
  1. <?php
  2. /**
  3. * Loads the system info page
  4. *
  5. * @package modx
  6. * @subpackage controllers.system
  7. */
  8. if (!$modx->hasPermission('view_sysinfo')) return $modx->error->failure($modx->lexicon('access_denied'));
  9. function phpinfo_array($type = -1) {
  10. ob_start();
  11. phpinfo($type);
  12. $pi = preg_replace(
  13. array('#^.*<body>(.*)</body>.*$#ms', '#<h2>PHP License</h2>.*$#ms',
  14. '#<h1>Configuration</h1>#', "#\r?\n#", "#</(h1|h2|h3|tr)>#", '# +<#',
  15. "#[ \t]+#", '#&nbsp;#', '# +#', '# class=".*?"#', '%&#039;%',
  16. '#<tr>(?:.*?)" src="(?:.*?)=(.*?)" alt="PHP Logo" /></a>'
  17. .'<h1>PHP Version (.*?)</h1>(?:\n+?)</td></tr>#',
  18. '#<h1><a href="(?:.*?)\?=(.*?)">PHP Credits</a></h1>#',
  19. '#<tr>(?:.*?)" src="(?:.*?)=(.*?)"(?:.*?)Zend Engine (.*?),(?:.*?)</tr>#',
  20. "# +#", '#<tr>#', '#</tr>#'),
  21. array('$1', '', '', '', '</$1>' . "\n", '<', ' ', ' ', ' ', '', ' ',
  22. '<h2>PHP Configuration</h2>'."\n".'<tr><td>PHP Version</td><td>$2</td></tr>'.
  23. "\n".'<tr><td>PHP Egg</td><td>$1</td></tr>',
  24. '<tr><td>PHP Credits Egg</td><td>$1</td></tr>',
  25. '<tr><td>Zend Engine</td><td>$2</td></tr>' . "\n" .
  26. '<tr><td>Zend Egg</td><td>$1</td></tr>', ' ', '%S%', '%E%'),
  27. ob_get_clean());
  28. $sections = explode('<h2>', strip_tags($pi, '<h2><th><td>'));
  29. unset($sections[0]);
  30. $pi = array();
  31. foreach($sections as $section){
  32. $n = substr($section, 0, strpos($section, '</h2>'));
  33. preg_match_all(
  34. '#%S%(?:<td>(.*?)</td>)?(?:<td>(.*?)</td>)?(?:<td>(.*?)</td>)?%E%#',
  35. $section, $askapache, PREG_SET_ORDER);
  36. foreach($askapache as $m)
  37. $pi[$n][$m[1]]=(!isset($m[3])||$m[2]==$m[3])?$m[2]:array_slice($m,2);
  38. }
  39. return $pi;
  40. }
  41. function parsePHPModules() {
  42. ob_start();
  43. phpinfo(INFO_MODULES);
  44. $s = ob_get_contents();
  45. ob_end_clean();
  46. $s = strip_tags($s,'<h2><th><td>');
  47. $s = preg_replace('/<th[^>]*>([^<]+)<\/th>/',"<info>\\1</info>",$s);
  48. $s = preg_replace('/<td[^>]*>([^<]+)<\/td>/',"<info>\\1</info>",$s);
  49. $vTmp = preg_split('/(<h2>[^<]+<\/h2>)/',$s,-1,PREG_SPLIT_DELIM_CAPTURE);
  50. $vModules = array();
  51. for ($i=1;$i<count($vTmp);$i++) {
  52. if (preg_match('/<h2>([^<]+)<\/h2>/',$vTmp[$i],$vMat)) {
  53. $vName = trim($vMat[1]);
  54. $vTmp2 = explode("\n",$vTmp[$i+1]);
  55. foreach ($vTmp2 AS $vOne) {
  56. $vPat = '<info>([^<]+)<\/info>';
  57. $vPat3 = "/$vPat\s*$vPat\s*$vPat/";
  58. $vPat2 = "/$vPat\s*$vPat/";
  59. if (preg_match($vPat3,$vOne,$vMat)) { // 3cols
  60. $vModules[$vName][trim($vMat[1])] = array(trim($vMat[2]),trim($vMat[3]));
  61. } elseif (preg_match($vPat2,$vOne,$vMat)) { // 2cols
  62. $vModules[$vName][trim($vMat[1])] = trim($vMat[2]);
  63. }
  64. }
  65. }
  66. }
  67. return $vModules;
  68. }
  69. $pi = phpinfo_array(INFO_GENERAL);
  70. $m = parsePHPModules();
  71. $dbtype_mysql = $modx->config['dbtype'] == 'mysql';
  72. $dbtype_sqlsrv = $modx->config['dbtype'] == 'sqlsrv';
  73. if ($dbtype_mysql && !empty($m['mysql'])) $pi = array_merge($pi,array('mysql' => $m['mysql']));
  74. if ($dbtype_mysql && !empty($m['mysqlnd'])) $pi = array_merge($pi,array('pdo' => $m['mysqlnd']));
  75. if ($dbtype_sqlsrv && !empty($m['sqlsrv'])) $pi = array_merge($pi,array('sqlsrv' => $m['sqlsrv']));
  76. if (!empty($m['PDO'])) $pi = array_merge($pi,array('pdo' => $m['PDO']));
  77. if ($dbtype_mysql && !empty($m['pdo_mysql'])) $pi = array_merge($pi,array('pdo_mysql' => $m['pdo_mysql']));
  78. if ($dbtype_sqlsrv && !empty($m['pdo_sqlsrv'])) $pi = array_merge($pi,array('pdo_sqlsrv' => $m['pdo_sqlsrv']));
  79. if (!empty($m['zip'])) $pi = array_merge($pi,array('zip' => $m['zip']));
  80. $pi = array_merge($pi,phpinfo_array(INFO_CONFIGURATION));
  81. $modx->smarty->assign('pi',$pi);
  82. /* register JS scripts */
  83. $modx->regClientStartupScript($modx->getOption('manager_url')."assets/modext/widgets/system/{$modx->config['dbtype']}/modx.grid.databasetables.js");
  84. $modx->regClientStartupScript($modx->getOption('manager_url').'assets/modext/widgets/resource/modx.grid.resource.active.js');
  85. $modx->regClientStartupScript($modx->getOption('manager_url').'assets/modext/sections/system/info.js');
  86. $modx->regClientStartupHTMLBlock('<script type="text/javascript">
  87. Ext.onReady(function() {
  88. MODx.load({
  89. xtype: "modx-page-system-info"
  90. ,data: '.$modx->toJSON($pi).'
  91. });
  92. });
  93. </script>');
  94. $modx->smarty->assign('_pagetitle',$modx->lexicon('view_sysinfo'));
  95. $this->checkFormCustomizationRules();
  96. return $modx->smarty->fetch('system/info.tpl');