PluginProbe ʕ •ᴥ•ʔ
WP STAGING – WordPress Backups, Restore, Migration & Clone / 4.9.4
WP STAGING – WordPress Backups, Restore, Migration & Clone v4.9.4
4.9.5 4.9.4 4.9.3 4.9.2 4.9.1 4.9.0 4.8.1 trunk 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.10.0 3.2.0 3.3.1 3.3.2 3.3.3 3.4.1 3.4.3 3.5.0 3.6.0 3.7.1 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.8.6 3.8.7 3.9.0 3.9.1 3.9.2 3.9.3 3.9.4 4.0.0 4.1.0 4.1.1 4.1.2 4.1.3 4.1.4 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.0 4.7.0 4.7.1 4.7.2 4.7.3 4.8.0
wp-staging / Framework / AnalyticsServiceProvider.php
wp-staging / Framework Last commit date
Adapter 2 weeks ago Analytics 1 month ago Assets 3 weeks ago BackgroundProcessing 2 weeks ago CloningProcess 1 month ago Collection 3 years ago Command 5 years ago Component 9 months ago DI 8 months ago Database 1 month ago DependencyResolver 2 years ago Exceptions 2 years ago Facades 3 months ago Filesystem 1 week ago Interfaces 5 years ago Job 1 week ago Language 3 weeks ago Logger 2 months ago Mails 4 months ago Network 3 weeks ago Newsfeed 5 months ago Notices 3 weeks ago Performance 3 months ago Permalinks 1 year ago Queue 5 months ago Rest 3 months ago Security 2 months ago Settings 2 months ago TemplateEngine 8 months ago ThirdParty 6 months ago Traits 1 week ago Upgrade 2 months ago Utils 1 month ago AnalyticsServiceProvider.php 1 month ago AssetServiceProvider.php 1 year ago CommonServiceProvider.php 2 months ago ErrorHandler.php 1 month ago NoticeServiceProvider.php 1 year ago SettingsServiceProvider.php 3 months ago SiteInfo.php 1 week ago Url.php 5 months ago
AnalyticsServiceProvider.php
116 lines
1 <?php
2
3 namespace WPStaging\Framework;
4
5 use WPStaging\Core\WPStaging;
6 use WPStaging\Framework\Analytics\AnalyticsConsent;
7 use WPStaging\Framework\Analytics\AnalyticsEventDto;
8 use WPStaging\Framework\Analytics\AnalyticsGenericEventHandler;
9 use WPStaging\Framework\Analytics\AnalyticsSender;
10 use WPStaging\Framework\DI\FeatureServiceProvider;
11 use WPStaging\Framework\Notices\Notices;
12 use WPStaging\Framework\Security\Auth;
13 use WPStaging\Framework\Utils\Cache\Cache;
14 use WPStaging\Framework\Utils\Sanitize;
15
16 class AnalyticsServiceProvider extends FeatureServiceProvider
17 {
18 /** @var Sanitize */
19 private $sanitize;
20
21 public static function getFeatureTrigger()
22 {
23 return 'WPSTG_FEATURE_ANALYTICS';
24 }
25
26 protected function registerClasses()
27 {
28 $this->container->singleton(AnalyticsConsent::class);
29 $this->container->singleton(AnalyticsSender::class);
30 }
31
32 protected function addHooks()
33 {
34 add_action(Notices::ACTION_ADMIN_NOTICES, $this->container->callback(AnalyticsConsent::class, 'maybeShowConsentFailureNotice'));
35 add_action('admin_init', $this->container->callback(AnalyticsConsent::class, 'listenForConsent'));
36
37 $this->sanitize = WPStaging::make(Sanitize::class);
38
39 /*
40 * Analytics error detection for Backup actions
41 *
42 * The AJAX event name avoids using "analytics_error" on purpose to
43 * avoid ad blocks from blocking the request from happening.
44 *
45 * "analytics" should never be mentioned in JavaScript, only on server-side.
46 */
47 add_action("wp_ajax_wpstg_job_error", function () { // phpcs:ignore WPStaging.Security.AuthorizationChecked
48 if (empty($_POST)) {
49 return;
50 }
51
52 if (!$this->container->make(Auth::class)->isAuthenticatedRequest()) {
53 return;
54 }
55
56 foreach (['error_message', 'job_id'] as $requiredKeys) {
57 if (!isset($_POST[$requiredKeys])) {
58 return;
59 }
60 }
61
62 $errorMessage = isset($_POST['error_message']) ? $this->sanitize->htmlDecodeAndSanitize($_POST['error_message']) : '';
63
64 $jobId = isset($_POST['job_id']) ? $this->sanitize->htmlDecodeAndSanitize($_POST['job_id']) : '';
65
66 AnalyticsEventDto::enqueueErrorEvent($jobId, $errorMessage);
67 });
68
69 // Analytics error detection for Staging actions
70 add_action("wp_ajax_wpstg_staging_job_error", function () { // phpcs:ignore WPStaging.Security.AuthorizationChecked
71 if (empty($_POST)) {
72 return;
73 }
74
75 if (!$this->container->make(Auth::class)->isAuthenticatedRequest()) {
76 return;
77 }
78
79 foreach (['error_message'] as $requiredKeys) {
80 if (!isset($_POST[$requiredKeys])) {
81 return;
82 }
83 }
84
85 // prevent emptying HTML string, as Staging errors might be returned in HTML (?)
86 $errorMessage = isset($_POST['error_message']) ? $this->sanitize->htmlDecodeAndSanitize($_POST['error_message']) : '';
87
88 /**
89 * Get the "options" object from cache
90 * @see \WPStaging\Backend\Modules\Jobs\Job::__construct
91 * @var Cache $cache
92 */
93 $cache = WPStaging::make(Cache::class);
94 $cache->setLifetime(-1); // Non-expireable file
95 $cache->setPath(WPStaging::getContentDir());
96
97 $options = $cache->get("clone_options");
98
99 $jobId = '';
100 if (is_object($options) && property_exists($options, 'jobIdentifier')) {
101 $jobId = $options->jobIdentifier;
102 }
103
104 if (empty($jobId)) {
105 return;
106 }
107
108 AnalyticsEventDto::enqueueErrorEvent($jobId, $errorMessage);
109 });
110
111 add_action('wp_ajax_wpstg_event_generic', $this->container->callback(AnalyticsGenericEventHandler::class, 'ajaxHandleGenericEvent')); // phpcs:ignore WPStaging.Security.AuthorizationChecked
112
113 $this->container->make(AnalyticsSender::class)->maybeSend();
114 }
115 }
116