Passed
Pull Request — master (#1936)
by
unknown
63:36
created

BucketLoggingHandler::getSubscribedEvents()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 3
c 0
b 0
f 0
nc 1
nop 0
dl 0
loc 4
rs 10
1
<?php
2
3
declare( strict_types = 1 );
4
5
namespace WMDE\Fundraising\Frontend\Infrastructure\EventHandling\DomainEventHandler;
6
7
use WMDE\Fundraising\DonationContext\Domain\Event\DonationCreatedEvent;
8
use WMDE\Fundraising\Frontend\BucketTesting\Logging\BucketLogger;
9
use WMDE\Fundraising\Frontend\BucketTesting\Logging\Events\DonationCreated;
10
use WMDE\Fundraising\Frontend\BucketTesting\Logging\Events\MembershipApplicationCreated;
11
use WMDE\Fundraising\Frontend\Infrastructure\EventHandling\EventDispatcher;
12
use WMDE\Fundraising\MembershipContext\Domain\Event\MembershipCreatedEvent;
13
14
/**
15
 * Log the visitors bucket IDs when they donate or apply for membership
16
 */
17
class BucketLoggingHandler {
18
19
	private BucketLogger $bucketLogger;
20
21
	/** @var callable */
22
	private $getSelectedBuckets;
23
24
	private bool $consentGiven = false;
25
26
	public function __construct( BucketLogger $bucketLogger, callable $getSelectedBuckets ) {
27
		$this->bucketLogger = $bucketLogger;
28
		$this->getSelectedBuckets = $getSelectedBuckets;
29
	}
30
31
	public function onDonationCreated( DonationCreatedEvent $event ): void {
32
		if ( !$this->consentGiven ) {
33
			return;
34
		}
35
36
		$this->bucketLogger->writeEvent(
37
			new DonationCreated( $event->getDonationId() ),
38
			...\call_user_func( $this->getSelectedBuckets )
39
		);
40
	}
41
42
	public function onMembershipCreated( MembershipCreatedEvent $event ): void {
43
		if ( !$this->consentGiven ) {
44
			return;
45
		}
46
47
		$this->bucketLogger->writeEvent(
48
			new MembershipApplicationCreated( $event->getMembershipId() ),
49
			...\call_user_func( $this->getSelectedBuckets )
50
		);
51
	}
52
53
	public function setConsentGiven( bool $consentGiven ): void {
54
		$this->consentGiven = $consentGiven;
55
	}
56
57
	public static function getSubscribedEvents() {
58
		return [
59
			DonationCreatedEvent::class => 'onDonationCreated',
60
			MembershipCreatedEvent::class => 'onMembershipCreated',
61
		];
62
	}
63
}
64