diff --git a/app/controllers/FilmController.php b/app/controllers/FilmController.php new file mode 100644 index 0000000..76b0400 --- /dev/null +++ b/app/controllers/FilmController.php @@ -0,0 +1,10 @@ +increments('id'); + $table->string('name'); + $table->string('email'); + $table->string('password'); + $table->boolean('admin'); + $table->text('settings'); + $table->timestamps(); + }); + + Schema::create('films', function($table) { + $table->increments('id'); + $table->string('name'); + $table->bigInteger('tvdbid'); + $table->date('vorgeschlagen'); + $table->date('gesehen')->nullable(); + $table->integer('user'); + $table->timestamps(); + + }); + + Schema::create('comments', function($table) { + $table->increments('id'); + $table->integer('user'); + $table->string('headline'); + $table->text('text'); + $table->integer('film'); + $table->integer('event'); + $table->timestamps(); + }); + + Schema::create('events', function($table) { + $table->increments('id'); + $table->string('name'); + $table->date('datum'); + $table->text('beschreibung'); + $table->timestamps(); + }); + + Schema::create('votes', function($table) { + $table->increments('id'); + $table->integer('film'); + $table->integer('user'); + $table->boolean('stimme'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::drop('users'); + Schema::drop('films'); + Schema::drop('comments'); + Schema::drop('events'); + Schema::drop('votes'); + } + +} \ No newline at end of file diff --git a/app/database/seeds/DatabaseSeeder.php b/app/database/seeds/DatabaseSeeder.php index 6a8c204..75a813d 100644 --- a/app/database/seeds/DatabaseSeeder.php +++ b/app/database/seeds/DatabaseSeeder.php @@ -11,7 +11,14 @@ class DatabaseSeeder extends Seeder { { Eloquent::unguard(); - // $this->call('UserTableSeeder'); + User::create(array('name' => 'Daniel', 'email' => 'daniel@ascarion.net', 'admin' => true, 'password' => Hash::make('natrium'))); + Film::create(array('name' => 'Star Trek - Der Film', 'tvdbid' => 152, 'vorgeschlagen' => '2012-12-24', 'user' => 1)); + Film::create(array('name' => 'James Bond 007 - Moonraker - Streng Geheim', 'tvdbid' => 698, 'vorgeschlagen' => '2012-08-17', 'gesehen' => '2012-11-30', 'user' => 1)); + Comment::create(array('user' => 1, 'text' => 'Das ist ein toller Film!!', 'headline' => 'Überschrift', 'film' => 1)); + Comment::create(array('user' => 1, 'text' => 'Ein weiterer Kommentar!!', 'headline' => 'Überschrift', 'film' => 1)); + Comment::create(array('user' => 1, 'text' => 'Der Film war schlecht!!', 'headline' => 'Überschrift', 'film' => 2)); + Comment::create(array('user' => 1, 'text' => 'So richtig!!', 'headline' => 'Überschrift', 'film' => 2)); + Vote::create(array('user' => 1, 'film' => 1, 'stimme' => true)); } } \ No newline at end of file diff --git a/app/libraries/tmdb.php b/app/libraries/tmdb.php new file mode 100644 index 0000000..124365f --- /dev/null +++ b/app/libraries/tmdb.php @@ -0,0 +1,956 @@ +_apikey = (string) $apikey; + $this->_apischeme = ($scheme == TMDb::API_SCHEME) ? TMDb::API_SCHEME : TMDb::API_SCHEME_SSL; + $this->setLang($default_lang); + + if($config === TRUE) + { + $this->getConfiguration(); + } + } + + /** + * Search a movie by querystring + * + * @param string $text Query to search after in the TMDb database + * @param int $page Number of the page with results (default first page) + * @param bool $adult Whether of not to include adult movies in the results (default FALSE) + * @param mixed $lang Filter the result with a language (ISO 3166-1) other then default, use FALSE to retrieve results from all languages + * @return TMDb result array + */ + public function searchMovie($query, $page = 1, $adult = FALSE, $year = NULL, $lang = NULL) + { + $params = array( + 'query' => $query, + 'page' => (int) $page, + 'language' => ($lang !== NULL) ? $lang : $this->getLang(), + 'include_adult' => (bool) $adult, + 'year' => $year, + ); + return $this->_makeCall('search/movie', $params); + } + + /** + * Search a person by querystring + * + * @param string $text Query to search after in the TMDb database + * @param int $page Number of the page with results (default first page) + * @param bool $adult Whether of not to include adult movies in the results (default FALSE) + * @return TMDb result array + */ + public function searchPerson($query, $page = 1, $adult = FALSE) + { + $params = array( + 'query' => $query, + 'page' => (int) $page, + 'include_adult' => (bool) $adult, + ); + return $this->_makeCall('search/person', $params); + } + + /** + * Search a company by querystring + * + * @param string $text Query to search after in the TMDb database + * @param int $page Number of the page with results (default first page) + * @return TMDb result array + */ + public function searchCompany($query, $page = 1) + { + $params = array( + 'query' => $query, + 'page' => $page, + ); + return $this->_makeCall('search/company', $params); + } + + /** + * Retrieve information about a collection + * + * @param int $id Id from a collection (retrieved with getMovie) + * @param mixed $lang Filter the result with a language (ISO 3166-1) other then default, use FALSE to retrieve results from all languages + * @return TMDb result array + */ + public function getCollection($id, $lang = NULL) + { + $params = array( + 'language' => ($lang !== NULL) ? $lang : $this->getLang(), + ); + return $this->_makeCall('collection/'.$id, $params); + } + + /** + * Retrieve all basic information for a particular movie + * + * @param mixed $id TMDb-id or IMDB-id + * @param mixed $lang Filter the result with a language (ISO 3166-1) other then default, use FALSE to retrieve results from all languages + * @return TMDb result array + */ + public function getMovie($id, $lang = NULL) + { + $params = array( + 'language' => ($lang !== NULL) ? $lang : $this->getLang(), + ); + return $this->_makeCall('movie/'.$id, $params); + } + + /** + * Retrieve alternative titles for a particular movie + * + * @param mixed $id TMDb-id or IMDB-id + * @params string $country Only include titles for a particular country (ISO 3166-1) + * @return TMDb result array + */ + public function getMovieTitles($id, $country = NULL) + { + $params = array( + 'country' => $country, + ); + return $this->_makeCall('movie/'.$id.'/alternative_titles', $params); + } + + /** + * Retrieve all of the movie cast information for a particular movie + * + * @param mixed $id TMDb-id or IMDB-id + * @return TMDb result array + */ + public function getMovieCast($id) + { + return $this->_makeCall('movie/'.$id.'/casts'); + } + + /** + * Retrieve all of the keywords for a particular movie + * + * @param mixed $id TMDb-id or IMDB-id + * @return TMDb result array + */ + public function getMovieKeywords($id) + { + return $this->_makeCall('movie/'.$id.'/keywords'); + } + + /** + * Retrieve all the release and certification data for a particular movie + * + * @param mixed $id TMDb-id or IMDB-id + * @return TMDb result array + */ + public function getMovieReleases($id) + { + return $this->_makeCall('movie/'.$id.'/releases'); + } + + /** + * Retrieve available translations for a particular movie + * + * @param mixed $id TMDb-id or IMDB-id + * @return TMDb result array + */ + public function getMovieTranslations($id) + { + return $this->_makeCall('movie/'.$id.'/translations'); + } + + /** + * Retrieve available trailers for a particular movie + * + * @param mixed $id TMDb-id or IMDB-id + * @param mixed $lang Filter the result with a language (ISO 3166-1) other then default, use FALSE to retrieve results from all languages + * @return TMDb result array + */ + public function getMovieTrailers($id, $lang = NULL) + { + $params = array( + 'language' => ($lang !== NULL) ? $lang : $this->getLang(), + ); + return $this->_makeCall('movie/'.$id.'/trailers', $params); + } + + /** + * Retrieve all images for a particular movie + * + * @param mixed $id TMDb-id or IMDB-id + * @param mixed $lang Filter the result with a language (ISO 3166-1) other then default, use FALSE to retrieve results from all languages + * @return TMDb result array + */ + public function getMovieImages($id, $lang = NULL) + { + $params = array( + 'language' => ($lang !== NULL) ? $lang : $this->getLang(), + ); + return $this->_makeCall('movie/'.$id.'/images', $params); + } + + /** + * Retrieve similar movies for a particular movie + * + * @param mixed $id TMDb-id or IMDB-id + * @param int $page Number of the page with results (default first page) + * @param mixed $lang Filter the result with a language (ISO 3166-1) other then default, use FALSE to retrieve results from all languages + * @return TMDb result array + */ + public function getSimilarMovies($id, $page = 1, $lang = NULL) + { + $params = array( + 'page' => (int) $page, + 'language' => ($lang !== NULL) ? $lang : $this->getLang(), + ); + return $this->_makeCall('movie/'.$id.'/similar_movies', $params); + } + + /** + * Retrieve newest movie added to TMDb + * + * @return TMDb result array + */ + public function getLatestMovie() + { + return $this->_makeCall('movie/latest'); + } + + /** + * Retrieve movies arriving to theatres within the next few weeks + * + * @param int $page Number of the page with results (default first page) + * @param mixed $lang Filter the result with a language (ISO 3166-1) other then default, use FALSE to retrieve results from all languages + * @return TMDb result array + */ + public function getUpcomingMovies($page = 1, $lang = NULL) + { + $params = array( + 'page' => (int) $page, + 'language' => ($lang !== NULL) ? $lang : $this->getLang(), + ); + return $this->_makeCall('movie/upcoming', $params); + } + + /** + * Retrieve movies currently in theatres + * + * @param int $page Number of the page with results (default first page) + * @param mixed $lang Filter the result with a language (ISO 3166-1) other then default, use FALSE to retrieve results from all languages + * @return TMDb result array + */ + public function getNowPlayingMovies($page = 1, $lang = NULL) + { + $params = array( + 'page' => (int) $page, + 'language' => ($lang !== NULL) ? $lang : $this->getLang(), + ); + return $this->_makeCall('movie/now_playing', $params); + } + + /** + * Retrieve popular movies (list is updated daily) + * + * @param int $page Number of the page with results (default first page) + * @param mixed $lang Filter the result with a language (ISO 3166-1) other then default, use FALSE to retrieve results from all languages + * @return TMDb result array + */ + public function getPopularMovies($page = 1, $lang = NULL) + { + $params = array( + 'page' => (int) $page, + 'language' => ($lang !== NULL) ? $lang : $this->getLang(), + ); + return $this->_makeCall('movie/popular', $params); + } + + /** + * Retrieve top-rated movies + * + * @param int $page Number of the page with results (default first page) + * @param mixed $lang Filter the result with a language (ISO 3166-1) other then default, use FALSE to retrieve results from all languages + * @return TMDb result array + */ + public function getTopRatedMovies($page = 1, $lang = NULL) + { + $params = array( + 'page' => (int) $page, + 'language' => ($lang !== NULL) ? $lang : $this->getLang(), + ); + return $this->_makeCall('movie/top_rated', $params); + } + + /** + * Retrieve changes for a particular movie + * + * @param mixed $id TMDb-id or IMDB-id + * @return TMDb result array + */ + public function getMovieChanges($id) + { + return $this->_makeCall('movie/'.$id.'/changes'); + } + + /** + * Retrieve all id's from changed movies + * + * @param int $page Number of the page with results (default first page) + * @param string $start_date String start date as YYYY-MM-DD + * @param string $end_date String end date as YYYY-MM-DD (not inclusive) + * @return TMDb result array + */ + public function getChangedMovies($page = 1, $start_date = NULL, $end_date = NULL) + { + $params = array( + 'page' => (int) $page, + 'start_date' => $start_date, + 'end_date' => $end_date, + ); + return $this->_makeCall('movie/changes', $params); + } + + /** + * Retrieve all basic information for a particular person + * + * @param int $id TMDb person-id + * @return TMDb result array + */ + public function getPerson($id) + { + return $this->_makeCall('person/'.$id); + } + + /** + * Retrieve all cast and crew information for a particular person + * + * @param int $id TMDb person-id + * @param mixed $lang Filter the result with a language (ISO 3166-1) other then default, use FALSE to retrieve results from all languages + * @return TMDb result array + */ + public function getPersonCredits($id, $lang = NULL) + { + $params = array( + 'language' => ($lang !== NULL) ? $lang : $this->getLang(), + ); + return $this->_makeCall('person/'.$id.'/credits', $params); + } + + /** + * Retrieve all images for a particular person + * + * @param mixed $id TMDb person-id + * @return TMDb result array + */ + public function getPersonImages($id) + { + return $this->_makeCall('person/'.$id.'/images'); + } + + /** + * Retrieve changes for a particular person + * + * @param mixed $id TMDb person-id + * @return TMDb result array + */ + public function getPersonChanges($id) + { + return $this->_makeCall('person/'.$id.'/changes'); + } + + /** + * Retrieve all id's from changed persons + * + * @param int $page Number of the page with results (default first page) + * @param string $start_date String start date as YYYY-MM-DD + * @param string $end_date String end date as YYYY-MM-DD (not inclusive) + * @return TMDb result array + */ + public function getChangedPersons($page = 1, $start_date = NULL, $end_date = NULL) + { + $params = array( + 'page' => (int) $page, + 'start_date' => $start_date, + 'start_date' => $end_date, + ); + return $this->_makeCall('person/changes', $params); + } + + /** + * Retrieve all basic information for a particular production company + * + * @param int $id TMDb company-id + * @return TMDb result array + */ + public function getCompany($id) + { + return $this->_makeCall('company/'.$id); + } + + /** + * Retrieve movies for a particular production company + * + * @param int $id TMDb company-id + * @param int $page Number of the page with results (default first page) + * @param mixed $lang Filter the result with a language (ISO 3166-1) other then default, use FALSE to retrieve results from all languages + * @return TMDb result array + */ + public function getMoviesByCompany($id, $page = 1, $lang = NULL) + { + $params = array( + 'page' => (int) $page, + 'language' => ($lang !== NULL) ? $lang : $this->getLang(), + ); + return $this->_makeCall('company/'.$id.'/movies', $params); + } + + /** + * Retrieve a list of genres used on TMDb + * + * @param mixed $lang Filter the result with a language (ISO 3166-1) other then default, use FALSE to retrieve results from all languages + * @return TMDb result array + */ + public function getGenres($lang = NULL) + { + $params = array( + 'language' => ($lang !== NULL) ? $lang : $this->getLang(), + ); + return $this->_makeCall('genre/list', $params); + } + + /** + * Retrieve movies for a particular genre + * + * @param int $id TMDb genre-id + * @param int $page Number of the page with results (default first page) + * @param mixed $lang Filter the result with a language (ISO 3166-1) other then default, use FALSE to retrieve results from all languages + * @return TMDb result array + */ + public function getMoviesByGenre($id, $page = 1, $lang = NULL) + { + $params = array( + 'page' => (int) $page, + 'language' => ($lang !== NULL) ? $lang : $this->getLang(), + ); + return $this->_makeCall('genre/'.$id.'/movies', $params); + } + + /** + * Authentication: retrieve authentication token + * More information about the authentication process: http://help.themoviedb.org/kb/api/user-authentication + * + * @return TMDb result array + */ + public function getAuthToken() + { + $result = $this->_makeCall('authentication/token/new'); + + if( ! isset($result['request_token'])) + { + if($this->getDebugMode()) + { + throw new TMDbException('No valid request token from TMDb'); + } + else + { + return FALSE; + } + } + + return $result; + } + + /** + * Authentication: retrieve authentication session and set it to the class + * More information about the authentication process: http://help.themoviedb.org/kb/api/user-authentication + * + * @param string $token + * @return TMDb result array + */ + public function getAuthSession($token) + { + $params = array( + 'request_token' => $token, + ); + + $result = $this->_makeCall('authentication/session/new', $params); + + if(isset($result['session_id'])) + { + $this->setAuthSession($result['session_id']); + } + + return $result; + } + + /** + * Authentication: set retrieved session id in the class for authenticated requests + * More information about the authentication process: http://help.themoviedb.org/kb/api/user-authentication + * + * @param string $session_id + */ + public function setAuthSession($session_id) + { + $this->_session_id = $session_id; + } + + /** + * Retrieve basic account information + * + * @param string $session_id Set session_id for the account you want to retrieve information from + * @return TMDb result array + */ + public function getAccount($session_id = NULL) + { + $session_id = ($session_id === NULL) ? $this->_session_id : $session_id; + return $this->_makeCall('account', NULL, $session_id); + } + + /** + * Retrieve favorite movies for a particular account + * + * @param int $account_id TMDb account-id + * @param string $session_id Set session_id for the account you want to retrieve information from + * @param int $page Number of the page with results (default first page) + * @param mixed $lang Get result in other language then default for this user account (ISO 3166-1) + * @return TMDb result array + */ + public function getAccountFavoriteMovies($account_id, $session_id = NULL, $page = 1, $lang = FALSE) + { + $session_id = ($session_id === NULL) ? $this->_session_id : $session_id; + $params = array( + 'page' => (int) $page, + 'language' => ($lang !== NULL) ? $lang : '', + ); + return $this->_makeCall('account/'.$account_id.'/favorite_movies', $params, $session_id); + } + + /** + * Retrieve rated movies for a particular account + * + * @param int $account_id TMDb account-id + * @param string $session_id Set session_id for the account you want to retrieve information from + * @param int $page Number of the page with results (default first page) + * @param mixed $lang Get result in other language then default for this user account (ISO 3166-1) + * @return TMDb result array + */ + public function getAccountRatedMovies($account_id, $session_id = NULL, $page = 1, $lang = FALSE) + { + $session_id = ($session_id === NULL) ? $this->_session_id : $session_id; + $params = array( + 'page' => (int) $page, + 'language' => ($lang !== NULL) ? $lang : '', + ); + return $this->_makeCall('account/'.$account_id.'/rated_movies', $params, $session_id); + } + + /** + * Retrieve movies that have been marked in a particular account watchlist + * + * @param int $account_id TMDb account-id + * @param string $session_id Set session_id for the account you want to retrieve information from + * @param int $page Number of the page with results (default first page) + * @param mixed $lang Get result in other language then default for this user account (ISO 3166-1) + * @return TMDb result array + */ + public function getAccountWatchlistMovies($account_id, $session_id = NULL, $page = 1, $lang = FALSE) + { + $session_id = ($session_id === NULL) ? $this->_session_id : $session_id; + $params = array( + 'page' => (int) $page, + 'language' => ($lang !== NULL) ? $lang : '', + ); + return $this->_makeCall('account/'.$account_id.'/movie_watchlist', $params, $session_id); + } + + /** + * Add a movie to the account favorite movies + * + * @param int $account_id TMDb account-id + * @param string $session_id Set session_id for the account you want to retrieve information from + * @param int $movie_id TMDb movie-id + * @param bool $favorite Add to favorites or remove from favorites (default TRUE) + * @return TMDb result array + */ + public function addFavoriteMovie($account_id, $session_id = NULL, $movie_id = 0, $favorite = TRUE) + { + $session_id = ($session_id === NULL) ? $this->_session_id : $session_id; + $params = array( + 'movie_id' => (int) $movie_id, + 'favorite' => (bool) $favorite, + ); + return $this->_makeCall('account/'.$account_id.'/favorite', $params, $session_id, TMDb::POST); + } + + /** + * Add a movie to the account watchlist + * + * @param int $account_id TMDb account-id + * @param string $session_id Set session_id for the account you want to retrieve information from + * @param int $movie_id TMDb movie-id + * @param bool $watchlist Add to watchlist or remove from watchlist (default TRUE) + * @return TMDb result array + */ + public function addMovieToWatchlist($account_id, $session_id = NULL, $movie_id = 0, $watchlist = TRUE) + { + $session_id = ($session_id === NULL) ? $this->_session_id : $session_id; + $params = array( + 'movie_id' => (int) $movie_id, + 'movie_watchlist' => (bool) $watchlist, + ); + return $this->_makeCall('account/'.$account_id.'/movie_watchlist', $params, $session_id, TMDb::POST); + } + + /** + * Add a rating to a movie + * + * @param string $session_id Set session_id for the account you want to retrieve information from + * @param int $movie_id TMDb movie-id + * @param float $value Value between 1 and 10 + * @return TMDb result array + */ + public function addMovieRating($session_id = NULL, $movie_id = 0, $value = 0) + { + $session_id = ($session_id === NULL) ? $this->_session_id : $session_id; + $params = array( + 'value' => is_numeric($value) ? floatval($value) : 0, + ); + return $this->_makeCall('movie/'.$movie_id.'/rating', $params, $session_id, TMDb::POST); + } + + /** + * Get configuration from TMDb + * + * @return TMDb result array + */ + public function getConfiguration() + { + $config = $this->_makeCall('configuration'); + + if( ! empty($config)) + { + $this->setConfig($config); + } + + return $config; + } + + /** + * Get Image URL + * + * @param string $filepath Filepath to image + * @param const $imagetype Image type: TMDb::IMAGE_BACKDROP, TMDb::IMAGE_POSTER, TMDb::IMAGE_PROFILE + * @param string $size Valid size for the image + * @return string + */ + public function getImageUrl($filepath, $imagetype, $size) + { + $config = $this->getConfig(); + + if(isset($config['images'])) + { + $base_url = $config['images']['base_url']; + $available_sizes = $this->getAvailableImageSizes($imagetype); + + if(in_array($size, $available_sizes)) + { + return $base_url.$size.$filepath; + } + else + { + throw new TMDbException('The size "'.$size.'" is not supported by TMDb'); + } + } + else + { + throw new TMDbException('No configuration available for image URL generation'); + } + } + + /** + * Get available image sizes for a particular image type + * + * @param const $imagetype Image type: TMDb::IMAGE_BACKDROP, TMDb::IMAGE_POSTER, TMDb::IMAGE_PROFILE + * @return array + */ + public function getAvailableImageSizes($imagetype) + { + $config = $this->getConfig(); + + if(isset($config['images'][$imagetype.'_sizes'])) + { + return $config['images'][$imagetype.'_sizes']; + } + else + { + throw new TMDbException('No configuration available to retrieve available image sizes'); + } + } + + /** + * Get ETag to keep track of state of the content + * + * @param string $uri Use an URI to know the version of it. For example: 'movie/550' + * @return string + */ + public function getVersion($uri) + { + $headers = $this->_makeCall($uri, NULL, NULL, TMDb::HEAD); + return isset($headers['Etag']) ? $headers['Etag'] : ''; + } + + /** + * Makes the call to the API + * + * @param string $function API specific function name for in the URL + * @param array $params Unencoded parameters for in the URL + * @param string $session_id Session_id for authentication to the API for specific API methods + * @param const $method TMDb::GET or TMDb:POST (default TMDb::GET) + * @return TMDb result array + */ + private function _makeCall($function, $params = NULL, $session_id = NULL, $method = TMDb::GET) + { + $params = ( ! is_array($params)) ? array() : $params; + $auth_array = array('api_key' => $this->_apikey); + + if($session_id !== NULL) + { + $auth_array['session_id'] = $session_id; + } + + $url = $this->_apischeme.TMDb::API_URL.'/'.TMDb::API_VERSION.'/'.$function.'?'.http_build_query($auth_array, '', '&'); + + if($method === TMDb::GET) + { + if(isset($params['language']) AND $params['language'] === FALSE) + { + unset($params['language']); + } + + $url .= ( ! empty($params)) ? '&'.http_build_query($params, '', '&') : ''; + } + + $results = '{}'; + + if (extension_loaded('curl')) + { + $headers = array( + 'Accept: application/json', + ); + + $ch = curl_init(); + + if($method == TMDB::POST) + { + $json_string = json_encode($params); + curl_setopt($ch,CURLOPT_POST, 1); + curl_setopt($ch,CURLOPT_POSTFIELDS, $json_string); + $headers[] = 'Content-Type: application/json'; + $headers[] = 'Content-Length: '.strlen($json_string); + } + elseif($method == TMDb::HEAD) + { + curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'HEAD'); + curl_setopt($ch, CURLOPT_NOBODY, 1); + } + + curl_setopt($ch, CURLOPT_URL, $url); + curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); + curl_setopt($ch, CURLOPT_HEADER, 1); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + + $response = curl_exec($ch); + + $header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE); + $header = substr($response, 0, $header_size); + $body = substr($response, $header_size); + + $error_number = curl_errno($ch); + $error_message = curl_error($ch); + + if($error_number > 0) + { + throw new TMDbException('Method failed: '.$function.' - '.$error_message); + } + + curl_close($ch); + } + else + { + throw new TMDbException('CURL-extension not loaded'); + } + + $results = json_decode($body, TRUE); + + if(strpos($function, 'authentication/token/new') !== FALSE) + { + $parsed_headers = $this->_http_parse_headers($header); + $results['Authentication-Callback'] = $parsed_headers['Authentication-Callback']; + } + + if($results !== NULL) + { + return $results; + } + elseif($method == TMDb::HEAD) + { + return $this->_http_parse_headers($header); + } + else + { + throw new TMDbException('Server error on "'.$url.'": '.$response); + } + } + + /** + * Setter for the default language + * + * @param string $lang (ISO 3166-1) + * @return void + */ + public function setLang($lang) + { + $this->_lang = $lang; + } + + /** + * Setter for the TMDB-config + * + * $param array $config + * @return void + */ + public function setConfig($config) + { + $this->_config = $config; + } + + /** + * Getter for the default language + * + * @return string + */ + public function getLang() + { + return $this->_lang; + } + + /** + * Getter for the TMDB-config + * + * @return array + */ + public function getConfig() + { + if(empty($this->_config)) + { + $this->_config = $this->getConfiguration(); + } + + return $this->_config; + } + + /* + * Internal function to parse HTTP headers because of lack of PECL extension installed by many + * + * @param string $header + * @return array + */ + protected function _http_parse_headers($header) + { + $return = array(); + $fields = explode("\r\n", preg_replace('/\x0D\x0A[\x09\x20]+/', ' ', $header)); + foreach($fields as $field) + { + if(preg_match('/([^:]+): (.+)/m', $field, $match)) + { + $match[1] = preg_replace('/(?<=^|[\x09\x20\x2D])./e', 'strtoupper("\0")', strtolower(trim($match[1]))); + if( isset($return[$match[1]]) ) + { + $return[$match[1]] = array($return[$match[1]], $match[2]); + } + else + { + $return[$match[1]] = trim($match[2]); + } + } + } + return $return; + } +} + +/** + * TMDb Exception class + * + * @author Jonas De Smet - Glamorous + */ +class TMDbException extends Exception{} + +?> diff --git a/app/models/Comment.php b/app/models/Comment.php new file mode 100644 index 0000000..9115d18 --- /dev/null +++ b/app/models/Comment.php @@ -0,0 +1,13 @@ +belongsTo('User', 'user'); + } + + public function film() { + return $this->belongsTo('Film', 'film'); + } +} \ No newline at end of file diff --git a/app/models/Event.php b/app/models/Event.php new file mode 100644 index 0000000..ff04865 --- /dev/null +++ b/app/models/Event.php @@ -0,0 +1,5 @@ +hasMany('Comment', 'film'); + } + + public function votes() { + return $this->hasMany('Vote', 'film'); + } + + public function besitzer() { + return $this->belongsTo('User', 'user'); + } + + public function scopeZuletztGesehen($query) { + return $query->whereNotNull('gesehen')->orderBy('gesehen')->take(5); + } + + public function scopeNeuesteVorschlage($query) { + return $query->whereNull('gesehen')->orderBy('updated_at')->take(5); + } + +} \ No newline at end of file diff --git a/app/models/User.php b/app/models/User.php index 42fe853..dd8cfa8 100644 --- a/app/models/User.php +++ b/app/models/User.php @@ -49,4 +49,16 @@ class User extends Eloquent implements UserInterface, RemindableInterface { return $this->email; } + + public function films() { + return $this->hasMany('Film', 'user'); + } + + public function comments() { + return $this->hasMany('Comment', 'user'); + } + + public function votes() { + return $this->hasMany('Vote', 'user'); + } } \ No newline at end of file diff --git a/app/models/Vote.php b/app/models/Vote.php new file mode 100644 index 0000000..cbca41f --- /dev/null +++ b/app/models/Vote.php @@ -0,0 +1,13 @@ +belongsTo('Film', 'film'); + } + + public function user() { + return $this->belongsTo('User', 'user'); + } +} \ No newline at end of file diff --git a/app/routes.php b/app/routes.php index e2a75e2..5a1e985 100644 --- a/app/routes.php +++ b/app/routes.php @@ -13,5 +13,58 @@ Route::get('/', function() { - return View::make('hello'); -}); \ No newline at end of file + $gesehen = Film::zuletztGesehen()->get(); + $vorgeschlagen = Film::neuesteVorschlage()->get(); + return View::make('index') + ->with('gesehen', $gesehen) + ->with('vorgeschlagen', $vorgeschlagen); +}); + +Route::get('film/{id}', array('as' => 'film', function($id) { + $film = Film::findOrFail($id); + + $tmdb = new TMDb('b187f8d9c5e72b1faecb741d5d04239a', 'de', TRUE); + $tmovie = $tmdb->getMovie($film->tvdbid); + $tcast = $tmdb->getMovieCast($film->tvdbid); + $ttrail = $tmdb->getMovieTrailers($film->tvdbid); + $image = $tmdb->getImageUrl($tmovie['poster_path'], TMDb::IMAGE_POSTER, 'w342'); + + $votes = $film->votes()->count(); + $vposi = $film->votes()->where('stimme', true)->count(); + + $comments = $film->comments()->orderBy('id', 'DESC')->get(); + + return View::make('film') + ->with('film', $film) + ->with('tfilm', $tmovie) + ->with('poster', $image) + ->with('comments', $comments) + ->with('cast', $tcast) + ->with('trail', $ttrail) + ->with('votes', $votes) + ->with('vposi', $vposi) + ->with('tmdb', $tmdb); +})); + +Route::get('login', array('as' => 'login', function() { + return View::make('login'); +})); + +Route::post('login', function() { + $userdata = array( + 'name' => Input::get('iSpieler'), + 'password' => Input::get('iPassword')); + if(Auth::attempt($userdata)) { + return Redirect::intended('/'); + } else { + echo "Login gescheitert."; + var_dump($userdata); + return Redirect::to('login') + ->with('login_errors', true); + } +}); + +Route::get('logout', array('as' => 'logout', function() { + Auth::logout(); + return Redirect::to('/'); +})); \ No newline at end of file diff --git a/app/views/film.blade.php b/app/views/film.blade.php new file mode 100644 index 0000000..39d1ff8 --- /dev/null +++ b/app/views/film.blade.php @@ -0,0 +1,132 @@ +@extends('hello') + +@section('content') +
Insgesamt haben {{$votes}} Personen abgestimmt. {{$vposi}} davon waren dafür. + +
Melde Dich an, um diesen Film zu kommentieren.
+ +@foreach($comments as $comment) + +