All pastes #926823 Raw Edit

Stuff

public text v1 · immutable
·published 2008-03-03 21:18 UTC
rendered paste body
<?

class video
{

	private
		$db,
		$__maxFileLength,
		$__scrDir,
		$__vidDir;
	
	public
		$__pageLimit;
	
	////////////////////////////////////////
	
	public function __construct(&$dbl, $mfl)
	{
		// config
		$this->__scrDir = __dirMain.'/web/files/vpicture/';
		$this->__vidDir = __dirMain.'/web/files/video/';
		$this->__maxFileLength = $mfl*1024;
		$this->__pageLimit = 20;
		// db
		$this->db = $dbl;
	}
	
	public function __destruct() {}
	
	////////////////////////////////////////
	
	public function __create()
	{
		$this->db->Query('
		CREATE TABLE `'.__prefix.'video` (
		`id` int(11) unsigned not null primary key auto_increment,
		`cid` int(11) unsigned not null default "0",
		`uid` int(11) unsigned not null,
		`is_allowed` enum("0","1") default "1",
		`filename` varchar(128) not null,
		`title` varchar(255) not null,
		`hits` int(11) unsigned not null default "0",
		`rating` int(11) not null default "0",
		INDEX(`id`), INDEX(`uid`)
		) type=MyISAM default charset=utf8;
		');
		$this->db->Query('
		CREATE TABLE `'.__prefix.'video_selected` (
		`uid` int(11) unsigned,
		`vid` int(11) unsigned,
		INDEX(`uid`), INDEX(`vid`)
		) type=MyISAM default charset=utf8;
		');
		$this->db->Query('
		CREATE TABLE `'.__prefix.'video_votes` (
		`vid` int(11) unsigned not null,
		`ip` varchar(15) not null,
		`time` varchar(15) not null,
		INDEX(`vid`), INDEX(`ip`)
		) type=MyISAM default charset=utf8;
		');
	}
	
	//////////////////////////////////////// VIDEO vote
	
	public function __voteAdd($val, $vid, $ip, $user_id = 0)
	{
		if($val != '+') 
			$val = '-';
		$vid = (int)$vid;
		$ip = $this->db->mRes($ip);
		if(($this->__getInfo($vid) != false) && (strlen($ip) >= 7))
		{
			if((!$this->__isVoted($vid, $ip)) && (!$this->__isMyVideo($user_id, $vid)))
			{
				$this->db->Query('INSERT INTO `'.__prefix.'video_votes` SET `vid`="'.$vid.'", `ip`="'.$ip.'"');
				$this->db->Query('UPDATE `'.__prefix.'video` SET `rating`=`rating`'.$val.'1 WHERE `id`="'.$vid.'"');
				return true;
			}
		}
		return false;
	}
	
	public function __isVoted($vid, $ip)
	{
		return ((int)$this->db->Result('SELECT `vid` FROM `'.__prefix.'video_votes` WHERE `vid`="'.(int)$vid.'" AND `ip`="'.$this->db->mRes($ip).'"') > 0);
	}
	
	//////////////////////////////////////// VIDEO fav
	
	public function __selectedDel($uid, $vid)
	{
		$uid = (int)$uid;
		$vid = (int)$vid;
		if($this->__isSelected($uid, $vid))
		{
			$this->db->Query('DELETE FROM `'.__prefix.'video_selected` WHERE `vid`="'.$vid.'" AND `uid`="'.$uid.'"');
			return true;
		}
		return false;
	}
	
	public function __selectedAdd($uid, $vid)
	{
		$uid = (int)$uid;
		$vid = (int)$vid;
		if(!$this->__isSelected($uid, $vid))
		{
			if((!$this->__isMyVideo($uid, $vid)) && ($this->__getInfo($vid) != false) && ($uid > 0))
			{
				$this->db->Query('INSERT INTO `'.__prefix.'video_selected` SET `vid`="'.$vid.'", `uid`="'.$uid.'"');
				return true;
			}
		}
		return false;
	}
	
	public function __isSelected($uid, $vid)
	{
		return ((int)$this->db->Result('SELECT `vid` FROM `'.__prefix.'video_selected` WHERE `uid`="'.(int)$uid.'" AND `vid`="'.(int)$vid.'" LIMIT 1') > 0);
	}
	
	public function __selectedGet($limit = 10, $uid, $page = 0)
	{
		if($page > 0)
		{
			$page  = (int)$page;
			$npage = $page;
			$page  = $page-1;
			$last = 'ORDER BY `vs`.`vid` DESC LIMIT '.$page*$this->__pageLimit.', '.$this->__pageLimit.' ';
		} else {
			$last = 'ORDER BY `vs`.`vid` DESC LIMIT '.(int)$limit;
		}
		return $this->db->Assoc('
		SELECT
			`vs`.`uid`,
			`v`.`id`,
			`v`.`filename`,
			`v`.`title`,
			`v`.`hits`,
			`v`.`rating`,
			`u`.`username`
		FROM `'.__prefix.'video_selected` AS `vs`
		LEFT JOIN `'.__prefix.'video` AS `v`
			ON `vs`.`vid`=`v`.`id`
		LEFT JOIN `'.__prefix.'users` AS `u`
			ON `vs`.`uid`=`v`.`id`
		WHERE `vs`.`uid`="'.(int)$uid.'"
		'.$last.'
		');
	}
	
	public function __selectedCount($uid)
	{
		return (int)$this->db->Result('SELECT COUNT(`vid`) FROM `'.__prefix.'video_selected` WHERE `uid`="'.(int)$uid.'"');
	}
	
	//////////////////////////////////////// VIDEO
	
	public function __add($uid, &$farr, $title)
	{
		$title = $this->db->mRes($title);
		if(((int)$uid > 0) && (strlen($title) > 0) && (is_array($farr)) && ($farr['error'] == 0)) // global check
		{
			if
			(
				($farr['type'] == 'video/x-ms-wmv') ||  
				
				($farr['type'] == 'video/avi') || 
				($farr['type'] == 'video/x-msvideo') ||
				($farr['type'] == 'video/msvideo') ||
				($farr['type'] == 'application/x-troff-msvideo') ||
				
				($farr['type'] == 'video/mpeg')
			)
			{
				// mv file in tmp directory
				$f_tmp = __dirMain.'/userfiles/'.$farr['tmp_name'];
				move_uploaded_file($farr['tmp_name'], $f_tmp);
				// add record
				$this->db->Query('INSERT INTO `'.__prefix.'video` SET `uid`="'.(int)$uid.'", `title`="'.strip_tags($title).'"');
				$lstid = $this->db->LastID();
				$fname = $lstid.'.'.time();
				shell_exec('ffmpeg -i '.$f_tmp.' -b 700k -r 25 -s 320x240 -ar 22050 -ab 64 -f flv '.$this->__vidDir.$fname.'.flv');
				shell_exec('ffmpeg -i '.$f_tmp.' -an -ss 00:00:03 -t 00:00:01 -r 1 -y -s 160x120 -f mjpeg '.$this->__scrDir.$fname.'.jpg');
				$this->db->Query('UPDATE `'.__prefix.'video` SET `filename`="'.$fname.'" WHERE `id`="'.$this->db->LastID().'"');
				return $lstid;
			}
		}
		return FALSE;
	}	
	
	public function __del($mid)
	{
		$id = $this->__getFilename($mid);
		@unlink($this->__vidDir.$id.'.flv');
		@unlink($this->__scrDir.$id.'.jpg');
		$this->db->Query('DELETE FROM `'.__prefix.'video` WHERE `id`="'.(int)$mid.'"');
		$this->db->Query('DELETE FROM `'.__prefix.'cSourceComments` WHERE `module`="video" AND `fid`="'.(int)$mid.'"');
		$this->db->Query('DELETE FROM `'.__prefix.'video_selected` WHERE `vid`="'.(int)$mid.'"');
		return TRUE;
	}
	
	public function __getr($limit = 10, $uid = 0, $page = 0)
	{
		$where = ((int)$uid > 0) ? 'WHERE `t1`.`uid`="'.(int)$uid.'" ' : '';
		if($page > 0)
		{
			$page  = (int)$page;
			$npage = $page;
			$page  = $page-1;
			$last = 'ORDER BY `t1`.`id` DESC LIMIT '.$page*$this->__pageLimit.', '.$this->__pageLimit.' ';
		} else {
			$last = 'ORDER BY `t1`.`id` DESC LIMIT '.(int)$limit;
		}
		return $this->db->Assoc('
		SELECT
			`t1`.`id`,
			`t1`.`uid`,
			`t1`.`filename`,
			`t1`.`title`,
			`t1`.`hits`,
			`t1`.`rating`,
			`t2`.`username`
		FROM `'.__prefix.'video` AS `t1`
		LEFT JOIN `'.__prefix.'users` AS `t2`	ON `t1`.`uid`=`t2`.`id` 
		'.$where.' 
		'.$last.'
		');
	}
	
	public function __countVideo($uid = 0)
	{
		$uid = (int)$uid;
		$where = '';
		if($uid > 0) $where = 'WHERE `uid`="'.$uid.'"';
		return (int)$this->db->Result('SELECT COUNT(`id`) FROM `'.__prefix.'video` '.$where);
	}
	
	public function __getFilename($id)
	{
		return $this->db->Result('SELECT `filename` FROM `'.__prefix.'video` WHERE `id`="'.(int)$id.'" LIMIT 1');
	}
	
	public function __getInfo($id)
	{
		return $this->db->Assoc('
		SELECT
			`t1`.`id`,
			`t1`.`uid`,
			`t1`.`filename`,
			`t1`.`title`,
			`t1`.`hits`,
			`t1`.`rating`,
			`t2`.`username`
		FROM `'.__prefix.'video` AS `t1`
		LEFT JOIN `'.__prefix.'users` AS `t2`	ON `t1`.`uid`=`t2`.`id` 
		WHERE 
			`t1`.`id`="'.$id.'"
		LIMIT 1
		');
	}
	
	public function __isMyVideo($uid, $vid)
	{
		return ((int)$this->db->Result('SELECT `id` FROM `'.__prefix.'video` WHERE `uid`="'.(int)$uid.'" AND `id`="'.(int)$vid.'" LIMIT 1') > 0);
	}
	
	public function __updateHits($vid)
	{
		$this->db->Query('UPDATE `'.__prefix.'video` SET `hits`=`hits`+1 WHERE `id`="'.(int)$vid.'"');
		return TRUE;
	}
	
	public function __getNextPrevVideo($curVideoID, $uID = 0)
	{
		$a = array();
		$curVideoID = (int)$curVideoID;
		$uID = (int)$uID;
		$additional = '';
		// for current user
		if($uID > 0) $additional = ' AND `uid`="'.$uID.'" ';
		// for all videos
		$a['next'] = (int)$this->db->Result('SELECT `id` FROM `'.__prefix.'video` WHERE `id`>"'.$curVideoID.'" '.$additional.' ORDER BY `id` ASC LIMIT 1');
		$a['prev'] = (int)$this->db->Result('SELECT `id` FROM `'.__prefix.'video` WHERE `id`<"'.$curVideoID.'" '.$additional.' ORDER BY `id` DESC LIMIT 1');
		return $a;
	}
	
};

?>