Create New Item
Item Type
File
Folder
Item Name
Search file in folder and subfolders...
Are you sure want to rename?
trouvaille
/
wp-content
/
plugins
/
official-facebook-pixel
/
integration
:
class-facebookwordpressformidableform.php
Advanced Search
Upload
New Item
Settings
Back
Back Up
Advanced Editor
Save
<?php /** * Facebook Pixel Plugin FacebookWordpressFormidableForm class. * * This file contains the main logic for FacebookWordpressFormidableForm. * * @package FacebookPixelPlugin */ /** * Define FacebookWordpressFormidableForm class. * * @return void */ /* * Copyright (C) 2017-present, Meta, Inc. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 2 of the License. * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ namespace FacebookPixelPlugin\Integration; defined( 'ABSPATH' ) || die( 'Direct access not allowed' ); use FacebookPixelPlugin\Core\FacebookPixel; use FacebookPixelPlugin\Core\FacebookPluginUtils; use FacebookPixelPlugin\Core\FacebookServerSideEvent; use FacebookPixelPlugin\Core\FacebookWordPressOptions; use FacebookPixelPlugin\Core\ServerEventFactory; use FacebookPixelPlugin\Core\PixelRenderer; use FacebookAds\Object\ServerSide\Event; use FacebookAds\Object\ServerSide\UserData; /** * FacebookWordpressFormidableForm class. */ class FacebookWordpressFormidableForm extends FacebookWordpressIntegrationBase { const PLUGIN_FILE = 'formidable/formidable.php'; const TRACKING_NAME = 'formidable-lite'; /** * Injects pixel code for the Formidable Form plugin. * * This method hooks into the 'frm_after_create_entry' action, which is * fired by the Formidable Form plugin after a form entry is created. It * then calls the trackServerEvent method, which generates a lead event * for the form submission. * * @return void */ public static function inject_pixel_code() { add_action( 'frm_after_create_entry', array( __CLASS__, 'trackServerEvent' ), 20, 2 ); } /** * Tracks a server-side event for a form submission in Formidable Form. * * This method is hooked into the 'frm_after_create_entry' action, which is * fired by the Formidable Form plugin after a form entry is created. It * then calls the track method on the FacebookServerSideEvent instance, * which generates a lead event for the form submission. * * @param int $entry_id The ID of the form entry. * @param int $form_id The ID of the form. * * @return void */ public static function trackServerEvent( $entry_id, $form_id ) { if ( FacebookPluginUtils::is_internal_user() ) { return; } $server_event = ServerEventFactory::safe_create_event( 'Lead', array( __CLASS__, 'readFormData' ), array( $entry_id ), self::TRACKING_NAME, true ); FacebookServerSideEvent::get_instance()->track( $server_event ); add_action( 'wp_footer', array( __CLASS__, 'injectLeadEvent' ), 20 ); } /** * Injects lead event code into the footer. * * This method retrieves tracked events from the FacebookServerSideEvent * instance and renders them into pixel code using the PixelRenderer. * The resulting code is printed into the footer section of the page. * If the user is an internal user, the method returns without injecting * any code. * * @return void */ public static function injectLeadEvent() { if ( FacebookPluginUtils::is_internal_user() ) { return; } $events = FacebookServerSideEvent::get_instance()->get_tracked_events(); $code = PixelRenderer::render( $events, self::TRACKING_NAME ); printf( ' <!-- Meta Pixel Event Code --> %s <!-- End Meta Pixel Event Code --> ', $code // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ); } /** * Reads form data for a given entry ID. * * This method retrieves the entry values from Formidable * Forms using the provided * entry ID. It extracts specific user information such as * email, first name, * last name, and phone, and combines this information with address data. * * @param int $entry_id The ID of the form entry. * @return array An associative array containing user and * address information, * or an empty array if the entry ID is * empty or no data is found. */ public static function readFormData( $entry_id ) { if ( empty( $entry_id ) ) { return array(); } $entry_values = IntegrationUtils::get_formidable_forms_entry_values( $entry_id ); $field_values = $entry_values->get_field_values(); if ( ! empty( $field_values ) ) { $user_data = array( 'email' => self::getEmail( $field_values ), 'first_name' => self::getFirstName( $field_values ), 'last_name' => self::getLastName( $field_values ), 'phone' => self::getPhone( $field_values ), ); $address_data = self::getAddressInformation( $field_values ); return array_merge( $user_data, $address_data ); } return array(); } /** * Retrieves the email address from the form data. * * @param array $field_values An associative array of field values. * @return string|null The email address, or null if * no email field is found. */ private static function getEmail( $field_values ) { return self::getFieldValueByType( $field_values, 'email' ); } /** * Retrieves the first name from the form data. * * This method extracts the first name field from the provided field values. * * @param array $field_values An associative array of field values. * @return string|null The first name, or null if no first * name field is found. */ private static function getFirstName( $field_values ) { return self::getFieldValue( $field_values, 'text', 'Name', 'First' ); } /** * Retrieves the last name from the form data. * * This method extracts the last name field from the provided field values. * * @param array $field_values An associative array of field values. * @return string|null The last name, or null if no * last name field is found. */ private static function getLastName( $field_values ) { return self::getFieldValue( $field_values, 'text', 'Last', 'Last' ); } /** * Retrieves the phone number from the form data. * * This method extracts the phone field from the provided field values. * * @param array $field_values An associative array of field values. * @return string|null The phone number, or null if no phone field is found. */ private static function getPhone( $field_values ) { return self::getFieldValueByType( $field_values, 'phone' ); } /** * Retrieves address information from the form data. * * This method extracts address information * (city, state, country, and zip code) * from the provided field values. It returns an * associative array containing * the extracted address information, or an empty * array if no address information * is found. * * @param array $field_values An associative array of field values. * @return array An associative array containing address information. */ private static function getAddressInformation( $field_values ) { $address_saved_value = self::getFieldValueByType( $field_values, 'address' ); $address_data = array(); if ( $address_saved_value ) { if ( isset( $address_saved_value['city'] ) ) { $address_data['city'] = $address_saved_value['city']; } if ( isset( $address_saved_value['state'] ) ) { $address_data['state'] = $address_saved_value['state']; } if ( isset( $address_saved_value['country'] ) && strlen( $address_saved_value['country'] ) === 2 ) { $address_data['country'] = $address_saved_value['country']; } if ( isset( $address_saved_value['zip'] ) ) { $address_data['zip'] = $address_saved_value['zip']; } } return $address_data; } /** * Retrieves the saved value of a specific field type * from the given field values. * * This method iterates through the provided field values to find a field * that matches the specified type. If a matching field is found, it returns * the saved value of that field. If no matching field * is found, it returns null. * * @param array $field_values An array of field values. * @param string $type The type of the field to retrieve the value for. * @return mixed|null The saved value of the field, * or null if no matching field is found. */ private static function getFieldValueByType( $field_values, $type ) { foreach ( $field_values as $field_value ) { $field = $field_value->get_field(); if ( $field->type === $type ) { return $field_value->get_saved_value(); } } return null; } /** * Retrieves the saved value of a field that matches the given criteria. * * This method iterates through the provided field * values to find a field that * matches the specified type, name, and description. * If a matching field is found, * it returns the saved value of that field. If no * matching field is found, it returns * null. * * @param array $field_values An array of field values. * @param string $type The type of the field to retrieve the value for. * @param string $name The name of the field to retrieve the value for. * @param string $description The description of the * field to retrieve the value for. * @return mixed|null The saved value of the field, * or null if no matching field is found. */ private static function getFieldValue( $field_values, $type, $name, $description ) { foreach ( $field_values as $field_value ) { $field = $field_value->get_field(); if ( $field->type === $type && $field->name === $name && $field->description === $description ) { return $field_value->get_saved_value(); } } return null; } }