Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Bower components Debian packages RPM packages NuGet packages

jsarnowski / jsarnowski/cartflows-pro   php

Repository URL to install this package:

Version: 1.6.10 

/ optin / classes / class-cartflows-pro-optin-markup.php

<?php
/**
 * Checkout markup.
 *
 * @package cartflows
 */

if ( ! defined( 'ABSPATH' ) ) {
	exit; // Exit if accessed directly.
}

/**
 * Checkout Markup
 *
 * @since 1.0.0
 */
class Cartflows_Pro_Optin_Markup {



	/**
	 * Member Variable
	 *
	 * @var object instance
	 */
	private static $instance;

	/**
	 * Member Variable
	 *
	 * @var is_divi_enabled
	 */
	public $divi_status = false;

	/**
	 *  Initiator
	 */
	public static function get_instance() {
		if ( ! isset( self::$instance ) ) {
			self::$instance = new self();
		}
		return self::$instance;
	}

	/**
	 *  Constructor
	 */
	public function __construct() {

		add_filter( 'woocommerce_email_order_meta_fields', array( $this, 'send_custom_fields_in_woo_email' ), 10, 3 );
		add_action( 'woocommerce_admin_order_data_after_billing_address', array( $this, 'display_billing_custom_fields_in_order_meta' ), 10, 1 );

		/**
		 * Optin fields modification
		 * add_filter( 'cartflows_optin_default_fields', array( $this, 'optin_default_fields' ), 10, 2 );
		 * add_filter( 'cartflows_optin_fields', array( $this, 'optin_fields' ), 10, 2 ); */

		add_filter( 'cartflows_billing_optin_fields', array( $this, 'optin_billing_fields_customization' ), 10, 3 );

		/* Scripts */
		add_action( 'cartflows_optin_scripts', array( $this, 'optin_style_scripts' ) );

		add_action( 'cartflows_optin_scripts', array( $this, 'load_compatibility_scripts_for_pro' ), 102 );
	}

	/**
	 * Send custom fields in the order email.
	 *
	 * @param array  $fields of fields.
	 * @param string $sent_to_admin domain name to send.
	 * @param array  $order of order details.
	 */
	public function send_custom_fields_in_woo_email( $fields, $sent_to_admin, $order ) {

		// Return if order not found.
		if ( ! $order ) {
			return $fields;
		}

		$order_id = $order->get_id();
		$optin_id = get_post_meta( $order_id, '_wcf_optin_id', true );

		if ( ! $optin_id ) {
			return $fields;
		}

		// Get custom fields.
		$custom_fields = get_post_meta( $optin_id, 'wcf-optin-enable-custom-fields', true );

		if ( 'yes' === $custom_fields ) {
			// Billing Fields & Values.
			$billing_fields       = get_post_meta( $optin_id, 'wcf_fields_billing', true );
			$saved_billing_fields = get_post_meta( $optin_id, 'wcf-optin-fields-billing', true );

			foreach ( $billing_fields as $field => $data ) {
				if ( isset( $saved_billing_fields[ $field ] ) && isset( $data['custom'] ) && $data['custom'] ) {
					$fields[ $field ] = array(
						'label' => $data['label'],
						'value' => get_post_meta( $order_id, '_' . $field, true ),
					);
				}
			}
		}

		return $fields;
	}


	/**
	 * Display billing custom field data on order page
	 *
	 * @param obj $order Order object.
	 * @return void
	 */
	public function display_billing_custom_fields_in_order_meta( $order ) {

		if ( ! $order ) {
			return;
		}

		$order_id = $order->get_id();
		$optin_id = get_post_meta( $order_id, '_wcf_optin_id', true );

		if ( ! $optin_id ) {
			return;
		}

		/* Custom Field To Do */
		$custom_fields = get_post_meta( $optin_id, 'wcf-optin-enable-custom-fields', true );

		if ( 'yes' === $custom_fields ) {
			$output = '';

			$saved_billing_fields = get_post_meta( $optin_id, 'wcf-optin-fields-billing', true );
			$billing_fields       = get_post_meta( $optin_id, 'wcf_fields_billing', true );

			foreach ( $billing_fields as $field => $data ) {

				if ( isset( $saved_billing_fields[ $field ] ) && isset( $data['custom'] ) && $data['custom'] ) {
					$output .= '<p><strong>' . $data['label'] . ':</strong> ' . get_post_meta( $order_id, '_' . $field, true ) . '</p>';
				}
			}

			if ( '' !== $output ) {
				$output = '<h3>' . __( 'Billing Custom Fields', 'cartflows-pro' ) . '</h3>' . $output;
			}

			echo $output;
		}
	}

