Use migration to install, add permission to download and trailer, best quality stream, start implement hubs, clean code

pull/25/head
root 3 years ago
parent 491bf1c730
commit b92e7c4831

@ -9,7 +9,7 @@ class Controller_Home extends Controller_Security
{
public $template = 'layout/index';
private $_user;
protected $_user;
public function before()
{

@ -65,11 +65,37 @@ class Controller_Movie extends Controller_Home
if (!$movie)
throw new FuelException('No movie found');
$user_id = $this->_user->id;
$user_downloads = Model_User_Download::find(function ($query) use ($user_id) {
$startOfDay = date("Y-m-d 00:00:00");
$endOfDay = date("Y-m-d 23:59:59");
$query->where('user_id', $user_id)
->and_where('date', '>=', strtotime($startOfDay))
->and_where('date', '<=', strtotime($endOfDay))
;
});
if (Model_Permission::isGranted('RIGHT_DOWNLOAD_DISABLED', $movie->getLibrary()))
throw new FuelException('You dont have the permission to download in this library!');
if (Model_Permission::isGranted('RIGHT_MAX_DOWNLOAD', $movie->getLibrary(), count($user_downloads)))
throw new FuelException('You reach the limit of download in this library today!');
$url = $movie->getDownloadLink();
$download = Model_User_Download::forge(array(
'user_id' => $this->_user->id,
'movie_id' => $movie_id,
'date' => time()
));
if(!$download->validates()) {
throw new FuelException($download->validation()->show_errors());
}
$download->save();
$filename = '';
$size = 0;
@ -98,9 +124,9 @@ class Controller_Movie extends Controller_Home
header('Content-Length: '.$size);
// @TODO: add it to admin panel and permission
$speed = 2000;
$speed = 5000;
File::readChunked($url, $speed);
File::readChunked($url, $speed, 2048);
exit(200);
} catch (Exception $exception) {
@ -113,6 +139,7 @@ class Controller_Movie extends Controller_Home
$movie_id = $this->param('movie_id');
$transcode = $this->param('transcode');
$session = $this->param('session');
$index = $this->param('index');
$base = $this->param('base');
$extension = Input::extension();
@ -133,7 +160,7 @@ class Controller_Movie extends Controller_Home
$url .= 'video/:/';
$url .= 'transcode/' . $transcode . '/';
$url .= 'session/' . $session . '/';
$url .= 'base/' . $base . '.' . $extension;
$url .= $index . '/' . $base . '.' . $extension;
readfile($url);
exit;

@ -2,13 +2,12 @@
use Fuel\Core\Config;
use Fuel\Core\Controller_Rest;
use Fuel\Core\DB;
use Fuel\Core\DBUtil;
use Fuel\Core\FuelException;
use Fuel\Core\Input;
use Fuel\Core\Migrate;
use Fuel\Core\Request;
use Fuel\Core\Str;
use function PHPSTORM_META\type;
class Controller_Rest_Install extends Controller_Rest
{
@ -84,421 +83,10 @@ class Controller_Rest_Install extends Controller_Rest
Config::load('db', true);
$logs = '';
try {
/**
* CREATE TABLE USER
*/
DBUtil::create_table(
'user',
array(
'id' => array('constraint' => 36, 'type' => 'varchar'),
'username' => array('constraint' => 255, 'type' => 'varchar'),
'email' => array('constraint' => 255, 'type' => 'varchar'),
'password' => array('constraint' => 255, 'type' => 'varchar'),
'admin' => array('constraint' => 1, 'type' => 'int', 'default' => 0),
'lastlogin' => array('constraint' => 11, 'type' => 'int'),
'parent_id' => array('constraint' => 36, 'type' => 'varchar', 'default' => null, 'null' => true),
'disable' => array('constraint' => 1, 'type' => 'int', 'default' => 0)
),
array('id'), false, 'InnoDB', 'utf8_unicode_ci'
);
$logs .= 'Table user created!'."\r\n";
/**
* CREATE TABLE SERVER
*/
DBUtil::create_table(
'server',
array(
'id' => array('constraint' => 36, 'type' => 'varchar'),
'user_id' => array('constraint' => 36, 'type' => 'varchar'),
'https' => array('constraint' => 1, 'type' => 'int'),
'url' => array('constraint' => 255, 'type' => 'varchar'),
'port' => array('constraint' => 2, 'type' => 'int', 'null' => true),
'token' => array('constraint' => 255, 'type' => 'varchar'),
'lastcheck' => array('constraint' => 11, 'type' => 'int'),
'name' => array('constraint' => 255, 'type' => 'varchar', 'null' => true),
'plateforme' => array('constraint' => 255, 'type' => 'varchar', 'null' => true),
'platformVersion' => array('constraint' => 255, 'type' => 'varchar', 'null' => true),
'updatedAt' => array('constraint' => 11, 'type' => 'int', 'null' => true),
'version' => array('constraint' => 255, 'type' => 'varchar', 'null' => true),
'online' => array('constraint' => 1, 'type' => 'int', 'default' => 0),
'disable' => array('constraint' => 1, 'type' => 'int', 'default' => 0)
),
array('id'), false, 'InnoDB', 'utf8_unicode_ci'
);
$logs .= 'Server table created!'."\r\n";
/**
* CREATE TABLE LIBRARY
*/
DBUtil::create_table(
'library',
array(
'id' => array('constraint' => 36, 'type' => 'varchar'),
'server_id' => array('constraint' => 36, 'type' => 'varchar'),
'plex_key' => array('constraint' => 11, 'type' => 'int'),
'name' => array('constraint' => 255, 'type' => 'varchar'),
'type' => array('constraint' => 255, 'type' => 'varchar'),
'updatedAt' => array('constraint' => 11, 'type' => 'int'),
'createdAt' => array('constraint' => 11, 'type' => 'int'),
'scannedAt' => array('constraint' => 11, 'type' => 'int'),
'disable' => array('constraint' => 1, 'type' => 'int', 'default' => 0)
),
array('id'), false, 'InnoDB', 'utf8_unicode_ci'
);
$logs .= 'Library table created!'."\r\n";
/**
* CREATE TABLE LIBRARY
*/
DBUtil::create_table(
'tvshow',
array(
'id' => array('constraint' => 36, 'type' => 'varchar'),
'library_id' => array('constraint' => 36, 'type' => 'varchar'),
'plex_key' => array('constraint' => 255, 'type' => 'varchar'),
'studio' => array('constraint' => 255, 'type' => 'varchar', 'null' => true),
'title' => array('constraint' => 255, 'type' => 'varchar'),
'contentRating' => array('constraint' => 255, 'type' => 'varchar', 'null' => true),
'summary' => array('type' => 'text', 'null' => true),
'rating' => array('constraint' => 4, 'type' => 'varchar', 'null' => true),
'year' => array('constraint' => 11, 'type' => 'int', 'null' => true),
'thumb' => array('constraint' => 255, 'type' => 'varchar', 'null' => true),
'art' => array('constraint' => 255, 'type' => 'varchar', 'null' => true),
'banner' => array('constraint' => 255, 'type' => 'varchar', 'null' => true),
'theme' => array('constraint' => 255, 'type' => 'varchar', 'null' => true),
'originallyAvailableAt' => array('constraint' => 255, 'type' => 'varchar', 'null' => true),
'leafCount' => array('constraint' => 11, 'type' => 'int', 'null' => true),
'addedAt' => array('constraint' => 11, 'type' => 'int', 'null' => true),
'updatedAt' => array('constraint' => 11, 'type' => 'int', 'null' => true),
'disable' => array('constraint' => 1, 'type' => 'int', 'default' => 0)
),
array('id'), false, 'InnoDB', 'utf8_unicode_ci'
);
$logs .= 'Library table created!'."\r\n";
/**
* CREATE TABLE SEASON
*/
DBUtil::create_table(
'season',
array(
'id' => array('constraint' => 36, 'type' => 'varchar'),
'tv_show_id' => array('constraint' => 36, 'type' => 'varchar'),
'plex_key' => array('constraint' => 36, 'type' => 'varchar'),
'number' => array('constraint' => 11, 'type' => 'int'),
'title' => array('constraint' => 255, 'type' => 'varchar'),
'thumb' => array('constraint' => 255, 'type' => 'varchar', 'null' => true),
'art' => array('constraint' => 255, 'type' => 'varchar', 'null' => true),
'leafCount' => array('constraint' => 11, 'type' => 'int', 'null' => true),
'addedAt' => array('constraint' => 11, 'type' => 'int', 'null' => true),
'updatedAt' => array('constraint' => 11, 'type' => 'int', 'null' => true),
'disable' => array('constraint' => 1, 'type' => 'int', 'default' => 0)
),
array('id'), false, 'InnoDB', 'utf8_unicode_ci'
);
$logs .= 'Season table created!'."\r\n";
/**
* CREATE TABLE SEASON
*/
DBUtil::create_table(
'movie',
array(
'id' => array('constraint' => 36, 'type' => 'varchar'),
'library_id' => array('constraint' => 36, 'type' => 'varchar', 'null' => true),
'season_id' => array('constraint' => 36, 'type' => 'varchar', 'null' => true),
'plex_key' => array('constraint' => 36, 'type' => 'varchar'),
'type' => array('constraint' => 20, 'type' => 'varchar'),
'number' => array('constraint' => 11, 'type' => 'int', 'null' => true),
'studio' => array('constraint' => 255, 'type' => 'varchar', 'null' => true),
'title' => array('constraint' => 255, 'type' => 'varchar'),
'originalTitle' => array('constraint' => 255, 'type' => 'varchar', 'null' => true),
'summary' => array('type' => 'text', 'null' => true),
'rating' => array('constraint' => 4, 'type' => 'varchar', 'null' => true),
'year' => array('constraint' => 11, 'type' => 'int', 'null' => true),
'thumb' => array('constraint' => 255, 'type' => 'varchar', 'null' => true),
'art' => array('constraint' => 255, 'type' => 'varchar', 'null' => true),
'duration' => array('constraint' => 11, 'type' => 'int', 'null' => true),
'originallyAvailableAt' => array('constraint' => 11, 'type' => 'varchar', 'null' => true),
'addedAt' => array('constraint' => 11, 'type' => 'int', 'null' => true),
'updatedAt' => array('constraint' => 11, 'type' => 'int', 'null' => true),
'disable' => array('constraint' => 1, 'type' => 'int', 'default' => 0)
),
array('id'), false, 'InnoDB', 'utf8_unicode_ci'
);
DBUtil::create_index('movie', 'title', 'searchTitle', 'fulltext');
$logs .= 'Movie table created!'."\r\n";
/**
* CREATE TABLE CONFIGURATION
*/
DBUtil::create_table(
'configurations',
array(
'id' => array('constraint' => 36, 'type' => 'varchar'),
'name' => array('constraint' => 255, 'type' => 'varchar'),
'data' => array('constraint' => 255, 'type' => 'varchar')
),
array('id'), false, 'InnoDB', 'utf8_unicode_ci'
);
$logs .= 'Configuration table created!'."\r\n";
/**
* CREATE TABLE PERMISSION
*/
DBUtil::create_table(
'permission',
array(
'id' => array('constraint' => 36, 'type' => 'varchar'),
'name' => array('constraint' => 255, 'type' => 'varchar'),
'parameters' => array('constraint' => 1, 'type' => 'int', 'default' => 0),
'disable' => array('constraint' => 1, 'type' => 'int', 'default' => 0)
),
array('id'), false, 'InnoDB', 'utf8_unicode_ci'
);
$logs .= 'Permission table created!'."\r\n";
/**
* CREATE TABLE USER'S PERMISSION
*/
DBUtil::create_table(
'library_permission',
array(
'id' => array('constraint' => 36, 'type' => 'varchar'),
'permission_id' => array('constraint' => 36, 'type' => 'varchar'),
'library_id' => array('constraint' => 36, 'type' => 'varchar'),
'value' => array('constraint' => 36, 'type' => 'varchar', 'null' => true),
'disable' => array('constraint' => 1, 'type' => 'int', 'default' => 0)
),
array('id'), false, 'InnoDB', 'utf8_unicode_ci'
);
$logs .= 'Libraries Permission table created!'."\r\n";
/**
* CREATE TABLE USER'S PERMISSION
*/
DBUtil::create_table(
'user_permission',
array(
'id' => array('constraint' => 36, 'type' => 'varchar'),
'permission_id' => array('constraint' => 36, 'type' => 'varchar'),
'user_id' => array('constraint' => 36, 'type' => 'varchar'),
'library_id' => array('constraint' => 36, 'type' => 'varchar', 'null' => true),
'value' => array('constraint' => 36, 'type' => 'varchar'),
'disable' => array('constraint' => 1, 'type' => 'int', 'default' => 0)
),
array('id'), false, 'InnoDB', 'utf8_unicode_ci'
);
$logs .= 'User Permission table created!'."\r\n";
/**
* CREATE TABLE USER'S WATCHING
*/
DBUtil::create_table(
'user_history',
array(
'id' => array('constraint' => 36, 'type' => 'varchar'),
'user_id' => array('constraint' => 36, 'type' => 'varchar'),
'movie_id' => array('constraint' => 36, 'type' => 'varchar'),
'watching_time' => array('constraint' => 11, 'type' => 'int'),
'ended_time' => array('constraint' => 11, 'type' => 'int', 'default' => 0),
'is_ended' => array('constraint' => 1, 'type' => 'int', 'default' => 0)
),
array('id'), false, 'InnoDB', 'utf8_unicode_ci'
);
$logs .= 'User Watching table create!'."\r\n";
$logs .= 'Creation table user settings'."\r\n";
/**
* CREATE TABLE USER'S SETTINGS
*/
DBUtil::create_table(
'user_settings',
array(
'id' => array('constraint' => 36, 'type' => 'varchar'),
'user_id' => array('constraint' => 36, 'type' => 'varchar'),
'language' => array('constraint' => 36, 'type' => 'varchar', 'default' => 'english'),
'trailer_type' => array('constraint' => 36, 'type' => 'varchar', 'default' => 'Upcoming'),
'trailer' => array('constraint' => 11, 'type' => 'int', 'default' => 0),
'subtitle' => array('constraint' => 11, 'type' => 'int', 'default' => 100),
'maxdownloadspeed' => array('constraint' => 11, 'type' => 'int', 'default' => -1)
),
array('id'), false, 'InnoDB', 'utf8_unicode_ci'
);
$logs .= 'User Setting table created!'."\r\n";
/**
* FOREIGN KEY
*/
DBUtil::add_foreign_key('tvshow', array(
'constraint' => 'constraintTvShowLibrary',
'key' => 'library_id',
'reference' => array(
'table' => 'library',
'column' => 'id',
),
'on_update' => 'NO ACTION',
'on_delete' => 'NO ACTION',
));
DBUtil::add_foreign_key('season', array(
'constraint' => 'constraintSeasonTvShow',
'key' => 'tv_show_id',
'reference' => array(
'table' => 'tvshow',
'column' => 'id',
),
'on_update' => 'NO ACTION',
'on_delete' => 'NO ACTION',
));
DBUtil::add_foreign_key('movie', array(
'constraint' => 'constraintMovieLibrary',
'key' => 'library_id',
'reference' => array(
'table' => 'library',
'column' => 'id',
),
'on_update' => 'NO ACTION',
'on_delete' => 'NO ACTION',
));
DBUtil::add_foreign_key('movie', array(
'constraint' => 'constraintMovieSeason',
'key' => 'season_id',
'reference' => array(
'table' => 'season',
'column' => 'id',
),
'on_update' => 'NO ACTION',
'on_delete' => 'NO ACTION',
));
DBUtil::add_foreign_key('library_permission', array(
'constraint' => 'constraintPermissionLibrariesPermission',
'key' => 'permission_id',
'reference' => array(
'table' => 'permission',
'column' => 'id',
),
'on_update' => 'NO ACTION',
'on_delete' => 'NO ACTION',
));
DBUtil::add_foreign_key('library_permission', array(
'constraint' => 'constraintLibraryLibrariesPermission',
'key' => 'library_id',
'reference' => array(
'table' => 'library',
'column' => 'id',
),
'on_update' => 'NO ACTION',
'on_delete' => 'NO ACTION',
));
DBUtil::add_foreign_key('user_permission', array(
'constraint' => 'constraintPermissionUserPermission',
'key' => 'permission_id',
'reference' => array(
'table' => 'permission',
'column' => 'id',
),
'on_update' => 'NO ACTION',
'on_delete' => 'NO ACTION',
));
DBUtil::add_foreign_key('user_permission', array(
'constraint' => 'constraintUserUserPermission',
'key' => 'user_id',
'reference' => array(
'table' => 'user',
'column' => 'id',
),
'on_update' => 'NO ACTION',
'on_delete' => 'NO ACTION',
));
DBUtil::add_foreign_key('user_permission', array(
'constraint' => 'constraintLibraryUserPermission',
'key' => 'library_id',
'reference' => array(
'table' => 'library',
'column' => 'id',
),
'on_update' => 'NO ACTION',
'on_delete' => 'NO ACTION',
));
DBUtil::add_foreign_key('user_history', array(
'constraint' => 'constraintUserUserHistory',
'key' => 'user_id',
'reference' => array(
'table' => 'user',
'column' => 'id',
),
'on_update' => 'NO ACTION',
'on_delete' => 'NO ACTION',
));
DBUtil::add_foreign_key('user_history', array(
'constraint' => 'constraintMovieHistory',
'key' => 'movie_id',
'reference' => array(
'table' => 'movie',
'column' => 'id',
),
'on_update' => 'NO ACTION',
'on_delete' => 'NO ACTION',
));
DBUtil::add_foreign_key('user_settings', array(
'constraint' => 'constraintUserUserSetting',
'key' => 'user_id',
'reference' => array(
'table' => 'user',
'column' => 'id',
),
'on_update' => 'NO ACTION',
'on_delete' => 'NO ACTION',
));
DBUtil::add_foreign_key('library', array(
'constraint' => 'constraintServerLibrary',
'key' => 'server_id',
'reference' => array(
'table' => 'server',
'column' => 'id',
),
'on_update' => 'NO ACTION',
'on_delete' => 'NO ACTION',
));
DBUtil::add_foreign_key('server', array(
'constraint' => 'constraintServerUser',
'key' => 'user_id',
'reference' => array(
'table' => 'user',
'column' => 'id',
),
'on_update' => 'NO ACTION',
'on_delete' => 'NO ACTION',
));
DBUtil::add_foreign_key('user', array(
'constraint' => 'constraintUserUser',
'key' => 'parent_id',
'reference' => array(
'table' => 'user',
'column' => 'id',
),
'on_update' => 'NO ACTION',
'on_delete' => 'NO ACTION',
));
$logs .= 'Foreign key created!'."\r\n";
DB::insert('permission')->set(['id' => Str::random('uuid'), 'name' => 'RIGHT_WATCH_DISABLED'])->execute();
DB::insert('permission')->set(['id' => Str::random('uuid'), 'name' => 'RIGHT_DOWNLOAD_DISABLED'])->execute();
DB::insert('permission')->set(['id' => Str::random('uuid'), 'name' => 'RIGHT_MAX_WATCH', 'parameters' => 1])->execute();
DB::insert('permission')->set(['id' => Str::random('uuid'), 'name' => 'RIGHT_MAX_QUALITY', 'parameters' => 1])->execute();
DB::insert('permission')->set(['id' => Str::random('uuid'), 'name' => 'RIGHT_MAX_CONCURRENT_STREAM', 'parameters' => 1])->execute();
DB::insert('permission')->set(['id' => Str::random('uuid'), 'name' => 'RIGHT_MAX_DOWNLOAD', 'parameters' => 1])->execute();
DB::insert('permission')->set(['id' => Str::random('uuid'), 'name' => 'RIGHT_MAX_DOWNLOAD_SPEED', 'parameters' => 1])->execute();
$logs .= 'Permission created!'."\r\n";
$migration = Migrate::current();
$logs .= 'All Tables and Foreign Key successfully!'."\r\n";
$logs = 'All Tables and Foreign Key are successfully install!'."\r\n";
return $this->response(['error' => false, 'message' => $logs]);
} catch (FuelException $e) {

@ -11,7 +11,12 @@ class Controller_Rest_Search extends Controller_Rest
{
$search = '%'.Input::get('search').'%';
$query = DB::query('SELECT * FROM '.DB::table_prefix('movie').' WHERE '.DB::table_prefix('movie').'.type = :type AND ('.DB::table_prefix('movie').'.`title` LIKE :search OR MATCH('.DB::table_prefix('movie').'.`title`) AGAINST(:search)) ORDER BY MATCH('.DB::table_prefix('movie').'.`title`) AGAINST(:search) DESC LIMIT 5');
$query = DB::query('SELECT * FROM '.DB::table_prefix('movie').
' WHERE '.DB::table_prefix('movie').'.type = :type
AND ('.DB::table_prefix('movie').'.`title` LIKE :search
OR MATCH('.DB::table_prefix('movie').'.`title`) AGAINST(:search))
ORDER BY MATCH('.DB::table_prefix('movie').'.`title`)
AGAINST(:search) DESC LIMIT 5');
$query->bind('search', $search);

@ -3,7 +3,8 @@
use Fuel\Core\Config;
use Fuel\Core\Input;
use Fuel\Core\Lang;
use Fuel\Core\Response;
use Fuel\Core\Migrate;
use Fuel\Core\Response;
use Fuel\Core\Session;
use Fuel\Core\View;

@ -307,24 +307,25 @@ class Model_Movie extends Model_Overwrite
$request = $this->_server->https === '1' ? 'https' : 'http';
$request .= '://' . $this->_server->url . ($this->_server->port ? ':' . $this->_server->port : '');
//$request .= '/video/:/transcode/universal/decision?hasMDE=1'; // DASH
//$request .= '/video/:/transcode/universal/start.mpd?hasMDE=1'; // DASH
$request .= '/video/:/transcode/universal/start.m3u8'; // HLS
$request .= '?identifier=[PlexShare_V0.0.1]';
$request .= '&path=http%3A%2F%2F127.0.0.1%3A32400' . urlencode($this->plex_key);
$request .= '&mediaIndex=0';
$request .= '&partIndex=0';
//$request .= '&protocol=dash';
$request .= '&protocol=hls';
$request .= '&offset=0';
$request .= '&fastSeek=1';
$request .= '&directStream=0';
$request .= '&directPlay=1';
$request .= '&directStream=1';
$request .= '&directPlay=0';
$request .= '&videoQuality=100';
$request .= '&maxVideoBitrate=' . $maxVideoBitrate;
$request .= '&subtitleSize=' . $subtitleSize;
$request .= '&audioBoost=100';
$request .= '&videoResolution=1920x1080';
$request .= '&Accept-Language=' . $language;
$request .= '&X-Plex-Platform=Firefox';
$request .= '&X-Plex-Platform=Chrome';
$request .= '&X-Plex-Token=' . $this->_server->token;
$curl = Request::forge($request, 'curl');
@ -357,9 +358,9 @@ class Model_Movie extends Model_Overwrite
//return ($this->_server->https === '1' ? 'https' : 'http') . '://' . $this->_server->url . ($this->_server->port ? ':' . $this->_server->port : '') . '/video/:/transcode/universal/session/' . $this->_session . '/base/index.m3u8';
} catch (Exception $exception) {
if($exception->getCode() === 403)
throw new FuelException('Cannot connect to the server.<br/>The token must be outdated!',$exception->getCode());
throw new FuelException('Cannot connect to the server.<br/>The token must be outdated!', 200);
else
throw new FuelException($exception->getMessage(),$exception->getCode());
throw new FuelException($exception->getMessage(), 200);
}
}

@ -6,6 +6,7 @@ class Model_Permission extends Model_Overwrite
{
/**
* RIGHT_WATCH_DISABLED
* RIGHT_TRAILER_DISABLED
* RIGHT_DOWNLOAD_DISABLED
* RIGHT_MAX_DOWNLOAD
* RIGHT_MAX_DOWNLOAD_SPEED
@ -25,9 +26,9 @@ class Model_Permission extends Model_Overwrite
/**
* @param string $permission
* @param Model_Movie $movie
* @return bool|int
* @return bool|int FALSE allow to download & TRUE block to download
*/
public static function isGranted($permission, Model_Library $library = null, $data = null)
public static function isGranted($permission, Model_Library $library, $data = null)
{
$user = Session::get('user');
@ -59,13 +60,25 @@ class Model_Permission extends Model_Overwrite
return true;
}
if ($permission->name === 'RIGHT_TRAILER_DISABLED') {
if($library_permission === null)
return false;
else
return true;
}
if ($permission->name === 'RIGHT_MAX_DOWNLOAD') {
/** @TODO IF (NUMBER_DOWNLOAD <= MAX_DOWNLOAD) // in last 24h
* RETURN TRUE
* ELSE
/** @TODO IF (MAX_DOWNLOAD > NUMBER_DOWNLOAD) // in last 24h
* RETURN FALSE
* ELSE
* RETURN TRUE
*/
return true;
if($library_permission === NULL)
return false;
else if((int)$library_permission->value > $data)
return false;
else
return true;
}
if ($permission->name === 'RIGHT_MAX_DOWNLOAD_SPEED') {

@ -1,8 +0,0 @@
<?php
use Fuel\Core\Model;
class Model_Plex extends Model
{
}

@ -121,6 +121,11 @@ class Model_Server extends Model_Overwrite
return $libraries;
}
public function getHubs()
{
}
public function getThirtyLastedTvShows()
{
try {
@ -167,33 +172,6 @@ class Model_Server extends Model_Overwrite
} catch (Exception $exception){
Debug::dump($exception);
}
//return self::find(function ($query) use ($server) {
/** @var Database_Query_Builder_Select $query */
/*return $query
->select('movie.*', DB::expr('COUNT(' . DB::table_prefix('movie') . '.type) AS count'))
->join('season', 'LEFT')
->on('movie.season_id', '=', 'season.id')
->join('tvshow', 'LEFT')
->on('season.tv_show_id', '=', 'tvshow.id')
->join('library', 'LEFT')
->on('tvshow.library_id', '=', 'library.id')
->join('server', 'LEFT')
->on('library.server_id', '=', 'server.id')
->where('server.id', $server->id)
->and_where('server.online', 1)
->and_where('server.disable', 0)
->and_where('library.disable', 0)
->and_where('tvshow.disable', 0)
->and_where('season.disable', 0)
->and_where('movie.disable', 0)
->and_where('movie.type', 'episode')
->order_by('movie.addedAt', 'DESC')
->order_by(DB::expr('MAX(' . DB::table_prefix('movie') .'.addedAt)'), 'DESC ')//'movie.addedAt', 'DESC')
->group_by('movie.season_id')
->limit(30)
;
});*/
}
public function getThirtyLastedMovies()

@ -36,7 +36,7 @@ class Model_User extends Model_Overwrite
public static function Login($login, $password)
{
$result = self::find_by(function ($query) use ($login,$password){
$result = self::find_one_by(function ($query) use ($login,$password){
return $query
->where('password', $password)
->and_where('parent_id', null)
@ -48,7 +48,7 @@ class Model_User extends Model_Overwrite
});
if($result !== null)
return $result[0];
return $result;
else
return false;
}

@ -0,0 +1,14 @@
<?php
class Model_User_Download extends Model_Overwrite
{
protected static $_table_name = 'user_download';
protected static $_primary_key = 'id';
protected static $_properties = array(
"id",
"user_id",
"movie_id",
"date"
);
}

@ -0,0 +1,34 @@
<?php
return array(
'version' =>
array(
'app' =>
array(
'default' =>
array(
0 => '001_create_configurations',
1 => '002_create_library',
2 => '003_create_library_permission',
3 => '004_create_movie',
4 => '005_create_permission',
5 => '006_create_season',
6 => '007_create_server',
7 => '008_create_tvshow',
8 => '009_create_user',
9 => '010_create_user_history',
10 => '011_create_user_permission',
11 => '012_create_user_settings',
12 => '013_create_user_download',
),
),
'module' =>
array(
),
'package' =>
array(
),
),
'folder' => 'migrations/',
'table' => 'migration',
'flush_cache' => false,
);

@ -9,7 +9,7 @@ return array(
'season/:season_id' => 'season/index',
'episode/:movie_id/download' => 'movie/download',
'episode/:episode_id' => 'episode/index',
'movie/:movie_id/video/\:/transcode/:transcode/session/:session/base/:base' => 'movie/stream',
'movie/:movie_id/video/\:/transcode/:transcode/session/:session/:index/:base' => 'movie/stream',
'movie/:movie_id/download' => 'movie/download',
'movie/:movie_id' => 'movie/index',
'movie/list' => 'movie/list',

@ -1,7 +1,10 @@
<?php
return [
'recently' => [
'tv_shows' => 'Recently added TV Show',
'movies' => 'Recently added Movies'
]
'all_libraries' => 'All libraries',
'continue_to_watch' => 'Continue to watch',
'discover' => 'Discover',
'recently' => [
'tv_shows' => 'Recently added TV Show',
'movies' => 'Recently added Movies'
]
];

@ -1,6 +1,8 @@
<?php return [
'RIGHT_WATCH_DISABLED' => 'Block Watch',
'RIGHT_WATCH_DISABLED_DESCRIPTION' => 'Block user to watch movie/tv show.',
'RIGHT_TRAILER_DISABLED' => 'Block Trailer',
'RIGHT_TRAILER_DISABLED_DESCRIPTION' => 'Block user to watch trailer of the movie.',
'RIGHT_MAX_WATCH' => 'Max watch in 24H',
'RIGHT_MAX_WATCH_DESCRIPTION' => 'Maximum number to watch movie/tv show in 24H by user.',
'RIGHT_MAX_QUALITY' => 'Stream Quality',
@ -9,6 +11,8 @@
'RIGHT_MAX_CONCURRENT_STREAM_DESCRIPTION' => 'Number of concurrent stream allowed by user.',
'RIGHT_DOWNLOAD_DISABLED' => 'Block Download',
'RIGHT_DOWNLOAD_DISABLED_DESCRIPTION' => 'Remove the permission to a user to download movie/tv show.',
'RIGHT_MAX_DOWNLOAD_SPEED' => 'Download speed',
'RIGHT_MAX_DOWNLOAD_SPEED_DESCRIPTION' => 'You can put a limit of speed download to reduce the overload of the server',
'RIGHT_MAX_DOWNLOAD' => 'Max Download',
'RIGHT_MAX_DOWNLOAD_DESCRIPTION' => 'The maximum number of download allow to a user in 24H.',
];

@ -18,12 +18,12 @@ class Create_library
'disable' => array('default' => '0', 'type' => 'int', 'null' => false, 'constraint' => 1),
), array('id'));
\DB::query('CREATE INDEX constraintServerLibrary ON library(`server_id`)')->execute();
\DB::query('CREATE INDEX constraintServerLibrary ON ' . \DB::table_prefix('library') . '(`server_id`)')->execute();
}
public function down()
{
\DB::query('DROP INDEX constraintServerLibrary ON library')->execute();
\DB::query('DROP INDEX constraintServerLibrary ON ' . \DB::table_prefix('library'))->execute();
\DBUtil::drop_table('library');
}

@ -14,14 +14,14 @@ class Create_library_permission
'disable' => array('default' => '0', 'type' => 'int', 'null' => false, 'constraint' => 1),
), array('id'));
\DB::query('CREATE INDEX constraintPermissionLibrariesPermission ON library_permission(`permission_id`)')->execute();
\DB::query('CREATE INDEX constraintLibraryLibrariesPermission ON library_permission(`library_id`)')->execute();
\DB::query('CREATE INDEX constraintPermissionLibrariesPermission ON ' . \DB::table_prefix('library_permission') . '(`permission_id`)')->execute();
\DB::query('CREATE INDEX constraintLibraryLibrariesPermission ON ' . \DB::table_prefix('library_permission') . '(`library_id`)')->execute();
}
public function down()
{
\DB::query('DROP INDEX constraintPermissionLibrariesPermission ON library_permission')->execute();
\DB::query('DROP INDEX constraintLibraryLibrariesPermission ON library_permission')->execute();
\DB::query('DROP INDEX constraintPermissionLibrariesPermission ON ' . \DB::table_prefix('library_permission'))->execute();
\DB::query('DROP INDEX constraintLibraryLibrariesPermission ON ' . \DB::table_prefix('library_permission'))->execute();
\DBUtil::drop_table('library_permission');
}

@ -28,16 +28,16 @@ class Create_movie
'disable' => array('default' => '0', 'type' => 'int', 'null' => false, 'constraint' => 1),
), array('id'));
\DB::query('CREATE INDEX constraintMovieLibrary ON movie(`library_id`)')->execute();
\DB::query('CREATE INDEX constraintMovieSeason ON movie(`season_id`)')->execute();
\DB::query('CREATE INDEX searchTitle ON movie(`title` DESC)')->execute();
\DB::query('CREATE INDEX constraintMovieLibrary ON ' . \DB::table_prefix('movie') . '(`library_id`)')->execute();
\DB::query('CREATE INDEX constraintMovieSeason ON ' . \DB::table_prefix('movie') . '(`season_id`)')->execute();
\DB::query('CREATE INDEX searchTitle ON ' . \DB::table_prefix('movie') . '(`title` DESC)')->execute();
}
public function down()
{
\DB::query('DROP INDEX constraintMovieLibrary ON movie')->execute();
\DB::query('DROP INDEX constraintMovieSeason ON movie')->execute();
\DB::query('DROP INDEX searchTitle ON movie')->execute();
\DB::query('DROP INDEX constraintMovieLibrary ON ' . \DB::table_prefix('movie'))->execute();
\DB::query('DROP INDEX constraintMovieSeason ON ' . \DB::table_prefix('movie'))->execute();
\DB::query('DROP INDEX searchTitle ON ' . \DB::table_prefix('movie'))->execute();
\DBUtil::drop_table('movie');
}

