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