Completed
Pull Request — master (#50)
by
unknown
02:02
created

Pass::setpassName()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 7
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 7
rs 9.4285
cc 1
eloc 4
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
     * The name used for the pass.
51
     *
52
     * @var string
53
     */
54
    protected $passName;
55
56
    /**
57
     * Version of the file format.
58
     * The value must be 1.
59
     *
60
     * @var int
61
     */
62
    protected $formatVersion = 1;
63
64
    /**
65
     * Pass type
66
     *
67
     * @var string
68
     */
69
    protected $type;
70
71
    /**
72
     * Pass structure
73
     *
74
     * @var Structure
75
     */
76
    protected $structure;
77
78
    /**
79
     * Pass images
80
     *
81
     * @var ImageInterface[]
82
     */
83
    protected $images = array();
84
85
    /**
86
     * Beacons where the pass is relevant.
87
     *
88
     * @var array
89
     */
90
    protected $beacons = array();
91
92
    /**
93
     * A list of iTunes Store item identifiers (also known as Adam IDs) for the
94
     * associated apps.
95
     *
96
     * Only one item in the list is used—the first item identifier for an app
97
     * compatible with the current device. If the app is not installed, the
98
     * link opens the App Store and shows the app. If the app is already
99
     * installed, the link launches the app.
100
     *
101
     * @var int[]
102
     */
103
    protected $associatedStoreIdentifiers = array();
104
105
    /**
106
     * Locations where the pass is relevant.
107
     * For example, the location of your store.
108
     *
109
     * @var array
110
     */
111
    protected $locations = array();
112
113
    /**
114
     * List of localizations
115
     *
116
     * @var LocalizationInterface[]
117
     */
118
    protected $localizations = array();
119
120
    /**
121
     * Date and time when the pass becomes relevant.
122
     * For example, the start time of a movie.
123
     *
124
     * @var DateTime
125
     */
126
    protected $relevantDate;
127
128
    /**
129
     * Maximum distance in meters from a relevant latitude and longitude that
130
     * the pass is relevant. This number is compared to the pass’s default
131
     * distance and the smaller value is used.
132
     * Available in iOS 7.0.
133
     * @var int
134
     */
135
    protected $maxDistance;
136
137
    /**
138
     * Barcodes available to be displayed of iOS 9 and later. The system uses
139
     * the first valid barcode in the array.
140
     * @var BarcodeInterface[]
141
     */
142
    protected $barcodes = array();
143
144
    /**
145
     * Barcode to be displayed for iOS 8 and earlier.
146
     * @var BarcodeInterface
147
     */
148
    protected $barcode;
149
150
    /**
151
     * Background color of the pass, specified as an CSS-style RGB triple.
152
     *
153
     * @var string rgb(23, 187, 82)
154
     */
155
    protected $backgroundColor;
156
157
    /**
158
     * Foreground color of the pass, specified as a CSS-style RGB triple.
159
     *
160
     * @var string rgb(100, 10, 110)
161
     */
162
    protected $foregroundColor;
163
164
    /**
165
     * Color of the label text, specified as a CSS-style RGB triple.
166
     *
167
     * @var string rgb(255, 255, 255)
168
     */
169
    protected $labelColor;
170
171
    /**
172
     * Text displayed next to the logo on the pass.
173
     *
174
     * @var string
175
     */
176
    protected $logoText;
177
178
    /**
179
     * If true, the strip image is displayed without a shine effect.
180
     *
181
     * @var string The default value is false
182
     */
183
    protected $suppressStripShine;
184
185
    /**
186
     * The authentication token to use with the web service.
187
     * The token must be 16 characters or longer.
188
     *
189
     * @var string
190
     */
191
    protected $authenticationToken;
192
193
    /**
194
     * The URL of a web service that conforms to the API described in Passbook Web Service Reference.
195
     * http://developer.apple.com/library/ios/documentation/PassKit/Reference/PassKit_WebService/WebService.html#//apple_ref/doc/uid/TP40011988
196
     *
197
     * @var string
198
     */
199
    protected $webServiceURL;
200
201
    /**
202
     * Pass type identifier
203
     *
204
     * @var string
205
     */
206
    protected $passTypeIdentifier;
207
208
    /**
209
     * Team identifier
210
     *
211
     * @var string
212
     */
213
    protected $teamIdentifier;
214
215
    /**
216
     * Organization name
217
     *
218
     * @var string
219
     */
220
    protected $organizationName;
221
222
    /**
223
     * Date and time when the pass expires.
224
     *
225
     * @var DateTime
226
     */
227
    protected $expirationDate;
228
229
    /**
230
     * Indicates that the pass is void—for example, a one time use coupon that has been redeemed. The default value is
231
     * false.
232
     *
233
     * @var boolean
234
     */
235
    protected $voided;
236
237
    /**
238
     *
239
     * A URL to be passed to the associated app when launching it.
240
     * The app receives this URL in the application:didFinishLaunchingWithOptions: and application:handleOpenURL:
241
     * methods of its app delegate. If this key is present, the associatedStoreIdentifiers key must also be present.
242
     *
243
     * @var string
244
     */
245
    protected $appLaunchURL;
246
247
    public function __construct($serialNumber, $description, $passName = '')
248
    {
249
        // Required
250
        $this->setSerialNumber($serialNumber);
251
        $this->setDescription($description);
252
        $this->setPassName($passName);
253
    }
254
255
    public function toArray()
256
    {
257
        $array = array();
258
259
        // Structure
260
        if ($this->getStructure()) {
261
            $array[$this->getType()] = $this->getStructure()->toArray();
262
        }
263
264
        $properties = array(
265
            'serialNumber',
266
            'description',
267
            'passName',
268
            'formatVersion',
269
            'beacons',
270
            'locations',
271
            'maxDistance',
272
            'relevantDate',
273
            'barcode',
274
            'barcodes',
275
            'backgroundColor',
276
            'foregroundColor',
277
            'labelColor',
278
            'logoText',
279
            'suppressStripShine',
280
            'authenticationToken',
281
            'webServiceURL',
282
            'passTypeIdentifier',
283
            'teamIdentifier',
284
            'organizationName',
285
            'expirationDate',
286
            'voided',
287
            'appLaunchURL',
288
            'associatedStoreIdentifiers',
289
        );
290
        foreach ($properties as $property) {
291
            $method = 'is' . ucfirst($property);
292
            if (!method_exists($this, $method)) {
293
                $method = 'get' . ucfirst($property);
294
            }
295
            $val = $this->$method();
296
            if ($val instanceof \DateTime) {
297
                // Date
298
                $array[$property] = $val->format('c');
299
            } elseif (is_object($val)) {
300
                // Object
301
                /* @var ArrayableInterface $val */
302
                $array[$property] = $val->toArray();
303
            } elseif (is_scalar($val)) {
304
                // Scalar
305
                $array[$property] = $val;
306
            } elseif (is_array($val)) {
307
                // Array
308
                foreach ($val as $v) {
309
                    if (is_object($v)) {
310
                        /* @var ArrayableInterface $v */
311
                        $array[$property][] = $v->toArray();
312
                    } else {
313
                        $array[$property][] = $v;
314
                    }
315
                }
316
            }
317
        }
318
        if ($this->getAssociatedStoreIdentifiers()) {
319
            $array['associatedStoreIdentifiers'] = $this->getAssociatedStoreIdentifiers();
320
        }
321
322
        return $array;
323
    }
324
325
    /**
326
     * {@inheritdoc}
327
     */
328
    public function setSerialNumber($serialNumber)
329
    {
330
        $this->serialNumber = strval($serialNumber);
331
332
        return $this;
333
    }
334
335
    /**
336
     * {@inheritdoc}
337
     */
338
    public function getSerialNumber()
339
    {
340
        return $this->serialNumber;
341
    }
342
343
    /**
344
     * {@inheritdoc}
345
     */
346
    public function setDescription($description)
347
    {
348
        $this->description = $description;
349
350
        return $this;
351
    }
352
353
    /**
354
     * {@inheritdoc}
355
     */
356
    public function getDescription()
357
    {
358
        return $this->description;
359
    }
360
    
361
    /**
362
     * {@inheritdoc}
363
     */
364
    public function setpassName($passName)
365
    {
366
        $passNameSanitised = preg_replace("/[^a-zA-Z0-9]+/", "", $passName);
367
        $this->passName = $passNameSanitised;
368
369
        return $this;
370
    }
371
372
    /**
373
     * {@inheritdoc}
374
     */
375
    public function getPassName()
376
    {
377
        return strlen($this->passName) != 0 ? $this->passName : $this->serialNumber;
378
    }
379
380
    /**
381
     * {@inheritdoc}
382
     */
383
    public function getFormatVersion()
384
    {
385
        return $this->formatVersion;
386
    }
387
388
    /**
389
     * {@inheritdoc}
390
     */
391
    public function setFormatVersion($formatVersion)
392
    {
393
        $this->formatVersion = $formatVersion;
394
395
        return $this;
396
    }
397
398
    /**
399
     * {@inheritdoc}
400
     */
401
    public function getType()
402
    {
403
        return $this->type;
404
    }
405
406
    /**
407
     * {@inheritdoc}
408
     */
409
    public function setType($type)
410
    {
411
        $this->type = $type;
412
413
        return $this;
414
    }
415
416
    /**
417
     * {@inheritdoc}
418
     */
419
    public function setStructure(StructureInterface $structure)
420
    {
421
        $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...
422
423
        return $this;
424
    }
425
426
    /**
427
     * {@inheritdoc}
428
     */
429
    public function getStructure()
430
    {
431
        return $this->structure;
432
    }
433
434
    /**
435
     * {@inheritdoc}
436
     */
437
    public function addImage(ImageInterface $image)
438
    {
439
        $this->images[] = $image;
440
441
        return $this;
442
    }
443
444
    /**
445
     * {@inheritdoc}
446
     */
447
    public function getImages()
448
    {
449
        return $this->images;
450
    }
451
452
    /**
453
     * {@inheritdoc}
454
     */
455
    public function addLocalization(LocalizationInterface $localization)
456
    {
457
        $this->localizations[] = $localization;
458
459
        return $this;
460
    }
461
462
    /**
463
     * {@inheritdoc}
464
     */
465
    public function getLocalizations()
466
    {
467
        return $this->localizations;
468
    }
469
470
    /**
471
     * {@inheritdoc}
472
     */
473
    public function addAssociatedStoreIdentifier($associatedStoreIdentifier)
474
    {
475
        $this->associatedStoreIdentifiers[] = $associatedStoreIdentifier;
476
477
        return $this;
478
    }
479
480
    /**
481
     * {@inheritdoc}
482
     */
483
    public function getAssociatedStoreIdentifiers()
484
    {
485
        return $this->associatedStoreIdentifiers;
486
    }
487
488
    /**
489
     * {@inheritdoc}
490
     */
491
    public function addLocation(LocationInterface $location)
492
    {
493
        $this->locations[] = $location;
494
495
        return $this;
496
    }
497
498
    /**
499
     * {@inheritdoc}
500
     */
501
    public function getLocations()
502
    {
503
        return $this->locations;
504
    }
505
506
    /**
507
     * {@inheritdoc}
508
     */
509
    public function addBeacon(BeaconInterface $beacon)
510
    {
511
        $this->beacons[] = $beacon;
512
513
        return $this;
514
    }
515
516
    /**
517
     * {@inheritdoc}
518
     */
519
    public function getBeacons()
520
    {
521
        return $this->beacons;
522
    }
523
524
    /**
525
     * {@inheritdoc}
526
     */
527
    public function setRelevantDate(\DateTime $relevantDate)
528
    {
529
        $this->relevantDate = $relevantDate;
530
531
        return $this;
532
    }
533
534
    /**
535
     * {@inheritdoc}
536
     */
537
    public function getRelevantDate()
538
    {
539
        return $this->relevantDate;
540
    }
541
542
    /**
543
     * {@inheritdoc}
544
     */
545
    public function setMaxDistance($maxDistance)
546
    {
547
        $this->maxDistance = $maxDistance;
548
549
        return $this;
550
    }
551
552
    /**
553
     * {@inheritdoc}
554
     */
555
    public function getMaxDistance()
556
    {
557
        return $this->maxDistance;
558
    }
559
560
    /**
561
     * {@inheritdoc}
562
     */
563
    public function setBarcode(BarcodeInterface $barcode)
564
    {
565
        $this->barcode = $barcode;
566
        array_unshift($this->barcodes, $barcode);
567
568
        return $this;
569
    }
570
571
    /**
572
     * {@inheritdoc}
573
     */
574
    public function getBarcode()
575
    {
576
        return $this->barcode;
577
    }
578
579
    /**
580
     * {@inheritdoc}
581
     */
582
    public function addBarcode(BarcodeInterface $barcode)
583
    {
584
        $this->barcodes[] = $barcode;
585
586
        if (empty($this->barcode)) {
587
            $this->barcode = $barcode;
588
        }
589
590
        return $this;
591
    }
592
593
    /**
594
     * {@inheritdoc}
595
     */
596
    public function getBarcodes()
597
    {
598
        return $this->barcodes;
599
    }
600
601
    /**
602
     * {@inheritdoc}
603
     */
604
    public function setBackgroundColor($backgroundColor)
605
    {
606
        $this->backgroundColor = $backgroundColor;
607
608
        return $this;
609
    }
610
611
    /**
612
     * {@inheritdoc}
613
     */
614
    public function getBackgroundColor()
615
    {
616
        return $this->backgroundColor;
617
    }
618
619
    /**
620
     * {@inheritdoc}
621
     */
622
    public function setForegroundColor($foregroundColor)
623
    {
624
        $this->foregroundColor = $foregroundColor;
625
626
        return $this;
627
    }
628
629
    /**
630
     * {@inheritdoc}
631
     */
632
    public function getForegroundColor()
633
    {
634
        return $this->foregroundColor;
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