From fa820a26e3d1ebbfc0746da8146eec384398a997 Mon Sep 17 00:00:00 2001 From: thinkingmedia Date: Fri, 3 Feb 2017 11:51:51 -0500 Subject: [PATCH 01/19] added RELEASE_DATES --- lib/Tmdb/Model/Movie/QueryParameter/AppendToResponse.php | 5 +++++ lib/Tmdb/Repository/MovieRepository.php | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/Tmdb/Model/Movie/QueryParameter/AppendToResponse.php b/lib/Tmdb/Model/Movie/QueryParameter/AppendToResponse.php index a459302a..e3d302bc 100644 --- a/lib/Tmdb/Model/Movie/QueryParameter/AppendToResponse.php +++ b/lib/Tmdb/Model/Movie/QueryParameter/AppendToResponse.php @@ -24,7 +24,12 @@ final class AppendToResponse extends BaseAppendToResponse const CREDITS = 'credits'; const IMAGES = 'images'; const KEYWORDS = 'keywords'; + /** + * @see https://developers.themoviedb.org/3/movies/get-movie-release-dates + * @deprecated Use RELEASE_DATES instead, but format has changed. + */ const RELEASES = 'releases'; + const RELEASE_DATES = 'release_dates'; const TRANSLATIONS = 'translations'; const SIMILAR = 'similar'; const REVIEWS = 'reviews'; diff --git a/lib/Tmdb/Repository/MovieRepository.php b/lib/Tmdb/Repository/MovieRepository.php index ed5d59f7..1a39d20a 100644 --- a/lib/Tmdb/Repository/MovieRepository.php +++ b/lib/Tmdb/Repository/MovieRepository.php @@ -66,7 +66,7 @@ public function load($id, array $parameters = [], array $headers = []) AppendToResponse::IMAGES, AppendToResponse::KEYWORDS, AppendToResponse::LISTS, - AppendToResponse::RELEASES, + AppendToResponse::RELEASE_DATES, AppendToResponse::REVIEWS, AppendToResponse::SIMILAR, AppendToResponse::TRANSLATIONS, From 6445466fb592c77dd9a3a4a6ef23c84fbc1865c2 Mon Sep 17 00:00:00 2001 From: thinkingmedia Date: Sat, 4 Feb 2017 08:26:53 -0500 Subject: [PATCH 02/19] fixed broken test --- test/Tmdb/Tests/Repository/MovieRepositoryTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Tmdb/Tests/Repository/MovieRepositoryTest.php b/test/Tmdb/Tests/Repository/MovieRepositoryTest.php index eb46507b..3120c02a 100644 --- a/test/Tmdb/Tests/Repository/MovieRepositoryTest.php +++ b/test/Tmdb/Tests/Repository/MovieRepositoryTest.php @@ -29,7 +29,7 @@ public function shouldLoadMovie() ->method('get') ->with($this->getRequest( 'https://api.themoviedb.org/3/movie/' . self::MOVIE_ID, - ['append_to_response' => 'alternative_titles,changes,credits,images,keywords,lists,releases,reviews,similar,translations,videos'] + ['append_to_response' => 'alternative_titles,changes,credits,images,keywords,lists,release_dates,reviews,similar,translations,videos'] )) ; From fe6f08321cd490a3660abb023b1627e7483fc0f5 Mon Sep 17 00:00:00 2001 From: thinkingmedia Date: Wed, 15 Feb 2017 09:03:39 -0500 Subject: [PATCH 03/19] adds new ReleaseDate class and to Movie class --- lib/Tmdb/Factory/MovieFactory.php | 12 +++ lib/Tmdb/Model/Movie.php | 39 ++++++- lib/Tmdb/Model/Movie/Release.php | 1 + lib/Tmdb/Model/Movie/ReleaseDate.php | 147 +++++++++++++++++++++++++++ 4 files changed, 195 insertions(+), 4 deletions(-) create mode 100644 lib/Tmdb/Model/Movie/ReleaseDate.php diff --git a/lib/Tmdb/Factory/MovieFactory.php b/lib/Tmdb/Factory/MovieFactory.php index 98255522..2b0a68a4 100644 --- a/lib/Tmdb/Factory/MovieFactory.php +++ b/lib/Tmdb/Factory/MovieFactory.php @@ -164,6 +164,18 @@ public function create(array $data = []) $movie->setReleases($this->createGenericCollection($data['releases']['countries'], new Movie\Release())); } + if (array_key_exists('release_dates', $data) && array_key_exists('results', $data['release_dates'])) { + $release_dates = new GenericCollection(); + foreach ($data['release_dates']['results'] as $country_releases) { + $iso_31661 = $country_releases['iso_3166_1']; + foreach($country_releases['release_dates'] as $release_date) { + $release_date['iso_3166_1'] = $iso_31661; + $release_dates->add(null, $this->hydrate(new Movie\ReleaseDate(), $release_date)); + } + } + $movie->setReleaseDates($release_dates); + } + if (array_key_exists('videos', $data)) { $movie->setVideos($this->getVideoFactory()->createCollection($data['videos'])); } diff --git a/lib/Tmdb/Model/Movie.php b/lib/Tmdb/Model/Movie.php index e46cf807..84c73e39 100644 --- a/lib/Tmdb/Model/Movie.php +++ b/lib/Tmdb/Model/Movie.php @@ -14,6 +14,7 @@ use Tmdb\Model\Collection\ResultCollection; use Tmdb\Model\Collection\Videos; +use Tmdb\Model\Common\Country; use Tmdb\Model\Common\GenericCollection; use Tmdb\Model\Collection\CreditsCollection; use Tmdb\Model\Collection\Genres; @@ -22,6 +23,7 @@ use Tmdb\Model\Common\Translation; use Tmdb\Model\Movie\AlternativeTitle; use Tmdb\Model\Movie\Release; +use Tmdb\Model\Movie\ReleaseDate; /** * Class Movie @@ -195,9 +197,15 @@ class Movie extends AbstractModel /** * @var GenericCollection + * @deprecated Use $release_dates instead */ protected $releases; + /** + * @var GenericCollection + */ + protected $release_dates; + /** * @var GenericCollection */ @@ -266,6 +274,7 @@ public function __construct() $this->keywords = new GenericCollection(); $this->lists = new GenericCollection(); $this->releases = new GenericCollection(); + $this->release_dates = new GenericCollection(); $this->similar = new GenericCollection(); $this->translations = new GenericCollection(); $this->videos = new Videos(); @@ -849,6 +858,7 @@ public function getLists() /** * @param GenericCollection $releases * @return $this + * @deprecated Use the setReleaseDates instead. */ public function setReleases(GenericCollection $releases) { @@ -859,12 +869,33 @@ public function setReleases(GenericCollection $releases) /** * @return GenericCollection|Release[] + * @deprecated Use the getReleaseDates instead */ public function getReleases() { return $this->releases; } + /** + * @param GenericCollection $release_dates + * @return $this + */ + public function setReleaseDates(GenericCollection $release_dates) + { + $this->release_dates = $release_dates; + + return $this; + } + + /** + * @return GenericCollection|ReleaseDate[] + * @deprecated Use the getReleaseDates instead + */ + public function getReleaseDates() + { + return $this->release_dates; + } + /** * @param GenericCollection $similar * @return $this @@ -877,7 +908,7 @@ public function setSimilar($similar) } /** - * @return Movie[] + * @return GenericCollection|Movie[] */ public function getSimilar() { @@ -885,8 +916,8 @@ public function getSimilar() } /** - * @return Movie[] - * @deprecated + * @return GenericCollection|Movie[] + * @deprecated Use getSimilar instead */ public function getSimilarMovies() { @@ -987,4 +1018,4 @@ public function getVideos() { return $this->videos; } -} +} \ No newline at end of file diff --git a/lib/Tmdb/Model/Movie/Release.php b/lib/Tmdb/Model/Movie/Release.php index 1c49ef3c..751c4e40 100644 --- a/lib/Tmdb/Model/Movie/Release.php +++ b/lib/Tmdb/Model/Movie/Release.php @@ -18,6 +18,7 @@ /** * Class Release * @package Tmdb\Model\Movie + * @deprecated Use ReleaseDate instead */ class Release extends AbstractModel implements CountryFilter { diff --git a/lib/Tmdb/Model/Movie/ReleaseDate.php b/lib/Tmdb/Model/Movie/ReleaseDate.php new file mode 100644 index 00000000..87c3433e --- /dev/null +++ b/lib/Tmdb/Model/Movie/ReleaseDate.php @@ -0,0 +1,147 @@ + + * @copyright (c) 2013, Michael Roterman + * @version 2.1.7 + */ +namespace Tmdb\Model\Movie; + +use Tmdb\Model\AbstractModel; +use Tmdb\Model\Filter\CountryFilter; +use Tmdb\Model\Filter\LanguageFilter; + +/** + * Class Release Date + * @package Tmdb\Model\Movie + */ +class ReleaseDate extends AbstractModel implements CountryFilter, LanguageFilter +{ + private $iso31661; + private $iso6391; + private $certification; + private $note; + private $releaseDate; + private $type; + + public static $properties = [ + 'iso_3166_1', + 'ise_639_1', + 'certification', + 'note', + 'release_date', + 'type' + ]; + + /** + * @param string|null $certification + * @return $this + */ + public function setCertification($certification) + { + $this->certification = $certification; + + return $this; + } + + /** + * @return string|null + */ + public function getCertification() + { + return $this->certification; + } + + /** + * @param string|null $note + * @return $this + */ + public function setNote($note) + { + $this->note = $note; + + return $this; + } + + /** + * @return string|null + */ + public function getNote() + { + return $this->note; + } + + /** + * @param string $iso31661 + * @return $this + */ + public function setIso31661($iso31661) + { + $this->iso31661 = $iso31661; + + return $this; + } + + /** + * @return string + */ + public function getIso31661() + { + return $this->iso31661; + } + + /** + * @param string|\DateTime $releaseDate + * @return $this + */ + public function setReleaseDate($releaseDate) + { + if (!$releaseDate instanceof \DateTime) { + $releaseDate = new \DateTime($releaseDate); + } + + $this->releaseDate = $releaseDate; + + return $this; + } + + /** + * @return \DateTime + */ + public function getReleaseDate() + { + return $this->releaseDate; + } + + /** + * @return string|null + */ + public function getIso6391() + { + return $this->iso6391; + } + + /** + * @param int $type + * @return $this + */ + public function setType($type) + { + $this->type = $type; + + return $this; + } + + /** + * @return int + */ + public function getType() + { + return $this->type; + } +} \ No newline at end of file From 0cd159644174d59600b48e0752a369c9c8fede73 Mon Sep 17 00:00:00 2001 From: thinkingmedia Date: Fri, 17 Feb 2017 10:53:57 -0500 Subject: [PATCH 04/19] remove deprecated --- lib/Tmdb/Model/Movie.php | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/Tmdb/Model/Movie.php b/lib/Tmdb/Model/Movie.php index 84c73e39..973bd25c 100644 --- a/lib/Tmdb/Model/Movie.php +++ b/lib/Tmdb/Model/Movie.php @@ -889,7 +889,6 @@ public function setReleaseDates(GenericCollection $release_dates) /** * @return GenericCollection|ReleaseDate[] - * @deprecated Use the getReleaseDates instead */ public function getReleaseDates() { From 7b8b7570c8e4873e747e9517e6b23252a1f11383 Mon Sep 17 00:00:00 2001 From: Michael Roterman Date: Fri, 17 Feb 2017 21:54:17 +0100 Subject: [PATCH 05/19] Restrict phpunit <6, to maintain compatibility with php5.6 --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index a074bc64..4dd57be9 100644 --- a/composer.json +++ b/composer.json @@ -24,7 +24,7 @@ "rtheunissen/guzzle-log-middleware": "^0.4.0" }, "require-dev": { - "phpunit/phpunit": ">=5.7", + "phpunit/phpunit": ">=5.7,<6", "monolog/monolog": ">=1.11.0" }, "suggest": { From 43eb2e5dce0558273b8bb020227946e7f8f3b94c Mon Sep 17 00:00:00 2001 From: thinkingmedia Date: Fri, 3 Feb 2017 11:51:51 -0500 Subject: [PATCH 06/19] added RELEASE_DATES --- lib/Tmdb/Model/Movie/QueryParameter/AppendToResponse.php | 5 +++++ lib/Tmdb/Repository/MovieRepository.php | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/Tmdb/Model/Movie/QueryParameter/AppendToResponse.php b/lib/Tmdb/Model/Movie/QueryParameter/AppendToResponse.php index a459302a..e3d302bc 100644 --- a/lib/Tmdb/Model/Movie/QueryParameter/AppendToResponse.php +++ b/lib/Tmdb/Model/Movie/QueryParameter/AppendToResponse.php @@ -24,7 +24,12 @@ final class AppendToResponse extends BaseAppendToResponse const CREDITS = 'credits'; const IMAGES = 'images'; const KEYWORDS = 'keywords'; + /** + * @see https://developers.themoviedb.org/3/movies/get-movie-release-dates + * @deprecated Use RELEASE_DATES instead, but format has changed. + */ const RELEASES = 'releases'; + const RELEASE_DATES = 'release_dates'; const TRANSLATIONS = 'translations'; const SIMILAR = 'similar'; const REVIEWS = 'reviews'; diff --git a/lib/Tmdb/Repository/MovieRepository.php b/lib/Tmdb/Repository/MovieRepository.php index ed5d59f7..1a39d20a 100644 --- a/lib/Tmdb/Repository/MovieRepository.php +++ b/lib/Tmdb/Repository/MovieRepository.php @@ -66,7 +66,7 @@ public function load($id, array $parameters = [], array $headers = []) AppendToResponse::IMAGES, AppendToResponse::KEYWORDS, AppendToResponse::LISTS, - AppendToResponse::RELEASES, + AppendToResponse::RELEASE_DATES, AppendToResponse::REVIEWS, AppendToResponse::SIMILAR, AppendToResponse::TRANSLATIONS, From 44a2c2780c1825576cf9231b4e52c49d1f3026be Mon Sep 17 00:00:00 2001 From: thinkingmedia Date: Sat, 4 Feb 2017 08:26:53 -0500 Subject: [PATCH 07/19] fixed broken test --- test/Tmdb/Tests/Repository/MovieRepositoryTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Tmdb/Tests/Repository/MovieRepositoryTest.php b/test/Tmdb/Tests/Repository/MovieRepositoryTest.php index eb46507b..3120c02a 100644 --- a/test/Tmdb/Tests/Repository/MovieRepositoryTest.php +++ b/test/Tmdb/Tests/Repository/MovieRepositoryTest.php @@ -29,7 +29,7 @@ public function shouldLoadMovie() ->method('get') ->with($this->getRequest( 'https://api.themoviedb.org/3/movie/' . self::MOVIE_ID, - ['append_to_response' => 'alternative_titles,changes,credits,images,keywords,lists,releases,reviews,similar,translations,videos'] + ['append_to_response' => 'alternative_titles,changes,credits,images,keywords,lists,release_dates,reviews,similar,translations,videos'] )) ; From a4cb4f2520640cc53d60b53fa09b6b0f93fd8d6b Mon Sep 17 00:00:00 2001 From: thinkingmedia Date: Wed, 15 Feb 2017 09:03:39 -0500 Subject: [PATCH 08/19] adds new ReleaseDate class and to Movie class --- lib/Tmdb/Factory/MovieFactory.php | 12 +++ lib/Tmdb/Model/Movie.php | 39 ++++++- lib/Tmdb/Model/Movie/Release.php | 1 + lib/Tmdb/Model/Movie/ReleaseDate.php | 147 +++++++++++++++++++++++++++ 4 files changed, 195 insertions(+), 4 deletions(-) create mode 100644 lib/Tmdb/Model/Movie/ReleaseDate.php diff --git a/lib/Tmdb/Factory/MovieFactory.php b/lib/Tmdb/Factory/MovieFactory.php index 98255522..2b0a68a4 100644 --- a/lib/Tmdb/Factory/MovieFactory.php +++ b/lib/Tmdb/Factory/MovieFactory.php @@ -164,6 +164,18 @@ public function create(array $data = []) $movie->setReleases($this->createGenericCollection($data['releases']['countries'], new Movie\Release())); } + if (array_key_exists('release_dates', $data) && array_key_exists('results', $data['release_dates'])) { + $release_dates = new GenericCollection(); + foreach ($data['release_dates']['results'] as $country_releases) { + $iso_31661 = $country_releases['iso_3166_1']; + foreach($country_releases['release_dates'] as $release_date) { + $release_date['iso_3166_1'] = $iso_31661; + $release_dates->add(null, $this->hydrate(new Movie\ReleaseDate(), $release_date)); + } + } + $movie->setReleaseDates($release_dates); + } + if (array_key_exists('videos', $data)) { $movie->setVideos($this->getVideoFactory()->createCollection($data['videos'])); } diff --git a/lib/Tmdb/Model/Movie.php b/lib/Tmdb/Model/Movie.php index e46cf807..84c73e39 100644 --- a/lib/Tmdb/Model/Movie.php +++ b/lib/Tmdb/Model/Movie.php @@ -14,6 +14,7 @@ use Tmdb\Model\Collection\ResultCollection; use Tmdb\Model\Collection\Videos; +use Tmdb\Model\Common\Country; use Tmdb\Model\Common\GenericCollection; use Tmdb\Model\Collection\CreditsCollection; use Tmdb\Model\Collection\Genres; @@ -22,6 +23,7 @@ use Tmdb\Model\Common\Translation; use Tmdb\Model\Movie\AlternativeTitle; use Tmdb\Model\Movie\Release; +use Tmdb\Model\Movie\ReleaseDate; /** * Class Movie @@ -195,9 +197,15 @@ class Movie extends AbstractModel /** * @var GenericCollection + * @deprecated Use $release_dates instead */ protected $releases; + /** + * @var GenericCollection + */ + protected $release_dates; + /** * @var GenericCollection */ @@ -266,6 +274,7 @@ public function __construct() $this->keywords = new GenericCollection(); $this->lists = new GenericCollection(); $this->releases = new GenericCollection(); + $this->release_dates = new GenericCollection(); $this->similar = new GenericCollection(); $this->translations = new GenericCollection(); $this->videos = new Videos(); @@ -849,6 +858,7 @@ public function getLists() /** * @param GenericCollection $releases * @return $this + * @deprecated Use the setReleaseDates instead. */ public function setReleases(GenericCollection $releases) { @@ -859,12 +869,33 @@ public function setReleases(GenericCollection $releases) /** * @return GenericCollection|Release[] + * @deprecated Use the getReleaseDates instead */ public function getReleases() { return $this->releases; } + /** + * @param GenericCollection $release_dates + * @return $this + */ + public function setReleaseDates(GenericCollection $release_dates) + { + $this->release_dates = $release_dates; + + return $this; + } + + /** + * @return GenericCollection|ReleaseDate[] + * @deprecated Use the getReleaseDates instead + */ + public function getReleaseDates() + { + return $this->release_dates; + } + /** * @param GenericCollection $similar * @return $this @@ -877,7 +908,7 @@ public function setSimilar($similar) } /** - * @return Movie[] + * @return GenericCollection|Movie[] */ public function getSimilar() { @@ -885,8 +916,8 @@ public function getSimilar() } /** - * @return Movie[] - * @deprecated + * @return GenericCollection|Movie[] + * @deprecated Use getSimilar instead */ public function getSimilarMovies() { @@ -987,4 +1018,4 @@ public function getVideos() { return $this->videos; } -} +} \ No newline at end of file diff --git a/lib/Tmdb/Model/Movie/Release.php b/lib/Tmdb/Model/Movie/Release.php index 1c49ef3c..751c4e40 100644 --- a/lib/Tmdb/Model/Movie/Release.php +++ b/lib/Tmdb/Model/Movie/Release.php @@ -18,6 +18,7 @@ /** * Class Release * @package Tmdb\Model\Movie + * @deprecated Use ReleaseDate instead */ class Release extends AbstractModel implements CountryFilter { diff --git a/lib/Tmdb/Model/Movie/ReleaseDate.php b/lib/Tmdb/Model/Movie/ReleaseDate.php new file mode 100644 index 00000000..87c3433e --- /dev/null +++ b/lib/Tmdb/Model/Movie/ReleaseDate.php @@ -0,0 +1,147 @@ + + * @copyright (c) 2013, Michael Roterman + * @version 2.1.7 + */ +namespace Tmdb\Model\Movie; + +use Tmdb\Model\AbstractModel; +use Tmdb\Model\Filter\CountryFilter; +use Tmdb\Model\Filter\LanguageFilter; + +/** + * Class Release Date + * @package Tmdb\Model\Movie + */ +class ReleaseDate extends AbstractModel implements CountryFilter, LanguageFilter +{ + private $iso31661; + private $iso6391; + private $certification; + private $note; + private $releaseDate; + private $type; + + public static $properties = [ + 'iso_3166_1', + 'ise_639_1', + 'certification', + 'note', + 'release_date', + 'type' + ]; + + /** + * @param string|null $certification + * @return $this + */ + public function setCertification($certification) + { + $this->certification = $certification; + + return $this; + } + + /** + * @return string|null + */ + public function getCertification() + { + return $this->certification; + } + + /** + * @param string|null $note + * @return $this + */ + public function setNote($note) + { + $this->note = $note; + + return $this; + } + + /** + * @return string|null + */ + public function getNote() + { + return $this->note; + } + + /** + * @param string $iso31661 + * @return $this + */ + public function setIso31661($iso31661) + { + $this->iso31661 = $iso31661; + + return $this; + } + + /** + * @return string + */ + public function getIso31661() + { + return $this->iso31661; + } + + /** + * @param string|\DateTime $releaseDate + * @return $this + */ + public function setReleaseDate($releaseDate) + { + if (!$releaseDate instanceof \DateTime) { + $releaseDate = new \DateTime($releaseDate); + } + + $this->releaseDate = $releaseDate; + + return $this; + } + + /** + * @return \DateTime + */ + public function getReleaseDate() + { + return $this->releaseDate; + } + + /** + * @return string|null + */ + public function getIso6391() + { + return $this->iso6391; + } + + /** + * @param int $type + * @return $this + */ + public function setType($type) + { + $this->type = $type; + + return $this; + } + + /** + * @return int + */ + public function getType() + { + return $this->type; + } +} \ No newline at end of file From c915e73850e3df20af3d52a0a9c4ee28f0faab88 Mon Sep 17 00:00:00 2001 From: thinkingmedia Date: Fri, 17 Feb 2017 10:53:57 -0500 Subject: [PATCH 09/19] remove deprecated --- lib/Tmdb/Model/Movie.php | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/Tmdb/Model/Movie.php b/lib/Tmdb/Model/Movie.php index 84c73e39..973bd25c 100644 --- a/lib/Tmdb/Model/Movie.php +++ b/lib/Tmdb/Model/Movie.php @@ -889,7 +889,6 @@ public function setReleaseDates(GenericCollection $release_dates) /** * @return GenericCollection|ReleaseDate[] - * @deprecated Use the getReleaseDates instead */ public function getReleaseDates() { From 6c035ea1000bdbfeaebc9b9a057c8d1acd968669 Mon Sep 17 00:00:00 2001 From: Michael Roterman Date: Fri, 17 Feb 2017 22:20:50 +0100 Subject: [PATCH 10/19] Make sure unit tests run for symfony 3.2 components --- .travis.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.travis.yml b/.travis.yml index 8e9e126b..6f10d919 100644 --- a/.travis.yml +++ b/.travis.yml @@ -17,24 +17,32 @@ matrix: env: [SF_EVT_DISPATCHER_VERSION="2.8.*", SF_OPT_RESOLVER_VERSION="2.8.*"] - php: 5.6 env: [SF_EVT_DISPATCHER_VERSION="3.1.*", SF_OPT_RESOLVER_VERSION="3.1.*"] + - php: 5.6 + env: [SF_EVT_DISPATCHER_VERSION="3.2.*", SF_OPT_RESOLVER_VERSION="3.2.*"] - php: 7.0 env: [SF_EVT_DISPATCHER_VERSION="2.7.*", SF_OPT_RESOLVER_VERSION="2.7.*"] - php: 7.0 env: [SF_EVT_DISPATCHER_VERSION="2.8.*", SF_OPT_RESOLVER_VERSION="2.8.*"] - php: 7.0 env: [SF_EVT_DISPATCHER_VERSION="3.1.*", SF_OPT_RESOLVER_VERSION="3.1.*"] + - php: 7.0 + env: [SF_EVT_DISPATCHER_VERSION="3.2.*", SF_OPT_RESOLVER_VERSION="3.2.*"] - php: 7.1 env: [SF_EVT_DISPATCHER_VERSION="2.7.*", SF_OPT_RESOLVER_VERSION="2.7.*"] - php: 7.1 env: [SF_EVT_DISPATCHER_VERSION="2.8.*", SF_OPT_RESOLVER_VERSION="2.8.*"] - php: 7.1 env: [SF_EVT_DISPATCHER_VERSION="3.1.*", SF_OPT_RESOLVER_VERSION="3.1.*"] + - php: 7.1 + env: [SF_EVT_DISPATCHER_VERSION="3.2.*", SF_OPT_RESOLVER_VERSION="3.2.*"] - php: hhvm env: [SF_EVT_DISPATCHER_VERSION="2.7.*", SF_OPT_RESOLVER_VERSION="2.7.*"] - php: hhvm env: [SF_EVT_DISPATCHER_VERSION="2.8.*", SF_OPT_RESOLVER_VERSION="2.8.*"] - php: hhvm env: [SF_EVT_DISPATCHER_VERSION="3.1.*", SF_OPT_RESOLVER_VERSION="3.1.*"] + - php: hhvm + env: [SF_EVT_DISPATCHER_VERSION="3.2.*", SF_OPT_RESOLVER_VERSION="2.7.*"] allow_failures: - php: nightly fast_finish: true From 72a16fba0579a900afe4d859b966c0a5b2ee28cc Mon Sep 17 00:00:00 2001 From: Michael Roterman Date: Fri, 17 Feb 2017 22:31:35 +0100 Subject: [PATCH 11/19] Mistake in the travis matrix --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 6f10d919..8708edc0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -42,7 +42,7 @@ matrix: - php: hhvm env: [SF_EVT_DISPATCHER_VERSION="3.1.*", SF_OPT_RESOLVER_VERSION="3.1.*"] - php: hhvm - env: [SF_EVT_DISPATCHER_VERSION="3.2.*", SF_OPT_RESOLVER_VERSION="2.7.*"] + env: [SF_EVT_DISPATCHER_VERSION="3.2.*", SF_OPT_RESOLVER_VERSION="3.2.*"] allow_failures: - php: nightly fast_finish: true From 6052ffc4ae36b25d86d02f4e9a832ba17acbf901 Mon Sep 17 00:00:00 2001 From: thinkingmedia Date: Fri, 17 Feb 2017 16:47:15 -0500 Subject: [PATCH 12/19] updates unit tests --- lib/Tmdb/Model/Movie/ReleaseDate.php | 12 +- test/Tmdb/Tests/Factory/MovieFactoryTest.php | 13 + .../Tests/Model/Movie/ReleaseDateTest.php | 49 ++ test/Tmdb/Tests/Model/MovieTest.php | 1 + test/Tmdb/Tests/Resources/movie/all.json | 556 ++++++++++++++++++ 5 files changed, 630 insertions(+), 1 deletion(-) create mode 100644 test/Tmdb/Tests/Model/Movie/ReleaseDateTest.php diff --git a/lib/Tmdb/Model/Movie/ReleaseDate.php b/lib/Tmdb/Model/Movie/ReleaseDate.php index 87c3433e..523899d7 100644 --- a/lib/Tmdb/Model/Movie/ReleaseDate.php +++ b/lib/Tmdb/Model/Movie/ReleaseDate.php @@ -31,7 +31,7 @@ class ReleaseDate extends AbstractModel implements CountryFilter, LanguageFilter public static $properties = [ 'iso_3166_1', - 'ise_639_1', + 'iso_639_1', 'certification', 'note', 'release_date', @@ -118,6 +118,16 @@ public function getReleaseDate() return $this->releaseDate; } + /** + * @param string $iso6391 + * @return $this + */ + public function setIso6391($iso6391) + { + $this->iso6391 = $iso6391; + return $this; + } + /** * @return string|null */ diff --git a/test/Tmdb/Tests/Factory/MovieFactoryTest.php b/test/Tmdb/Tests/Factory/MovieFactoryTest.php index fad0e61a..ca9db2dc 100644 --- a/test/Tmdb/Tests/Factory/MovieFactoryTest.php +++ b/test/Tmdb/Tests/Factory/MovieFactoryTest.php @@ -14,6 +14,8 @@ use Tmdb\Factory\MovieFactory; use Tmdb\Model\Movie; +use Tmdb\Model\Movie\Release; +use Tmdb\Model\Movie\ReleaseDate; use Tmdb\Model\Person\CastMember; class MovieFactoryTest extends TestCase @@ -103,12 +105,23 @@ public function shouldBeFunctional() $this->assertInstanceOf('Tmdb\Model\Common\GenericCollection', $this->movie->getKeywords()); $this->assertInstanceOf('Tmdb\Model\Common\GenericCollection', $this->movie->getLists()); $this->assertInstanceOf('Tmdb\Model\Common\GenericCollection', $this->movie->getReleases()); + $this->assertInstanceOf('Tmdb\Model\Common\GenericCollection', $this->movie->getReleaseDates()); $this->assertInstanceOf('Tmdb\Model\Common\GenericCollection', $this->movie->getSimilar()); $this->assertInstanceOf('Tmdb\Model\Collection\Videos', $this->movie->getVideos()); + /** @var Release[] $releases */ $releases = $this->movie->getReleases()->getAll(); $primaryRelease = array_shift($releases); $this->assertEquals(true, $primaryRelease->getPrimary()); + + /** @var ReleaseDate[] $release_dates */ + $release_dates = $this->movie->getReleaseDates()->getAll(); + $this->assertEquals(46, count($release_dates)); + foreach($release_dates as $release_date) { + $this->assertNotEmpty($release_date->getIso31661()); + $this->assertInstanceOf(\DateTime::class, $release_date->getReleaseDate()); + $this->assertTrue(is_int($release_date->getType())); + } } /** diff --git a/test/Tmdb/Tests/Model/Movie/ReleaseDateTest.php b/test/Tmdb/Tests/Model/Movie/ReleaseDateTest.php new file mode 100644 index 00000000..617f325a --- /dev/null +++ b/test/Tmdb/Tests/Model/Movie/ReleaseDateTest.php @@ -0,0 +1,49 @@ + + * @copyright (c) 2013, Michael Roterman + * @version 2.1.7 + */ +namespace Tmdb\Tests\Model\Movie; + +use Tmdb\Common\ObjectHydrator; +use Tmdb\Model\Movie\ReleaseDate; +use Tmdb\Tests\Model\TestCase; + +class ReleaseDateTest extends TestCase +{ + /** + * @test + */ + public function shouldBeFunctional() + { + $data = [ + 'iso_3166_1' => 'US', + 'iso_639_1' => 'en', + 'certification' => 'R', + 'note' => 'Released only to IMAX screens', + 'release_date' => '2013-09-06T00:00:00.000Z', + 'type' => 3 + ]; + + $hydrator = new ObjectHydrator(); + + /** + * @var ReleaseDate $object + */ + $object = $hydrator->hydrate(new ReleaseDate(), $data); + + $this->assertEquals('US', $object->getIso31661()); + $this->assertEquals('en', $object->getIso6391()); + $this->assertEquals('R', $object->getCertification()); + $this->assertEquals('Released only to IMAX screens', $object->getNote()); + $this->assertEquals(new \DateTime('2013-09-06'), $object->getReleaseDate()); + $this->assertEquals(3, $object->getType()); + } +} \ No newline at end of file diff --git a/test/Tmdb/Tests/Model/MovieTest.php b/test/Tmdb/Tests/Model/MovieTest.php index 1ea9131b..f01929cd 100644 --- a/test/Tmdb/Tests/Model/MovieTest.php +++ b/test/Tmdb/Tests/Model/MovieTest.php @@ -40,6 +40,7 @@ public function shouldConstructMovie() 'getKeywords' => 'Tmdb\Model\Common\GenericCollection', 'getLists' => 'Tmdb\Model\Common\GenericCollection', 'getReleases' => 'Tmdb\Model\Common\GenericCollection', + 'getReleaseDates' => 'Tmdb\Model\Common\GenericCollection', 'getSimilar' => 'Tmdb\Model\Common\GenericCollection', 'getTranslations' => 'Tmdb\Model\Common\GenericCollection', 'getVideos' => 'Tmdb\Model\Collection\Videos', diff --git a/test/Tmdb/Tests/Resources/movie/all.json b/test/Tmdb/Tests/Resources/movie/all.json index a1bd95c6..2e08be77 100644 --- a/test/Tmdb/Tests/Resources/movie/all.json +++ b/test/Tmdb/Tests/Resources/movie/all.json @@ -1300,6 +1300,562 @@ } ] }, + "release_dates": { + "results": [ + { + "iso_3166_1": "KR", + "release_dates": [ + { + "certification": "15세 이상 관람가", + "iso_639_1": "", + "note": "", + "release_date": "2013-11-28T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "JP", + "release_dates": [ + { + "certification": "", + "iso_639_1": "", + "note": "", + "release_date": "2014-03-08T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "MX", + "release_dates": [ + { + "certification": "", + "iso_639_1": "", + "note": "", + "release_date": "2013-10-25T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "TR", + "release_dates": [ + { + "certification": "", + "iso_639_1": "", + "note": "", + "release_date": "2013-10-04T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "SE", + "release_dates": [ + { + "certification": "15", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-20T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "IS", + "release_dates": [ + { + "certification": "", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-20T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "PT", + "release_dates": [ + { + "certification": "", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-19T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "PH", + "release_dates": [ + { + "certification": "", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-18T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "PK", + "release_dates": [ + { + "certification": "", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-13T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "SG", + "release_dates": [ + { + "certification": "", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-12T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "KH", + "release_dates": [ + { + "certification": "", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-12T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "IN", + "release_dates": [ + { + "certification": "", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-06T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "CL", + "release_dates": [ + { + "certification": "", + "iso_639_1": "", + "note": "", + "release_date": "2014-01-30T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "FI", + "release_dates": [ + { + "certification": "", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-06T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "HU", + "release_dates": [ + { + "certification": "", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-05T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "HR", + "release_dates": [ + { + "certification": "", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-05T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "EE", + "release_dates": [ + { + "certification": "", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-06T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "AR", + "release_dates": [ + { + "certification": "", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-12T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "IL", + "release_dates": [ + { + "certification": "", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-05T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "LT", + "release_dates": [ + { + "certification": "", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-06T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "ID", + "release_dates": [ + { + "certification": "", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-05T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "HK", + "release_dates": [ + { + "certification": "", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-05T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "GR", + "release_dates": [ + { + "certification": "15", + "iso_639_1": "", + "note": "", + "release_date": "2013-10-17T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "CA", + "release_dates": [ + { + "certification": "", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-06T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "ES", + "release_dates": [ + { + "certification": "16", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-02T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "NO", + "release_dates": [ + { + "certification": "", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-06T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "RU", + "release_dates": [ + { + "certification": "", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-12T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "SK", + "release_dates": [ + { + "certification": "15", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-05T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "BG", + "release_dates": [ + { + "certification": "D", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-06T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "IT", + "release_dates": [ + { + "certification": "", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-05T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "FR", + "release_dates": [ + { + "certification": "12", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-18T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "IE", + "release_dates": [ + { + "certification": "", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-04T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "GB", + "release_dates": [ + { + "certification": "15", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-03T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "BE", + "release_dates": [ + { + "certification": "", + "iso_639_1": "", + "note": "", + "release_date": "2013-11-20T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "KZ", + "release_dates": [ + { + "certification": "", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-11T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "DK", + "release_dates": [ + { + "certification": "15", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-05T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "AT", + "release_dates": [ + { + "certification": "", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-05T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "TW", + "release_dates": [ + { + "certification": "", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-06T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "PL", + "release_dates": [ + { + "certification": "", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-06T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "NL", + "release_dates": [ + { + "certification": "16", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-05T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "DE", + "release_dates": [ + { + "certification": "16", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-19T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "PE", + "release_dates": [ + { + "certification": "", + "iso_639_1": "", + "note": "", + "release_date": "2013-10-24T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "BR", + "release_dates": [ + { + "certification": "16 anos", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-06T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "AU", + "release_dates": [ + { + "certification": "MA15+", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-12T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "KW", + "release_dates": [ + { + "certification": "", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-05T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "US", + "release_dates": [ + { + "certification": "R", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-06T00:00:00.000Z", + "type": 3 + } + ] + } + ] + }, "similar_movies":{ "page":1, "results":[ From d3a83f9b84f9f29df809fd14348d2e7228255b7a Mon Sep 17 00:00:00 2001 From: thinkingmedia Date: Fri, 3 Feb 2017 11:51:51 -0500 Subject: [PATCH 13/19] added RELEASE_DATES --- lib/Tmdb/Model/Movie/QueryParameter/AppendToResponse.php | 5 +++++ lib/Tmdb/Repository/MovieRepository.php | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/Tmdb/Model/Movie/QueryParameter/AppendToResponse.php b/lib/Tmdb/Model/Movie/QueryParameter/AppendToResponse.php index a459302a..e3d302bc 100644 --- a/lib/Tmdb/Model/Movie/QueryParameter/AppendToResponse.php +++ b/lib/Tmdb/Model/Movie/QueryParameter/AppendToResponse.php @@ -24,7 +24,12 @@ final class AppendToResponse extends BaseAppendToResponse const CREDITS = 'credits'; const IMAGES = 'images'; const KEYWORDS = 'keywords'; + /** + * @see https://developers.themoviedb.org/3/movies/get-movie-release-dates + * @deprecated Use RELEASE_DATES instead, but format has changed. + */ const RELEASES = 'releases'; + const RELEASE_DATES = 'release_dates'; const TRANSLATIONS = 'translations'; const SIMILAR = 'similar'; const REVIEWS = 'reviews'; diff --git a/lib/Tmdb/Repository/MovieRepository.php b/lib/Tmdb/Repository/MovieRepository.php index ed5d59f7..1a39d20a 100644 --- a/lib/Tmdb/Repository/MovieRepository.php +++ b/lib/Tmdb/Repository/MovieRepository.php @@ -66,7 +66,7 @@ public function load($id, array $parameters = [], array $headers = []) AppendToResponse::IMAGES, AppendToResponse::KEYWORDS, AppendToResponse::LISTS, - AppendToResponse::RELEASES, + AppendToResponse::RELEASE_DATES, AppendToResponse::REVIEWS, AppendToResponse::SIMILAR, AppendToResponse::TRANSLATIONS, From 0c32025f148a0da30e668999e5da105210e649f6 Mon Sep 17 00:00:00 2001 From: thinkingmedia Date: Sat, 4 Feb 2017 08:26:53 -0500 Subject: [PATCH 14/19] fixed broken test --- test/Tmdb/Tests/Repository/MovieRepositoryTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Tmdb/Tests/Repository/MovieRepositoryTest.php b/test/Tmdb/Tests/Repository/MovieRepositoryTest.php index eb46507b..3120c02a 100644 --- a/test/Tmdb/Tests/Repository/MovieRepositoryTest.php +++ b/test/Tmdb/Tests/Repository/MovieRepositoryTest.php @@ -29,7 +29,7 @@ public function shouldLoadMovie() ->method('get') ->with($this->getRequest( 'https://api.themoviedb.org/3/movie/' . self::MOVIE_ID, - ['append_to_response' => 'alternative_titles,changes,credits,images,keywords,lists,releases,reviews,similar,translations,videos'] + ['append_to_response' => 'alternative_titles,changes,credits,images,keywords,lists,release_dates,reviews,similar,translations,videos'] )) ; From 3bd251b1a75d567998b77aaa47a480b5720aaf8c Mon Sep 17 00:00:00 2001 From: thinkingmedia Date: Wed, 15 Feb 2017 09:03:39 -0500 Subject: [PATCH 15/19] adds new ReleaseDate class and to Movie class --- lib/Tmdb/Factory/MovieFactory.php | 12 +++ lib/Tmdb/Model/Movie.php | 39 ++++++- lib/Tmdb/Model/Movie/Release.php | 1 + lib/Tmdb/Model/Movie/ReleaseDate.php | 147 +++++++++++++++++++++++++++ 4 files changed, 195 insertions(+), 4 deletions(-) create mode 100644 lib/Tmdb/Model/Movie/ReleaseDate.php diff --git a/lib/Tmdb/Factory/MovieFactory.php b/lib/Tmdb/Factory/MovieFactory.php index 98255522..2b0a68a4 100644 --- a/lib/Tmdb/Factory/MovieFactory.php +++ b/lib/Tmdb/Factory/MovieFactory.php @@ -164,6 +164,18 @@ public function create(array $data = []) $movie->setReleases($this->createGenericCollection($data['releases']['countries'], new Movie\Release())); } + if (array_key_exists('release_dates', $data) && array_key_exists('results', $data['release_dates'])) { + $release_dates = new GenericCollection(); + foreach ($data['release_dates']['results'] as $country_releases) { + $iso_31661 = $country_releases['iso_3166_1']; + foreach($country_releases['release_dates'] as $release_date) { + $release_date['iso_3166_1'] = $iso_31661; + $release_dates->add(null, $this->hydrate(new Movie\ReleaseDate(), $release_date)); + } + } + $movie->setReleaseDates($release_dates); + } + if (array_key_exists('videos', $data)) { $movie->setVideos($this->getVideoFactory()->createCollection($data['videos'])); } diff --git a/lib/Tmdb/Model/Movie.php b/lib/Tmdb/Model/Movie.php index e46cf807..84c73e39 100644 --- a/lib/Tmdb/Model/Movie.php +++ b/lib/Tmdb/Model/Movie.php @@ -14,6 +14,7 @@ use Tmdb\Model\Collection\ResultCollection; use Tmdb\Model\Collection\Videos; +use Tmdb\Model\Common\Country; use Tmdb\Model\Common\GenericCollection; use Tmdb\Model\Collection\CreditsCollection; use Tmdb\Model\Collection\Genres; @@ -22,6 +23,7 @@ use Tmdb\Model\Common\Translation; use Tmdb\Model\Movie\AlternativeTitle; use Tmdb\Model\Movie\Release; +use Tmdb\Model\Movie\ReleaseDate; /** * Class Movie @@ -195,9 +197,15 @@ class Movie extends AbstractModel /** * @var GenericCollection + * @deprecated Use $release_dates instead */ protected $releases; + /** + * @var GenericCollection + */ + protected $release_dates; + /** * @var GenericCollection */ @@ -266,6 +274,7 @@ public function __construct() $this->keywords = new GenericCollection(); $this->lists = new GenericCollection(); $this->releases = new GenericCollection(); + $this->release_dates = new GenericCollection(); $this->similar = new GenericCollection(); $this->translations = new GenericCollection(); $this->videos = new Videos(); @@ -849,6 +858,7 @@ public function getLists() /** * @param GenericCollection $releases * @return $this + * @deprecated Use the setReleaseDates instead. */ public function setReleases(GenericCollection $releases) { @@ -859,12 +869,33 @@ public function setReleases(GenericCollection $releases) /** * @return GenericCollection|Release[] + * @deprecated Use the getReleaseDates instead */ public function getReleases() { return $this->releases; } + /** + * @param GenericCollection $release_dates + * @return $this + */ + public function setReleaseDates(GenericCollection $release_dates) + { + $this->release_dates = $release_dates; + + return $this; + } + + /** + * @return GenericCollection|ReleaseDate[] + * @deprecated Use the getReleaseDates instead + */ + public function getReleaseDates() + { + return $this->release_dates; + } + /** * @param GenericCollection $similar * @return $this @@ -877,7 +908,7 @@ public function setSimilar($similar) } /** - * @return Movie[] + * @return GenericCollection|Movie[] */ public function getSimilar() { @@ -885,8 +916,8 @@ public function getSimilar() } /** - * @return Movie[] - * @deprecated + * @return GenericCollection|Movie[] + * @deprecated Use getSimilar instead */ public function getSimilarMovies() { @@ -987,4 +1018,4 @@ public function getVideos() { return $this->videos; } -} +} \ No newline at end of file diff --git a/lib/Tmdb/Model/Movie/Release.php b/lib/Tmdb/Model/Movie/Release.php index 1c49ef3c..751c4e40 100644 --- a/lib/Tmdb/Model/Movie/Release.php +++ b/lib/Tmdb/Model/Movie/Release.php @@ -18,6 +18,7 @@ /** * Class Release * @package Tmdb\Model\Movie + * @deprecated Use ReleaseDate instead */ class Release extends AbstractModel implements CountryFilter { diff --git a/lib/Tmdb/Model/Movie/ReleaseDate.php b/lib/Tmdb/Model/Movie/ReleaseDate.php new file mode 100644 index 00000000..87c3433e --- /dev/null +++ b/lib/Tmdb/Model/Movie/ReleaseDate.php @@ -0,0 +1,147 @@ + + * @copyright (c) 2013, Michael Roterman + * @version 2.1.7 + */ +namespace Tmdb\Model\Movie; + +use Tmdb\Model\AbstractModel; +use Tmdb\Model\Filter\CountryFilter; +use Tmdb\Model\Filter\LanguageFilter; + +/** + * Class Release Date + * @package Tmdb\Model\Movie + */ +class ReleaseDate extends AbstractModel implements CountryFilter, LanguageFilter +{ + private $iso31661; + private $iso6391; + private $certification; + private $note; + private $releaseDate; + private $type; + + public static $properties = [ + 'iso_3166_1', + 'ise_639_1', + 'certification', + 'note', + 'release_date', + 'type' + ]; + + /** + * @param string|null $certification + * @return $this + */ + public function setCertification($certification) + { + $this->certification = $certification; + + return $this; + } + + /** + * @return string|null + */ + public function getCertification() + { + return $this->certification; + } + + /** + * @param string|null $note + * @return $this + */ + public function setNote($note) + { + $this->note = $note; + + return $this; + } + + /** + * @return string|null + */ + public function getNote() + { + return $this->note; + } + + /** + * @param string $iso31661 + * @return $this + */ + public function setIso31661($iso31661) + { + $this->iso31661 = $iso31661; + + return $this; + } + + /** + * @return string + */ + public function getIso31661() + { + return $this->iso31661; + } + + /** + * @param string|\DateTime $releaseDate + * @return $this + */ + public function setReleaseDate($releaseDate) + { + if (!$releaseDate instanceof \DateTime) { + $releaseDate = new \DateTime($releaseDate); + } + + $this->releaseDate = $releaseDate; + + return $this; + } + + /** + * @return \DateTime + */ + public function getReleaseDate() + { + return $this->releaseDate; + } + + /** + * @return string|null + */ + public function getIso6391() + { + return $this->iso6391; + } + + /** + * @param int $type + * @return $this + */ + public function setType($type) + { + $this->type = $type; + + return $this; + } + + /** + * @return int + */ + public function getType() + { + return $this->type; + } +} \ No newline at end of file From 4db726ac1f8dc832e4c8576ddad62fcb8ec1a88e Mon Sep 17 00:00:00 2001 From: thinkingmedia Date: Fri, 17 Feb 2017 10:53:57 -0500 Subject: [PATCH 16/19] remove deprecated --- lib/Tmdb/Model/Movie.php | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/Tmdb/Model/Movie.php b/lib/Tmdb/Model/Movie.php index 84c73e39..973bd25c 100644 --- a/lib/Tmdb/Model/Movie.php +++ b/lib/Tmdb/Model/Movie.php @@ -889,7 +889,6 @@ public function setReleaseDates(GenericCollection $release_dates) /** * @return GenericCollection|ReleaseDate[] - * @deprecated Use the getReleaseDates instead */ public function getReleaseDates() { From 01f6aa93a23ea3b0726477847171977f8dc5b6ee Mon Sep 17 00:00:00 2001 From: thinkingmedia Date: Fri, 17 Feb 2017 16:53:20 -0500 Subject: [PATCH 17/19] merged --- lib/Tmdb/Model/Movie.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Tmdb/Model/Movie.php b/lib/Tmdb/Model/Movie.php index 973bd25c..9c934283 100644 --- a/lib/Tmdb/Model/Movie.php +++ b/lib/Tmdb/Model/Movie.php @@ -1017,4 +1017,4 @@ public function getVideos() { return $this->videos; } -} \ No newline at end of file +} From 40fb19a6b125628a1b2d27734a0fd47a36c5ac17 Mon Sep 17 00:00:00 2001 From: thinkingmedia Date: Fri, 17 Feb 2017 16:47:15 -0500 Subject: [PATCH 18/19] updates unit tests --- lib/Tmdb/Model/Movie/ReleaseDate.php | 12 +- test/Tmdb/Tests/Factory/MovieFactoryTest.php | 13 + .../Tests/Model/Movie/ReleaseDateTest.php | 49 ++ test/Tmdb/Tests/Model/MovieTest.php | 1 + test/Tmdb/Tests/Resources/movie/all.json | 556 ++++++++++++++++++ 5 files changed, 630 insertions(+), 1 deletion(-) create mode 100644 test/Tmdb/Tests/Model/Movie/ReleaseDateTest.php diff --git a/lib/Tmdb/Model/Movie/ReleaseDate.php b/lib/Tmdb/Model/Movie/ReleaseDate.php index 87c3433e..523899d7 100644 --- a/lib/Tmdb/Model/Movie/ReleaseDate.php +++ b/lib/Tmdb/Model/Movie/ReleaseDate.php @@ -31,7 +31,7 @@ class ReleaseDate extends AbstractModel implements CountryFilter, LanguageFilter public static $properties = [ 'iso_3166_1', - 'ise_639_1', + 'iso_639_1', 'certification', 'note', 'release_date', @@ -118,6 +118,16 @@ public function getReleaseDate() return $this->releaseDate; } + /** + * @param string $iso6391 + * @return $this + */ + public function setIso6391($iso6391) + { + $this->iso6391 = $iso6391; + return $this; + } + /** * @return string|null */ diff --git a/test/Tmdb/Tests/Factory/MovieFactoryTest.php b/test/Tmdb/Tests/Factory/MovieFactoryTest.php index fad0e61a..ca9db2dc 100644 --- a/test/Tmdb/Tests/Factory/MovieFactoryTest.php +++ b/test/Tmdb/Tests/Factory/MovieFactoryTest.php @@ -14,6 +14,8 @@ use Tmdb\Factory\MovieFactory; use Tmdb\Model\Movie; +use Tmdb\Model\Movie\Release; +use Tmdb\Model\Movie\ReleaseDate; use Tmdb\Model\Person\CastMember; class MovieFactoryTest extends TestCase @@ -103,12 +105,23 @@ public function shouldBeFunctional() $this->assertInstanceOf('Tmdb\Model\Common\GenericCollection', $this->movie->getKeywords()); $this->assertInstanceOf('Tmdb\Model\Common\GenericCollection', $this->movie->getLists()); $this->assertInstanceOf('Tmdb\Model\Common\GenericCollection', $this->movie->getReleases()); + $this->assertInstanceOf('Tmdb\Model\Common\GenericCollection', $this->movie->getReleaseDates()); $this->assertInstanceOf('Tmdb\Model\Common\GenericCollection', $this->movie->getSimilar()); $this->assertInstanceOf('Tmdb\Model\Collection\Videos', $this->movie->getVideos()); + /** @var Release[] $releases */ $releases = $this->movie->getReleases()->getAll(); $primaryRelease = array_shift($releases); $this->assertEquals(true, $primaryRelease->getPrimary()); + + /** @var ReleaseDate[] $release_dates */ + $release_dates = $this->movie->getReleaseDates()->getAll(); + $this->assertEquals(46, count($release_dates)); + foreach($release_dates as $release_date) { + $this->assertNotEmpty($release_date->getIso31661()); + $this->assertInstanceOf(\DateTime::class, $release_date->getReleaseDate()); + $this->assertTrue(is_int($release_date->getType())); + } } /** diff --git a/test/Tmdb/Tests/Model/Movie/ReleaseDateTest.php b/test/Tmdb/Tests/Model/Movie/ReleaseDateTest.php new file mode 100644 index 00000000..617f325a --- /dev/null +++ b/test/Tmdb/Tests/Model/Movie/ReleaseDateTest.php @@ -0,0 +1,49 @@ + + * @copyright (c) 2013, Michael Roterman + * @version 2.1.7 + */ +namespace Tmdb\Tests\Model\Movie; + +use Tmdb\Common\ObjectHydrator; +use Tmdb\Model\Movie\ReleaseDate; +use Tmdb\Tests\Model\TestCase; + +class ReleaseDateTest extends TestCase +{ + /** + * @test + */ + public function shouldBeFunctional() + { + $data = [ + 'iso_3166_1' => 'US', + 'iso_639_1' => 'en', + 'certification' => 'R', + 'note' => 'Released only to IMAX screens', + 'release_date' => '2013-09-06T00:00:00.000Z', + 'type' => 3 + ]; + + $hydrator = new ObjectHydrator(); + + /** + * @var ReleaseDate $object + */ + $object = $hydrator->hydrate(new ReleaseDate(), $data); + + $this->assertEquals('US', $object->getIso31661()); + $this->assertEquals('en', $object->getIso6391()); + $this->assertEquals('R', $object->getCertification()); + $this->assertEquals('Released only to IMAX screens', $object->getNote()); + $this->assertEquals(new \DateTime('2013-09-06'), $object->getReleaseDate()); + $this->assertEquals(3, $object->getType()); + } +} \ No newline at end of file diff --git a/test/Tmdb/Tests/Model/MovieTest.php b/test/Tmdb/Tests/Model/MovieTest.php index 1ea9131b..f01929cd 100644 --- a/test/Tmdb/Tests/Model/MovieTest.php +++ b/test/Tmdb/Tests/Model/MovieTest.php @@ -40,6 +40,7 @@ public function shouldConstructMovie() 'getKeywords' => 'Tmdb\Model\Common\GenericCollection', 'getLists' => 'Tmdb\Model\Common\GenericCollection', 'getReleases' => 'Tmdb\Model\Common\GenericCollection', + 'getReleaseDates' => 'Tmdb\Model\Common\GenericCollection', 'getSimilar' => 'Tmdb\Model\Common\GenericCollection', 'getTranslations' => 'Tmdb\Model\Common\GenericCollection', 'getVideos' => 'Tmdb\Model\Collection\Videos', diff --git a/test/Tmdb/Tests/Resources/movie/all.json b/test/Tmdb/Tests/Resources/movie/all.json index a1bd95c6..2e08be77 100644 --- a/test/Tmdb/Tests/Resources/movie/all.json +++ b/test/Tmdb/Tests/Resources/movie/all.json @@ -1300,6 +1300,562 @@ } ] }, + "release_dates": { + "results": [ + { + "iso_3166_1": "KR", + "release_dates": [ + { + "certification": "15세 이상 관람가", + "iso_639_1": "", + "note": "", + "release_date": "2013-11-28T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "JP", + "release_dates": [ + { + "certification": "", + "iso_639_1": "", + "note": "", + "release_date": "2014-03-08T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "MX", + "release_dates": [ + { + "certification": "", + "iso_639_1": "", + "note": "", + "release_date": "2013-10-25T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "TR", + "release_dates": [ + { + "certification": "", + "iso_639_1": "", + "note": "", + "release_date": "2013-10-04T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "SE", + "release_dates": [ + { + "certification": "15", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-20T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "IS", + "release_dates": [ + { + "certification": "", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-20T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "PT", + "release_dates": [ + { + "certification": "", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-19T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "PH", + "release_dates": [ + { + "certification": "", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-18T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "PK", + "release_dates": [ + { + "certification": "", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-13T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "SG", + "release_dates": [ + { + "certification": "", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-12T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "KH", + "release_dates": [ + { + "certification": "", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-12T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "IN", + "release_dates": [ + { + "certification": "", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-06T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "CL", + "release_dates": [ + { + "certification": "", + "iso_639_1": "", + "note": "", + "release_date": "2014-01-30T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "FI", + "release_dates": [ + { + "certification": "", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-06T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "HU", + "release_dates": [ + { + "certification": "", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-05T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "HR", + "release_dates": [ + { + "certification": "", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-05T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "EE", + "release_dates": [ + { + "certification": "", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-06T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "AR", + "release_dates": [ + { + "certification": "", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-12T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "IL", + "release_dates": [ + { + "certification": "", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-05T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "LT", + "release_dates": [ + { + "certification": "", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-06T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "ID", + "release_dates": [ + { + "certification": "", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-05T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "HK", + "release_dates": [ + { + "certification": "", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-05T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "GR", + "release_dates": [ + { + "certification": "15", + "iso_639_1": "", + "note": "", + "release_date": "2013-10-17T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "CA", + "release_dates": [ + { + "certification": "", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-06T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "ES", + "release_dates": [ + { + "certification": "16", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-02T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "NO", + "release_dates": [ + { + "certification": "", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-06T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "RU", + "release_dates": [ + { + "certification": "", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-12T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "SK", + "release_dates": [ + { + "certification": "15", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-05T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "BG", + "release_dates": [ + { + "certification": "D", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-06T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "IT", + "release_dates": [ + { + "certification": "", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-05T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "FR", + "release_dates": [ + { + "certification": "12", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-18T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "IE", + "release_dates": [ + { + "certification": "", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-04T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "GB", + "release_dates": [ + { + "certification": "15", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-03T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "BE", + "release_dates": [ + { + "certification": "", + "iso_639_1": "", + "note": "", + "release_date": "2013-11-20T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "KZ", + "release_dates": [ + { + "certification": "", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-11T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "DK", + "release_dates": [ + { + "certification": "15", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-05T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "AT", + "release_dates": [ + { + "certification": "", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-05T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "TW", + "release_dates": [ + { + "certification": "", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-06T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "PL", + "release_dates": [ + { + "certification": "", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-06T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "NL", + "release_dates": [ + { + "certification": "16", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-05T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "DE", + "release_dates": [ + { + "certification": "16", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-19T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "PE", + "release_dates": [ + { + "certification": "", + "iso_639_1": "", + "note": "", + "release_date": "2013-10-24T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "BR", + "release_dates": [ + { + "certification": "16 anos", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-06T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "AU", + "release_dates": [ + { + "certification": "MA15+", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-12T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "KW", + "release_dates": [ + { + "certification": "", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-05T00:00:00.000Z", + "type": 3 + } + ] + }, + { + "iso_3166_1": "US", + "release_dates": [ + { + "certification": "R", + "iso_639_1": "", + "note": "", + "release_date": "2013-09-06T00:00:00.000Z", + "type": 3 + } + ] + } + ] + }, "similar_movies":{ "page":1, "results":[ From a959a77593858ff7f13137bd3fc07c048820adba Mon Sep 17 00:00:00 2001 From: thinkingmedia Date: Fri, 17 Feb 2017 17:03:17 -0500 Subject: [PATCH 19/19] adds release date types as constants --- lib/Tmdb/Model/Movie/ReleaseDate.php | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/lib/Tmdb/Model/Movie/ReleaseDate.php b/lib/Tmdb/Model/Movie/ReleaseDate.php index 523899d7..7e9e9fdf 100644 --- a/lib/Tmdb/Model/Movie/ReleaseDate.php +++ b/lib/Tmdb/Model/Movie/ReleaseDate.php @@ -22,6 +22,13 @@ */ class ReleaseDate extends AbstractModel implements CountryFilter, LanguageFilter { + const PREMIERE = 1; + const THEATRICAL_LIMITED = 2; + const THEATRICAL = 3; + const DIGITAL = 4; + const PHYSICAL = 5; + const TV = 6; + private $iso31661; private $iso6391; private $certification;