Completed
Pull Request — master (#77)
by Jeroen De
02:28
created

Donation::setTransferCode()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 5
rs 9.4285
cc 1
eloc 3
nc 1
nop 1
1
<?php
2
3
namespace WMDE\Fundraising\Entities;
4
5
use Doctrine\ORM\Mapping as ORM;
6
use Gedmo\Mapping\Annotation as Gedmo;
7
use WMDE\Fundraising\Store\DonationData;
8
9
/**
10
 * @since 2.0
11
 *
12
 * @ORM\Table(name="spenden", indexes={@ORM\Index(name="email", columns={"email"}), @ORM\Index(name="name", columns={"name"}), @ORM\Index(name="ort", columns={"ort"}), @ORM\Index(name="dt_new", columns={"dt_new", "is_public"}), @ORM\Index(name="dt_exp", columns={"dt_exp", "dt_del"}), @ORM\Index(name="zahlweise", columns={"zahlweise", "dt_new"}), @ORM\Index(name="dt_gruen", columns={"dt_gruen", "dt_del"}), @ORM\Index(name="ueb_code", columns={"ueb_code"}), @ORM\Index(name="dt_backup", columns={"dt_backup"}), @ORM\Index(name="status", columns={"status", "dt_new"}), @ORM\Index(name="comment_list", columns={"is_public", "dt_del"})})
13
 * @ORM\Entity
14
 */
15
class Donation {
16
	/**
17
	 * @var string
18
	 *
19
	 * @ORM\Column(name="name", type="string", length=250, nullable=true)
20
	 */
21
	private $donorFullName;
22
23
	/**
24
	 * @var string
25
	 *
26
	 * @ORM\Column(name="ort", type="string", length=250, nullable=true)
27
	 */
28
	private $donorCity;
29
30
	/**
31
	 * @var string
32
	 *
33
	 * @ORM\Column(name="email", type="string", length=250, nullable=true)
34
	 */
35
	private $donorEmail;
36
37
	/**
38
	 * @var boolean
39
	 *
40
	 * @ORM\Column(name="info", type="boolean", options={"default":0}, nullable=false)
41
	 */
42
	private $donorOptsIntoNewsletter = 0;
43
44
	/**
45
	 * @var boolean
46
	 *
47
	 * @ORM\Column(name="bescheinigung", type="boolean", nullable=true)
48
	 */
49
	private $donationReceipt;
50
51
	/**
52
	 * @var string
53
	 *
54
	 * @ORM\Column(name="eintrag", type="string", length=250, options={"default":""}, nullable=false)
55
	 */
56
	private $publicRecord = '';
57
58
	/**
59
	 * @var string
60
	 *
61
	 * @ORM\Column(name="betrag", type="string", length=250, nullable=true)
62
	 */
63
	private $amount;
64
65
	/**
66
	 * @var integer
67
	 *
68
	 * @ORM\Column(name="periode", type="smallint", options={"default":0}, nullable=false)
69
	 */
70
	private $paymentIntervalInMonths = 0;
71
72
	/**
73
	 * @var string
74
	 *
75
	 * @ORM\Column(name="zahlweise", type="string", length=3, options={"default":"BEZ", "fixed":true}, nullable=false)
76
	 */
77
	private $paymentType = 'BEZ';
78
79
	/**
80
	 * @var string
81
	 *
82
	 * @ORM\Column(name="kommentar", type="text", options={"default":""}, nullable=false)
83
	 */
84
	private $comment = '';
85
86
	/**
87
	 * @var string
88
	 *
89
	 * @ORM\Column(name="ueb_code", type="string", length=32, options={"default":""}, nullable=false)
90
	 */
91
	private $bankTransferCode = '';
92
93
	/**
94
	 * @var string
95
	 *
96
	 * @ORM\Column(name="data", type="text", nullable=true)
97
	 */
98
	private $data;
99
100
	/**
101
	 * @var string
102
	 *
103
	 * @ORM\Column(name="source", type="string", length=250, nullable=true)
104
	 */
105
	private $source;
106
107
	/**
108
	 * @var string
109
	 *
110
	 * @ORM\Column(name="remote_addr", type="string", length=250, options={"default":""}, nullable=false)
111
	 */
112
	private $remoteAddr = '';
113
114
	/**
115
	 * @var string
116
	 *
117
	 * @ORM\Column(name="hash", type="string", length=250, nullable=true)
118
	 */
119
	private $hash;
120
121
	/**
122
	 * @var boolean
123
	 *
124
	 * @ORM\Column(name="is_public", type="boolean", options={"default":0}, nullable=false)
125
	 */
126
	private $isPublic = 0;
127
128
	/**
129
	 * @var \DateTime
130
	 *
131
	 * @Gedmo\Timestampable(on="create")
132
	 * @ORM\Column(name="dt_new", type="datetime")
133
	 */
134
	private $creationTime;
135
136
	/**
137
	 * @var \DateTime
138
	 *
139
	 * @ORM\Column(name="dt_del", type="datetime", nullable=true)
140
	 */
141
	private $deletionTime;
142
143
	/**
144
	 * @var \DateTime
145
	 *
146
	 * @ORM\Column(name="dt_exp", type="datetime", nullable=true)
147
	 */
148
	private $dtExp;
149
150
	/**
151
	 * @var \DateTime
152
	 *
153
	 * @ORM\Column(name="dt_gruen", type="datetime", nullable=true)
154
	 */
155
	private $dtGruen;
156
157
	/**
158
	 * @var \DateTime
159
	 *
160
	 * @ORM\Column(name="dt_backup", type="datetime", nullable=true)
161
	 */
162
	private $dtBackup;
163
164
	/**
165
	 * @var string
166
	 *
167
	 * @ORM\Column(name="status", type="string", length=1, options={"default":"N", "fixed":true}, nullable=false)
168
	 */
169
	private $status = 'N';
170
171
	/**
172
	 * @var integer
173
	 *
174
	 * @ORM\Column(name="id", type="integer")
175
	 * @ORM\Id
176
	 * @ORM\GeneratedValue(strategy="IDENTITY")
177
	 */
178
	private $id;
179
180
181
	/**
182
	 * @param string $donorFullName
183
	 *
184
	 * @return self
185
	 */
186
	public function setDonorFullName( $donorFullName ) {
187
		$this->donorFullName = $donorFullName;
188
189
		return $this;
190
	}
191
192
	/**
193
	 * @return string
194
	 */
195
	public function getDonorFullName() {
196
		return $this->donorFullName;
197
	}
198
199
	/**
200
	 * @param string $donorCity
201
	 *
202
	 * @return self
203
	 */
204
	public function setDonorCity( $donorCity ) {
205
		$this->donorCity = $donorCity;
206
207
		return $this;
208
	}
209
210
	/**
211
	 * @return string
212
	 */
213
	public function getDonorCity() {
214
		return $this->donorCity;
215
	}
216
217
	/**
218
	 * @param string $donorEmail
219
	 *
220
	 * @return self
221
	 */
222
	public function setDonorEmail( $donorEmail ) {
223
		$this->donorEmail = $donorEmail;
224
225
		return $this;
226
	}
227
228
	/**
229
	 * @return string
230
	 */
231
	public function getDonorEmail() {
232
		return $this->donorEmail;
233
	}
234
235
	/**
236
	 * @param boolean $donorOptsIntoNewsletter
237
	 *
238
	 * @return self
239
	 */
240
	public function setDonorOptsIntoNewsletter( $donorOptsIntoNewsletter ) {
241
		$this->donorOptsIntoNewsletter = $donorOptsIntoNewsletter;
242
243
		return $this;
244
	}
245
246
	/**
247
	 * @return boolean
248
	 */
249
	public function getDonorOptsIntoNewsletter() {
250
		return $this->donorOptsIntoNewsletter;
251
	}
252
253
	/**
254
	 * Set donation receipt state
255
	 *
256
	 * @param boolean $donationReceipt
257
	 * @return self
258
	 */
259
	public function setDonationReceipt( $donationReceipt ) {
260
		$this->donationReceipt = $donationReceipt;
261
262
		return $this;
263
	}
264
265
	/**
266
	 * Get donation receipt state
267
	 *
268
	 * @return boolean
269
	 */
270
	public function getDonationReceipt() {
271
		return $this->donationReceipt;
272
	}
273
274
	/**
275
	 * Set publicly displayed donation record
276
	 *
277
	 * @param string $publicRecord
278
	 * @return self
279
	 */
280
	public function setPublicRecord( $publicRecord ) {
281
		$this->publicRecord = $publicRecord;
282
283
		return $this;
284
	}
285
286
	/**
287
	 * Get publicly displayed donation record
288
	 *
289
	 * @return string
290
	 */
291
	public function getPublicRecord() {
292
		return $this->publicRecord;
293
	}
294
295
	/**
296
	 * @param string $amount
297
	 * @return self
298
	 */
299
	public function setAmount( $amount ) {
300
		$this->amount = $amount;
301
302
		return $this;
303
	}
304
305
	/**
306
	 * @return string
307
	 */
308
	public function getAmount() {
309
		return $this->amount;
310
	}
311
312
	/**
313
	 * @param integer $paymentIntervalInMonths
314
	 *
315
	 * @return self
316
	 */
317
	public function setPaymentIntervalInMonths( $paymentIntervalInMonths ) {
318
		$this->paymentIntervalInMonths = $paymentIntervalInMonths;
319
320
		return $this;
321
	}
322
323
	/**
324
	 * @return integer
325
	 */
326
	public function getPaymentIntervalInMonths() {
327
		return $this->paymentIntervalInMonths;
328
	}
329
330
	/**
331
	 * Set payment type short code
332
	 *
333
	 * @param string $paymentType
334
	 * @return self
335
	 */
336
	public function setPaymentType( $paymentType ) {
337
		$this->paymentType = $paymentType;
338
339
		return $this;
340
	}
341
342
	/**
343
	 * Get payment type short code
344
	 *
345
	 * @return string
346
	 */
347
	public function getPaymentType() {
348
		return $this->paymentType;
349
	}
350
351
	/**
352
	 * @param string $comment
353
	 * @return self
354
	 */
355
	public function setComment( $comment ) {
356
		$this->comment = $comment;
357
358
		return $this;
359
	}
360
361
	/**
362
	 * @return string
363
	 */
364
	public function getComment() {
365
		return $this->comment;
366
	}
367
368
	/**
369
	 * Set bank transfer reference code
370
	 *
371
	 * @param string $bankTransferCode
372
	 *
373
	 * @return self
374
	 */
375
	public function setBankTransferCode( $bankTransferCode ) {
376
		$this->bankTransferCode = $bankTransferCode;
377
378
		return $this;
379
	}
380
381
	/**
382
	 * Get bank transfer reference code
383
	 *
384
	 * @return string
385
	 */
386
	public function getBankTransferCode() {
387
		return $this->bankTransferCode;
388
	}
389
390
	/**
391
	 * @param string $source
392
	 * @return self
393
	 */
394
	public function setSource( $source ) {
395
		$this->source = $source;
396
397
		return $this;
398
	}
399
400
	/**
401
	 * @return string
402
	 */
403
	public function getSource() {
404
		return $this->source;
405
	}
406
407
	/**
408
	 * @param string $remoteAddr
409
	 * @return self
410
	 */
411
	public function setRemoteAddr( $remoteAddr ) {
412
		$this->remoteAddr = $remoteAddr;
413
414
		return $this;
415
	}
416
417
	/**
418
	 * @return string
419
	 */
420
	public function getRemoteAddr() {
421
		return $this->remoteAddr;
422
	}
423
424
	/**
425
	 * @param string $hash
426
	 * @return self
427
	 */
428
	public function setHash( $hash ) {
429
		$this->hash = $hash;
430
431
		return $this;
432
	}
433
434
	/**
435
	 * @return string
436
	 */
437
	public function getHash() {
438
		return $this->hash;
439
	}
440
441
	/**
442
	 * @param boolean $isPublic
443
	 * @return self
444
	 */
445
	public function setIsPublic( $isPublic ) {
446
		$this->isPublic = $isPublic;
447
448
		return $this;
449
	}
450
451
	/**
452
	 * @return boolean
453
	 */
454
	public function getIsPublic() {
455
		return $this->isPublic;
456
	}
457
458
	/**
459
	 * @param \DateTime $creationTime
460
	 *
461
	 * @return self
462
	 */
463
	public function setCreationTime( $creationTime ) {
464
		$this->creationTime = $creationTime;
465
466
		return $this;
467
	}
468
469
	/**
470
	 * @return \DateTime
471
	 */
472
	public function getCreationTime() {
473
		return $this->creationTime;
474
	}
475
476
	/**
477
	 * @param \DateTime|null $deletionTime
478
	 *
479
	 * @return self
480
	 */
481
	public function setDeletionTime( $deletionTime ) {
482
		$this->deletionTime = $deletionTime;
483
484
		return $this;
485
	}
486
487
	/**
488
	 * @return \DateTime|null
489
	 */
490
	public function getDeletionTime() {
491
		return $this->deletionTime;
492
	}
493
494
	/**
495
	 * @param \DateTime $dtExp
496
	 * @return self
497
	 */
498
	public function setDtExp( $dtExp ) {
499
		$this->dtExp = $dtExp;
500
501
		return $this;
502
	}
503
504
	/**
505
	 * @return \DateTime
506
	 */
507
	public function getDtExp() {
508
		return $this->dtExp;
509
	}
510
511
	/**
512
	 * @param string $status
513
	 * @return self
514
	 */
515
	public function setStatus( $status ) {
516
		$this->status = $status;
517
518
		return $this;
519
	}
520
521
	/**
522
	 * @return string
523
	 */
524
	public function getStatus() {
525
		return $this->status;
526
	}
527
528
	/**
529
	 * @param \DateTime $dtGruen
530
	 * @return self
531
	 */
532
	public function setDtGruen( $dtGruen ) {
533
		$this->dtGruen = $dtGruen;
534
535
		return $this;
536
	}
537
538
	/**
539
	 * @return \DateTime
540
	 */
541
	public function getDtGruen() {
542
		return $this->dtGruen;
543
	}
544
545
	/**
546
	 * @param \DateTime $dtBackup
547
	 * @return self
548
	 */
549
	public function setDtBackup( $dtBackup ) {
550
		$this->dtBackup = $dtBackup;
551
552
		return $this;
553
	}
554
555
	/**
556
	 * @return \DateTime
557
	 */
558
	public function getDtBackup() {
559
		return $this->dtBackup;
560
	}
561
562
	/**
563
	 * @return integer|null
564
	 */
565
	public function getId() {
566
		return $this->id;
567
	}
568
569
	/**
570
	 * @since 2.0
571
	 *
572
	 * @param integer|null $id
573
	 */
574
	public function setId( $id ) {
575
		$this->id = $id;
576
	}
577
578
	public function getUExpiry() {
579
		return $this->getDecodedData()[ 'uexpiry' ];
580
	}
581
582
	public function uTokenIsExpired() {
583
		return time() > strtotime( $this->getUExpiry() );
584
	}
585
586
	public function validateToken( $tokenToCheck, $serverSecret ) {
587
		$checkToken = preg_replace( '/\$.*$/', '', $tokenToCheck );
588
589
		$checkToken = $checkToken . '$' .
590
			sha1( sha1( "$checkToken+$serverSecret" ) . '|' .
591
				sha1( "{$this->id}+$serverSecret" ) . '|' .
592
				sha1( "{$this->creationTime->format( 'Y-m-d H:i:s' )}+$serverSecret" ) );
593
		return $checkToken === $tokenToCheck;
594
	}
595
596
	public function getEntryType( $mode = null ) {
597
		$data = $this->getDecodedData();
598
599
		if ( $mode === null ) {
600
			$mode = $this->publicRecord;
601
			if ( !is_int( $mode ) ) {
602
				return $this->publicRecord;
603
			}
604
		}
605
606
		if ( $mode == 1 || $mode == 2 ) {
607
			$eintrag = $this->donorFullName;
608
		} else {
609
			$eintrag = "anonym";
610
		}
611
612
		if ( ( $mode == 1 || $mode == 3 ) && !empty( $data[ "ort" ] ) ) {
613
			$eintrag .= ", " . $data[ "ort" ];
614
		}
615
616
		return $eintrag;
617
	}
618
619
	/**
620
	 * @deprecated since 2.0, use encodeAndSetData or setDataObject instead
621
	 *
622
	 * @param string $data Base 64 encoded, serialized PHP array
623
	 * @return self
624
	 */
625
	public function setData( $data ) {
626
		$this->data = $data;
627
628
		return $this;
629
	}
630
631
	/**
632
	 * @deprecated since 2.0, use @see getDecodedData or @see getDataObject instead
633
	 *
634
	 * @return string Base 64 encoded, serialized PHP array
635
	 */
636
	public function getData() {
637
		return $this->data;
638
	}
639
640
	/**
641
	 * NOTE: if possible, use @see getDataObject instead, as it provides a nicer API.
642
	 *
643
	 * @since 2.0
644
	 * @return array
645
	 */
646
	public function getDecodedData() {
647
		$data = unserialize( base64_decode( $this->data ) );
648
649
		return is_array( $data ) ? $data : [];
650
	}
651
652
	/**
653
	 * NOTE: if possible, use @see modifyDataObject instead, as it provides a nicer API.
654
	 *
655
	 * @since 2.0
656
	 * @param array $data
657
	 */
658
	public function encodeAndSetData( array $data ) {
659
		$this->data = base64_encode( serialize( $data ) );
660
	}
661
662
	/**
663
	 * WARNING: updates made to the return value will not be reflected in the Donation state.
664
	 * Similarly, updates to the Donation state will not propagate to the returned object.
665
	 * To update the Donation state, explicitly call @see setDataObject.
666
	 *
667
	 * @since 2.0
668
	 * @return DonationData
669
	 */
670
	public function getDataObject() {
671
		$dataArray = $this->getDecodedData();
672
673
		$data = new DonationData();
674
675
		$data->setAccessToken( array_key_exists( 'token', $dataArray ) ? $dataArray['token'] : null );
676
		$data->setUpdateToken( array_key_exists( 'utoken', $dataArray ) ? $dataArray['utoken'] : null );
677
		$data->setUpdateTokenExpiry( array_key_exists( 'uexpiry', $dataArray ) ? $dataArray['uexpiry'] : null );
678
679
		return $data;
680
	}
681
682
	/**
683
	 * @since 2.0
684
	 * @param DonationData $data
685
	 */
686
	public function setDataObject( DonationData $data ) {
687
		$dataArray = array_merge(
688
			$this->getDecodedData(),
689
			[
690
				'token' => $data->getAccessToken(),
691
				'utoken' => $data->getUpdateToken(),
692
				'uexpiry' => $data->getUpdateTokenExpiry(),
693
			]
694
		);
695
696
		foreach ( [ 'token', 'utoken', 'uexpiry' ] as $keyName ) {
697
			if ( is_null( $dataArray[$keyName] ) ) {
698
				unset( $dataArray[$keyName] );
699
			}
700
		}
701
702
		$this->encodeAndSetData( $dataArray );
703
	}
704
705
	/**
706
	 * @since 2.0
707
	 * @param callable $modificationFunction Takes a modifiable DonationData parameter
708
	 */
709
	public function modifyDataObject( callable $modificationFunction ) {
710
		$dataObject = $this->getDataObject();
711
		$modificationFunction( $dataObject );
712
		$this->setDataObject( $dataObject );
713
	}
714
715
}
716