Create New Item
Item Type
File
Folder
Item Name
Search file in folder and subfolders...
Are you sure want to rename?
chromed
/
wp-content
/
plugins
/
wpforms-lite
/
src
/
Frontend
:
Analytics.php
Advanced Search
Upload
New Item
Settings
Back
Back Up
Advanced Editor
Save
<?php namespace WPForms\Frontend; use WPForms\Analytics\Analytics as AnalyticsGate; /** * Form Analytics frontend script enqueue. * * Enqueues the base analytics.js tracker on pages that render a WPForms form. * * @since 2.0.0 */ class Analytics { /** * Start the engine. * * @since 2.0.0 */ public function init(): void { $this->hooks(); } /** * Register WordPress hooks. * * @since 2.0.0 */ protected function hooks(): void { add_action( 'wpforms_wp_footer', [ $this, 'enqueue_footer_assets' ] ); add_filter( 'wpforms_frontend_strings', [ $this, 'add_composite_field_types' ] ); } /** * Inject the composite-field type allow-list into the frontend config. * * The tracker explodes only these field types into per-subfield rows. * Addons (e.g. Surveys & Polls) extend the list via the filter below. * * @since 2.0.0 * * @param array $strings Localized frontend strings/config. * * @return array */ public function add_composite_field_types( $strings ): array { $strings = (array) $strings; $field_types = [ 'name', 'address', 'date-time', 'email', 'password', ]; /** * Filters the field types tracked per subfield by Form Analytics. * * @since 2.0.0 * * @param array $types Field type slugs whose subfields are tracked individually. */ $strings['analytics_composite_field_types'] = (array) apply_filters( 'wpforms_frontend_analytics_composite_field_types', $field_types ); /** * Filters whether the analytics submission envelope is base64-encoded. * * When true, the hidden analytics input is base64-encoded instead of raw * JSON. This prevents WAF products (e.g. Cloudflare OWASP CRS) from * flagging the nested JSON structure as a false-positive anomaly. * * @since 2.0.0.2 * * @param bool $enabled Whether to base64-encode the analytics envelope. */ $strings['analytics_base64'] = (bool) apply_filters( 'wpforms_frontend_analytics_base64_envelope', true ); return $strings; } /** * Enqueue frontend analytics assets. * * @since 2.0.0 * * @param array $forms List of forms on the page. */ public function enqueue_footer_assets( array $forms ): void { if ( empty( $forms ) ) { return; } // Skip site staff (Author/Editor/Admin). if ( ! AnalyticsGate::should_track_user() ) { return; } $min = wpforms_get_min_suffix(); wp_enqueue_script( 'wpforms-analytics', WPFORMS_PLUGIN_URL . "assets/js/frontend/analytics{$min}.js", [ 'jquery' ], WPFORMS_VERSION, true ); } }