File size: 7.93Kb
<?php
if ($id)
{
$check = $sql->query("SELECT COUNT(*) FROM `mod_lib` WHERE `id` = '" . $id . "' AND `type` = 'arc' AND `mod` = '0'")->result();
if ($check)
{
if (isset($_POST['arc_type']))
{
$type = $_POST['arc_type'] == '0' ? 'txt' : 'html';
$arc = $sql->query(
"SELECT `name`, `text`, `edit_time`, `down_time`" .
" FROM `mod_lib` WHERE `id` = '" . $id . "' AND `type` = 'arc' AND `mod` = '0'"
)->fetch();
$filename = FILESDIR . 'download' . DIRECTORY_SEPARATOR . $type . DIRECTORY_SEPARATOR . $id . '.zip';
if (((($arc['edit_time'] < $arc['down_time']) && $arc['down_time'] !== 0) || $arc['edit_time'] == 0) && file_exists($filename))
{
header('Location: /lib/files/download/' . $type . '/' . $id . '.zip');
}
else
{
switch($type)
{
case 'txt':
$text = $arc['name'] . PHP_EOL . preg_replace('#\[img]([\da-z_\-.]+)\[/img]#is', '', $arc['text']);
break;
case 'html':
$text = htmlspecialchars($arc['text']);
$text = preg_replace_callback('#\[img]([\da-z_\-.]+)\[/img]#is', 'replaceImage', $text);
$text = "<!DOCTYPE html PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN'>" .
"<html><head><meta http-equiv='Content-Type' content='text/html; charset=utf-8'><html><head>" .
'<style>body{max-width: 720px; margin: auto; background: #E1E1E1}' .
'a:link{color:blue; text-decoration:none}' .
'a:visited{color:#000f5f; text-decoration:none; font-weight:bold}' .
'a:hover, a:active{color:blue; text-decoration:underline}' .
'.content{padding: 4px 0px 4px 0px; margin: 5px 0px 5px 0px; border: 1px solid #AAA; background:#F8F8F8;}' .
'.title{text-align: center; font-size: 22pt; font-weight:bold; padding: 0px; margin:0px; border-bottom:1px solid #CCC;}' .
'.text{padding: 5px; margin:0px 2px 0px 2px;}' .
'.foot{text-align: center;padding: 0px; margin:0px; border-top:1px solid #CCC; }' .
'.phpcode {background-color: #E0E6E9; border: 1px dotted #9FAEBB;margin-top: 4px;padding: 0 2px 0 2px;}' .
'.quote {border-left: 4px solid #c0c0c0;color: #878787;font-size: x-small;margin-left: 2px;padding: 2px 0 2px 4px;}' .
'.bblist {color: #4A5663;padding: 0px 0px 0px 10px;}</style>' .
'<title>' . htmlspecialchars($arc['name']) . '</title></head><body><div class="content">' .
'<div class="title">' . htmlentities($arc['name'], ENT_QUOTES, 'UTF-8') . '</div><div class="text">' .
$text . '</div><div class="foot">Статья скачана с сайта ' . $_SERVER['SERVER_NAME'] .
'</div></div></body></html>';
break;
default:
break;
}
if (file_exists(FILESDIR . 'download' . DIRECTORY_SEPARATOR . $type . DIRECTORY_SEPARATOR . $id . '.zip'))
{
unlink(FILESDIR . 'download' . DIRECTORY_SEPARATOR . $type . DIRECTORY_SEPARATOR . $id . '.zip');
}
$filename = FILESDIR . 'download' . DIRECTORY_SEPARATOR . $type . DIRECTORY_SEPARATOR . $id . '.' . $type;
/* Создаем файл с текстом статьи */
if (file_exists($filename))
{
unlink($filename);
}
$file = fopen($filename, 'w');
if (flock($file, LOCK_EX) === FALSE)
{
$error = 'При создании файла произошла ошибка. Попробуйте еще раз.';
}
else
{
if (fwrite($file, $text) === FALSE)
{
$error = 'При создании файла произошла ошибка. Попробуйте еще раз.';
}
flock($file, LOCK_UN);
fclose($file);
}
if (empty($error))
{
/* Создаем архив */
require_once H . 'engine/classes' . DIRECTORY_SEPARATOR . 'zip.php';
$archive = new PclZip(FILESDIR . 'download' . DIRECTORY_SEPARATOR . $type . DIRECTORY_SEPARATOR . $id . '.zip');
$archive->add($filename, PCLZIP_OPT_REMOVE_ALL_PATH);
unlink($filename);
$files = $sql->query("SELECT `name` FROM `mod_lib_files` WHERE `aid` = '" . $id . "'");
$add = array();
$attach = FILESDIR . 'attach' . DIRECTORY_SEPARATOR;
while ($file = $sql->fetch())
{
if (file_exists($attach . $file['name']))
{
$add[] = $attach . $file['name'];
}
$preview = explode('.', $file['name']);
if (isImage($preview[1]))
{
if (file_exists($attach . $preview[0] . '_preview.png'))
{
$add[] = $attach . $preview[0] . '_preview.png';
}
}
}
$archive->add(
$add,
PCLZIP_OPT_REMOVE_PATH, $attach,
PCLZIP_OPT_ADD_PATH, 'files'
);
if (!file_exists(FILESDIR . 'download' . DIRECTORY_SEPARATOR . $type . DIRECTORY_SEPARATOR . $id . '.zip'))
{
$error = 'При создании файла произошла ошибка. Попробуйте еще раз.';
}
else
{
$sql->query("UPDATE `mod_lib` SET `down_time` = '" . time() . "' WHERE `id` = '" . $id . "'");
echo '<div class="fmenu">' . 'Библиотека' . ' | ' . $set['title'] . '</div>' .
'<div class="msg"><a href="/lib/files/download/' . $type . '/' . $id . '.zip">Скачать</a></div>' .
'<div class="post"><a href="?act=articles&mod=view&id=' . $id . '">Назад</a></div>';
}
}
}
}
else
{
echo '<div class="fmenu">' . 'Библиотека' . ' | ' . $set['title'] . '</div>' .
'<div class="menu"><form action="?act=articles&mod=download&id=' . $id . '" method="post">
Выберите тип файла:<br />' .
'<input type="radio" name="arc_type" value="0" checked="checked" /> TXT<br />' .
'<input type="radio" name="arc_type" value="1" /> HTML<br />' .
'<input type="submit" name="submit" value="Скачать" /></form></div>' .
'<div class="fmenu"><a href="?act=articles&mod=view&id=' . $id . '">Назад</a></div>';
}
}
else
{
$error = 'Статья не найдена';
}
}
else
{
$error = 'Ошибка принятых данных';
}
if (!empty($error))
{
$error .= '<br /><a href="?act=articles&mod=download&id=' . $id . '">Продолжить</a>';
}