	/**
	 * Load shortcode scripts.
	 *
	 * @return void
	 */
	public function optin_style_scripts() {

		global $post;

		if ( Cartflows_Compatibility::get_instance()->is_divi_enabled() ||
			Cartflows_Compatibility::get_instance()->is_divi_builder_enabled( $post->ID )
		) {
			$this->divi_status = true;
		}

		wp_enqueue_style( 'wcf-pro-optin', wcf_pro()->utils->get_css_url( 'optin-styles' ), '', CARTFLOWS_PRO_VER );

		wp_enqueue_script(
			'wcf-pro-optin',
			wcf_pro()->utils->get_js_url( 'optin' ),
			array( 'jquery' ),
			CARTFLOWS_PRO_VER,
			true
		);
	}

	/**
	 * Load compatibility scripts.
	 *
	 * @return void
	 */
	public function load_compatibility_scripts_for_pro() {

		// Add DIVI Compatibility css if DIVI theme is enabled.
		if ( $this->divi_status ) {
			wp_enqueue_style( 'wcf-optin-styles-divi', wcf_pro()->utils->get_css_url( 'optin-styles-divi' ), '', CARTFLOWS_PRO_VER );
		}
	}

	/**
	 * Prepare default country locale.
	 *
	 * @param array $fields country locale fields.
	 * @param int   $optin_id checkout id.
	 * @return array
	 */
	public function optin_default_fields( $fields, $optin_id ) {

		if ( ! _is_wcf_optin_custom_fields( $optin_id ) ) {
			return $fields;
		}

		$optin_fields = wcf()->options->get_optin_meta_value( $optin_id, 'wcf-optin-fields-billing' );

		if ( ! is_array( $optin_fields ) ) {
			return $fields;
		}

		if ( ! empty( $optin_fields ) && ! empty( $fields ) ) {

			foreach ( $fields as $name => $field ) {

				$fname = 'billing_' . $name;

				$custom_field = isset( $optin_fields[ $fname ] ) ? $optin_fields[ $fname ] : false;

				if ( $custom_field && ! ( isset( $custom_field['enabled'] ) && false == $custom_field['enabled'] ) ) {
					$fields[ $name ]['required'] = isset( $custom_field['required'] ) && $custom_field['required'] ? true : false;
				}
			}
		}

		return $fields;
	}

	/**
	 * Prepare default country locale.
	 *
	 * @param array $fields country locale fields.
	 * @param int   $optin_id checkout id.
	 * @return array
	 */
	public function optin_fields( $fields, $optin_id ) {

		if ( ! _is_wcf_optin_custom_fields( $optin_id ) ) {
			return $fields;
		}

		$optin_fields = wcf()->options->get_optin_meta_value( $optin_id, 'wcf-optin-fields-billing' );

		if ( ! is_array( $optin_fields ) ) {

			return $fields;
		}

		if ( ! empty( $optin_fields ) && ! empty( $fields ) ) {

			$override_required = apply_filters( 'wcf_address_field_override_required', true );

			foreach ( $fields as $name => $field ) {
				$fname = $sname . '_' . $name;

				if ( $this->_is_locale_field( $fname ) && $override_required ) {
					$custom_field = isset( $address_fields[ $fname ] ) ? $address_fields[ $fname ] : false;

					if ( $custom_field && ! ( isset( $custom_field['enabled'] ) && false == $custom_field['enabled'] ) ) {
						$fields[ $name ]['required'] = isset( $custom_field['required'] ) && $custom_field['required'] ? true : false;
					}
				}
			}
		}

		return $fields;
	}

