Вход Регистрация
Файл: adultscript-2.0.3-pro/files/modules/video/components/upload.php
Строк: 121
<?php
defined
('_VALID') or die('Restricted Access!');

class 
VComponent_video_upload extends VModule_video
{
    private 
$errors = array();
    private 
$vcfg;
    public function 
__construct()
    {
        
parent::__construct();
        
        
$this->vcfg = VF::cfg('module.video');
    }    
    
    public function 
render()
    {
        
VLanguage::load('frontend.upload');
        
VLanguage::load('frontend.video');

        if (!
$this->vcfg['upload_enabled']) {
            
$_SESSION['error'] = __('upload-disabled');
            
VModule::load('error', TRUE);
        }
        
        if (
$this->vcfg['upload_perm'] != 'anonymous') {
            
VAuth::check(ucfirst($this->vcfg['upload_perm']), NULL, __('upload-perm', array($this->vcfg['upload_perm'])));
            
$user_id = (int) $_SESSION['user_id'];
        } else {
            
$user_id = (VAuth::loggedin()) ? (int) $_SESSION['user_id'] : $this->get_anonymous_id();
        }
        
        
$errors        = array();
        
$messages    = array();
        
$allow        = TRUE;
        
        if (!empty(
$this->vcfg['upload_limit'])) {
            
$add_time   = strtotime(date('Y-m-d').' 00:00:00');
            
$this->db->query("SELECT COUNT(*) AS total_videos
                              FROM #__video
                              WHERE add_time > "
.$add_time."
                              AND user_id = "
.$user_id);
            if (
$this->db->affected_rows()) {
                
$total_videos    = (int) $this->db->fetch_field('total_videos');
                
$upload_limit    = (int) $this->vcfg['upload_limit'];
                if (
$total_videos >= $upload_limit) {
                    
$errors[]    = __('upload-limit', array($upload_limit));
                }
            }
        }
        
        
$categories    = $this->get_video_categories();
        
$unique     = time().'0'.mt_rand();
        
$video        = array(
            
'title' => '', 'description' => '', 'tags' => '', 'category' => array(),
            
'url' => '', 'code' => ''
        
);

        if (isset(
$_POST['cancel-upload'])) {
            
$allow = FALSE;
        }
        
        if (isset(
$_POST['upload-submitted']) && $allow === TRUE) {
            
$filter            = VF::factory('filter');
            
$title            = $filter->get('title');
            
$description    = $filter->get('description');
            
$category        = (isset($_POST['category'])) ? (array) $_POST['category'] : array();
            
$pornstars        = (isset($_POST['pornstars'])) ? (array) $_POST['pornstars'] : array();
            
$tags            = $filter->get('tags');
            
$upload_id        = $filter->get('unique_id');
            
            if (
$title == '') {
                
$errors[] = __('title-empty');
            } elseif (!
VValid::length($title, 1, 100)) {
                
$errors[] = __('title-length');
            } else {
                
$video['title'] = $title;
            }
            
            if (
$description != '') {
                
$video['description'] = $description;
            }
            
            if (!
$category) {
                
$errors[] = __('category-empty', array($this->vcfg['max_categories']));
            } elseif (
count($category) > $this->vcfg['max_categories']) {
                
$errors[] = __('category-max', array($this->vcfg['max_categories']));
            } else {
                
$video['category'] = $category;
            }
            
            if (
$tags == '') {
                
$errors[] = __('tags-empty');
            } else {
                
$tags     = prepare_tags($tags);
                if (
$tags == '') {
                    
$errors[] = __('tags-invalid');
                } else {
                    
$arr    = explode(',', $tags);
                    foreach (
$arr as $tag) {
                        if (
strlen($tag) > $this->vcfg['tag_max_length']) {
                            
$errors[] = __('tag-length', array('"'.$tag.'"', $this->vcfg['tag_max_length']));
                        }
                        
                        if (
str_word_count($tag) > $this->vcfg['tag_max_words']) {
                            
$errors[] = __('tag-words', array('"'.$tag.'"', $this->vcfg['tag_max_words']));
                        }
                    }
                
                    
$video['tags'] = $tags;
                }
            }
            
            if (!
ctype_digit($upload_id)) {
                
$errors[]    = 'Invalid upload identifier!';
            }
            
            if (!
$errors) {
                if (!
$file = $this->process_file($upload_id, $this->vcfg['video_max_size'], $this->vcfg['video_allowed_ext'])) {
                    
$errors = array_merge($errors, $this->errors);
                }
            }
            
            if (!
$errors) {
                
$vmodel = VModel::load('video', 'video', true);
                if (
$video_id = $vmodel->add(array(
                    
'user_id'        => $user_id,
                    
'title'            => $title,
                    
'slug'            => prepare_string($title, true, $this->vcfg['slug_max_length']),
                    
'description'    => $description,
                    
'type'            => 'public',
                    
'premium'        => '0',
                    
'status'        => 3))) {
                    
$dst        = MEDIA_DIR.'/videos/vid/'.$video_id.'.'.$file['ext'];
                    
$status        = ($this->vcfg['approve']) ? 2 : 1;
                    if (
rename($file['path'], $dst)) {
                        @
chmod($dst, 0777);
                        if (
$this->vcfg['queue']) {
                            
$status = 6;
                        } else {
                            
$cmd = VF::cfg_core_item('php_cli_path').' '.MODULES_DIR.'/video/scripts/convert.php '.$video_id.' '.$file['ext'].' '.$status;
                            
exec(escapeshellcmd($cmd). ' >/dev/null &');
                        }
                        
                        if (
$status !== 6) {
                            
$status = 4;
                        }
                        
                        foreach (
$category as $cat_id) {
                            
$vmodel->add_category($video_id, $cat_id);
                        }
                        
                        
$tags    = explode(',', $tags);
                        foreach (
$tags as $tag) {
                            
$vmodel->add_tag($video_id, trim($tag));
                        }
                        
                        
$vmodel->add_orig(array(
                            
'video_id'      => $video_id,
                            
'user_id'       => $user_id,
                            
'filename'      => $file['name'],
                            
'ext'           => $file['ext'],
                            
'size'          => $file['size'],
                            
'method'        => 'upload'
                        
));

                        
$vmodel->add_activity($user_id);
                        
                        if (
$status === 6) {
                            
$vmodel->add_queue($video_id, $status);
                        }
                        
                        foreach (
$pornstars as $model_id) {
                            
$vmodel->add_model($video_id, (int) $model_id);
                        }
                        
                        
$vmodel->update($video_id, array(
                            
'status'    => $status
                        
));
                        
                        
$video['title']            = '';
                        
$video['description']    = '';
                        
$video['tags']            = '';
                        
$video['category']        = array();
                        
                        if (
$status === 1 OR $status === 4) {
                            
$messages[] = __('upload-success');
                        } elseif (
$status === 2 OR $status === 0) {
                            
$messages[] = __('upload-approve');
                        } elseif (
$status == 6) {
                            
$messages[] = __('upload-queue');
                        }
                    } else {
                        
$errors[] = __('file-error');
                    }
                } else {
                    throw new 
VException(__('database-error'));
                }
            }
        }
        
        
$tpl = VF::factory('template');
        
$tpl->menu                = 'video';
        
$tpl->meta_title        = __('upload-video');

        
$tpl->canonical            = BASE_URL.'/upload/';
        
$tpl->canonicalm        = MOBILE_URL.'/upload/';

        
$tpl->errors            = $errors;
        
$tpl->messages            = $messages;
        
$tpl->video                = $video;
        
$tpl->categories        = $categories;
        
$tpl->tag_max_length    = $this->vcfg['tag_max_length'];
        
$tpl->tag_max_words        = $this->vcfg['tag_max_words'];
        
$tpl->max_categories    = $this->vcfg['max_categories'];
        
$tpl->unique            = $unique;
        
$tpl->pornstars            = (VModule::enabled('pornstar')) ? $this->get_pornstars('a') : NULL;
        
$tpl->load(array('header', 'video_upload', 'footer'));
        
$tpl->display();
    }
    
    private function 
get_anonymous_id()
    {
        
$this->db->query("SELECT user_id FROM #__user WHERE username = 'anonymous' LIMIT 1");
        if (
$this->db->affected_rows()) {
            return (int) 
$this->db->fetch_field('user_id');
        }
        
        throw new 
Exception('Failed to get anonymous id! Application error!?');
    }
    
    private function 
get_pornstars($letter='a')
    {
        
$this->db->query("SELECT model_id, name
                            FROM #__model
                            WHERE slug LIKE '"
.$letter."%'
                            AND status = '1'"
);
        
        return 
$this->db->fetch_rows();
    }
    
    private function 
process_file($upload_id, $max_size, $allowed_ext)
    {
        
VLanguage::load('frontend.upload');
        
        
$sec    = substr(md5(VF::cfg_item('secret')), -5);
        
$info    = TMP_DIR.'/uploads/'.$upload_id.'_'.$sec;
        if (
file_exists($info) && is_file($info)) {
            
$info    = file($info);
            
$name    = trim($info['0']);
            
$ext    = trim($info['1']);
            
$path    = TMP_DIR.'/uploads/'.$upload_id.'_'.$sec.'.'.$ext;
            if (
file_exists($path) && is_file($path)) {
                
$size    = filesize($path);
                if (
$max_size !== 0 && $size > ($max_size*1024*1024)) {
                      
$this->errors[] = __('file-limit', array($max_size));
                } else {
                    if (
in_array($ext, $allowed_ext)) {
                        @
unlink($info);
                        return array(
                            
'path'    => $path,
                            
'name'    => $name,
                            
'size'    => $size,
                            
'ext'    => $ext
                        
);
                    } else {
                        
$this->errors[] = __('file-invalid', array(implode(', ', $allowed_ext)));
                    }
                }
            } else {
                
$this->errors[]    = __('file-select');
            }
        } else {
            
$this->errors[]    = __('file-select').'*';
        }
        
        return 
FALSE;
    }
}
Онлайн: 1
Реклама