- <?php
-
- if ($id)
- {
-
- $cat = $sql->query("SELECT `name`, `mod` FROM `mod_lib` WHERE `type` = 'cat' AND `id` = " . $id )->fetch();
- if ($cat === FALSE)
- {
-
- unset($cat);
-
- }
-
- }
- else
- {
-
- $id = 0;
-
- }
-
- $access = FALSE;
- if ($user_id && isset($cat) && $cat['mod'] == 1)
- {
-
- $access = TRUE;
-
- }
- elseif ($admin)
- {
-
- $access = TRUE;
-
- }
-
- if ($access === TRUE)
- {
- Core::get('text.class', 'classes');
- $max_size = include H . 'engine/includes/max_file_size.php';
- if (!empty($_POST))
- {
-
- if (!empty($_FILES))
- {
-
- $error = array();
-
- /* Проверка размера файла */
- if ($_FILES['file']['size'] > $max_size)
- {
-
- $error[] = 'Размер файла не должен превышать  ' . text::size_data($max_size);
-
- }
-
- /* Проверка имени файла */
- $fname = $_FILES['file']['name'];
-
- if (preg_match("/[^\A-z0-9_\-.]+/", $fname))
- {
-
- $error[] = 'В имени файла присутствуют недопустимые символы';
-
- }
-
- $ext = pathinfo($fname, PATHINFO_EXTENSION);
-
- if (($ext == 'txt' || $ext == 'zip') && empty($error))
- {
-
- $path = FILESDIR . 'upload' . DIRECTORY_SEPARATOR . '.' . $ext;
-
- if (file_exists($path))
- {
-
- $path = FILESDIR . 'upload' . DIRECTORY_SEPARATOR . 'copy_' . '_' . time() . '.' . $ext;
-
- }
-
- if (copy($_FILES['file']['tmp_name'], $path) === TRUE)
- {
-
- switch ($ext)
- {
-
- case 'txt':
- $file = fopen($path,'r');
- $text = fread($file, filesize($path));
- if (isset($_POST['winencode']))
- {
-
- $text = @iconv('windows-1251', 'UTF-8', $text);
-
- }
- fclose($file);
- unlink($path);
- echo '<div class="fmenu">' . 'Библиотека' . ' | Загрузка статей</div>' .
- '<div class="menu">Файл загружен' .
- '<br /><form action="?act=articles&mod=form&id=' . $id . '&do=add" method="post">' .
- '<input type="hidden" name="text" value="' . htmlspecialchars(iconv('UTF-8', 'UTF-8//IGNORE', $text)) . '" />' . // вырезаем беспонтовые символы
- '<input type="submit" name="addarc" value="Продолжить" /></form></div>' .
- '<div class="fmenu"><a href="?act=category&mod=view&id=' . $id . '">Назад</a></div>';
- break;
- case 'zip': // Не ставить break;
- default:
- Core::get('zip', 'classes');
- $zip = new PclZip($path);
- if (($contents = $zip->listcontent()) == FALSE)
- {
-
- $error = 'Ошибка принятых данных';
-
- }
- else
- {
-
- if (count($contents) > $libSet['zip_deal'])
- {
-
- $error = 'Кол-во файлов в архиве не должно превышать  ' . $libSet['zip_deal'];
-
- }
- else
- {
-
- echo '<div class="fmenu">' . 'Библиотека' . ' | Загрузка статей</div>' .
- '<div class="msg">Обязательные поля помечены звездочкой. <span class="red">*</span></div>' .
- '<form action="?act=articles&mod=upload&id=' . $id . '" method="post" name="form">';
-
- $i = 0;
- foreach ($contents as $files)
- {
-
- echo '<div class="' . ($i % 2 ? 'p_m' : 'p_t') . '"><b>Имя файла</b>: ' . htmlentities($files['filename'], ENT_QUOTES, 'UTF-8') . '<br />';
-
- if ( $files['folder'] == FALSE && mb_substr_count($files['filename'], '/') == 0 )
- {
-
- $file = $zip->extract(PCLZIP_OPT_BY_INDEX, $files['index'],PCLZIP_OPT_EXTRACT_AS_STRING);
- $file = $file[0];
- if ($file['size'] > 16777215)
- {
-
- echo 'Ошибка: Превышена допустимая длина заголовка<br />';
-
- }
- elseif(mb_substr_count($file['filename'], '.txt') == 1)
- {
-
- if (isset($_POST['winencode']))
- {
-
- $file['content'] = @iconv('windows-1251', 'UTF-8', $file['content']);
-
- }
- echo '<span class="red">*</span> Заголовок'.
- ':<br /><input type="text" name="arc[' . $i . '][title]" /><br />' .
- '<span class="red">*</span> Анонс' .
- ':<br /><input type="text" name="arc[' . $i . '][announce]" /><br />' .
- '<span class="red">*</span> Текст' .
- ':<br /><textarea rows="10" name="arc[' . $i . '][text]">' .
- htmlentities($file['content'], ENT_QUOTES, 'UTF-8') .
- '</textarea><br />Метки:<br />' .
- '<input type="text" name="arc[' . $i . '][tags]" />' .
- '<input type="hidden" name="arc[' . $i . '][filename]" value="' .
- htmlentities($files['filename'], ENT_QUOTES, 'UTF-8') . '" />';
-
- }
- else
- {
-
- echo 'Ошибка: Недопустимое расширение файла. Файл дожен иметь расширение txt<br />';
-
- }
-
- }
-
- echo '</div>';
- $i++;
-
- }
-
- echo '<div class="msg"><input type="submit" name="submit" value="Добавить" /></div></form>' .
- '<div class="fmenu"><a href="?act=category&mod=view&id=' . $id . '">Назад</a></div>';
-
- }
-
- }
- unset($zip);
- unlink($path);
- break;
-
- }
-
- }
- else
- {
-
- $error = 'При загрузке файла произошла ошибка';
-
- }
-
- }
- else
- {
-
- $error[] = 'К отправке разрешены файлы имеющие одно из следущих расширений.  zip, txt.';
-
- }
-
-
-
-
- }
- elseif(isset($_POST['submit']))
- {
-
- if (!empty($_POST['arc']))
- {
-
- $sql2 = "INSERT INTO `mod_lib` (`refid`, `name`, `announce`, `text`, `tags`, `type`, `author_id`, `author_name`, `mod`, `time`) VALUES ";
- $i = 0;
- $total = count($_POST['arc']);
- $mod = $moder > 0 ? 0 : 1;
- $err = array();
-
- foreach($_POST['arc'] as $arc)
- {
-
- $filename = !empty($arc['filename']) ? htmlentities($arc['filename'], ENT_QUOTES, 'UTF-8') : $i;
-
- if (empty($arc['title']))
- {
-
- $err[$filename][] = 'Вы не ввели название';
-
- }
- else
- {
-
- $title = my_esc($arc['title']);
-
- if (mb_strlen($title) > 255)
- {
-
- $err[$filename][] = 'Превышена допустимая длина заголовка.';
-
- }
-
- $total_title = intval($sql->query("SELECT COUNT(*) FROM `mod_lib` WHERE `refid` = '" . $id . "' AND `name` = '" . $title . "' AND `type` = 'arc'")->result());
-
- if ($total_title > 0)
- {
-
- $err[$filename][] = 'Статья с таким названием уже есть';
-
- }
-
- }
-
- if (!empty($arc['announce']))
- {
-
- $announce = my_esc($arc['announce']);
- if (mb_strlen($announce) > 255)
- {
-
- $err[$filename][] = 'Недопустимая длина анонса';
-
- }
-
- }
- else
- {
-
- $err[$filename][] = 'Вы не ввели анонс';
-
- }
-
- if (!empty($arc['text']))
- {
-
- $text = my_esc($arc['text']);
- if (mb_strlen($text) > 65534)
- {
-
- $err[$filename][] = 'Превышена допустимая длина текста';
-
- }
-
- }
- else
- {
-
- $err[$filename][] = 'Вы не ввели текст';
-
- }
-
- if (!empty($arc['tags']))
- {
-
- $tags = explode(',', $arc['tags']);
- $tags = array_map('trim', $tags);
- $tags = my_esc(implode(',', $tags));
- if (strlen($tags) > 255)
- {
-
- $err[$filename][] = 'Превышена допустимая длина меток';
-
- }
-
- }
- else
- {
-
- $tags = '';
-
- }
-
- if (empty($err))
- {
-
- $sql_do = TRUE;
- $sql2 .= "('" . $id . "', '" . $title . "', '" . $announce .
- "', '" . $text . "', '" . $tags . "', 'arc', '" . $user_id .
- "', '" . $user['nick'] . "', '" . $mod . "', '" . time() .
- "')" . ( ($i == ($total - 1)) ? ";" : "," ) . PHP_EOL;
- unset($_POST['arc'][$i]);
-
- }
-
- $i++;
-
- }
-
- $message = '';
-
- if (isset($sql_do))
- {
-
- $sql->query($sql2);
- $message = 'Статьи добавлены  <a href="?act=category&mod=view&id=' . $id . '">Продолжить</a>';
-
- }
-
- if (!empty($err))
- {
-
- $message .= '<br />' . lng('err_zip_arcs_add') . ':';
-
- foreach ($err as $aid => $mess)
- {
-
- $message .= '<br />' . $aid . ': ' . implode(' ', $mess);
-
- }
-
- $message .= '<br />Попробуйте еще раз.';
-
- }
-
- echo '<div class="fmenu">' . 'Библиотека' . ' | Загрузка статей</div>' .
- '<div class="msg">' . $message . '<br /><a href="?act=articles&mod=upload&id=' . $id . '">Повторить' .
- '</a> | <a href="index.php">В библиотеку</a></div>' .
- '<div class="fmenu"><a href="?act=category&mod=view&id=' . $id . '">Назад</a></div>';
-
- }
- else
- {
-
- $error = 'Ошибка принятых данных';
-
- }
-
- }
- else
- {
-
- $error = 'Вы не выбрали файл';
-
- }
-
- }
- else
- {
-
- echo '<div class="fmenu">' . 'Библиотека' . ' | Загрузка статей </div><div class="msg">' .
- 'Для загрузки разрешены файлы с расширениями zip или txt. <br />Zip файл должен содержать только текстовые файлы с расширением txt в количестве не более  ' . $libSet['zip_deal'] . '.</div><div class="post">' .
- '<form action="?act=articles&mod=upload&id=' . $id . '" method="post" enctype="multipart/form-data">' .
- 'Выберите файл:<br /><input type="file" name="file" /><br />' .
- '<input type="checkbox" checked="checked" name="winencode" value="1" /> Win-1251<br />' .
- '<input type="submit" name="submit" value="Загрузить" /></form></div>' .
- '<div class="fmenu"><a href="?act=category&mod=view&id=' . $id . '">Назад</a></div>';
-
- }
-
- }
- else
- {
-
- $error = 'Доступ запрещен';
-
- }
-
- if (!empty($error))
- {
-
- $error = is_array($error) ? implode('<br />', $error) : $error;
- $error .= '<br /><a href="?act=articles&mod=upload&id=' . $id . '">Продолжить' .
- '</a> | <a href="index.php">В библиотеку</a>';
-
- }