Completed
Pull Request — develop (#80)
by
unknown
03:39 queued 01:55
created

CollectionDto::getFilterOption()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 7
rs 10
c 0
b 0
f 0
cc 2
nc 2
nop 1
1
<?php
2
3
/**
4
 * Copyright 2014 SURFnet bv
5
 *
6
 * Licensed under the Apache License, Version 2.0 (the "License");
7
 * you may not use this file except in compliance with the License.
8
 * You may obtain a copy of the License at
9
 *
10
 *     http://www.apache.org/licenses/LICENSE-2.0
11
 *
12
 * Unless required by applicable law or agreed to in writing, software
13
 * distributed under the License is distributed on an "AS IS" BASIS,
14
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
 * See the License for the specific language governing permissions and
16
 * limitations under the License.
17
 */
18
19
namespace Surfnet\StepupMiddlewareClientBundle\Dto;
20
21
use LogicException;
22
use Symfony\Component\Validator\Constraints as Assert;
23
24
abstract class CollectionDto implements Dto
25
{
26
    /**
27
     * @Assert\Valid
28
     *
29
     * @var array
30
     */
31
    protected $elements;
32
33
    /**
34
     * @var int
35
     */
36
    protected $totalItems;
37
38
    /**
39
     * @var int
40
     */
41
    protected $currentPage;
42
43
    /**
44
     * @var int
45
     */
46
    protected $itemsPerPage;
47
48
    /**
49
     * @param array $elements
50
     * @param int   $totalItems
51
     * @param int   $currentPage
52
     * @param int   $itemsPerPage
53
     * @param array $filterOptions
54
     */
55
    public function __construct(array $elements, $totalItems, $currentPage, $itemsPerPage, $filterOptions = array())
56
    {
57
        $this->elements = $elements;
58
        $this->totalItems = (int) $totalItems;
59
        $this->currentPage = (int) $currentPage;
60
        $this->itemsPerPage = (int) $itemsPerPage;
61
        $this->filterOptions = $filterOptions;
0 ignored issues
show
Bug introduced by
The property filterOptions does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
62
    }
63
64
    /**
65
     * @param  array  $data
66
     * @return static
67
     */
68
    public static function fromData(array $data)
69
    {
70
        $elements = [];
71
        foreach ($data['items'] as $key => $item) {
72
            $elements[$key] = static::createElementFromData($item);
73
        }
74
75
        $filters = [];
76
        if (array_key_exists('filters', $data)) {
77
            $filters = $data['filters'];
78
        }
79
80
        return new static(
81
            $elements,
82
            $data['collection']['total_items'],
83
            $data['collection']['page'],
84
            $data['collection']['page_size'],
85
            $filters
86
        );
87
    }
88
89
    /**
90
     * Load the element in the collection based on the data given
91
     *
92
     * @param  array $item
93
     * @return mixed
94
     */
95
    protected static function createElementFromData(array $item)
96
    {
97
        throw new LogicException(sprintf(
98
            'The method "%s::createElementFromData must be implemented to load the Collection Element"'
99
        ));
100
    }
101
102
    /**
103
     * @return int
104
     */
105
    public function getCurrentPage()
106
    {
107
        return $this->currentPage;
108
    }
109
110
    /**
111
     * @return array
112
     */
113
    public function getElements()
114
    {
115
        return $this->elements;
116
    }
117
118
    /**
119
     * @return array|null
120
     */
121
    public function getFilterOption($key)
122
    {
123
        if (!array_key_exists($key, $this->filterOptions)) {
124
            return null;
125
        }
126
        return $this->filterOptions[$key];
127
    }
128
129
    /**
130
     * @return mixed|null
131
     * @throws LogicException When there is more than 1 element present.
132
     */
133
    public function getOnlyElement()
134
    {
135
        $elementCount = count($this->elements);
136
137
        if ($elementCount === 1) {
138
            return reset($this->elements);
139
        } elseif ($elementCount === 0) {
140
            return null;
141
        }
142
143
        throw new LogicException(sprintf('There are %d elements in this collection instead of one.', $elementCount));
144
    }
145
146
    /**
147
     * @return int
148
     */
149
    public function getItemsPerPage()
150
    {
151
        return $this->itemsPerPage;
152
    }
153
154
    /**
155
     * @return int
156
     */
157
    public function getTotalItems()
158
    {
159
        return $this->totalItems;
160
    }
161
}
162