Файл: panel/upload.php
Строк: 113
<?php
/**
*    Author: Elime;
*    ICQ: 618878;
*    E-mail: elime4@gmail.com;
*/
require '../system/core.php';
/* Проверка прав доступа */
if(!$login) message('Ошибка авторизации!', '/panel/login.php');
if(!check_right($user['id'], 1, $db)) message('Недостаточно прав!', '/panel/index.php');
/* Если выбран файл и заполены поля */
if(isset($_POST['name']) and isset($_FILES['file']['name']) and isset($_POST['cat']))
{
    
    /* Переменные по-умолчанию */
    $name = in($_POST['name']);
    $file = in($_FILES['file']['name']);
    $tag = in($_POST['tag']);
    $description = '';
    $keywords = '';
    $about = '';
    $cat = num($_POST['cat']);
    
    
    /* Ищем указанную категорию */
    $query = $db->query("SELECT * FROM `categories` WHERE `id`='".$cat."'");
    if($db->num($query) != 1)
    {
        message('Указанная категория не найдена!');
    }
    $category = $db->fetch($query);
    
    
    /* Проверяем пустоту полей */
    if(empty($name))
    {
        message('Название видеофайла должно быть заполнено!');
    }
    if(empty($file))
    {
        message('Вы не выбрали видеофайл!');
    }
    
    
    /* Если есть ошибка при загрузке */
    if($_FILES['file']['error'])
    {
        message('При загрузке файла произошла ошибка! Подробности: '.$_FILES['file']['error']);
    }
    
    
    /* Проверяем пустоту необязательных полей */
    if(!empty($_POST['description']))
    {
        $description = in($_POST['description']);
    }
    if(!empty($_POST['keywords']))
    {
        $keywords = in($_POST['keywords']);
    }
    if(!empty($_POST['about']))
    {
        $about = in($_POST['about']);
    }
    
    
    /* Проверка длины строк */
    if(mb_strlen($name, 'utf-8') > 100)
    {
        message('Название видеофайла не может быть больше 100 символов!');
    }
    if(mb_strlen($description, 'utf-8') > 255)
    {
        message('Описание (meta) должно быть не больше 255 символов!');
    }
    if(mb_strlen($keywords, 'utf-8') > 255)
    {
        message('Ключевые слова (meta) должны быть не больше 255 символов!');
    }
    if(mb_strlen($about, 'utf-8') > 500)
    {
        message('Описание видеозаписи должно быть не больше 500 символов!');
    }
    
    
    /* Пути */
    $info = pathinfo($file);
    $extension = $info['extension'];
    $translit_name = translit($name);
    $dir = 'files/'.$category['translit'].'/'.$translit_name;
    $translit = $category['translit'].'/'.$translit_name;
    $url_file = $dir.'/'.$config['prefix'].$translit_name.'.'.$extension;
    
    /* Проверка фаормата файла */
    if($extension != '3gp' and $extension != 'mp4')
    {
        message('К загрузке допускаются только файлы формата 3gp и mp4!');
    }
    
    
    /* Если такая папка уже существует */
    if(file_exists(ROOT.'/'.$dir))
    {
        message('Папка с именем <b>'.$dir.'</b> уже существует!');
    }
    
    
    /* Создаем папку */
    if(!mkdir(ROOT.'/'.$dir, 0777))
    {
        message('Произошла ошибка при создании папки '.$dir.' !');
    }
    chmod(ROOT.'/'.$dir, 0777);
    
    
    /* Копируем файл */
    if(!copy($_FILES['file']['tmp_name'], ROOT.'/'.$url_file))
    {
        unlink(ROOT.'/'.$dir);
        message('Ошибка при копировании файла!');
    }    
    
    
    /* Создаем объект ffmpeg */
    $video = new ffmpeg_movie(ROOT.'/'.$url_file);
    
    
    /* Длительность видео в секундах */
    $duration = round($video->getDuration());
    
    
    /* Размер файла в байтах */
    $size = $_FILES['file']['size'];
    
    
    /* Размеры */
    $width = $video->getFrameWidth();
    $height = $video->getFrameHeight();
    $screen_size = $width.'x'.$height;
    
    /* Пути к скриншотам */
    $scr_mini = $dir.'/screen_mini.jpg';
    $scr = $dir.'/screen.jpg';
    
    /* Создаем скриншот */
    $frame_count = $video->getFrameCount();
    $frame = intval($frame_count / 2);
    $select = $video->getFrame($frame);
    if($select)
    {
        $screen = $select->toGDImage();
        imagejpeg($screen, ROOT.'/'.$scr, 100);
        imagedestroy($screen);
        imageresize(ROOT.'/'.$scr, ROOT.'/'.$scr, 480, 480, 100);
        imageresize(ROOT.'/'.$scr, ROOT.'/'.$scr_mini, 200, 200, 100);    }
    else
    {
        $frame = intval($frame_count / 3);
        $select = $video->getFrame($frame);
        if(!$select)
        {
            unset($video);
            remove_dir(ROOT.'/'.$dir);
            message('Невозможно создать скриншот для этого видео! Загрузите другое видео!');
        }
        
        $screen = $select->toGDImage();
        imagejpeg($screen, ROOT.'/'.$scr, 85);
        imagedestroy($screen);
        imageresize(ROOT.'/'.$scr, ROOT.'/'.$scr, 200, 200, 100);
    }
    
    
    /* Записываем информацию о файле в БД */
    $db->query("INSERT INTO `data` SET `cat_id`='".$cat."', `name`='".$name."', `translit`='".$translit."', `about`='".$about."', `description`='".$description."', `keywords`='".$keywords."', `duration`='".$duration."', `size`='".$size."', `format`='".$extension."', `screen_size`='".$screen_size."', `like`='0', `download`='0', `file`='".in($url_file)."', `mini_scr`='".$scr_mini."', `scr`='".$scr."', `add_time`='".time()."', `tag`='".$tag."'");
    
    /* Записываем в логи кто загрузил новый видеофайл */
    $action = $user['login'].' загрузил новый видеофайл: "'.$name.'".';
    $db->query("INSERT INTO `users_log` SET `user_id`='".$user['id']."', `action`='".in($action)."', `time`='".time()."'");
    
    
    /* Выводим сообщение */
    message('Файл успешно загружен!', '/panel/index.php');
}
/* Получаем список категорий */
$select_cat = $db->query("SELECT * FROM `categories`");
$cat_array = array();
while($result = $db->fetch($select_cat))
{
    $result['name'] = out($result['name']);
    $cat_array[] = $result;
}
/* Выводим страницу */
$data['title'] = 'Загрузить файл';
$data['cat_result'] = $cat_array;
$tpl->display('panel/upload', $data);
?>