Completed
Pull Request — master (#350)
by
unknown
08:00 queued 01:24
created

BookingInfo::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 19
Code Lines 17

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 19
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 17
nc 1
nop 8

How to fix   Many Parameters   

Many Parameters

Methods with many parameters are not only hard to understand, but their parameters also often become inconsistent when you need more, or different data.

There are several approaches to avoid long parameter lists:

1
<?php
2
3
/**
4
 * @file
5
 * Contains CultuurNet\UDB3\BookingInfo.
6
 */
7
8
namespace CultuurNet\UDB3;
9
use CultuurNet\UDB3\Model\ValueObject\Contact\BookingInfo as Udb3ModelBookingInfo;
10
11
/**
12
 * BookingInfo info.
13
 */
14
class BookingInfo implements JsonLdSerializableInterface
15
{
16
17
    /**
18
     * @var string
19
     */
20
    protected $price = '';
21
22
    /**
23
     * @var string
24
     */
25
    protected $currency = 'EUR';
26
27
    /**
28
     * @var string
29
     */
30
    protected $phone = '';
31
32
    /**
33
     * @var string
34
     */
35
    protected $email = '';
36
37
    /**
38
     * @var string
39
     */
40
    protected $url = '';
41
42
    /**
43
     * @var string
44
     */
45
    protected $urlLabel = '';
46
47
    /**
48
     * @var string
49
     */
50
    protected $availabilityStarts = '';
51
52
    /**
53
     * @var string
54
     */
55
    protected $availabilityEnds = '';
56
57
    /**
58
     * @var string
59
     */
60
    protected $name = '';
61
62
    /**
63
     * @var string
64
     */
65
    protected $description = '';
66
67
    /**
68
     * @param string $url
69
     * @param string $urlLabel
70
     * @param string $phone
71
     * @param string $email
72
     * @param string $availabilityStarts
73
     * @param string $availabilityEnds
74
     * @param string $name
75
     * @param string $description
76
     */
77
    public function __construct(
78
        $url = '',
79
        $urlLabel = '',
80
        $phone = '',
81
        $email = '',
82
        $availabilityStarts = '',
83
        $availabilityEnds = '',
84
        $name = '',
85
        $description = ''
86
    ) {
87
        $this->url = $url;
88
        $this->urlLabel = $urlLabel;
89
        $this->phone = $phone;
90
        $this->email = $email;
91
        $this->availabilityStarts = $availabilityStarts;
92
        $this->availabilityEnds = $availabilityEnds;
93
        $this->name = $name;
94
        $this->description = $description;
95
    }
96
97
    public function getPhone()
98
    {
99
        return $this->phone;
100
    }
101
102
    public function getEmail()
103
    {
104
        return $this->email;
105
    }
106
107
    public function getUrl()
108
    {
109
        return $this->url;
110
    }
111
112
    public function getUrlLabel()
113
    {
114
        return $this->urlLabel;
115
    }
116
117
    public function getName()
118
    {
119
        return $this->name;
120
    }
121
122
    public function getDescription()
123
    {
124
        return $this->description;
125
    }
126
127
    public function getAvailabilityStarts()
128
    {
129
        return $this->availabilityStarts;
130
    }
131
132
    public function getAvailabilityEnds()
133
    {
134
        return $this->availabilityEnds;
135
    }
136
137
    /**
138
     * {@inheritdoc}
139
     */
140
    public function serialize()
141
    {
142
        return [
143
          'phone' => $this->phone,
144
          'email' => $this->email,
145
          'url' => $this->url,
146
          'urlLabel' => $this->urlLabel,
147
          'name' => $this->name,
148
          'description' => $this->description,
149
          'availabilityStarts' => $this->availabilityStarts,
150
          'availabilityEnds' => $this->availabilityEnds,
151
        ];
152
    }
153
154
    /**
155
     * {@inheritdoc}
156
     */
157
    public static function deserialize(array $data)
158
    {
159
        return new static(
160
            $data['url'], $data['urlLabel'], $data['phone'], $data['email'],
161
            $data['availabilityStarts'], $data['availabilityEnds'], $data['name'], $data['description']
162
        );
163
    }
164
165
    /**
166
     * {@inheritdoc}
167
     */
168
    public function toJsonLd()
169
    {
170
        return $this->serialize();
171
    }
172
173
    /**
174
     * @param BookingInfo $otherBookingInfo
175
     * @return bool
176
     */
177
    public function sameAs(BookingInfo $otherBookingInfo)
178
    {
179
        return $this->toJsonLd() === $otherBookingInfo->toJsonLd();
180
    }
181
182
    /**
183
     * @param Udb3ModelBookingInfo $udb3ModelBookingInfo
184
     * @return BookingInfo
185
     */
186
    public static function fromUdb3ModelBookingInfo(Udb3ModelBookingInfo $udb3ModelBookingInfo)
187
    {
188
        $url = '';
189
        $urlLabel = '';
190
        $phone = '';
191
        $email = '';
192
        $availabilityStarts = '';
193
        $availabilityEnds = '';
194
195
        if ($udb3ModelWebsite = $udb3ModelBookingInfo->getWebsite()) {
196
            $url = $udb3ModelWebsite->getUrl()->toString();
197
            $urlLabel = $udb3ModelWebsite->getLabel()->getTranslation(
198
                $udb3ModelWebsite->getLabel()->getOriginalLanguage()
199
            )->toString();
200
        }
201
202
        if ($udb3ModelPhone = $udb3ModelBookingInfo->getTelephoneNumber()) {
203
            $phone = $udb3ModelPhone->toString();
204
        }
205
206
        if ($udb3ModelEmail = $udb3ModelBookingInfo->getEmailAddress()) {
207
            $email = $udb3ModelEmail->toString();
208
        }
209
210
        if ($udb3ModelAvailability = $udb3ModelBookingInfo->getAvailability()) {
211
            $availabilityStarts = $udb3ModelAvailability->getFrom()->format(\DATE_ATOM);
212
            $availabilityEnds = $udb3ModelAvailability->getTo()->format(\DATE_ATOM);
213
        }
214
215
        return new BookingInfo(
216
            $url,
217
            $urlLabel,
218
            $phone,
219
            $email,
220
            $availabilityStarts,
221
            $availabilityEnds
222
        );
223
    }
224
}
225