Your IP : 216.73.216.95


Current Path : /var/test/www/html/wp-content/plugins/give/src/Form/Template/
Upload File :
Current File : /var/test/www/html/wp-content/plugins/give/src/Form/Template/LegacyFormSettingCompatibility.php

<?php
namespace Give\Form\Template;

use Give\Form\Template;
use Give\Helpers\Form\Utils;

/**
 * Class LegacyFormSettingCompatibility
 *
 * @since 2.7.0
 * @package Give\Form\Template
 */
class LegacyFormSettingCompatibility {
	/**
	 * Name of key which we are using in field description to connect template setting with legacy setting.
	 *
	 * @var string
	 */
	public static $key = 'mapToLegacySetting';

	/**
	 * Map legacy setting key name to template function/property from which you will get donation form configuration about different features.
	 *
	 * @var array $mapToTemplateProperty Form settings default values for form template.
	 */
	private $mapToTemplateProperty = [
		'_give_display_style'        => 'donationFormLevelsStyle',
		'_give_payment_display'      => 'donationFormStyle',
		'_give_form_floating_labels' => 'floatingLabelsStyle',
		'_give_reveal_label'         => 'getContinueToDonationFormLabel',
		'_give_checkout_label'       => 'getDonateNowButtonLabel',
		'_give_display_content'      => 'showDonationIntroductionContent',
		'_give_content_placement'    => 'getDonationIntroductionContentPosition',
		'_give_form_content'         => 'getDonationIntroductionContent',
	];

	/**
	 * @var Template $template
	 */
	private $template;

	/**
	 * LegacyFormSettingCompatibility constructor.
	 *
	 * @param Template $template
	 */
	public function __construct( Template $template ) {
		$this->template = $template;
	}

	/**
	 * Save legacy settings.
	 *
	 * Note: we are using this function internally to store legacy form settings when save form template setting.
	 *
	 * @see src/Helpers/Form/Theme/Theme.php:46  we are using this function in set function.
	 * @param int   $formId
	 * @param array $settings
	 * @since 2.7.0
	 */
	public function save( $formId, $settings ) {
		$alreadySavedLegacySettings = [];
		$templateOptions            = $this->template->getOptionsConfig();
		$enableDisableValueSet      = [ 'disabled', 'enabled' ];

		foreach ( $templateOptions as $groupId => $group ) {
			foreach ( $group['fields'] as $field ) {
				// Continue if setting is not map to legacy setting.
				if ( ! isset( $field[ self::$key ] ) ) {
					continue;
				}

				Give()->form_meta->update_meta( $formId, $field[ self::$key ], $settings[ $groupId ][ $field['id'] ] );
				$alreadySavedLegacySettings[] = $field[ self::$key ];
			}
		}

		if ( $remainingSettings = array_diff( array_keys( $this->mapToTemplateProperty ), $alreadySavedLegacySettings ) ) {
			foreach ( $remainingSettings as $metaKey ) {
				$value = property_exists( $this->template, $this->mapToTemplateProperty[ $metaKey ] ) ?
					$this->template->{$this->mapToTemplateProperty[ $metaKey ]} : // Get value from property.
					$this->template->{$this->mapToTemplateProperty[ $metaKey ]}(); // Get value from function

				// Convert boolean value to enable and disabled.
				if ( is_bool( $value ) ) {
					$value = $enableDisableValueSet[ absint( $value ) ];
				}

				Give()->form_meta->update_meta(
					$formId,
					$metaKey,
					$value
				);
			}
		}
	}

	/**
	 * Migrate existing legacy form settings.
	 * Note: Only for internal use. This function can be removed or change in future
	 *
	 * @since 2.7.0
	 */
	public static function migrateExistingFormSettings() {
		// Only migrate settings for existing form when editing.
		if ( ! isset( $_GET['action'] ) || 'edit' !== give_clean( $_GET['action'] ) ) {
			return;
		}

		$formId = absint( $_GET['post'] );

		if ( ! Utils::isLegacyForm( $formId ) ) {
			return;
		}

		if ( Give()->form_meta->get_meta( $formId, '_give_legacy_form_template_settings', true ) ) {
			return;
		}

		$mapToSetting = [
			'display_style'        => '_give_display_style',
			'payment_display'      => '_give_payment_display',
			'reveal_label'         => '_give_reveal_label',
			'checkout_label'       => '_give_checkout_label',
			'form_floating_labels' => '_give_form_floating_labels',
			'display_content'      => '_give_display_content',
			'content_placement'    => '_give_content_placement',
			'form_content'         => '_give_form_content',
		];

		foreach ( $mapToSetting as $newSetting => $oldSetting ) {
			if ( $value = Give()->form_meta->get_meta( $formId, $oldSetting, true ) ) {
				$settings['display_settings'][ $newSetting ] = $value;
			}
		}

		Give()->form_meta->update_meta( $formId, '_give_form_template', 'legacy' );
		Give()->form_meta->update_meta( $formId, '_give_legacy_form_template_settings', $settings );
	}
}