<?php
/**
 * N3Download (Nesquik Download)
 *
 * Система представляет собой скрипт загруз-центра
 * Система написана на PHP, хранящая данные в БД MYSQL
 * Высокая скорость работы скрипта, устойчивость к нагрузкам
 *
 * Автор: N3squ1k (Несквик)
 * ICQ: 551-228
 *
 * Вы не имеете право продавать скрипта
 * Вы не имеете право вылаживать скрипта
 * Все права на данный скрипт пренадлежат его автору
 *
 * Все права защищены © 2010
 */
define('PAGESTR', 5);
if (file_exists('../__incfiles/core.php')) {
	require_once('../__incfiles/core.php');
} else {
	exit('Немогу подключить системный файл');
}

define('TIMESTART', microtime(true));

if (!$admin) header('Location: '.ADMIN);

define('MANAGER', ADMIN.'/manager.xhtml');

switch ($act) {

	default:

	require_header('Файловый менеджер');

	if ($id) {
		$dir = mysql_fetch_assoc(mysql_query("SELECT `t1`.`path`, COUNT(`t2`.`id`) AS `count` FROM `".SQLprefixTable."files` AS `t1` LEFT JOIN `".SQLprefixTable."files` AS `t2` ON (`t2`.`infolder`=`t1`.`path`) WHERE `t1`.`id`='".$id."' GROUP BY `t1`.`id` ORDER BY NULL"));
	} else {
		$dir['path'] = $set['path'].'/';
		$dir['count'] = mysql_result(mysql_query("SELECT COUNT(1) FROM `".SQLprefixTable."files` WHERE `infolder`='".mysql_real_escape_string($dir['path'])."'"), 0);
	}

	if (!is_dir('../'.$dir['path'])) {
		error('Folder not found!');
	}

	$k_page = k_page($dir['count'], 5); 
	$page = page($k_page);
	define('START', (5 * $page - 5));

	$sql = mysql_query("SELECT `id`, `path`, `name`, `size`, `load`, `count_files` FROM `".SQLprefixTable."files` WHERE `infolder`='".mysql_real_escape_string($dir['path'])."' LIMIT ".START.", ".PAGESTR);

	echo '<div class="block"><a href="'.MANAGER.'/add/'.($id ? $id : 0).'/">Создать папку</a></div>';

	if ($dir['count'] == 0) {
		echo '<div class="menu">В данной папке нет файлов!</div>';
	} else {
	
		$i = 0;
		
		while ($row = mysql_fetch_assoc($sql)) {
		
			if (is_dir('../'.$row['path'])) {
				echo '<div class="'.($i++ % 2 ? 'main' : 'menu').'"><table width="100%"><tr><td><a href="'.MANAGER.'/'.$row['id'].'/">'.htmlspecialchars(str_replace('*', '', $row['name'])).'</a> ['.$row['count_files'].'] <a href="'.SCRIPT.'/'.$row['id'].'/">-></a></td> <td style="float: right"><a href="'.MANAGER.'/update/'.$row['id'].'/"><img src="'.SCRIPT.'/images/update.gif" alt=""/></a> <a href="'.MANAGER.'/edit_dir/'.$row['id'].'/"><img src="'.SCRIPT.'/images/edit.gif" alt=""/></a> <a href="'.MANAGER.'/delete_dir/'.$row['id'].'/"><img src="'.SCRIPT.'/images/delete.gif" alt=""/></a></td></tr></table></div>';
			}
			else if (is_file('../'.$row['path'])) {
				echo '<div class="'.($i++ % 2 ? 'main' : 'menu').'"><table width="100%"><tr><td><b>'.htmlspecialchars($row['name']).'</b> ['.size($row['size']).' / '.strtolower(pathinfo($row['path'], PATHINFO_EXTENSION)).'] <a href="'.SCRIPT.'/view/'.$row['id'].'/">-></a></td> <td style="float: right"><a href="'.MANAGER.'/screen/'.$row['id'].'/"><img src="'.SCRIPT.'/images/screen.gif" alt=""/></a> <a href="'.MANAGER.'/about/'.$row['id'].'/"><img src="'.SCRIPT.'/images/about.gif" alt=""/></a> <a href="'.MANAGER.'/delete/'.$row['id'].'/"><img src="'.SCRIPT.'/images/delete.gif" alt=""/></a></td></tr></table></div>';		
			}
		
		}

		if ($k_page > 1) {
			navigation(MANAGER.'/'.($id ? $id.'/' : null), $k_page, $page);
		}

	}

	echo '<div class="menu">
	<img src="'.SCRIPT.'/images/update.gif" alt=""/> - Обновить каталог<br/>
	<img src="'.SCRIPT.'/images/edit.gif" alt=""/> - Изменить название каталога<br/>
	<img src="'.SCRIPT.'/images/delete.gif" alt=""/> - Удаление каталога/файла<br/>
	<img src="'.SCRIPT.'/images/about.gif" alt=""/> - Добавить/изменить описание<br/>
	<img src="'.SCRIPT.'/images/screen.gif" alt=""/> - Добавить/изменить скриншот
	</div>';

	if ($id) {
		echo '<div class="block"><a href="'.MANAGER.'">Файловый менеджер</a></div>';
	} else {
		echo '<div class="block"><a href="'.ADMIN.'">Админ-панель</a></div>';
	}

	require_footer();

	break;

	case 'add':

	require_header('Создать новый каталог');
	
	if (isset($_POST['name'])) {
	
		if (empty($_POST['name'])) {
			echo '<div class="error">Введите название каталога!</div>';
		} else {
		
			$newdir = delete(mysql_real_escape_string(trim($_POST['name'])));
			$name = '*'.$newdir;
			
			if ($_POST['translate']) {
				$newdir = '!'.retranslate($newdir);
			}
			
			if ($id) {
				$dir = mysql_fetch_assoc(mysql_query("SELECT (`path`) FROM `".SQLprefixTable."files` WHERE `id`='".$id."' AND `size`='0'"));
			} else {
				$dir['path'] = $set['path'].'/';
			}
			
			chmod('../'.$dir['path'], 0777);

			$newdir = trim($dir['path']) . trim($newdir).'/';
			
			if (mkdir('../'.$newdir, 0777) && mysql_query("INSERT INTO `".SQLprefixTable."files` SET `path`='".mysql_real_escape_string($newdir)."', `name`='".mysql_real_escape_string($name)."', `infolder`='".mysql_real_escape_string($dir['path'])."', `size`='0'")) {
				header('Refresh: 1, url='.MANAGER);
				echo '<div class="menu">Каталог успешно создан!</div>';
			} else {
				echo '<div class="error">Ошибка при создании нового каталога!</div>';
			}
			
		}
	
	}
	
	echo '<form class="menu" action="" method="post">
	<b>Название категории:</b><br/><input type="text" name="name" size="30"/><br/>
	<input type="checkbox" name="translate" value="1" checked="checked"/> Транслит<br/>
	<small>Если категория содержит русские символы, транслит должен быть включен - обязательно!</small><br/>
	<input type="submit" value="Создать каталог"/>
	</form>
	
	<div class="block"><a href="'.MANAGER.'/'.$id.'/">Файловый менеджер</a></div>';
	
	require_footer();
	
	break;
	
	case 'delete_dir':
	
	if (!mysql_num_rows(mysql_query("SELECT (`id`) FROM `".SQLprefixTable."files` WHERE `id`='".$id."' AND `size`='0'"))) {
		header('Refresh: 1, url='.MANAGER);
		error('Каталог не найден!');
	}
	
	require_header('Удаление каталога');
	
	if (isset($_POST['delete'])) {

		$row = mysql_fetch_assoc(mysql_query("SELECT * FROM `".SQLprefixTable."files` WHERE `id`='".$id."' ORDER BY `name`"));

		if (!is_dir('../'.$row['path'])) {
			echo '<div class="error">Категории не существует!</div>';
		} else {

			$explode = explode('/', $row['path']);
		
			$chmod = '';
			foreach ($explode as $chm) {
				$chmod .= $chm.'/';
				chmod('../'.$chmod, 0777);
			}

			foreach(glob('../'.$row['path'].'*') as $value) {
				if (is_dir('../'.$value)) {
					die('<div class="error">Разрешено удалять папки с 1 уровнем вложенности!</div>');
				} else {
					if (!unlink('../'.$value)) {
						die('<div class="error">Ошибка при удалении файла '.htmlspecialchars($value).'!</div>');
					}
				}
			}
			
			if (!mysql_query("DELETE FROM `".SQLprefixTable."files` WHERE `infolder`='".mysql_real_escape_string($row['path'])."'")) {
				echo '<div class="error">Ошибка при удалении файлов из базы данных!</div>';
			}
			
			if (!rmdir('../'.$row['path'])) {
				die('<div class="error">Ошибка при удалении каталога!</div>');
			}
		
			if (!mysql_query("DELETE FROM `".SQLprefixTable."files` WHERE `id`='".$id."'")) {
				echo '<div class="error">Ошибка при удалении каталога из базы данных!</div>';
			}
			
			unset($chmod);

			header('Refresh: 1, url='.MANAGER);
		
			echo '<div class="menu">Каталог успешно удален!</div>';
		}
	
	}
	
	echo '<form class="menu" action="" method="post">
	<b>Будут удалены все файлы и папки из данного каталога, вы действительно хотите удалить все данные?</b><br/>
	<input type="submit" name="delete" value="Да"/> <a href="'.MANAGER.'"><input type="button" value="Нет"/></a>
	</form>
	
	<div class="block"><a href="'.MANAGER.'">Файловый менеджер</a></div>';
	
	require_footer();
	
	break;
	
	case 'edit_dir':
	
	$sql = mysql_query("SELECT `name`, `path`, `infolder` FROM `".SQLprefixTable."files` WHERE `id`='".$id."' AND `size`='0'");
	
	if (mysql_num_rows($sql)) {
		$row = mysql_fetch_assoc($sql);
	} else {
		header('Refresh: 1, url='.MANAGER);
		error('Каталог не найден!');
	}
	
	if (!is_dir('../'.$row['path'])) {
		header('Refresh: 1, url='.MANAGER);
		error('Каталог не найден!');
	}
	
	require_header('Переименовать папку');
	
	if (isset($_POST['name'])) {
	
		$error = '';
	
		if (empty($_POST['name'])) {
			$error .= 'Введите название каталога!';
		}
		
		if ($error) {
			echo '<div class="error">'.$error.'</div>';
		} else {
			if (mysql_query("UPDATE `".SQLprefixTable."files` SET `name`='*".delete(mysql_real_escape_string(trim($_POST['name'])))."' WHERE `id`='".$id."'")) {
				header('Refresh: 1, url='.MANAGER);
				echo '<div class="menu">Каталог успешно изменен!</div>';
			} else {
				echo '<div class="error">Ошибка при изменении каталога!</div>';
			}
		}

	}
	
	echo '<form class="menu" action="" method="post">
	<b>Название категории:</b><br/><input type="text" name="name" value="'.htmlspecialchars(str_replace('*', '', $row['name'])).'" size="30"/><br/>
	<input type="submit" value="Изменить каталог"/>
	</form>
	
	<div class="block"><a href="'.MANAGER.'">Файловый менеджер</a></div>';
	
	require_footer();
	
	break;
	
	case 'update':
	
	$sql = mysql_query("SELECT (`path`) FROM `".SQLprefixTable."files` WHERE `id`='".$id."' AND `size`='0'");
	
	if (mysql_num_rows($sql)) {
		$row = mysql_fetch_assoc($sql);
	} else {
		header('Refresh: 1, url='.MANAGER);
		error('Каталог не найден!');
	}
	
	if (!is_dir('../'.$row['path'])) {
		header('Refresh: 1, url='.MANAGER);
		error('Каталог не найден!');
	}
	
	unset($sql);
	
	require_header('Обновить папку');
	
	set_time_limit(0);
	ignore_user_abort(1);

	define('TIMESTART', microtime(true));
	
	$file_array = @scan('../'.substr($row['path'], 0, strlen($row['path']) - 1));
	
	$addfolders = $addfiles = 0;
	
	$sql = mysql_query("SELECT `id`, `path` FROM `".SQLprefixTable."files`");

	while ($row = mysql_fetch_assoc($sql)) {
		$array_path[$row['id']] = $row['path'];
	}
	
	foreach($file_array as $value) {
		
		if (@in_array($value, $array_path) === false) {
		
			$value = '../'.$value;
		
			$uptime = filectime($value);
			$name = basename($value);
			$pathinfo = pathinfo($value);
			$ext = $pathinfo['extension'];
			$name = str_replace('.'.$ext, '', $name);
			$infolder = str_replace('../', '', dirname($value)).'/';
			$size = filesize($value);
			
			if (strpos($name , '!') !== false) {
				$name = translate1($name);
			}
			else {
				$name = translate2($name);
			}
			
			$value = str_replace('../', '', $value);

			if (is_dir($value)) {
				mysql_query("INSERT INTO `".SQLprefixTable."files` SET `path`='".mysql_real_escape_string($value)."', `name`='*".mysql_real_escape_string($name)."', `infolder`='".mysql_real_escape_string($infolder)."', `size`='0'");
				$addfolders ++;
			} else {
				mysql_query("INSERT INTO `".SQLprefixTable."files` SET `path`='".mysql_real_escape_string($value)."', `name`='".mysql_real_escape_string($name)."', `infolder`='".mysql_real_escape_string($infolder)."', `size`='".$size."', `dateupload`='".$uptime."'");
				$addfiles ++;
			}
			
		}
	
	}
	
	echo '<div class="menu">
	Добавлено папок: '.$addfolders.'<br/>
	Добавлено файлов: '.$addfiles.'<br/>
	Страница создана за: '.round(microtime(true) - TIMESTART, 4).' сек
	</div>
	
	<div class="block"><a href="'.MANAGER.'">Файловый менеджер</a></div>';
	
	require_footer();
	
	break;
	
	case 'delete':

	$sql = mysql_query("SELECT (`path`) FROM `".SQLprefixTable."files` WHERE `id`='".$id."'");
	
	if (mysql_num_rows($sql)) {
		$row = mysql_fetch_assoc($sql);
	} else {
		header('Refresh: 1, url='.MANAGER);
		error('Файл не найден!');
	}
	
	if (!is_file('../'.$row['path'])) {
		header('Refresh: 1, url='.MANAGER);
		error('Файл не найден!');
	}
	
	require_header('Удалить файл');
	
	if (isset($_POST['delete'])) {
	
		$explode = explode('/', $row['path']);
		
		$chmod = '';
		foreach($explode as $chm) {
			$chmod .= $chm;
			if (is_dir('../'.$chmod)) {
				$chmod = $chmod.'/';
			}
			chmod('../'.$chmod, 0777);
		}
		
		if (mysql_query("DELETE FROM `".SQLprefixTable."files` WHERE `id`='".$id."'") && unlink('../'.$row['path'])) {
			header('Refresh: 1, url='.MANAGER);
			echo '<div class="menu">Файл успешно удален!</div>';
		} else {
			echo '<div class="error">Ошибка при удалении файла!</div>';
		}
	
	}
	
	echo '<form class="menu" action="" method="post">
	<b>Вы действительно хотите удалить данный файл?</b><br/>
	<input type="submit" name="delete" value="Да"/> <a href="'.MANAGER.'"><input type="button" value="Нет"/></a>
	</form>
	
	<div class="block"><a href="'.MANAGER.'">Файловый менеджер</a></div>';
	
	require_footer();
	
	break;
	
	case 'screen':
	
	$sql = mysql_query("SELECT (`path`) FROM `".SQLprefixTable."files` WHERE `id`='".$id."'");
	
	if (mysql_num_rows($sql)) {
		$row = mysql_fetch_assoc($sql);
	} else {
		header('Refresh: 1, url='.MANAGER);
		error('Файл не найден!');
	}
	
	if (!is_file('../'.$row['path'])) {
		header('Refresh: 1, url='.MANAGER);
		error('Файл не найден!');
	}
	
	require_header('Добавить скриншот');
	
	if ($_FILES) {
		
		$name = $_FILES['screen']['name'];
		
		if (empty($name)) {
			header('Location: '.MANAGER.'/screen/'.$id.'/');
		} else {
			
			$ex = pathinfo($name);
			$ext = strtolower($ex['extension']);
			$file = pathinfo($row['path']);
			
			$to = $set['screen'].'/'.$file['basename'].'.gif';
			
			if ($ext != 'gif' && $ext != 'jpg' && $ext != 'jpe' && $ext != 'jpeg' && $ext != 'png') {
				echo '<div class="error">Поддерживаются только форматы: gif, jpg, jpeg, png!</div>';
			} else {
			
				if (file_exists('../'.$to)) {
					echo '<div class="error">Файл уже существует!</div>';
				} else {
					chmod('../'.$set['screen'], 0777);
				
					if (copy($_FILES['screen']['tmp_name'], '../'.$to)) {
					
						chmod('../'.$to, 0666);
						
						if ($ext == 'jpg' || $ext == 'jpe' || $ext == 'jpeg') {
							$img = ImageCreateFromJpeg('../'.$to);
							ImageGif($img, '../'.$to);
							ImageDestroy($img);
						}
						elseif ($ext == 'png') {
							$img = ImageCreateFromPng('../'.$to);
							ImageGif($img, '../'.$to);
							ImageDestroy($img);
						}
						
						header('Refresh: 1, url='.MANAGER);
						echo '<div class="menu">Скриншот удачно загружен!</div>';
					
					} else {
						echo '<div class="error">Ошибка при закачке скриншота!</div>';
					}
				
				}
			
			}
			
			
		}
		
	}
	
	echo '<form class="menu" action="" method="post" enctype="multipart/form-data">
	<b>Выберите файл:</b><br/><input type="file" name="screen"/><br/>
	<input type="submit" value="Загрузить"/>
	</form>
	
	<div class="block"><a href="'.MANAGER.'">Файловый менеджер</a></div>';
	
	require_footer();
	
	break;
	
	case 'about':
	
	$sql = mysql_query("SELECT (`path`) FROM `".SQLprefixTable."files` WHERE `id`='".$id."'");
	
	if (mysql_num_rows($sql)) {
		$row = mysql_fetch_assoc($sql);
	} else {
		header('Refresh: 1, url='.MANAGER);
		error('Файл не найден!');
	}
	
	if (!is_file('../'.$row['path'])) {
		header('Refresh: 1, url='.MANAGER);
		error('Файл не найден!');
	}
	
	require_header('Добавить описание');
	
	$basename = pathinfo($row['path'], PATHINFO_BASENAME);
	
	$path = '../'.$set['about'].'/'.$basename.'.txt';

	if (isset($_POST['text'])) {
	
		if (file_put_contents($path, $_POST['text'])) {
			header('Refresh: 1');
			echo '<div class="menu">Описание успешно сохранено!</div>';
		} else {
			echo '<div class="error">Ошибка при сохранении описания!</div>';
		}

	}

	$opis = is_file($path) ? file_get_contents($path) : '';

	echo '<form class="menu" action="" method="post">
	<b>Описание:</b><br/><textarea name="text" rows="5" cols="60">'.htmlspecialchars($opis).'</textarea><br/>
	<input type="submit" value="Сохранить"/>
	</form>
	
	<div class="block"><a href="'.MANAGER.'">Файловый менеджер</a></div>';
	
	require_footer();
	
	break;
	
}
?>