<?php
/*-------------------------------------------------------+
| PHP-Fusion Content Management System
| Copyright (C) 2002 - 2011 Nick Jones
| http://www.php-fusion.co.uk/
+--------------------------------------------------------+
| Filename: errors.php
| Author: Hans Kristian Flaatten (Starefossen)
+--------------------------------------------------------+
| This program is released as free software under the
| Affero GPL license. You can redistribute it and/or
| modify it under the terms of this license which you
| can read by viewing the included agpl.txt or online
| at www.gnu.org/licenses/agpl.html. Removal of this
| copyright header is strictly prohibited without
| written permission from the original author(s).
+--------------------------------------------------------*/
require_once "../maincore.php";

if (!checkrights("ERRO") || !defined("iAUTH") || !isset($_GET['aid']) || $_GET['aid'] != iAUTH) { die("Acces Denied"); }

require_once THEMES."templates/admin_header.php";
include LOCALE.LOCALESET."admin/errors.php";

add_to_head("<link rel='stylesheet' href='".THEMES."templates/errors.css' type='text/css' media='all' />");

// Setting maximum number of folders for an URL
function getMaxFolders($url, $level = 2) {
	$return = "";
	$tmpUrlArr = explode("/", $url);
	if (count($tmpUrlArr) > $level) {
		$tmpUrlArr = array_reverse($tmpUrlArr);
		for ($i = 0; $i < $level; $i++) {
			$return = $tmpUrlArr[$i].($i > 0 ? "/".$return : "");
		}
	} else {
		$return = implode("/", $tmpUrlArr);
	}

	return $return;
}

// Wrap code
function codeWrap($code, $maxLength = 150) {
    $lines = explode("\n", $code);
    $count = count($lines);
    for($i=0; $i<$count; ++$i) {
        preg_match('`^\s*`', $code, $matches);
		$lines[$i] = wordwrap($lines[$i], $maxLength, "\n$matches[0]\t", true);
    }
    return implode("\n", $lines);
}

// Print code
function printCode($source_code, $starting_line, $error_line = "") {
	if (is_array($source_code)) { return false; }
	$source_code = explode("\n", str_replace(array("\r\n", "\r"), "\n", $source_code));
	$line_count = $starting_line; $formatted_code = "";
	foreach ($source_code as $code_line) {
		$code_line = codeWrap($code_line, 145);
		$line_class = ($line_count == $error_line ? "err_tbl-error-line" : "err_tbl1");
		$formatted_code .= "<tr>\n<td class='err_tbl2' style='text-align:right;width:1%;'>".$line_count."</td>\n";
		$line_count++;
		if (preg_match('#<\?(php)?[^[:graph:]]#', $code_line)) {
			$formatted_code .= "<td class='".$line_class."'>".str_replace(array('<code>', '</code>'), '', highlight_string($code_line, true))."</td>\n</tr>\n";
		} else {
			$formatted_code .= "<td class='".$line_class."'>".preg_replace('#(&lt;\?php&nbsp;)+#', '', str_replace(array('<code>', '</code>'), '', highlight_string('<?php '.$code_line, true)))."</td>\n</tr>\n";
		}
	}
	return "<table class='err_tbl-border center' cellspacing='0' cellpadding='0'>".$formatted_code."</table>";
}

if (isset($_POST['error_status']) && isnum($_POST['error_status'])
			&& isset($_POST['error_id']) && isnum($_POST['error_id'])
) {
	$result = dbquery(
		"UPDATE ".DB_ERRORS." SET error_status='".$_POST['error_status']."'
		WHERE error_id='".$_POST['error_id']."'"
	);
}

if (isset($_POST['delete_entries']) && isset($_POST['delete_status']) && isnum($_POST['delete_status'])) {
	$result = dbquery("DELETE FROM ".DB_ERRORS." WHERE error_status='".$_POST['delete_status']."'");
}

