public static function Login() { $DB = GetDB(); self::$authenticated = false; self::$superuser = false; self::$username = null; $cookie_settings = self::GetCookieSettings(); if (isset($_REQUEST[self::FIELD_USERNAME])) { if (String::IsEmpty($_REQUEST[self::FIELD_USERNAME])) { self::$error = 'The username field was left blank'; return; } if (String::IsEmpty($_REQUEST[self::FIELD_PASSWORD])) { self::$error = 'The password field was left blank'; return; } $account = $DB->Row('SELECT * FROM `tbx_administrator` WHERE `username`=? AND `password`=?', array($_REQUEST[self::FIELD_USERNAME], sha1($_REQUEST[self::FIELD_PASSWORD]))); if (!$account) { self::$error = 'The supplied username/password combination is not valid'; return; } else { $session = sha1(uniqid(rand(), true)); $DB->Update('INSERT INTO `tbx_administrator_session` VALUES (?,?,?,?,?)', array($account['username'], $session, sha1($_SERVER['HTTP_USER_AGENT']), $_SERVER['REMOTE_ADDR'], time())); $DB->Update('INSERT INTO `tbx_administrator_login_history` VALUES (?,?,?)', array($account['username'], Database_MySQL::Now(), $_SERVER['REMOTE_ADDR'])); setcookie(self::COOKIE_NAME, self::FIELD_USERNAME . '=' . urlencode($account['username']) . '&' . self::FIELD_SESSION . '=' . urlencode($session), $_REQUEST[self::FIELD_REMEMBER] ? time() + self::SESSION_LENGTH : null, $cookie_settings['path'], $cookie_settings['domain']); self::$username = $account['username']; self::$superuser = $account['type'] == self::TYPE_SUPERUSER; self::$privileges = $account['privileges']; self::$authenticated = true; } } else { if (isset($_COOKIE[self::COOKIE_NAME])) { $cookie = array(); parse_str($_COOKIE[self::COOKIE_NAME], $cookie); $DB->Update('DELETE FROM `tbx_administrator_session` WHERE `timestamp` < ?', array(time() - self::SESSION_LENGTH)); $session = $DB->Row('SELECT * FROM `tbx_administrator_session` WHERE `username`=? AND `session`=? AND `browser`=? AND `ip_address`=?', array($cookie[self::FIELD_USERNAME], $cookie[self::FIELD_SESSION], sha1($_SERVER['HTTP_USER_AGENT']), $_SERVER['REMOTE_ADDR'])); if (!$session) { setcookie(self::COOKIE_NAME, false, time() - self::SESSION_LENGTH, $cookie_settings['path'], $cookie_settings['domain']); self::$error = 'Your control panel session has expired'; return; } else { $account = $DB->Row('SELECT * FROM `tbx_administrator` WHERE `username`=?', array($session['username'])); if (!$account) { setcookie(self::COOKIE_NAME, false, time() - self::SESSION_LENGTH, $cookie_settings['path'], $cookie_settings['domain']); self::$error = 'Invalid control panel account'; return; } else { self::$username = $account['username']; self::$superuser = $account['type'] == self::TYPE_SUPERUSER; self::$privileges = $account['privileges']; self::$authenticated = true; } } } } return self::$authenticated; }
// Copyright 2011 JMB Software, Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. require_once 'includes/global.php'; Request::Setup(); if (AuthenticateUser::Login()) { $username = AuthenticateUser::GetUsername(); $video_id = $_REQUEST['video_id']; $reason_id = $_REQUEST['reason_id']; $DB = GetDB(); if ($DB->QueryCount('SELECT COUNT(*) FROM `tbx_video_featured` WHERE `username`=? AND `video_id`=?', array($username, $video_id)) == 0) { StatsRollover(); $DB->Update('INSERT INTO `tbx_video_featured` VALUES (?,?,?,?)', array($video_id, $username, $reason_id, Database_MySQL::Now())); $DB->Update('UPDATE `tbx_video_stat` SET ' . '`today_num_featured`=`today_num_featured`+1,' . '`week_num_featured`=`week_num_featured`+1,' . '`month_num_featured`=`month_num_featured`+1,' . '`total_num_featured`=`total_num_featured`+1 ' . 'WHERE `video_id`=?', array($video_id)); echo _T('Text:Feature request recorded'); } else { echo _T('Validation:You have already featured this video'); } } else { echo _T('Validation:Must be logged in'); }
public function Import() { $imported = 0; $DB = GetDB(); $yt = new Zend_Gdata_YouTube(); $video_feed = $yt->getVideoFeed($this->feed['feed_url']); $entry; foreach ($video_feed as $entry) { // Check for duplicates, and skip if ($DB->QueryCount('SELECT COUNT(*) FROM `tbx_video_feed_history` WHERE `feed_id`=? AND `unique_id`=?', array($this->feed['feed_id'], $entry->getVideoId()))) { continue; } // Video is not embeddable, skip if (!$entry->isVideoEmbeddable()) { continue; } // Setup defaults $video = $this->defaults; $video['title'] = $entry->getVideoTitle(); $video['description'] = $entry->getVideoDescription(); $video['tags'] = Tags::Format(implode(' ', $entry->getVideoTags())); $video['duration'] = $entry->getVideoDuration(); // Get preview images $times = array(); $thumbs = array(); foreach ($entry->getVideoThumbnails() as $thumb) { if (!isset($times[$thumb['time']])) { $times[$thumb['time']] = true; $thumbs[] = array('thumbnail' => $thumb['url']); } } $clip = array('type' => 'Embed', 'clip' => '<object width="640" height="385">' . '<param name="movie" value="http://www.youtube.com/v/' . $entry->getVideoId() . '&fs=1"></param>' . '<param name="allowFullScreen" value="true"></param>' . '<param name="allowscriptaccess" value="always"></param>' . '<embed src="http://www.youtube.com/v/' . $entry->getVideoId() . '&fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="640" height="385"></embed>' . '</object>'); $best_category = GetBestCategory(join(' ', array($video['title'], $video['description'], $video['tags']))); if (!empty($best_category)) { $video['category_id'] = $best_category; } $video['video_id'] = DatabaseAdd('tbx_video', $video); DatabaseAdd('tbx_video_custom', $video); DatabaseAdd('tbx_video_stat', $video); if (!$video['is_private']) { Tags::AddToFrequency($video['tags']); } UpdateCategoryStats($video['category_id']); $video_dir = new Video_Dir(Video_Dir::DirNameFromId($video['video_id'])); $clip['video_id'] = $video['video_id']; DatabaseAdd('tbx_video_clip', $clip); $display_thumbnail = null; foreach ($thumbs as $thumb) { $thttp = new HTTP(); if ($thttp->Get($thumb['thumbnail'], $thumb['thumbnail'])) { $temp_file = $video_dir->AddTempFromVar($thttp->body, JPG_EXTENSION); $imgsize = @getimagesize($temp_file); if ($imgsize !== false) { if (Video_Thumbnail::CanResize()) { $local_filename = Video_Thumbnail::Resize($temp_file, Config::Get('thumb_size'), Config::Get('thumb_quality'), $video_dir->GetThumbsDir()); } else { $local_filename = $video_dir->AddThumbFromFile($temp_file, JPG_EXTENSION); } $local_filename = str_replace(Config::Get('document_root'), '', $local_filename); $thumb_id = DatabaseAdd('tbx_video_thumbnail', array('video_id' => $video['video_id'], 'thumbnail' => $local_filename)); if (empty($display_thumbnail)) { $display_thumbnail = $thumb_id; } } else { unlink($temp_file); } } } if (!empty($display_thumbnail)) { $DB->Update('UPDATE `tbx_video` SET `display_thumbnail`=? WHERE `video_id`=?', array($display_thumbnail, $video['video_id'])); } $DB->Update('INSERT INTO `tbx_video_feed_history` VALUES (?,?)', array($this->feed['feed_id'], $entry->getVideoId())); $imported++; } $DB->Update('UPDATE `tbx_video_feed` SET `date_last_read`=? WHERE `feed_id`=?', array(Database_MySQL::Now(), $this->feed['feed_id'])); UpdateSponsorStats($this->feed['sponsor_id']); return $imported; }
public static function Run() { chdir(realpath(dirname(__FILE__) . '/../')); require_once 'includes/global.php'; $doc_root = Config::Get('document_root'); $DB = GetDB(); self::Log('Starting...'); self::MarkRunning(); while (true) { // See if we were requested to stop if (self::ShouldStop()) { self::Log('User requested stop...'); break; } self::Ping(); $DB->Connect(); $queue_item = $DB->Row('SELECT *,`tbx_conversion_queue`.`video_id` AS `video_id`,`tbx_conversion_queue`.`queued` AS `queued` FROM `tbx_conversion_queue` LEFT JOIN ' . '`tbx_thumb_queue` USING (`video_id`) WHERE `tbx_thumb_queue`.`video_id` IS NULL ORDER BY `tbx_conversion_queue`.`queued` LIMIT 1'); if (!empty($queue_item)) { $video = $DB->Row('SELECT * FROM `tbx_video` WHERE `video_id`=?', array($queue_item['video_id'])); if (!empty($video)) { $DB->Update('UPDATE `tbx_video` SET `conversion_failed`=0 WHERE `video_id`=?', array($video['video_id'])); $DB->Update('UPDATE `tbx_conversion_queue` SET `date_started`=? WHERE `video_id`=?', array(Database_MySQL::Now(), $video['video_id'])); $clips = $DB->FetchAll('SELECT * FROM `tbx_video_clip` WHERE `video_id`=? ORDER BY `clip_id`', array($queue_item['video_id'])); $dir = new Video_Dir(Video_Dir::DirNameFromId($video['video_id'])); Video_Converter::SetLogFile($dir->GetBaseDir() . '/convert.log'); $convert_start = time(); $conversion_failed = false; foreach ($clips as $clip) { $clip_path = null; $old_path = null; try { // Stored locally, move to originals directory if ($clip['clip'][0] == '/') { $old_path = $doc_root . $clip['clip']; $clip_path = $dir->AddOriginalFromFile($old_path); } else { $http = new HTTP(); if ($http->Get($clip['clip'], $clip['clip'])) { $clip_path = $dir->AddOriginalFromVar($http->body, File::Extension($clip['clip'])); } else { throw new BaseException('Could not download clip for conversion: ' . $http->error); } } $output_file = Video_Converter::Convert($clip_path, $dir->GetProcessingDir(), Config::Get('video_format'), Config::Get('video_bitrate'), Config::Get('audio_bitrate'), Config::Get('video_size'), array('ConversionQueue', 'Ping')); $converted_video = $dir->AddClipFromFile($output_file); $DB->Disconnect(); $DB->Connect(); $DB->Update('UPDATE `tbx_video_clip` SET `clip`=?,`filesize`=? WHERE `clip_id`=?', array(str_replace($doc_root, '', $converted_video), filesize($converted_video), $clip['clip_id'])); } catch (Exception $e) { if (!empty($old_path) && !empty($clip_path)) { rename($clip_path, $old_path); } Video_Converter::Log($e->getMessage() . (strtolower(get_class($e)) == 'baseexception' ? $e->getExtras() : '') . "\n" . $e->getTraceAsString()); $conversion_failed = true; } } $convert_end = time(); $dir->ClearProcessing(); $dir->ClearTemp(); $DB->Connect(); $DB->Update('DELETE FROM `tbx_conversion_queue` WHERE `video_id`=?', array($queue_item['video_id'])); if ($conversion_failed) { self::UpdateStatsProcessed($convert_start, $convert_end, $queue_item['queued'], true); $DB->Update('UPDATE `tbx_video` SET `conversion_failed`=1 WHERE `video_id`=?', array($video['video_id'])); } else { // Update stats self::UpdateStatsProcessed($convert_start, $convert_end, $queue_item['queued']); $status = empty($video['next_status']) ? STATUS_ACTIVE : $video['next_status']; // Set video status $DB->Update('UPDATE `tbx_video` SET `status`=? WHERE `video_id`=?', array($status, $video['video_id'])); if ($video['status'] != $status && $status == STATUS_ACTIVE && !$video['is_private']) { Tags::AddToFrequency($video['tags']); } UpdateCategoryStats($video['category_id']); } } } else { break; } } self::MarkStopped(); self::Log('Exiting...'); }
function tbxUpdateStats($video_id) { global $cookie, $t; $count_as_view = true; $stats = array('vv' => ''); if (isset($_COOKIE[STATS_COOKIE])) { $stats = unserialize($_COOKIE[STATS_COOKIE]); if (strstr(",{$stats['vv']},", ",{$video_id},")) { $count_as_view = false; } } if ($count_as_view) { StatsRollover(); $DB = GetDB(); $DB->Update('UPDATE `tbx_video_stat` SET ' . '`date_last_view`=?,' . '`today_num_views`=`today_num_views`+1,' . '`week_num_views`=`week_num_views`+1,' . '`month_num_views`=`month_num_views`+1,' . '`total_num_views`=`total_num_views`+1 ' . 'WHERE `video_id`=?', array(Database_MySQL::Now(), $video_id)); $DB->Update('UPDATE `tbx_user_stat` JOIN `tbx_video` USING (`username`) SET ' . '`today_video_views`=`today_video_views`+1,' . '`week_video_views`=`week_video_views`+1,' . '`month_video_views`=`month_video_views`+1,' . '`total_video_views`=`total_video_views`+1 ' . 'WHERE `video_id`=?', array($video_id)); if (!empty($cookie) && isset($cookie['username'])) { $DB->Update('UPDATE `tbx_user_stat` SET ' . '`today_videos_watched`=`today_videos_watched`+1,' . '`week_videos_watched`=`week_videos_watched`+1,' . '`month_videos_watched`=`month_videos_watched`+1,' . '`total_videos_watched`=`total_videos_watched`+1 ' . 'WHERE `username`=?', array($cookie['username'])); } else { $ip = sprintf('%u', ip2long($_SERVER['REMOTE_ADDR'])); if ($DB->Update('UPDATE `tbx_guest_usage` SET `watched`=`watched`+1 WHERE `ip`=?', array($ip)) == 0) { $DB->Update('INSERT INTO `tbx_guest_usage` VALUES (?,0,1)', array($ip)); } } $stats['vv'] .= ",{$_GET['id']}"; setcookie(STATS_COOKIE, serialize($stats), time() + 90 * 86400, Config::Get('cookie_path'), Config::Get('cookie_domain')); } }
function tbxRegister() { global $t; $DB = GetDB(); $v = Validator::Create(); $v->Register($_REQUEST['username'], Validator_Type::NOT_EMPTY, _T('Validation:Required', _T('Label:Username'))); $v->Register($_REQUEST['username'], Validator_Type::IS_ALPHANUM, _T('Validation:Alphanumeric', _T('Label:Username'))); $v->Register($DB->QueryCount('SELECT COUNT(*) FROM `tbx_user` WHERE `username`=?', array($_REQUEST['username'])), Validator_Type::IS_ZERO, _T('Validation:Username Taken')); $v->Register($_REQUEST['password'], Validator_Type::NOT_EMPTY, _T('Validation:Required', _T('Label:Password'))); $v->Register($_REQUEST['password'], Validator_Type::LENGTH_GREATER_EQ, _T('Validation:Length Greater Equal', _T('Label:Password'), 8), 8); $v->Register($_REQUEST['password'], Validator_Type::EQUALS, _T('Validation:Passwords do not match'), $_REQUEST['confirm_password']); $v->Register($_REQUEST['email'], Validator_Type::NOT_EMPTY, _T('Validation:Required', _T('Label:E-mail'))); $v->Register($_REQUEST['email'], Validator_Type::VALID_EMAIL, _T('Validation:E-mail', _T('Label:E-mail'))); $v->Register($DB->QueryCount('SELECT COUNT(*) FROM `tbx_user` WHERE `email`=?', array($_REQUEST['email'])), Validator_Type::IS_ZERO, _T('Validation:E-mail Taken')); $v->Register($_REQUEST['name'], Validator_Type::NOT_EMPTY, _T('Validation:Required', _T('Label:Name'))); $v->Register(empty($_REQUEST['birth_month']) || empty($_REQUEST['birth_day']) || empty($_REQUEST['birth_year']), Validator_Type::IS_FALSE, _T('Validation:Birthday Required')); $v->Register($_REQUEST['gender'], Validator_Type::NOT_EMPTY, _T('Validation:Required', _T('Label:Gender'))); $v->Register($_REQUEST['terms'], Validator_Type::NOT_EMPTY, _T('Validation:Accept Terms')); // Register user-defined field validators $schema = GetDBSchema(); $v->RegisterFromXml($schema->el('//table[name="tbx_user_custom"]'), 'user', 'create'); // Check blacklist $_REQUEST['ip_address'] = $_SERVER['REMOTE_ADDR']; if (($match = Blacklist::Match($_REQUEST, Blacklist::ITEM_USER)) !== false) { $v->SetError(_T('Validation:Blacklisted', $match['match'])); } // Check CAPTCHA if (Config::Get('flag_captcha_on_signup')) { Captcha::Verify(); } if (!$v->Validate()) { $t->Assign('g_errors', $v->GetErrors()); $t->Assign('g_form', $_REQUEST); return tbxDisplayRegister(); } // Format data $_REQUEST['date_birth'] = $_REQUEST['birth_year'] . '-' . $_REQUEST['birth_month'] . '-' . $_REQUEST['birth_day']; $_REQUEST['date_created'] = Database_MySQL::Now(); $_REQUEST['user_level_id'] = $DB->QuerySingleColumn('SELECT `user_level_id` FROM `tbx_user_level` WHERE `is_default`=1'); $_REQUEST['password'] = sha1($_REQUEST['password']); // Strip HTML tags if (Config::Get('flag_user_strip_tags')) { $_REQUEST = String::StripTags($_REQUEST); } // Prepare fields for database Form_Prepare::Standard('tbx_user'); Form_Prepare::Standard('tbx_user_stat'); Form_Prepare::Custom('tbx_user_custom_schema', 'on_submit'); // Setup account status $_REQUEST['status'] = STATUS_ACTIVE; $email_template = 'email-user-added.tpl'; if (Config::Get('flag_user_confirm_email')) { $_REQUEST['status'] = STATUS_SUBMITTED; $email_template = 'email-user-confirm.tpl'; } else { if (Config::Get('flag_user_approve')) { $_REQUEST['status'] = STATUS_PENDING; $email_template = 'email-user-pending.tpl'; } } // Add data to the database DatabaseAdd('tbx_user', $_REQUEST); DatabaseAdd('tbx_user_custom', $_REQUEST); DatabaseAdd('tbx_user_stat', $_REQUEST); if ($_REQUEST['status'] == STATUS_SUBMITTED) { $_REQUEST['register_code'] = sha1(uniqid(mt_rand(), true)); $_REQUEST['timestamp'] = time(); DatabaseAdd('tbx_user_register_code', $_REQUEST); $t->Assign('g_code', $_REQUEST['register_code']); } $t->AssignByRef('g_user', $_REQUEST); $t->AssignByRef('g_form', $_REQUEST); // Send e-mail message $m = new Mailer(); $m->Mail($email_template, $t, $_REQUEST['email'], $_REQUEST['name']); // Display confirmation $t->Display('user-register-complete.tpl'); }
public function Import() { $imported = 0; $http = new HTTP(); if ($http->Get($this->feed['feed_url'])) { $xml = simplexml_load_string($this->ToUTF8($http->body), 'XML_Element', LIBXML_NOERROR, LIBXML_NOWARNING, LIBXML_NOCDATA); if ($xml !== false) { $DB = GetDB(); foreach ($xml->xpath('//videos/video') as $xvideo) { // Check for duplicates, and skip if ($DB->QueryCount('SELECT COUNT(*) FROM `tbx_video_feed_history` WHERE `feed_id`=? AND `unique_id`=?', array($this->feed['feed_id'], $xvideo->id->val()))) { continue; } // Setup defaults $video = $this->defaults; $video['title'] = $xvideo->title->val(); $video['description'] = $xvideo->description->val(); $video['tags'] = Tags::Format($xvideo->tags->val()); if (empty($video['description'])) { $video['description'] = $video['title']; } // Process <clips> $clips = array(); $screens = array(); foreach ($xvideo->xpath('./clips/clip') as $xclip) { $video['duration'] += $xclip->duration; $clip_url = $xvideo->clip_url->val(); $flv = $xclip->flv->val(); // Account for malformed feeds where the clip_url contains the URL to the video // file rather than the required root URL if (strstr($clip_url, $flv) === false) { $clip_url = $clip_url . $flv; } $clips[] = array('type' => 'URL', 'clip' => $clip_url); foreach ($xclip->xpath('./screens/screen') as $xscreen) { $screen_url = $xvideo->screen_url->val(); $screen = $xscreen->val(); // Account for malformed feeds where the screen_url contains the URL to the image // file rather than the required root URL if (strstr($screen_url, $screen) === false) { $screen_url = $screen_url . $screen; } $screens[] = array('thumbnail' => $screen_url); } } if (count($clips) > 0) { $best_category = GetBestCategory(join(' ', array($video['title'], $video['description'], $video['tags']))); if (!empty($best_category)) { $video['category_id'] = $best_category; } if ($this->feed['flag_convert']) { $video['status'] = STATUS_QUEUED; $video['next_status'] = $this->feed['status']; } $video['video_id'] = DatabaseAdd('tbx_video', $video); DatabaseAdd('tbx_video_custom', $video); DatabaseAdd('tbx_video_stat', $video); if (!$video['is_private']) { Tags::AddToFrequency($video['tags']); } $video['queued'] = time(); if ($this->feed['flag_convert']) { DatabaseAdd('tbx_conversion_queue', $video); } if ($this->feed['flag_thumb']) { DatabaseAdd('tbx_thumb_queue', $video); } UpdateCategoryStats($video['category_id']); $video_dir = new Video_Dir(Video_Dir::DirNameFromId($video['video_id'])); foreach ($clips as $clip) { $clip['video_id'] = $video['video_id']; DatabaseAdd('tbx_video_clip', $clip); } $display_thumbnail = null; foreach ($screens as $screen) { $thttp = new HTTP(); if ($thttp->Get($screen['thumbnail'], $screen['thumbnail'])) { $temp_file = $video_dir->AddTempFromVar($thttp->body, JPG_EXTENSION); $imgsize = @getimagesize($temp_file); if ($imgsize !== false) { if (Video_Thumbnail::CanResize()) { $local_filename = Video_Thumbnail::Resize($temp_file, Config::Get('thumb_size'), Config::Get('thumb_quality'), $video_dir->GetThumbsDir()); } else { $local_filename = $video_dir->AddThumbFromFile($temp_file, JPG_EXTENSION); } $local_filename = str_replace(Config::Get('document_root'), '', $local_filename); $thumb_id = DatabaseAdd('tbx_video_thumbnail', array('video_id' => $video['video_id'], 'thumbnail' => $local_filename)); if (empty($display_thumbnail)) { $display_thumbnail = $thumb_id; } } } } $video_dir->ClearTemp(); if (!empty($display_thumbnail)) { $DB->Update('UPDATE `tbx_video` SET `display_thumbnail`=? WHERE `video_id`=?', array($display_thumbnail, $video['video_id'])); } $DB->Update('INSERT INTO `tbx_video_feed_history` VALUES (?,?)', array($this->feed['feed_id'], $xvideo->id->val())); $imported++; } } $DB->Update('UPDATE `tbx_video_feed` SET `date_last_read`=? WHERE `feed_id`=?', array(Database_MySQL::Now(), $this->feed['feed_id'])); UpdateSponsorStats($this->feed['sponsor_id']); } // Start up the thumbnail and converson queues if needed if (!Config::Get('flag_using_cron')) { if ($this->feed['flag_convert']) { ConversionQueue::Start(); } if ($this->feed['flag_thumb']) { ThumbQueue::Start(); } } } return $imported; }
public function __construct($feed) { $this->feed = $feed; $this->defaults = array('username' => $this->feed['username'], 'date_added' => Database_MySQL::Now(), 'date_recorded' => null, 'location_recorded' => null, 'source_url' => null, 'status' => $this->feed['status'], 'category_id' => $this->feed['category_id'], 'sponsor_id' => $this->feed['sponsor_id'], 'duration' => 0, 'is_private' => $this->feed['is_private'], 'allow_comments' => $this->feed['allow_comments'], 'allow_ratings' => $this->feed['allow_ratings'], 'allow_embedding' => $this->feed['allow_embedding']); $this->defaults['username'] = String::Nullify($this->defaults['username']); }
function tbxVideoFeature($video) { if (!$video['is_featured']) { $DB = GetDB(); $DB->Update('UPDATE `tbx_video` SET `is_featured`=1,`date_last_featured`=? WHERE `video_id`=?', array(Database_MySQL::Now(), $video['video_id'])); return true; } return false; }
public static function Import($settings) { $DB = GetDB(); ProgressBarShow('pb-import'); $file = TEMP_DIR . '/' . File::Sanitize($settings['import_file']); $fp = fopen($file, 'r'); $filesize = filesize($file); $line = $read = $imported = 0; $expected = count($settings['fields']); while (!feof($fp)) { $line++; $string = fgets($fp); $read += strlen($string); $data = explode($settings['delimiter'], trim($string)); ProgressBarUpdate('pb-import', $read / $filesize * 100); // Line does not have the expected number of fields if (count($data) != $expected) { continue; } $video = array(); $defaults = array('category_id' => $settings['category_id'], 'sponsor_id' => $settings['sponsor_id'], 'username' => $settings['username'], 'duration' => Format::DurationToSeconds($settings['duration']), 'status' => $settings['status'], 'next_status' => $settings['status'], 'allow_comments' => $settings['allow_comments'], 'allow_ratings' => $settings['allow_ratings'], 'allow_embedding' => $settings['allow_embedding'], 'is_private' => $settings['is_private'], 'date_added' => Database_MySQL::Now(), 'is_featured' => 0, 'is_user_submitted' => 0, 'conversion_failed' => 0, 'tags' => null, 'title' => null, 'description' => null); foreach ($settings['fields'] as $index => $field) { if (!empty($field)) { $video[$field] = trim($data[$index]); } } // Setup clips $clips = array(); $thumbs = array(); $clip_type = 'URL'; if (isset($video['embed_code'])) { // Cannot convert or thumbnail from embed code $settings['flag_convert'] = $settings['flag_thumb'] = false; $clips[] = $video['embed_code']; $clip_type = 'Embed'; } else { if (isset($video['gallery_url'])) { $http = new HTTP(); if (!$http->Get($video['gallery_url'])) { // Broken gallery URL, continue continue; } list($thumbs, $clips) = Video_Source_Gallery::ExtractUrls($http->url, $http->body); } else { if (!isset($video['video_url']) && isset($video['base_video_url'])) { if (!preg_match('~/$~', $video['base_video_url'])) { $video['base_video_url'] .= '/'; } foreach (explode(',', $video['video_filename']) as $filename) { $clips[] = $video['base_video_url'] . $filename; } } else { $clips[] = $video['video_url']; } } } // Check for duplicate clips $duplicate = false; foreach ($clips as $clip) { if (!Request::Get('flag_skip_imported_check') && $DB->QueryCount('SELECT COUNT(*) FROM `tbx_imported` WHERE `video_url`=?', array($clip)) > 0) { $duplicate = true; } $DB->Update('REPLACE INTO `tbx_imported` VALUES (?)', array($clip)); } // Dupe found if ($duplicate) { continue; } // Setup thumbs if (!isset($video['gallery_url']) && !isset($video['thumbnail_url']) && isset($video['base_thumbnail_url'])) { if (!preg_match('~/$~', $video['base_thumbnail_url'])) { $video['base_thumbnail_url'] .= '/'; } foreach (explode(',', String::FormatCommaSeparated($video['thumbnail_filename'])) as $filename) { $thumbs[] = $video['base_thumbnail_url'] . $filename; } } else { if (!isset($video['gallery_url']) && isset($video['thumbnail_url'])) { $thumbs[] = $video['thumbnail_url']; } } // Setup duration if (isset($video['duration_seconds'])) { $video['duration'] = $video['duration_seconds']; } else { if (isset($video['duration_formatted'])) { $video['duration'] = Format::DurationToSeconds($video['duration_formatted']); } } // Use description for title if (empty($video['title'])) { $video['title'] = isset($video['description']) ? $video['description'] : ''; } // Use title for description if (empty($video['description'])) { $video['description'] = isset($video['title']) ? $video['title'] : ''; } // Use title for tags if (empty($video['tags'])) { $video['tags'] = isset($video['title']) ? $video['title'] : ''; } // Setup category if (isset($video['category']) && ($category_id = $DB->QuerySingleColumn('SELECT `category_id` FROM `tbx_category` WHERE `name` LIKE ?', array($video['category']))) !== false) { $video['category_id'] = $category_id; } else { if (($category_id = GetBestCategory($video['title'] . ' ' . $video['description'])) !== null) { $video['category_id'] = $category_id; } } // Merge in the defaults $video = array_merge($defaults, $video); // Format tags and convert to UTF-8 $video['tags'] = Tags::Format($video['tags']); $video = String::ToUTF8($video); if (Request::Get('flag_convert')) { $video['status'] = STATUS_QUEUED; } // Add to database $video['video_id'] = DatabaseAdd('tbx_video', $video); DatabaseAdd('tbx_video_custom', $video); DatabaseAdd('tbx_video_stat', $video); if ($video['is_private']) { $video['private_id'] = sha1(uniqid(mt_rand(), true)); DatabaseAdd('tbx_video_private', $video); } if ($video['status'] == STATUS_QUEUED) { $video['queued'] = time(); DatabaseAdd('tbx_conversion_queue', $video); } if (Request::Get('flag_thumb')) { $video['queued'] = time(); DatabaseAdd('tbx_thumb_queue', $video); } if ($video['status'] == STATUS_ACTIVE && !$video['is_private']) { Tags::AddToFrequency($video['tags']); } // Add clips foreach ($clips as $clip) { DatabaseAdd('tbx_video_clip', array('video_id' => $video['video_id'], 'type' => $clip_type, 'clip' => $clip)); } $dir = new Video_Dir(Video_Dir::DirNameFromId($video['video_id'])); // Process thumbs $thumb_ids = array(); foreach ($thumbs as $thumb) { $http = new HTTP(); if ($http->Get($thumb, $thumb)) { if (Video_Thumbnail::CanResize()) { $thumb_temp = $dir->AddTempFromVar($http->body, 'jpg'); $thumb_file = Video_Thumbnail::Resize($thumb_temp, Config::Get('thumb_size'), Config::Get('thumb_quality'), $dir->GetThumbsDir()); } else { $thumb_file = $dir->AddThumbFromVar($http->body); } if (!empty($thumb_file)) { $thumb_ids[] = DatabaseAdd('tbx_video_thumbnail', array('video_id' => $video['video_id'], 'thumbnail' => str_replace(Config::Get('document_root'), '', $thumb_file))); } } } // Determine number of thumbnails and select random display thumbnail $num_thumbnails = count($thumb_ids); $display_thumbnail = null; if ($num_thumbnails > 0) { // Select display thumbnail randomly from the first 40% $display_thumbnail = $thumb_ids[rand(0, floor(0.4 * $num_thumbnails))]; } DatabaseUpdate('tbx_video', array('video_id' => $video['video_id'], 'num_thumbnails' => $num_thumbnails, 'display_thumbnail' => $display_thumbnail)); $imported++; } fclose($fp); UpdateCategoryStats(); UpdateSponsorStats($settings['sponsor_id']); $t = new Template(); $t->ClearCache('categories.tpl'); ProgressBarHide('pb-import', NumberFormatInteger($imported) . ' videos have been imported!'); // Start up the thumbnail and converson queues if needed if (!Config::Get('flag_using_cron')) { if (Request::Get('flag_convert')) { ConversionQueue::Start(); } if (Request::Get('flag_thumb')) { ThumbQueue::Start(); } } File::Delete($file); }
// Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. require_once 'includes/global.php'; Request::Setup(); if (AuthenticateUser::Login()) { $username = AuthenticateUser::GetUsername(); $video_id = $_REQUEST['video_id']; $add = $_REQUEST['add']; $DB = GetDB(); if ($add) { if ($DB->QueryCount('SELECT COUNT(*) FROM `tbx_user_favorite` WHERE `username`=? AND `video_id`=?', array($username, $video_id)) == 0) { $DB->Update('INSERT INTO `tbx_user_favorite` VALUES (?,?)', array($username, $video_id)); if ($DB->QueryCount('SELECT COUNT(*) FROM `tbx_video_favorited` WHERE `video_id`=? AND `username`=?', array($video_id, $username)) == 0) { StatsRollover(); $DB->Update('INSERT INTO `tbx_video_favorited` VALUES (?,?,?)', array($video_id, $username, Database_MySQL::Now())); $DB->Update('UPDATE `tbx_video_stat` SET ' . '`today_num_favorited`=`today_num_favorited`+1,' . '`week_num_favorited`=`week_num_favorited`+1,' . '`month_num_favorited`=`month_num_favorited`+1,' . '`total_num_favorited`=`total_num_favorited`+1 ' . 'WHERE `video_id`=?', array($video_id)); } echo _T('Text:Favorite added'); } else { echo _T('Text:Favorite exists'); } } else { $DB->Update('DELETE FROM `tbx_user_favorite` WHERE `username`=? AND `video_id`=?', array($username, $video_id)); echo _T('Text:Favorite removed'); } } else { echo _T('Validation:Must be logged in'); }
function ActivateScheduledVideos() { $DB = GetDB(); $args = ParseCommandLine(); $queries = array(); if (!isset($args['sort']) || empty($args['sort'])) { $args['sort'] = 'RAND()'; } if (!isset($args['sort-direction']) || empty($args['sort-direction'])) { $args['sort-direction'] = SQL::SORT_ASC; } if (isset($args['amount'])) { $sb = new SQL_SelectBuilder('tbx_video'); $sb->AddSelectField('`video_id`'); $sb->AddSelectField('`tags`'); $sb->AddWhere('tbx_video.status', SQL::EQUALS, STATUS_SCHEDULED); $sb->AddOrder($args['sort'], $args['sort-direction']); $sb->SetLimit($args['amount']); $queries[] = $DB->Prepare($sb->Generate(), $sb->Binds()); } else { if (isset($args['amount-per-sponsor'])) { $result = $DB->Query('SELECT `sponsor_id` FROM `tbx_sponsor`'); while ($sponsor = $DB->NextRow($result)) { $sb = new SQL_SelectBuilder('tbx_video'); $sb->AddSelectField('`video_id`'); $sb->AddSelectField('`tags`'); $sb->AddWhere('tbx_sponsor.sponsor_id', SQL::EQUALS, $sponsor['sponsor_id']); $sb->AddWhere('tbx_video.status', SQL::EQUALS, STATUS_SCHEDULED); $sb->AddOrder($args['sort'], $args['sort-direction']); $sb->SetLimit($args['amount-per-sponsor']); $queries[] = $DB->Prepare($sb->Generate(), $sb->Binds()); } $DB->Free($result); } else { if (isset($args['amount-per-category'])) { $result = $DB->Query('SELECT `category_id` FROM `tbx_category`'); while ($category = $DB->NextRow($result)) { $sb = new SQL_SelectBuilder('tbx_video'); $sb->AddSelectField('`video_id`'); $sb->AddSelectField('`tags`'); $sb->AddWhere('tbx_video.category_id', SQL::EQUALS, $category['category_id']); $sb->AddWhere('tbx_video.status', SQL::EQUALS, STATUS_SCHEDULED); $sb->AddOrder($args['sort'], $args['sort-direction']); $sb->SetLimit($args['amount-per-category']); $queries[] = $DB->Prepare($sb->Generate(), $sb->Binds()); } $DB->Free($result); } else { throw new BaseException('One of --amount, --amount-per-sponsor or --amount-per-category must be specified'); } } } foreach ($queries as $query) { $result = $DB->Query($query); while ($video = $DB->NextRow($result)) { $DB->Update('UPDATE `tbx_video` SET `status`=?,`date_added`=? WHERE `video_id`=?', array(STATUS_ACTIVE, Database_MySQL::Now(), $video['video_id'])); Tags::AddToFrequency($video['tags']); } $DB->Free($result); } UpdateCategoryStats(); }
<?php $DB = GetDB(); $defaults = array('date_created' => Database_MySQL::Now(), 'status' => STATUS_ACTIVE, 'user_level_id' => $DB->QuerySingleColumn('SELECT `user_level_id` FROM `tbx_user_level` WHERE `is_default`=1')); $_REQUEST = array_merge($defaults, $_REQUEST); ?> <div id="dialog-header" class="ui-widget-header ui-corner-all"> <div id="dialog-close"></div> <?php echo isset($editing) ? 'Update a User' : 'Add a User'; ?> </div> <form method="post" action="ajax.php" enctype="multipart/form-data"> <div id="dialog-panel"> <div style="padding: 8px;"> <div class="fieldset"> <div class="legend">Default Fields</div> <div id="dialog-help"> <a href="docs/cp-user.html" target="_blank"><img src="images/help-22x22.png" alt="Help" title="Help" border="0" /></a> </div> <div class="field"> <label>Username:</label> <?php if (isset($editing)) { ?> <span class="text-container"> <?php
// Check blacklist $_REQUEST['ip_address'] = $_SERVER['REMOTE_ADDR']; if (($match = Blacklist::Match($_REQUEST, Blacklist::ITEM_COMMENT)) !== false) { $v->SetError(_T('Validation:Blacklisted', $match['match'])); } // Validate CAPTCHA if (Config::Get('flag_captcha_on_comment')) { Captcha::Verify(); } if (!$v->Validate()) { echo join('<br />', $v->GetErrors()); return; } $_REQUEST['username'] = $username; $_REQUEST['status'] = $video['allow_comments'] == COMMENTS_APPROVE ? STATUS_PENDING : STATUS_ACTIVE; $_REQUEST['date_commented'] = Database_MySQL::Now(); // Strip HTML tags if (Config::Get('flag_comment_strip_tags')) { $_REQUEST = String::StripTags($_REQUEST); } DatabaseAdd('tbx_video_comment', $_REQUEST); if ($_REQUEST['status'] == STATUS_ACTIVE) { StatsRollover(); $DB->Update('UPDATE `tbx_user_stat` SET ' . '`today_comments_submitted`=`today_comments_submitted`+1, ' . '`week_comments_submitted`=`week_comments_submitted`+1, ' . '`month_comments_submitted`=`month_comments_submitted`+1, ' . '`total_comments_submitted`=`total_comments_submitted`+1 ' . 'WHERE `username`=?', array($username)); $DB->Update('UPDATE `tbx_video_stat` SET ' . '`today_num_comments`=`today_num_comments`+1,' . '`week_num_comments`=`week_num_comments`+1,' . '`month_num_comments`=`month_num_comments`+1,' . '`total_num_comments`=`total_num_comments`+1 ' . 'WHERE `video_id`=?', array($video_id)); // Clear first 5 pages of cache $t = new Template(); for ($i = 1; $i <= 5; $i++) { $t->ClearCache('video-comments.tpl', $video_id . $i); $t->ClearCache('video-comments-iframe.tpl', $video_id . $i); }
<?php $si = ServerInfo::GetCached(); $defaults = array('date_added' => Database_MySQL::Now(), 'status' => STATUS_ACTIVE, 'allow_comments' => 'Yes - Add Immediately', 'allow_ratings' => 1, 'allow_embedding' => 1, 'is_private' => 0); $_REQUEST = array_merge($defaults, $_REQUEST); $DB = GetDB(); $categories = $DB->FetchAll('SELECT `category_id`,`name` FROM `tbx_category` ORDER BY `name`'); $clips = $DB->FetchAll('SELECT * FROM `tbx_video_clip` WHERE `video_id`=?', array(Request::Get('video_id'))); ?> <div id="dialog-header" class="ui-widget-header ui-corner-all"> <div id="dialog-close"></div> <?php echo isset($editing) ? 'Update a Video' : 'Add a Video'; ?> </div> <form method="post" action="ajax.php" enctype="multipart/form-data"> <div id="dialog-panel"> <div style="padding: 8px;"> <?php if (empty($categories)) { ?> <div class="message-error"> You will need to create at least one category before you can begin adding videos </div> <?php } else { ?> <?php if (!isset($editing)) {
// limitations under the License. require_once 'includes/global.php'; Request::Setup(); $flag_guest_ratings = Config::Get('flag_guest_ratings'); if (AuthenticateUser::Login() || $flag_guest_ratings) { $username = AuthenticateUser::GetUsername(); if ($flag_guest_ratings && empty($username)) { $username = $_SERVER['REMOTE_ADDR']; } $rating = $_REQUEST['rating']; $video_id = $_REQUEST['video_id']; if ($rating >= 1 && $rating <= 5) { $DB = GetDB(); if ($DB->QuerySingleColumn('SELECT `allow_ratings` FROM `tbx_video` WHERE `video_id`=?', array($video_id)) == 1) { if ($DB->QueryCount('SELECT COUNT(*) FROM `tbx_video_rating` WHERE `username`=? AND `video_id`=?', array($username, $video_id)) == 0) { StatsRollover(); $DB->Update('INSERT INTO `tbx_video_rating` VALUES (?,?,?,?)', array($username, $video_id, $rating, Database_MySQL::Now())); $DB->Update('UPDATE `tbx_video_stat` SET ' . '`today_num_ratings`=`today_num_ratings`+1,' . '`today_sum_of_ratings`=`today_sum_of_ratings`+?,' . '`today_avg_rating`=`today_sum_of_ratings`/`today_num_ratings`,' . '`week_num_ratings`=`week_num_ratings`+1,' . '`week_sum_of_ratings`=`week_sum_of_ratings`+?,' . '`week_avg_rating`=`week_sum_of_ratings`/`week_num_ratings`,' . '`month_num_ratings`=`month_num_ratings`+1,' . '`month_sum_of_ratings`=`month_sum_of_ratings`+?,' . '`month_avg_rating`=`month_sum_of_ratings`/`month_num_ratings`,' . '`total_num_ratings`=`total_num_ratings`+1,' . '`total_sum_of_ratings`=`total_sum_of_ratings`+?,' . '`total_avg_rating`=`total_sum_of_ratings`/`total_num_ratings` ' . 'WHERE `video_id`=?', array($rating, $rating, $rating, $rating, $video_id)); echo _T('Text:Rating recorded'); } else { echo _T('Validation:You have already rated this video'); } } else { echo _T('Validation:Rating disabled'); } } else { echo _T('Validation:Invalid rating'); } } else { echo _T('Validation:Must be logged in'); }
public static function Login($fail_function = null) { $DB = GetDB(); self::$authenticated = false; self::$username = null; try { if (isset($_REQUEST[self::FIELD_USERNAME])) { if (String::IsEmpty($_REQUEST[self::FIELD_USERNAME])) { throw new Exception(_T('Validation:Required', _T('Label:Username'))); } if (String::IsEmpty($_REQUEST[self::FIELD_PASSWORD])) { throw new Exception(_T('Validation:Required', _T('Label:Password'))); } $user = $DB->Row('SELECT * FROM `tbx_user` WHERE `username`=? AND `password`=?', array($_REQUEST[self::FIELD_USERNAME], sha1($_REQUEST[self::FIELD_PASSWORD]))); if (!$user) { throw new Exception(_T('Validation:Invalid Login')); } else { if ($user['status'] != STATUS_ACTIVE) { throw new Exception(_T('Validation:Inactive Account')); } $session = sha1(uniqid(rand(), true)); $DB->Update('UPDATE `tbx_user_stat` SET `date_last_login`=? WHERE `username`=?', array(Database_MySQL::Now(), $user['username'])); $DB->Update('INSERT INTO `tbx_user_session` VALUES (?,?,?,?,?)', array($user['username'], $session, sha1($_SERVER['HTTP_USER_AGENT']), $_SERVER['REMOTE_ADDR'], time())); setcookie(LOGIN_COOKIE, self::FIELD_USERNAME . '=' . urlencode($user['username']) . '&' . self::FIELD_SESSION . '=' . urlencode($session), $_REQUEST[self::FIELD_REMEMBER] ? time() + self::REMEMBER_PERIOD : null, Config::Get('cookie_path'), Config::Get('cookie_domain')); self::$username = $user['username']; self::$authenticated = true; } } else { if (isset($_COOKIE[LOGIN_COOKIE])) { $cookie = array(); parse_str(html_entity_decode($_COOKIE[LOGIN_COOKIE]), $cookie); $DB->Update('DELETE FROM `tbx_user_session` WHERE `timestamp` < ?', array(time() - self::REMEMBER_PERIOD)); $session = $DB->Row('SELECT * FROM `tbx_user_session` WHERE `username`=? AND `session`=?', array($cookie[self::FIELD_USERNAME], $cookie[self::FIELD_SESSION])); if (!$session) { setcookie(LOGIN_COOKIE, false, time() - 604800, Config::Get('cookie_path'), Config::Get('cookie_domain')); throw new Exception(_T('Validation:Session Expired')); } else { $user = $DB->Row('SELECT * FROM `tbx_user` WHERE `username`=?', array($session['username'])); if (!$user) { setcookie(LOGIN_COOKIE, false, time() - 604800, Config::Get('cookie_path'), Config::Get('cookie_domain')); throw new Exception(_T('Validation:Invalid Account')); } else { if ($user['status'] != STATUS_ACTIVE) { throw new Exception(_T('Validation:Inactive Account')); } self::$username = $user['username']; self::$authenticated = true; } } } } } catch (Exception $e) { self::$error = $e->getMessage(); self::$authenticated = false; } if (!self::$authenticated && function_exists($fail_function)) { call_user_func($fail_function); exit; } return self::$authenticated; }
public static function Run() { chdir(realpath(dirname(__FILE__) . '/../')); require_once 'includes/global.php'; $doc_root = Config::Get('document_root'); $DB = GetDB(); self::Log('Starting...'); self::MarkRunning(); while (true) { // See if we were requested to stop if (self::ShouldStop()) { self::Log('User requested stop...'); break; } self::Ping(); $DB->Connect(); $queue_item = $DB->Row('SELECT * FROM `tbx_thumb_queue` ORDER BY `queued` LIMIT 1'); if (!empty($queue_item)) { $video = $DB->Row('SELECT * FROM `tbx_video` WHERE `video_id`=?', array($queue_item['video_id'])); if (!empty($video)) { $DB->Update('UPDATE `tbx_thumb_queue` SET `date_started`=? WHERE `video_id`=?', array(Database_MySQL::Now(), $video['video_id'])); $clips = $DB->FetchAll('SELECT * FROM `tbx_video_clip` WHERE `video_id`=? AND `type`!=? ORDER BY `clip_id`', array($queue_item['video_id'], 'Embed')); $dir = new Video_Dir(Video_Dir::DirNameFromId($video['video_id'])); Video_FrameGrabber::SetLogFile($dir->GetBaseDir() . '/thumbnailer.log'); $thumb_start = time(); try { if (!empty($clips)) { $thumbs = array(); $duration = 0; // Number of thumbs to create per clip $amount = round(Config::Get('thumb_amount') / count($clips)); // Move existing thumbnails $dir->MoveFiles($dir->GetThumbsDir(), $dir->GetTempDir(), JPG_EXTENSION); // Process each clip foreach ($clips as $clip) { self::Ping(); // Remote video if (preg_match('~https?://~i', $clip['clip'])) { $http = new HTTP(); if ($http->Get($clip['clip'], $clip['clip'])) { $video_file = $dir->AddOriginalFromVar($http->body, File::Extension($clip['clip'])); $vi = new Video_Info($video_file); $vi->Extract(); $duration += $vi->length; $temp_thumbs = Video_FrameGrabber::Grab($video_file, $dir->GetProcessingDir(), $amount, Config::Get('thumb_quality'), Config::Get('thumb_size'), $vi); // Move generated thumbs from the processing directory foreach ($temp_thumbs as $temp_thumb) { $thumbs[] = $dir->AddThumbFromFile($temp_thumb); } @unlink($video_file); } } else { $temp_thumbs = Video_FrameGrabber::Grab($doc_root . '/' . $clip['clip'], $dir->GetProcessingDir(), $amount, Config::Get('thumb_quality'), Config::Get('thumb_size')); // Move generated thumbs from the processing directory foreach ($temp_thumbs as $temp_thumb) { $thumbs[] = $dir->AddThumbFromFile($temp_thumb); } } } // Get the relative URL for each thumb and add to database $thumb_ids = array(); foreach ($thumbs as $thumb) { $thumb = str_replace($doc_root, '', $thumb); $thumb_ids[] = DatabaseAdd('tbx_video_thumbnail', array('video_id' => $video['video_id'], 'thumbnail' => $thumb)); } // Determine number of thumbnails and select random display thumbnail $num_thumbnails = count($thumbs); $display_thumbnail = null; if ($num_thumbnails > 0) { // Select display thumbnail randomly from the first 40% $display_thumbnail = $thumb_ids[rand(0, floor(0.4 * $num_thumbnails))]; } $update = array('video_id' => $video['video_id'], 'num_thumbnails' => $num_thumbnails, 'display_thumbnail' => $display_thumbnail); if (empty($video['duration']) && !empty($duration)) { $update['duration'] = $duration; } DatabaseUpdate('tbx_video', $update); // Remove old thumbnails $DB->Update('DELETE FROM `tbx_video_thumbnail` WHERE `video_id`=?' . (!empty($thumb_ids) ? ' AND`thumbnail_id` NOT IN (' . join(',', $thumb_ids) . ')' : ''), array($video['video_id'])); $dir->ClearTemp(); } } catch (Exception $e) { // Restore old thumbnails $dir->MoveFiles($dir->GetTempDir(), $dir->GetThumbsDir(), JPG_EXTENSION); Video_FrameGrabber::Log($e->getMessage() . (strtolower(get_class($e)) == 'baseexception' ? $e->getExtras() : '') . "\n" . $e->getTraceAsString()); self::UpdateStatsProcessed($thumb_start, $thumb_end, $queue_item['queued'], true); } $thumb_end = time(); $DB->Update('DELETE FROM `tbx_thumb_queue` WHERE `video_id`=?', array($queue_item['video_id'])); self::UpdateStatsProcessed($thumb_start, $thumb_end, $queue_item['queued']); } } else { break; } } self::MarkStopped(); self::Log('Exiting...'); }
function tbxUploadStepTwo() { global $t; $upload = $_FILES['video_file']; $v = Validator::Create(); $DB = GetDB(); $v->Register(sha1($_REQUEST['step_one_data'] . Config::Get('random_value')) == $_REQUEST['step_one_sig'], Validator_Type::IS_TRUE, _T('Validation:Video Data Altered')); $v->Register($upload['error'] == UPLOAD_ERR_OK, Validator_Type::IS_TRUE, Uploads::CodeToMessage($upload['error'])); if (is_uploaded_file($upload['tmp_name'])) { $max_filesize = Format::StringToBytes(Config::Get('max_upload_size')); $max_duration = Format::DurationToSeconds(Config::Get('max_upload_duration')); $extensions = str_replace(',', '|', Config::Get('upload_extensions')); $v->Register($upload['size'], Validator_Type::IS_BETWEEN, _T('Validation:Video size too large'), '1,' . $max_filesize); $v->Register(File::Extension($upload['name']), Validator_Type::REGEX_MATCH, _T('Validation:Video file extension not allowed'), '~^(' . $extensions . ')$~'); try { $vi = new Video_Info($upload['tmp_name']); $vi->Extract(); $v->Register($vi->length, Validator_Type::LESS_EQ, _T('Validation:Video duration too long'), $max_duration); } catch (Exception $e) { $v->Register(false, Validator_Type::IS_TRUE, $e->getMessage()); } $md5 = md5_file($upload['tmp_name']); if (Config::Get('flag_upload_reject_duplicates')) { $v->Register($DB->QueryCount('SELECT COUNT(*) FROM `tbx_video_md5sum` WHERE `md5`=?', array($md5)), Validator_Type::IS_ZERO, _T('Validation:Duplicate video')); } } // Validate input if (!$v->Validate()) { $t->Assign('g_errors', $v->GetErrors()); $t->AssignByRef('g_form', $_REQUEST); if (isset($_REQUEST['flash'])) { $t->Display('upload-flash-errors.tpl'); } else { $t->Assign('g_file_types', '*.' . str_replace(',', ';*.', Config::Get('upload_extensions'))); $t->Assign('g_cookie', $_COOKIE[LOGIN_COOKIE]); $t->Display('upload-step-two.tpl'); } return; } $_REQUEST = array_merge($_REQUEST, unserialize(base64_decode($_REQUEST['step_one_data']))); Form_Prepare::Standard('tbx_video'); Form_Prepare::Standard('tbx_video_stat'); Form_Prepare::Custom('tbx_video_custom_schema', 'on_submit'); $_REQUEST['duration'] = $vi->length; $_REQUEST['date_added'] = Database_MySQL::Now(); $_REQUEST['username'] = AuthenticateUser::GetUsername(); $_REQUEST['is_private'] = Config::Get('flag_upload_allow_private') ? intval($_REQUEST['is_private']) : 0; $_REQUEST['allow_ratings'] = intval($_REQUEST['allow_ratings']); $_REQUEST['allow_embedding'] = intval($_REQUEST['allow_embedding']); $_REQUEST['allow_comments'] = intval($_REQUEST['allow_comments']) ? 'Yes - Add Immediately' : 'No'; $_REQUEST['is_user_submitted'] = 1; if ($_REQUEST['recorded_day'] && $_REQUEST['recorded_month'] && $_REQUEST['recorded_year']) { $_REQUEST['date_recorded'] = $_REQUEST['recorded_year'] . '-' . $_REQUEST['recorded_month'] . '-' . $_REQUEST['recorded_day']; } // Strip HTML tags if (Config::Get('flag_video_strip_tags')) { $_REQUEST = String::StripTags($_REQUEST); } // Configure status $_REQUEST['status'] = STATUS_ACTIVE; if (Config::Get('flag_upload_convert')) { $_REQUEST['status'] = STATUS_QUEUED; $_REQUEST['next_status'] = Config::Get('flag_upload_review') ? STATUS_PENDING : STATUS_ACTIVE; } else { if (Config::Get('flag_upload_review')) { $_REQUEST['status'] = STATUS_PENDING; } } // Add to database $_REQUEST['video_id'] = DatabaseAdd('tbx_video', $_REQUEST); DatabaseAdd('tbx_video_custom', $_REQUEST); DatabaseAdd('tbx_video_stat', $_REQUEST); if ($_REQUEST['status'] == STATUS_ACTIVE && !$_REQUEST['is_private']) { Tags::AddToFrequency($_REQUEST['tags']); } else { if ($_REQUEST['status'] == STATUS_QUEUED) { DatabaseAdd('tbx_conversion_queue', array('video_id' => $_REQUEST['video_id'], 'queued' => time())); } } // Mark as private if ($_REQUEST['is_private']) { $_REQUEST['private_id'] = sha1(uniqid(rand(), true)); DatabaseAdd('tbx_video_private', $_REQUEST); } // Setup video files and generate thumbnails $directory = Video_Dir::DirNameFromId($_REQUEST['video_id']); $vd = new Video_Dir($directory); $clip = $vd->AddClipFromFile($upload['tmp_name'], File::Extension($upload['name'])); if (Video_FrameGrabber::CanGrab()) { Video_FrameGrabber::Grab($clip, $vd->GetThumbsDir(), Config::Get('thumb_amount'), Config::Get('thumb_quality'), Config::Get('thumb_size'), $vi); } foreach ($vd->GetClipURIs() as $clip) { $_REQUEST['clip'] = $clip; $_REQUEST['filesize'] = filesize(Config::Get('document_root') . $clip); DatabaseAdd('tbx_video_clip', $_REQUEST); } $thumb_ids = array(); foreach ($vd->GetThumbURIs() as $thumb) { $_REQUEST['thumbnail'] = $thumb; $thumb_ids[] = DatabaseAdd('tbx_video_thumbnail', $_REQUEST); } // Select the display thumbnail $num_thumbnails = count($thumb_ids); $display_thumbnail = null; if ($num_thumbnails > 0) { $display_thumbnail = $thumb_ids[rand(0, floor(0.4 * $num_thumbnails))]; } DatabaseUpdate('tbx_video', array('video_id' => $_REQUEST['video_id'], 'num_thumbnails' => $num_thumbnails, 'display_thumbnail' => $display_thumbnail)); // Add MD5 sum for prevention of duplicates $DB->Update('REPLACE INTO `tbx_video_md5sum` VALUES (?)', array($md5)); // Update user stats StatsRollover(); $DB->Update('UPDATE `tbx_user_stat` SET ' . '`today_videos_uploaded`=`today_videos_uploaded`+1,' . '`week_videos_uploaded`=`week_videos_uploaded`+1,' . '`month_videos_uploaded`=`month_videos_uploaded`+1,' . '`total_videos_uploaded`=`total_videos_uploaded`+1 ' . 'WHERE `username`=?', array($_REQUEST['username'])); $t->AssignByRef('g_form', $_REQUEST); $t->AssignByRef('g_video', $_REQUEST); $t->Display(isset($_REQUEST['flash']) ? 'upload-flash-complete.tpl' : 'upload-complete.tpl'); UpdateCategoryStats($_REQUEST['category_id']); if (!Config::Get('flag_using_cron') && $_REQUEST['status'] == STATUS_QUEUED) { ConversionQueue::Start(); } }