diff --git a/fuel/app/classes/controller/admin.php b/fuel/app/classes/controller/admin.php index 57c267a..9456e2e 100755 --- a/fuel/app/classes/controller/admin.php +++ b/fuel/app/classes/controller/admin.php @@ -1,63 +1,64 @@ -admin) - Response::redirect('/home'); - - Lang::load('menu'); - Lang::load('action'); - - $this->template->user = Session::get('user'); - - $this->template->js_bottom = ['plex_alert.js']; - } - - public function action_index() - { - $body = View::forge('admin/index'); - - $this->template->body = $body; - } - - public function action_servers() - { - $this->template->js_bottom = ['plex_alert.js', 'server_refresh.js']; - - $body = View::forge('admin/servers'); - - $servers = Model_Server::find_all(); - - $body->set('servers', $servers); - - $this->template->body = $body; - } - - public function action_users() - { - $this->template->js_bottom = ['plex_alert.js']; - - $body = View::forge('admin/users'); - - $users = Model_User::find_all(); - - $body->set('users', $users); - - $this->template->body = $body; - } -} +admin) + Response::redirect('/home'); + + Lang::load('menu'); + Lang::load('action'); + + $this->template->user = Session::get('user'); + + $this->template->js_bottom = ['plex_alert.js']; + } + + public function action_index() + { + $body = View::forge('admin/index'); + + $this->template->body = $body; + } + + public function action_servers() + { + $this->template->js_bottom = ['plex_alert.js', 'server_refresh.js']; + + $body = View::forge('admin/servers'); + + $servers = Model_Server::find_all(); + + $body->set('servers', $servers); + + $this->template->body = $body; + } + + public function action_users() + { + $this->template->js_bottom = ['plex_alert.js']; + + $body = View::forge('admin/users'); + + $users = Model_User::find_all(); + + $body->set('users', $users); + + $this->template->body = $body; + } +} diff --git a/fuel/app/classes/controller/cover.php b/fuel/app/classes/controller/cover.php index bd90c7a..7c90c4f 100644 --- a/fuel/app/classes/controller/cover.php +++ b/fuel/app/classes/controller/cover.php @@ -1,5 +1,6 @@ getCover($width, $height); - else - $images = $season->getThumb($width, $height); + if (!$thumb) + $images = $season->getCover($width, $height); + else + $images = $season->getThumb($width, $height); - $response = new Response(); - $response->set_header('Content-Type', 'image/jpeg'); - $response->set_header('Content-Length',strlen($images)); - $response->body($images); + $response = new Response(); + $response->set_header('Content-Type', 'image/jpeg'); + $response->set_header('Content-Length', strlen($images)); + $response->body($images); - return $response; + return $response; + } catch (Exception $e) { + Debug::dump($e);die(); + } } } \ No newline at end of file diff --git a/fuel/app/classes/controller/home.php b/fuel/app/classes/controller/home.php index ba3d383..9362d69 100755 --- a/fuel/app/classes/controller/home.php +++ b/fuel/app/classes/controller/home.php @@ -1,6 +1,7 @@ id) : (Model_Server::find_one_by('user_id', $user->id) ?: Model_Server::find_by([ @@ -58,10 +59,10 @@ class Controller_Home extends Controller_Template $server_id = $this->param('server_id'); - if($server_id !== NULL) { + if ($server_id !== NULL) { $server = Model_Server::find_by_pk($server_id); - if($server) + if ($server) $this->template->MenuServer = $server; } @@ -70,9 +71,9 @@ class Controller_Home extends Controller_Template $this->template->MenuLibraries = $this->template->MenuServer->getLibraries(); - $episodes = Model_Movie::getThirtyLastedTvShows($this->template->MenuServer); + $episodes = $this->template->MenuServer->getThirtyLastedTvShows(); - $movies = Model_Movie::getThirtyLastedMovies($this->template->MenuServer); + $movies = $this->template->MenuServer->getThirtyLastedMovies($this->template->MenuServer); $body->set('episodes', $episodes); $body->set('movies', $movies); diff --git a/fuel/app/classes/controller/index.php b/fuel/app/classes/controller/index.php index 081eb1c..d16441b 100644 --- a/fuel/app/classes/controller/index.php +++ b/fuel/app/classes/controller/index.php @@ -1,7 +1,9 @@ array('constraint' => 36, 'type' => 'varchar'), - 'file_id' => array('constraint' => 11, 'type' => 'int'), - 'user_id' => array('constraint' => 36, 'type' => 'varchar'), + 'user_id' => array('constraint' => 11, 'type' => 'int'), + 'movie_id' => array('constraint' => 36, 'type' => 'varchar'), 'watching_time' => array('constraint' => 11, 'type' => 'int'), - 'ended' => array('constraint' => 1, 'type' => 'int', 'default' => 0), - 'disable' => array('constraint' => 1, 'type' => 'int', 'default' => 0) + 'ended_time' => array('constraint' => 11, 'type' => 'int', 'default' => 0), + 'isFinish' => array('constraint' => 1, 'type' => 'int', 'default' => 0) ), array('id'), false, 'InnoDB', 'utf8_unicode_ci' ); @@ -318,7 +318,7 @@ class Controller_Rest_Install extends Controller_Rest $logs .= 'Creation table user settings'."\r\n"; /** - * CREATE TABLE USER'S WATCHING + * CREATE TABLE USER'S SETTINGS */ DBUtil::create_table( 'user_settings', @@ -439,6 +439,26 @@ class Controller_Rest_Install extends Controller_Rest 'on_update' => 'NO ACTION', 'on_delete' => 'NO ACTION', )); + DBUtil::add_foreign_key('user_watching', array( + 'constraint' => 'constraintMovieWatching', + 'key' => 'movie_id', + 'reference' => array( + 'table' => 'movie', + 'column' => 'id', + ), + 'on_update' => 'NO ACTION', + 'on_delete' => 'NO ACTION', + )); + DBUtil::add_foreign_key('user_setting', array( + 'constraint' => 'constraintUserSetting', + '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', @@ -485,7 +505,7 @@ class Controller_Rest_Install extends Controller_Rest $logs .= 'All Tables and Foreign Key successfully!'."\r\n"; - return $this->response(array('error' => false, 'message' => $logs)); + return $this->response(['error' => false, 'message' => $logs]); } catch (FuelException $e) { try { DBUtil::drop_table('user_watching'); diff --git a/fuel/app/classes/controller/rest/library.php b/fuel/app/classes/controller/rest/library.php index b084bc8..3ee541a 100644 --- a/fuel/app/classes/controller/rest/library.php +++ b/fuel/app/classes/controller/rest/library.php @@ -11,8 +11,8 @@ class Controller_Rest_Library extends Controller_Rest try { $library_id = Input::post('library_id'); $right_name = Input::post('right_name'); - $checked = Input::post('checked'); - $parameter = Input::post('parameter'); + $checked = Input::post('checked'); + $parameter = Input::post('parameter'); if ($library_id === null || $right_name === null || $checked === null) throw new FuelException('Missing parameters'); diff --git a/fuel/app/classes/controller/rest/movie.php b/fuel/app/classes/controller/rest/movie.php index fb788c0..22ee1f1 100644 --- a/fuel/app/classes/controller/rest/movie.php +++ b/fuel/app/classes/controller/rest/movie.php @@ -1,6 +1,8 @@ id] + ]) ?: new Model_User_Watching(); + + return $this->response(['error' => false, 'message' => 'OK!'], 200); + } catch (Exception $exception) { + return $this->response($exception->getMessage(), 500); + } + } +} \ No newline at end of file diff --git a/fuel/app/classes/controller/rest/settings.php b/fuel/app/classes/controller/rest/settings.php index 4edbac9..c79dbdd 100644 --- a/fuel/app/classes/controller/rest/settings.php +++ b/fuel/app/classes/controller/rest/settings.php @@ -19,11 +19,11 @@ class Controller_Rest_Settings extends Controller_Rest public function post_server() { try { - $server_id = Input::post('server_id'); - $url = Input::post('url'); - $port = Input::post('port'); - $token = Input::post('token'); - $https = Input::post('https') === 'true' ? true : false; + $server_id = Input::post('server_id'); + $url = Input::post('url'); + $port = Input::post('port'); + $token = Input::post('token'); + $https = Input::post('https') === 'true' ? true : false; //@TODO CHECK AND REMOVE HTTP AND HTTPS diff --git a/fuel/app/classes/controller/settings.php b/fuel/app/classes/controller/settings.php index 77f059b..d8afc47 100644 --- a/fuel/app/classes/controller/settings.php +++ b/fuel/app/classes/controller/settings.php @@ -65,12 +65,12 @@ class Controller_Settings extends Controller_Template $default_settings = Config::load('user_settings'); - $settings = Model_Settings::find_one_by('user_id', Session::get('user')->id); + $settings = Model_Setting::find_one_by('user_id', Session::get('user')->id); $is_submit = Input::post('submit'); if(isset($is_submit)) { - $settings = !empty($settings) ? $settings : new Model_Settings(); + $settings = !empty($settings) ? $settings : new Model_Setting(); $settings->set([ 'user_id' => $this->_user->id, 'language' => Input::post('language'), diff --git a/fuel/app/classes/controller/settings/libraries.php b/fuel/app/classes/controller/settings/libraries.php index 275f7ba..5c32427 100644 --- a/fuel/app/classes/controller/settings/libraries.php +++ b/fuel/app/classes/controller/settings/libraries.php @@ -1,5 +1,6 @@ template->js_bottom = ['plex_alert.js']; + Lang::load('permissions'); + $body = View::forge('settings/libraries/permissions'); $library_id = $this->param('library_id'); diff --git a/fuel/app/classes/model/movie.php b/fuel/app/classes/model/movie.php index 22473ed..9116f0f 100644 --- a/fuel/app/classes/model/movie.php +++ b/fuel/app/classes/model/movie.php @@ -1,14 +1,11 @@ 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 static function getThirtyLastedMovies($server) - { - return self::find(function ($query) use ($server) { - /** @var Database_Query_Builder_Select $query */ - return $query - ->select('movie.*') - ->join('library', 'LEFT') - ->on('movie.library_id', '=', 'library.id') - ->join('server', 'LEFT') - ->on('library.server_id', '=', 'server.id') - ->where('server.id', $server->id) - ->and_where('movie.disable', 0) - ->and_where('movie.type', 'movie') - ->order_by('movie.addedAt', 'DESC') - ->limit(30) - ; - }); - } - public static function getList() { return self::find(function ($query) { diff --git a/fuel/app/classes/model/server.php b/fuel/app/classes/model/server.php index bfe2a51..5b7be0f 100755 --- a/fuel/app/classes/model/server.php +++ b/fuel/app/classes/model/server.php @@ -1,8 +1,11 @@ https === '1' ? 'https' : 'http').'://' . $this->url . ($this->port ? ':' . $this->port : '') . '/hubs/home/recentlyAdded?type=2&X-Plex-Token=' . $this->token, 'curl'); + + if($this->https) { + $curl->set_options([ + CURLOPT_SSL_VERIFYPEER => false, + CURLOPT_SSL_VERIFYHOST => false + ]); + } + + $curl->set_header('Accept', 'application/json'); + + $curl->execute(); + + $body = json_decode($curl->response()->body); + + $datas = $body->MediaContainer->Metadata; + $datas = array_slice($datas, 0,50); + + $tvshows = []; + + foreach ($datas as $tvshow) { + if($tvshow->type === 'season') { + $tvshows[] = Model_Season::find_one_by('plex_key', $tvshow->ratingKey) ?: new Model_Season(); + + } else if($tvshow->type === 'episode') { + $tvshows[] = Model_Movie::find_one_by('plex_key', $tvshow->key) ?: new Model_Movie(); + } + } + + return $tvshows; + + }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() + { + try { + $curl = Request::forge(($this->https === '1' ? 'https' : 'http').'://' . $this->url . ($this->port ? ':' . $this->port : '') . '/hubs/home/recentlyAdded?type=1&X-Plex-Token=' . $this->token, 'curl'); + + if($this->https) { + $curl->set_options([ + CURLOPT_SSL_VERIFYPEER => false, + CURLOPT_SSL_VERIFYHOST => false + ]); + } + + $curl->set_header('Accept', 'application/json'); + + $curl->execute(); + + $body = json_decode($curl->response()->body); + + $datas = $body->MediaContainer->Metadata; + $datas = array_slice($datas, 0,50); + + $movies = []; + + foreach ($datas as $movie) { + $movies[] = Model_Movie::find_one_by('plex_key', $movie->key) ?: new Model_Movie(); + } + + return $movies; + + }catch (Exception $exception){ + Debug::dump($exception); + } + //return Model_Movie::find(function ($query) use ($server) { + /** @var Database_Query_Builder_Select $query */ + /*return $query + ->select('movie.*') + ->join('library', 'LEFT') + ->on('movie.library_id', '=', 'library.id') + ->join('server', 'LEFT') + ->on('library.server_id', '=', 'server.id') + ->where('server.id', $server->id) + ->and_where('movie.disable', 0) + ->and_where('movie.type', 'movie') + ->order_by('movie.addedAt', 'DESC') + ->limit(30) + ; + });*/ + } } \ No newline at end of file diff --git a/fuel/app/classes/model/setting.php b/fuel/app/classes/model/setting.php new file mode 100644 index 0000000..8e32e36 --- /dev/null +++ b/fuel/app/classes/model/setting.php @@ -0,0 +1,19 @@ + 'required', + ); + protected static $_properties = array( + 'id', + 'user_id', + 'language', + 'trailer_type', + 'trailer', + 'subtitle', + 'maxdownloadspeed', + ); +} \ No newline at end of file diff --git a/fuel/app/classes/model/user/watching.php b/fuel/app/classes/model/user/watching.php new file mode 100644 index 0000000..1b1b1ce --- /dev/null +++ b/fuel/app/classes/model/user/watching.php @@ -0,0 +1,18 @@ + 'index', // The default route - '_404_' => 'welcome/404', // The main 404 route + '_404_' => 'error/404', // The main 404 route 'home(/:server_id)?'=> 'home/index', 'movie/list' => 'movie/list', diff --git a/fuel/app/lang/en/permissions.php b/fuel/app/lang/en/permissions.php new file mode 100644 index 0000000..985e7e1 --- /dev/null +++ b/fuel/app/lang/en/permissions.php @@ -0,0 +1,14 @@ + 'Allow Watch', + 'RIGHT_WATCH_DESCRIPTION' => 'Allow use to watch movie/tv show.', + 'RIGHT_MAX_WATCH' => 'Max Play in 24H', + 'RIGHT_MAX_WATCH_DESCRIPTION' => 'Maximum number to play movie/tv show in 24H.', + 'RIGHT_MAX_QUALITY' => 'Stream Quality', + 'RIGHT_MAX_QUALITY_DESCRIPTION' => 'The maximum quality to play a move/tv show.', + 'RIGHT_MAX_CONCURRENT_STREAM' => 'Concurrent stream ', + 'RIGHT_MAX_CONCURRENT_STREAM_DESCRIPTION' => 'Number of concurrent stream allowed.', + 'RIGHT_DOWNLOAD' => 'Allow Download', + 'RIGHT_DOWNLOAD_DESCRIPTION' => 'Give the permission at user to download movie/tv show.', + 'RIGHT_MAX_DOWNLOAD' => 'Max Download', + 'RIGHT_MAX_DOWNLOAD_DESCRIPTION' => 'The maximum number of download allow to a use in 24H.', +]; \ No newline at end of file diff --git a/fuel/app/views/home/index.php b/fuel/app/views/home/index.php index 97f338a..3aff2dc 100755 --- a/fuel/app/views/home/index.php +++ b/fuel/app/views/home/index.php @@ -49,23 +49,26 @@