opentable($locale['400']);
$rows = dbcount("(error_id)", DB_ERRORS);
if (!isset($_GET['rowstart']) || !isnum($_GET['rowstart'])) { $_GET['rowstart'] = 0; }
if ($rows != 0) {
	$i = 0;
	$result = dbquery(
		"SELECT * FROM ".DB_ERRORS." ORDER BY error_timestamp DESC
		LIMIT ".$_GET['rowstart'].",20"
	);
	echo "<a name='top'></a>\n<table cellpadding='0' cellspacing='1' class='tbl-border center' style='width:90%;'>\n";
	echo "<tr>\n";
	echo "<td class='tbl1' colspan='4' style='text-align:center;'>";
	echo "<form name='delete_form' action='".FUSION_SELF.$aidlink."' method='post'>";
	echo "".$locale['440']." <select name='delete_status' class='textbox'>";
	echo "<option>---</option>\n";
	echo "<option value='0'>".$locale['450']."</option>\n";
	echo "<option value='1'>".$locale['451']."</option>\n";
	echo "<option value='2'>".$locale['452']."</option>\n";
	echo "</select>\n<input type='submit' class='button' name='delete_entries' value='".$locale['453']."' style='margin-left:5px;' />";
	echo "</form>\n";
	echo "</td>\n";
	echo "</tr>\n<tr>\n";
	echo "<td class='tbl2' style='font-weight:bold;'>".$locale['410']."</td>\n";
	echo "<td class='tbl2' style='font-weight:bold;width:5%;'>".$locale['413']."</td>\n";
	echo "<td class='tbl2' style='text-align:center;width:5%;font-weight:bold;'>".$locale['414']."</td>\n";
	echo "</tr>\n";
	while ($data = dbarray($result)) {
		$row_color = ($i % 2 == 0 ? "tbl1" : "tbl2");
		echo "<tr>\n";
		echo "<td class='".$row_color."'>\n";
		echo "<a href='".FUSION_SELF.$aidlink."&amp;rowstart=".$_GET['rowstart']."&amp;error_id=".$data['error_id']."#file' title='".$data['error_file']."'>";
		echo getMaxFolders($data['error_file'], 2)."</a><br />\n";
		echo "<span class='small2'>".$data['error_message']." ".$locale['415']." ".$data['error_line']."</span>";
		echo "</td>\n";
		echo "<td class='".$row_color."' style='white-space:nowrap;'>".showdate("longdate", $data['error_timestamp'])."</td>\n";
		echo "<td class='".$row_color."' style='white-space:nowrap;'>\n";
		echo "<form action='".FUSION_SELF.$aidlink."&amp;rowstart=".$_GET['rowstart']."' method='post'>";
		echo "<input type='hidden' name='error_id' value='".$data['error_id']."' />";
		echo "<select name='error_status' class='textbox' onchange='this.form.submit();'>";
		echo "<option value='0'".($data['error_status'] == 0 ? " selected='selected'" : "").">".$locale['450']."</option>\n";
		echo "<option value='1'".($data['error_status'] == 1 ? " selected='selected'" : "").">".$locale['451']."</option>\n";
		echo "<option value='2'".($data['error_status'] == 2 ? " selected='selected'" : "").">".$locale['452']."</option>\n";
		echo "</select>\n<input type='submit' class='button change_status' value='".$locale['453']."' style='margin-left:5px;' /></form>\n";
		echo "</td>\n";
		echo "</tr>\n";
		$i++;
	}
	echo "</table>\n";
} else {
	echo "<div style='text-align:center'><br />\n".$locale['418']."<br /><br />\n</div>\n";
}
if ($rows > 20) { echo "<div style=';margin-top:5px;text-align:center;'>\n".makepagenav($_GET['rowstart'],20,$rows,3,FUSION_SELF.$aidlink."&amp;")."\n</div>\n"; }
closetable();

