|
1
|
|
|
<?php |
|
2
|
|
|
|
|
3
|
|
|
namespace Chadicus\Marvel\Api\Entities; |
|
4
|
|
|
|
|
5
|
|
|
use Chadicus\Marvel\Api; |
|
6
|
|
|
use DominionEnterprises\Util; |
|
7
|
|
|
|
|
8
|
|
|
/** |
|
9
|
|
|
* Represents a Marvel API Comic Entity |
|
10
|
|
|
* |
|
11
|
|
|
* @property-read integer $id The unique ID of the comic resource. |
|
12
|
|
|
* @property-read integer $digitalId The ID of the digital comic representation of this comic. Will be if the comic is |
|
13
|
|
|
* not available digitally. |
|
14
|
|
|
* @property-read string $title The canonical title of the comic. |
|
15
|
|
|
* @property-read string $issueNumber The number of the issue in the series (will generally be for collection formats). |
|
16
|
|
|
* @property-read string $variantDescription If the issue is a variant (e.g. an alternate cover, second printing, or |
|
17
|
|
|
* director's cut), a text description of the variant. |
|
18
|
|
|
* @property-read string $description The preferred description of the comic. |
|
19
|
|
|
* @property-read DateTime $modified The date the resource was most recently modified. |
|
20
|
|
|
* @property-read string $isbn The ISBN for the comic (generally only populated for collection formats). |
|
21
|
|
|
* @property-read string $upc The UPC barcode number for the comic (generally only populated for periodical formats). |
|
22
|
|
|
* @property-read string $diamondCode The Diamond code for the comic. |
|
23
|
|
|
* @property-read string $ean The EAN barcode for the comic. |
|
24
|
|
|
* @property-read string $issn The ISSN barcode for the comic. |
|
25
|
|
|
* @property-read string $format The publication format of the comic e.g. comic, hardcover, trade paperback. |
|
26
|
|
|
* @property-read integer $pageCount The number of story pages in the comic. |
|
27
|
|
|
* @property-read TextObject[] $textObjects A set of descriptive text blurbs for the comic. |
|
28
|
|
|
* @property-read string $resourceURI The canonical URL identifier for this resource. |
|
29
|
|
|
* @property-read Url[] $urls A set of public web site URLs for the resource. |
|
30
|
|
|
* @property-read Summary $series A summary representation of the series to which this comic belongs. |
|
31
|
|
|
* @property-read Summary[] $variants A list of variant issues for this comic (includes the "original" issue if the |
|
32
|
|
|
* current issue is a variant). |
|
33
|
|
|
* @property-read Summary[] $collections A list of collections which include this comic (will generally be empty if the |
|
34
|
|
|
* comic's format is a collection). |
|
35
|
|
|
* @property-read Summary[] $collectedIssues A list of issues collected in this comic (will generally be empty for |
|
36
|
|
|
* periodical formats such as "comic" or "magazine"). |
|
37
|
|
|
* @property-read Date[] $dates A list of key dates for this comic. |
|
38
|
|
|
* @property-read Price[] $prices A list of prices for this comic. |
|
39
|
|
|
* @property-read Image $thumbnail The representative image for this comic. |
|
40
|
|
|
* @property-read Image[] $images A list of promotional images associated with this comic. |
|
41
|
|
|
* @property-read ResourceList $creators A resource list containing the creators associated with this comic. |
|
42
|
|
|
* @property-read ResourceList $characters A resource list containing the characters which appear in this comic. |
|
43
|
|
|
* @property-read ResourceList $stories A resource list containing the stories which appear in this comic. |
|
44
|
|
|
* @property-read ResourceList $events A resource list containing the events in which this comic appears. |
|
45
|
|
|
*/ |
|
46
|
|
|
class Comic extends AbstractEntity |
|
47
|
|
|
{ |
|
48
|
|
|
/** |
|
49
|
|
|
* The name of the comic API resource |
|
50
|
|
|
* |
|
51
|
|
|
* @const string |
|
52
|
|
|
*/ |
|
53
|
|
|
const API_RESOURCE = 'comics'; |
|
54
|
|
|
|
|
55
|
|
|
/** |
|
56
|
|
|
* @see AbstractEntity::getFilters() |
|
57
|
|
|
* |
|
58
|
|
|
* @return array |
|
59
|
|
|
*/ |
|
60
|
|
|
final protected function getFilters() : array |
|
61
|
|
|
{ |
|
62
|
|
|
return [ |
|
63
|
|
|
'id' => [['int', true]], |
|
64
|
|
|
'digitalId' => [['int', true]], |
|
65
|
|
|
'title' => [['string', true, 0]], |
|
66
|
|
|
'issueNumber' => [['strval'], ['string', true, 0]], |
|
67
|
|
|
'variantDescription' => [['string', true, 0]], |
|
68
|
|
|
'description' => [['string', true, 0]], |
|
69
|
|
|
'modified' => [['date', true]], |
|
70
|
|
|
'isbn' => [['string', true, 0]], |
|
71
|
|
|
'upc' => [['string', true, 0]], |
|
72
|
|
|
'diamondCode' => [['string', true, 0]], |
|
73
|
|
|
'ean' => [['string', true, 0]], |
|
74
|
|
|
'issn' => [['string', true, 0]], |
|
75
|
|
|
'format' => [['string', true, 0]], |
|
76
|
|
|
'pageCount' => [['int', true]], |
|
77
|
|
|
'textObjects' => ['default' => [], ['text-objects']], |
|
78
|
|
|
'resourceURI' => [['string', true, 0]], |
|
79
|
|
|
'urls' => ['default' => [], ['_urls']], |
|
80
|
|
|
'series' => ['default' => new Summary(), ['summary']], |
|
81
|
|
|
'variants' => ['default' => [], ['summaries']], |
|
82
|
|
|
'collections' => ['default' => [], ['summaries']], |
|
83
|
|
|
'collectedIssues' => ['default' => [], ['summaries']], |
|
84
|
|
|
'dates' => ['default' => [], ['_dates']], |
|
85
|
|
|
'prices' => ['default' => [], ['prices']], |
|
86
|
|
|
'thumbnail' => ['default' => new Image(), ['image']], |
|
87
|
|
|
'images' => ['default' => [], ['images']], |
|
88
|
|
|
'creators' => ['default' => new ResourceList(), ['resource-list']], |
|
89
|
|
|
'characters' => ['default' => new ResourceList(), ['resource-list']], |
|
90
|
|
|
'stories' => ['default' => new ResourceList(), ['resource-list']], |
|
91
|
|
|
'events' => ['default' => new ResourceList(), ['resource-list']], |
|
92
|
|
|
]; |
|
93
|
|
|
} |
|
94
|
|
|
|
|
95
|
|
|
/** |
|
96
|
|
|
* Returns a collection containing all Comics which match the given criteria. |
|
97
|
|
|
* |
|
98
|
|
|
* @param Api\Client $client The API Client. |
|
99
|
|
|
* @param array $criteria The criteria for searching. |
|
100
|
|
|
* |
|
101
|
|
|
* @return Api\Collection |
|
102
|
|
|
*/ |
|
103
|
|
|
final public static function findAll(Api\Client $client, array $criteria = []) : Api\Collection |
|
104
|
|
|
{ |
|
105
|
|
|
$filters = [ |
|
106
|
|
|
'format' => [ |
|
107
|
|
|
[ |
|
108
|
|
|
'in', |
|
109
|
|
|
[ |
|
110
|
|
|
'comic', 'hardcover', 'trade paperback', 'magazine', 'digest', |
|
111
|
|
|
'graphic novel', 'digital comic', 'infinite comic', |
|
112
|
|
|
] |
|
113
|
|
|
], |
|
114
|
|
|
], |
|
115
|
|
|
'formatType' => [['in', ['comic', 'collection']]], |
|
116
|
|
|
'noVariants' => [['bool'], ['bool-convert']], |
|
117
|
|
|
'dateDescriptor' => [['in', ['lastWeek', 'thisWeek', 'nextWeek', 'thisMonth']]], |
|
118
|
|
|
'fromDate' => [['date', true]], |
|
119
|
|
|
'toDate' => [['date', true]], |
|
120
|
|
|
'hasDigitalIssue' => [['bool'], ['bool-convert']], |
|
121
|
|
|
'modifiedSince' => [['date', true], ['date-format', 'c']], |
|
122
|
|
|
'creators' => [['ofScalars', [['uint']]], ['implode', ',']], |
|
123
|
|
|
'characters' => [['ofScalars', [['uint']]], ['implode', ',']], |
|
124
|
|
|
'series' => [['ofScalars', [['uint']]], ['implode', ',']], |
|
125
|
|
|
'events' => [['ofScalars', [['uint']]], ['implode', ',']], |
|
126
|
|
|
'stories' => [['ofScalars', [['uint']]], ['implode', ',']], |
|
127
|
|
|
'sharedAppearances' => [['ofScalars', [['uint']]], ['implode', ',']], |
|
128
|
|
|
'collaborators' => [['ofScalars', [['uint']]], ['implode', ',']], |
|
129
|
|
|
'orderBy' => [ |
|
130
|
|
|
[ |
|
131
|
|
|
'in', |
|
132
|
|
|
[ |
|
133
|
|
|
'focDate', 'onsaleDate', 'title', 'issueNumber', 'modified', |
|
134
|
|
|
'-focDate', '-onsaleDate', '-title', '-issueNumber', '-modified', |
|
135
|
|
|
], |
|
136
|
|
|
] |
|
137
|
|
|
], |
|
138
|
|
|
|
|
139
|
|
|
]; |
|
140
|
|
|
|
|
141
|
|
|
list($success, $filteredCriteria, $error) = Api\Filterer::filter($filters, $criteria); |
|
142
|
|
|
Util::ensure(true, $success, $error); |
|
143
|
|
|
$toDate = Util\Arrays::get($filteredCriteria, 'toDate'); |
|
144
|
|
|
$fromDate = Util\Arrays::get($filteredCriteria, 'fromDate'); |
|
145
|
|
|
if ($toDate !== null && $fromDate !== null) { |
|
146
|
|
|
unset($filteredCriteria['toDate'], $filteredCriteria['fromDate']); |
|
147
|
|
|
$filteredCriteria['dateRange'] = "{$fromDate->format('c')},{$toDate->format('c')}"; |
|
148
|
|
|
} |
|
149
|
|
|
|
|
150
|
|
|
return new Api\Collection($client, self::API_RESOURCE, $filteredCriteria); |
|
151
|
|
|
} |
|
152
|
|
|
} |
|
153
|
|
|
|