From 8b5982af0a63ead605bba3cc230604572a2b27d0 Mon Sep 17 00:00:00 2001 From: Leo Germani Date: Tue, 7 Mar 2023 09:01:29 -0300 Subject: [PATCH] feat: add GA4 donation events --- .../data-events/connectors/ga4/class-ga4.php | 69 ++++++++++++++++++- tests/unit-tests/ga4-connector.php | 44 ++++++++++++ 2 files changed, 111 insertions(+), 2 deletions(-) diff --git a/includes/data-events/connectors/ga4/class-ga4.php b/includes/data-events/connectors/ga4/class-ga4.php index 652dfb9300..72cdec3852 100644 --- a/includes/data-events/connectors/ga4/class-ga4.php +++ b/includes/data-events/connectors/ga4/class-ga4.php @@ -31,6 +31,8 @@ class GA4 { public static $watched_events = [ 'reader_logged_in', 'reader_registered', + 'donation_new', + 'donation_subscription_cancelled', ]; /** @@ -139,7 +141,7 @@ public static function filter_event_body( $body, $event_name ) { /** * Handler for the reader_logged_in event. * - * @param int $params The GA4 event parameters. + * @param array $params The GA4 event parameters. * @param array $data Data associated with the Data Events api event. * * @return array $params The final version of the GA4 event params that will be sent to GA. @@ -151,7 +153,7 @@ public static function handle_reader_logged_in( $params, $data ) { /** * Handler for the reader_registered event. * - * @param int $params The GA4 event parameters. + * @param array $params The GA4 event parameters. * @param array $data Data associated with the Data Events api event. * * @return array $params The final version of the GA4 event params that will be sent to GA. @@ -167,6 +169,69 @@ public static function handle_reader_registered( $params, $data ) { return $params; } + /** + * Handler for the donation_new event. + * + * @param array $params The GA4 event parameters. + * @param array $data Data associated with the Data Events api event. + * + * @return array $params The final version of the GA4 event params that will be sent to GA. + */ + public static function handle_donation_new( $params, $data ) { + $params['amount'] = $data['amount']; + $params['currency'] = $data['currency']; + $params['recurrence'] = $data['recurrence']; + $params['platform'] = $data['platform']; + $params['referer'] = $data['referer'] ?? ''; + $params['popup_id'] = $data['popup_id'] ?? ''; + $params['range'] = self::get_donation_amount_range( $data['amount'] ); + return $params; + } + + /** + * Handler for the donation_subscription_cancelled event. + * + * @param array $params The GA4 event parameters. + * @param array $data Data associated with the Data Events api event. + * + * @return array $params The final version of the GA4 event params that will be sent to GA. + */ + public static function handle_donation_subscription_cancelled( $params, $data ) { + $params['amount'] = $data['amount']; + $params['currency'] = $data['currency']; + $params['recurrence'] = $data['recurrence']; + $params['platform'] = $data['platform']; + $params['range'] = self::get_donation_amount_range( $data['amount'] ); + return $params; + } + + /** + * Gets the value of the donation range metadata based on the donation amount. + * + * @param mixed $amount The donation amount. + * @return string + */ + public static function get_donation_amount_range( $amount ) { + + $amount = (float) $amount; + + if ( 0.0 === $amount ) { + return ''; + } elseif ( $amount < 20 ) { + return 'under-20'; + } elseif ( $amount < 51 ) { + return '20-50'; + } elseif ( $amount < 101 ) { + return '51-100'; + } elseif ( $amount < 201 ) { + return '101-200'; + } elseif ( $amount < 501 ) { + return '201-500'; + } else { + return 'over-500'; + } + } + /** * Gets the credentials for the GA4 API. * diff --git a/tests/unit-tests/ga4-connector.php b/tests/unit-tests/ga4-connector.php index d9082b247f..4541ebe3d5 100644 --- a/tests/unit-tests/ga4-connector.php +++ b/tests/unit-tests/ga4-connector.php @@ -6,6 +6,7 @@ */ use Newspack\Data_Events\Connectors\GA4\Event; +use Newspack\Data_Events\Connectors\GA4; /** * Tests the GA 4 connector. @@ -321,4 +322,47 @@ public function validate_params_data() { ], ]; } + + /** + * Data provider for test_validate_param_name + */ + public function get_donation_amount_range_data() { + return [ + [ + 12, + 'under-20', + ], + [ + 'zdxasd', + '', + ], + [ + 0, + '', + ], + [ + '53.12', + '51-100', + ], + [ + 420, + '201-500', + ], + [ + 200, + '101-200', + ], + ]; + } + + /** + * Tests the sanitize_value method + * + * @param mixed $value The param value. + * @param mixed $expected The expected result. + * @dataProvider get_donation_amount_range_data + */ + public function test_get_donation_amount_range( $value, $expected ) { + $this->assertEquals( $expected, GA4::get_donation_amount_range( $value ) ); + } }