if (isset($_GET['error_id']) && isnum($_GET['error_id'])) {
	$result = dbquery("SELECT * FROM ".DB_ERRORS." WHERE error_id='".$_GET['error_id']."' LIMIT 1");
	if (dbrows($result) == 0) { redirect(FUSION_SELF.$aidlink); }

	$data = dbarray($result);
	$thisFileContent = file($data['error_file']);
	$line_start = ""; $line_end = "";
	if (isset($data['error_line']) && isnum($data['error_line'])) {
		$line_start = $data['error_line'] - 10;
	} else {
		$line_start = 1;
	}
	if (isset($data['error_line']) && isnum($data['error_line'])) {
		if (($data['error_line'] + 10) <= count($thisFileContent)) {
			$line_end = $data['error_line'] + 10;
		} else {
			$line_end = count($thisFileContent);
		}
	} else {
		$line_end = count($thisFileContent);
	}
	opentable($locale['401']." ".getMaxFolders($data['error_file'], 3));
	$output = "";
	for($i=($line_start - 1); $i<($line_end - 1); $i++){
		$output .= $thisFileContent[$i];
	}

	echo "<table cellpadding='0' cellspacing='1' class='tbl-border center' style='border-collapse:collapse;width:90%;'>\n";
	echo "<tr>\n";
	echo "<td colspan='4' class='tbl2'><a name='file'></a>\n<strong>".$locale['420']."</strong></td>\n";
	echo "</tr>\n<tr>\n";
	echo "<td class='tbl2 err_tbl-error' style='width:5%;white-space:nowrap;'>".$locale['410'].":</td>\n";
	echo "<td class='tbl1 err_tbl-error'>".$data['error_message']."</td>\n";
	echo "<td class='tbl2 err_tbl-error' style='width:5%;white-space:nowrap;'>".$locale['415']."</td>\n";
	echo "<td class='tbl1 err_tbl-error'>".$data['error_line']."</td>\n";
	echo "</tr>\n<tr>\n";
	echo "<td class='tbl2' style='width:5%;white-space:nowrap;'>".$locale['419'].":</td>\n";
	echo "<td class='tbl1'><strong>".getMaxFolders($data['error_file'], 3)."</strong></td>\n";
	echo "<td class='tbl2' style='width:5%;white-space:nowrap;'>".$locale['411'].":</td>\n";
	echo "<td class='tbl1'>";
	echo "<a href='".FUSION_SELF.$aidlink."&amp;rowstart=".$_GET['rowstart']."&amp;error_id=".$data['error_id']."#page' title='".$data['error_page']."'>";
	echo getMaxFolders($data['error_page'], 3)."</a></td>\n";
	echo "</tr>\n<tr>\n";
	echo "<td class='tbl2' style='width:5%;white-space:nowrap;'>".$locale['412']."-".$locale['416']."</td>\n";
	echo "<td class='tbl1'>".$data['error_user_level']."</td>\n";
	echo "<td class='tbl2' style='width:5%;white-space:nowrap;'>".$locale['417']."</td>\n";
	echo "<td class='tbl1'>".$data['error_user_ip']."</td>\n";
	echo "</tr>\n<tr>\n";
	echo "<td class='tbl2' style='width:5%;white-space:nowrap;'>".$locale['413'].":</td>\n";
	echo "<td class='tbl1'>".showdate("longdate", $data['error_timestamp'])."</td>\n";
	echo "<td class='tbl2' style='width:5%;white-space:nowrap;'>".$locale['414'].":</td>\n";
	echo "<td class='tbl1'>";
	echo "<form action='".FUSION_SELF.$aidlink."&amp;rowstart=".$_GET['rowstart']."&amp;error_id=".$data['error_id']."#file' method='post'>";
	echo "<input type='hidden' name='error_id' value='".$data['error_id']."' />";
	echo "<select name='error_status' class='textbox' onchange='this.form.submit();'>";
	echo "<option value='0'".($data['error_status'] == 0 ? " selected='selected'" : "").">".$locale['450']."</option>\n";
	echo "<option value='1'".($data['error_status'] == 1 ? " selected='selected'" : "").">".$locale['451']."</option>\n";
	echo "<option value='2'".($data['error_status'] == 2 ? " selected='selected'" : "").">".$locale['452']."</option>\n";
	echo "</select>\n<input type='submit' class='button change_status' value='".$locale['453']."' style='margin-left:5px;' /></form>\n";
	echo "</td>\n";
	echo "</tr>\n<tr>\n";
	echo "<td colspan='4' class='tbl1' style='text-align:center;font-weight:bold;'>";
	echo "<hr />\n<a href='#top' title='".$locale['422']."'>".$locale['422']."</a>\n";
	echo "</td>\n";
	echo "</tr>\n<tr>\n";
	echo "<td colspan='4' class='tbl2'><strong>".$locale['421']."</strong> (".$locale['415']." ".$line_start." - ".$line_end.")</td>\n";
	echo "</tr>\n<tr>\n";
	echo "<td colspan='4'><div style='max-height:600px;overflow:auto;'>".printCode($output, $line_start, $data['error_line'])."</div>\n</td>\n";
	echo "</tr>\n";

	$thisPageContent = file(BASEDIR.$data['error_page']);
	$output = "";
	for($i=0; $i<count($thisPageContent); $i++){
		$output .= $thisPageContent[$i];
	}
	echo "<tr>\n";
	echo "<td colspan='4' class='tbl1' style='text-align:center;font-weight:bold;'>";
	echo "<hr />\n<a href='#top' title='".$locale['422']."'>".$locale['422']."</a>\n";
	echo "</td>\n";
	echo "</tr>\n<tr>\n";
	echo "<td colspan='4' class='tbl2'><a name='page'></a>\n";
	echo "<strong>".$locale['411'].": ".getMaxFolders($data['error_page'], 2)."</strong></td>\n";
	echo "</tr>\n<tr>\n";
	echo "<td colspan='4'><div style='max-height:500px;overflow:auto;'>".printCode($output, "1")."</div>\n</td>\n";
	echo "</tr>\n";
	echo "</table>\n";
	echo "<div style='margin-top:5px;text-align:center;font-weight:bold;'>\n";
	echo "<a href='#top' title='".$locale['422']."'>".$locale['422']."</a>\n";
	echo "</div>";
	closetable();

}

// Show the "Apply"-button only when javascript is disabled"
echo "<script language='JavaScript' type='text/javascript'>\n";
echo "/* <![CDATA[ */\n";
echo "jQuery(document).ready(function() {
	jQuery('.change_status').hide();

	jQuery('a[href=#top]').click(function(){
		jQuery('html, body').animate({scrollTop:0}, 'slow');
		return false;
	});
});";
echo "/* ]]>*/\n";
echo "</script>\n";
require_once THEMES."templates/footer.php";
?>