From 3c212f03dfc831115259821278cb49ade284094d Mon Sep 17 00:00:00 2001 From: Michael Roterman Date: Sun, 9 Feb 2014 02:43:46 +0100 Subject: [PATCH] Adding missing methods in MovieRepository --- examples/movies/model/alternative_titles.php | 22 ++ examples/movies/model/changes.php | 22 ++ examples/movies/model/credits.php | 22 ++ examples/movies/model/images.php | 22 ++ examples/movies/model/keywords.php | 22 ++ examples/movies/model/lists.php | 22 ++ examples/movies/model/releases.php | 22 ++ examples/movies/model/reviews.php | 22 ++ examples/movies/model/similar_movies.php | 22 ++ examples/movies/model/trailers.php | 22 ++ lib/Tmdb/Api/Movies.php | 6 +- lib/Tmdb/Factory/ImageFactory.php | 5 + lib/Tmdb/Factory/MovieFactory.php | 3 +- lib/Tmdb/Repository/CollectionRepository.php | 21 +- lib/Tmdb/Repository/CompanyRepository.php | 3 +- lib/Tmdb/Repository/KeywordRepository.php | 3 +- lib/Tmdb/Repository/MovieRepository.php | 258 ++++++++++++++++++- 17 files changed, 503 insertions(+), 16 deletions(-) create mode 100644 examples/movies/model/alternative_titles.php create mode 100644 examples/movies/model/changes.php create mode 100644 examples/movies/model/credits.php create mode 100644 examples/movies/model/images.php create mode 100644 examples/movies/model/keywords.php create mode 100644 examples/movies/model/lists.php create mode 100644 examples/movies/model/releases.php create mode 100644 examples/movies/model/reviews.php create mode 100644 examples/movies/model/similar_movies.php create mode 100644 examples/movies/model/trailers.php diff --git a/examples/movies/model/alternative_titles.php b/examples/movies/model/alternative_titles.php new file mode 100644 index 00000000..f06f6740 --- /dev/null +++ b/examples/movies/model/alternative_titles.php @@ -0,0 +1,22 @@ + + * @copyright (c) 2013, Michael Roterman + * @version 0.0.1 + */ +require_once('../../../vendor/autoload.php'); +require_once('../../../apikey.php'); + +$token = new \Tmdb\ApiToken(TMDB_API_KEY); +$client = new \Tmdb\Client($token); + +$repository = new \Tmdb\Repository\MovieRepository($client); +$collection = $repository->getAlternativeTitles(87421); + +var_dump($collection); \ No newline at end of file diff --git a/examples/movies/model/changes.php b/examples/movies/model/changes.php new file mode 100644 index 00000000..c4e4e308 --- /dev/null +++ b/examples/movies/model/changes.php @@ -0,0 +1,22 @@ + + * @copyright (c) 2013, Michael Roterman + * @version 0.0.1 + */ +require_once('../../../vendor/autoload.php'); +require_once('../../../apikey.php'); + +$token = new \Tmdb\ApiToken(TMDB_API_KEY); +$client = new \Tmdb\Client($token); + +$repository = new \Tmdb\Repository\MovieRepository($client); +$collection = $repository->getChanges(87421); + +var_dump($collection); \ No newline at end of file diff --git a/examples/movies/model/credits.php b/examples/movies/model/credits.php new file mode 100644 index 00000000..f9dbb099 --- /dev/null +++ b/examples/movies/model/credits.php @@ -0,0 +1,22 @@ + + * @copyright (c) 2013, Michael Roterman + * @version 0.0.1 + */ +require_once('../../../vendor/autoload.php'); +require_once('../../../apikey.php'); + +$token = new \Tmdb\ApiToken(TMDB_API_KEY); +$client = new \Tmdb\Client($token); + +$repository = new \Tmdb\Repository\MovieRepository($client); +$collection = $repository->getCredits(87421); + +var_dump($collection); \ No newline at end of file diff --git a/examples/movies/model/images.php b/examples/movies/model/images.php new file mode 100644 index 00000000..803a84ce --- /dev/null +++ b/examples/movies/model/images.php @@ -0,0 +1,22 @@ + + * @copyright (c) 2013, Michael Roterman + * @version 0.0.1 + */ +require_once('../../../vendor/autoload.php'); +require_once('../../../apikey.php'); + +$token = new \Tmdb\ApiToken(TMDB_API_KEY); +$client = new \Tmdb\Client($token); + +$repository = new \Tmdb\Repository\MovieRepository($client); +$collection = $repository->getImages(87421); + +var_dump($collection); \ No newline at end of file diff --git a/examples/movies/model/keywords.php b/examples/movies/model/keywords.php new file mode 100644 index 00000000..4fd83521 --- /dev/null +++ b/examples/movies/model/keywords.php @@ -0,0 +1,22 @@ + + * @copyright (c) 2013, Michael Roterman + * @version 0.0.1 + */ +require_once('../../../vendor/autoload.php'); +require_once('../../../apikey.php'); + +$token = new \Tmdb\ApiToken(TMDB_API_KEY); +$client = new \Tmdb\Client($token); + +$repository = new \Tmdb\Repository\MovieRepository($client); +$collection = $repository->getKeywords(87421); + +var_dump($collection); \ No newline at end of file diff --git a/examples/movies/model/lists.php b/examples/movies/model/lists.php new file mode 100644 index 00000000..3a806fce --- /dev/null +++ b/examples/movies/model/lists.php @@ -0,0 +1,22 @@ + + * @copyright (c) 2013, Michael Roterman + * @version 0.0.1 + */ +require_once('../../../vendor/autoload.php'); +require_once('../../../apikey.php'); + +$token = new \Tmdb\ApiToken(TMDB_API_KEY); +$client = new \Tmdb\Client($token); + +$repository = new \Tmdb\Repository\MovieRepository($client); +$collection = $repository->getLists(87421); + +var_dump($collection); \ No newline at end of file diff --git a/examples/movies/model/releases.php b/examples/movies/model/releases.php new file mode 100644 index 00000000..b7127471 --- /dev/null +++ b/examples/movies/model/releases.php @@ -0,0 +1,22 @@ + + * @copyright (c) 2013, Michael Roterman + * @version 0.0.1 + */ +require_once('../../../vendor/autoload.php'); +require_once('../../../apikey.php'); + +$token = new \Tmdb\ApiToken(TMDB_API_KEY); +$client = new \Tmdb\Client($token); + +$repository = new \Tmdb\Repository\MovieRepository($client); +$collection = $repository->getReleases(87421); + +var_dump($collection); \ No newline at end of file diff --git a/examples/movies/model/reviews.php b/examples/movies/model/reviews.php new file mode 100644 index 00000000..c132a120 --- /dev/null +++ b/examples/movies/model/reviews.php @@ -0,0 +1,22 @@ + + * @copyright (c) 2013, Michael Roterman + * @version 0.0.1 + */ +require_once('../../../vendor/autoload.php'); +require_once('../../../apikey.php'); + +$token = new \Tmdb\ApiToken(TMDB_API_KEY); +$client = new \Tmdb\Client($token); + +$repository = new \Tmdb\Repository\MovieRepository($client); +$collection = $repository->getReviews(87421); + +var_dump($collection); \ No newline at end of file diff --git a/examples/movies/model/similar_movies.php b/examples/movies/model/similar_movies.php new file mode 100644 index 00000000..378fa3ba --- /dev/null +++ b/examples/movies/model/similar_movies.php @@ -0,0 +1,22 @@ + + * @copyright (c) 2013, Michael Roterman + * @version 0.0.1 + */ +require_once('../../../vendor/autoload.php'); +require_once('../../../apikey.php'); + +$token = new \Tmdb\ApiToken(TMDB_API_KEY); +$client = new \Tmdb\Client($token); + +$repository = new \Tmdb\Repository\MovieRepository($client); +$collection = $repository->getSimilarMovies(87421); + +var_dump($collection); \ No newline at end of file diff --git a/examples/movies/model/trailers.php b/examples/movies/model/trailers.php new file mode 100644 index 00000000..51364014 --- /dev/null +++ b/examples/movies/model/trailers.php @@ -0,0 +1,22 @@ + + * @copyright (c) 2013, Michael Roterman + * @version 0.0.1 + */ +require_once('../../../vendor/autoload.php'); +require_once('../../../apikey.php'); + +$token = new \Tmdb\ApiToken(TMDB_API_KEY); +$client = new \Tmdb\Client($token); + +$repository = new \Tmdb\Repository\MovieRepository($client); +$collection = $repository->getTrailers(87421); + +var_dump($collection); \ No newline at end of file diff --git a/lib/Tmdb/Api/Movies.php b/lib/Tmdb/Api/Movies.php index 2c6359d3..d1d3c9a9 100644 --- a/lib/Tmdb/Api/Movies.php +++ b/lib/Tmdb/Api/Movies.php @@ -44,16 +44,16 @@ public function getAlternativeTitles($movie_id, array $parameters = array(), arr } /** - * Get the cast information for a specific movie id. + * Get the cast and crew information for a specific movie id. * * @param $movie_id * @param array $parameters * @param array $headers * @return mixed */ - public function getCast($movie_id, array $parameters = array(), array $headers = array()) + public function getCredits($movie_id, array $parameters = array(), array $headers = array()) { - return $this->get('movie/' . $movie_id . '/casts', $parameters, $headers); + return $this->get('movie/' . $movie_id . '/credits', $parameters, $headers); } /** diff --git a/lib/Tmdb/Factory/ImageFactory.php b/lib/Tmdb/Factory/ImageFactory.php index 3e1c8080..6acdff82 100644 --- a/lib/Tmdb/Factory/ImageFactory.php +++ b/lib/Tmdb/Factory/ImageFactory.php @@ -124,6 +124,11 @@ public function createImageCollection(array $data = array()) $collection = new Images(); foreach($data as $format => $formatCollection) { + + if (!is_array($formatCollection)) { + continue; + } + foreach($formatCollection as $item) { if (array_key_exists($format, Image::$_formats)) { $item = $this->create($item, $format); diff --git a/lib/Tmdb/Factory/MovieFactory.php b/lib/Tmdb/Factory/MovieFactory.php index 1ff2fb67..7c120c89 100644 --- a/lib/Tmdb/Factory/MovieFactory.php +++ b/lib/Tmdb/Factory/MovieFactory.php @@ -73,7 +73,8 @@ public function __construct() } /** - * {@inheritdoc} + * @param array $data + * @return Movie */ public function create(array $data = array()) { diff --git a/lib/Tmdb/Repository/CollectionRepository.php b/lib/Tmdb/Repository/CollectionRepository.php index 04a92d88..9359d4ce 100644 --- a/lib/Tmdb/Repository/CollectionRepository.php +++ b/lib/Tmdb/Repository/CollectionRepository.php @@ -20,6 +20,13 @@ class CollectionRepository extends AbstractRepository { + private $imageFactory; + + public function __construct() + { + $this->imageFactory = new ImageFactory(); + } + /** * Load a collection with the given identifier * @@ -63,11 +70,21 @@ public function getFactory() } /** - * @return ImageFactory + * @param mixed $imageFactory + * @return $this + */ + public function setImageFactory($imageFactory) + { + $this->imageFactory = $imageFactory; + return $this; + } + + /** + * @return mixed */ public function getImageFactory() { - return new ImageFactory(); + return $this->imageFactory; } /** diff --git a/lib/Tmdb/Repository/CompanyRepository.php b/lib/Tmdb/Repository/CompanyRepository.php index d532e48f..06f26324 100644 --- a/lib/Tmdb/Repository/CompanyRepository.php +++ b/lib/Tmdb/Repository/CompanyRepository.php @@ -16,6 +16,7 @@ use Tmdb\Factory\MovieFactory; use Tmdb\Model\Common\GenericCollection; use Tmdb\Model\Company; +use Tmdb\Model\Movie; class CompanyRepository extends AbstractRepository { @@ -39,7 +40,7 @@ public function load($id, array $parameters = array(), array $headers = array()) * @param integer $id * @param array $parameters * @param array $headers - * @return Movie[] + * @return GenericCollection|Movie[] */ public function getMovies($id, array $parameters = array(), array $headers = array()) { diff --git a/lib/Tmdb/Repository/KeywordRepository.php b/lib/Tmdb/Repository/KeywordRepository.php index 1d316062..38775955 100644 --- a/lib/Tmdb/Repository/KeywordRepository.php +++ b/lib/Tmdb/Repository/KeywordRepository.php @@ -13,6 +13,7 @@ namespace Tmdb\Repository; use Tmdb\Factory\KeywordFactory; +use Tmdb\Model\Collection\ResultCollection; use Tmdb\Model\Common\GenericCollection; use Tmdb\Model\Keyword; @@ -37,7 +38,7 @@ public function load($id, array $parameters = array(), array $headers = array()) * @param $id * @param array $parameters * @param array $headers - * @return Keyword[] + * @return ResultCollection|Keyword[] */ public function getMovies($id, array $parameters = array(), array $headers = array()) { return $this->getFactory()->createResultCollection( diff --git a/lib/Tmdb/Repository/MovieRepository.php b/lib/Tmdb/Repository/MovieRepository.php index 6ffa4fc6..4c22b3a1 100644 --- a/lib/Tmdb/Repository/MovieRepository.php +++ b/lib/Tmdb/Repository/MovieRepository.php @@ -12,7 +12,10 @@ */ namespace Tmdb\Repository; +use Tmdb\Factory\ImageFactory; +use Tmdb\Factory\Movie\AlternativeTitleFactory; use Tmdb\Factory\MovieFactory; +use Tmdb\Factory\PeopleFactory; use Tmdb\Model\Common\GenericCollection; use Tmdb\Model\Movie; @@ -57,25 +60,188 @@ public function load($id, array $parameters = array(), array $headers = array()) } /** - * Return the Movies API Class + * Get the alternative titles for a specific movie id. * - * @return \Tmdb\Api\Movies + * @param $id + * @param $parameters + * @param $headers + * @return GenericCollection */ - public function getApi() + public function getAlternativeTitles($id, array $parameters = array(), array $headers = array()) { - return $this->getClient()->getMoviesApi(); + $data = $this->getApi()->getAlternativeTitles($id, $this->parseQueryParameters($parameters), $headers); + $movie = $this->getFactory()->create(array('alternative_titles' => $data)); + + return $movie->getAlternativeTitles(); } /** - * Return the Movie Factory + * Get the cast and crew information for a specific movie id. * - * @return MovieFactory + * @param $id + * @param $parameters + * @param $headers + * @return null|\Tmdb\Model\AbstractModel */ - public function getFactory() + public function getCredits($id, array $parameters = array(), array $headers = array()) { - return new MovieFactory(); + $data = $this->getApi()->getCredits($id, $this->parseQueryParameters($parameters), $headers); + $movie = $this->getFactory()->create(array('credits' => $data)); + + return $movie->getCredits(); + } + + /** + * Get the images (posters and backdrops) for a specific movie id. + * + * @param $id + * @param $parameters + * @param $headers + * @return null|\Tmdb\Model\AbstractModel + */ + public function getImages($id, array $parameters = array(), array $headers = array()) + { + $data = $this->getApi()->getImages($id, $this->parseQueryParameters($parameters), $headers); + $movie = $this->getFactory()->create(array('images' => $data)); + + return $movie->getImages(); + } + + /** + * Get the plot keywords for a specific movie id. + * + * @param $id + * @param $parameters + * @param $headers + * @return null|\Tmdb\Model\AbstractModel + */ + public function getKeywords($id, array $parameters = array(), array $headers = array()) + { + $data = $this->getApi()->getKeywords($id, $this->parseQueryParameters($parameters), $headers); + $movie = $this->getFactory()->create(array('keywords' => $data)); + + return $movie->getKeywords(); + } + + /** + * Get the release date and certification information by country for a specific movie id. + * + * @param $id + * @param $parameters + * @param $headers + * @return null|\Tmdb\Model\AbstractModel + */ + public function getReleases($id, array $parameters = array(), array $headers = array()) + { + $data = $this->getApi()->getReleases($id, $this->parseQueryParameters($parameters), $headers); + $movie = $this->getFactory()->create(array('releases' => $data)); + + return $movie->getReleases(); + } + + /** + * Get the trailers for a specific movie id. + * + * @param $id + * @param $parameters + * @param $headers + * @return null|\Tmdb\Model\AbstractModel + */ + public function getTrailers($id, array $parameters = array(), array $headers = array()) + { + $data = $this->getApi()->getTrailers($id, $this->parseQueryParameters($parameters), $headers); + $movie = $this->getFactory()->create(array('trailers' => $data)); + + return $movie->getTrailers(); } + /** + * Get the translations for a specific movie id. + * + * @param $id + * @param $parameters + * @param $headers + * @return null|\Tmdb\Model\AbstractModel + */ + public function getTranslations($id, array $parameters = array(), array $headers = array()) + { + $data = $this->getApi()->getTranslations($id, $this->parseQueryParameters($parameters), $headers); + $movie = $this->getFactory()->create(array('translations' => $data)); + + return $movie->getTranslations(); + } + + /** + * Get the similar movies for a specific movie id. + * + * @param $id + * @param $parameters + * @param $headers + * @return null|\Tmdb\Model\AbstractModel + */ + public function getSimilarMovies($id, array $parameters = array(), array $headers = array()) + { + $data = $this->getApi()->getSimilarMovies($id, $this->parseQueryParameters($parameters), $headers); + $movie = $this->getFactory()->create(array('similar_movies' => $data)); + + return $movie->getSimilarMovies(); + } + + /** + * Get the reviews for a particular movie id. + * + * @param $id + * @param $parameters + * @param $headers + * @return null|\Tmdb\Model\AbstractModel + */ + public function getReviews($id, array $parameters = array(), array $headers = array()) + { + $data = $this->getApi()->getReviews($id, $this->parseQueryParameters($parameters), $headers); + $movie = $this->getFactory()->create(array('reviews' => $data)); + + return $movie->getReviews(); + } + + /** + * Get the lists that the movie belongs to. + * + * @param $id + * @param $parameters + * @param $headers + * @return null|\Tmdb\Model\AbstractModel + */ + public function getLists($id, array $parameters = array(), array $headers = array()) + { + $data = $this->getApi()->getLists($id, $this->parseQueryParameters($parameters), $headers); + $movie = $this->getFactory()->create(array('lists' => $data)); + + return $movie->getLists(); + } + + /** + * Get the changes for a specific movie id. + * Changes are grouped by key, and ordered by date in descending order. + * + * By default, only the last 24 hours of changes are returned. + * The maximum number of days that can be returned in a single request is 14. + * + * The language is present on fields that are translatable. + * + * @param $id + * @param $parameters + * @param $headers + * @return null|\Tmdb\Model\AbstractModel + */ + public function getChanges($id, array $parameters = array(), array $headers = array()) + { + $data = $this->getApi()->getChanges($id, $this->parseQueryParameters($parameters), $headers); + $movie = $this->getFactory()->create(array('changes' => $data)); + + return $movie->getChanges(); + } + + /** * Get the latest movie. * @@ -141,6 +307,26 @@ public function getTopRated(array $options = array()) ); } + /** + * Return the Movies API Class + * + * @return \Tmdb\Api\Movies + */ + public function getApi() + { + return $this->getClient()->getMoviesApi(); + } + + /** + * Return the Movie Factory + * + * @return MovieFactory + */ + public function getFactory() + { + return new MovieFactory(); + } + /** * Create an collection of an array * @@ -150,4 +336,60 @@ public function getTopRated(array $options = array()) private function createCollection($data){ return $this->getFactory()->createCollection($data); } + + /** + * @param mixed $alternativeTitlesFactory + * @return $this + */ + public function setAlternativeTitlesFactory($alternativeTitlesFactory) + { + $this->alternativeTitlesFactory = $alternativeTitlesFactory; + return $this; + } + + /** + * @return mixed + */ + public function getAlternativeTitlesFactory() + { + return $this->alternativeTitlesFactory; + } + + /** + * @param mixed $imagesFactory + * @return $this + */ + public function setImagesFactory($imagesFactory) + { + $this->imagesFactory = $imagesFactory; + return $this; + } + + /** + * @return mixed + */ + public function getImagesFactory() + { + return $this->imagesFactory; + } + + /** + * @param mixed $peopleFactory + * @return $this + */ + public function setPeopleFactory($peopleFactory) + { + $this->peopleFactory = $peopleFactory; + return $this; + } + + /** + * @return mixed + */ + public function getPeopleFactory() + { + return $this->peopleFactory; + } + + }