<?
define("ADMIN_MODULE_NAME", "perfmon");

require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_before.php");
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/perfmon/include.php");
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/perfmon/prolog.php");

IncludeModuleLangFile(__FILE__);

$RIGHT = $APPLICATION->GetGroupRight("perfmon");
if($RIGHT=="D")
	$APPLICATION->AuthForm(GetMessage("ACCESS_DENIED"));

$data = array(
	"tuning" => array(
		"NAME" => GetMessage("PERFMON_PHP_TUNING_NAME"),
		"TITLE" => GetMessage("PERFMON_PHP_TUNING_TITLE"),
		"HEADERS" => array(
			array(
				"id" => "PARAMETER",
				"content" => GetMessage("PERFMON_PHP_TUNING_PARAMETER"),
				"default" => true,
			),
			array(
				"id" => "VALUE",
				"content" => GetMessage("PERFMON_PHP_TUNING_VALUE"),
				"align" => "right",
				"default" => true,
			),
			array(
				"id" => "RECOMMENDATION",
				"content" => GetMessage("PERFMON_PHP_TUNING_RECOMMENDATION"),
				"default" => true,
			),
		),
		"ITEMS" => array(
		),
	),
);

$php_version = phpversion();
$is_ok = version_compare($php_version, "5.1.0", ">=");
$data["tuning"]["ITEMS"][] = array(
	"PARAMETER" => GetMessage("PERFMON_PHP_VERSION"),
	"IS_OK" => $is_ok,
	"VALUE" => (
		$is_ok?
		$php_version:
		"<font class=\"errortext\">".$php_version."</font>"
	),
	"RECOMMENDATION" => GetMessage("PERFMON_PHP_VERSION_REC", array("#value#" => "5.1.0")),
);


$open_basedir = ini_get('open_basedir');
$is_ok = strlen($open_basedir) <= 0;
$data["tuning"]["ITEMS"][] = array(
	"PARAMETER" => "open_basedir",
	"IS_OK" => $is_ok,
	"VALUE" => "&nbsp;".$open_basedir,
	"RECOMMENDATION" => GetMessage("PERFMON_PHP_OPEN_BASEDIR_REC"),
);


if(version_compare($php_version, "5.1.0", ">="))
{
	$size = CPerfAccel::unformat(ini_get('realpath_cache_size'));
	$is_ok = ($size >= 4*1024*1024);
	$data["tuning"]["ITEMS"][] = array(
		"PARAMETER" => "realpath_cache_size",
		"IS_OK" => $is_ok,
		"VALUE" => ini_get('realpath_cache_size'),
		"RECOMMENDATION" => GetMessage("PERFMON_PHP_PATH_CACHE_REC2"),
	);
}

$arKnownAccels = array(
	'apc' => '<a href="http://pecl.php.net/package/APC">APC</a>',
	'eaccelerator' => '<a href="http://eaccelerator.net/">eAccelerator</a>',
	'xcache' => '<a href="http://xcache.lighttpd.net/">XCache</a>',
	'zend_accelerator' => '<a href="http://www.zend.com/products/platform">Zend Accelerator</a>',
	'wincache' => '<a href="http://learn.iis.net/page.aspx/678/using-windows-cache-extension-for-php/">Windows Cache Extension for PHP</a>',
);

$accel = CPerfomanceMeasure::GetAccelerator();
if(!is_object($accel))
{
	$data["tuning"]["ITEMS"][] = array(
		"PARAMETER" => GetMessage("PERFMON_PHP_PRECOMPILER"),
		"IS_OK" => false,
		"VALUE" => GetMessage("PERFMON_PHP_PRECOMPILER_NOT_INSTALLED"),
		"RECOMMENDATION" => GetMessage("PERFMON_PHP_PRECOMPILER_REC")."<br>".implode("<br>", $arKnownAccels),
	);
}
else
{
	$arRecommendations = $accel->GetRecommendations();
	foreach($arRecommendations as $i => $ar)
		$data["tuning"]["ITEMS"][] = $ar;
}

$sTableID = "tbl_perfmon_panel";

$APPLICATION->SetTitle(GetMessage("PERFMON_PHP_TITLE"));

require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_after.php");

foreach($data as $i => $arTable)
{
	$lAdmin = new CAdminList($sTableID.$i);

	$lAdmin->BeginPrologContent();
	if(array_key_exists("TITLE", $arTable))
		echo "<h4>".$arTable["TITLE"]."</h4>\n";
	$lAdmin->EndPrologContent();

	$lAdmin->AddHeaders($arTable["HEADERS"]);

	$rsData = new CDBResult;
	$rsData->InitFromArray($arTable["ITEMS"]);
	$rsData = new CAdminResult($rsData, $sTableID.$i);

	$j = 0;
	while($arRes = $rsData->NavNext(true, "f_"))
	{
		$row =& $lAdmin->AddRow($j++, $arRes);
		$row->AddViewField("PARAMETER", $arRes["PARAMETER"]);
		if($f_IS_OK)
		{
			$row->AddViewField("VALUE", $arRes["VALUE"]."&nbsp;");
			$row->AddViewField("RECOMMENDATION", "&nbsp;");
		}
		else
		{
			$row->AddViewField("VALUE", "<font class=\"errortext\">".$arRes["VALUE"]."&nbsp;</font>");
			$row->AddViewField("RECOMMENDATION", $arRes["RECOMMENDATION"]);
		}
	}
	$lAdmin->CheckListMode();
	$lAdmin->DisplayList();
}

echo BeginNote(), "<a href=\"phpinfo.php?test_var1=AAA&amp;test_var2=BBB\">".GetMessage("PERFMON_PHP_SETTINGS")."</a>", EndNote();
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_admin.php");
?>
