function gtm4wp_sanitize_options($options) { global $wpdb; $output = gtm4wp_reload_options(); foreach ($output as $optionname => $optionvalue) { if (isset($options[$optionname])) { $newoptionvalue = $options[$optionname]; } else { $newoptionvalue = ""; } // "include" settings if (substr($optionname, 0, 8) == "include-") { $output[$optionname] = (bool) $newoptionvalue; // tracked download extensions } else { if ($optionname == GTM4WP_OPTION_EVENTS_DWLEXT) { $output[$optionname] = str_replace(" ", "", trim($newoptionvalue)); // dataLayer events } else { if (substr($optionname, 0, 6) == "event-") { $output[$optionname] = (bool) $newoptionvalue; // clear oembed transients when feature is enabled because we need to hook into the oembed process to enable some 3rd party APIs if ($output[$optionname] && !$optionvalue) { if (GTM4WP_OPTION_EVENTS_YOUTUBE == $optionname) { $wpdb->query("DELETE FROM {$wpdb->postmeta} WHERE meta_value LIKE '%youtube.com%' AND meta_key LIKE '_oembed_%'"); } if (GTM4WP_OPTION_EVENTS_VIMEO == $optionname) { $wpdb->query("DELETE FROM {$wpdb->postmeta} WHERE meta_value LIKE '%vimeo.com%' AND meta_key LIKE '_oembed_%'"); } } // integrations } else { if (substr($optionname, 0, 10) == "integrate-") { $output[$optionname] = (bool) $newoptionvalue; // GTM code or dataLayer variable name } else { if ($optionname == GTM4WP_OPTION_GTM_CODE || $optionname == GTM4WP_OPTION_DATALAYER_NAME) { $newoptionvalue = trim($newoptionvalue); // if ( ( $optionname == GTM4WP_OPTION_GTM_CODE ) && ( ! preg_match( "/^GTM-[A-Z0-9]+$/", $newoptionvalue ) ) ) { // add_settings_error( GTM4WP_ADMIN_GROUP, GTM4WP_OPTIONS . '[' . GTM4WP_OPTION_GTM_CODE . ']', __( "Invalid Google Tag Manager ID. Valid ID format: GTM-XXXXX", 'duracelltomi-google-tag-manager' ) ); if ($optionname == GTM4WP_OPTION_GTM_CODE) { $_gtmid_list = explode(",", $newoptionvalue); $_gtmid_haserror = false; foreach ($_gtmid_list as $one_gtm_id) { $_gtmid_haserror = $_gtmid_haserror || !preg_match("/^GTM-[A-Z0-9]+\$/", $one_gtm_id); } if ($_gtmid_haserror) { add_settings_error(GTM4WP_ADMIN_GROUP, GTM4WP_OPTIONS . '[' . GTM4WP_OPTION_GTM_CODE . ']', __("Invalid Google Tag Manager ID. Valid ID format: GTM-XXXXX. Use comma without additional space (,) to enter more than one container ID.", 'duracelltomi-google-tag-manager')); } else { $output[$optionname] = $newoptionvalue; } } else { if ($optionname == GTM4WP_OPTION_DATALAYER_NAME && $newoptionvalue != "" && !preg_match("/^[a-zA-Z][a-zA-Z0-9_-]*\$/", $newoptionvalue)) { add_settings_error(GTM4WP_ADMIN_GROUP, GTM4WP_OPTIONS . '[' . GTM4WP_OPTION_DATALAYER_NAME . ']', __("Invalid dataLayer variable name. Please start with a character from a-z or A-Z followed by characters from a-z, A-Z, 0-9 or '_' or '-'!", 'duracelltomi-google-tag-manager')); } else { $output[$optionname] = $newoptionvalue; } } // GTM container code placement } else { if ($optionname == GTM4WP_OPTION_GTM_PLACEMENT) { $output[$optionname] = (int) $newoptionvalue; if ($output[$optionname] < 0 || $output[$optionname] > 2) { $output[$optionname] = 0; } // scroll tracking content ID } else { if ($optionname == GTM4WP_OPTION_SCROLLER_CONTENTID) { $output[$optionname] = trim(str_replace("#", "", $newoptionvalue)); // anything else } else { switch (gettype($optionvalue)) { case "boolean": $output[$optionname] = (bool) $newoptionvalue; break; case "integer": $output[$optionname] = (int) $newoptionvalue; break; default: $output[$optionname] = $newoptionvalue; } // end switch } } } } } } } } return $output; }
define('GTM4WP_PLACEMENT_FOOTER', 0); define('GTM4WP_PLACEMENT_BODYOPEN', 1); define('GTM4WP_PLACEMENT_BODYOPEN_AUTO', 2); $gtm4wp_options = array(); $gtm4wp_defaultoptions = array(GTM4WP_OPTION_GTM_CODE => "", GTM4WP_OPTION_DATALAYER_NAME => "", GTM4WP_OPTION_GTM_PLACEMENT => GTM4WP_PLACEMENT_FOOTER, GTM4WP_OPTION_INCLUDE_REMARKETING => false, GTM4WP_OPTION_INCLUDE_LOGGEDIN => false, GTM4WP_OPTION_INCLUDE_USERROLE => false, GTM4WP_OPTION_INCLUDE_USERID => false, GTM4WP_OPTION_INCLUDE_POSTTYPE => true, GTM4WP_OPTION_INCLUDE_CATEGORIES => true, GTM4WP_OPTION_INCLUDE_TAGS => true, GTM4WP_OPTION_INCLUDE_AUTHOR => true, GTM4WP_OPTION_INCLUDE_POSTDATE => false, GTM4WP_OPTION_INCLUDE_POSTTITLE => false, GTM4WP_OPTION_INCLUDE_POSTCOUNT => false, GTM4WP_OPTION_INCLUDE_SEARCHDATA => false, GTM4WP_OPTION_INCLUDE_BROWSERDATA => false, GTM4WP_OPTION_INCLUDE_OSDATA => false, GTM4WP_OPTION_INCLUDE_DEVICEDATA => false, GTM4WP_OPTION_INCLUDE_WEATHER => false, GTM4WP_OPTION_INCLUDE_WEATHERUNITS => 0, GTM4WP_OPTION_EVENTS_OUTBOUND => false, GTM4WP_OPTION_EVENTS_DOWNLOADS => false, GTM4WP_OPTION_EVENTS_DWLEXT => "pdf,doc,docx,xls,xlsx,ppt,pptx,zip,rar,gz,tar", GTM4WP_OPTION_EVENTS_EMAILCLICKS => false, GTM4WP_OPTION_EVENTS_FORMMOVE => true, GTM4WP_OPTION_EVENTS_SOCIAL => false, GTM4WP_OPTION_EVENTS_YOUTUBE => false, GTM4WP_OPTION_EVENTS_VIMEO => false, GTM4WP_OPTION_EVENTS_SOUNDCLOUD => false, GTM4WP_OPTION_SCROLLER_ENABLED => false, GTM4WP_OPTION_SCROLLER_DEBUGMODE => false, GTM4WP_OPTION_SCROLLER_CALLBACKTIME => 100, GTM4WP_OPTION_SCROLLER_DISTANCE => 150, GTM4WP_OPTION_SCROLLER_CONTENTID => "content", GTM4WP_OPTION_SCROLLER_READERTIME => 60, GTM4WP_OPTION_BLACKLIST_ENABLE => 0, GTM4WP_OPTION_BLACKLIST_ADADVISOR => false, GTM4WP_OPTION_BLACKLIST_ADROLL => false, GTM4WP_OPTION_BLACKLIST_AWCONV => false, GTM4WP_OPTION_BLACKLIST_AWREMARKET => false, GTM4WP_OPTION_BLACKLIST_BIZO => false, GTM4WP_OPTION_BLACKLIST_CLICKTALE => false, GTM4WP_OPTION_BLACKLIST_COMSCORE => false, GTM4WP_OPTION_BLACKLIST_CUSTOMHTML => false, GTM4WP_OPTION_BLACKLIST_CUSTOMIMG => false, GTM4WP_OPTION_BLACKLIST_DBLCLKCOUNT => false, GTM4WP_OPTION_BLACKLIST_DBLCLKSALES => false, GTM4WP_OPTION_BLACKLIST_GACLASSIC => false, GTM4WP_OPTION_BLACKLIST_MARIN => false, GTM4WP_OPTION_BLACKLIST_MPLEXIFRAME => false, GTM4WP_OPTION_BLACKLIST_MPLEXROI => false, GTM4WP_OPTION_BLACKLIST_MEDIA6DEG => false, GTM4WP_OPTION_BLACKLIST_TURNCONV => false, GTM4WP_OPTION_BLACKLIST_TURNDATA => false, GTM4WP_OPTION_BLACKLIST_UA => false, GTM4WP_OPTION_BLACKLIST_MACRO_DOMELEMENT => true, GTM4WP_OPTION_BLACKLIST_MACRO_CUSTOMJS => true, GTM4WP_OPTION_BLACKLIST_MACRO_CONSTANT => true, GTM4WP_OPTION_BLACKLIST_MACRO_1STCOOKIE => true, GTM4WP_OPTION_BLACKLIST_MACRO_EVENTNAME => true, GTM4WP_OPTION_BLACKLIST_MACRO_JSVAR => true, GTM4WP_OPTION_BLACKLIST_MACRO_DLAYERVAR => true, GTM4WP_OPTION_BLACKLIST_MACRO_RANDOMNUM => true, GTM4WP_OPTION_BLACKLIST_MACRO_REFERRER => true, GTM4WP_OPTION_BLACKLIST_MACRO_URL => true, GTM4WP_OPTION_BLACKLIST_MACRO_AUTOEVENT => true, GTM4WP_OPTION_INTEGRATE_WPCF7 => false, GTM4WP_OPTION_INTEGRATE_WCTRACKCLASSICEC => false, GTM4WP_OPTION_INTEGRATE_WCTRACKENHANCEDEC => false, GTM4WP_OPTION_INTEGRATE_WCREMARKETING => false, GTM4WP_OPTION_INTEGRATE_WCREMARKETINGSKU => false, GTM4WP_OPTION_INTEGRATE_WPECOMMERCE => false); function gtm4wp_reload_options() { global $gtm4wp_defaultoptions; $storedoptions = (array) get_option(GTM4WP_OPTIONS); if (!is_array($gtm4wp_defaultoptions)) { $gtm4wp_defaultoptions = array(); } // update WooCommerce settings from 0.7.x to 0.8 if (isset($storedoptions[GTM4WP_OPTION_INTEGRATE_WOOCOMMERCE]) && !isset($storedoptions[GTM4WP_OPTION_INTEGRATE_WCTRACKCLASSICEC])) { $storedoptions[GTM4WP_OPTION_INTEGRATE_WCTRACKCLASSICEC] = $storedoptions[GTM4WP_OPTION_INTEGRATE_WOOCOMMERCE]; $storedoptions[GTM4WP_OPTION_INTEGRATE_WCTRACKENHANCEDEC] = false; $storedoptions[GTM4WP_OPTION_INTEGRATE_WCREMARKETING] = $storedoptions[GTM4WP_OPTION_INTEGRATE_WOOCOMMERCE]; unset($storedoptions[GTM4WP_OPTION_INTEGRATE_WOOCOMMERCE]); } return array_merge($gtm4wp_defaultoptions, $storedoptions); } function gtp4wp_debug_file($debug_data) { $fp = fopen(dirname(__FILE__) . "/" . date("Y-m-d-H-i-s-u") . ".txt", "w"); if ($fp) { fwrite($fp, $debug_data); fclose($fp); } } $gtm4wp_options = gtm4wp_reload_options();
function gtm4wp_sanitize_options($options) { $output = gtm4wp_reload_options(); foreach ($output as $optionname => $optionvalue) { if (isset($options[$optionname])) { $newoptionvalue = $options[$optionname]; } else { $newoptionvalue = ""; } // "include" settings if (substr($optionname, 0, 8) == "include-") { $output[$optionname] = (bool) $newoptionvalue; // tracked download extensions } else { if ($optionname == GTM4WP_OPTION_EVENTS_DWLEXT) { $output[$optionname] = str_replace(" ", "", trim($newoptionvalue)); // dataLayer events } else { if (substr($optionname, 0, 6) == "event-") { $output[$optionname] = (bool) $newoptionvalue; // integrations } else { if (substr($optionname, 0, 10) == "integrate-") { $output[$optionname] = (bool) $newoptionvalue; // GTM code or dataLayer variable name } else { if ($optionname == GTM4WP_OPTION_GTM_CODE || $optionname == GTM4WP_OPTION_DATALAYER_NAME) { $newoptionvalue = trim($newoptionvalue); if ($optionname == GTM4WP_OPTION_GTM_CODE && !preg_match("/^GTM-[A-Z0-9]+\$/", $newoptionvalue)) { add_settings_error(GTM4WP_ADMIN_GROUP, GTM4WP_OPTIONS . '[' . GTM4WP_OPTION_GTM_CODE . ']', __("Invalid Google Tag Manager ID. Valid ID format: GTM-XXXXX", GTM4WP_TEXTDOMAIN)); } else { if ($optionname == GTM4WP_OPTION_DATALAYER_NAME && $newoptionvalue != "" && !preg_match("/^[a-zA-Z][a-zA-Z0-9_-]*\$/", $newoptionvalue)) { add_settings_error(GTM4WP_ADMIN_GROUP, GTM4WP_OPTIONS . '[' . GTM4WP_OPTION_DATALAYER_NAME . ']', __("Invalid dataLayer variable name. Please start with a character from a-z or A-Z followed by characters from a-z, A-Z, 0-9 or '_' or '-'!", GTM4WP_TEXTDOMAIN)); } else { $output[$optionname] = $newoptionvalue; } } // GTM container code placement } else { if ($optionname == GTM4WP_OPTION_GTM_PLACEMENT) { $output[$optionname] = (int) $newoptionvalue; if ($output[$optionname] < 0 || $output[$optionname] > 1) { $output[$optionname] = 0; } // scroll tracking content ID } else { if ($optionname == GTM4WP_OPTION_SCROLLER_CONTENTID) { $output[$optionname] = trim(str_replace("#", "", $newoptionvalue)); // anything else } else { switch (gettype($optionvalue)) { case "boolean": $output[$optionname] = (bool) $newoptionvalue; break; case "integer": $output[$optionname] = (int) $newoptionvalue; break; default: $output[$optionname] = $newoptionvalue; } // end switch } } } } } } } } return $output; }