@ -13,14 +13,14 @@ class Create_permission
'disable' => array('default' => '0', 'type' => 'int', 'null' => false, 'constraint' => 1),
), array('id'));
DB::insert('permission')->set(['id' => Str::random('uuid'), 'name' => 'RIGHT_WATCH_DISABLED'])->execute();
DB::insert('permission')->set(['id' => Str::random('uuid'), 'name' => 'RIGHT_DOWNLOAD_DISABLED'])->execute();
DB::insert('permission')->set(['id' => Str::random('uuid'), 'name' => 'RIGHT_TRAILER_DISABLED'])->execute();
DB::insert('permission')->set(['id' => Str::random('uuid'), 'name' => 'RIGHT_MAX_WATCH', 'parameters' => 1])->execute();
DB::insert('permission')->set(['id' => Str::random('uuid'), 'name' => 'RIGHT_MAX_QUALITY', 'parameters' => 1])->execute();
DB::insert('permission')->set(['id' => Str::random('uuid'), 'name' => 'RIGHT_MAX_CONCURRENT_STREAM', 'parameters' => 1])->execute();
DB::insert('permission')->set(['id' => Str::random('uuid'), 'name' => 'RIGHT_MAX_DOWNLOAD', 'parameters' => 1])->execute();
DB::insert('permission')->set(['id' => Str::random('uuid'), 'name' => 'RIGHT_MAX_DOWNLOAD_SPEED', 'parameters' => 1])->execute();
\DB::insert('permission')->set(['id' => \Str::random('uuid'), 'name' => 'RIGHT_WATCH_DISABLED'])->execute();
\DB::insert('permission')->set(['id' => \Str::random('uuid'), 'name' => 'RIGHT_DOWNLOAD_DISABLED'])->execute();
\DB::insert('permission')->set(['id' => \Str::random('uuid'), 'name' => 'RIGHT_TRAILER_DISABLED'])->execute();
\DB::insert('permission')->set(['id' => \Str::random('uuid'), 'name' => 'RIGHT_MAX_WATCH', 'parameters' => 1])->execute();
\DB::insert('permission')->set(['id' => \Str::random('uuid'), 'name' => 'RIGHT_MAX_QUALITY', 'parameters' => 1])->execute();
\DB::insert('permission')->set(['id' => \Str::random('uuid'), 'name' => 'RIGHT_MAX_CONCURRENT_STREAM', 'parameters' => 1])->execute();
\DB::insert('permission')->set(['id' => \Str::random('uuid'), 'name' => 'RIGHT_MAX_DOWNLOAD', 'parameters' => 1])->execute();
\DB::insert('permission')->set(['id' => \Str::random('uuid'), 'name' => 'RIGHT_MAX_DOWNLOAD_SPEED', 'parameters' => 1])->execute();
}
public function down()

