PluginProbe ʕ •ᴥ•ʔ
Matomo Analytics – Powerful, Privacy-First Insights for WordPress / 5.10.1
Matomo Analytics – Powerful, Privacy-First Insights for WordPress v5.10.1
5.11.1 5.11.0 5.10.2 5.10.1 trunk 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.1.0 1.1.1 1.1.2 1.1.3 1.2.0 1.3.0 1.3.1 1.3.2 4.0.0 4.0.1 4.0.2 4.0.3 4.0.4 4.1.0 4.1.1 4.1.2 4.1.3 4.10.0 4.11.0 4.12.0 4.13.0 4.13.2 4.13.3 4.13.4 4.13.5 4.14.0 4.14.1 4.14.2 4.15.0 4.15.1 4.15.2 4.15.3 4.2.0 4.3.0 4.3.1 4.4.1 4.4.2 4.5.0 4.6.0 5.0.1 5.0.2 5.0.3 5.0.4 5.0.5 5.0.6 5.0.7 5.0.8 5.1.0 5.1.1 5.1.2 5.1.3 5.1.4 5.1.5 5.1.6 5.1.7 5.10.0 5.2.0 5.2.1 5.2.2 5.3.0 5.3.1 5.3.2 5.3.3 5.6.0 5.6.1 5.7.0 5.7.1 5.8.0 5.8.1 5.8.2
matomo / classes / WpMatomo / Admin / PluginSuggestions / Suggestions / AdvertisingConversionExport.php
matomo / classes / WpMatomo / Admin / PluginSuggestions / Suggestions Last commit date
AdvertisingConversionExport.php 3 months ago Funnels.php 3 months ago HeatmapSessionRecording.php 3 months ago SearchEngineKeywordsPerformance.php 3 months ago UsersFlow.php 3 months ago WpPremiumBundle.php 3 months ago
AdvertisingConversionExport.php
81 lines
1 <?php
2 /**
3 * Matomo - free/libre analytics platform
4 *
5 * @link https://matomo.org
6 * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
7 * @package matomo
8 */
9
10 namespace WpMatomo\Admin\PluginSuggestions\Suggestions;
11
12 if ( ! defined( 'ABSPATH' ) ) {
13 exit; // if accessed directly
14 }
15
16 use Piwik\Common;
17 use Piwik\DataTable;
18 use Piwik\Tracker\Request;
19 use WpMatomo\Admin\PluginSuggestions\Suggestion;
20
21 class AdvertisingConversionExport extends Suggestion {
22
23 const LAST_CLICK_ID_OCCURRENCE_OPTION_NAME = 'matomo_last_click_id_occurrence';
24
25 const CLICK_IDS = [
26 'msclkid',
27 'fbclid',
28 'gclid',
29 'li_fat_id',
30 'yclid',
31 ];
32
33 public function should_trigger() {
34 // check that the last detected click ID for advertising services occurred less than one month ago
35 $last_click_id_occurrence = get_option( self::LAST_CLICK_ID_OCCURRENCE_OPTION_NAME );
36 if (
37 empty( $last_click_id_occurrence )
38 || ! is_numeric( $last_click_id_occurrence )
39 ) {
40 return false;
41 }
42
43 $thirty_days_secs = 30 * 24 * 60 * 60;
44 return $last_click_id_occurrence > time() - $thirty_days_secs;
45 }
46
47 public function init() {
48 $this->plugin_slug = 'AdvertisingConversionExport';
49 $this->plugin_name = 'Advertising Conversion Export';
50 $this->plugin_desc_long = __( 'You are doing SEA. Improve your ad campaigns with real conversion data!', 'matomo' );
51 $this->plugin_desc_short = __( 'Integrate your Matomo conversion data with top ad platforms', 'matomo' );
52 $this->trigger_desc_short = __( 'Paid Traffic', 'matomo' );
53 $this->trigger_desc_long = __( 'Paid traffic detected', 'matomo' );
54 $this->image_file = 'advertising-conversion-export.webp';
55 }
56
57 public function register_hooks() {
58 add_action( 'matomo_tracker_manipulate_request', [ $this, 'detect_click_id_occurrence' ] );
59 }
60
61 public function detect_click_id_occurrence( Request $request ) {
62 if ( $this->is_plugin_installed( 'AdvertisingConversionExport' ) ) {
63 return;
64 }
65
66 $url = Common::unsanitizeInputValue( $request->getParam( 'url' ) );
67
68 $click_id_regex = array_map( 'preg_quote', self::CLICK_IDS );
69 $click_id_regex = '(' . implode( '|', $click_id_regex ) . ')';
70 $click_id_regex = '/[&?]' . $click_id_regex . '/i';
71
72 if ( preg_match( $click_id_regex, $url ) ) {
73 $existing_occurrence = get_option( self::LAST_CLICK_ID_OCCURRENCE_OPTION_NAME );
74 if ( ! is_numeric( $existing_occurrence ) ) {
75 $existing_occurrence = 0;
76 }
77 update_option( self::LAST_CLICK_ID_OCCURRENCE_OPTION_NAME, max( $existing_occurrence, $request->getCurrentTimestamp() ) );
78 }
79 }
80 }
81