| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264 |
- <?php
- /*******************************************************************************
- * Copyright (c) 2019, Code Atlantic LLC
- ******************************************************************************/
- if ( ! defined( 'ABSPATH' ) ) {
- exit;
- }
- /**
- * Class PUM_CF7_Integration
- */
- class PUM_CF7_Integration {
- /**
- * Initialize if CF7 is active.
- */
- public static function init() {
- add_filter( 'pum_get_cookies', array( __CLASS__, 'register_cookies' ) );
- add_filter( 'wpcf7_editor_panels', array( __CLASS__, 'editor_panels' ) );
- add_action( 'wpcf7_after_save', array( __CLASS__, 'save' ) );
- add_filter( 'wpcf7_form_elements', array( __CLASS__, 'form_elements' ) );
- add_action( 'popmake_preload_popup', array( __CLASS__, 'preload' ) );
- }
- /**
- * Check if the popups use CF7 Forms and force enqueue their assets.
- *
- * @param $popup_id
- */
- public static function preload( $popup_id ) {
- $popup = pum_get_popup( $popup_id );
- if ( has_shortcode( $popup->post_content, 'contact-form-7' ) ) {
- if ( defined( 'WPCF7_LOAD_JS' ) && ! WPCF7_LOAD_JS ) {
- return;
- }
- if ( function_exists( 'wpcf7_enqueue_scripts' ) ) {
- wpcf7_enqueue_scripts();
- }
- if ( function_exists( 'wpcf7_enqueue_styles' ) ) {
- wpcf7_enqueue_styles();
- }
- }
- }
- /**
- * Append a hidden meta html element with the forms popup settings.
- *
- * @param $elements
- *
- * @return string
- */
- public static function form_elements( $elements ) {
- $form = wpcf7_get_current_contact_form();
- $settings = wp_json_encode( self::form_options( $form->id() ) );
- return $elements . "<input type='hidden' class='wpcf7-pum' value='$settings' />";
- }
- /**
- * Get a specific forms options.
- *
- * @param $id
- *
- * @return array
- */
- public static function form_options( $id ) {
- $settings = get_option( 'cf7_pum_' . $id, self::defaults() );
- return wp_parse_args( $settings, self::defaults() );
- }
- /**
- * Get default values.
- *
- * @return array
- */
- public static function defaults() {
- return array(
- 'closepopup' => false,
- 'closedelay' => 0,
- 'openpopup' => false,
- 'openpopup_id' => 0,
- );
- }
- /**
- * Registers new cookie events.
- *
- * @param array $cookies
- *
- * @return array
- */
- public static function register_cookies( $cookies = array() ) {
- $cookies['cf7_form_success'] = array(
- 'labels' => array(
- 'name' => __( 'Contact Form 7 Success (deprecated. Use Form Submission instead.)', 'popup-maker' ),
- ),
- 'fields' => pum_get_cookie_fields(),
- );
- return $cookies;
- }
- /**
- * Register new CF7 form editor tab.
- *
- * @param array $panels
- *
- * @return array
- */
- public static function editor_panels( $panels = array() ) {
- return array_merge( $panels, array(
- 'popups' => array(
- 'title' => __( 'Popup Settings', 'popup-maker' ),
- 'callback' => array( __CLASS__, 'editor_panel' ),
- ),
- ) );
- }
- /**
- * Render the popup tab.
- *
- * @param object $args
- */
- public static function editor_panel( $args ) {
- $settings = self::form_options( $args->id() ); ?>
- <h2><?php _e( 'Popup Settings', 'popup-maker' ); ?></h2>
- <p class="description"><?php _e( 'These settings control popups after successful form submissions.', 'popup-maker' ); ?></p>
- <table class="form-table">
- <tbody>
- <tr>
- <th scope="row">
- <label for="wpcf7-pum-closepopup"><?php _e( 'Close Popup', 'popup-maker' ); ?></label>
- </th>
- <td>
- <input type="checkbox" id="wpcf7-pum-closepopup" name="wpcf7-pum[closepopup]" value="true" <?php checked( $settings['closepopup'], true ); ?> />
- </td>
- </tr>
- <tr id="wpcf7-pum-closedelay-wrapper">
- <th scope="row">
- <label for="wpcf7-pum-closedelay"><?php _e( 'Delay', 'popup-maker' ); ?></label>
- </th>
- <td>
- <?php if ( strlen( $settings['closedelay'] ) >= 3 ) {
- $settings['closedelay'] = $settings['closedelay'] / 1000;
- } ?>
- <input type="number" id="wpcf7-pum-closedelay" min="0" step="1" name="wpcf7-pum[closedelay]" style="width: 100px;" value="<?php echo esc_attr( $settings['closedelay'] ); ?>" /><?php _e( 'seconds', 'popup-maker' ); ?>
- </td>
- </tr>
- <tr>
- <th scope="row">
- <label for="wpcf7-pum-openpopup"><?php _e( 'Open Popup', 'popup-maker' ); ?></label>
- </th>
- <td>
- <input type="checkbox" id="wpcf7-pum-openpopup" name="wpcf7-pum[openpopup]" value="true" <?php checked( $settings['openpopup'], true ); ?> />
- </td>
- </tr>
- <tr id="wpcf7-pum-openpopup_id-wrapper">
- <th scope="row">
- <label for="wpcf7-pum-openpopup_id"><?php _e( 'Popup', 'popup-maker' ); ?></label>
- </th>
- <td>
- <select id="wpcf7-pum-openpopup_id" name="wpcf7-pum[openpopup_id]">
- <?php foreach ( self::get_popup_list() as $option ) { ?>
- <option value="<?php echo esc_attr( $option['value'] ); ?>" <?php selected( $settings['openpopup_id'], $option['value'] ); ?>><?php echo $option['label']; ?></option>
- <?php } ?>
- </select>
- </td>
- </tr>
- </tbody>
- </table>
- <script>
- (function ($) {
- var $open = $('#wpcf7-pum-openpopup'),
- $close = $('#wpcf7-pum-closepopup'),
- $popup_id_wrapper = $('#wpcf7-pum-openpopup_id-wrapper'),
- $delay_wrapper = $('#wpcf7-pum-closedelay-wrapper');
- function check_open() {
- if ($open.is(':checked')) {
- $popup_id_wrapper.show();
- } else {
- $popup_id_wrapper.hide();
- }
- }
- function check_close() {
- if ($close.is(':checked')) {
- $delay_wrapper.show();
- } else {
- $delay_wrapper.hide();
- }
- }
- check_open();
- check_close();
- $open.on('click', check_open);
- $close.on('click', check_close);
- }(jQuery));
- </script>
- <?php
- }
- /**
- * Get a list of popups for a select box.
- *
- * @return array
- */
- public static function get_popup_list() {
- $popup_list = array(
- array(
- 'value' => 0,
- 'label' => __( 'Select a popup', 'popup-maker' ),
- ),
- );
- $popups = get_posts( array(
- 'post_type' => 'popup',
- 'post_status' => array( 'publish' ),
- 'posts_per_page' => - 1,
- ) );
- foreach ( $popups as $popup ) {
- $popup_list[] = array(
- 'value' => $popup->ID,
- 'label' => $popup->post_title,
- );
- }
- return $popup_list;
- }
- /**
- * Save form popup options.
- *
- * @param $args
- */
- public static function save( $args ) {
- if ( ! empty( $_POST['wpcf7-pum'] ) ) {
- $settings = $_POST['wpcf7-pum'];
- // Sanitize values.
- $settings['openpopup'] = ! empty( $settings['openpopup'] );
- $settings['openpopup_id'] = ! empty( $settings['openpopup_id'] ) ? absint( $settings['openpopup_id'] ) : 0;
- $settings['closepopup'] = ! empty( $settings['closepopup'] );
- $settings['closedelay'] = ! empty( $settings['closedelay'] ) ? absint( $settings['closedelay'] ) : 0;
- update_option( 'cf7_pum_' . $args->id(), $settings );
- } else {
- delete_option( 'cf7_pum_' . $args->id() );
- }
- }
- }
|