@ -20,12 +20,12 @@ class Create_season
'disable' => array('default' => '0', 'type' => 'int', 'null' => false, 'constraint' => 1),
), array('id'));
\DB::query('CREATE INDEX constraintSeasonTvShow ON season(`tv_show_id`)')->execute();
\DB::query('CREATE INDEX constraintSeasonTvShow ON ' . \DB::table_prefix('season') . '(`tv_show_id`)')->execute();
}
public function down()
{
\DB::query('DROP INDEX constraintSeasonTvShow ON season')->execute();
\DB::query('DROP INDEX constraintSeasonTvShow ON ' . \DB::table_prefix('season'))->execute();
\DBUtil::drop_table('season');
}

@ -23,12 +23,12 @@ class Create_server
'disable' => array('default' => '0', 'type' => 'int', 'null' => false, 'constraint' => 1),
), array('id'));
\DB::query('CREATE INDEX constraintServerUser ON server(`user_id`)')->execute();
\DB::query('CREATE INDEX constraintServerUser ON ' . \DB::table_prefix('server') . '(`user_id`)')->execute();
}
public function down()
{
\DB::query('DROP INDEX constraintServerUser ON server')->execute();
\DB::query('DROP INDEX constraintServerUser ON ' . \DB::table_prefix('server'))->execute();
\DBUtil::drop_table('server');
}

