diff --git a/src/Admin/Provisioning.php b/src/Admin/Provisioning.php index f988d40..04c7dd0 100644 --- a/src/Admin/Provisioning.php +++ b/src/Admin/Provisioning.php @@ -110,6 +110,7 @@ private function init() { add_action( 'update_option_plausible_analytics_settings', [ $this, 'maybe_create_goals' ], 10, 2 ); add_action( 'update_option_plausible_analytics_settings', [ $this, 'maybe_delete_goals' ], 11, 2 ); add_action( 'update_option_plausible_analytics_settings', [ $this, 'maybe_create_custom_properties' ], 11, 2 ); + add_filter( 'pre_update_option_plausible_analytics_settings', [ $this, 'maybe_enable_customer_user_roles' ] ); } /** @@ -373,4 +374,32 @@ public function maybe_create_custom_properties( $old_settings, $settings ) { $this->client->enable_custom_property( $create_request ); } + + /** + * Auto-enables tracking of the 'Customer' user role for WC, 'Subscriber' user role for EDD and 'EDD_Subscriber' user role for EDD Recurring + * if Revenue tracking and one of these plugins is enabled. + * + * @param $settings + * + * @return array + */ + public function maybe_enable_customer_user_roles( $settings ) { + $enhanced_measurements = $settings[ 'enhanced_measurements' ]; + + if ( Helpers::is_enhanced_measurement_enabled( 'revenue', $enhanced_measurements ) ) { + if ( Integrations::is_wc_active() && ! in_array( 'customer', $settings[ 'tracked_user_roles' ] ) ) { + $settings[ 'tracked_user_roles' ][] = 'customer'; + } + + if ( Integrations::is_edd_active() && ! in_array( 'subscriber', $settings[ 'tracked_user_roles' ] ) ) { + $settings[ 'tracked_user_roles' ][] = 'subscriber'; + } + + if ( Integrations::is_edd_recurring_active() && ! in_array( 'edd_subscriber', $settings[ 'tracked_user_roles' ] ) ) { + $settings[ 'tracked_user_roles' ][] = 'edd_subscriber'; + } + } + + return $settings; + } } diff --git a/src/Integrations.php b/src/Integrations.php index bcda641..247c29d 100644 --- a/src/Integrations.php +++ b/src/Integrations.php @@ -65,4 +65,12 @@ public static function is_edd_active() { public static function is_form_submit_active() { return apply_filters( 'plausible_analytics_integrations_form_submit', Helpers::is_enhanced_measurement_enabled( 'form-completions' ) ); } + + /** + * Checks if EDD Recurring is installed and activated. + * @return mixed|null + */ + public static function is_edd_recurring_active() { + return apply_filters( 'plausible_analytics_integrations_edd_recurring', function_exists( 'EDD_Recurring' ) && Helpers::is_enhanced_measurement_enabled( 'revenue' ) ); + } } diff --git a/tests/integration/Admin/ProvisioningTest.php b/tests/integration/Admin/ProvisioningTest.php index aeed673..71db0c2 100644 --- a/tests/integration/Admin/ProvisioningTest.php +++ b/tests/integration/Admin/ProvisioningTest.php @@ -123,4 +123,39 @@ public function testCreateGoalRequest() { $this->assertInstanceOf( 'Plausible\Analytics\WP\Client\Model\GoalCreateRequestCustomEvent', $custom_event ); } + + /** + * @see Provisioning::maybe_enable_customer_user_roles() + * @return void + */ + public function testMaybeEnableCustomerUserRole() { + $class = new Provisioning( false ); + $settings = []; + $settings[ 'enhanced_measurements' ] = [ 'revenue' ]; + $settings[ 'tracked_user_roles' ] = []; + + add_filter( 'plausible_analytics_integrations_woocommerce', '__return_true' ); + + $new_settings = $class->maybe_enable_customer_user_roles( $settings ); + + remove_filter( 'plausible_analytics_integrations_woocommerce', '__return_true' ); + + $this->assertTrue( in_array( 'customer', $new_settings[ 'tracked_user_roles' ] ) ); + + add_filter( 'plausible_analytics_integrations_edd', '__return_true' ); + + $new_settings = $class->maybe_enable_customer_user_roles( $settings ); + + remove_filter( 'plausible_analytics_integrations_edd', '__return_true' ); + + $this->assertTrue( in_array( 'subscriber', $new_settings[ 'tracked_user_roles' ] ) ); + + add_filter( 'plausible_analytics_integrations_edd_recurring', '__return_true' ); + + $new_settings = $class->maybe_enable_customer_user_roles( $settings ); + + remove_filter( 'plausible_analytics_integrations_edd_recurring', '__return_true' ); + + $this->assertTrue( in_array( 'edd_subscriber', $new_settings[ 'tracked_user_roles' ] ) ); + } }