PluginProbe
GiveWP – Donation Plugin and Fundraising Platform / 2.17.0
GiveWP – Donation Plugin and Fundraising Platform v2.17.0
4.16.8 4.16.7.2 4.16.7.1 4.16.7 4.16.6.1 4.16.6 4.16.5.1 4.16.5 4.16.4 4.16.3 4.16.2 4.16.1 4.16.0 4.15.5 4.15.4 4.15.3 4.15.2 4.15.1 4.15.0 2.3.0 2.3.1 2.3.2 2.30.0 2.31.0 2.31.1 All 253 releases
give / src / Tracking / AdminActionHandler.php
AdminActionHandler.php
170 lines 4.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 namespace Give\Tracking;
3
4 use Give\Tracking\Events\ActiveDonationFormsFirstTimeTracking;
5 use Give\Tracking\Events\DonationMetricsTracking;
6 use Give\Tracking\Events\GivePluginSettingsTracking;
7 use Give\Tracking\Events\PluginsTracking;
8 use Give\Tracking\Events\ThemeTracking;
9 use Give\Tracking\Repositories\Settings;
10 use Give\Tracking\Repositories\TelemetryAccessDetails;
11 use Give\Tracking\Repositories\TrackEvents;
12 use Give_Admin_Settings;
13
14 /**
15 * Class AdminActionHandler
16 * @package Give\Tracking
17 *
18 * This class uses to handle actions in WP Backed.
19 *
20 * @since 2.10.0
21 */
22 class AdminActionHandler {
23 /**
24 * @var UsageTrackingOnBoarding
25 */
26 private $usageTrackingOnBoarding;
27
28 /**
29 * @var Settings
30 */
31 private $settings;
32
33 /**
34 * @var TelemetryAccessDetails
35 */
36 private $telemetryAccessDetails;
37
38 /**
39 * @var AccessToken
40 */
41 private $accessToken;
42
43 /**
44 * @param UsageTrackingOnBoarding $usageTrackingOnBoarding
45 * @param Settings $settings
46 * @param TelemetryAccessDetails $telemetryAccessDetails
47 * @param AccessToken $accessToken
48 */
49 public function __construct(
50 UsageTrackingOnBoarding $usageTrackingOnBoarding,
51 Settings $settings,
52 TelemetryAccessDetails $telemetryAccessDetails,
53 AccessToken $accessToken
54 ) {
55 $this->usageTrackingOnBoarding = $usageTrackingOnBoarding;
56 $this->settings = $settings;
57 $this->telemetryAccessDetails = $telemetryAccessDetails;
58 $this->accessToken = $accessToken;
59 }
60
61 /**
62 * Handle opt_out_into_tracking give action.
63 *
64 * @since 2.10.0
65 */
66 public function optOutFromUsageTracking() {
67 if ( ! current_user_can( 'manage_give_settings' ) ) {
68 return;
69 }
70
71 $timestamp = '0'; // zero value disable notice permanently.
72 if ( 'hide_opt_in_notice_shortly' === $_GET['give_action'] ) {
73 $timestamp = DAY_IN_SECONDS * 2 + time();
74 }
75
76 $this->usageTrackingOnBoarding->disableNotice( $timestamp );
77
78 wp_safe_redirect( remove_query_arg( 'give_action' ) );
79 exit();
80 }
81
82 /**
83 * Handle opt_in_into_tracking give action.
84 *
85 * @since 2.10.0
86 */
87 public function optInToUsageTracking() {
88 if ( ! current_user_can( 'manage_give_settings' ) ) {
89 return;
90 }
91
92 $this->settings->saveUsageTrackingOptionValue( 'enabled' );
93 $this->usageTrackingOnBoarding->disableNotice( 0 );
94
95 if ( $this->accessToken->store() ) {
96 $this->recordTracks();
97 } else {
98 $this->settings->saveUsageTrackingOptionValue( 'disabled' );
99 }
100
101 wp_safe_redirect( remove_query_arg( 'give_action' ) );
102 exit();
103 }
104
105 /**
106 * OptIn website to telemetry server when admin grant by changing setting.
107 *
108 * @since 2.10.0
109 *
110 * @param array $oldValue
111 * @param array $newValue
112 *
113 * @return false
114 */
115 public function optInToUsageTrackingAdminGrantManually( $oldValue, $newValue ) {
116 $class = __CLASS__;
117 add_filter( "give_disable_hook-update_option_give_settings:{$class}@optInToUsageTrackingAdminGrantManually", '__return_true' );
118
119 $section = isset( $_GET['section'] ) ? 'advanced-options' : '';
120 if ( ! Give_Admin_Settings::is_setting_page( 'advanced', $section ) ) {
121 return false;
122 }
123
124 $usageTracking = $newValue[ Settings::USAGE_TRACKING_OPTION_KEY ] ?: 'disabled';
125 $usageTracking = give_is_setting_enabled( $usageTracking );
126 $hasAccessToken = $this->telemetryAccessDetails->hasAccessTokenOptionValue();
127
128 // Send plugin information immediately when edit tracking setting.
129 if ( $hasAccessToken ) {
130 /* @var TrackJob $trackJob */
131 $trackJob = give( TrackJob::class );
132 $trackJob->sendNow( [ GivePluginSettingsTracking::class ] );
133 }
134
135 // Exit if already has access token.
136 if ( ! $usageTracking || $hasAccessToken ) {
137 return false;
138 }
139
140 if ( $this->accessToken->store() ) {
141 $this->recordTracks();
142 } else {
143 $this->settings->saveUsageTrackingOptionValue( 'disabled' );
144 }
145
146 remove_filter( "give_disable_hook-update_option_give_settings:{$class}@optInToUsageTrackingAdminGrantManually", '__return_false' );
147
148 return true;
149 }
150
151 /**
152 * Schedule first set of tracking information.
153 *
154 * @since 2.10.0
155 */
156 private function recordTracks() {
157 /* @var TrackJob $trackJob */
158 $trackJob = give( TrackJob::class );
159 $trackJob->sendNow(
160 [
161 ActiveDonationFormsFirstTimeTracking::class,
162 DonationMetricsTracking::class,
163 ThemeTracking::class,
164 GivePluginSettingsTracking::class,
165 PluginsTracking::class,
166 ]
167 );
168 }
169 }
170