@ -27,12 +27,12 @@ class Create_tvshow
'disable' => array('default' => '0', 'type' => 'int', 'null' => false, 'constraint' => 1),
), array('id'));
\DB::query('CREATE INDEX constraintTvShowLibrary ON tvshow(`library_id`)')->execute();
\DB::query('CREATE INDEX constraintTvShowLibrary ON ' . \DB::table_prefix('tvshow') . '(`library_id`)')->execute();
}
public function down()
{
\DB::query('DROP INDEX constraintTvShowLibrary ON tvshow')->execute();
\DB::query('DROP INDEX constraintTvShowLibrary ON ' . \DB::table_prefix('tvshow'))->execute();
\DBUtil::drop_table('tvshow');
}

@ -17,12 +17,12 @@ class Create_user
'disable' => array('default' => '0', 'type' => 'int', 'null' => false, 'constraint' => 1),
), array('id'));
\DB::query('CREATE INDEX constraintUserUser ON user(`parent_id`)')->execute();
\DB::query('CREATE INDEX constraintUserUser ON ' . \DB::table_prefix('user') . '(`parent_id`)')->execute();
}
public function down()
{
\DB::query('DROP INDEX constraintUserUser ON user')->execute();
\DB::query('DROP INDEX constraintUserUser ON ' . \DB::table_prefix('season'))->execute();
\DBUtil::drop_table('user');
}

