Completed
Pull Request — master (#70)
by
unknown
03:57
created

Pass::setGroupingIdentifier()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 6
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
    public function __construct($serialNumber, $description)
250
    {
251
        // Required
252
        $this->setSerialNumber($serialNumber);
253
        $this->setDescription($description);
254
    }
255
256
    public function toArray()
257
    {
258
        $array = array();
259
260
        // Structure
261
        if ($this->getStructure()) {
262
            $array[$this->getType()] = $this->getStructure()->toArray();
263
        }
264
265
        $properties = array(
266
            'serialNumber',
267
            'description',
268
            'formatVersion',
269
            'beacons',
270
            'locations',
271
            'maxDistance',
272
            'relevantDate',
273
            'barcode',
274
            'barcodes',
275
            'backgroundColor',
276
            'foregroundColor',
277
            'groupingIdentifier',
278
            'labelColor',
279
            'logoText',
280
            'suppressStripShine',
281
            'authenticationToken',
282
            'webServiceURL',
283
            'passTypeIdentifier',
284
            'teamIdentifier',
285
            'organizationName',
286
            'expirationDate',
287
            'voided',
288
            'appLaunchURL',
289
            'associatedStoreIdentifiers',
290
        );
291
        foreach ($properties as $property) {
292
            $method = 'is' . ucfirst($property);
293
            if (!method_exists($this, $method)) {
294
                $method = 'get' . ucfirst($property);
295
            }
296
            $val = $this->$method();
297
            if ($val instanceof \DateTime) {
298
                // Date
299
                $array[$property] = $val->format('c');
300
            } elseif (is_object($val)) {
301
                // Object
302
                /* @var ArrayableInterface $val */
303
                $array[$property] = $val->toArray();
304
            } elseif (is_scalar($val)) {
305
                // Scalar
306
                $array[$property] = $val;
307
            } elseif (is_array($val)) {
308
                // Array
309
                foreach ($val as $v) {
310
                    if (is_object($v)) {
311
                        /* @var ArrayableInterface $v */
312
                        $array[$property][] = $v->toArray();
313
                    } else {
314
                        $array[$property][] = $v;
315
                    }
316
                }
317
            }
318
        }
319
        if ($this->getAssociatedStoreIdentifiers()) {
320
            $array['associatedStoreIdentifiers'] = $this->getAssociatedStoreIdentifiers();
321
        }
322
323
        return $array;
324
    }
325
326
    /**
327
     * {@inheritdoc}
328
     */
329
    public function setSerialNumber($serialNumber)
330
    {
331
        $this->serialNumber = strval($serialNumber);
332
333
        return $this;
334
    }
335
336
    /**
337
     * {@inheritdoc}
338
     */
339
    public function getSerialNumber()
340
    {
341
        return $this->serialNumber;
342
    }
343
344
    /**
345
     * {@inheritdoc}
346
     */
347
    public function setDescription($description)
348
    {
349
        $this->description = $description;
350
351
        return $this;
352
    }
353
354
    /**
355
     * {@inheritdoc}
356
     */
357
    public function getDescription()
358
    {
359
        return $this->description;
360
    }
361
362
    /**
363
     * {@inheritdoc}
364
     */
365
    public function getFormatVersion()
366
    {
367
        return $this->formatVersion;
368
    }
369
370
    /**
371
     * {@inheritdoc}
372
     */
373
    public function setFormatVersion($formatVersion)
374
    {
375
        $this->formatVersion = $formatVersion;
376
377
        return $this;
378
    }
379
380
    /**
381
     * {@inheritdoc}
382
     */
383
    public function getType()
384
    {
385
        return $this->type;
386
    }
387
388
    /**
389
     * {@inheritdoc}
390
     */
391
    public function setType($type)
392
    {
393
        $this->type = $type;
394
395
        return $this;
396
    }
397
398
    /**
399
     * {@inheritdoc}
400
     */
401
    public function setStructure(StructureInterface $structure)
402
    {
403
        $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...
404
405
        return $this;
406
    }
407
408
    /**
409
     * {@inheritdoc}
410
     */
411
    public function getStructure()
412
    {
413
        return $this->structure;
414
    }
415
416
    /**
417
     * {@inheritdoc}
418
     */
419
    public function addImage(ImageInterface $image)
420
    {
421
        $this->images[] = $image;
422
423
        return $this;
424
    }
425
426
    /**
427
     * {@inheritdoc}
428
     */
429
    public function getImages()
430
    {
431
        return $this->images;
432
    }
433
434
    /**
435
     * {@inheritdoc}
436
     */
437
    public function addLocalization(LocalizationInterface $localization)
438
    {
439
        $this->localizations[] = $localization;
440
441
        return $this;
442
    }
443
444
    /**
445
     * {@inheritdoc}
446
     */
447
    public function getLocalizations()
448
    {
449
        return $this->localizations;
450
    }
451
452
    /**
453
     * {@inheritdoc}
454
     */
455
    public function addAssociatedStoreIdentifier($associatedStoreIdentifier)
456
    {
457
        $this->associatedStoreIdentifiers[] = $associatedStoreIdentifier;
458
459
        return $this;
460
    }
461
462
    /**
463
     * {@inheritdoc}
464
     */
465
    public function getAssociatedStoreIdentifiers()
466
    {
467
        return $this->associatedStoreIdentifiers;
468
    }
469
470
    /**
471
     * {@inheritdoc}
472
     */
473
    public function addLocation(LocationInterface $location)
474
    {
475
        $this->locations[] = $location;
476
477
        return $this;
478
    }
479
480
    /**
481
     * {@inheritdoc}
482
     */
483
    public function getLocations()
484
    {
485
        return $this->locations;
486
    }
487
488
    /**
489
     * {@inheritdoc}
490
     */
491
    public function addBeacon(BeaconInterface $beacon)
492
    {
493
        $this->beacons[] = $beacon;
494
495
        return $this;
496
    }
497
498
    /**
499
     * {@inheritdoc}
500
     */
501
    public function getBeacons()
502
    {
503
        return $this->beacons;
504
    }
505
506
    /**
507
     * {@inheritdoc}
508
     */
509
    public function setRelevantDate(\DateTime $relevantDate)
510
    {
511
        $this->relevantDate = $relevantDate;
512
513
        return $this;
514
    }
515
516
    /**
517
     * {@inheritdoc}
518
     */
519
    public function getRelevantDate()
520
    {
521
        return $this->relevantDate;
522
    }
523
524
    /**
525
     * {@inheritdoc}
526
     */
527
    public function setMaxDistance($maxDistance)
528
    {
529
        $this->maxDistance = $maxDistance;
530
531
        return $this;
532
    }
533
534
    /**
535
     * {@inheritdoc}
536
     */
537
    public function getMaxDistance()
538
    {
539
        return $this->maxDistance;
540
    }
541
542
    /**
543
     * {@inheritdoc}
544
     */
545
    public function setBarcode(BarcodeInterface $barcode)
546
    {
547
        $this->barcode = $barcode;
548
        array_unshift($this->barcodes, $barcode);
549
550
        return $this;
551
    }
552
553
    /**
554
     * {@inheritdoc}
555
     */
556
    public function getBarcode()
557
    {
558
        return $this->barcode;
559
    }
560
561
    /**
562
     * {@inheritdoc}
563
     */
564
    public function addBarcode(BarcodeInterface $barcode)
565
    {
566
        $this->barcodes[] = $barcode;
567
568
        if (empty($this->barcode)) {
569
            $this->barcode = $barcode;
570
        }
571
572
        return $this;
573
    }
574
575
    /**
576
     * {@inheritdoc}
577
     */
578
    public function getBarcodes()
579
    {
580
        return $this->barcodes;
581
    }
582
583
    /**
584
     * {@inheritdoc}
585
     */
586
    public function setBackgroundColor($backgroundColor)
587
    {
588
        $this->backgroundColor = $backgroundColor;
589
590
        return $this;
591
    }
592
593
    /**
594
     * {@inheritdoc}
595
     */
596
    public function getBackgroundColor()
597
    {
598
        return $this->backgroundColor;
599
    }
600
601
    /**
602
     * {@inheritdoc}
603
     */
604
    public function setForegroundColor($foregroundColor)
605
    {
606
        $this->foregroundColor = $foregroundColor;
607
608
        return $this;
609
    }
610
611
    /**
612
     * {@inheritdoc}
613
     */
614
    public function getForegroundColor()
615
    {
616
        return $this->foregroundColor;
617
    }
618
619
    /**
620
     * {@inheritdoc}
621
     */
622
    public function setGroupingIdentifier($groupingIdentifier)
623
    {
624
        $this->groupingIdentifier = $groupingIdentifier;
625
626
        return $this;
627
    }
628
629
    /**
630
     * {@inheritdoc}
631
     */
632
    public function getGroupingIdentifier()
633
    {
634
        return $this->groupingIdentifier;
635
    }
636
637
    /**
638
     * {@inheritdoc}
639
     */
640
    public function setLabelColor($labelColor)
641
    {
642
        $this->labelColor = $labelColor;
643
644
        return $this;
645
    }
646
647
    /**
648
     * {@inheritdoc}
649
     */
650
    public function getLabelColor()
651
    {
652
        return $this->labelColor;
653
    }
654
655
    /**
656
     * {@inheritdoc}
657
     */
658
    public function setLogoText($logoText)
659
    {
660
        $this->logoText = $logoText;
661
662
        return $this;
663
    }
664
665
    /**
666
     * {@inheritdoc}
667
     */
668
    public function getLogoText()
669
    {
670
        return $this->logoText;
671
    }
672
673
    /**
674
     * {@inheritdoc}
675
     */
676
    public function setSuppressStripShine($suppressStripShine)
677
    {
678
        $this->suppressStripShine = $suppressStripShine;
679
680
        return $this;
681
    }
682
683
    /**
684
     * {@inheritdoc}
685
     */
686
    public function getSuppressStripShine()
687
    {
688
        return $this->suppressStripShine;
689
    }
690
691
    /**
692
     * {@inheritdoc}
693
     */
694
    public function setAuthenticationToken($authenticationToken)
695
    {
696
        $this->authenticationToken = $authenticationToken;
697
698
        return $this;
699
    }
700
701
    /**
702
     * {@inheritdoc}
703
     */
704
    public function getAuthenticationToken()
705
    {
706
        return $this->authenticationToken;
707
    }
708
709
    /**
710
     * {@inheritdoc}
711
     */
712
    public function setWebServiceURL($webServiceURL)
713
    {
714
        $this->webServiceURL = $webServiceURL;
715
716
        return $this;
717
    }
718
719
    /**
720
     * {@inheritdoc}
721
     */
722
    public function getWebServiceURL()
723
    {
724
        return $this->webServiceURL;
725
    }
726
727
    /**
728
     * {@inheritdoc}
729
     */
730
    public function setPassTypeIdentifier($passTypeIdentifier)
731
    {
732
        $this->passTypeIdentifier = $passTypeIdentifier;
733
734
        return $this;
735
    }
736
737
    /**
738
     * {@inheritdoc}
739
     */
740
    public function getPassTypeIdentifier()
741
    {
742
        return $this->passTypeIdentifier;
743
    }
744
745
    /**
746
     * {@inheritdoc}
747
     */
748
    public function setTeamIdentifier($teamIdentifier)
749
    {
750
        $this->teamIdentifier = $teamIdentifier;
751
752
        return $this;
753
    }
754
755
    /**
756
     * {@inheritdoc}
757
     */
758
    public function getTeamIdentifier()
759
    {
760
        return $this->teamIdentifier;
761
    }
762
763
    /**
764
     * {@inheritdoc}
765
     */
766
    public function setOrganizationName($organizationName)
767
    {
768
        $this->organizationName = $organizationName;
769
770
        return $this;
771
    }
772
773
    /**
774
     * {@inheritdoc}
775
     */
776
    public function getOrganizationName()
777
    {
778
        return $this->organizationName;
779
    }
780
781
    /**
782
     * {@inheritdoc}
783
     */
784
    public function setExpirationDate(\DateTime $expirationDate)
785
    {
786
        $this->expirationDate = $expirationDate;
787
788
        return $this;
789
    }
790
791
    /**
792
     * {@inheritdoc}
793
     */
794
    public function getExpirationDate()
795
    {
796
        return $this->expirationDate;
797
    }
798
799
    /**
800
     * {@inheritdoc}
801
     */
802
    public function setVoided($voided)
803
    {
804
        $this->voided = $voided;
805
806
        return $this;
807
    }
808
809
    /**
810
     * {@inheritdoc}
811
     */
812
    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...
813
    {
814
        return $this->voided;
815
    }
816
817
    /**
818
     * {@inheritdoc}
819
     */
820
    public function setAppLaunchURL($appLaunchURL)
821
    {
822
        $this->appLaunchURL = $appLaunchURL;
823
824
        return $this;
825
    }
826
827
    /**
828
     * {@inheritdoc}
829
     */
830
    public function getAppLaunchURL()
831
    {
832
        return $this->appLaunchURL;
833
    }
834
}
835