- <?php
-
- $access = FALSE;
- $do = $do == 'edit' ? 'edit' : 'add';
- $max_size = include H . 'engine/includes/max_file_size.php';
- Core::get('text.class', 'classes');
-
- if ($id === FALSE)
- {
-
- $id = 0;
-
- }
-
- if ($admin)
- {
-
- /* Открыть доступ для модераторов и администраторов */
- $access = TRUE;
-
- }
-
- if ($id !== 0 && $do == 'add' && $user_id)
- {
-
- $cat = $sql->query("SELECT `mod`, `count_arc` FROM `mod_lib` WHERE `id` = " . $id . " AND `type` = 'cat'")->fetch();
-
- if ($cat !== FALSE)
- {
-
- if ($cat['mod'] == 1)
- {
-
- /* Открыть доступ для пользователей (для добавления статьи) */
- $access = TRUE;
-
- }
-
- }
- else
- {
-
- $error = 'Категория не найдена<br /><a href="index.php">В библиотеку</a>';
-
- }
-
- }
-
- if ($access === TRUE && $user_id && !isset($error))
- {
-
- $title = isset($_POST['title']) ? $_POST['title'] : '';
- $announce = isset($_POST['announce']) ? $_POST['announce'] : '';
- $text = isset($_POST['text']) ? $_POST['text'] : '';
- $tags = isset($_POST['tags']) ? $_POST['tags'] : '';
- $delfile = searchWord(array_keys($_POST));
- $form = '<form action="?act=articles&mod=form&do=' . ($do == 'add' ? 'add' : 'edit') . '&id=' . $id . '" method="post">' .
- '<input type="hidden" name="title" value="' . htmlentities($title, ENT_QUOTES, 'UTF-8') . '" />' .
- '<input type="hidden" name="announce" value="' . htmlentities($announce, ENT_QUOTES, 'UTF-8') . '" />' .
- '<input type="hidden" name="text" value="' . htmlentities($text, ENT_QUOTES, 'UTF-8') . '" />' .
- '<input type="hidden" name="tags" value="' . htmlentities($tags, ENT_QUOTES, 'UTF-8') . '" />' .
- '<input type="submit" name="continue" value="Продолжить" /></form>';
- $error = array();
-
- if ($do == 'edit')
- {
-
- /* Получить данные статьи для редактировоания */
- $arc = $sql->query("SELECT `name` FROM `mod_lib` WHERE `id` = '" . $id . "' AND `type` = 'arc'")->result();
- if ($arc === FALSE)
- {
-
- $error[] = 'Статья не найдена<br />' . $form;
-
- }
- else
- {
-
- $title_old = my_esc($arc['name']);
-
- }
-
- }
-
- if (empty($error))
- {
-
- if (!empty($_POST))
- {
-
- /* Удаляем файл */
- if ($delfile)
- {
-
- $delfile = explode('_', $delfile);
- $ext = array_pop($delfile);
- $preview = FILESDIR . 'attach' . DIRECTORY_SEPARATOR . implode('_', $delfile) . '_preview.png';
- $delfile = implode('_', $delfile) . '.' . $ext;
- $filename = FILESDIR . 'attach' . DIRECTORY_SEPARATOR . $delfile;
-
- if (!empty($_SESSION['files'][$delfile]))
- {
-
- unset($_SESSION['files'][$delfile]);
- $_SESSION['libFiles'] -= 1;
-
- }
- elseif($sql->query("SELECT COUNT(*) FROM `mod_lib_files` WHERE `aid` = '" . $id . "' AND `name` = '" . my_esc($delfile) . "'")->result() > 0)
- {
-
- $sql->query("DELETE FROM `mod_lib_files` WHERE `aid` = '" . $id . "' AND `name` = '" . my_esc($delfile) . "'");
-
- }
-
- if (file_exists($preview))
- {
-
- unlink($preview);
-
- }
-
- if (file_exists($filename))
- {
-
- unlink($filename);
- echo '<div class="err">Файл удален.<br />' . $form . '</div>';
-
- }
- else
- {
-
- $error[] = 'Файл не существует';
- $error[] = $form;
-
- }
-
- }
- /* Добавляем файл */
- elseif(isset($_POST['addfile']))
- {
-
- /* Проверка на максимальное кол-во файлов */
- if (!isset($_SESSION['libFiles']))
- {
-
- $_SESSION['libFiles'] = 0;
-
- }
- else
- {
-
- if ($_SESSION['libFiles'] == $libSet['files']['max_number'])
- {
-
- $error[] = 'Превышено максимально допустимое количество файлов для статьи.';
-
- }
-
- }
-
- if (empty($error))
- {
-
- /* Проверка размера файла */
- if ($_FILES['file']['size'] > $max_size)
- {
-
- $error[] = 'Размер файла не должен превышать  ' . text::size_data($max_size);
-
- }
-
- $fname = $_FILES['file']['name'];
- $ext = pathinfo($fname, PATHINFO_EXTENSION);
-
-
- if (!in_array($ext, $libSet['files']['extensions']))
- {
-
- $error[] = 'К отправке разрешены файлы имеющие одно из следущих расширений  ' . implode(', ', $libSet['files']['extensions']);
-
- }
-
- /* Проверка имени файла */
- if (mb_strlen($fname) > 30)
- {
-
- $error[] = 'Длина имени файла не должна превышать 30 символов';
-
- }
- /*
- if (preg_match("/[^\da-z_\-.]+/", $fname))
- {
-
- $error[] = 'В имени файла присутствуют недопустимые символы';
-
- }
- */
- $fname = FILESDIR . 'attach' . DIRECTORY_SEPARATOR . $fname_ext[0] . '.' . $ext;
-
- /* Проверка файла на существование */
- if (file_exists($fname))
- {
-
- $fname_ext[0] .= '_' . time();
- $fname = FILESDIR . 'attach' . DIRECTORY_SEPARATOR . $fname_ext[0] . '.' . $ext;
-
- }
-
- }
-
- if (empty($error))
- {
-
- /* Загружаем файл */
- if (copy($_FILES['file']['tmp_name'], $fname) === TRUE)
- {
-
- /* Создаем превью для изображения */
- if (isImage($_FILES['file']['type']) && extension_loaded('gd'))
- {
-
- $imageSize = getimagesize($fname);
- $types = array(1 => 'gif', 2=> 'jpg', 3 => 'png');
- $imageType = array_key_exists($imageSize[2], $types) ? $types[$imageSize[2]] : FALSE;
- if ($imageType !== FALSE)
- {
-
- $width = $imageSize[0];
- $height = $imageSize[1];
- if ($width > 220 || $height > 176)
- {
-
- switch ($imageType)
- {
-
- case 'gif':
- $image = imagecreatefromgif($fname);
- break;
- case 'jpg':
- $image = imagecreatefromjpeg($fname);
- break;
- case 'png':
- $image = imagecreatefrompng($fname);
- break;
- default:
-
- }
-
- $max = $width > $height ? 'w' : 'h';
- $new_width = 176;
- $new_height = 220;
-
- if ($max == 'w' && $width > $new_width)
- {
-
- $new_height = intval(($new_width * $height) / $width);
-
- }
-
- if ($max == 'h' && $height > $new_height)
- {
-
- $new_width = intval(($new_height * $width) / $height);
-
- }
-
- $preview = imagecreate($new_width, $new_height);
- imagecopyresized($preview, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
- imagepng($preview, FILESDIR . 'attach' . DIRECTORY_SEPARATOR . $fname_ext[0] . '_preview.png');
-
- }
-
- }
-
- }
-
- $_SESSION['libFiles'] += 1;
- $_SESSION['files'][$fname_ext[0] . '.' . $ext] = $_FILES['file']['type'];
- echo '<div class="msg">Файл загружен ' . $form . '</div>';
-
- }
- else
- {
-
- $error[] = 'При загрузке файла произошла ошибка';
- $error[] = $form;
-
- }
-
- }
- else
- {
-
- $error[] = $form;
-
- }
-
- }
- /* Сохраняем статью */
- elseif(isset($_POST['submit']))
- {
-
- /* Проверка заголовка */
- if (!empty($title))
- {
-
- $title = my_esc($title);
-
- if (mb_strlen($title) > 255)
- {
-
- $error[] = 'Превышена допустимая длина заголовка';
-
- }
-
- $total_title = intval($sql->query("SELECT COUNT(*) FROM `mod_lib` WHERE `refid` = '" . $id . "' AND `name` = '" . $title . "' AND `type` = 'arc'")->result());
-
- if (($total_title > 0 && $do == 'add') || ($do == 'edit' && $title != $title_old && $total_title))
- {
-
- $error[] = 'Статья с таким названием уже есть';
-
- }
-
- }
- else
- {
-
- $error[] = 'Вы не ввели название';
- }
-
- /* Проверка анонса */
- if (!empty($announce))
- {
-
- $announce = my_esc($announce);
- if (mb_strlen($announce) > 255)
- {
-
- $error[] = 'Недопустимая длина анонса';
-
- }
-
- }
- else
- {
-
- $error[] = 'Вы не ввели анонс';
-
- }
-
- /* Проверка текста статьи */
- if (!empty($text))
- {
-
- $text = my_esc($text);
-
- if (mb_strlen($text) > 16777215)
- {
-
- $error[] = 'Превышена допустимая длина текста';
-
- }
-
- }
- else
- {
-
- $error[] = 'Вы не ввели текст';
-
- }
-
- /* Проверка меток */
- if (!empty($tags))
- {
-
- $tags = explode(',', $tags);
- $tags = array_unique($tags);
- $tags = array_map('trim', $tags);
- $tags = my_esc(implode(',', $tags));
-
- if (mb_strlen($tags) > 255)
- {
-
- $error = 'Превышена допустимая длина меток';
-
- }
-
- }
-
- /* Сохраняем статью */
- if (empty($error))
- {
-
- if ($do == 'add')
- {
- /* Добавление */
- $sql->query(
- "INSERT INTO `mod_lib` SET " .
- "`refid` = '" . $id . "'," .
- "`name` = '" . $title . "'," .
- "`text` = '" . $text . "'," .
- "`announce` = '" . $announce . "'," .
- "`tags` = '" . $tags . "', " .
- "`type` = 'arc'," .
- "`author_id` = '" . $user_id . "'," .
- "`author_name` = '" . $user['nick'] . "',".
- "`mod` = '" . ($moder > 0 ? '0' : '1') . "'," .
- "`time` = '" . time() . "';"
- );
-
- $aid = mysqli_insert_id($sql->db);
-
- if (file_exists(tmpDir . 'index_page.swc'))
- unlink(tmpDir . 'index_page.swc');
- Core::get('cache.class');
- Cache::multi_delete('lib[cat='.$id, tmpDir);
-
- /* Обновляем счетчик записей */
- if (isset($cat))
- {
- $sql->query("UPDATE `mod_lib` SET `count_arc` = '" . ($cat['count_arc'] + 1) . "' WHERE `id` = '" . $id . "'");
- }
-
- }
- else
- {
- /* Редактирование */
- $sql->query(
- "UPDATE `mod_lib` SET " .
- "`name` = '" . $title . "', " .
- "`text` = '" . $text . "', " .
- "`announce` = '" . $announce . "', " .
- "`tags` = '" . $tags . "', " .
- "`edit_name` = '" . $user['nick'] . "', " .
- "`edit_time` = '" . time() . "', " .
- "`edit_id` = '" . $user_id . "' " .
- "WHERE `id` = '" . $id . "'"
- );
-
- }
-
- /* Добавляем файлы в базу */
- if (!empty($_SESSION['files']))
- {
-
- $sql2 = "INSERT INTO `mod_lib_files` (`aid`, `name`) VALUES ";
- $total = count($_SESSION['files']);
- $i = 0;
-
- foreach ($_SESSION['files'] as $name => $type)
- {
-
- if (file_exists(FILESDIR . 'attach' . DIRECTORY_SEPARATOR . $name))
- {
-
- $sql2 .= "('" . ($do == 'add' ? $aid : $id) . "', '" . my_esc($name) . "')" . ( ($i == ($total - 1)) ? ";" : "," );
- $i++;
-
- }
-
- }
-
- $sql->query($sql2);
-
- }
-
- unset($_SESSION['libFiles'], $_SESSION['files']);
-
- /* Показываем сообщение о успешном сохранении */
- if ($do == 'add')
- {
-
- if ($moder)
- {
-
- $message = 'Статья добавлена. <a href="?act=articles&mod=view&id=' . $aid . '">Продолжить</a>';
-
- }
- else
- {
-
- $message = 'Статья добавлена.  Она будет доступна после проверки модератором. <a href="?act=category&mod=view&id=' . $id . '">Продолжить</a>';
-
- }
-
- }
- else
- {
-
- $message = 'Статья сохранена  <a href="?act=articles&mod=view&id=' . $id . '">Продолжить</a>';
-
- }
-
- echo '<div class="fmenu">' . 'Библиотека' . ' | ' . ($do == 'add' ? 'Добавить статью' : 'Редактировать статью') . '</div>' .
- '<div class="msg">' . $message . '</div>' .
- '<div class="post"><a href="?act=' .
- ($do == 'add' ? 'category' : 'articles') .
- '&mod=view&id=' . $id . '">Назад</a></div>';
-
- }
-
- }
- else
- {
-
- $error[] = 'Ошибка входящих данных<br /><a href="?act=articles&mod=form&id=' . $id .'">Продолжить</a>';
-
- }
-
- }
- else
- {
-
- $error[] = 'Ошибка входящих данных<br /><a href="?act=articles&mod=form&id=' . $id .'">Продолжить</a>';
-
- }
-
- }
-
- }
- else
- {
-
- $error = 'Доступ запрещен';
-
- }