	/**
	 * Billing field customization.
	 *
	 * @param array  $fields fields data.
	 * @param string $country country name.
	 * @param int    $optin_id checkout id.
	 * @return array
	 */
	public function optin_billing_fields_customization( $fields, $country, $optin_id ) {

		if ( ! _is_wcf_optin_custom_fields( $optin_id ) ) {
			return $fields;
		}

		if ( is_wc_endpoint_url( 'edit-address' ) ) {
			return $fields;
		}

		$saved_fields = wcf()->options->get_optin_meta_value( $optin_id, 'wcf-optin-fields-billing' );

		if ( ! is_array( $saved_fields ) ) {
			return $fields;
		}

		$prepared_fields = $this->prepare_custom_fields( $saved_fields, $country, $optin_id, $fields, 'billing' );

		return $prepared_fields;
	}


	/**
	 * Prepare custom fields.
	 *
	 * @param array  $fieldset fieldset data.
	 * @param string $country country name.
	 * @param int    $optin_id checkout ID.
	 * @param bool   $original_fieldset is original fieldset.
	 * @param string $type address type.
	 * @return array
	 */
	public function prepare_custom_fields( $fieldset, $country, $optin_id, $original_fieldset = false, $type = 'billing' ) {

		if ( is_array( $fieldset ) && ! empty( $fieldset ) ) {

			$priority = 0;

			$all_original_fields = array_merge( $original_fieldset, $fieldset );

			$original_fieldset = $this->prepare_custom_fields_data( $fieldset, $all_original_fields, $optin_id );

			if ( ! empty( $original_fieldset ) ) {
				foreach ( $original_fieldset as $fieldset_key => $fieldset_value ) {
					if ( ! isset( $fieldset_value['priority'] ) ) {
						$new_priority                                   = $priority + 10;
						$original_fieldset[ $fieldset_key ]['priority'] = $new_priority;
						$priority                                       = $new_priority;
					} else {
						$priority = $fieldset_value['priority'];
					}
				}
			}
		}

		return $original_fieldset;
	}

	/**
	 * Prepare checkout fields.
	 *
	 * @param array $fields fields data.
	 * @param bool  $original_fields is original fields.
	 * @param int   $optin_id checkout ID.
	 * @return array
	 */
	public function prepare_custom_fields_data( $fields, $original_fields, $optin_id ) {

		if ( is_array( $fields ) && ! empty( $fields ) ) {

			$order_optin_fields = wcf()->options->get_optin_meta_value( $optin_id, 'wcf-optin-fields-billing' );

			foreach ( $fields as $name => $field ) {

				// Backword compatibility with field enabled.
				if ( isset( $order_optin_fields[ $name ]['enabled'] ) ) {
					$is_enabled = $order_optin_fields[ $name ]['enabled'];
				}

				// Backword compatibility with field width.
				if ( isset( $order_optin_fields[ $name ]['width'] ) ) {
					$field_widths = $order_optin_fields[ $name ]['width'];
				}

				// Set/Unset field if checked/unchecked.
				if ( ! $is_enabled ) {
					unset( $original_fields[ $name ] );
					unset( $fields[ $name ] );
				} else {
					if ( ! isset( $original_fields[ $name ] ) ) {
						$original_fields[ $name ] = $field;
					}

					$field_widths = apply_filters( 'cartflows_optin_billing_fields_width', $field_widths, $name );

					// Add Custom class if set.
					if ( '' != $field_widths ) {
						$original_fields[ $name ]['class'][] = 'wcf-column-' . $field_widths;
					}
				}
			}
		}

		return $original_fields;
	}

}

/**
 *  Kicking this off by calling 'get_instance()' method
 */
Cartflows_Pro_Optin_Markup::get_instance();