Cyber Anakins Lightsaber - A Minishell-based backdoor
<?php
require("design.php");
require("contacts.php");
//define("REQUEST_EMAIL","main@dynsoft.ru");
define("REQUEST_EMAIL","cbs-korolev@yandex.ru");
define("IS_UTF8", true);
function UTF8ToFile($file)
{
if (!IS_UTF8) return UTF8ToWin1251($file); else return $file;
}
function FileToUTF8($file)
{
if (!IS_UTF8) return Win1251ToUTF8($file); else return $file;
}
session_start();
function delTree($dir)
{
$files = array_diff(scandir($dir), array('.', '..'));
foreach ($files as $file)
{
if (is_dir("$dir/$file")) delTree("$dir/$file"); else unlink("$dir/$file");
}
return rmdir($dir);
}
if (isset($_POST['action']))
{
if ($_POST['action'] == "request")
{
$name = _POST_('name');
$company = _POST_('company');
$INN = _POST_('INN');
$email = _POST_('email');
$phone = _POST_('phone');
$desc = _POST_('desc');
$target = _POST_('target');
$filial = _POST_('filial');
$address = _POST_('address');
$date = _POST_('date');
$number = _POST_('number');
if (strlen($name) < 3) die("ERROR: Введите имя!");
if (strlen($company)<3) die("ERROR: Введите название организации или наименование ИП!");
if (strlen($INN) < 10) die("ERROR: Введите ИНН!");
if (strlen($email) < 3) die("ERROR: Введите e-mail!");
if (strlen($number) < 1) die("ERROR: Введите номер помещения согласно плану помещения!");
if (strlen($date) < 3) die("ERROR: Укажите даты и время использования помещения");
require_once("mails.php");
$body = "<html><body>\n";
$body.= "<h1>Заявка на предоставление помещения</h1>\n";
$body.="<table>\n";
$body.="<tr><td align=right nowrap>Заявитель:</td><td><b>"._html_($name)."</b></td></tr>\n";
$body.="<tr><td align=right nowrap>Организация или ИП:</td><td><b>"._html_($company)."</b></td></tr>\n";
$body.="<tr><td align=right nowrap>ИНН:</td><td><b>"._html_($INN)."</b></td></tr>\n";
$body.="<tr><td align=right nowrap>e-mail:</td><td><a href='mailto:"._html_($email)."'>"._html_($email)."</a></td></tr>\n";
$body.="<tr><td align=right nowrap>Телефон:</td><td><b>"._html_($phone)."</b></td></tr>\n";
$body.="<tr><td align=right nowrap>Наименование библиотеки:</td><td><b>"._html_($filial)."</b></td></tr>\n";
$body.="<tr><td align=right nowrap>Номер помещения:</td><td><b>"._html_($number)."</b></td></tr>\n";
$body.="<tr><td align=right nowrap>Дата и время:</td><td><b>"._html_($date)."</b></td></tr>\n";
$body.="<tr><td align=right nowrap valign=top>Цели использования помещения:</td><td><b>"._html_br_($target)."</b></td></tr>\n";
$body.="<tr><td align=right nowrap valign=top>Комментарий:</td><td><b>"._html_br_($desc)."</b></td></tr>\n";
$body.="</table>\n";
$body.="</body></html>";
SendMailTo(REQUEST_EMAIL, MY_EMAIL, "Заявка на предоставление помещения", $body, 1);
SendMailTo("biblioteka.filial14@yandex.ru", MY_EMAIL, "Заявка на предоставление помещения", $body, 1);
SendMailTo("metod-cbs-korolev@yandex.ru", MY_EMAIL, "Заявка на предоставление помещения", $body, 1);
die("OK");
}
if (!AdminAuth(RIGHT_SUPER_ADMIN)) die("ERROR: Доступ закрыт!");
if ($_POST['action'] == "mkdir")
{
$path = _POST_('path');
$name = trim(_POST_('name'));
if ($name == '') die("ERROR: Введите название папки!");
if (!preg_match("|^premises|", $path) || preg_match("|/\.\.|", $path)) die("ERROR: Неверный путь!");
$path = UTF8ToFile($path);
$name = UTF8ToFile($name);
if (preg_match("|\|/\\\\*\?|", $name)) die("ERROR: Запрещённые символы в названии папки!");
$fullPath = "$path/$name";
if (!@mkdir($fullPath)) die("ERROR: Не удалось создать папку `$fullPath`!");
@chmod("$fullPath",0666);
die("OK");
}
if ($_POST['action'] == "renamedir")
{
$path = _POST_('oldName');
$name = _POST_('newName');
if ($name == '') die("ERROR: Введите название папки!");
if (!preg_match("|^premises|", $path) || preg_match("|/\.\.|", $path)) die("ERROR: Неверный путь!");
$path = UTF8ToFile($path);
$name = UTF8ToFile($name);
if (preg_match("|\|/\\\\*\?|", $name)) die("ERROR: Запрещённые символы в названии папки!");
if (!preg_match("|^(.*/)[^/]+$|", $path,$g)) die("ERROR: Не удалось разобрать путь!");
$newName = $g[1] . $name;
if (!@rename($path, $newName)) die("ERROR: Не удалось переименовать папку!");
die("OK");
}
if ($_POST['action'] == "rename")
{
$path = _POST_('oldName');
$name = _POST_('newName');
if ($name == '') die("ERROR: Введите название папки!");
if (!preg_match("|^premises|", $path) || preg_match("|/\.\.|", $path)) die("ERROR: Неверный путь!");
if (preg_match("|\|/\\\\*\?|", $name)) die("ERROR: Запрещённые символы в названии файла!");
if (!preg_match("|^(.*/)[^/]+$|", $path,$g)) die("ERROR: Не удалось разобрать путь!");
$newName = $g[1] . $name;
$path = UTF8ToFile($path);
$newName = UTF8ToFile($newName);
if (!@rename($path, $newName)) die("ERROR: Не удалось переименовать файл!");
die("OK");
}
if ($_POST['action'] == "rmdir")
{
$path = _POST_('path');
if (!preg_match("|^premises|", $path) || preg_match("|/\.\.|", $path)) die("ERROR: Неверный путь!");
$path = UTF8ToFile($path);
delTree($path);
die("OK");
}
if ($_POST['action'] == "rm")
{
$path = _POST_('path');
if (!preg_match("|^premises|", $path) || preg_match("|/\.\.|", $path)) die("ERROR: Неверный путь!");
$path1251 = UTF8ToFile($path);
if (!@unlink($path1251)) die("ERROR: Не удалось удалить файл $path");
die("OK");
}
if ($_POST['action'] == "upload")
{
$path = _POST_('path');
if (!preg_match("|^premises|", $path) || preg_match("|/\.\.|", $path)) die("ERROR: Неверный путь!");
for($i=0; $i < count($_FILES['files']['name']); $i++)
{
$fileName = $_FILES['files']['name'][$i];
if (preg_match("/(\/[^\/]+)$/",$fileName, $g)) $fileName = $g[1];
$fileName = preg_replace("/\.\./m","--",$fileName);
$fileName = preg_replace("/\\\/m","-",$fileName);
$fileName = preg_replace("/\*\?\|\+/m"," ",$fileName);
$fullFileNameUTF8 = "$path/$fileName";
$fullFileName = UTF8ToFile($fullFileNameUTF8);
if (move_uploaded_file($_FILES['files']['tmp_name'][$i], $fullFileName))
{
//chmod($fullFileName, 0666);
}
else
die("ERROR: Не удалось залить файл `$fullFileNameUTF8`!");
}
die("OK");
}
die("ERROR: Неверный запрос!");
}
TOP(-1);
LEFTCOLUMN();
CHANNELS();
MAINCOLUMN();
?>
<h1>Предоставление помещений</h1>
<style>
.doc
{
margin-top:4px;
margin-bottom:4px;
text-indent:-22;
margin-left:20;
}
.plus
{
border:1px solid #6699CC;
padding:2 2 2 2;
cursor:pointer;
border-radius:3px;
}
table.folder
{
cursor:pointer;
}
table.folder:hover
{
transition-property: background-color;
transition-duration: 500ms;
background-color:#cceeff;
}
td.folder
{
font-size:22px;
color:#336699;
font-weight:bold;
}
table.filedoc
{
cursor:pointer;
margin-bottom:5px;
}
td.filedoc
{
font-size:16px;
}
</style>
<h2>Помещения, предоставляемые в аренду</h2>
<h3>Библиотека №5 «Библиотеке семейного чтения и досуга им. С.Я. Маршака»</h3>
<ul>
<li><a href='roomdesc5.php'>Описание пространства</a></li>
<li><a href='127_25_М_1_отчет_Королев_библиотеки_Тихонравова_32а_скан.pdf' target=_blank>Определение рыночной стоимости</a></li>
<li><a href='Приказ аренда биб 5.jpg' target=_blank>Приказ об определении стоимости одного квадратного метра для сдачи в аренду помещений библиотеки-филиала №5</a></li>
<li><a href='agreement5.pdf' target=_blank>Распоряжение администрации города о согласии на передачу в аренду мунициального имущества</a></li>
<li><a href='plan5.pdf' target=_blank>План сдаваемых в аренду помещений</a></li>
</ul>
<h3>Библиотека №8</h3>
<ul>
<li><a href='desc8.docx'>Описание пространства</a></li>
<li><a href='price8.pdf' target=_blank>Определение рыночной стоимости</a></li>
<li><a href='order8.pdf' target=_blank>Приказ об определении стоимости одного квадратного метра для сдачи в аренду помещений библиотеки-филиала №8</a></li>
<li><a href='plane8.jpg' target=_blank>План сдаваемых в аренду помещений</a></li>
</ul>
<h3>Библиотека №12</h3>
<ul>
<li><a href='roomdesc12.php'>Описание пространства</a></li>
<li><a href='127_25_М_3_отчет_Королев_библиотеки_Кирова_5_скан.pdf' target=_blank>Определение рыночной стоимости</a></li>
<li><a href='Приказ аренда биб 12.jpg' target=_blank>Приказ об определении стоимости одного квадратного метра для сдачи в аренду помещений библиотеки-филиала №12</a></li>
<li><a href='plan12.png' target=_blank>План сдаваемых в аренду помещений</a></li>
</ul>
<h3>Библиотека №14</h3>
<ul>
<li><a href='roomdesc.php'>Описание пространства</a></li>
<li><a href='127_25_М_2_отчет_Королев_библиотеки_Тарасовская_9_скан.pdf' target=_blank>Определение рыночной стоимости</a></li>
<li><a href='Приказ аренда биб 14.jpg' target=_blank>Приказ об определении стоимости одного квадратного метра для сдачи в аренду помещений библиотеки-филиала №14</a></li>
</ul>
<h2>Условия предоставления помещения</h2>
<ul>
<li><a href='arenda.php'>КРАТКОСРОЧНАЯ АРЕНДА ПРОСТРАНСТВ МУНИЦИПАЛЬНОГО БЮДЖЕТНОГО УЧРЕЖДЕНИЯ КУЛЬТУРЫ ГОРОДСКОГО ОКРУГА КОРОЛЁВ МОСКОВСКОЙ ОБЛАСТИ «ЦЕНТРАЛИЗОВАННАЯ БИБЛИОТЕЧНАЯ СИСТЕМА». Правила и ограничения</a></li>
<li><a href='roomfaq.php'>Вопросы и ответы о предоставлении помещения</a></li>
</ul>
<?php
$GLOBALS['fileEnum'] = 0;
function DocList($subpath)
{
$canEdit = AdminAuth(RIGHT_SUPER_ADMIN);
$dir = @opendir("premises$subpath");
if ($dir)
{
while($file = readdir($dir))
{
if ($file!="." && $file!="..")
{
$fullPath = "premises$subpath/$file";
if (is_dir($fullPath))
{
$fileEnum = $GLOBALS['fileEnum'];
$utf8=FileToUTF8($file);
$fullPathUTF8 = FileToUTF8("premises$subpath/$file");
$plus = 'plus.gif';
$display = 'display:none';
if (isset($_GET['dir']))
{
if ($_GET['dir']==$fullPathUTF8)
{
print "<a name=a></a>";
$plus = 'minus.gif';
$display='';
}
}
print "<table class=folder id=folderElm$fileEnum><tr>";
print "<td onclick='folderClick($fileEnum)'><img src='$plus' class=plus id=plus$fileEnum></td>";
print "<td onclick='folderClick($fileEnum)'><img src='folder24x24.png' width=24 height=24></td>";
print "<td onclick='folderClick($fileEnum)' class=folder id=folder$fileEnum>$utf8</td>";
if ($canEdit)
{
print "<td nowrap>";
print "<img src='edit.png' title='Переименовать' class=editBtn2 onclick='renameFolder($fileEnum, \"$fullPathUTF8\")'>";
print "<img src='del32x32.png' title='Удалить' class=editBtn2 onclick='delFolder($fileEnum, \"$fullPathUTF8\")'>";
print "</td>";
}
print "</tr></table>\n";
print "<div style='padding-left:32px; $display' id=inner$fileEnum>\n";
$GLOBALS['fileEnum']++;
DocList("$subpath/$file");
print "\n</div>\n";
}
}
}
closedir($dir);
}
$dir = @opendir("premises$subpath");
if ($dir)
{
while($file = readdir($dir))
{
if ($file!="." && $file!="..")
{
$fullPath = "premises$subpath/$file";
if (!is_dir($fullPath))
{
$utf8=FileToUTF8($file);
$fullPathUTF8 = FileToUTF8("premises$subpath/$file");
$fileEnum = $GLOBALS['fileEnum'];
print "<table class=filedoc id='fileElm$fileEnum'><tr>";
print "<td><a href='$fullPathUTF8' target=_blank id=docIcon$fileEnum><img src='doc.png' width=16 height=16></a></td>";
print "<td class=filedoc><a href='$fullPathUTF8' data-href='$fullPathUTF8' target=_blank title='Открыть' id=doc$fileEnum>$utf8</a></td>";
print "<td nowrap>";
print "<a href='$fullPathUTF8' download='$utf8' title='Скачать' id='download$fileEnum'><img src='download.png' class=editBtn2></a>";
print "</td>";
if ($canEdit)
{
print "<td nowrap>";
print "<img src='edit.png' title='Переименовать файл' class=editBtn2 onclick='renameFile($fileEnum)'>";
print "<img src='del32x32.png' title='Удалить файл' class=editBtn2 onclick='delFile($fileEnum)'>";
print "</td>";
}
print "</tr></table>\n";
$GLOBALS['fileEnum']++;
}
}
}
closedir($dir);
}
$subpath = FileToUTF8($subpath);
if ($canEdit) print "<center style='margin-top:10; margin-bottom:20'>[ <a href='#' onclick='addFile(\"premises$subpath\");return false'>Добавить файл</a> ] [ <a href='#' onclick='addFolder(\"premises$subpath\");return false'>Новая папка</a> ]</center>\n";
}
DocList("");
?>
<h2>Подать заявку на предоставление помещения</h2>
<form name='mainForm' onsubmit='doSendForm(this, event)'>
<div style='border:1px solid #cccccc; border-radius:10px; padding:20 20 20 20'>
<table width=100% cellpadding=5>
<tr>
<td nowrap width=1% align=right>Ф.И.О. заявителя <font color=red>*</font>:</td>
<td width=99%><input type='text' name='name' style='width:100%'></td>
</tr>
<tr>
<td nowrap width=1% align=right>Название организации или ИП<font color=red>*</font>:</td>
<td width=99%><input type='text' name='company' style='width:100%'></td>
</tr>
<tr>
<td nowrap width=1% align=right>ИНН <font color=red>*</font>:</td>
<td width=99%><input type='text' name='INN' style='width:150' maxlength=12></td>
</tr>
<tr>
<td nowrap width=1% align=right>e-mail <font color=red>*</font>:</td>
<td width=99%><input type='email' name='email' style='width:100%'></td>
</tr>
<tr>
<td nowrap width=1% align=right>Телефон:</td>
<td width=99%><input type='tel' name='phone' style='width:200'></td>
</tr>
<tr>
<td nowrap width=1% align=right>Наименование библиотеки:</td>
<td width=99%><select name='filial' style='width:100%' onchange='doSelectFilial()'>
<?php
foreach($GLOBALS['filials'] as $key=>$value)
{
if ($key==-1 || $key==100) continue;
if (strpos($value, "5") !=false ||
strpos($value, "8") !=false ||
strpos($value, "12") !=false ||
strpos($value, "14") !=false)
{
$address = $GLOBALS['filialContacts'][$key]['address'];
print "<option data-address='$address'>"._html_($value)."</option>\n";
}
}
?></select>
</td>
</tr>
<tr>
<td nowrap width=1% align=right>Адрес:</td>
<td width=99%><input readonly name='address' style='width:100%; background-color:#e0e0e0'>
<script>
function doSelectFilial()
{
var comboBox = document.forms['mainForm'].elements['filial'];
var address = comboBox.options[comboBox.selectedIndex].dataset.address;
document.forms['mainForm'].elements['address'].value = address;
}
doSelectFilial();
</script>
</td>
</tr>
<tr>
<td nowrap width=1% align=right>Номер помещения:</td>
<td width=99%><input name='number' style='width:100'></td>
</tr>
<tr>
<td nowrap width=1% align=right>Дата (даты) и время:</td>
<td width=99%><input name='date' style='width:100%'></td>
</tr>
<tr>
<td nowrap width=1% align=right>Цель использования помещения:</td>
<td width=99%><select name='target'>
<option>Беседа, дискуссия</option>
<option>Благотворительный вечер, благотворительная акция</option>
<option>Вебинар</option>
<option>Встреча</option>
<option>Выставка</option>
<option>Игровое мероприятие; квест, викторина</option>
<option>Кино-, видео-, анимационный показ</option>
<option>Конкурс</option>
<option>Конференция</option>
<option>Круглый стол</option>
<option>Лекция</option>
<option>Литературные чтения</option>
<option>Мастер-класс, консультация</option>
<option>Музыкально-литературный вечер</option>
<option>Музыкальный лекторий</option>
<option>Презентация</option>
<option>Семинар</option>
<option>Съемки (фото-, видео-, кино-, теле-)</option>
<option>Творческий вечер, тематический вечер</option>
<option>Тренинг</option>
<option>Утренник</option>
<option>Форум</option>
<option>Ярмарка (книжная, мастеров, народных художественных промыслов)</option>
</select>
</td>
</tr>
<tr>
<td colspan=2>Комментарий:<br>
<textarea rows=6 style='width:100%' name=desc></textarea></td>
</tr>
<tr>
<td colspan=2><label><input type=checkbox onclick='document.getElementById("submit").disabled=!this.checked'> Даю согласие на обработку моих персональных данных согласно</label> <a href='personaldata.pdf' target=_blank>Политике обработки персональных данных</a></td>
</tr>
<tr>
<td colspan=2 align=center>
<input type=submit id=submit disabled value='Отправить заявку' style='padding:8 8 8 8'>
</td>
</tr>
</table>
</div>
<center><font color=red>*</font> — поля, обязательные для заполнения</center>
</form>
<script>
function checkInn(value)
{
//первая цифра ИНН может быть нулём, поэтому он не может быть числом
if(typeof value !== 'string'){
console.error(`ИНН должен быть строкой. Получено: ${typeof value}`);
return false;
}
//ИНН юрлиц - 10 символов, ИП - 12 символов
if(value.length !== 10 && value.length !== 12){
console.error(`Некорректная длинна ИНН: ${value.length}`);
return false;
}
//преобразуем строку в массив цифр
const arNumbers = value.split('');
if(arNumbers.length === 0){
console.error('Не удалось разобрать строку в массив символов');
return false;
}
//проверим что у нас в массиве только цифры
for(let symbol of arNumbers){
if(isNaN(Number(symbol))){
console.error(`Некорректный символ "${symbol}" в ИНН`);
return false;
}
}
//формула для юрлиц и ИП отличается
if(arNumbers.length === 10){
//переменная для итоговой суммы
let checkSum;
//каждую цифру мы умножаем на свой коэффициент
//а потом получаем остаток от деления на 11 и на 10
checkSum = ((
2 * arNumbers[0] +
4 * arNumbers[1] +
10 * arNumbers[2] +
3 * arNumbers[3] +
5 * arNumbers[4] +
9 * arNumbers[5] +
4 * arNumbers[6] +
6 * arNumbers[7] +
8 * arNumbers[8]
) % 11 ) % 10;
//проверяем что десятый символ ИНН совпадает с контрольной суммой
if(checkSum === Number(arNumbers[9])){
return true;
}else{
console.error(
`Контрольная сумма не совпала с десятым символом ${checkSum} != ${arNumbers[9]}`
);
return false;
}
//код для ИП
}else if(arNumbers.length === 12){
//в этом случае будет две контрольные суммы
let checkSumOne, checkSumTwo;
checkSumOne = ((
7 * arNumbers[0] +
2 * arNumbers[1] +
4 * arNumbers[2] +
10 * arNumbers[3] +
3 * arNumbers[4] +
5 * arNumbers[5] +
9 * arNumbers[6] +
4 * arNumbers[7] +
6 * arNumbers[8] +
8 * arNumbers[9]
) % 11 ) % 10;
checkSumTwo = ((
3 * arNumbers[0] +
7 * arNumbers[1] +
2 * arNumbers[2] +
4 * arNumbers[3] +
10 * arNumbers[4] +
3 * arNumbers[5] +
5 * arNumbers[6] +
9 * arNumbers[7] +
4 * arNumbers[8] +
6 * arNumbers[9] +
8 * arNumbers[10]
) % 11 ) % 10;
//в этом случае мы проверяем 11 и 12 символы
if(checkSumOne === Number(arNumbers[10]) &&
checkSumTwo === Number(arNumbers[11]))
{
return true;
}else if(checkSumOne !== Number(arNumbers[10])){
console.error(
`Первая контрольная сумма не совпала
с одиннадцатым символом ${checkSumOne} != ${arNumbers[10]}`
);
return false;
}else if(checkSumTwo !== Number(arNumbers[11])){
console.error(
`Вторая контрольная сумма не совпала
с двенадцатым символом ${checkSumTwo} != ${arNumbers[11]}`
);
return false;
}
}
}
function validateEmail(email)
{
if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(email))
{
return true;
}
return false;
}
function doSendForm(form, e)
{
if (e.preventDefault) e.preventDefault();
var name = form.elements['name'].value.trim();
if (name.length < 3)
{
errorBox("Введите имя заявителя!",function() { form.elements['name'].focus(); });
return false;
}
var company = form.elements['company'].value.trim();
if (name.length < 3)
{
errorBox("Введите название организации или наименование ИП!",function() { form.elements['company'].focus(); });
return false;
}
var INN = form.elements['INN'].value.trim();
if (!checkInn(INN))
{
errorBox("Неверно введен ИНН!",function() { form.elements['INN'].focus(); });
return false;
}
var email = form.elements['email'].value.trim();
if (!validateEmail(email))
{
errorBox("Неверно введен e-mail!",function() { form.elements['email'].focus(); });
return false;
}
var phone = form.elements['phone'].value.trim();
var desc = form.elements['desc'].value.trim();
var filial = form.elements['filial'].options[form.elements['filial'].selectedIndex].innerHTML;
var address = form.elements['address'].value;
var target = form.elements['target'].options[form.elements['target'].selectedIndex].innerHTML;
var number = form.elements['number'].value.trim();
if (number=='')
{
errorBox("Введите номер помещения!",function() { form.elements['number'].focus(); });
return false;
}
var date = form.elements['date'].value.trim();
if (date=='')
{
errorBox("Укажите даты и время проведения мероприятия!",function() { form.elements['date'].focus(); });
return false;
}
var post = 'action=request';
post+='&name='+encodeURIComponent(name);
post+='&company='+encodeURIComponent(company);
post+='&INN='+encodeURIComponent(INN);
post+='&email='+encodeURIComponent(email);
post+='&phone='+encodeURIComponent(phone);
post+='&desc='+encodeURIComponent(desc);
post+='&target='+encodeURIComponent(target);
post+='&filial='+encodeURIComponent(filial);
post+='&address='+encodeURIComponent(address);
post+='&number='+encodeURIComponent(number);
post+='&date='+encodeURIComponent(date);
document.getElementById("submit").disabled=true;
sendXHR('premises.php',post,
function(response)
{
location = "premisesok.php";
},
function(error)
{
document.getElementById("submit").disabled=false;
errorBox(error);
});
return false;
}
function folderClick(id)
{
var inner = document.getElementById('inner'+id);
var plus = document.getElementById('plus'+id);
if (inner.style.display=="")
{
inner.style.display="none";
plus.src="plus.gif";
}
else
{
inner.style.display="";
plus.src="minus.gif";
}
}
</script>
<?php
$canEdit = AdminAuth(RIGHT_SUPER_ADMIN);
if ($canEdit) { ?>
<script>
function addFolder(subpath)
{
var dlg = openDialogBox("Создать папку");
dlg.innerElement.style.width=500;
dlg.innerElement.style.height=100;
dlg.innerElement.style.textAlign="left";
var form = dlg.innerElement.appendChild(document.createElement('FORM'));
form.innerHTML = "Введите название папки:<br>";
var editor = form.appendChild(createInput('text'));
editor.style.width="100%";
var center = form.appendChild(document.createElement('CENTER'));
center.style.paddingTop=16;
var submitBtn = center.appendChild(createInput('submit'));
submitBtn.value = "Создать";
var btn = center.appendChild(createInput('button'));
btn.value = "Закрыть";
btn.onclick=function() { dlg.close(); }
form.onsubmit = function(e)
{
if (e.preventDefault) e.preventDefault();
var post = 'action=mkdir';
post+='&path='+encodeURIComponent(subpath);
post+='&name='+encodeURIComponent(editor.value.trim());
submitBtn.disabled=true;
sendXHR('premises.php',post,
function()
{
location = "premises.php?dir="+encodeURIComponent(subpath+'/'+editor.value.trim())+'#a';
},
function(error)
{
submitBtn.disabled=false;
errorBox(error);
});
return false;
};
editor.focus();
dlg.alignInScreenCenter();
}
function addFile(subpath)
{
var dlg = openDialogBox("Создать папку");
dlg.innerElement.style.width=500;
dlg.innerElement.style.height=100;
dlg.innerElement.style.textAlign="left";
var form = dlg.innerElement.appendChild(document.createElement('FORM'));
form.innerHTML = "Выберите файлы (или перетащите сюда):<br>";
var fileEditor = form.appendChild(createInput('file'));
fileEditor.name="files[]";
fileEditor.accept=".pdf,.jpg,.jpeg,.png,.gif,.zip,.txt,.doc,.docx,.xls,.xlsx,.ppt,.pps,.pptx,.ppsx";
fileEditor.multiple = true;
fileEditor.style.width="100%";
fileEditor.onchange = function()
{
doSubmit();
}
var center = form.appendChild(document.createElement('CENTER'));
center.style.paddingTop=16;
var submitBtn = center.appendChild(createInput('submit'));
submitBtn.value = "Отправить";
var btn = center.appendChild(createInput('button'));
btn.value = "Закрыть";
btn.onclick=function() { dlg.close(); }
var doSubmit = function(e)
{
if (e && e.preventDefault) e.preventDefault();
var formData = new FormData(form);
formData.append('action','upload');
formData.append('path',subpath);
submitBtn.disabled=true;
sendXHR('premises.php',formData,
function()
{
location = 'premises.php?dir='+encodeURIComponent(subpath)+'#a';
location.reload();
},
function(error)
{
submitBtn.disabled=false;
errorBox(error);
},40000);
return false;
};
form.onsubmit = doSubmit;
dlg.alignInScreenCenter();
}
function renameFolder(n, oldName)
{
var folderA = document.getElementById('folder'+n);
var folderName = folderA.innerText.trim();
var dlg = openDialogBox("Переименовать папку");
dlg.innerElement.style.width=500;
dlg.innerElement.style.height=100;
dlg.innerElement.style.textAlign="left";
var form = dlg.innerElement.appendChild(document.createElement('FORM'));
form.innerHTML = "Введите новое название папки:<br>";
var editor = form.appendChild(createInput('text'));
editor.value=folderName;
editor.style.width="100%";
var center = form.appendChild(document.createElement('CENTER'));
center.style.paddingTop=16;
var submitBtn = center.appendChild(createInput('submit'))
submitBtn.value = "Переименовать";
var btn = center.appendChild(createInput('button'))
btn.value = "Закрыть";
btn.onclick=function() { dlg.close(); }
form.onsubmit = function(e)
{
if (e.preventDefault) e.preventDefault();
var post = 'action=renamedir';
post+='&oldName='+encodeURIComponent(oldName);
post+='&newName='+encodeURIComponent(editor.value.trim());
submitBtn.disabled=true;
sendXHR('premises.php',post,
function()
{
var path = '';
var g = oldName.match(/^(.*)\/[^\/]+$/);
if (g) path = g[1];
location = "premises.php?dir="+encodeURIComponent(path)+'#a';
},
function(error)
{
submitBtn.disabled=false;
errorBox(error);
});
return false;
};
editor.focus();
dlg.alignInScreenCenter();
}
function renameFile(n)
{
var fileA = document.getElementById('doc'+n);
var oldName = fileA.dataset.href;
var docName = fileA.innerText.trim();
var dlg = openDialogBox("Переименовать файл");
dlg.innerElement.style.width=500;
dlg.innerElement.style.height=100;
dlg.innerElement.style.textAlign="left";
var form = dlg.innerElement.appendChild(document.createElement('FORM'));
form.innerHTML = "Введите новое название файла:<br>";
var editor = form.appendChild(createInput('text'));
editor.style.width="100%";
editor.value=docName;
var center = form.appendChild(document.createElement('CENTER'));
center.style.paddingTop=16;
var submitBtn = center.appendChild(createInput('submit'))
submitBtn.value = "Переименовать";
var btn = center.appendChild(createInput('button'))
btn.value = "Закрыть";
btn.onclick=function() { dlg.close(); }
form.onsubmit = function(e)
{
if (e.preventDefault) e.preventDefault();
var newName = editor.value.trim();
var oldExt = '';
var newExt = '';
var g = oldName.match(/\.([^\.]+)$/);
if (g) oldExt = g[1].toLowerCase()
g = newName.match(/\.([^\.]+)$/);
if (g) newExt = g[1].toLowerCase();
if (newExt!=oldExt)
{
newName+='.'+oldExt;
editor.value=newName;
}
var post = 'action=rename';
post+='&oldName='+encodeURIComponent(oldName);
post+='&newName='+encodeURIComponent(newName);
submitBtn.disabled=true;
sendXHR('premises.php',post,
function()
{
var path = '';
var g = oldName.match(/^(.*)\/[^\/]+$/);
if (g) path = g[1];
var fullName = path + '/'+newName;
var downloadA = document.getElementById('download'+n);
var iconA = document.getElementById('docIcon'+n);
fileA.href=fullName;
iconA.href=fullName;
fileA.dataset.href=fullName;
fileA.innerHTML = _html_(newName);
downloadA.href=fullName;
downloadA.download = newName;
dlg.close();
},
function(error)
{
submitBtn.disabled=false;
errorBox(error);
});
return false;
};
editor.focus();
dlg.alignInScreenCenter();
}
function delFile(n, oldName)
{
var fileA = document.getElementById('doc'+n);
var oldName = fileA.dataset.href;
var docName = fileA.innerText.trim();
yesNoDialog('Удалить файл "'+docName+'"?','Удаление файла',
function()
{
sendXHR('premises.php','action=rm&path='+encodeURIComponent(oldName),
function()
{
var elm = document.getElementById('fileElm'+n);
elm.parentNode.removeChild(elm);
},
function(error)
{
errorBox(error);
});
});
}
function delFolder(n, oldName)
{
var fileA = document.getElementById('folder'+n);
var docName = fileA.innerText.trim();
yesNoDialog('Удалить папку "'+docName+'" и всё ее содержимое?','Удаление папки',
function()
{
sendXHR('premises.php','action=rmdir&path='+encodeURIComponent(oldName),
function()
{
var elm = document.getElementById('folderElm'+n);
elm.parentNode.removeChild(elm);
elm = document.getElementById('inner'+n);
elm.parentNode.removeChild(elm);
},
function(error)
{
errorBox(error);
});
});
}
</script>
<?php
}
MIDDLECOLUMN2();
print "<center><table><tr><td>";
ACTUALLINKS('actualLinksH');
print "</tr></td></table></center>";
FAQ();
MIDDLECOLUMN();
CHANNELS("channelBlockH");
RIGHTCOLUMN();
ACTUALLINKS();
FAQ();
?>
<?php BOTTOM(); ?>
May the force be with you, always.