View file mpanel/load.php

File size: 50.38Kb
<?php
#-----------------------------------------------------#
#          ********* ROTORCMS *********               #
#              Made by  :  VANTUZ                     #
#               E-mail  :  [email protected]         #
#                 Site  :  http://pizdec.ru           #
#             WAP-Site  :  http://visavi.net          #
#                  ICQ  :  36-44-66                   #
#  Вы не имеете право вносить изменения в код скрипта #
#        для его дальнейшего распространения          #
#-----------------------------------------------------#	
require_once ('../includes/start.php');
require_once ('../includes/functions.php');
require_once ('../includes/header.php');
include_once ('../themes/' . $config['themes'] . '/index.php');

if (isset($_GET['act'])) {
  $act = check($_GET['act']);
} else {
  $act = 'index';
} 
if (isset($_GET['id'])) {
  $id = abs(intval($_GET['id']));
} else {
  $id = 0;
} 
if (isset($_GET['cid'])) {
  $cid = abs(intval($_GET['cid']));
} else {
  $cid = 0;
} 
if (isset($_GET['start'])) {
  $start = abs(intval($_GET['start']));
} else {
  $start = 0;
} 

if (is_admin(array(101, 102))) {
  show_title('menu.png', 'Управление загрузками');
  $config['newtitle'] = 'Управление загрузками';

  switch ($act):
  # ###########################################################################################
  # #                                    Главная страница                                    ##
  # ###########################################################################################
  case 'index':

    $querydown = DB :: $dbh -> query("SELECT * FROM `cats` ORDER BY `cats_order` ASC;");
    $downs = $querydown -> fetchAll();

    if (count($downs) > 0) {
      $output = array();

      foreach ($downs as $row) {
        $id = $row['cats_id'];
        $fp = $row['cats_parent'];
        $output[$fp][$id] = $row;
      } 

      foreach($output[0] as $key => $data) {
        echo '<img src="../images/img/dir.gif" alt="image" /> ';
        echo '<b>' . $data['cats_order'] . '. <a href="load.php?act=down&amp;cid=' . $data['cats_id'] . '&amp;' . SID . '">' . $data['cats_name'] . '</a></b> (' . $data['cats_count'] . ')<br />';

        if (is_admin(array(101))) {
          echo '<a href="load.php?act=editcats&amp;cid=' . $data['cats_id'] . '&amp;' . SID . '">Редактировать</a> / ';
          echo '<a href="load.php?act=prodelcats&amp;cid=' . $data['cats_id'] . '&amp;' . SID . '">Удалить</a><br />';
        } 
        // ----------------------------------------------------//
        if (isset($output[$key])) {
          foreach($output[$key] as $datasub) {
            echo '<img src="../images/img/right.gif" alt="image" /> ';
            echo '<b>' . $datasub['cats_order'] . '. <a href="load.php?act=down&amp;cid=' . $datasub['cats_id'] . '&amp;' . SID . '">' . $datasub['cats_name'] . '</a></b>  (' . $datasub['cats_count'] . ') ';
            if (is_admin(array(101))) {
              echo '(<a href="load.php?act=editcats&amp;cid=' . $datasub['cats_id'] . '&amp;' . SID . '">Редактировать</a> / ';
              echo '<a href="load.php?act=prodelcats&amp;cid=' . $datasub['cats_id'] . '&amp;' . SID . '">Удалить</a>)';
            } 
            echo '<br />';
          } 
        } 
      } 
    } else {
      show_error('Разделы загрузок еще не созданы!');
    } 

    if (is_admin(array(101))) {
      echo '<br /><div class="form">';
      echo '<form action="load.php?act=addcats&amp;uid=' . $_SESSION['token'] . '&amp;' . SID . '" method="post">';
      echo '<b>Заголовок:</b><br />';
      echo '<input type="text" name="name" maxlength="50" />';
      echo '<input type="submit" value="Создать раздел" /></form></div><br />';

      echo '<img src="../images/img/reload.gif" alt="image" /> <a href="load.php?act=restatement&amp;uid=' . $_SESSION['token'] . '&amp;' . SID . '">Пересчитать</a><br />';
    } 

    echo '<img src="../images/img/open.gif" alt="image" /> <a href="load.php?act=newfile&amp;' . SID . '">Добавить</a><br />';
    break;
  # ###########################################################################################
  # #                                    Добавление файла                                    ##
  # ###########################################################################################
  case 'newfile':
    $config['newtitle'] = 'Публикация нового файла';

    $querydown = DB :: $dbh -> query("SELECT `cats_id`, `cats_parent`, `cats_name` FROM `cats` ORDER BY `cats_order` ASC;");
    $downs = $querydown -> fetchAll();

    if (count($downs) > 0) {
      echo '<div class="form">';
      echo '<form action="load.php?act=addfile&amp;uid=' . $_SESSION['token'] . '&amp;' . SID . '" method="post">';
      echo 'Категория*:<br />';

      $output = array();

      foreach ($downs as $row) {
        $i = $row['cats_id'];
        $p = $row['cats_parent'];
        $output[$p][$i] = $row;
      } 

      echo '<select name="cid">';
      echo '<option value="0">Выберите категорию</option>';

      foreach ($output[0] as $key => $data) {
        $selected = ($cid == $data['cats_id']) ? ' selected="selected"' : '';
        echo '<option value="' . $data['cats_id'] . '"' . $selected . '>' . $data['cats_name'] . '</option>';

        if (isset($output[$key])) {
          foreach($output[$key] as $datasub) {
            $selected = ($cid == $datasub['cats_id']) ? ' selected="selected"' : '';
            echo '<option value="' . $datasub['cats_id'] . '"' . $selected . '>– ' . $datasub['cats_name'] . '</option>';
          } 
        } 
      } 

      echo '</select><br />';

      echo 'Название*:<br />';
      echo '<input type="text" name="title" size="50" maxlength="50" /><br />';
      echo 'Описание*:<br />';
      echo '<textarea cols="25" rows="10" name="text"></textarea><br />';
      echo 'Автор файла*:<br />';
      echo '<input type="text" name="author" maxlength="50" /><br />';
      echo 'Сайт автора:<br />';
      echo '<input type="text" name="site" maxlength="50" value="http://" /><br />';

      echo '<input value="Продолжить" type="submit" /></form></div><br />';

      echo 'Все поля отмеченные знаком *, обязательны для заполнения<br />';
      echo 'Файл и скриншот вы сможете загрузить после добавления описания<br />';
      echo 'Если вы ошиблись в названии или описании файла, вы всегда можете его отредактировать<br /><br />';
    } else {
      show_error('Категории файлов еще не созданы!');
    } 

    echo '<img src="../images/img/back.gif" alt="image" /> <a href="load.php?' . SID . '">Вернуться</a><br />';
    break;
  # ###########################################################################################
  # #                                  Публикация файла                                      ##
  # ###########################################################################################
  case 'addfile':

    $config['newtitle'] = 'Публикация нового файла';

    $uid = check($_GET['uid']);
    $cid = abs(intval($_POST['cid']));
    $title = check($_POST['title']);
    $text = check($_POST['text']);
    $author = check($_POST['author']);
    $site = check($_POST['site']);
    if ($site == 'http://') {
      $site = '';
    } 

    if ($uid == $_SESSION['token']) {
      if (!empty($cid)) {
        if (utf_strlen($title) >= 5 && utf_strlen($title) < 50) {
          if (utf_strlen($text) >= 10 && utf_strlen($text) < 5000) {
            if (utf_strlen($author) >= 3 && utf_strlen($author) < 50) {
              if (empty($site) || preg_match('#^http://([a-z0-9_\-\.])+(\.([a-z0-9\/])+)+$#', $site)) {
                $downs = DB :: $dbh -> querySingle("SELECT `cats_id` FROM `cats` WHERE `cats_id`=? LIMIT 1;", array($cid));
                if (!empty($downs)) {
                  $downtitle = DB :: $dbh -> querySingle("SELECT `downs_title` FROM `downs` WHERE `downs_title`=? LIMIT 1;", array($title));
                  if (empty($downtitle)) {
                    $text = no_br($text);

                    DB :: $dbh -> query("UPDATE `cats` SET `cats_count`=`cats_count`+1 WHERE `cats_id`=?", array($cid));
                    DB :: $dbh -> query("INSERT INTO `downs` (`downs_cats_id`, `downs_title`, `downs_text`, `downs_link`, `downs_user`, `downs_author`, `downs_site`, `downs_screen`, `downs_time`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?);", array($cid, $title, $text, '', $log, $author, $site, '', SITETIME));

                    $lastid = DB :: $dbh -> lastInsertId();

                    $_SESSION['note'] = 'Данные успешно добавлены!';
                    header ("Location: load.php?act=editdown&id=$lastid&" . SID);
                    exit;
                  } else {
                    show_error('Ошибка! Название ' . $title . ' уже имеется в файлах!');
                  } 
                } else {
                  show_error('Ошибка! Выбранный вами раздел не существует!');
                } 
              } else {
                show_error('Ошибка! Недопустимый адрес сайта, необходим формат http://site.domen!');
              } 
            } else {
              show_error('Ошибка! Слишком длинный или короткий ник (логин) автора (от 3 до 50 символов)!');
            } 
          } else {
            show_error('Ошибка! Слишком длинный или короткий текст описания (от 10 до 5000 символов)!');
          } 
        } else {
          show_error('Ошибка! Слишком длинное или короткое название (от 5 до 50 символов)!');
        } 
      } else {
        show_error('Ошибка! Вы не выбрали категорию для добавления файла!');
      } 
    } else {
      show_error('Ошибка! Неверный идентификатор сессии, повторите действие!');
    } 

    echo '<img src="../images/img/back.gif" alt="image" /> <a href="load.php?act=newfile&amp;cid=' . $cid . '&amp;' . SID . '">Вернуться</a><br />';
    break;
  # ###########################################################################################
  # #                                    Пересчет счетчиков                                  ##
  # ###########################################################################################
  case 'restatement':

    $uid = check($_GET['uid']);

    if (is_admin(array(101))) {
      if ($uid == $_SESSION['token']) {
        DB :: $dbh -> query("UPDATE `cats` SET `cats_count`=(SELECT count(*) FROM `downs` WHERE `cats`.`cats_id`=`downs`.`downs_cats_id`);");
        DB :: $dbh -> query("UPDATE `downs` SET `downs_comments`=(SELECT count(*) FROM `commload` WHERE `downs`.`downs_id`=`commload`.`commload_down`);");

        $_SESSION['note'] = 'Все данные успешно пересчитаны!';
        header ("Location: load.php?" . SID);
        exit;
      } else {
        show_error('Ошибка! Неверный идентификатор сессии, повторите действие!');
      } 
    } else {
      show_error('Ошибка! Пересчитывать сообщения могут только суперадмины!');
    } 

    echo '<img src="../images/img/back.gif" alt="image" /> <a href="load.php?' . SID . '">Вернуться</a><br />';
    break;
  # ###########################################################################################
  # #                                    Добавление разделов                                 ##
  # ###########################################################################################
  case 'addcats':

    $uid = check($_GET['uid']);
    $name = check($_POST['name']);

    if (is_admin(array(101))) {
      if ($uid == $_SESSION['token']) {
        if (utf_strlen($name) >= 4 && utf_strlen($name) < 50) {
          $maxorder = DB :: $dbh -> querySingle("SELECT IFNULL(MAX(`cats_order`),0)+1 FROM `cats`;");
          DB :: $dbh -> query("INSERT INTO `cats` (`cats_order`, `cats_name`) VALUES (?, ?);", array($maxorder, $name));

          $_SESSION['note'] = 'Новый раздел успешно добавлен!';
          header ("Location: load.php?" . SID);
          exit;
        } else {
          show_error('Ошибка! Слишком длинное или короткое название раздела!');
        } 
      } else {
        show_error('Ошибка! Неверный идентификатор сессии, повторите действие!');
      } 
    } else {
      show_error('Ошибка! Добавлять разделы могут только суперадмины!');
    } 

    echo '<img src="../images/img/back.gif" alt="image" /> <a href="load.php?' . SID . '">Вернуться</a><br />';
    break;
  # ###########################################################################################
  # #                          Подготовка к редактированию разделов                          ##
  # ###########################################################################################
  case 'editcats':

    if (is_admin(array(101))) {
      $querydown = DB :: $dbh -> query("SELECT * FROM `cats` WHERE `cats_id`=? LIMIT 1;", array($cid));
      $downs = $querydown -> fetch();

      if (!empty($downs)) {
        echo '<b><big>Редактирование</big></b><br /><br />';

        echo '<div class="form" id="form">';
        echo '<form action="load.php?act=addeditcats&amp;cid=' . $cid . '&amp;uid=' . $_SESSION['token'] . '&amp;' . SID . '" method="post">';
        echo 'Раздел: <br />';
        echo '<input type="text" name="name" maxlength="50" value="' . $downs['cats_name'] . '" /><br />';

        $query = DB :: $dbh -> query("SELECT `cats_id`, `cats_name`, `cats_parent` FROM `cats` WHERE `cats_parent`=0 ORDER BY `cats_order` ASC;");
        $section = $query -> fetchAll();

        echo 'Родительский раздел:<br />';
        echo '<select name="parent">';
        echo '<option value="0">Основной раздел</option>';

        foreach ($section as $data) {
          if ($cid != $data['cats_id']) {
            $selected = ($downs['cats_parent'] == $data['cats_id']) ? ' selected="selected"' : '';
            echo '<option value="' . $data['cats_id'] . '"' . $selected . '>' . $data['cats_name'] . '</option>';
          } 
        } 
        echo '</select><br />';

        echo 'Положение: <br />';
        echo '<input type="text" name="order" maxlength="2" value="' . $downs['cats_order'] . '" /><br /><br />';

        echo '<input type="submit" value="Изменить" /></form></div><br />';
      } else {
        show_error('Ошибка! Данного раздела не существует!');
      } 
    } else {
      show_error('Ошибка! Изменять разделы могут только суперадмины!');
    } 

    echo '<img src="../images/img/back.gif" alt="image" /> <a href="load.php?' . SID . '">Вернуться</a><br />';
    break;
  # ###########################################################################################
  # #                                 Редактирование разделов                                ##
  # ###########################################################################################
  case 'addeditcats':

    $uid = check($_GET['uid']);
    $name = check($_POST['name']);
    $parent = abs(intval($_POST['parent']));
    $order = abs(intval($_POST['order']));

    if (is_admin(array(101))) {
      if ($uid == $_SESSION['token']) {
        if (utf_strlen($name) >= 4 && utf_strlen($name) < 50) {
          if ($cid != $parent) {
            $querydown = DB :: $dbh -> query("SELECT `cats_id` FROM `cats` WHERE `cats_parent`=? LIMIT 1;", array($cid));
            $downs = $querydown -> fetch();

            if (empty($downs) || $parent == 0) {
              DB :: $dbh -> query("UPDATE `cats` SET `cats_order`=?, `cats_parent`=?, `cats_name`=? WHERE `cats_id`=?;", array($order, $parent, $name, $cid));

              $_SESSION['note'] = 'Раздел успешно отредактирован!';
              header ("Location: load.php?" . SID);
              exit;
            } else {
              show_error('Ошибка! Данный раздел имеет подкатегории!');
            } 
          } else {
            show_error('Ошибка! Недопустимый выбор родительского раздела!');
          } 
        } else {
          show_error('Ошибка! Слишком длинное или короткое название раздела!');
        } 
      } else {
        show_error('Ошибка! Неверный идентификатор сессии, повторите действие!');
      } 
    } else {
      show_error('Ошибка! Изменять разделы могут только суперадмины!');
    } 

    echo '<img src="../images/img/reload.gif" alt="image" /> <a href="load.php?act=editcats&amp;cid=' . $cid . '&amp;' . SID . '">Вернуться</a><br />';
    echo '<img src="../images/img/back.gif" alt="image" /> <a href="load.php?' . SID . '">Категории</a><br />';
    break;
  # ###########################################################################################
  # #                                  Подтвержение удаления                                 ##
  # ###########################################################################################
  case 'prodelcats':

    if (is_admin(array(101))) {
      $querydown = DB :: $dbh -> query("SELECT `c1`.*, count(`c2`.`cats_id`) AS `subcnt` FROM `cats` `c1` LEFT JOIN `cats` `c2` ON `c2`.`cats_parent` = `c1`.`cats_id` WHERE `c1`.`cats_id`=? GROUP BY `cats_id` LIMIT 1;", array($cid));
      $downs = $querydown -> fetch();

      if (!empty($downs['cats_id'])) {
        if (empty($downs['subcnt'])) {
          echo 'Вы уверены что хотите удалить раздел <b>' . $downs['cats_name'] . '</b> в загрузках?<br />';
          echo '<img src="../images/img/error.gif" alt="image" /> <b><a href="load.php?act=delcats&amp;cid=' . $cid . '&amp;uid=' . $_SESSION['token'] . '&amp;' . SID . '">Да, уверен!</a></b><br /><br />';
        } else {
          show_error('Ошибка! Данный раздел имеет подкатегории!');
        } 
      } else {
        show_error('Ошибка! Данного раздела не существует!');
      } 
    } else {
      show_error('Ошибка! Удалять разделы могут только суперадмины!');
    } 

    echo '<img src="../images/img/back.gif" alt="image" /> <a href="load.php?' . SID . '">Вернуться</a><br />';
    break;
  # ###########################################################################################
  # #                                    Удаление раздела                                    ##
  # ###########################################################################################
  case 'delcats':

    $uid = check($_GET['uid']);

    if (is_admin(array(101)) && $log == $config['nickname']) {
      if ($uid == $_SESSION['token']) {
        $querydown = DB :: $dbh -> query("SELECT `c1`.*, count(`c2`.`cats_id`) AS `subcnt` FROM `cats` `c1` LEFT JOIN `cats` `c2` ON `c2`.`cats_parent` = `c1`.`cats_id` WHERE `c1`.`cats_id`=? GROUP BY `cats_id` LIMIT 1;", array($cid));
        $downs = $querydown -> fetch();

        if (!empty($downs['cats_id'])) {
          if (empty($downs['subcnt'])) {
            if (is_writeable(BASEDIR . 'load/files')) {
              $querydel = DB :: $dbh -> query("SELECT `downs_link`, `downs_screen` FROM `downs` WHERE `downs_cats_id`=?;", array($cid));
              $arr_script = $querydel -> fetchAll();

              DB :: $dbh -> query("DELETE FROM `commload` WHERE `commload_cats`=?;", array($cid));
              DB :: $dbh -> query("DELETE FROM `downs` WHERE `downs_cats_id`=?;", array($cid));
              DB :: $dbh -> query("DELETE FROM `cats` WHERE `cats_id`=?;", array($cid));

              foreach ($arr_script as $delfile) {
                if (file_exists(BASEDIR . 'load/files/' . $delfile['downs_link'])) {
                  unlink(BASEDIR . 'load/files/' . $delfile['downs_link']);
                } 
                if (!empty($delfile['downs_screen'])) {
                  unlink(BASEDIR . 'load/screen/' . $delfile['downs_screen']);
                } 
              } 

              $_SESSION['note'] = 'Раздел успешно удален!';
              header ("Location: load.php?" . SID);
              exit;
            } else {
              show_error('Ошибка! Не установлены атрибуты доступа на дирекоторию с файлами!');
            } 
          } else {
            show_error('Ошибка! Данный раздел имеет подкатегории!');
          } 
        } else {
          show_error('Ошибка! Данного раздела не существует!');
        } 
      } else {
        show_error('Ошибка! Неверный идентификатор сессии, повторите действие!');
      } 
    } else {
      show_error('Ошибка! Удалять разделы могут только суперадмины!');
    } 

    echo '<img src="../images/img/back.gif" alt="image" /> <a href="load.php?' . SID . '">Вернуться</a><br />';
    break;
  # ###########################################################################################
  # #                                       Просмотр файлов                                  ##
  # ###########################################################################################
  case 'down':

    $cats = DB :: $dbh -> queryFetch("SELECT * FROM `cats` WHERE `cats_id`=? LIMIT 1;", array($cid));

    echo '<a href="#down"><img src="../images/img/downs.gif" alt="Вниз" /></a> <a href="load.php?' . SID . '">Категории</a> / ';

    if (!empty($cats['cats_parent'])) {
      $podcats = DB :: $dbh -> queryFetch("SELECT `cats_id`, `cats_name` FROM `cats` WHERE `cats_id`=? LIMIT 1;", array($cats['cats_parent']));
      echo '<a href="load.php?act=down&amp;cid=' . $podcats['cats_id'] . '&amp;' . SID . '">' . $podcats['cats_name'] . '</a> / ';
    } 

    echo '<a href="load.php?act=newfile&amp;cid=' . $cid . '&amp;' . SID . '">Загрузить файл</a><br /><br />';

    if ($cats > 0) {
      $config['newtitle'] = $cats['cats_name'];

      echo '<img src="../images/img/open_dir.gif" alt="image" /> <b>' . $cats['cats_name'] . '</b> (Файлов: ' . $cats['cats_count'] . ')';
      echo ' (<a href="../load/down.php?cid=' . $cid . '&amp;start=' . $start . '&amp;' . SID . '">Обзор</a>)';
      echo '<hr />';

      $querysub = DB :: $dbh -> query("SELECT * FROM `cats` WHERE `cats_parent`=?;", array($cid));
      $sub = $querysub -> fetchAll();

      if (count($sub) > 0 && $start == 0) {
        foreach($sub as $subdata) {
          echo '<div class="b"><img src="../images/img/dir.gif" alt="image" /> ';
          echo '<b><a href="load.php?act=down&amp;cid=' . $subdata['cats_id'] . '&amp;' . SID . '">' . $subdata['cats_name'] . '</a></b> (' . $subdata['cats_count'] . ')</div>';
        } 
        echo '<hr />';
      } 

      $total = DB :: $dbh -> querySingle("SELECT count(*) FROM `downs` WHERE `downs_cats_id`=?;", array($cid));

      if ($total > 0) {
        if ($start >= $total) {
          $start = 0;
        } 

        $querydown = DB :: $dbh -> query("SELECT * FROM `downs` WHERE `downs_cats_id`=? ORDER BY `downs_time` DESC LIMIT " . $start . ", " . $config['downlist'] . ";", array($cid));

        $is_admin = (is_admin(array(101)) && $log == $config['nickname']);

        if ($is_admin) {
          echo '<form action="load.php?act=deldown&amp;cid=' . $cid . '&amp;start=' . $start . '&amp;uid=' . $_SESSION['token'] . '&amp;' . SID . '" method="post">';
        } while ($data = $querydown -> fetch()) {
          echo '<div class="b">';

          echo '<img src="../images/img/zip.gif" alt="image" /> ';

          echo '<b><a href="../load/down.php?act=view&amp;id=' . $data['downs_id'] . '&amp;' . SID . '">' . $data['downs_title'] . '</a></b> (' . read_file('../load/files/' . $data['downs_link']) . ')<br />';

          if ($is_admin) {
            echo '<input type="checkbox" name="del[]" value="' . $data['downs_id'] . '" /> ';
          } 

          echo '<a href="load.php?act=editdown&amp;cid=' . $cid . '&amp;id=' . $data['downs_id'] . '&amp;start=' . $start . '&amp;' . SID . '">Редактировать</a> / ';
          echo '<a href="load.php?act=movedown&amp;cid=' . $cid . '&amp;id=' . $data['downs_id'] . '&amp;start=' . $start . '&amp;' . SID . '">Переместить</a></div>';

          echo '<div>';

          echo 'Скачиваний: ' . $data['downs_load'] . '<br />';

          $raiting = (!empty($data['downs_rated'])) ? round($data['downs_raiting'] / $data['downs_rated'], 1) : 0;

          echo 'Рейтинг: <b>' . $raiting . '</b> (Голосов: ' . $data['downs_rated'] . ')<br />';
          echo '<a href="../load/down.php?act=comments&amp;id=' . $data['downs_id'] . '&amp;' . SID . '">Комментарии</a> (' . $data['downs_comments'] . ')</div>';
        } 

        if ($is_admin) {
          echo '<br /><input type="submit" value="Удалить выбранное" /></form>';
        } 

        page_jumpnavigation('load.php?act=down&amp;cid=' . $cid . '&amp;', $config['downlist'], $start, $total);
        page_strnavigation('load.php?act=down&amp;cid=' . $cid . '&amp;', $config['downlist'], $start, $total);
      } else {
        show_error('В данном разделе еще нет файлов!');
      } 
    } else {
      show_error('Ошибка! Данного раздела не существует!');
    } 

    echo '<img src="../images/img/open.gif" alt="image" /> <a href="load.php?act=newfile&amp;cid=' . $cid . '&amp;' . SID . '">Добавить</a><br />';
    echo '<img src="../images/img/reload.gif" alt="image" /> <a href="load.php?' . SID . '">Категории</a><br />';
    break;
  # ###########################################################################################
  # #                            Подготовка к редактированию файла                           ##
  # ###########################################################################################
  case 'editdown':

    $config['newtitle'] = 'Редактирование файла';

    $new = DB :: $dbh -> queryFetch("SELECT `downs`.*, `cats`.* FROM `downs` LEFT JOIN `cats` ON `downs`.`downs_cats_id`=`cats`.`cats_id` WHERE `downs_id`=? LIMIT 1;", array($id));

    if (!empty($new)) {
      echo '<a href="#down"><img src="../images/img/downs.gif" alt="Вниз" /></a> <a href="load.php?' . SID . '">Категории</a> / ';

      if (!empty($new['cats_parent'])) {
        $podcats = DB :: $dbh -> queryFetch("SELECT `cats_id`, `cats_name` FROM `cats` WHERE `cats_id`=? LIMIT 1;", array($new['cats_parent']));
        echo '<a href="load.php?act=down&amp;cid=' . $podcats['cats_id'] . '&amp;' . SID . '">' . $podcats['cats_name'] . '</a> / ';
      } 

      echo '<a href="../load/down.php?act=view&amp;id=' . $id . '&amp;' . SID . '">Обзор файла</a><br /><br />';

      if (empty($new['downs_link'])) {
        echo '<b><big>Загрузка файла</big></b><br /><br />';

        echo '<div class="form">';
        echo '<form action="load.php?act=loadfile&amp;id=' . $id . '&amp;uid=' . $_SESSION['token'] . '&amp;' . SID . '" method="post" enctype="multipart/form-data">';
        echo 'Прикрепить файл*:<br /><input type="file" name="loadfile" /><br />';
        echo '<input value="Загрузить" type="submit" /></form></div><br />';
      } else {
        echo '<img src="../images/img/download.gif" alt="image" /> <b>' . $new['downs_link'] . '</b> (' . read_file(BASEDIR . 'load/files/' . $new['downs_link']) . ') (<a href="load.php?act=delfile&amp;id=' . $id . '&amp;' . SID . '">Удалить</a>)<br />';

        if (empty($new['downs_screen'])) {
          echo '<br /><b><big>Загрузка скриншота</big></b><br /><br />';
          echo '<div class="form">';
          echo '<form action="load.php?act=loadscreen&amp;id=' . $id . '&amp;uid=' . $_SESSION['token'] . '&amp;' . SID . '" method="post" enctype="multipart/form-data">';
          echo 'Прикрепить скрин (jpg,jpeg,gif,png):<br /><input type="file" name="screen" /><br />';
          echo '<input value="Загрузить" type="submit" /></form></div><br />';
        } else {
          echo '<img src="../images/img/gallery.gif" alt="image" /> <b>' . $new['downs_screen'] . '</b> (' . read_file(BASEDIR . 'load/screen/' . $new['downs_screen']) . ') (<a href="load.php?act=delscreen&amp;id=' . $id . '&amp;' . SID . '">Удалить</a>)<br /><br />';
        } 
      } 

      echo '<b><big>Редактирование</big></b><br /><br />';
      echo '<div class="form">';
      echo '<form action="load.php?act=changedown&amp;id=' . $id . '&amp;uid=' . $_SESSION['token'] . '&amp;' . SID . '" method="post">';

      $new['downs_text'] = nosmiles($new['downs_text']);
      $new['downs_text'] = yes_br($new['downs_text']);

      echo 'Название*:<br />';
      echo '<input type="text" name="title" size="50" maxlength="50" value="' . $new['downs_title'] . '" /><br />';
      echo 'Описание*:<br />';
      echo '<textarea cols="25" rows="5" name="text">' . $new['downs_text'] . '</textarea><br />';
      echo 'Автор файла*:<br />';
      echo '<input type="text" name="author" maxlength="50" value="' . $new['downs_author'] . '" /><br />';
      echo 'Сайт автора:<br />';
      echo '<input type="text" name="site" maxlength="50" value="' . $new['downs_site'] . '" /><br />';
      echo 'Архив:<br />';
      echo '<input type="text" name="loadfile" maxlength="50" value="' . $new['downs_link'] . '" /><br />';
      echo 'Скриншот:<br />';
      echo '<input type="text" name="screen" maxlength="50" value="' . $new['downs_screen'] . '" /><br />';

      echo '<input value="Изменить" type="submit" /></form></div><br />';
    } else {
      show_error('Данного файла не существует!');
    } 

    echo '<img src="../images/img/reload.gif" alt="image" /> <a href="load.php?' . SID . '">Категории</a><br />';
    break;
  # ###########################################################################################
  # #                                  Редактирование файла                                  ##
  # ###########################################################################################
  case 'changedown':

    $uid = check($_GET['uid']);
    $title = check($_POST['title']);
    $text = check($_POST['text']);
    $author = check($_POST['author']);
    $site = check($_POST['site']);
    $loadfile = check(strtolower($_POST['loadfile']));
    $screen = check(strtolower($_POST['screen']));

    if ($uid == $_SESSION['token']) {
      if (utf_strlen($title) >= 5 && utf_strlen($title) < 50) {
        if (utf_strlen($text) >= 50 && utf_strlen($text) < 5000) {
          if (utf_strlen($author) >= 3 && utf_strlen($author) < 50) {
            if (empty($site) || preg_match('#^http://([a-z0-9_\-\.])+(\.([a-z0-9\/])+)+$#', $site)) {
              $new = DB :: $dbh -> queryFetch("SELECT * FROM `downs` WHERE `downs_id`=?;", array($id));
              if (!empty($new)) {
                $downlink = DB :: $dbh -> querySingle("SELECT `downs_link` FROM `downs` WHERE `downs_link`=? AND `downs_id`<>? LIMIT 1;", array($loadfile, $id));
                if (empty($downlink)) {
                  $downtitle = DB :: $dbh -> querySingle("SELECT `downs_title` FROM `downs` WHERE `downs_title`=? AND `downs_id`<>? LIMIT 1;", array($title, $id));
                  if (empty($downtitle)) {
                    $text = no_br($text);

                    if (!empty($loadfile) && $loadfile != $new['downs_link'] && file_exists(BASEDIR . 'load/files/' . $new['downs_link'])) {
                      rename(BASEDIR . 'load/files/' . $new['downs_link'], BASEDIR . 'load/files/' . $loadfile);
                    } 

                    if (!empty($screen) && $screen != $new['downs_screen'] && file_exists(BASEDIR . 'load/screen/' . $new['downs_screen'])) {
                      rename(BASEDIR . 'load/screen/' . $new['downs_screen'], BASEDIR . 'load/screen/' . $screen);
                    } 

                    DB :: $dbh -> query("UPDATE `downs` SET `downs_title`=?, `downs_text`=?, `downs_link`=?, `downs_author`=?, `downs_site`=?, `downs_screen`=?, `downs_time`=? WHERE `downs_id`=?;", array($title, $text, $loadfile, $author, $site, $screen, $new['downs_time'], $id));

                    $_SESSION['note'] = 'Данные успешно изменены!';
                    header ("Location: load.php?act=editdown&id=$id&" . SID);
                    exit;
                  } else {
                    show_error('Ошибка! Название ' . $title . ' уже имеется в общих файлах!');
                  } 
                } else {
                  show_error('Ошибка! Архив ' . $loadfile . ' уже присутствует в общих файлах!');
                } 
              } else {
                show_error('Данного файла не существует!');
              } 
            } else {
              show_error('Ошибка! Недопустимый адрес сайта, необходим формат http://site.domen!');
            } 
          } else {
            show_error('Ошибка! Слишком длинный или короткий ник (логин) автора (от 3 до 50 символов)!');
          } 
        } else {
          show_error('Ошибка! Слишком длинный или короткий текст описания (от 50 до 5000 символов)!');
        } 
      } else {
        show_error('Ошибка! Слишком длинное или короткое название (от 5 до 50 символов)!');
      } 
    } else {
      show_error('Ошибка! Неверный идентификатор сессии, повторите действие!');
    } 

    echo '<img src="../images/img/back.gif" alt="image" /> <a href="load.php?act=editdown&amp;id=' . $id . '&amp;' . SID . '">Вернуться</a><br />';
    break;
  # ###########################################################################################
  # #                                   Загрузка файла                                       ##
  # ###########################################################################################
  case 'loadfile':
    show_title('site.png', 'Загрузка файла');

    $querylink = DB :: $dbh -> querySingle("SELECT `downs_id` FROM `downs` WHERE `downs_id`=?;", array($id));
    if (!empty($querylink)) {
      if (is_uploaded_file($_FILES['loadfile']['tmp_name'])) {
        $filename = check(strtolower($_FILES['loadfile']['name']));
        if (preg_match('|^[a-z0-9_\.\-]+$|i', $filename)) {
          // - Позже будет вынесено в настройки, пока прописывайте вручную то что нужно вам -//
          $arrext = array('.txt', '.zip', '.rar', '.jpg', '.jpeg', '.jpg', '.gif', '.bmp', '.wbmp', '.png', '.mp3', '.mp4', '.3gp', '.wav', '.mmf', '.mid', '.midi', '.sis', '.jar', '.jad');

          $ext = strtolower(strrchr($filename, "."));

          if (in_array($ext, $arrext)) {
            if ($_FILES['loadfile']['size'] > 0 && $_FILES['loadfile']['size'] <= $config['fileupload']) {
              $downlink = DB :: $dbh -> querySingle("SELECT `downs_link` FROM `downs` WHERE `downs_link`=? LIMIT 1;", array($filename));
              if (empty($downlink)) {
                move_uploaded_file($_FILES['loadfile']['tmp_name'], BASEDIR . 'load/files/' . $filename);
                @chmod(BASEDIR . 'load/files/' . $filename, 0666);

                DB :: $dbh -> query("UPDATE `downs` SET `downs_link`=? WHERE `downs_id`=?;", array($filename, $id));

                $_SESSION['note'] = 'Файл успешно загружен!';
                header ("Location: load.php?act=editdown&id=$id&" . SID);
                exit;
              } else {
                show_error('Ошибка! Файл ' . $loadfile . ' уже имеется в общих файлах!');
              } 
            } else {
              show_error('Ошибка! Максимальный размер загружаемого файла ' . formatsize($config['fileupload']) . '!');
            } 
          } else {
            show_error('Ошибка! Недопустимое расширение файла!');
          } 
        } else {
          show_error('Ошибка! В названии файла присутствуют недопустимые символы!');
        } 
      } else {
        show_error('Ошибка! Не удалось загрузить файл!');
      } 
    } else {
      show_error('Данного файла не существует!');
    } 

    echo '<img src="../images/img/back.gif" alt="image" /> <a href="load.php?act=editdown&amp;id=' . $id . '&amp;' . SID . '">Вернуться</a><br />';
    break;
  # ###########################################################################################
  # #                                   Загрузка скриншота                                   ##
  # ###########################################################################################
  case 'loadscreen':
    show_title('site.png', 'Загрузка скриншота');

    $querylink = DB :: $dbh -> querySingle("SELECT `downs_link` FROM `downs` WHERE `downs_id`=?;", array($id));
    if (!empty($querylink)) {
      if (is_uploaded_file($_FILES['screen']['tmp_name'])) {
        $screenname = check(strtolower($_FILES['screen']['name']));
        $ext = strrchr($screenname, '.');

        if ($ext == '.jpg' || $ext == '.jpeg' || $ext == '.gif' || $ext == '.png') {
          if ($_FILES['screen']['size'] > 0 && $_FILES['screen']['size'] <= $config['screenupload']) {
            $getimagesize = GetImageSize($_FILES['screen']['tmp_name']);
            $width = $getimagesize[0];
            $height = $getimagesize[1];

            if ($width <= $config['screensize'] && $height <= $config['screensize'] && $width >= 100 && $height >= 100) {
              move_uploaded_file ($_FILES['screen']['tmp_name'], BASEDIR . 'load/screen/' . $querylink . $ext);
              @chmod(BASEDIR . 'load/screen/' . $querylink . $ext, 0666);

              DB :: $dbh -> query("UPDATE `downs` SET `downs_screen`=? WHERE `downs_id`=?;", array($querylink . $ext, $id));

              $_SESSION['note'] = 'Скриншот успешно загружен!';
              header ("Location: load.php?act=editdown&id=$id&" . SID);
              exit;
            } else {
              show_error('Ошибка! Требуемый размер скриншота: от 100 до ' . $config['screensize'] . ' px');
            } 
          } else {
            show_error('Ошибка! Максимальный размер загружаемого скриншота ' . formatsize($config['screenupload']) . '!');
          } 
        } else {
          show_error('Ошибка! Разрешается загружать скриншоты с расширением jpg, jpeg, gif и png!');
        } 
      } else {
        show_error('Ошибка! Вы не загрузили скриншот!');
      } 
    } else {
      show_error('Данного файла не существует!');
    } 

    echo '<img src="../images/img/back.gif" alt="image" /> <a href="load.php?act=editdown&amp;id=' . $id . '&amp;' . SID . '">Вернуться</a><br />';
    break;
  # ###########################################################################################
  # #                                   Удаление файла                                       ##
  # ###########################################################################################
  case 'delfile':

    $link = DB :: $dbh -> queryFetch("SELECT * FROM `downs` WHERE `downs_id`=?;", array($id));
    if (!empty($link)) {
      if (!empty($link['downs_link']) && file_exists(BASEDIR . 'load/files/' . $link['downs_link'])) {
        unlink(BASEDIR . 'load/files/' . $link['downs_link']);
      } 
      if (!empty($link['downs_screen']) && file_exists(BASEDIR . 'load/screen/' . $link['downs_screen'])) {
        unlink(BASEDIR . 'load/screen/' . $link['downs_screen']);
      } 

      DB :: $dbh -> query("UPDATE `downs` SET `downs_link`=?, `downs_screen`=? WHERE `downs_id`=?;", array('', '', $id));

      $_SESSION['note'] = 'Файл успешно удален!';
      header ("Location: load.php?act=editdown&id=$id&" . SID);
      exit;
    } else {
      show_error('Ошибка! Данного файла не существует!');
    } 

    echo '<img src="../images/img/back.gif" alt="image" /> <a href="load.php?act=editdown&amp;id=' . $id . '&amp;' . SID . '">Вернуться</a><br />';
    break;
  # ###########################################################################################
  # #                                    Удаление скриншота                                  ##
  # ###########################################################################################
  case 'delscreen':

    $queryscreen = DB :: $dbh -> querySingle("SELECT `downs_screen` FROM `downs` WHERE `downs_id`=?;", array($id));
    if (!empty($queryscreen)) {
      if (file_exists(BASEDIR . 'load/screen/' . $queryscreen)) {
        unlink(BASEDIR . 'load/screen/' . $queryscreen);
      } 
      DB :: $dbh -> query("UPDATE `downs` SET `downs_screen`=? WHERE `downs_id`=?;", array('', $id));

      $_SESSION['note'] = 'Скриншот успешно удален!';
      header ("Location: load.php?act=editdown&id=$id&" . SID);
      exit;
    } else {
      show_error('Ошибка! Данного файла не существует!');
    } 

    echo '<img src="../images/img/back.gif" alt="image" /> <a href="load.php?act=editdown&amp;id=' . $id . '&amp;' . SID . '">Вернуться</a><br />';
    break;
  # ###########################################################################################
  # #                               Подготовка к перемещению файла                           ##
  # ###########################################################################################
  case 'movedown':

    $querydown = DB :: $dbh -> query("SELECT * FROM `downs` WHERE `downs_id`=? LIMIT 1;", array($id));
    $downs = $querydown -> fetch();

    if (!empty($downs)) {
      echo '<img src="../images/img/download.gif" alt="image" /> <b>' . $downs['downs_title'] . '</b> (' . read_file(BASEDIR . 'load/files/' . $downs['downs_link']) . ')<br /><br />';

      $querycats = DB :: $dbh -> query("SELECT `cats_id`, `cats_parent`, `cats_name` FROM `cats` ORDER BY `cats_order` ASC;");
      $cats = $querycats -> fetchAll();

      if (count($cats) > 0) {
        $output = array();
        foreach ($cats as $row) {
          $i = $row['cats_id'];
          $p = $row['cats_parent'];
          $output[$p][$i] = $row;
        } 

        echo '<div class="form" id="form"><form action="load.php?act=addmovedown&amp;cid=' . $downs['downs_cats_id'] . '&amp;id=' . $id . '&amp;uid=' . $_SESSION['token'] . '&amp;' . SID . '" method="post">';

        echo 'Выберите раздел для перемещения:<br />';
        echo '<select name="section">';
        echo '<option value="0">Список разделов</option>';

        foreach ($output[0] as $key => $data) {
          if ($downs['downs_cats_id'] != $data['cats_id']) {
            echo '<option value="' . $data['cats_id'] . '">' . $data['cats_name'] . '</option>';
          } 

          if (isset($output[$key])) {
            foreach($output[$key] as $datasub) {
              if ($downs['downs_cats_id'] != $datasub['cats_id']) {
                echo '<option value="' . $datasub['cats_id'] . '">– ' . $datasub['cats_name'] . '</option>';
              } 
            } 
          } 
        } 

        echo '</select>';

        echo '<input type="submit" value="Переместить" /></form></div><br />';
      } else {
        show_error('Разделы загрузок еще не созданы!');
      } 
    } else {
      show_error('Ошибка! Данного файла не существует!');
    } 

    echo '<img src="../images/img/back.gif" alt="image" /> <a href="load.php?act=down&amp;cid=' . $cid . '&amp;start=' . $start . '&amp;' . SID . '">Вернуться</a><br />';
    break;
  # ###########################################################################################
  # #                                    Перемещение файла                                   ##
  # ###########################################################################################
  case 'addmovedown':

    $uid = check($_GET['uid']);
    $section = abs(intval($_POST['section']));

    if ($uid == $_SESSION['token']) {
      $querycats = DB :: $dbh -> querySingle("SELECT `cats_id` FROM `cats` WHERE `cats_id`=? LIMIT 1;", array($section));
      if (!empty($querycats)) {
        $querydown = DB :: $dbh -> querySingle("SELECT `downs_id` FROM `downs` WHERE `downs_id`=? LIMIT 1;", array($id));
        if (!empty($querydown)) {
          DB :: $dbh -> query("UPDATE `downs` SET `downs_cats_id`=? WHERE `downs_id`=?;", array($section, $id));
          DB :: $dbh -> query("UPDATE `commload` SET `commload_cats`=? WHERE `commload_down`=?;", array($section, $id));
          // Обновление счетчиков
          DB :: $dbh -> query("UPDATE `cats` SET `cats_count`=`cats_count`+1 WHERE `cats_id`=?", array($section));
          DB :: $dbh -> query("UPDATE `cats` SET `cats_count`=`cats_count`-1 WHERE `cats_id`=?", array($cid));

          $_SESSION['note'] = 'Файл успешно перемещен!';
          header ("Location: load.php?act=down&cid=$section&" . SID);
          exit;
        } else {
          show_error('Ошибка! Файла для перемещения не существует!');
        } 
      } else {
        show_error('Ошибка! Выбранного раздела не существует!');
      } 
    } else {
      show_error('Ошибка! Неверный идентификатор сессии, повторите действие!');
    } 

    echo '<img src="../images/img/back.gif" alt="image" /> <a href="load.php?act=movedown&amp;id=' . $id . '&amp;' . SID . '">Вернуться</a><br />';
    echo '<img src="../images/img/reload.gif" alt="image" /> <a href="load.php?act=down&amp;cid=' . $cid . '&amp;' . SID . '">К разделам</a><br />';
    break;
  # ###########################################################################################
  # #                                   Удаление файлов                                      ##
  # ###########################################################################################
  case 'deldown':

    $uid = check($_GET['uid']);
    if (isset($_POST['del'])) {
      $del = intar($_POST['del']);
    } else {
      $del = 0;
    } 

    if (is_admin(array(101)) && $log == $config['nickname']) {
      if ($uid == $_SESSION['token']) {
        if ($del > 0) {
          $del = implode(',', $del);

          if (is_writeable(BASEDIR . 'load/files')) {
            $querydel = DB :: $dbh -> query("SELECT `downs_link`, `downs_screen` FROM `downs` WHERE `downs_id` IN (" . $del . ");");
            $arr_script = $querydel -> fetchAll();

            DB :: $dbh -> query("DELETE FROM `commload` WHERE `commload_down` IN (" . $del . ");");
            $deldowns = DB :: $dbh -> exec("DELETE FROM `downs` WHERE `downs_id` IN (" . $del . ");");
            // Обновление счетчиков
            DB :: $dbh -> query("UPDATE `cats` SET `cats_count`=`cats_count`-? WHERE `cats_id`=?", array($deldowns, $cid));

            foreach ($arr_script as $delfile) {
              if (file_exists(BASEDIR . 'load/files/' . $delfile['downs_link'])) {
                unlink(BASEDIR . 'load/files/' . $delfile['downs_link']);
              } 
              if (!empty($delfile['downs_screen'])) {
                unlink(BASEDIR . 'load/screen/' . $delfile['downs_screen']);
              } 
            } 

            $_SESSION['note'] = 'Выбранные файлы успешно удалены!';
            header ("Location: load.php?act=down&cid=$cid&start=$start&" . SID);
            exit;
          } else {
            show_error('Ошибка! Не установлены атрибуты доступа на дирекоторию с файлами!');
          } 
        } else {
          show_error('Ошибка! Отсутствуют выбранные файлы!');
        } 
      } else {
        show_error('Ошибка! Неверный идентификатор сессии, повторите действие!');
      } 
    } else {
      show_error('Ошибка! Удалять файлы могут только суперадмины!');
    } 

    echo '<img src="../images/img/back.gif" alt="image" /> <a href="load.php?act=down&amp;cid=' . $cid . '&amp;start=' . $start . '&amp;' . SID . '">Вернуться</a><br />';
    break;

  default:
    header("location: load.php?" . SID);
    exit;
    endswitch;

    echo '<img src="../images/img/panel.gif" alt="image" /> <a href="index.php?' . SID . '">В админку</a><br />';
    echo '<img src="../images/img/homepage.gif" alt="image" /> <a href="../index.php?' . SID . '">На главную</a>';
  } else {
  header ('Location: ' . BASEDIR . 'index.php?' . SID);
  exit;
} 

include_once ('../themes/' . $config['themes'] . '/foot.php');

?>