aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB/includes/acp/acp_php_info.php
blob: 05779cec1c350b4aa0af97d0347d27d83bc791e6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
<?php
/** 
*
* @package acp
* @version $Id$
* @copyright (c) 2005 phpBB Group 
* @license http://opensource.org/licenses/gpl-license.php GNU Public License 
*
*/

/**
* @package acp
*/
class acp_php_info
{
	var $u_action;

	function main($id, $mode)
	{
		global $db, $user, $auth, $template;
		global $config, $SID, $phpbb_root_path, $phpbb_admin_path, $phpEx;

		if ($mode != 'info')
		{
			trigger_error('NO_MODE');
		}

		$this->tpl_name = 'acp_php_info';
		$this->page_title = 'ACP_PHP_INFO';
		
		ob_start(); 
		phpinfo(INFO_GENERAL | INFO_CONFIGURATION | INFO_MODULES | INFO_VARIABLES); 
		$phpinfo = ob_get_contents(); 
		ob_end_clean(); 

		// Get used layout
		$layout = (preg_match('#bgcolor#i', $phpinfo)) ? 'old' : 'new';

		// Here we play around a little with the PHP Info HTML to try and stylise
		// it along phpBB's lines ... hopefully without breaking anything. The idea
		// for this was nabbed from the PHP annotated manual
		preg_match_all('#<body[^>]*>(.*)</body>#siU', $phpinfo, $output); 

		switch ($layout)
		{
			case 'old':
				$output = preg_replace('#<table#', '<table', $output[1][0]);
				$output = preg_replace('# bgcolor="\#(\w){6}"#', '', $output);
				$output = preg_replace('#(\w),(\w)#', '\1, \2', $output);
				$output = preg_replace('#border="0" cellpadding="3" cellspacing="1" width="600"#', 'border="0" cellspacing="1" cellpadding="4" width="95%"', $output);
				$output = preg_replace('#<tr valign="top"><td align="left">(.*?<a .*?</a>)(.*?)</td></tr>#s', '<tr class="row1"><td style="{background-color: #9999cc;}"><table width="100%" cellspacing="0" cellpadding="0" border="0"><tr><td style="{background-color: #9999cc;}">\2</td><td style="{background-color: #9999cc;}">\1</td></tr></table></td></tr>', $output);
				$output = preg_replace('#<tr valign="baseline"><td[ ]{0,1}><b>(.*?)</b>#', '<tr><td class="row1" nowrap="nowrap">\1', $output);
				$output = preg_replace('#<td align="(center|left)">#', '<td class="row2">', $output);
				$output = preg_replace('#<td>#', '<td class="row2">', $output);
				$output = preg_replace('#valign="middle"#', '', $output);
				$output = preg_replace('#<tr >#', '<tr>', $output);
				$output = preg_replace('#<hr(.*?)>#', '', $output);
				$output = preg_replace('#<h1 align="center">#i', '<h1>', $output);
				$output = preg_replace('#<h2 align="center">#i', '<h2>', $output);
			break;

			case 'new':
				$output = preg_replace('#(\w),(\w)#', '\1, \2', $output[1][0]);
				$output = preg_replace('#<tr class="v"><td>(.*?<a .*?</a>)(.*?)</td></tr>#s', '<tr class="row1"><td><table class="type2"><tr><td>\2</td><td>\1</td></tr></table></td></tr>', $output);
				$output = preg_replace('#class="e"#', 'class="row1"', $output);
				$output = preg_replace('#class="v"#', 'class="row2"', $output);
				$output = preg_replace('#class="h"#', '', $output);
				$output = preg_replace('#<hr />#', '', $output);
				$output = preg_replace('#<table [^<]+>#i', '<table>', $output);
				$output = preg_replace('#<img border="0"#i', '<img', $output);
				$output = str_replace(array('<font', '</font>'), array('<span', '</span>'), $output);
				
				preg_match_all('#<div class="center">(.*)</div>#siU', $output, $output); 
				$output = $output[1][0];
			break;
		}

		$template->assign_var('PHPINFO', $output);
	}
}

/**
* @package module_install
*/
class acp_php_info_info
{
	function module()
	{
		return array(
			'filename'	=> 'acp_php_info',
			'title'		=> 'ACP_PHP_INFO',
			'version'	=> '1.0.0',
			'modes'		=> array(
				'info'		=> array('title' => 'ACP_PHP_INFO', 'auth' => 'acl_a_phpinfo'),
			),
		);
	}

	function install()
	{
	}

	function uninstall()
	{
	}
}

?>