@ -15,14 +15,14 @@ class Create_user_history
'is_ended' => array('default' => '0', 'type' => 'int', 'null' => false, 'constraint' => 1),
), array('id'));
\DB::query('CREATE INDEX constraintUserUserHistory ON user_history(`user_id`)')->execute();
\DB::query('CREATE INDEX constraintMovieHistory ON user_history(`movie_id`)')->execute();
\DB::query('CREATE INDEX constraintUserUserHistory ON ' . \DB::table_prefix('user_history') . '(`user_id`)')->execute();
\DB::query('CREATE INDEX constraintMovieHistory ON ' . \DB::table_prefix('user_history') . '(`movie_id`)')->execute();
}
public function down()
{
\DB::query('DROP INDEX constraintUserUserHistory ON user_history')->execute();
\DB::query('DROP INDEX constraintMovieHistory ON user_history')->execute();
\DB::query('DROP INDEX constraintUserUserHistory ON ' . \DB::table_prefix('user_history'))->execute();
\DB::query('DROP INDEX constraintMovieHistory ON ' . \DB::table_prefix('user_history'))->execute();
\DBUtil::drop_table('user_history');
}

@ -15,16 +15,16 @@ class Create_user_permission
'disable' => array('default' => '0', 'type' => 'int', 'null' => false, 'constraint' => 1),
), array('id'));
\DB::query('CREATE INDEX constraintPermissionUserPermission ON user_permission(`permission_id`)')->execute();
\DB::query('CREATE INDEX constraintUserUserPermission ON user_permission(`user_id`)')->execute();
\DB::query('CREATE INDEX constraintLibraryUserPermission ON user_permission(`library_id`)')->execute();
\DB::query('CREATE INDEX constraintPermissionUserPermission ON ' . \DB::table_prefix('user_permission') . '(`permission_id`)')->execute();
\DB::query('CREATE INDEX constraintUserUserPermission ON ' . \DB::table_prefix('user_permission') . '(`user_id`)')->execute();
\DB::query('CREATE INDEX constraintLibraryUserPermission ON ' . \DB::table_prefix('user_permission') . '(`library_id`)')->execute();
}
public function down()
{
\DB::query('DROP INDEX constraintPermissionUserPermission ON user_permission')->execute();
\DB::query('DROP INDEX constraintUserUserPermission ON user_permission')->execute();
\DB::query('DROP INDEX constraintLibraryUserPermission ON user_permission')->execute();
\DB::query('DROP INDEX constraintPermissionUserPermission ON ' . \DB::table_prefix('user_permission'))->execute();
\DB::query('DROP INDEX constraintUserUserPermission ON ' . \DB::table_prefix('user_permission'))->execute();
\DB::query('DROP INDEX constraintLibraryUserPermission ON ' . \DB::table_prefix('user_permission'))->execute();
\DBUtil::drop_table('user_permission');
}

