Файл: vxas.ru/adm_panel/lib_repair.php
Строк: 79
<?
require '../sys/inc/start.php';
require '../sys/inc/compress.php';
require '../sys/inc/sess.php';
require '../sys/inc/home.php';
require '../sys/inc/settings.php';
require '../sys/inc/db_connect.php';
require '../sys/inc/ipua.php';
require '../sys/inc/fnc.php';
require '../sys/inc/adm_check.php';
require '../sys/inc/user.php';
user_access('adm_lib_repair',null,'index.php?'.SID);
adm_check();
$set['title']='Восстановление библиотеки';
require '../sys/inc/thead.php';
title();
if (isset($_GET['ok']) && isset($_POST['accept']))
{
$rep=array();
$del=array();
$k_dir=0;
$cicle=0;
// правка путей
$q=mysql_query("SELECT * FROM `lib_dir`");
while($directory=mysql_fetch_assoc($q))
{
$k_dir++;
$dir=preg_replace('#/+#','/','/'.htmlspecialchars($directory['dir']).'/');
$dir_osn=preg_replace('#/+#','/','/'.htmlspecialchars($directory['dir_osn']).'/');
$name=preg_replace('#[^A-zА-я0-9()-_ .?]#ui', null, $directory['name']);
mysql_query("UPDATE `lib_dir` SET `name`='".mysql_real_escape_string($name)."', `dir`='".mysql_real_escape_string($dir)."', `dir_osn` = '".mysql_real_escape_string($dir_osn)."' WHERE `id` = '".mysql_real_escape_string($directory[id])."' LIMIT 1");
}
function rep_lib(){
global $del,$rep,$cicle;
$cicle++;
// проверка оснований
$q=mysql_query("SELECT * FROM `lib_dir` WHERE `dir_osn` != '/'");
while($directory=mysql_fetch_assoc($q))
{
if (mysql_result(mysql_query("SELECT COUNT(*) FROM `lib_dir` WHERE `dir` = '".mysql_real_escape_string($directory[dir_osn])."' AND `id` != '".mysql_real_escape_string($directory[id])."'"),0)==0)
{
if (mysql_result(mysql_query("SELECT COUNT(*) FROM `lib_dir` WHERE `dir_osn` = '".mysql_real_escape_string($directory[dir])."' AND `id` != '".mysql_real_escape_string($directory[id])."'"),0)==0
&& mysql_result(mysql_query("SELECT COUNT(*) FROM `lib_files` WHERE `id_dir` = '".mysql_real_escape_string($directory[id])."'"),0)==0)
{
$new=true;
$del[$directory['id']]=true;
mysql_query("DELETE FROM `lib_dir` WHERE `id` = '".mysql_real_escape_string($directory[id])."' LIMIT 1");
}
else
{
$name=preg_replace('#[^A-zА-я0-9()-_ .?]#ui', null, $directory['name']);
if ($name==null)$name='repair-'.passgen(); // случайное название
mysql_query("UPDATE `lib_dir` SET `name`='".mysql_real_escape_string($name)."', `dir`='/".tr_loads(retranslit($name))."/', `dir_osn` = '/' WHERE `id` = '".mysql_real_escape_string($directory[id])."' LIMIT 1");
$new=true;
$rep[$directory['id']]=true;
}
}
}
if (isset($new) && $cicle<10)rep_lib(); // повторяем до тех пор, пока не будут исправлены все папки
}
rep_lib();
if ($k_dir==mysql_result(mysql_query("SELECT COUNT(*) FROM `lib_dir`"),0) && $cicle==1 && count($del)==0 && count($rep)==0)
{
admin_log('Библиотека','Диагностика',"Неполадок не обнаружено. Папок: $k_dir");
msg("Неполадок не обнаружено. Папок: $k_dir");
}
else
{
admin_log('Библиотека','Ремонт',"Исправление структуры");
msg("Найдено папок: $k_dir");
msg("Сканирований: ".$cicle);
msg("Удалено папок: ".count($del));
msg("Восстановлено папок: ".count($rep));
msg("Осталось папок: ".mysql_result(mysql_query("SELECT COUNT(*) FROM `lib_dir`"),0));
}
}
err();
echo "<form method='post' action='?ok&$passgen'>n";
echo "<input value='Начать' name='accept' type='submit' />n";
echo "</form>n";
echo "* Рекомендуется использовать только в случах расхождений счетчиков с реальными данными<br />n";
if (user_access('adm_panel_show')){
echo "<div class='foot'>n";
echo "«<a href='/adm_panel/'>В админку</a><br />n";
echo "</div>n";
}
require '../sys/inc/tfoot.php';
?>