Passed
Pull Request — master (#123)
by
unknown
06:03 queued 21s
created

Annotation::getPageAudioRanges()   A

Complexity

Conditions 6
Paths 2

Size

Total Lines 13
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 6
eloc 7
c 1
b 0
f 0
nc 2
nop 0
dl 0
loc 13
rs 9.2222
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
The condition is_array($this->targetPages) is always true.
Loading history...
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
introduced by
The condition is_array($this->targetPages) is always true.
Loading history...
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
introduced by
The condition is_array($this->getPageTargets()) is always true.
Loading history...
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
introduced by
The condition is_array($this->getPageTargets()) is always true.
Loading history...
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
introduced by
The condition is_array($this->getPageTargets()) is always true.
Loading history...
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