<?php
if(class_exists("\Request")) {
 if(\Request::isAPI() || \Request::isAjax()) {
 header('Content-Type: application/json; charset=utf-8');
 }
 else {
 }
 }
 else {
 }
 if(ENVIRONMENT == 'dev') {
 if(empty($errorMessage) === false) {
 $startIndex = strpos($errorMessage, "TException:");
 if($startIndex !== false) {
 $endIndex = strpos($errorMessage, ":", $startIndex + 11);
 $errorCode = substr($errorMessage, $startIndex + 11, $endIndex - ($startIndex + 11));
 $errorCode = str_replace("[", "", $errorCode);
 $errorCode = str_replace("]", "", $errorCode);
 $errorCode = trim($errorCode);
 $errorCode = (int)$errorCode;
 $errorMessage = substr($errorMessage, $endIndex + 2);
 $startIndex = strpos($errorMessage, "Stack Trace:");
 if($startIndex === false) $startIndex = strpos($errorMessage, "Stack trace:");
 if($startIndex !== false) {
 $stackTrace = substr($errorMessage, $startIndex + 12 + 1);
 $errorMessage = trim(substr($errorMessage, 0, $startIndex));
 }
 }
 else {
 $errorCode = 500;
 $stackTrace = "";
 $startIndex = strpos($errorMessage, "Stack Trace:");
 if($startIndex === false) $startIndex = strpos($errorMessage, "Stack trace:");
 if($startIndex !== false) {
 $stackTrace = substr($errorMessage, $startIndex + 12 + 1);
 $errorMessage = trim(substr($errorMessage, 0, $startIndex));
 }
 if(!$stackTrace) {
 $startIndex = strpos($errorMessage, "File:");
 if($startIndex !== false && $startIndex > 0) {
 $stackTrace = substr($errorMessage, $startIndex);
 $errorMessage = trim(substr($errorMessage, 0, $startIndex));
 }
 }
 }
 $tempPath = ROOT_PATH . 'data' . DIRECTORY_SEPARATOR . 'temp' . DIRECTORY_SEPARATOR;
 $startIndex = strpos($errorMessage, $tempPath);
 if($startIndex !== false) {
 $_startIndex = $startIndex;
 $startIndex += strlen($tempPath);
 $endIndex = strripos($errorMessage, ".php", $startIndex);
 if($endIndex !== false) {
 $rFileName = substr($errorMessage, $startIndex, ($endIndex + 4) - $startIndex);
 if(strpos($rFileName, "views" . DIRECTORY_SEPARATOR) === 0) {
 $_endIndex = strpos($rFileName, DIRECTORY_SEPARATOR, 6);
 if($_endIndex !== false) {
 $moduleName = substr($rFileName, 6, $_endIndex - 6);
 $line = '';
 if(strlen($errorMessage) > $endIndex + 5) {
 $line = substr($errorMessage, $endIndex + 5);
 }
 $errorMessage = substr($errorMessage, 0, $_startIndex);
 $viewFileName = substr($rFileName, $_endIndex + 1);
 $moduleName = substr($moduleName, 0, strlen($moduleName) - strlen(APP_ID));
 if(strpos($moduleName, "exte-") === 0) {
 $moduleName = substr($moduleName, 5);
 $errorMessage .= 'Extension ' . $moduleName . '<br>File: extensions'. DIRECTORY_SEPARATOR . $moduleName . DIRECTORY_SEPARATOR . 'views' . DIRECTORY_SEPARATOR . $viewFileName;
 }
 else {
 if($viewFileName) {
 $viewFileName = str_replace('-', DIRECTORY_SEPARATOR, $viewFileName);
 }
 $errorMessage .= 'Module ' . $moduleName . '<br>File: modules'. DIRECTORY_SEPARATOR . $moduleName . DIRECTORY_SEPARATOR . 'views' . DIRECTORY_SEPARATOR . $viewFileName;
 }
 if($line) {
 $errorMessage .= '<br>Line: ' . $line;
 }
 }
 }
 }
 }
 }
 else {
 $errorMessage = "Có lỗi trong quá trình xử lý";
 $stackTrace = "";
 }
 ?>

<?php if(\Request::isAPI()) {
 http_response_code($errorCode ?? 500);
 echo $errorMessage ?? '';
 }
 else if(\Request::isAjax()) {
 echo json_encode([ "errorCode" => $errorCode, "success" => false, "message" => $errorMessage ]);
 }
 else {
 ?>

<div id="-tcms-c-error-container" style="z-index: 999999999;position:fixed;width: 100%; height: 100%; background-color: white;top:0;left:0">
<div style="margin:0;padding: 0px;">
<h2 style="padding-left:10px;font-family:'Segoe UI', Tahoma, Geneva, Verdana, sans-serif">Lỗi <?php  $errorText = "";
 if($errorCode == 0) $errorCode = 500;
 if($errorCode == 404) $errorText = " - Page Not Found";
 else if($errorCode == 500) $errorText = " - Internal Server Error";
 else if($errorCode == 501) $errorText = " - Not Implemented";
 else if($errorCode == 401) $errorText = " - Unauthorized";
 else if($errorCode == 405) $errorText = " - Method Not Allowed";
 echo $errorCode . $errorText;
 ?></h2>
<br>
<div style="background-color:#000;color: white;padding: 20px 10px">
    <div style="font-family: monospace, monospace; font-size: 13px;"><?php echo $errorMessage ?? '';
 ?></div>
</div>

<h2 style="padding-left:10px;padding-right:10px;font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif">Stack Trace:</h2>
<div style="padding: 10px;display: block;overflow: auto;">
<?php  $libPath = ROOT_PATH . 'lib';
 $hasError = false;
 $stackTracess = debug_backtrace();
 foreach($stackTracess as $k => $stack) {
 if($k == 0) continue;
 if($k == 1 ) {
 if(isset($stack['args']) && isset($stack['args'][0])) {
 if(!is_object($stack['args'][0])) {
 $s = $stack['args'];
 $f = str_replace(ROOT_PATH, "..." . DIRECTORY_SEPARATOR, $s[2]);
 $f = str_replace("...".DIRECTORY_SEPARATOR."data".DIRECTORY_SEPARATOR."temp".DIRECTORY_SEPARATOR."views".DIRECTORY_SEPARATOR, "..." . DIRECTORY_SEPARATOR . "modules" . DIRECTORY_SEPARATOR, $f);
 $f = str_replace(APP_ID . DIRECTORY_SEPARATOR, DIRECTORY_SEPARATOR, $f);
 echo '<div class="asddasderror" style="padding: 5px;margin-bottom: 10px;margin-bottom: 10px;background-color: #fafafa;margin-left: -5px;margin-right: -5px">';
 echo '<i style="font-size: 13px;display: block;float: left;font-style: normal;padding: 1px 3px;background-color: #eee;margin-right: 10px">' . $s[3] . '</i>';
 if(isset($s[0])) echo ' <b style="font-size: 14px;float: left;display: block;margin-top: 0px;margin-left: 10px"> '.$s[1].'</b>';
 echo '<small style="clear: both;display: block;padding: 4px 15px">' . $f . "</small>";
 echo '</div>';
 $hasError = true;
 break;
 }
 $skd = $stack['args'][0]->getTrace();
 foreach($skd as $k => $s) {
 if(isset($s['file']) && isset($s['line'])) {
 if(stripos($s['file'], $libPath) === 0) continue;
 $f = str_replace(ROOT_PATH, "..." . DIRECTORY_SEPARATOR, $s['file']);
 $f = str_replace("...".DIRECTORY_SEPARATOR."data".DIRECTORY_SEPARATOR."temp".DIRECTORY_SEPARATOR."views".DIRECTORY_SEPARATOR, "..." . DIRECTORY_SEPARATOR . "modules" . DIRECTORY_SEPARATOR, $f);
 $f = str_replace(APP_ID . DIRECTORY_SEPARATOR, DIRECTORY_SEPARATOR, $f);
 echo '<div class="asddasderror" style="padding: 5px;margin-bottom: 10px;margin-bottom: 10px;background-color: #fafafa;margin-left: -5px;margin-right: -5px">';
 echo '<i style="font-size: 13px;display: block;float: left;font-style: normal;padding: 1px 3px;background-color: #eee;margin-right: 10px">' . $s['line'] . '</i>';
 if(isset($s['function'])) echo ' <b style="font-size: 14px;float: left;display: block;margin-top: 0px;margin-left: 10px"> '.$s['function'].'</b>';
 echo '<small style="clear: both;display: block;padding: 4px 15px">' . $f . "</small>";
 echo '</div>';
 $hasError = true;
 }
 }
 }
 else {
 print_r($stack);
 }
 break;
 }
 }
 if(!$hasError) {
 $c = 0;
 $ss = explode("\n", $stackTrace);
 echo "<pre>";
 foreach($ss as $k => $v) {
 $f = str_replace(ROOT_PATH, "..." . DIRECTORY_SEPARATOR, $v);
 $f = str_replace("...".DIRECTORY_SEPARATOR."data".DIRECTORY_SEPARATOR."temp".DIRECTORY_SEPARATOR."views".DIRECTORY_SEPARATOR, "..." . DIRECTORY_SEPARATOR . "modules" . DIRECTORY_SEPARATOR, $f);
 $f = str_replace(APP_ID . DIRECTORY_SEPARATOR, DIRECTORY_SEPARATOR, $f);
 echo $f . "\n";
 if($c++==4) break;
 }
 echo "</pre>";
 }
 ?>
</div>
</div>
</div>


<script type="text/javascript">
document.body.style.padding = "0px";
document.body.style.margin = "0px";
//window.addEventListener("loaded", function() {
    document.body.style.fontSize = "14px";
    document.body.style.fontFamily = "arial";
    document.body.innerHTML = document.getElementById("-tcms-c-error-container").innerHTML;
//});
</script>



<?php  }
}
 else {
 ?>



    <?php
 if(empty($errorMessage) === false) {
 $startIndex = strpos($errorMessage, "TException:");
 if($startIndex !== false) {
 $endIndex = strpos($errorMessage, ":", $startIndex + 11);
 $errorCode = substr($errorMessage, $startIndex + 11, $endIndex - ($startIndex + 11));
 $errorCode = str_replace("[", "", $errorCode);
 $errorCode = str_replace("]", "", $errorCode);
 $errorCode = trim($errorCode);
 $errorCode = (int)$errorCode;
 }
 else {
 $errorCode = 500;
 }
 }
 else {
 $errorCode = 500;
 }
 $appConfig = include(APP_PATH . 'config' . DIRECTORY_SEPARATOR . 'app.php');
 $errorConfig = $appConfig['custom_error'];
 $areaName = area_name();
 $errorModule = false;
 if(!empty($errorConfig[$areaName])) {
 $errorModule = $errorConfig[$areaName];
 }
 else {
 if(!empty($errorConfig['default'])) {
 $errorModule = $errorConfig['default'];
 }
 }
 $lastKey = '';
 if($errorModule) {
 $moduleConfigFile = APP_PATH . 'config' . DIRECTORY_SEPARATOR . $areaName . '.module.php';
 if(!file_exists($moduleConfigFile)) {
 $errorModule = false;
 }
 else {
 $moduleConfig = include($moduleConfigFile);
 if(!isset($moduleConfig[$errorModule])) {
 $errorModule = false;
 }
 else {
 $lastKey = $errorModule;
 $errorModule = $moduleConfig[$errorModule];
 }
 }
 }
 if($errorModule) {
 $moduleConfig = $errorModule;
 if(!empty($moduleConfig['path'])) {
 $modulePath = $moduleConfig['path'] . $lastKey . '.php';
 }
 else {
 if(!empty($moduleConfig['private'])) {
 $modulePath = APP_PATH . 'modules' . DIRECTORY_SEPARATOR . $areaName . DIRECTORY_SEPARATOR . $lastKey . DIRECTORY_SEPARATOR . $lastKey . ".php";
 }
 else {
 $modulePath = ROOT_PATH . 'modules' . DIRECTORY_SEPARATOR . $areaName . DIRECTORY_SEPARATOR . $lastKey . DIRECTORY_SEPARATOR . $lastKey . ".php";
 }
 }
 if(file_exists($modulePath)) {
 include_once($modulePath);
 $m_Path = $modulePath;
 $modulePath = '\\' . $moduleConfig['namespace'];
 $moduleCls = new $modulePath();
 $routes = $moduleCls->getRoutes();
 $url = false;
 $defaultUrl = false;
 foreach($routes as $r) {
 if($r->name == $errorCode) {
 $url = $r->url;
 break;
 }
 if($r->name == 'index') {
 $defaultUrl = $r->url;
 }
 }
 if(!$url) {
 $url = $defaultUrl;
 }
 if($url) {
 $areas = $appConfig['areas'];
 if(isset($areas[$areaName])) {
 $url = base_url($areas[$areaName] . $url);
 header("Location: " . $url);
 exit();
 }
 }
 else {
 class CustomErrorFile {
 public $errorCode = 404;
 public $errorMessage = "";
 public $errorTitle = "";
 public function reader($errCode, $file) {
 $this->errorCode = $errCode;
 switch($this->errorCode) {
 case 404: $this->errorTitle = "Không tìm thấy trang";
 $this->errorMessage = "Trang mà bạn yêu cầu không tồn tại hoặc đã bị xóa.";
 break;
 case 401: $this->errorTitle = "Không có quyền truy cập trang";
 $this->errorMessage = "Bạn không có quyền truy cập vào trang này";
 break;
 default: $this->errorTitle = "Internal Server Error";
 $this->errorMessage = "Có lỗi trong quá trình xử lý";
 break;
 }
 echo '<div id="tasdasoqs11sdq34s4419ada">';
 include($file);
 echo '</div>';
 echo '<script>document.body.innerHTML = document.getElementById("tasdasoqs11sdq34s4419ada").innerHTML;</script>';
 }
 }
 $customErrCls = new CustomErrorFile();
 $pathInfo = pathinfo($m_Path);
 $errorFilePath = $pathInfo['dirname'] . DIRECTORY_SEPARATOR . 'views' . DIRECTORY_SEPARATOR . 'index' . DIRECTORY_SEPARATOR . $errorCode . '.php';
 if(file_exists($errorFilePath)) {
 $customErrCls->reader($errorCode, $errorFilePath);
 exit();
 }
 $errorFilePath = $pathInfo['dirname'] . DIRECTORY_SEPARATOR . 'views' . DIRECTORY_SEPARATOR . 'index' . DIRECTORY_SEPARATOR . 'index.php';
 if(file_exists($errorFilePath)) {
 $customErrCls->reader($errorCode, $errorFilePath);
 exit();
 }
 }
 }
 }
 switch($errorCode) {
 case 404: $errorTitle = "Không tìm thấy trang";
 $errorMessage = "Trang mà bạn yêu cầu không tồn tại hoặc đã bị xóa. Các nguyên nhân và cách giải quyết:<br />";
 $errorMessage .= "<ul>";
 $errorMessage .= '<li>Trang không tồn tại <span class="arror" style="padding:0px 2px;">»</span> <a href="'. url() .'">Trở về trang chủ</a>.</li>';
 $errorMessage .= '<li>Lỗi server <span class="arror" style="padding:0px 2px;">»</span> Kiểm tra lại host và liên hệ quản lý host.</li>';
 $errorMessage .= '<li>Lỗi hệ thống <span class="arror" style="padding:0px 2px;">»</span> Liên hệ với quản trị viên để được hỗ trợ.</li>';
 $errorMessage .= '</ul>';
 break;
 case 401: $errorTitle = "Không có quyền truy cập trang";
 $errorMessage = "Bạn không có quyền truy cập vào trang này. Các nguyên nhân và cách giải quyết:";
 $errorMessage .= "<ul>";
 $errorMessage .= '<li>Bạn chưa được set quyền truy cập vào trang <span class="arror" style="padding:0px 2px;">»</span> Liên hệ quản lý.</li>';
 $errorMessage .= '<li>Vào nhầm trang <span class="arror" style="padding:0px 2px;">»</span> <a href="' .url(). '">Trở về trang chủ</a>.</li>';
 $errorMessage .= '<li>Lỗi server <span class="arror" style="padding:0px 2px;">»</span> Kiểm tra lại host và liên hệ quản lý host.</li>';
 $errorMessage .= '<li>Lỗi hệ thống <span class="arror" style="padding:0px 2px;">»</span> Liên hệ với quản trị viên để được hỗ trợ.</li>';
 $errorMessage .= '</ul>';
 break;
 default: $errorTitle = "Internal Server Error";
 $errorMessage = "Có lỗi trong quá trình xử lý, vui lòng liên hệ info@nextit.vn để được hỗ trợ";
 break;
 }
 ?>

<div id="gfhretsdf34rgsdfsdfacsdgs"> 
    <div  style=" width:60%; margin: 5% auto;box-shadow: 0px 0px 3px #ccc;-webkit-box-shadow: 0px 0px 3px #ccc;-moz-box-shadow: 0px 0px 3px #ccc;-o-box-shadow: 0px 0px 3px #ccc;-ms-box-shadow: 0px 0px 3px #ccc;">
        <h1 style=" color:#666;font-size:18px; background-color:#fff; margin:0px;padding:30px 20px 10px 20px;border-bottom:1px solid #ccc;"><?php echo $errorCode . ' - ' . $errorTitle ?></h1>
        <div id='error-content' style="background-color: white; padding: 20px;font-size:16px;line-height:20px;color:#666;">
            <?php echo $errorMessage ?>
        </div>
    </div>
</div> <!--#gfhretsdf34rgsdfsdfacsdgs-->

<script type="text/javascript">
document.body.style.padding = "0px";
document.body.style.margin = "0px";
document.body.style.backgroundColor = "#f1f1f1";
//window.addEventListener("loaded", function() {
    document.body.style.fontSize = "14px";
    document.body.style.fontFamily = "arial";
    document.body.innerHTML = document.getElementById("gfhretsdf34rgsdfsdfacsdgs").innerHTML;
//});
</script>

<?php }
 exit();
 ?>