matomo
/
classes
/
WpMatomo
/
Admin
/
PluginSuggestions
/
Suggestions
/
AdvertisingConversionExport.php
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 |