@ -16,12 +16,12 @@ class Create_user_settings
'maxdownloadspeed' => array('default' => '-1', 'type' => 'int', 'null' => false, 'constraint' => 11),
), array('id'));
\DB::query('CREATE INDEX constraintUserUserSetting ON user_settings(`user_id`)')->execute();
\DB::query('CREATE INDEX constraintUserUserSetting ON ' . \DB::table_prefix('user_settings') . '(`user_id`)')->execute();
}
public function down()
{
\DB::query('DROP INDEX constraintUserUserSetting ON user_settings')->execute();
\DB::query('DROP INDEX constraintUserUserSetting ON ' . \DB::table_prefix('user_settings'))->execute();
\DBUtil::drop_table('user_settings');
}

@ -0,0 +1,27 @@
<?php
namespace Fuel\Migrations;
class Create_user_download
{
public function up()
{
\DBUtil::create_table('user_download', array(
'id' => array('type' => 'varchar', 'null' => false, 'constraint' => 36),
'user_id' => array('type' => 'varchar', 'null' => false, 'constraint' => 36),
'movie_id' => array('type' => 'varchar', 'null' => false, 'constraint' => 36),
'date' => array('type' => 'int', 'null' => false, 'constraint' => 11),
), array('id'));
\DB::query('CREATE INDEX constraintDownloadUser ON ' . \DB::table_prefix('user_download') . '(`user_id`)')->execute();
\DB::query('CREATE INDEX constraintDownloadMovie ON ' . \DB::table_prefix('user_download') . '(`movie_id`)')->execute();
}
public function down()
{
\DB::query('DROP INDEX constraintDownloadUser ON ' . \DB::table_prefix('user_download'))->execute();
\DB::query('DROP INDEX constraintDownloadMovie ON ' . \DB::table_prefix('user_download'))->execute();
\DBUtil::drop_table('user_download');
}
}

