コード例 #1
0
ファイル: Authenticate.php プロジェクト: hackingman/TubeX
 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;
 }
コード例 #2
0
ファイル: feature.php プロジェクト: hackingman/TubeX
// 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');
}
コード例 #3
0
ファイル: YouTube.php プロジェクト: hackingman/TubeX
 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;
 }
コード例 #4
0
ファイル: ConversionQueue.php プロジェクト: hackingman/TubeX
 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...');
 }
コード例 #5
0
ファイル: index.php プロジェクト: hackingman/TubeX
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'));
    }
}
コード例 #6
0
ファイル: user.php プロジェクト: hackingman/TubeX
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');
}
コード例 #7
0
ファイル: XMLVideos.php プロジェクト: hackingman/TubeX
 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;
 }
コード例 #8
0
ファイル: Feed.php プロジェクト: hackingman/TubeX
 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']);
 }
コード例 #9
0
ファイル: ajax.php プロジェクト: hackingman/TubeX
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;
}
コード例 #10
0
ファイル: Import.php プロジェクト: hackingman/TubeX
 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);
 }
コード例 #11
0
ファイル: favorite.php プロジェクト: hackingman/TubeX
// 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');
}
コード例 #12
0
ファイル: cron.php プロジェクト: hackingman/TubeX
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();
}
コード例 #13
0
ファイル: cp-user-add-edit.php プロジェクト: hackingman/TubeX
    <?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 
コード例 #14
0
ファイル: comment.php プロジェクト: hackingman/TubeX
 // 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);
     }
コード例 #15
0
    <?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)) {
コード例 #16
0
ファイル: rate.php プロジェクト: hackingman/TubeX
// 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');
}
コード例 #17
0
ファイル: AuthenticateUser.php プロジェクト: hackingman/TubeX
 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;
 }
コード例 #18
0
ファイル: ThumbQueue.php プロジェクト: hackingman/TubeX
 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...');
 }
コード例 #19
0
ファイル: upload.php プロジェクト: hackingman/TubeX
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();
    }
}