Skip to content

Commit 5aae080

Browse files
thinkingmediawtfzdotnet
authored andcommitted
added RELEASE_DATES (#139)
* added RELEASE_DATES * fixed broken test * adds new ReleaseDate class and to Movie class * remove deprecated * Restrict phpunit <6, to maintain compatibility with php5.6 * added RELEASE_DATES * fixed broken test * adds new ReleaseDate class and to Movie class * remove deprecated * Make sure unit tests run for symfony 3.2 components * Mistake in the travis matrix * updates unit tests * added RELEASE_DATES * fixed broken test * adds new ReleaseDate class and to Movie class * remove deprecated * merged * updates unit tests * adds release date types as constants
1 parent 72a16fb commit 5aae080

File tree

11 files changed

+836
-5
lines changed

11 files changed

+836
-5
lines changed

lib/Tmdb/Factory/MovieFactory.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,18 @@ public function create(array $data = [])
164164
$movie->setReleases($this->createGenericCollection($data['releases']['countries'], new Movie\Release()));
165165
}
166166

167+
if (array_key_exists('release_dates', $data) && array_key_exists('results', $data['release_dates'])) {
168+
$release_dates = new GenericCollection();
169+
foreach ($data['release_dates']['results'] as $country_releases) {
170+
$iso_31661 = $country_releases['iso_3166_1'];
171+
foreach($country_releases['release_dates'] as $release_date) {
172+
$release_date['iso_3166_1'] = $iso_31661;
173+
$release_dates->add(null, $this->hydrate(new Movie\ReleaseDate(), $release_date));
174+
}
175+
}
176+
$movie->setReleaseDates($release_dates);
177+
}
178+
167179
if (array_key_exists('videos', $data)) {
168180
$movie->setVideos($this->getVideoFactory()->createCollection($data['videos']));
169181
}

lib/Tmdb/Model/Movie.php

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
use Tmdb\Model\Collection\ResultCollection;
1616
use Tmdb\Model\Collection\Videos;
17+
use Tmdb\Model\Common\Country;
1718
use Tmdb\Model\Common\GenericCollection;
1819
use Tmdb\Model\Collection\CreditsCollection;
1920
use Tmdb\Model\Collection\Genres;
@@ -22,6 +23,7 @@
2223
use Tmdb\Model\Common\Translation;
2324
use Tmdb\Model\Movie\AlternativeTitle;
2425
use Tmdb\Model\Movie\Release;
26+
use Tmdb\Model\Movie\ReleaseDate;
2527

2628
/**
2729
* Class Movie
@@ -195,9 +197,15 @@ class Movie extends AbstractModel
195197

196198
/**
197199
* @var GenericCollection
200+
* @deprecated Use $release_dates instead
198201
*/
199202
protected $releases;
200203