@ -1,9 +1,9 @@
<div class="PageHeader-pageHeader-18RSw">
<div class="PageHeaderLeft-pageHeaderLeft-2TxSo"><span>Découvrir<span
<div class="PageHeaderLeft-pageHeaderLeft-2TxSo"><span><?php echo __('discover'); ?><span
class="PageHeaderSeparator-pageHeaderSeparator-221fi DashSeparator-separator-2a3yn">—</span></span>
<button aria-haspopup="true" data-qa-id="directoriesMenuButton" id="id-1976" role="button"
class="PageHeaderBreadcrumbButton-button-1uaPj DisclosureArrowButton-disclosureArrowButton-3tbYZ DisclosureArrowButton-medium-3-Y37 DisclosureArrowButton-isSelected-oswRN Link-link-2XYrU Link-default-32xSO Link-isSelected-3GpAs"
type="button">Toutes les bibliothèques
type="button"><?php echo __('all_libraries'); ?>
<div class="DisclosureArrowButton-disclosureArrow-34Wg3 DisclosureArrow-disclosureArrow-1sBFv DisclosureArrowButton-down-bd2wx DisclosureArrowButton-medium-3-Y37 DisclosureArrow-down-1U7WW DisclosureArrow-up-rjGpc DisclosureArrow-default-3_FCW DisclosureArrow-medium-3VjTd DisclosureArrow-isSelected-VMAVr"></div>
</button>
</div>
@ -16,7 +16,7 @@
<div class="HubCell-hubCell-3Ys17" style="visibility: visible;" data-qa-id="hub--home.continue">
<div class="HubCellHeader-hubCellHeader-2pvYN HubCellHeader-hubCellHeader-2pvYN">
<div class="MetadataHubCellHeader-title-3ngFlY HubCellTitle-hubCellTitle-2abIn"
data-qa-id="hubCellTitle">CONTINUER À REGARDER<span
data-qa-id="hubCellTitle"><?php echo strtoupper(__('continue_to_watch')); ?><span
class="MetadataHubCellHeader-titleSeparator-2XLwHj DashSeparator-separator-2a3yn">—</span><span
class="MetadataHubCellHeader-sourceTitle-VjjOkx">Hack-Free</span></div>
</div>

