<?php
$t = "Менеджер файлов";
$__FILEIO = true;
include_once '../core/core.php';
if (!$user->auth()){
	$core->GoToPage("/login.lm");
	die();
}
include_once "../core/FileIO.php";

function _table_link($link, $name, $icon, $size = "", $date = ""){
return '<tr><th scope="row"><img src="/assets/img/sf/'.$icon.'.svg" height="16" width="16"></th>
<td><a href="'.$link.'" class="table_link">'.$name.'</a></td><td>'.$size.'</td><td>'.$date.'</td></tr>';
}

function fixZipComm($msg){
	global $core;
	$msg = $core->drawBr($msg);

	return $msg;
}

function zip($source, $destination,$vpath = "/"){
	global $core,$user;
    if (!extension_loaded('zip') || !file_exists($source)) {
        return false;
    }
 
    $zip = new ZipArchive();
    if (!$zip->open($destination, ZIPARCHIVE::CREATE)) {
        return false;
    }
 
    $source = str_replace('\\', DIRECTORY_SEPARATOR, realpath($source));
    $source = str_replace('/', DIRECTORY_SEPARATOR, $source);
 
    if (is_dir($source) === true) {
        $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source),
            RecursiveIteratorIterator::SELF_FIRST);
 
        foreach ($files as $file) {
            $file = str_replace('\\', DIRECTORY_SEPARATOR, $file);
            $file = str_replace('/', DIRECTORY_SEPARATOR, $file);
 
            if ($file == '.' || $file == '..' || empty($file) || $file == DIRECTORY_SEPARATOR) {
                continue;
            }
            // Ignore "." and ".." folders
            if (in_array(substr($file, strrpos($file, DIRECTORY_SEPARATOR) + 1), array('.', '..'))) {
                continue;
            }
 
            $file = realpath($file);
            $file = str_replace('\\', DIRECTORY_SEPARATOR, $file);
            $file = str_replace('/', DIRECTORY_SEPARATOR, $file);
 
            if (is_dir($file) === true) {
                $d = str_replace($source . DIRECTORY_SEPARATOR, '', $file);
                if (empty($d)) {
                    continue;
                }
                $zip->addEmptyDir($d);
            } elseif (is_file($file) === true) {
                $zip->addFromString(str_replace($source . DIRECTORY_SEPARATOR, '', $file),
                    file_get_contents($file));
            } else {
                // do nothing
            }
        }
    } elseif (is_file($source) === true) {
        $zip->addFromString(basename($source), file_get_contents($source));
    }
	$zip->setArchiveComment("Site backup ".$user->getData()->domain." created on the constructor gLark.Ru.
Creation time: ".date("Y-m-d H:i:s")."
Path: ".$vpath."
Number of elements: ".$zip->count()."

Site: [url=https://".$user->getData()->domain."]".$user->getData()->domain."[/url]
Hosting: [url=https://gLark.Ru]gLark.Ru[/url]
(c) by pimnik98");
    return $zip->close();
}

$editor_list = [
"ace"		=>	"editace",
"textarea"	=>	"edit",
"line"		=>	"editline",
];
function icon($type="dir",$ext="txt",$name=""){
	global $user;
	$_ext = [];
	$_ext["mp3"] 	= "file-sound";
	$_ext["wav"] 	= "file-sound";
	$_ext["zip"] 	= "file-zip";
	$_ext["html"] 	= "file-code";
	$_ext["tar"] 	= "file-zip";
	$_ext["7z"] 	= "file-zip";
	$_ext["gz"] 	= "file-zip";
	$_ext["zip"] 	= "file-zip";
	$_ext["mid"] 	= "file-sound";
	$_ext["midi"] 	= "file-sound";
	$_ext["elf"] 	= "file-exe";
	$_ext["exe"] 	= "file-exe";
	$_ext["ttf"] 	= "file-font";
	$_ext["woff"] 	= "file-font";
	$_ext["woff2"] 	= "file-font";
	$_ext["jpg"] 	= "file-picture";
	$_ext["png"] 	= "file-picture";
	$_ext["gif"] 	= "file-picture";
	$_ext["svg"] 	= "file-picture";
	$_ext["ico"] 	= "file-picture";
	$_ext["webp"] 	= "file-picture";
	$_ext["css"] 	= "file-code";
	$_ext["js"] 	= "file-code";
	$_ext["json"] 	= "file-code";
	$_ext["txt"] 	= "file-code";
	$_ext["xml"] 	= "file-code";
	$_ext["ini"] 	= "file-code";
	$_ext["lm"] 	= "brick";
	

	if ($type == "dir" && $name == "avatar"){
		return "folder-picture";
	} elseif ($type == "dir" && $name == "templates"){
		return "heart";
	} elseif ($type == "dir"){
		return "folder";
	} elseif ($type == "file" && is_string($ext) && isset($_ext[$ext])){
		return $_ext[$ext];
	} else {
		return "file-empty";
	}
}
$FileIO = new FileIO($core,$db,$user->getData());
$FileIO->Quota = $Quota;
$FileIO->serverPath(SERVER_ROOT."/sites/".$user->getData()->domain.DIRECTORY_SEPARATOR);
$FileIO->setCurrentPath((isset($_GET["path"]) && !empty($_GET["path"])?$core->FilterString($_GET["path"]):"/"));
if ($FileIO->isDir() && !$act){
	$FileIO->RegisterEvent("FileIO-Listing");
	include_once '../core/head.php';
	$c = $FileIO->countFolder($FileIO->getPath());
echo '<div class="col-md-12"><div class="panel panel-default"><table class="table">
<thead><tr><th>#</th><th>Имя файла</th><th>Вес файла</th><th>Дата изменения</th></tr></thead><tbody>';



	echo ($FileIO->getPath()!="/"?_table_link("/filemgr.lm?","В корень сайта","sign-up"):null);
	echo ($FileIO->getPath()!="/"?_table_link("/filemgr.lm?path=".$FileIO->CurrentDir(),"На уровень ввыше","sign-left"):null);
	$dirList = $FileIO->dirList();

	foreach ($FileIO->sortDir($dirList,$user->getData()->dirhead) as $list){
		echo _table_link('/filemgr.lm?path='.$list["path"].($list["type"]=="file" && $user->getData()->editor != "q" && $list["isEdit"] == true?'&act='.$editor_list[$user->getData()->editor]:null), 
		$list["name"], 
		icon($list["type"], (isset($list["info"]["extension"])?$list["info"]["extension"]:null), $list["name"]), 
		(isset($list["size"])?$list["size"]:false), 
		($list["type"]=='dir'?'':$list["edit"]));
	}

	echo '</tbody></table></div></div>';
	include_once '../core/foot.php';
	die();
} elseif ($FileIO->isFile() && !$act){
	$core->GoToPage("/filemgr.lm?act=editace&path=".$FileIO->getPath());
	die();
} elseif ($FileIO->isDir() && $act == "zip"){
	$FileIO->RegisterEvent("FileIO-DirZip");
	include_once '../core/head.php';
	if (isset($_POST["zip"])){
		$gen_name = $user->getData()->domain.'_'.date("Y-m-d_H_i_s").'.zip';
		$zip = zip($FileIO->getRealPath(), $FileIO->getRealPath().'./'.$gen_name,$FileIO->getPath());
		if ($zip){
			echo '<div class="alert alert-success">Архив ('.$gen_name.') успешно создан.</div>';
		} else {
			echo '<div class="alert alert-danger">Не удалось создать архив.</div>';
		}
	}
	echo '<div class="panel panel-default"><div class="panel-body"><form method="POST">';
	echo 'Цель: <code>'.$FileIO->getPath().'</code><br>';
	echo 'Вы уверены, что хотите создать ZIP-архив данной папки?<br>';
	echo '<input type="submit" name="zip" class="btn btn-primary" value="Продолжить"></form></div></div>';
	
	include_once '../core/foot.php';
	die();
} elseif ($FileIO->isDir() && $act == "dir"){
	$core->GoToPage("/filemgr.lm?path=".$FileIO->getPath());
	die();
} elseif ($FileIO->isFile() && $act == "unzip"){
	$t = "Распаковка архива";
	if (isset($_POST["zipgo"])){
		if (!isset($_POST["unzip"]) || !is_array($_POST["unzip"])){
			include_once '../core/head.php';
			echo '<div class="alert alert-danger">Повторите выбор файлов</div>';
		} else {
			$gen_list = [];
			foreach ($_POST["unzip"] as $UBZ){
				if (is_numeric($UBZ) && $UBZ >= 0){
					$UBZ = intval($UBZ);
					$gen_list[$UBZ] = $UBZ;
				}
			}
			$un = $FileIO->unZipData($FileIO->getRealPath(),"./",$gen_list);
			$p = $FileIO->getInfoPath();
			include_once '../core/head.php';
			echo '<div class="alert alert-success">Файл '.$p["basename"].' ('.$FileIO->RealFileSize(filesize($FileIO->getRealPath())).') распакован.</div>';
			echo '<div class="panel panel-default"><div class="panel-body">Список файлов:<br>';
			foreach ($un as $usSs){
				echo '<code>'.$usSs.'</code><br>';
			}
			echo '</div></div>';
			include_once '../core/foot.php';
			die();
		}
		
	}
	$zip = $FileIO->getZipList($FileIO->getRealPath());
	if (isset($zip["status"])){
		include_once '../core/head.php';
		echo '<div class="alert alert-danger">'.$zip["msg"].'</div>';
		include_once '../core/foot.php';
		die();
	}
	$list = $zip["list"];
	$list = ($user->getData()->zipShowNoSupport==1?$zip["list"]:$zip["listAlready"]);
	$counterrors = $zip["errors"]["name"] + $zip["errors"]["size"];
	include_once '../core/head.php';

	echo ($counterrors>0?'<div class="alert alert-danger">Обнаружены ошибки в архиве '.$counterrors.' шт. :<br> * Проблемы с именами папок и файлов: '.$zip["errors"]["name"].' шт.<br> * Недостаточно места для распаковки некоторых файлов: '.$zip["errors"]["size"].' шт.<br><br>Обратите во внимание! Некоторые файлы могут полностью не распаковаться на сервер, из-за неправльных имен или когда место на аккаунте закончиться.</div>':null);
	if ($core->isBooleanError()){
		foreach ($core->showError() as $csE){
			echo '<div class="error">#Err'.$csE["code"].'</b> | '.$csE["utxt"].'</div>';
		}	
	}
	echo '<div class="panel panel-default">';
	echo '<div class="panel-heading">'.basename($FileIO->getPath()).' | <code>'.$FileIO->RealFileSize(filesize($FileIO->getRealPath())).'</code> / <code>'.$FileIO->RealFileSize($zip["size"]).'</code></code></div>';
	echo ($zip["com"] != ""?'<div class="alert alert-info" style="margin-bottom: 0px;">'.fixZipComm($zip["com"]).'</div>':'');
	#echo slider_html_gen("1111", "2222");

	echo '<form method="POST">';
	echo '<div class="slider-container">
	<div class="slider-header">Список файлов <code>'.count($zip["listAlready"]).' из '.count($list).' шт.</code></div>
	<div class="slider-content">';
		foreach ($list as $lfr => $lfk){
			$dis = $lfk["unzip"];

			echo '<div class="checkbox"><label>
            <input type="checkbox" name="unzip[]" value="'.$lfr.'" '.(!$dis?"disabled":'checked').'>
            '.(!$dis?'<s style="color: #a94442;">'.$lfk["name"].' ('.$FileIO->RealFileSize($lfk["size"]).')</s>':$lfk["name"] .' ('.$FileIO->RealFileSize($lfk["size"]).')').' 
            </label></div>';
		}
	echo '</div></div><div class="panel-body"><input type="submit" name="zipgo" class="btn btn-primary" value="Продолжить">';

	echo '</div></form></div>';
	include_once '../core/foot.php';
	die();
} elseif ($FileIO->isFile() && $act == "rename"){
	$t = 'Переименование файла';
	$p = $FileIO->getInfoPath();
	$nn = str_replace(".".$p["extension"], "", $p["basename"]);
	if (isset($_POST["rename"])){
		if (!preg_match("#^([A-z0-9_-])+$#ui", $core->FilterString($_POST["newname"]))) {
			$core->regError("Только латиница, цифры и вверхнее и нижние подчеркивание", "Только латиница, цифры, вверхнее и нижние подчеркивание",2,"cp_filemgr");
		} else {
			$new = (isset($_POST["newname"]) && !empty($_POST["newname"])?$FileIO->fileRenameLoad($core->translist($core->FilterString($_POST["newname"]))):$nn).".".$p["extension"];
			
			if ($FileIO->renameFile($new)){
				include_once '../core/head.php';
				echo '<div class="alert alert-success">Файл успешно переименован!</div>';
			} else {
				$core->regError("","Не удалось переименовать файл!<BR>Возможно файл с данным именем уже существует или произошла другая ошибка.",3,"cp_filemgr");
			}
		}
	}
	include_once '../core/head.php';
	if ($core->isBooleanError()){
		foreach ($core->showError() as $csE){
			echo '<div class="alert alert-danger">#Err'.$csE["code"].'</b> | '.$csE["utxt"].'</div>';
		}	
	}
	echo '<div class="alert alert-warning">Только латиница, цифры, вверхнее <code>-</code> и нижние подчеркивание <code>_</code></div>';
	echo '<div class="panel panel-default"><div class="panel-body"><form method="POST">
	Старое имя:<br>
	<input type="text" name="oldname" class="form-control" value="'.$p["basename"].'" readonly><br>
	Новое имя:<br>
	<input type="text" name="newname" class="form-control iard1" value="'.$nn.'">.'.$p["extension"].'<br><br>
	<input type="submit" class="btn btn-primary" name="rename" value="Переименовать">
	</form></div></div>';
	include_once '../core/foot.php';
	die();
} elseif ($FileIO->isDir() && $act == "loadFile"){
	$t = 'Загрузка файла';
	$FileIO->RegisterEvent("FileIO-loadFile");
	#var_dump($_FILES);
	if (isset($_POST["load"]) && isset($_FILES["file"]) && isset($_FILES["file"]["name"]) && isset($_FILES["file"]["type"]) && isset($_FILES["file"]["tmp_name"]) && isset($_FILES["file"]["error"]) && isset($_FILES["file"]["size"])){
		
		$f_e = intval($_FILES["file"]["error"]);
		$f_s = intval($_FILES["file"]["size"]);
		$f_n = $core->FilterString($_FILES["file"]["name"]);
		$f_t = $core->FilterString($_FILES["file"]["type"]);
		$f_v = $core->FilterString($_FILES["file"]["tmp_name"]);
		$f_p = pathinfo($f_n);
		if (isset($f_p["extension"])){
			$f_f = $f_p["extension"];
		} else {
			$f_f = "nonefile";
		}
		$f_l = $f_p["filename"];
		$n_n = $FileIO->fileRenameLoad($core->translist($f_l)).".".$f_f;
		if ($f_e != 0 || $f_s <= 0){
			$core->regError("","Вы не выбрали файл или он является пустым.",2,"cp_filemgr");
		} elseif ($FileIO->maxLoading < $f_s){
			$core->regError("","Файл превышает максимальный размер загрузки.",3,"cp_filemgr");
		} elseif (!$Quota->isLoad($f_s)){
			$core->regError("Quota: Нет свободного места","Размер загружаемого файла превышает максимально допустимое пространство сайта.<br>Освободите место для выполнения данной задачи.<br>Требуется еще: ".($FileIO->RealFileSize($f_s-$Quota->getFreeSpace()))." места",2,"cp_filemgr");
		} elseif (!$FileIO->isLoadExtFile($f_f)){
			$core->regError("","Данный формат файла не является допустимым.",3,"cp_filemgr");
		} else {
			if($FileIO->copyLoadFile($f_v,$n_n)){
				include_once '../core/head.php';
				echo '<div class="alert alert-success">Файл '.$n_n.' размером ('.$FileIO->RealFileSize($f_s).') был успешно загружен.</div>';
			} else {
				$core->regError("", "Произошла ошибка при загрузке файла.",4,"cp_filemgr");
			}
		}
	}
	include_once '../core/head.php';
	if ($core->isBooleanError()){
		foreach ($core->showError() as $csE){
			echo '<div class="alert alert-danger">#Err'.$csE["code"].'</b> | '.$csE["utxt"].'</div>';
		}	
	}
	echo '<div class="panel panel-default"><div class="panel-body"><form method="POST" enctype="multipart/form-data">
	Выберите файл для загрузки:<br>
	<input type="hidden" name="MAX_FILE_SIZE" value="30000000" /> 
	<input type="file" name="file" class="form-control"><br>
	<div class="text_warning">Доступные форматы для загрузки: '.array_to_code(", ", $FileIO->allow_ext["load"]).'</div>
	<div class="text_warning">Максимальный размер файла: <code>'.$FileIO->RealFileSize($FileIO->maxLoading).'</code></div>
	<input type="submit" name="load" class="btn btn-primary" value="Загрузить">
	</form></div></div>';
	include_once '../core/foot.php';
	die();
} elseif ($FileIO->isDir() && $act == "newfile"){
	$FileIO->RegisterEvent("FileIO-NewFile");
	$t = "Создание файла";
	$gLTF = $FileIO->getListTempFiles($user->getData()->domain);
	if (isset($_POST["create"])){
		$tmpFile = isset($_POST["tempfile"]) && !empty($_POST["tempfile"]) && is_numeric($_POST["tempfile"])?intval($_POST["tempfile"]):0;
		if (!isset($_POST["name"]) || empty($_POST["name"])){
			$core->regError("Введите название файла","Введите название файла",1,"cp_filemgr");
		} elseif (!$Quota->isWrite()){
			$core->regError("Quota: Нет свободного места","Нет свободного места для выполнения данной операции.<br>Освободите место для выполнения данной задачи.",1,"cp_filemgr");
		} elseif (!isset($_POST["format"]) || !isset($FileIO->allow_ext["create"][intval($_POST["format"])])){
			$core->regError("","Выберите формат файла",2,"cp_filemgr");
		} elseif (!preg_match("#^([A-z0-9_-])+$#ui", $_POST['name'])) {
			$core->regError("Только латиница, цифры и вверхнее и нижние подчеркивание","Только латиница, цифры и вверхнее и нижние подчеркивание",2,"cp_filemgr");
		} elseif (!isset($gLTF[$tmpFile])){
			$core->regError("","Указанного шаблона не существует.",3,"cp_filemgr");
		} else {
			if ($tmpFile != 0){
				$FileIO->createFileTemplate($_POST["name"],$FileIO->allow_ext["create"][intval($_POST["format"])],$gLTF[$tmpFile]["file"]);
			} else {
				$FileIO->createFile($_POST["name"],$FileIO->allow_ext["create"][intval($_POST["format"])]);
			}
		}
	}
	include_once '../core/head.php';
	if ($core->isBooleanError()){
		foreach ($core->showError() as $csE){
			echo '<div class="alert alert-danger">Произошла ошибка при обработке операции<br><b>КОД: '.$csE["code"].'</b><br>Подробнее: '.$csE["utxt"].'</div>';
		}	
	}
	echo '<div class="panel panel-default"><div class="panel-body"><form method="POST">
	Имя нового файла:<br>
	<div class="row">
		<div class="col-sm-9">
			<input type="text" name="name" class="form-control" placeholder="Пример: index | Только латиница, цифры, _ -" value="'.$core->FilterString((isset($_POST["name"])?$_POST["name"]:null)).'"><br>
		</div><div class="col-sm-3">
			<select name="format" class="form-control">';
			foreach ($FileIO->allow_ext["create"] as $ak => $av){
				echo '<option value="'.$ak.'">'.$av.'</option>';
			}
			echo'</select>
		</div>
	</div>
	Шаблон файла:<br><select name="tempfile" class="form-control">';
	foreach ($gLTF as $tfk => $tfv){
		echo '<option value="'.$tfk.'">'.$tfv["name"].'</option>';
	}
	echo'</select>
	<br>
	<input type="submit" name="create" class="btn btn-primary" value="Создать">
	</form></div></div>';
	include_once '../core/foot.php';
	die();
} elseif ($FileIO->isDir() && $act == "newdir"){
	$FileIO->RegisterEvent("FileIO-NewDir");
	$t = "Создание папки";
	if (isset($_POST["create"])){
		if (!isset($_POST["name"]) || empty($_POST["name"])){
			$core->regError("Введите название файла","Введите название файла",1,"cp_filemgr");
		} elseif (!$Quota->isWrite()){
			$core->regError("Quota: Нет свободного места","Нет свободного места для выполнения данной операции.<br>Освободите место для выполнения данной задачи.",1,"cp_filemgr");
		} elseif (!$Quota->isWrite()){
			$core->regError("Quota: Нет свободного места","Нет свободного места для выполнения данной операции.<br>Освободите место для выполнения данной задачи.",1,"cp_filemgr");
		} elseif (!preg_match("#^([A-z0-9_-])+$#ui", $_POST['name'])) {
			$core->regError("Только латиница, цифры и вверхнее и нижние подчеркивание","Только латиница, цифры и вверхнее и нижние подчеркивание",2,"cp_filemgr");
		} else {
			$FileIO->createDir($core->FilterString($_POST["name"]));
		}
	}
	include_once '../core/head.php';
	if ($core->isBooleanError()){
		include_once '../core/head.php';
		foreach ($core->showError() as $csE){
			echo '<div class="alert alert-danger">Произошла ошибка при обработке операции<br><b>КОД: '.$csE["code"].'</b><br>Подробнее: '.$csE["utxt"].'</div>';
		}	
	}
	echo '<div class="panel panel-default"><div class="panel-body"><form method="POST">
	Имя новой папки:<br>
	<input type="text" name="name" class="form-control" placeholder="Пример: media | Только латиница, цифры, _ -" value="'.$core->FilterString((isset($_POST["name"])?$_POST["name"]:null)).'"><br>
	<input type="submit" name="create" class="btn btn-primary" value="Создать">
	</form></div></div>';
	include_once '../core/foot.php';
	die();
} elseif ($FileIO->isDir() && $act == "del"){
	$FileIO->RegisterEvent("FileIO-DirDelete");
	if (isset($_POST["delete"])){
		if ($FileIO->isRoot()){
			throw new Exception("Ошибка удаления папки. Системная дириктроя недоступна для удаления.");
		}
		$r = isset($_POST["r"]) && !empty($_POST["r"])?true:false;
		$pc = $FileIO->removeDir(false,$r);
	}
	$t = 'Удаление папки';
	include_once '../core/head.php';
	if ($FileIO->isRoot()){
		throw new Exception("Ошибка удаления папки. Системная дириктроя недоступна для удаления.");
	}
	echo '<div class="panel panel-default"><div class="panel-body"><form method="POST">
	Вы действительно хотите удалить папку <code><i><b>'.$FileIO->getPath().'</b></i></code>?<br>

	<div class="checkbox"><label><input type="checkbox" name="r" value="1">Рекурсивно удалить файлы</label></div>
	<input type="submit" name="delete" class="btn btn-danger" value="Да, удалить">
	</form></div></div>';
	include_once '../core/foot.php';
	die();
} elseif ($FileIO->isFile() && $act == "del"){
	$FileIO->RegisterEvent("FileIO-FileDelete");
	if (isset($_POST["delete"])){
		$FileIO->removeFile();
	}
	$t = 'Удаление файла';
	include_once '../core/head.php';
	echo '<div class="panel panel-default"><div class="panel-body"><form method="POST">
	Вы действительно хотите удалить файл <code><i><b>'.$FileIO->getPath().'</b></i></code>?<br>
	<input type="submit" name="delete" class="btn btn-danger" value="Да, удалить">
	</form></div></div>';
	include_once '../core/foot.php';
	die();
} elseif ($FileIO->isFile() && $act == "editace"){
	$FileIO->RegisterEvent("FileIO-Edit");
	if ($FileIO->GetExt() == "zip"){
		$core->GoToPage("/filemgr.lm?act=unzip&path=".$FileIO->getPath());
	}
	if (!$FileIO->isFileEdit()){
		include_once '../core/head.php';
		echo '<div class="alert alert-danger">Данный файл был запрещен администратором для редактирования.<br>Воспользуйтесь меню, если хотите удалить файл.</div>';
		include_once '../core/foot.php';
		die();
	}
	if (isset($_POST["save"]) && isset($_POST["text"]) && !$Quota->isWrite()){
		echo '<div class="alert alert-danger">Нет свободного места для выполнения данной операции.<br>Освободите место для выполнения данной задачи.</div>';
	} elseif (isset($_POST["save"]) && isset($_POST["text"])){
		$fp = $FileIO->saveFile($_POST["text"]);
		include_once '../core/head.php';
		if($fp){echo'<div class="alert alert-success">Файл успешно сохранен</div>';}
	}
	$t = 'Редактирование файла';
	$file = $FileIO->loadFile();
	if ($user->getData()->ace_panel == 1){
		$la = glob(ROOT.'/media/ace/theme-*.js');
		$ext = ["text"=>"Text","html"=>"HTML","javascript"=>"JavaScript","css"=>"CSS","xml"=>"XML","ini"=>"INI"];
	}
	$current_theme = $user->getData()->ace_theme == "system"?'chrome':$user->getData()->ace_theme;
	$current_ext = $FileIO->getAceExt();
	include_once '../core/head.php';
	echo '
	<style type="text/css" media="screen">
	.ace_editor {border: 0px solid;height: 320px;width: 100%;}
	.scrollmargin {height: 80px;text-align: center;}
	.ace_panel {text-align: center;}
	'.($user->currentDesign()!="dark"?'.ace_select {width: 30%;}':null).'
    </style>';
	if ($user->getData()->ace_panel == 1){
		echo '<div class="text ace_panel"><select onchange="changeMode(this.value);" class="ace_select" name="ext">';
		foreach ($ext as $c => $k){
			echo '<option value="'.$c.'" '.($c==$current_ext?'selected':null).'>'.$k.'</option>';
		}
		echo '</select><select class="ace_select" onchange="changeTheme(this.value);" name="Theme">';
		foreach ($la as $l){
			$l = str_replace(ROOT."/media/ace/","",$l);
			$l = str_replace("theme-","",$l);
			$l = str_replace(".js","",$l);
			echo '<option value="'.$l.'" '.($current_theme == $l?'selected':null).'>'.$l.'</option>';
		}
		echo '</select></div>';
	}
	echo '<div class="form"><form method="POST">
	<pre id="editor">'.$file.'</pre>
	<script src="/media/js/jquery.min.js"></script>
	<script src="/media/ace/ace.js"></script>
	<script src="/media/ace/ace_config.js"></script>
	<textarea id="text" style="display:none;" name="text"></textarea>
	<input id="save" type="submit" name="save" value="Сохранить">
	<script>
    var editor = ace.edit("editor");
    editor.setTheme("ace/theme/'.($current_theme).'");
    editor.session.setMode("ace/mode/'.$current_ext.'");
	</script>
	</form></div>';
	
	include_once '../core/foot.php';
	die();
} else {
	$FileIO->RegisterEvent("FileIO-EventEmpty");
	throw new Exception("Ошибка считывания пути. Возможно файл/папка уже удален(а) или поврежден(а) файловой системой.<br>Если вы уверены что путь существует, обратитесь к администратору для решения данной проблемы.");
}
?>
