We could not synchronize checks via GitHub's checks API since Scrutinizer's GitHub App is not installed for this repository.
1 | <?php |
||
2 | |||
3 | namespace Kitodo\Dlf\Domain\Model; |
||
4 | |||
5 | /** |
||
6 | * (c) Kitodo. Key to digital objects e.V. <[email protected]> |
||
7 | * |
||
8 | * This file is part of the Kitodo and TYPO3 projects. |
||
9 | * |
||
10 | * @license GNU General Public License version 3 or later. |
||
11 | * For the full copyright and license information, please read the |
||
12 | * LICENSE.txt file that was distributed with this source code. |
||
13 | */ |
||
14 | |||
15 | class Annotation |
||
16 | { |
||
17 | /** |
||
18 | * The complete data of the annotation |
||
19 | * |
||
20 | * @var array |
||
21 | */ |
||
22 | protected $data; |
||
23 | |||
24 | /** |
||
25 | * @var array |
||
26 | */ |
||
27 | protected $targetPages; |
||
28 | |||
29 | |||
30 | /** |
||
31 | * @param array $data |
||
32 | */ |
||
33 | public function __construct($data) |
||
34 | { |
||
35 | $this->data = $data; |
||
36 | } |
||
37 | |||
38 | /** |
||
39 | * Returns the full data of the annotation |
||
40 | * |
||
41 | * @return array |
||
42 | */ |
||
43 | public function getRawData() |
||
44 | { |
||
45 | return $this->data; |
||
46 | } |
||
47 | |||
48 | /** |
||
49 | * Gets the annotation id |
||
50 | * |
||
51 | * @return string |
||
52 | */ |
||
53 | public function getId() |
||
54 | { |
||
55 | return $this->data['id'] ?? ''; |
||
56 | } |
||
57 | |||
58 | /** |
||
59 | * Gets the annotation title |
||
60 | * |
||
61 | * @return string |
||
62 | */ |
||
63 | public function getTitle() |
||
64 | { |
||
65 | return $this->data['title'] ?? ''; |
||
66 | } |
||
67 | |||
68 | /** |
||
69 | * Gets the annotation body data |
||
70 | * |
||
71 | * @return array |
||
72 | */ |
||
73 | public function getBody() |
||
74 | { |
||
75 | $body = $this->data['body'] ?? ''; |
||
76 | |||
77 | if (is_array($body)) { |
||
78 | return $body; |
||
79 | } |
||
80 | |||
81 | return [$body]; |
||
82 | } |
||
83 | |||
84 | /** |
||
85 | * Gets the name of the annotation creator |
||
86 | * @return string |
||
87 | */ |
||
88 | public function getCreatorName() |
||
89 | { |
||
90 | return $this->data['creator']['displayName'] ?? ''; |
||
91 | } |
||
92 | |||
93 | /** |
||
94 | * Gets the creation date of the annotation |
||
95 | * @return string |
||
96 | */ |
||
97 | public function getCreated() |
||
98 | { |
||
99 | return $this->data['created'] ?? ''; |
||
100 | } |
||
101 | |||
102 | /** |
||
103 | * Gets the modification date of the annotation |
||
104 | * @return string |
||
105 | */ |
||
106 | public function getModified() |
||
107 | { |
||
108 | return $this->data['modified'] ?? ''; |
||
109 | } |
||
110 | |||
111 | /** |
||
112 | * Gets the targets |
||
113 | * |
||
114 | * @return AnnotationTarget[] |
||
115 | */ |
||
116 | public function getTargets() |
||
117 | { |
||
118 | if (is_string($this->data['target'])) { |
||
119 | return [new AnnotationTarget($this->data['target'])]; |
||
120 | } |
||
121 | |||
122 | $annotationTargets = []; |
||
123 | foreach ($this->data['target'] as $target) { |
||
124 | $annotationTargets[] = new AnnotationTarget($target); |
||
125 | } |
||
126 | |||
127 | return $annotationTargets; |
||
128 | } |
||
129 | |||
130 | /** |
||
131 | * Sets the target pages for which the annotation is relevant |
||
132 | * |
||
133 | * @param array $targetPages |
||
134 | * @return void |
||
135 | */ |
||
136 | public function setTargetPages($targetPages) |
||
137 | { |
||
138 | $this->targetPages = $targetPages; |
||
139 | } |
||
140 | |||
141 | /** |
||
142 | * Gets the target pages for which the annotation is relevant |
||
143 | * |
||
144 | * @return array |
||
145 | */ |
||
146 | public function getTargetPages() |
||
147 | { |
||
148 | return $this->targetPages; |
||
149 | } |
||
150 | |||
151 | /** |
||
152 | * Gets the page numbers for which the annotation is relevant |
||
153 | * |
||
154 | * @return array |
||
155 | */ |
||
156 | public function getPageNumbers() |
||
157 | { |
||
158 | $pages = []; |
||
159 | if (is_array($this->targetPages)) { |
||
0 ignored issues
–
show
introduced
by
![]() |
|||
160 | foreach ($this->targetPages as $target) { |
||
161 | $pages = array_merge($pages, $target['pages']); |
||
162 | } |
||
163 | } |
||
164 | |||
165 | return $pages; |
||
166 | } |
||
167 | |||
168 | /** |
||
169 | * Gets the annotation targets ordered by page numbers |
||
170 | * |
||
171 | * @return array |
||
172 | */ |
||
173 | public function getPageTargets() |
||
174 | { |
||
175 | $pageTargets = []; |
||
176 | if (is_array($this->targetPages)) { |
||
0 ignored issues
–
show
|
|||
177 | foreach ($this->targetPages as $target) { |
||
178 | foreach ($target['pages'] as $page) { |
||
179 | $pageTargets[$page][$target['target']->getUrl()] = $target['target']; |
||
180 | } |
||
181 | } |
||
182 | } |
||
183 | |||
184 | return $pageTargets; |
||
185 | } |
||
186 | |||
187 | /** |
||
188 | * Gets the audio ranges from the annotation targets ordered by page number |
||
189 | * |
||
190 | * @return array |
||
191 | */ |
||
192 | public function getPageAudioRanges() |
||
193 | { |
||
194 | $ranges = []; |
||
195 | if (is_array($this->getPageTargets())) { |
||
0 ignored issues
–
show
|
|||
196 | foreach ($this->getPageTargets() as $pageNumber => $targets) { |
||
197 | foreach ($targets as $target) { |
||
198 | if ($target->isValid() && $target->isAudioRange()) { |
||
199 | $ranges[$pageNumber][] = $target->getRangeValue(); |
||
200 | } |
||
201 | } |
||
202 | } |
||
203 | } |
||
204 | return $ranges; |
||
205 | } |
||
206 | |||
207 | /** |
||
208 | * Gets the score ranges from the annotation targets ordered by page number |
||
209 | * |
||
210 | * @return array |
||
211 | */ |
||
212 | public function getPageScoreRanges() |
||
213 | { |
||
214 | $ranges = []; |
||
215 | if (is_array($this->getPageTargets())) { |
||
0 ignored issues
–
show
|
|||
216 | foreach ($this->getPageTargets() as $pageNumber => $targets) { |
||
217 | foreach ($targets as $target) { |
||
218 | if ($target->isValid() && $target->isScoreRange()) { |
||
219 | $ranges[$pageNumber][] = $target->getRangeValue(); |
||
220 | } |
||
221 | } |
||
222 | } |
||
223 | } |
||
224 | return $ranges; |
||
225 | } |
||
226 | |||
227 | /** |
||
228 | * Gets the facsimile ranges from the annotation targets ordered by page number |
||
229 | * |
||
230 | * @return array |
||
231 | */ |
||
232 | public function getPageFacsimileRanges() |
||
233 | { |
||
234 | $ranges = []; |
||
235 | if (is_array($this->getPageTargets())) { |
||
0 ignored issues
–
show
|
|||
236 | foreach ($this->getPageTargets() as $pageNumber => $targets) { |
||
237 | foreach ($targets as $target) { |
||
238 | if ($target->isValid() && $target->isFacsimileRange()) { |
||
239 | $ranges[$pageNumber][] = $target->getRangeValue(); |
||
240 | } |
||
241 | } |
||
242 | } |
||
243 | } |
||
244 | |||
245 | return $ranges; |
||
246 | } |
||
247 | |||
248 | /** |
||
249 | * Returns if the annotation is relevant for verovio |
||
250 | * |
||
251 | * @return bool |
||
252 | */ |
||
253 | public function isVerovioRelevant() |
||
254 | { |
||
255 | foreach ($this->targetPages as $target) { |
||
256 | if (array_key_exists('verovioRelevant', $target) && $target['verovioRelevant']) { |
||
257 | return true; |
||
258 | } |
||
259 | } |
||
260 | |||
261 | return false; |
||
262 | } |
||
263 | } |
||
264 |