Completed
Push — master ( 86b52b...6bbcb5 )
by Eymen
17s
created

Pass::addLocation()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 6
c 0
b 0
f 0
rs 9.4285
cc 1
eloc 3
nc 1
nop 1
1
<?php
2
3
/*
4
 * This file is part of the Passbook package.
5
 *
6
 * (c) Eymen Gunay <[email protected]>
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
namespace Passbook;
13
14
use DateTime;
15
use Passbook\Pass\BarcodeInterface;
16
use Passbook\Pass\BeaconInterface;
17
use Passbook\Pass\ImageInterface;
18
use Passbook\Pass\LocalizationInterface;
19
use Passbook\Pass\LocationInterface;
20
use Passbook\Pass\Structure;
21
use Passbook\Pass\StructureInterface;
22
23
/**
24
 * Pass
25
 *
26
 * @author Eymen Gunay <[email protected]>
27
 * @author Sotaro Omura <http://omoon.org>
28
 * @author Dzamir <https://github.com/Dzamir>
29
 */
30
class Pass implements PassInterface
31
{
32
    /**
33
     * Serial number that uniquely identifies the pass.
34
     * No two passes with the same pass type identifier
35
     * may have the same serial number.
36
     *
37
     * @var string
38
     */
39
    protected $serialNumber;
40
41
    /**
42
     * Brief description of the pass,
43
     * used by the iOS accessibility technologies.
44
     *
45
     * @var string
46
     */
47
    protected $description;
48
49
    /**
50
     * Version of the file format.
51
     * The value must be 1.
52
     *
53
     * @var int
54
     */
55
    protected $formatVersion = 1;
56
57
    /**
58
     * Pass type
59
     *
60
     * @var string
61
     */
62
    protected $type;
63
64
    /**
65
     * Pass structure
66
     *
67
     * @var Structure
68
     */
69
    protected $structure;
70
71
    /**
72
     * Pass images
73
     *
74
     * @var ImageInterface[]
75
     */
76
    protected $images = array();
77
78
    /**
79
     * Beacons where the pass is relevant.
80
     *
81
     * @var array
82
     */
83
    protected $beacons = array();
84
85
    /**
86
     * A list of iTunes Store item identifiers (also known as Adam IDs) for the
87
     * associated apps.
88
     *
89
     * Only one item in the list is used—the first item identifier for an app
90
     * compatible with the current device. If the app is not installed, the
91
     * link opens the App Store and shows the app. If the app is already
92
     * installed, the link launches the app.
93
     *
94
     * @var int[]
95
     */
96
    protected $associatedStoreIdentifiers = array();
97
98
    /**
99
     * Locations where the pass is relevant.
100
     * For example, the location of your store.
101
     *
102
     * @var array
103
     */
104
    protected $locations = array();
105
106
    /**
107
     * List of localizations
108
     *
109
     * @var LocalizationInterface[]
110
     */
111
    protected $localizations = array();
112
113
    /**
114
     * Date and time when the pass becomes relevant.
115
     * For example, the start time of a movie.
116
     *
117
     * @var DateTime
118
     */
119
    protected $relevantDate;
120
121
    /**
122
     * Maximum distance in meters from a relevant latitude and longitude that
123
     * the pass is relevant. This number is compared to the pass’s default
124
     * distance and the smaller value is used.
125
     * Available in iOS 7.0.
126
     * @var int
127
     */
128
    protected $maxDistance;
129
130
    /**
131
     * Barcodes available to be displayed of iOS 9 and later. The system uses
132
     * the first valid barcode in the array.
133
     * @var BarcodeInterface[]
134
     */
135
    protected $barcodes = array();
136
137
    /**
138
     * Barcode to be displayed for iOS 8 and earlier.
139
     * @var BarcodeInterface
140
     */
141
    protected $barcode;
142
143
    /**
144
     * Background color of the pass, specified as an CSS-style RGB triple.
145
     *
146
     * @var string rgb(23, 187, 82)
147
     */
148
    protected $backgroundColor;
149
150
    /**
151
     * Foreground color of the pass, specified as a CSS-style RGB triple.
152
     *
153
     * @var string rgb(100, 10, 110)
154
     */
155
    protected $foregroundColor;
156
157
    /**
158
     * Identifier used to group related passes. 
159
     * If a grouping identifier is specified, passes with the same style, pass type identifier, 
160
     * and grouping identifier are displayed as a group. Otherwise, passes are grouped automatically.
161
     *
162
     * @var string
163
     */
164
    protected $groupingIdentifier;
165
166
    /**
167
     * Color of the label text, specified as a CSS-style RGB triple.
168
     *
169
     * @var string rgb(255, 255, 255)
170
     */
171
    protected $labelColor;
172
173
    /**
174
     * Text displayed next to the logo on the pass.
175
     *
176
     * @var string
177
     */
178
    protected $logoText;
179
180
    /**
181
     * If true, the strip image is displayed without a shine effect.
182
     *
183
     * @var string The default value is false
184
     */
185
    protected $suppressStripShine;
186
187
    /**
188
     * The authentication token to use with the web service.
189
     * The token must be 16 characters or longer.
190
     *
191
     * @var string
192
     */
193
    protected $authenticationToken;
194
195
    /**
196
     * The URL of a web service that conforms to the API described in Passbook Web Service Reference.
197
     * http://developer.apple.com/library/ios/documentation/PassKit/Reference/PassKit_WebService/WebService.html#//apple_ref/doc/uid/TP40011988
198
     *
199
     * @var string
200
     */
201
    protected $webServiceURL;
202
203
    /**
204
     * Pass type identifier
205
     *
206
     * @var string
207
     */
208
    protected $passTypeIdentifier;
209
210
    /**
211
     * Team identifier
212
     *
213
     * @var string
214
     */
215
    protected $teamIdentifier;
216
217
    /**
218
     * Organization name
219
     *
220
     * @var string
221
     */
222
    protected $organizationName;
223
224
    /**
225
     * Date and time when the pass expires.
226
     *
227
     * @var DateTime
228
     */
229
    protected $expirationDate;
230
231
    /**
232
     * Indicates that the pass is void—for example, a one time use coupon that has been redeemed. The default value is
233
     * false.
234
     *
235
     * @var boolean
236
     */
237
    protected $voided;
238
239
    /**
240
     *
241
     * A URL to be passed to the associated app when launching it.
242
     * The app receives this URL in the application:didFinishLaunchingWithOptions: and application:handleOpenURL:
243
     * methods of its app delegate. If this key is present, the associatedStoreIdentifiers key must also be present.
244
     *
245
     * @var string
246
     */
247
    protected $appLaunchURL;
248
249
	/**
250
	 * Pass userInfo
251
	 *
252
	 * @var mixed
253
	 */
254
	protected $userInfo;
255
256
    public function __construct($serialNumber, $description)
257
    {
258
        // Required
259
        $this->setSerialNumber($serialNumber);
260
        $this->setDescription($description);
261
    }
262
263
    public function toArray()
264
    {
265
        $array = array();
266
267
        // Structure
268
        if ($this->getStructure()) {
269
            $array[$this->getType()] = $this->getStructure()->toArray();
270
        }
271
272
        $properties = array(
273
            'serialNumber',
274
            'description',
275
            'formatVersion',
276
            'beacons',
277
            'locations',
278
            'maxDistance',
279
            'relevantDate',
280
            'barcode',
281
            'barcodes',
282
            'backgroundColor',
283
            'foregroundColor',
284
            'groupingIdentifier',
285
            'labelColor',
286
            'logoText',
287
            'suppressStripShine',
288
            'authenticationToken',
289
            'webServiceURL',
290
            'passTypeIdentifier',
291
            'teamIdentifier',
292
            'organizationName',
293
            'expirationDate',
294
            'voided',
295
            'appLaunchURL',
296
            'associatedStoreIdentifiers',
297
	        'userInfo'
298
        );
299
        foreach ($properties as $property) {
300
            $method = 'is' . ucfirst($property);
301
            if (!method_exists($this, $method)) {
302
                $method = 'get' . ucfirst($property);
303
            }
304
            $val = $this->$method();
305
            if ($val instanceof \DateTime) {
306
                // Date
307
                $array[$property] = $val->format('c');
308
            } elseif (is_object($val)) {
309
                // Object
310
                /* @var ArrayableInterface $val */
311
                $array[$property] = $val->toArray();
312
            } elseif (is_scalar($val)) {
313
                // Scalar
314
                $array[$property] = $val;
315
            } elseif (is_array($val)) {
316
                // Array
317
                foreach ($val as $k => $v) {
318
                    if (is_object($v)) {
319
                        /* @var ArrayableInterface $v */
320
                        $array[$property][$k] = $v->toArray();
321
                    } else {
322
                        $array[$property][$k] = $v;
323
                    }
324
                }
325
            }
326
        }
327
        if ($this->getAssociatedStoreIdentifiers()) {
328
            $array['associatedStoreIdentifiers'] = $this->getAssociatedStoreIdentifiers();
329
        }
330
331
        return $array;
332
    }
333
334
    /**
335
     * {@inheritdoc}
336
     */
337
    public function setSerialNumber($serialNumber)
338
    {
339
        $this->serialNumber = strval($serialNumber);
340
341
        return $this;
342
    }
343
344
    /**
345
     * {@inheritdoc}
346
     */
347
    public function getSerialNumber()
348
    {
349
        return $this->serialNumber;
350
    }
351
352
    /**
353
     * {@inheritdoc}
354
     */
355
    public function setDescription($description)
356
    {
357
        $this->description = $description;
358
359
        return $this;
360
    }
361
362
    /**
363
     * {@inheritdoc}
364
     */
365
    public function getDescription()
366
    {
367
        return $this->description;
368
    }
369
370
    /**
371
     * {@inheritdoc}
372
     */
373
    public function getFormatVersion()
374
    {
375
        return $this->formatVersion;
376
    }
377
378
    /**
379
     * {@inheritdoc}
380
     */
381
    public function setFormatVersion($formatVersion)
382
    {
383
        $this->formatVersion = $formatVersion;
384
385
        return $this;
386
    }
387
388
    /**
389
     * {@inheritdoc}
390
     */
391
    public function getType()
392
    {
393
        return $this->type;
394
    }
395
396
    /**
397
     * {@inheritdoc}
398
     */
399
    public function setType($type)
400
    {
401
        $this->type = $type;
402
403
        return $this;
404
    }
405
406
    /**
407
     * {@inheritdoc}
408
     */
409
    public function setStructure(StructureInterface $structure)
410
    {
411
        $this->structure = $structure;
0 ignored issues
show
Documentation Bug introduced by
$structure is of type object<Passbook\Pass\StructureInterface>, but the property $structure was declared to be of type object<Passbook\Pass\Structure>. Are you sure that you always receive this specific sub-class here, or does it make sense to add an instanceof check?

Our type inference engine has found a suspicous assignment of a value to a property. This check raises an issue when a value that can be of a given class or a super-class is assigned to a property that is type hinted more strictly.

Either this assignment is in error or an instanceof check should be added for that assignment.

class Alien {}

class Dalek extends Alien {}

class Plot
{
    /** @var  Dalek */
    public $villain;
}

$alien = new Alien();
$plot = new Plot();
if ($alien instanceof Dalek) {
    $plot->villain = $alien;
}
Loading history...
412
413
        return $this;
414
    }
415
416
    /**
417
     * {@inheritdoc}
418
     */
419
    public function getStructure()
420
    {
421
        return $this->structure;
422
    }
423
424
    /**
425
     * {@inheritdoc}
426
     */
427
    public function addImage(ImageInterface $image)
428
    {
429
        $this->images[] = $image;
430
431
        return $this;
432
    }
433
434
    /**
435
     * {@inheritdoc}
436
     */
437
    public function getImages()
438
    {
439
        return $this->images;
440
    }
441
442
    /**
443
     * {@inheritdoc}
444
     */
445
    public function addLocalization(LocalizationInterface $localization)
446
    {
447
        $this->localizations[] = $localization;
448
449
        return $this;
450
    }
451
452
    /**
453
     * {@inheritdoc}
454
     */
455
    public function getLocalizations()
456
    {
457
        return $this->localizations;
458
    }
459
460
    /**
461
     * {@inheritdoc}
462
     */
463
    public function addAssociatedStoreIdentifier($associatedStoreIdentifier)
464
    {
465
        $this->associatedStoreIdentifiers[] = $associatedStoreIdentifier;
466
467
        return $this;
468
    }
469
470
    /**
471
     * {@inheritdoc}
472
     */
473
    public function getAssociatedStoreIdentifiers()
474
    {
475
        return $this->associatedStoreIdentifiers;
476
    }
477
478
    /**
479
     * {@inheritdoc}
480
     */
481
    public function addLocation(LocationInterface $location)
482
    {
483
        $this->locations[] = $location;
484
485
        return $this;
486
    }
487
488
    /**
489
     * {@inheritdoc}
490
     */
491
    public function getLocations()
492
    {
493
        return $this->locations;
494
    }
495
496
    /**
497
     * {@inheritdoc}
498
     */
499
    public function addBeacon(BeaconInterface $beacon)
500
    {
501
        $this->beacons[] = $beacon;
502
503
        return $this;
504
    }
505
506
    /**
507
     * {@inheritdoc}
508
     */
509
    public function getBeacons()
510
    {
511
        return $this->beacons;
512
    }
513
514
    /**
515
     * {@inheritdoc}
516
     */
517
    public function setRelevantDate(\DateTime $relevantDate)
518
    {
519
        $this->relevantDate = $relevantDate;
520
521
        return $this;
522
    }
523
524
    /**
525
     * {@inheritdoc}
526
     */
527
    public function getRelevantDate()
528
    {
529
        return $this->relevantDate;
530
    }
531
532
    /**
533
     * {@inheritdoc}
534
     */
535
    public function setMaxDistance($maxDistance)
536
    {
537
        $this->maxDistance = $maxDistance;
538
539
        return $this;
540
    }
541
542
    /**
543
     * {@inheritdoc}
544
     */
545
    public function getMaxDistance()
546
    {
547
        return $this->maxDistance;
548
    }
549
550
    /**
551
     * {@inheritdoc}
552
     */
553
    public function setBarcode(BarcodeInterface $barcode)
554
    {
555
        $this->barcode = $barcode;
556
        array_unshift($this->barcodes, $barcode);
557
558
        return $this;
559
    }
560
561
    /**
562
     * {@inheritdoc}
563
     */
564
    public function getBarcode()
565
    {
566
        return $this->barcode;
567
    }
568
569
    /**
570
     * {@inheritdoc}
571
     */
572
    public function addBarcode(BarcodeInterface $barcode)
573
    {
574
        $this->barcodes[] = $barcode;
575
576
        if (empty($this->barcode)) {
577
            $this->barcode = $barcode;
578
        }
579
580
        return $this;
581
    }
582
583
    /**
584
     * {@inheritdoc}
585
     */
586
    public function getBarcodes()
587
    {
588
        return $this->barcodes;
589
    }
590
591
    /**
592
     * {@inheritdoc}
593
     */
594
    public function setBackgroundColor($backgroundColor)
595
    {
596
        $this->backgroundColor = $backgroundColor;
597
598
        return $this;
599
    }
600
601
    /**
602
     * {@inheritdoc}
603
     */
604
    public function getBackgroundColor()
605
    {
606
        return $this->backgroundColor;
607
    }
608
609
    /**
610
     * {@inheritdoc}
611
     */
612
    public function setForegroundColor($foregroundColor)
613
    {
614
        $this->foregroundColor = $foregroundColor;
615
616
        return $this;
617
    }
618
619
    /**
620
     * {@inheritdoc}
621
     */
622
    public function getForegroundColor()
623
    {
624
        return $this->foregroundColor;
625
    }
626
627
    /**
628
     * {@inheritdoc}
629
     */
630
    public function setGroupingIdentifier($groupingIdentifier)
631
    {
632
        $this->groupingIdentifier = $groupingIdentifier;
633
634
        return $this;
635
    }
636
637
    /**
638
     * {@inheritdoc}
639
     */
640
    public function getGroupingIdentifier()
641
    {
642
        return $this->groupingIdentifier;
643
    }
644
645
    /**
646
     * {@inheritdoc}
647
     */
648
    public function setLabelColor($labelColor)
649
    {
650
        $this->labelColor = $labelColor;
651
652
        return $this;
653
    }
654
655
    /**
656
     * {@inheritdoc}
657
     */
658
    public function getLabelColor()
659
    {
660
        return $this->labelColor;
661
    }
662
663
    /**
664
     * {@inheritdoc}
665
     */
666
    public function setLogoText($logoText)
667
    {
668
        $this->logoText = $logoText;
669
670
        return $this;
671
    }
672
673
    /**
674
     * {@inheritdoc}
675
     */
676
    public function getLogoText()
677
    {
678
        return $this->logoText;
679
    }
680
681
    /**
682
     * {@inheritdoc}
683
     */
684
    public function setSuppressStripShine($suppressStripShine)
685
    {
686
        $this->suppressStripShine = $suppressStripShine;
687
688
        return $this;
689
    }
690
691
    /**
692
     * {@inheritdoc}
693
     */
694
    public function getSuppressStripShine()
695
    {
696
        return $this->suppressStripShine;
697
    }
698
699
    /**
700
     * {@inheritdoc}
701
     */
702
    public function setAuthenticationToken($authenticationToken)
703
    {
704
        $this->authenticationToken = $authenticationToken;
705
706
        return $this;
707
    }
708
709
    /**
710
     * {@inheritdoc}
711
     */
712
    public function getAuthenticationToken()
713
    {
714
        return $this->authenticationToken;
715
    }
716
717
    /**
718
     * {@inheritdoc}
719
     */
720
    public function setWebServiceURL($webServiceURL)
721
    {
722
        $this->webServiceURL = $webServiceURL;
723
724
        return $this;
725
    }
726
727
    /**
728
     * {@inheritdoc}
729
     */
730
    public function getWebServiceURL()
731
    {
732
        return $this->webServiceURL;
733
    }
734
735
    /**
736
     * {@inheritdoc}
737
     */
738
    public function setPassTypeIdentifier($passTypeIdentifier)
739
    {
740
        $this->passTypeIdentifier = $passTypeIdentifier;
741
742
        return $this;
743
    }
744
745
    /**
746
     * {@inheritdoc}
747
     */
748
    public function getPassTypeIdentifier()
749
    {
750
        return $this->passTypeIdentifier;
751
    }
752
753
    /**
754
     * {@inheritdoc}
755
     */
756
    public function setTeamIdentifier($teamIdentifier)
757
    {
758
        $this->teamIdentifier = $teamIdentifier;
759
760
        return $this;
761
    }
762
763
    /**
764
     * {@inheritdoc}
765
     */
766
    public function getTeamIdentifier()
767
    {
768
        return $this->teamIdentifier;
769
    }
770
771
    /**
772
     * {@inheritdoc}
773
     */
774
    public function setOrganizationName($organizationName)
775
    {
776
        $this->organizationName = $organizationName;
777
778
        return $this;
779
    }
780
781
    /**
782
     * {@inheritdoc}
783
     */
784
    public function getOrganizationName()
785
    {
786
        return $this->organizationName;
787
    }
788
789
    /**
790
     * {@inheritdoc}
791
     */
792
    public function setExpirationDate(\DateTime $expirationDate)
793
    {
794
        $this->expirationDate = $expirationDate;
795
796
        return $this;
797
    }
798
799
    /**
800
     * {@inheritdoc}
801
     */
802
    public function getExpirationDate()
803
    {
804
        return $this->expirationDate;
805
    }
806
807
    /**
808
     * {@inheritdoc}
809
     */
810
    public function setVoided($voided)
811
    {
812
        $this->voided = $voided;
813
814
        return $this;
815
    }
816
817
    /**
818
     * {@inheritdoc}
819
     */
820
    public function getVoided()
0 ignored issues
show
Coding Style introduced by
function getVoided() does not seem to conform to the naming convention (^(?:is|has|should|may|supports)).

This check examines a number of code elements and verifies that they conform to the given naming conventions.

You can set conventions for local variables, abstract classes, utility classes, constant, properties, methods, parameters, interfaces, classes, exceptions and special methods.

Loading history...
821
    {
822
        return $this->voided;
823
    }
824
825
    /**
826
     * {@inheritdoc}
827
     */
828
    public function setAppLaunchURL($appLaunchURL)
829
    {
830
        $this->appLaunchURL = $appLaunchURL;
831
832
        return $this;
833
    }
834
835
    /**
836
     * {@inheritdoc}
837
     */
838
    public function getAppLaunchURL()
839
    {
840
        return $this->appLaunchURL;
841
    }
842
843
	/**
844
	 * {@inheritdoc}
845
	 */
846
	public function setUserInfo($userInfo) {
847
		$this->userInfo = $userInfo;
848
849
		return $this;
850
	}
851
852
	/**
853
	 * {@inheritdoc}
854
	 */
855
	public function getUserInfo() {
856
		return $this->userInfo;
857
	}
858
859
}
860