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

define('RESIZE_THUMB'true);

class 
VModule_Admin_csv
{
    private 
$db;
    private 
$vcfg;
    private 
$unique;
    public function 
__construct()
    {
        
$this->db    VF::factory('database');
        
$this->vcfg    VF::cfg('module.video');
    }

    public function 
render()
    {
        
$cmodel        VModel::load('category''video'true);
        
$chmodel    VModel::load('channel''channel'true);
        
$umodel     VModel::load('user''user'true);
        
$vmodel        VModel::load('video''video'true);
        
        
$option        = array(
            
'username' => 'anonymous''category' => array(), 'status' => 1'type' => 'public',
            
'method' => 'flv''delimiter' => '|''thumb_method' => 'generate''duplicates' => 1,
            
'channel_id' => 0'premium' => 0'categ_method' => 'auto''limit' => 10,
            
'ignore' => 1'csv_method' => 'file''search' => '''replace' => '''text' => '',
            
'limit_proc' => 100'mobile' => 1'queue' => 1'watermark' => 0
        
);
        
        
$unique time().'_'.mt_rand();
        
$orders = array(
              
'flv'           => '1',
              
'title'         => '2',
              
'description'   => '3',
              
'thumb'         => '4',
              
'tags'          => '5',
              
'embed'         => '6',
              
'duration'        => '7',
              
'pornstar'        => '8'
        
);
        
        
$channels    $chmodel->channels(array('c.channel_id''c.name'), array('sort' => 'c.name''order' => 'ASC'));
        
$categories    $cmodel->categories(array('c.cat_id''c.name''c.auto_term'), array('sort' => 'c.name''order' => 'ASC'));
        
        
$errors        = array();
        
$messages    = array();
        
$warnings    = array();
        if (isset(
$_POST['submitted'])) {
            
$filter         VF::factory('filter');
            
$username        $filter->get('username');
            
$categ_method    $filter->get('category_method');
            
$category        = (isset($_POST['category'])) ? (array) $_POST['category'] : array();
            
$method            $filter->get('method');
            
$thumb_method    $filter->get('thumb_method');
            
$duplicates        = (int) trim($_POST['duplicates']);
            
$delimiter        $filter->get('delimiter');
            
$unique            $filter->get('unique');
            
$status            = (int) trim($_POST['status']);
            
$type            $filter->get('type');
            
$channel_id        = (int) trim($_POST['channel_id']);
            
$premium        = (VModule::enabled('premium')) ? (int) trim($_POST['premium']) : 0;
            
$limit            = (int) trim($_POST['limit']);
            
$limit_proc        = (int) trim($_POST['limit_proc']);
            
$ignore            = (int) trim($_POST['ignore']);
            
$csv_method        $filter->get('csv_method');
            
$text            trim($_POST['csv']);
            
$search            trim($_POST['search']);
            
$replace        trim($_POST['replace']);
            
$mobile            = (int) trim($_POST['mobile']);
            
$queue            = (int) trim($_POST['queue']);
            
            if (
$method == 'hotlink' or $method == 'embed') {
                
$queue        0;
            }
            
            
$order_1        $filter->get('order_1');
            
$order_2        $filter->get('order_2');
            
$order_3        $filter->get('order_3');
            
$order_4        $filter->get('order_4');
            
$order_5        $filter->get('order_5');
            
$order_6        $filter->get('order_6');
            
$order_7        $filter->get('order_7');
            
$order_8        $filter->get('order_8');
            
            
$ordering        = array(
                
$order_1$order_2$order_3$order_4$order_5$order_6$order_7
            
);
            
            if (
$username == '') {
                
$errors[]    = 'Username field cannot be left blank!';
            } else {
                if (
$user_id $umodel->exists('username'$username)) {
                    
$option['username'] = $username;
                } else {
                    
$errors[]    = 'Invalid username! Are you sure this user exists!?';
                }
            }
            
            if (!
in_array($method, array('flv''embed''hotlink'))) {
                
$errors[]     = 'Invalid import method! What exactly did you select!?';
            } else {
                
$option['method']    = $method;
            }
            
            if (
in_array($thumb_method, array('generate''download'))) {
                if (
$thumb_method == 'generate' && ($method == 'embed')) {
                    
$errors[] = 'Cannot generate thumbs when using embed import method!';
                } else {
                    
$option['thumb_method'] = $thumb_method;
                }
            } else {
                
$errors[]     = 'Invalid thumb method! What exactly did you select!?';
            }
            
            if (!
in_array($type, array('public''private'))) {
                
$errors[]    = 'Invalid type! What exactly did you select!?';
            } else {
                
$option['type'] = $type;
            }
            
            if (
$csv_method == 'file') {
                if (
$_FILES['csv']['tmp_name'] != '') {
                    if (!
is_uploaded_file($_FILES['csv']['tmp_name'])) {
                        
$errors[] = 'Uploaded CSV file is not a valid uploaded file!';
                    }
                } else {
                    
$errors[] = 'Please upload a CSV file to import!';
                }
            } elseif (
$csv_metod == 'text') {
                if (
$text == '') {
                    
$errors[]    = 'Please enter the CSV text!';
                }
            }
            
            if (
$categ_method == 'select' && empty($category)) {
                
$errors[]    = 'Please check at least one category for the imported videos!';
            }
            
            
$option['status']        = $status;
            
$option['category']        = $category;
            
$option['delimiter']    = $delimiter;
            
$option['duplicates']    = $duplicates;
            
$option['categ_method']    = $categ_method;
            
$option['limit']        = $limit;
            
$option['limit_proc']    = $limit_proc;
            
$option['ignore']        = $ignore;
            
$option['csv_method']    = $csv_method;
            
$option['search']        = $search;
            
$option['replace']        = $replace;
            
$option['queue']        = $queue;
            
            if (!
$errors) {
                
// remove garbage
                
if ($csv_method == 'file') {
                    
$csv     VFile::read($_FILES['csv']['tmp_name']);
                } else {
                    
$csv    $text;
                }
                
$csv        VText::dos2unix($csv);
                
$csv        explode("n"trim($csv));
                
$list        = array();
                
$count        0;
                
$error        false;
                
$success    0;
                
                
VHelper::load('module.video.conv');
                
                
// servers with php < 3 dont have str_getcsv, lets add it :-)
                
VF::load('framework.compat.functions.csv');
                
                foreach (
$csv as $row) {
                    
// empty rows?
                    
if (empty($row)) {
                        continue;
                    }
                
                      if (
$delimiter == 'tab') {
                          
$row        str_replace("t"'|'$row);
                          
$delimiter  '|';
                      }
                    
//                    $row                    = explode($delimiter, trim($row));
                    
$row                    str_getcsv(trim($row), $delimiter""", "\");
                      
$list[$count]           = VArray::combine($ordering$row);
                      
                      // currently only continue if ignore is 1 and only for flv url and title
                      if (
$ignore === 1) {
                          if (
$method == 'flv' OR $method == 'hotlink') {
                              if (!isset(
$list[$count]['flv']) OR empty($list[$count]['flv'])) {
                                  continue;
                              }
                          }

                          if (
$method == 'embed') {
                             if (!isset(
$list[$count]['embed']) OR empty($list[$count]['embed'])) {
                                  continue;
                             }
                          }
                      
                            if (!isset(
$list[$count]['title']) OR empty($list[$count]['title'])) {
                                continue;
                          }                          
                      }
                    
                    if ((
$method == 'flv' OR $method == 'hotlink') AND !isset($list[$count]['flv'])) {
                        
$error = 'Import method set to FLV Source (or FLV Hotlink) and flv source url not present in the CSV file!';
                    }
                    
                    if (
$thumb_method == 'generate' && !isset($list[$count]['flv'])) {
                        
$error = 'Thumb method set to Generate and FLV Source URL not present in the CSV file!';
                    }
                    
                    if (
$method == 'embed' && !isset($list[$count]['embed'])) {
                        
$error = 'Import method set to Embed and embed code not found in the CSV file!';
                    }
                    
                    ++
$count;
                }
                
                if (
$error) {
                      
$errors[] = $error;
                  }
                
                if (!
$errors) {
                    session_write_close();
                    
                    
$this->unique     = $unique;
                    
$count            = count($list);
                    
$incr            = round((100/$count), 2);
                    
$progress        = 0;
                    
$processed        = 0;
                    
                    
$this->update_progress($progress.'^Processing CSV file ('.$count.' videos)!');
                    if (RESIZE_THUMB === true) {
                        
$image = VF::factory('image');
                    }
                    
                    
$conv =  VF::factory('video');
                    foreach (
$list as $index => $values) {
                        
$this->update_progress($progress.'^Processing: '.$values['title'].' ...');
                        
                        if (
$processed >= $limit_proc) {
                            
$warnings[] = 'Processed '.$limit_proc.' and no videos were added! Aborting!';
                            break;
                        }
                        
                        if (
$success >= $limit) {
                            
$warnings[] = 'Limit of '.$limit.' videos reached! Aborting!';
                            break;
                        }
                        
                        //we will regenerate the database link here to avoid timeouts
                        VF::factory_remove('database');
                        
$this->db = VF::factory('database');
                        
                        // make sure we have all the fields...
                        foreach (
$orders as $k => $v) {
                            if (!isset(
$values[$k])) {
                                
$values[$k] = '';
                            }
                        }
                        
                        // make sure we dont have any white spaces..
                        foreach (
$values as $k => $v) {
                            
$values[$k] = trim($v);
                        }
                        
                        
$unique_id = ($method == 'embed') ? md5($values['embed']) : md5($values['flv']);
                        if (
$duplicates === 1) {
                            
$this->db->query("SELECT unique_id
                                              FROM 
#__video_csv_imported
                                              
WHERE unique_id '".$this->db->escape($unique_id)."'
                                              
LIMIT 1");
                            if (
$this->db->affected_rows()) {
                                
$progress = sprintf("%01.2f", ($progress+$incr));
                                
$this->update_progress($progress.'^Duplicate found...skipping!');
                                continue;
                            }
                        }
                        
                        ++
$processed;
                                                
                        
$this->update_progress($progress.'^Processing: '.$values['title'].' (database entry) ...');
                        
                        
$embed         = ($method == 'embed') ? urldecode($values['embed']) : '';
                        if (
$method == 'embed' && ($search != '' && $replace != '')) {
                            
$embed    = str_replace($search$replace$embed);
                        }
                        
                        // lets add a fix for unclosed iframes (some sponsors dont have embed code formatted correctly)
                        if (strpos(
$embed, 'iframe') !== FALSE &&
                            strpos(
$embed, '</iframe') === FALSE) {
                            
$embed .= '</iframe>';
                        }
                                                
                        
$url        = ($method == 'hotlink') ? $values['flv'] : '';
                        
$categ        = $this->get_category($category$values['title'], $categories$values['tags']);
                        
$tags        = $this->get_tags($values['title'], $values['tags']);
                        
$slug        = prepare_string($values['title'], TRUE, $this->vcfg['slug_max_length']);
                        
$pornstar    = $values['pornstar'];
                        
$time        = time();
                        
                        if (!
$video_id = $vmodel->reload(true)->add(array(
                            'user_id'        => 
$user_id,
                            'title'            => 
$values['title'],
                            'slug'            => 
$slug,
                            'description'    => 
$values['description'],
                            'type'            => 
$type,
                            'embed_code'    => 
$embed,
                            'url'            => 
$url,
                            'channel_id'    => 
$channel_id,
                            'premium'        => 
$premium,
                            'status'        => 5))) {
                            
$progress = sprintf("%01.2f", ($progress+$incr));
                            
$this->update_progress($progress.'^Failed to create database entry...skiping!');
                            continue;
                        }
                        
                        
$this->db->query("UPDATE #__user_activity SET total_videos = total_videos+1 WHERE user_id = ".$user_id." LIMIT 1");
                        
                        
foreach ($categ as $cat_id) {
                            
$cmodel->add_video($cat_id$video_id);
                        }
                        
                        
$tags explode(','$tags);
                        foreach (
$tags as $tag) {
                            
$vmodel->add_tag($video_id$tag);
                        }
                        
                        
$pornstars    explode(','$pornstar);
                        foreach (
$pornstars as $star) {
                            
$vmodel->add_model($video_id$star);
                        }

                        
$conv->log_setup($video_id);
                        if (
$method == 'flv' or $thumb_method == 'generate' or $mobile) {
                            
$this->update_progress($progress.'^Processing: '.$values['title'].' (downloading) ...');
                        
                            
$src         trim($values['flv']);
                            
$ext        VFile::ext($src);
                            
$dst_vid    MEDIA_DIR.'/videos/vid/'.$video_id.'.'.$ext;
                            if (!
VCurl::file($src$dst_vid)) {
                                
$progress sprintf("%01.2f", ($progress+$incr));
                                  
$this->update_progress($progress.'^Failed to download video source file...skiping!');
                                  continue;
                            }
                            
                            if (!
$conv->load($dst_vid)) {
                                
$progress sprintf("%01.2f", ($progress+$incr));
                                
$this->update_progress($progress.'^Failed to load video source file...skiping!');
                                continue;
                            }
                            
                            @
chmod($dst_vid0777);
                        }
                        
                        
$proc            = array(
                            
'flv'        => false,
                            
'mp4'        => false,
                            
'mp4_hd'    => false,
                            
'mobile'    => false,
                            
'server_id'    => 0,
                            
's3'        => 0
                        
);
                        
                        if (
$method == 'flv' && $queue === 0) {    
                            
$this->update_progress($progress.'^Processing: '.$values['title'].' (converting) ...');
                            
                            
$proc VHelper_video_conv::process($video_id$dst_vid$conv);
                            if (!
$proc['mp4'] && !$proc['flv']) {
                                
$progress sprintf("%01.2f", ($progress+$incr));
                                
$this->update_progress($progress.'^Failed to convert video...skiping!');
                                continue;
                            } else {
                                
$ext    = ($proc['mp4']) ? 'mp4' 'flv';
                            }
                                
                            
$size        filesize($dst_vid);
                            
$duration    $conv->data['duration_seconds'];
                        } else {
                            
$size         0;
                            
$duration    = (!empty($values['duration'])) ? (float) $values['duration'] : 0;
                        }
                        
                        if (
$method == 'hotlink' && $mobile) {
                            if (
$this->vcfg['mobile_convert'] && $mobile) {
                                
$this->update_progress($progress.'^Processing: '.$values['title'].' (converting to Mobile) ...');
                                  
$dst_mobile MEDIA_DIR.'/videos/mobile/'.$video_id.'.mp4';
                                  if (
$conv->convert_to_mobile($dst_vid$dst_mobile)) {
                                      
$conv->log('Video converted to Mobile.');
                                      
$proc['mobile']    = true;
                                      @
chmod($dst_mobile0777);
                                  } else {
                                      
$conv->log('Failed to convert video to Mobile!');
                                  }
                            }

                              if (
$this->vcfg['multi_server'] == '1') {
                                  
$conv->log('Initializing multi-server ...');
                                  
VHelper::load('module.video.server');
                                  
$server VHelper_video_server::get(FALSE1);
                                  if (
$server && 
                                      
VHelper_video_server::process_upload($server$video_idfalsefalsefalsetrue$conv)) {
                                      
$proc['server_id'] = (int) $server['server_id'];
                                  }
                              }

                              if (
$this->vcfg['amazon_s3'] == '1') {
                                  
$conv->log('Initializaing Amazon S3 storage ...');
                                  
VHelper::load('module.video.s3');
                                  if (
VHelper_video_s3::process_upload($video_idfalsefalsefalsefalse$conv)) {
                                      
$proc['s3'] = 1;
                                  }
                              }
                        }
                        
                        
$thumbs 0;
                        if (
$thumb_method == 'generate') {
                            if (
$queue === 0) {
                                
$this->update_progress($progress.'^Processing: '.$values['title'].' (extracting thumbs) ...');
                            
                                if (!
$thumbs $conv->extract_thumbs($dst_vid$video_id)) {
                                    
$thumbs        0;
                                    
$progress     sprintf("%01.2f", ($progress+$incr));
                                    
$this->update_progress($progress.'^Failed to extract video thumbs...skiping!');
                                    continue;
                                }
                            }
                        } else {
                            
$this->update_progress($progress.'^Processing: '.$values['title'].' (downloading thumb) ...');
                            
                            
// lets get more than one URL here
                            
$urls        = array();
                            if (
strpos($values['thumb'], ';') !== FALSE) {
                                
$urls    explode(';'$values['thumb']);
                            } else {
                                
$urls[]    = $values['thumb'];
                            }
                            
                            
$thumbs    1;
                            foreach (
$urls as $thumb) {
                                
$thumb_dir    MEDIA_DIR.'/videos/tmb/'.path($video_id);
                                
VFolder::create($thumb_dir0777);
                                
$thumb_dst    $thumb_dir.'/'.$thumbs.'.jpg';
                                if (!
VCurl::file(trim($thumb), $thumb_dst)) {
                                    
$progress sprintf("%01.2f", ($progress+$incr));
                                    
$this->update_progress($progress.'^Failed to download video thumb...skiping!');
                                    continue;
                                }
                            
                                if (
RESIZE_THUMB === true) {
                                    
$thumb_tmp TMP_DIR.'/thumbs/'.$video_id.'.jpg';
                                
                                    
$image->clear();
                                    if (!
$image->load($thumb_dst)) {
                                        
$progress sprintf("%01.2f", ($progress+$incr));
                                        
$this->update_progress($progress.'^Failed to load video thumb...skiping!');
                                        continue;
                                    }
                                    
                                      if (!
$image->resize($this->vcfg['thumb_width'], $this->vcfg['thumb_height'], 'EXACT'$thumb_tmp)) {
                                        
$progress sprintf("%01.2f", ($progress+$incr));
                                        
$this->update_progress($progress.'^Failed to resize video thumb...skiping!');
                                        continue;
                                    }
                                    
                                    
rename($thumb_tmp$thumb_dst);
                                }
                                
                                
                                ++
$thumbs;
                            }
                            
                            
                            
$thumbs = ($thumbs === 1) ? : ($thumbs-1);
                            
                            if (
$thumbs 0) {
                                
VHelper::load('module.video.thumb');
                                  
VHelper_video_thumb::upload($video_id$thumbs);
                              }
                        }
                        
                        
$conv->clean();
                        
                        
$this->update_progress($progress.'^Processing: '.$values['title'].' (finalizing) ...');
                        
                        
VF::factory_remove('database');
                        
$this->db VF::factory('database');
                        
                        
$ext         = (isset($ext)) ? $ext 'flv';
                        
$s3            = (isset($proc) && isset($proc['s3'])) ? $proc['s3'] : 0;
                        
$server_id    = (isset($proc) && isset($proc['server_id'])) ? $proc['server_id'] : 0;
                        
$mob        = (isset($proc) && isset($proc['mobile'])) ? $proc['mobile'] : 0;
                        
                          
$o_filename    = ($method == 'flv' OR $method == 'hotlink') ? VFile::name(trim($values['flv'])) : '';
                          
$o_url        = ($method == 'flv' OR $method == 'hotlink') ? trim($values['flv']) : '';
                          
$o_ext        = ($method == 'flv' OR $method == 'hotlink') ? VFile::ext(trim($values['flv'])) : '';
                          
$o_size        = (isset($dst_vid)) ? filesize($dst_vid) : 0;
                          
                          
$vmodel->reload();
                          
$vmodel->add_orig(array(
                              
'video_id'    => $video_id,
                              
'user_id'    => $user_id,
                              
'filename'    => $o_filename,
                              
'ext'        => $o_ext,
                              
'size'        => $o_size,
                              
'method'    => 'csv_'.$method,
                              
'url'        => $o_url
                          
));
                          
                          
$vmodel->update($video_id, array(
                              
'ext'        => $ext,
                              
'size'        => $size,    
                              
'duration'    => $duration,
                              
'mobile'    => $mob,
                              
'thumb'        => (string) 1,
                              
'thumbs'    => $thumbs,
                              
'server'    => $server_id,
                              
's3'        => $s3,
                              
'status'    => ($queue) ? $status
                          
));
                          
                        if (
$queue) {
                              
$vmodel->add_queue($video_id$status);
                        }                          
                          
                        if (
$channel_id !== 0) {
                            
$cmodel->reload(true)->add_video($channel_id$video_id);
                        }
                        
                        
$vmodel->reload('true')->add_csv($video_id$unique_id);
                        
                        
// thumbs are generated, lets delete the files from the local server
                        // if multi-server was enabled
                        
if ($server_id !== OR $s3 === 1) {
                            if (isset(
$dst_flv)) {
                                
VFile::delete($dst_flv);
                            }
                            
                            if (isset(
$dst_mp4)) {
                                
VFile::delete($dst_mp4);
                            }
                            
                            if (isset(
$dst)) {
                                
VFile::delete($dst);
                            }
                        }

                        
// delete the original video from the videos/vid folder
                        
if (isset($dst_vid) && !$queue) {
                            
VFile::delete($dst_vid);
                        }
                        
                        
$progress sprintf("%01.2f", ($progress+$incr));
                        ++
$success;                        
                    }
                    
                    if (!
$errors) {
                        
$messages[] = 'Successfuly imported '.$success.' videos!';
                        
VFile::delete(VFile::safe(TMP_DIR.'/logs/'.$this->unique.'_mass_csv_progress.log'));
                    }
                }
            }
        }
        
        
$tpl    VF::factory('template');
        
$tpl->menu            'video';
        
$tpl->submenu        'video_add';
        
$tpl->extramenu        'csv';
        
$tpl->meta_title    'Admin::Video::CSV';
        
$tpl->errors        $errors;
        
$tpl->messages        $messages;
        
$tpl->warnings        $warnings;
        
$tpl->option        $option;
        
$tpl->orders        $orders;
        
$tpl->unique        $unique;
        
$tpl->categories    $categories;
        
$tpl->channels        $channels;
        
$tpl->load(array('header''csv''footer'));
        
$tpl->display();
    }
    
    private function 
update_progress($data)
    {
        
VFile::write(VFile::safe(TMP_DIR.'/logs/'.$this->unique.'_mass_csv_progress.log'), $data);
    }
    
    private function 
get_category($category$title$categories$tags='')
    {
        if (!empty(
$category)) {
            if (
is_array($category)) {
                return 
$category;
            }
            
            return array((int) 
$category);
        }
        
        
$cats = array();
        foreach (
$categories as $category) {
            
$cat_id = (int) $category['cat_id'];
            
$terms    explode(','$category['auto_term']);
            
            foreach (
$terms as $term) {
                
$term trim($term);
                
                if (
stripos($title$term) !== FALSE) {
                    if (!
in_array($cat_id$cats)) {
                        
$cats[] = $cat_id;
                    }
                }
                
                if (!empty(
$tags)) {
                    if (
stripos($tags$term) !== FALSE) {
                        if (!
in_array($cat_id$cats)) {
                            
$cats[] = $cat_id;
                        }
                    }
                }
            }
        }
        
        if (!
$cats) {
            
// no category found? return last category...should be Uncategorized!
            
$cats[] = $cat_id;
        }
        
        return 
$cats;
    }
    
    private function 
get_tags($title$tags='')
    {
        if (
$tags != '') {
            return 
prepare_tags($tags);
        }
        
        
$title     preg_replace('/[^A-Za-z0-9 ]+/'' 'trim($title));
        
$title     preg_replace('/ss+/'' '$title);
        
$tags    = array();
        
$array    explode(' '$title);
        foreach (
$array as $string) {
            if (
strlen($string) >= 4) {
                
$tags[] = $string;
            }
        }
        
        return 
implode(','$tags);
    }
}
Онлайн: 0
Реклама