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

Donation::setPeriod()   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
	/**
18
	 * @var integer
19
	 *
20
	 * @ORM\Column(name="id", type="integer")
21
	 * @ORM\Id
22
	 * @ORM\GeneratedValue(strategy="IDENTITY")
23
	 */
24
	private $id;
25
26
	/**
27
	 * @var string
28
	 *
29
	 * @ORM\Column(name="status", type="string", length=1, options={"default":"N", "fixed":true}, nullable=false)
30
	 */
31
	private $status = 'N';
32
33
	/**
34
	 * @var string
35
	 *
36
	 * @ORM\Column(name="name", type="string", length=250, nullable=true)
37
	 */
38
	private $donorFullName;
39
40
	/**
41
	 * @var string
42
	 *
43
	 * @ORM\Column(name="ort", type="string", length=250, nullable=true)
44
	 */
45
	private $donorCity;
46
47
	/**
48
	 * @var string
49
	 *
50
	 * @ORM\Column(name="email", type="string", length=250, nullable=true)
51
	 */
52
	private $donorEmail;
53
54
	/**
55
	 * @var boolean
56
	 *
57
	 * @ORM\Column(name="info", type="boolean", options={"default":0}, nullable=false)
58
	 */
59
	private $donorOptsIntoNewsletter = 0;
60
61
	/**
62
	 * @var boolean
63
	 *
64
	 * @ORM\Column(name="bescheinigung", type="boolean", nullable=true)
65
	 */
66
	private $donationReceipt;
67
68
	/**
69
	 * @var string
70
	 *
71
	 * @ORM\Column(name="eintrag", type="string", length=250, options={"default":""}, nullable=false)
72
	 */
73
	private $publicRecord = '';
74
75
	/**
76
	 * @var string
77
	 *
78
	 * @ORM\Column(name="betrag", type="string", length=250, nullable=true)
79
	 */
80
	private $amount;
81
82
	/**
83
	 * @var integer
84
	 *
85
	 * @ORM\Column(name="periode", type="smallint", options={"default":0}, nullable=false)
86
	 */
87
	private $paymentIntervalInMonths = 0;
88
89
	/**
90
	 * @var string
91
	 *
92
	 * @ORM\Column(name="zahlweise", type="string", length=3, options={"default":"BEZ", "fixed":true}, nullable=false)
93
	 */
94
	private $paymentType = 'BEZ';
95
96
	/**
97
	 * @var string
98
	 *
99
	 * @ORM\Column(name="kommentar", type="text", options={"default":""}, nullable=false)
100
	 */
101
	private $comment = '';
102
103
	/**
104
	 * @var string
105
	 *
106
	 * @ORM\Column(name="ueb_code", type="string", length=32, options={"default":""}, nullable=false)
107
	 */
108
	private $bankTransferCode = '';
109
110
	/**
111
	 * @var string
112
	 *
113
	 * @ORM\Column(name="data", type="text", nullable=true)
114
	 */
115
	private $data;
116
117
	/**
118
	 * @var string
119
	 *
120
	 * @ORM\Column(name="source", type="string", length=250, nullable=true)
121
	 */
122
	private $source;
123
124
	/**
125
	 * @var string
126
	 *
127
	 * @ORM\Column(name="remote_addr", type="string", length=250, options={"default":""}, nullable=false)
128
	 */
129
	private $remoteAddr = '';
130
131
	/**
132
	 * @var string
133
	 *
134
	 * @ORM\Column(name="hash", type="string", length=250, nullable=true)
135
	 */
136
	private $hash;
137
138
	/**
139
	 * @var boolean
140
	 *
141
	 * @ORM\Column(name="is_public", type="boolean", options={"default":0}, nullable=false)
142
	 */
143
	private $isPublic = 0;
144
145
	/**
146
	 * @var \DateTime
147
	 *
148
	 * @Gedmo\Timestampable(on="create")
149
	 * @ORM\Column(name="dt_new", type="datetime")
150
	 */
151
	private $creationTime;
152
153
	/**
154
	 * @var \DateTime
155
	 *
156
	 * @ORM\Column(name="dt_del", type="datetime", nullable=true)
157
	 */
158
	private $deletionTime;
159
160
	/**
161
	 * @var \DateTime
162
	 *
163
	 * @ORM\Column(name="dt_exp", type="datetime", nullable=true)
164
	 */
165
	private $dtExp;
166
167
	/**
168
	 * @var \DateTime
169
	 *
170
	 * @ORM\Column(name="dt_gruen", type="datetime", nullable=true)
171
	 */
172
	private $dtGruen;
173
174
	/**
175
	 * @var \DateTime
176
	 *
177
	 * @ORM\Column(name="dt_backup", type="datetime", nullable=true)
178
	 */
179
	private $dtBackup;
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