@ -19,7 +19,7 @@
class="ToolbarButton-toolbarButton-3xzHJ Link-link-2XYrU Link-default-32xSO"
type="button"><i class="plex-icon-toolbar-play-560" aria-hidden="true"></i>
</button>
<?php if($movie->getTrailer() !== null) : ?>
<?php if(!Model_Permission::isGranted('RIGHT_TRAILER_DISABLED', $movie->getLibrary()) && $movie->getTrailer() !== null) : ?>
<button id="id-362" title="<?php echo __('watch_trailer'); ?>" data-placement="bottom" data-toggle="tooltip" role="button" class="ToolbarButton-toolbarButton-3xzHJ Link-link-2XYrU Link-default-32xSO" type="button">
<i class="plex-icon-toolbar-play-trailer-560" aria-hidden="true"></i>
</button>
@ -77,7 +77,7 @@
</div>
</div>
</div>
<?php if($movie->getTrailer() !== null) : ?>
<?php if(!Model_Permission::isGranted('RIGHT_TRAILER_DISABLED', $movie->getLibrary()) && $movie->getTrailer() !== null) : ?>
<div style="font-size: 20px;padding: 0;" class="col-sm-12 text-center">
<button id="id-362" class="Link-link-2XYrU Link-default-32xSO" style="background: #dc3535;border-radius: 3px;padding: 0 7px;width: 100%;margin-top: 15px;">
<i class="glyphicon video-hd"></i> <?php echo __('watch_trailer'); ?>

Loading…
Cancel
Save