You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

127 lines
3.9 KiB

<?php
// (c) Copyright by authors of the Tiki Wiki CMS Groupware Project
//
// All Rights Reserved. See copyright.txt for details and a complete list of authors.
// Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details.
// $Id$
//this script may only be included - so its better to die if called directly.
if (strpos($_SERVER["SCRIPT_NAME"], basename(__FILE__)) !== false) {
header("location: index.php");
exit;
}
if ($prefs['feature_tikitests'] != 'y') {
return;
}
$test_url = $_SERVER['QUERY_STRING'];
$test_get = $_GET;
$test_post = $_POST;
if (isset($_COOKIE['tikitest_record'])) {
ob_start(test_callback);
if (! isset($_SESSION['tiki_cookie_jar'])) {
$_SESSION['tiki_cookie_jar'] = [];
}
$_SESSION['tiki_cookie_jar']['javascript_enabled'] = 'n';
if ($_COOKIE['tikitest_record'] != 3) {
if ($_COOKIE['tikitest_record'] == '') {
$_COOKIE['tikitest_record'] = 1;
}
$smarty->assign("tikitest_filename", $_COOKIE['tikitest_filename']);
$smarty->assign("tikitest_state", $_COOKIE['tikitest_record']);
} else {
setcookie("tikitest_record", "", time() - 3600, "/");
setcookie("tikitest_filename", "", time() - 3600, "/");
$smarty->clear_assign(["tikitest_filename","tikitest_state"]);
}
} else {
return;
}
/**
* @param $buffer
* @return mixed
*/
function test_callback($buffer)
{
global $test_cookie, $test_post, $test_get, $test_url;
if (! isset($_COOKIE['tikitest_record']) or $_COOKIE['tikitest_record'] >= 2) {
return $buffer;
}
if (strpos(basename($_SERVER['PHP_SELF']), "tiki-download_file") !== false) {
return $buffer;
}
$filename = basename(trim($_COOKIE['tikitest_filename']));
if (isset($_COOKIE['tikitest_filename'])) {
$xml_file = __DIR__ . "/tests/" . $filename . ".xml";
} else {
$xml_file = __DIR__ . "/tests/tikitest.xml";
}
$xml = file_get_contents($xml_file);
if ($xml == '') {
$dom = new DOMDocument('1.0', 'UTF-8');
$element_test = $dom->createElement('test');
$element_test->setAttribute('id', 'test');
$dom->appendChild($element_test);
} else {
$dom = DOMDocument::loadXML($xml);
if ($dom) {
$element_test = $dom->getElementsByTagName('test')->item(0);
if ($element_test == null) {
return $buffer;
}
} else {
// Can't read the XML file go out
return $buffer;
}
}
$url = $dom->createElement('url');
if (! empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') {
$http = "https";
} else {
$http = "http";
}
$url->setAttribute('src', "$http://" . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI']);
$url->setAttribute('method', $_SERVER['REQUEST_METHOD']);
$url->setAttribute('referer', $_SERVER['HTTP_REFERER']);
$get = $dom->createElement('get');
if (is_array($test_get)) {
foreach ($test_get as $var => $value) {
$v = $dom->createElement($var, $value);
$get->appendChild($v);
}
$url->appendChild($get);
}
if (is_array($test_post)) {
$post = $dom->createElement('post');
foreach ($test_post as $var => $value) {
$v = $dom->createElement($var, $value);
$post->appendChild($v);
}
$url->appendChild($post);
}
error_reporting(E_ALL);
$data = $dom->createElement('data');
$tikitestheader = '/<!-- StartTikiTestRemoveMe -->.*<!-- EndTikiTestRemoveMe -->/';
$cdata = $dom->createCDATASection(preg_replace($tikitestheader, '', $buffer));
$data->appendChild($cdata);
$url->appendChild($data);
$element_test->appendChild($url);
$dom->formatOutput = true;
$fd = fopen($xml_file, "w");
fwrite($fd, $dom->saveXML());
fclose($fd);
return $buffer;
}