204+
/**
205+
* @var GenericCollection
206+
*/
207+
protected $release_dates;
208+
201209
/**
202210
* @var GenericCollection
203211
*/
@@ -266,6 +274,7 @@ public function __construct()
266274
$this->keywords = new GenericCollection();
267275
$this->lists = new GenericCollection();
268276
$this->releases = new GenericCollection();
277+
$this->release_dates = new GenericCollection();
269278
$this->similar = new GenericCollection();
270279
$this->translations = new GenericCollection();
271280
$this->videos = new Videos();
@@ -849,6 +858,7 @@ public function getLists()
849858
/**
850859
* @param GenericCollection $releases
851860
* @return $this
861+
* @deprecated Use the setReleaseDates instead.
852862
*/
853863
public function setReleases(GenericCollection $releases)
854864
{
@@ -859,12 +869,32 @@ public function setReleases(GenericCollection $releases)
859869

860870
/**
861871
* @return GenericCollection|Release[]
872+
* @deprecated Use the getReleaseDates instead
862873
*/
863874
public function getReleases()
864875
{
865876
return $this->releases;
866877
}
867878

879+
/**
880+
* @param GenericCollection $release_dates
881+
* @return $this
882+
*/
883+
public function setReleaseDates(GenericCollection $release_dates)
884+
{
885+
$this->release_dates = $release_dates;
886+
887+
return $this;
888+
}
889+
890+
/**
891+
* @return GenericCollection|ReleaseDate[]
892+
*/
893+
public function getReleaseDates()
894+
{
895+
return $this->release_dates;
896+
}
897+
868898
/**
869899
* @param GenericCollection $similar
870900
* @return $this
@@ -877,16 +907,16 @@ public function setSimilar($similar)
877907
}
878908

879909
/**
880-
* @return Movie[]
910+
* @return GenericCollection|Movie[]
881911
*/
882912
public function getSimilar()
883913
{
884914
return $this->similar;
885915
}
886916

887917
/**
888-
* @return Movie[]
889-
* @deprecated
918+
* @return GenericCollection|Movie[]
919+
* @deprecated Use getSimilar instead
890920
*/
891921
public function getSimilarMovies()
892922
{

lib/Tmdb/Model/Movie/QueryParameter/AppendToResponse.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,12 @@ final class AppendToResponse extends BaseAppendToResponse
2424
const CREDITS = 'credits';
2525
const IMAGES = 'images';
2626
const KEYWORDS = 'keywords';
27+
/**
28+
* @see https://developers.themoviedb.org/3/movies/get-movie-release-dates
29+
* @deprecated Use RELEASE_DATES instead, but format has changed.
30+
*/
2731
const RELEASES = 'releases';
32+
const RELEASE_DATES = 'release_dates';
2833
const TRANSLATIONS = 'translations';
2934
const SIMILAR = 'similar';
3035
const REVIEWS = 'reviews';

lib/Tmdb/Model/Movie/Release.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
/**
1919
* Class Release
2020
* @package Tmdb\Model\Movie
21+
* @deprecated Use ReleaseDate instead
2122
*/
2223
class Release extends AbstractModel implements CountryFilter
2324
{
Lines changed: 164 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,164 @@
1+
<?php
2+
/**
3+
* This file is part of the Tmdb PHP API created by Michael Roterman.
4+
*
5+
* For the full copyright and license information, please view the LICENSE
6+
* file that was distributed with this source code.
7+
*
8+
* @package Tmdb
9+
* @author Michael Roterman <[email protected]>
10+
* @copyright (c) 2013, Michael Roterman
11+
* @version 2.1.7
12+
*/
13+
namespace Tmdb\Model\Movie;
14+
15+
use Tmdb\Model\AbstractModel;
16+
use Tmdb\Model\Filter\CountryFilter;
17+
use Tmdb\Model\Filter\LanguageFilter;
18+
19+
/**
20+
* Class Release Date
21+
* @package Tmdb\Model\Movie
22+
*/
23+
class ReleaseDate extends AbstractModel implements CountryFilter, LanguageFilter
24+
{
25+
const PREMIERE = 1;
26+
const THEATRICAL_LIMITED = 2;
27+
const THEATRICAL = 3;
28+
const DIGITAL = 4;
29+
const PHYSICAL = 5;
30+
const TV = 6;
31+
32+
private $iso31661;
33+
private $iso6391;
34+
private $certification;
35+
private $note;
36+
private $releaseDate;
37+
private $type;
38+
39+
public static $properties = [
40+
'iso_3166_1',
41+
'iso_639_1',
42+
'certification',
43+
'note',
44+
'release_date',
45+
'type'
46+
];
47+
48+
/**
49+
* @param string|null $certification
50+
* @return $this
51+
*/
52+
public function setCertification($certification)
53+
{
54+
$this->certification = $certification;
55+
56+
return $this;
57+
}
58+
59+
/**
60+
* @return string|null
61+
*/
62+
public function getCertification()
63+
{
64+
return $this->certification;
65+
}
66+
67+
/**
68+
* @param string|null $note
69+
* @return $this
70+
*/
71+
public function setNote($note)
72+
{
73+
$this->note = $note;
74+
75+
return $this;
76+
}
77+
78+
/**
79+
* @return string|null
80+
*/
81+
public function getNote()
82+
{
83+
return $this->note;
84+
}
85+
86+
/**
87+
* @param string $iso31661
88+
* @return $this
89+
*/
90+
public function setIso31661($iso31661)
91+
{
92+
$this->iso31661 = $iso31661;
93+
94+
return $this;
95+
}
96+
97+
/**
98+
* @return string
99+
*/
100+
public function getIso31661()
101+
{
102+
return $this->iso31661;
103+
}
104+
105+
/**
106+
* @param string|\DateTime $releaseDate
107+
* @return $this
108+
*/
109+
public function setReleaseDate($releaseDate)
110+
{
111+
if (!$releaseDate instanceof \DateTime) {
112+
$releaseDate = new \DateTime($releaseDate);
113+
}
114+
115+
$this->releaseDate = $releaseDate;
116+
117+
return $this;
118+
}
119+
120+
/**
121+
* @return \DateTime
122+
*/
123+
public function getReleaseDate()
124+
{
125+
return $this->releaseDate;
126+
}
127+
128+
/**
129+
* @param string $iso6391
130+
* @return $this
131+
*/
132+
public function setIso6391($iso6391)
133+
{
134+
$this->iso6391 = $iso6391;
135+
return $this;
136+
}
137+
138+
/**
139+
* @return string|null
140+
*/
141+
public function getIso6391()
142+
{
143+
return $this->iso6391;
144+
}
145+
146+
/**
147+
* @param int $type
148+
* @return $this
149+
*/
150+
public function setType($type)
151+
{
152+
$this->type = $type;
153+
154+
return $this;
155+
}
156+
157+
/**
158+
* @return int
159+
*/
160+
public function getType()
161+
{
162+
return $this->type;
163+
}
164+
}

lib/Tmdb/Repository/MovieRepository.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ public function load($id, array $parameters = [], array $headers = [])
6666
AppendToResponse::IMAGES,
6767
AppendToResponse::KEYWORDS,
6868
AppendToResponse::LISTS,
69-
AppendToResponse::RELEASES,
69+
AppendToResponse::RELEASE_DATES,
7070
AppendToResponse::REVIEWS,
7171
AppendToResponse::SIMILAR,
7272
AppendToResponse::TRANSLATIONS,

test/Tmdb/Tests/Factory/MovieFactoryTest.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414

1515
use Tmdb\Factory\MovieFactory;
1616
use Tmdb\Model\Movie;
17+
use Tmdb\Model\Movie\Release;
18+
use Tmdb\Model\Movie\ReleaseDate;
1719
use Tmdb\Model\Person\CastMember;
1820

1921
class MovieFactoryTest extends TestCase
@@ -103,12 +105,23 @@ public function shouldBeFunctional()
103105
$this->assertInstanceOf('Tmdb\Model\Common\GenericCollection', $this->movie->getKeywords());
104106
$this->assertInstanceOf('Tmdb\Model\Common\GenericCollection', $this->movie->getLists());
105107
$this->assertInstanceOf('Tmdb\Model\Common\GenericCollection', $this->movie->getReleases());
108+
$this->assertInstanceOf('Tmdb\Model\Common\GenericCollection', $this->movie->getReleaseDates());
106109
$this->assertInstanceOf('Tmdb\Model\Common\GenericCollection', $this->movie->getSimilar());
107110
$this->assertInstanceOf('Tmdb\Model\Collection\Videos', $this->movie->getVideos());
108111

112+
/** @var Release[] $releases */
109113
$releases = $this->movie->getReleases()->getAll();
110114
$primaryRelease = array_shift($releases);
111115
$this->assertEquals(true, $primaryRelease->getPrimary());
116+
117+
/** @var ReleaseDate[] $release_dates */
118+
$release_dates = $this->movie->getReleaseDates()->getAll();
119+
$this->assertEquals(46, count($release_dates));
120+
foreach($release_dates as $release_date) {
121+
$this->assertNotEmpty($release_date->getIso31661());
122+
$this->assertInstanceOf(\DateTime::class, $release_date->getReleaseDate());
123+
$this->assertTrue(is_int($release_date->getType()));
124+
}
112125
}
113126

114127
/**
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
<?php
2+
/**
3+
* This file is part of the Tmdb PHP API created by Michael Roterman.
4+
*
5+
* For the full copyright and license information, please view the LICENSE
6+
* file that was distributed with this source code.
7+
*
8+
* @package Tmdb
9+
* @author Michael Roterman <[email protected]>
10+
* @copyright (c) 2013, Michael Roterman
11+
* @version 2.1.7
12+
*/
13+
namespace Tmdb\Tests\Model\Movie;
14+
15+
use Tmdb\Common\ObjectHydrator;
16+
use Tmdb\Model\Movie\ReleaseDate;
17+
use Tmdb\Tests\Model\TestCase;
18+
19+
class ReleaseDateTest extends TestCase
20+
{
21+
/**
22+
* @test
23+
*/
24+
public function shouldBeFunctional()
25+
{
26+
$data = [
27+
'iso_3166_1' => 'US',
28+
'iso_639_1' => 'en',
29+
'certification' => 'R',
30+
'note' => 'Released only to IMAX screens',
31+
'release_date' => '2013-09-06T00:00:00.000Z',
32+
'type' => 3
33+
];
34+
35+
$hydrator = new ObjectHydrator();
36+
37+
/**
38+
* @var ReleaseDate $object
39+
*/
40+
$object = $hydrator->hydrate(new ReleaseDate(), $data);
41+
42+
$this->assertEquals('US', $object->getIso31661());
43+
$this->assertEquals('en', $object->getIso6391());
44+
$this->assertEquals('R', $object->getCertification());
45+
$this->assertEquals('Released only to IMAX screens', $object->getNote());
46+
$this->assertEquals(new \DateTime('2013-09-06'), $object->getReleaseDate());
47+
$this->assertEquals(3, $object->getType());
48+
}
49+
}

0 commit comments

Comments
 (0)