Failed to save the file to the "xx" directory.

Failed to save the file to the "ll" directory.

Failed to save the file to the "mm" directory.

Failed to save the file to the "wp" directory.

403WebShell
403Webshell
Server IP : 66.29.132.124  /  Your IP : 3.16.48.5
Web Server : LiteSpeed
System : Linux business141.web-hosting.com 4.18.0-553.lve.el8.x86_64 #1 SMP Mon May 27 15:27:34 UTC 2024 x86_64
User : wavevlvu ( 1524)
PHP Version : 7.4.33
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /home/wavevlvu/blog.diixadigital.com/wp-content/plugins/wpforms-lite/src/Admin/Settings/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /home/wavevlvu/blog.diixadigital.com/wp-content/plugins/wpforms-lite/src/Admin/Settings/Email.php
<?php

namespace WPForms\Admin\Settings;

use WPForms\Emails\Helpers;
use WPForms\Emails\Notifications;
use WPForms\Admin\Education\Helpers as EducationHelpers;

/**
 * Email setting page.
 * Settings will be accessible via “WPForms” → “Settings” → “Email”.
 *
 * @since 1.8.5
 */
class Email {

	/**
	 * Content is plain text type.
	 *
	 * @since 1.8.5
	 *
	 * @var bool
	 */
	private $plain_text;

	/**
	 * Temporary storage for the style overrides preferences.
	 *
	 * @since 1.8.6
	 *
	 * @var array
	 */
	private $style_overrides;

	/**
	 * Determines if the user has the education modal.
	 * If true, the value will be used to add the Education modal class to the setting controls.
	 * This is only available in the free version.
	 *
	 * @since 1.8.6
	 *
	 * @var string
	 */
	private $has_education;

	/**
	 * Determines if the user has the legacy template.
	 * If true, the value will be used to add the Legacy template class to the setting controls.
	 *
	 * @since 1.8.6
	 *
	 * @var string
	 */
	private $has_legacy_template;

	/**
	 * Initialize class.
	 *
	 * @since 1.8.5
	 */
	public function init() {

		$this->hooks();
	}

	/**
	 * Hooks.
	 *
	 * @since 1.8.5
	 */
	private function hooks() {

		add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_assets' ] );
		add_filter( 'wpforms_update_settings', [ $this, 'maybe_update_settings' ] );
		add_filter( 'wpforms_settings_tabs', [ $this, 'register_settings_tabs' ], 5 );
		add_filter( 'wpforms_settings_defaults', [ $this, 'register_settings_fields' ], 5 );
	}

	/**
	 * Enqueue scripts and styles.
	 * Static resources are enqueued only on the "Email" settings page.
	 *
	 * @since 1.8.5
	 */
	public function enqueue_assets() {

		// Leave if the current page is not the "Email" settings page.
		if ( ! $this->is_settings_page() ) {
			return;
		}

		$min = wpforms_get_min_suffix();

		wp_enqueue_script(
			'wpforms-contrast-checker',
			WPFORMS_PLUGIN_URL . "assets/js/admin/share/contrast-checker{$min}.js",
			[],
			WPFORMS_VERSION,
			true
		);

		wp_enqueue_script(
			'wpforms-xor',
			WPFORMS_PLUGIN_URL . "assets/js/admin/share/xor{$min}.js",
			[],
			WPFORMS_VERSION,
			true
		);

		wp_enqueue_script(
			'wpforms-admin-email-settings',
			WPFORMS_PLUGIN_URL . "assets/js/admin/email/settings{$min}.js",
			[ 'jquery', 'wpforms-admin', 'wp-escape-html', 'wp-url', 'choicesjs', 'wpforms-contrast-checker', 'wpforms-xor' ],
			WPFORMS_VERSION,
			true
		);

		wp_localize_script(
			'wpforms-admin-email-settings',
			'wpforms_admin_email_settings',
			[
				'contrast_fail' => esc_html__( 'This color combination may be hard to read. Try increasing the contrast between the body and text colors.', 'wpforms-lite' ),
			]
		);
	}

	/**
	 * Maybe update settings.
	 *
	 * @since 1.8.5
	 *
	 * @param array $settings Admin area settings list.
	 *
	 * @return array
	 */
	public function maybe_update_settings( $settings ) {

		// Leave if the current page is not the "Email" settings page.
		if ( ! $this->is_settings_page() ) {
			return $settings;
		}

		// Remove the appearance mode switcher from the settings array.
		unset( $settings['email-appearance'] );

		// Backup the Pro version background color setting to the free version.
		// This is needed to keep the background color when the Pro version is deactivated.
		if ( wpforms()->is_pro() && ! Helpers::is_legacy_html_template() ) {
			$settings['email-background-color']      = sanitize_hex_color( $settings['email-color-scheme']['email_background_color'] );
			$settings['email-background-color-dark'] = sanitize_hex_color( $settings['email-color-scheme-dark']['email_background_color_dark'] );

			return $settings;
		}

		// Backup the free version background color setting to the Pro version.
		// This is needed to keep the background color when the Pro version is activated.
		$settings['email-color-scheme']['email_background_color']           = sanitize_hex_color( $settings['email-background-color'] );
		$settings['email-color-scheme-dark']['email_background_color_dark'] = sanitize_hex_color( $settings['email-background-color-dark'] );

		return $settings;
	}

	/**
	 * Register "Email" settings tab.
	 *
	 * @since 1.8.5
	 *
	 * @param array $tabs Admin area tabs list.
	 *
	 * @return array
	 */
	public function register_settings_tabs( $tabs ) {

		$payments = [
			'email' => [
				'form'   => true,
				'name'   => esc_html__( 'Email', 'wpforms-lite' ),
				'submit' => esc_html__( 'Save Settings', 'wpforms-lite' ),
			],
		];

		return wpforms_array_insert( $tabs, $payments, 'general' );
	}

	/**
	 * Register "Email" settings fields.
	 *
	 * @since 1.8.5
	 *
	 * @param array $settings Admin area settings list.
	 *
	 * @return array
	 */
	public function register_settings_fields( $settings ) {

		$this->plain_text          = Helpers::is_plain_text_template();
		$this->has_education       = ! wpforms()->is_pro() ? 'education-modal' : '';
		$this->style_overrides     = Helpers::get_current_template_style_overrides();
		$this->has_legacy_template = Helpers::is_legacy_html_template() ? 'legacy-template' : '';
		$preview_link              = $this->get_current_template_preview_link();

		// Add Email settings.
		$settings['email'] = [
			'email-heading'     => [
				'id'       => 'email-heading',
				'content'  => $this->get_heading_content(),
				'type'     => 'content',
				'no_label' => true,
				'class'    => [ 'section-heading', 'no-desc' ],
			],
			'email-template'    => [
				'id'      => 'email-template',
				'name'    => esc_html__( 'Template', 'wpforms-lite' ),
				'class'   => [ 'wpforms-email-template', 'wpforms-card-image-group' ],
				'type'    => 'email_template',
				'default' => Notifications::DEFAULT_TEMPLATE,
				'options' => Helpers::get_email_template_choices(),
				'value'   => Helpers::get_current_template_name(),
			],
			// The reason that we're using the 'content' type is to avoid saving the value in the option storage.
			// The value is used only for the appearance mode switcher, and merely acts as a switch between dark and light mode controls.
			'email-appearance'  => [
				'id'        => 'email-appearance',
				'name'      => esc_html__( 'Appearance', 'wpforms-lite' ),
				'desc'      => esc_html__( 'Modern email clients support viewing emails in light and dark modes. You can upload a header image and customize the style for each appearance mode independently to ensure an optimal reading experience.', 'wpforms-lite' ),
				'type'      => 'radio',
				'class'     => [ 'wpforms-setting-row-radio', 'hide-for-template-none', 'email-appearance-mode-toggle', $this->has_legacy_template ],
				'default'   => 'light',
				'is_hidden' => $this->plain_text,
				'options'   => [
					'light' => esc_html__( 'Light', 'wpforms-lite' ),
					'dark'  => esc_html__( 'Dark', 'wpforms-lite' ),
				],
			],
			'email-preview'     => [
				'id'        => 'email-preview',
				'type'      => 'content',
				'is_hidden' => empty( $preview_link ),
				'content'   => $preview_link,
			],
			'sending-heading'   => [
				'id'       => 'sending-heading',
				'content'  => '<h4>' . esc_html__( 'Sending', 'wpforms-lite' ) . '</h4>',
				'type'     => 'content',
				'no_label' => true,
				'class'    => [ 'section-heading', 'no-desc' ],
			],
			'email-async'       => [
				'id'     => 'email-async',
				'name'   => esc_html__( 'Optimize Email Sending', 'wpforms-lite' ),
				'desc'   => sprintf(
					wp_kses( /* translators: %1$s - WPForms.com Email settings documentation URL. */
						__( 'Send emails asynchronously, which can make processing faster but may delay email delivery by a minute or two. <a href="%1$s" target="_blank" rel="noopener noreferrer" class="wpforms-learn-more">Learn More</a>', 'wpforms-lite' ),
						[
							'a' => [
								'href'   => [],
								'target' => [],
								'rel'    => [],
								'class'  => [],
							],
						]
					),
					esc_url( wpforms_utm_link( 'https://wpforms.com/docs/a-complete-guide-to-wpforms-settings/#email', 'Settings - Email', 'Optimize Email Sending Documentation' ) )
				),
				'type'   => 'toggle',
				'status' => true,
			],
			'email-carbon-copy' => [
				'id'     => 'email-carbon-copy',
				'name'   => esc_html__( 'Carbon Copy', 'wpforms-lite' ),
				'desc'   => esc_html__( 'Enable the ability to CC: email addresses in the form notification settings.', 'wpforms-lite' ),
				'type'   => 'toggle',
				'status' => true,
			],
		];

		// Add the style controls.
		$settings['email'] = $this->add_appearance_controls( $settings['email'] );

		// Maybe add the Legacy template notice.
		$settings['email'] = $this->maybe_add_legacy_notice( $settings['email'] );

		return $settings;
	}

	/**
	 * Maybe add the legacy template notice.
	 *
	 * @since 1.8.5
	 *
	 * @param array $settings Email settings.
	 *
	 * @return array
	 */
	private function maybe_add_legacy_notice( $settings ) {

		if ( ! $this->is_settings_page() || ! Helpers::is_legacy_html_template() ) {
			return $settings;
		}

		$content  = '<div class="notice-info"><p>';
		$content .= sprintf(
			wp_kses( /* translators: %1$s - WPForms.com Email settings legacy template documentation URL. */
				__( 'Some style settings are not available when using the Legacy template. <a href="%1$s" target="_blank" rel="noopener noreferrer">Learn More</a>', 'wpforms-lite' ),
				[
					'a' => [
						'href'   => [],
						'target' => [],
						'rel'    => [],
					],
				]
			),
			esc_url( wpforms_utm_link( 'https://wpforms.com/docs/customizing-form-notification-emails/#legacy-template', 'Settings - Email', 'Legacy Template' ) )
		);
		$content .= '</p></div>';

		// Add the background color control after the header image.
		return wpforms_array_insert(
			$settings,
			[
				'email-legacy-notice' => [
					'id'      => 'email-legacy-notice',
					'content' => $content,
					'type'    => 'content',
					'class'   => 'wpforms-email-legacy-notice',
				],
			],
			'email-template'
		);
	}

	/**
	 * Add appearance controls.
	 * This will include controls for both Light and Dark modes.
	 *
	 * @since 1.8.6
	 *
	 * @param array $settings Email settings.
	 *
	 * @return array
	 */
	private function add_appearance_controls( $settings ) {

		// Education modal arguments.
		$education_args = [ 'action' => 'upgrade' ];

		// New settings for the Light mode.
		$new_setting = [
			'email-header-image'      => [
				'id'          => 'email-header-image',
				'name'        => esc_html__( 'Header Image', 'wpforms-lite' ),
				'desc'        => esc_html__( 'Upload or choose a logo to be displayed at the top of email notifications.', 'wpforms-lite' ),
				'class'       => [ 'wpforms-email-header-image', 'hide-for-template-none', 'has-preview-changes', 'email-light-mode', $this->get_external_header_image_class() ],
				'type'        => 'image',
				'is_hidden'   => $this->plain_text,
				'show_remove' => true,
			],
			'email-header-image-size' => [
				'id'        => 'email-header-image-size',
				'no_label'  => true,
				'type'      => 'select',
				'class'     => [ 'wpforms-email-header-image-size', 'has-preview-changes', 'email-light-mode' ],
				'is_hidden' => true,
				'choicesjs' => false,
				'default'   => 'medium',
				'options'   => [
					'small'  => esc_html__( 'Small', 'wpforms-lite' ),
					'medium' => esc_html__( 'Medium', 'wpforms-lite' ),
					'large'  => esc_html__( 'Large', 'wpforms-lite' ),
				],
			],
			'email-color-scheme'      => [
				'id'              => 'email-color-scheme',
				'name'            => esc_html__( 'Color Scheme', 'wpforms-lite' ),
				'class'           => [ 'email-color-scheme', 'hide-for-template-none', 'has-preview-changes', 'email-light-mode', $this->has_education, $this->has_legacy_template ],
				'type'            => 'color_scheme',
				'is_hidden'       => $this->plain_text,
				'education_badge' => $this->get_pro_education_badge(),
				'data_attributes' => $this->has_education ? array_merge( [ 'name' => esc_html__( 'Color Scheme', 'wpforms-lite' ) ], $education_args ) : [],
				'colors'          => $this->get_color_scheme_controls(),
			],
			'email-typography'        => [
				'id'              => 'email-typography',
				'name'            => esc_html__( 'Typography', 'wpforms-lite' ),
				'desc'            => esc_html__( 'Choose the style that’s applied to all text in email notifications.', 'wpforms-lite' ),
				'class'           => [ 'hide-for-template-none', 'has-preview-changes', 'email-typography', 'email-light-mode', $this->has_education, $this->has_legacy_template ],
				'education_badge' => $this->get_pro_education_badge(),
				'data_attributes' => $this->has_education ? array_merge( [ 'name' => esc_html__( 'Typography', 'wpforms-lite' ) ], $education_args ) : [],
				'type'            => 'select',
				'is_hidden'       => $this->plain_text,
				'choicesjs'       => true,
				'default'         => 'sans-serif',
				'options'         => [
					'sans-serif' => esc_html__( 'Sans Serif', 'wpforms-lite' ),
					'serif'      => esc_html__( 'Serif', 'wpforms-lite' ),
				],
			],
		];

		// Add background color control if the Pro version is not active or Legacy template is selected.
		$new_setting = $this->maybe_add_background_color_control( $new_setting );

		return wpforms_array_insert(
			$settings,
			$this->add_appearance_dark_mode_controls( $new_setting ),
			'email-appearance'
		);
	}

	/**
	 * Add appearance dark mode controls.
	 *
	 * This function will duplicate the default "Light" color
	 * controls to create corresponding controls for dark mode.
	 *
	 * @since 1.8.6
	 *
	 * @param array $settings Email settings.
	 *
	 * @return array
	 */
	private function add_appearance_dark_mode_controls( $settings ) {

		// Duplicate and modify each item for dark mode.
		foreach ( $settings as $key => $item ) {
			// Duplicate the item with '-dark' added to the key.
			$dark_key              = "{$key}-dark";
			$settings[ $dark_key ] = $item;

			// Modify the 'name' within the duplicated item.
			if ( isset( $settings[ $dark_key ]['id'] ) ) {
				$settings[ $dark_key ]['id'] .= '-dark';
				$classes                      = &$settings[ $dark_key ]['class'];
				$classes[]                    = 'email-dark-mode';
				$classes[]                    = 'wpforms-hide';

				// Remove classes related to light mode.
				$classes = array_filter(
					$classes,
					static function ( $class_name ) {

						return $class_name !== 'email-light-mode' && $class_name !== 'has-external-image-url';
					}
				);
			}

			// Override the description for the header image control.
			if ( $key === 'email-header-image' ) {
				$settings[ $dark_key ]['desc'] = esc_html__( 'Upload or choose a logo to be displayed at the top of email notifications. Light mode image will be used if not set.', 'wpforms-lite' );
			}

			// Override the background color control attributes.
			if ( $key === 'email-background-color' ) {
				$settings[ $dark_key ]['default']                = sanitize_hex_color( $this->style_overrides['email_background_color_dark'] );
				$settings[ $dark_key ]['data']['fallback-color'] = sanitize_hex_color( $this->style_overrides['email_background_color_dark'] );
			}

			// Override the color scheme control attributes.
			if ( $key === 'email-color-scheme' ) {
				$settings[ $dark_key ]['colors'] = $this->get_color_scheme_controls( true );
			}
		}

		return $settings;
	}

	/**
	 * Get Email settings heading content.
	 *
	 * @since 1.8.5
	 *
	 * @return string
	 */
	private function get_heading_content() {

		return wpforms_render( 'admin/settings/email-heading' );
	}

	/**
	 * Get Email settings education badge.
	 * This is only available in the free version.
	 *
	 * @since 1.8.6
	 *
	 * @return string
	 */
	private function get_pro_education_badge() {

		// Leave early if the user has the Lite version.
		if ( empty( $this->has_education ) ) {
			return '';
		}

		// Output the education badge.
		return EducationHelpers::get_badge( 'Pro' );
	}

	/**
	 * Generate color scheme controls for the color picker.
	 *
	 * @since 1.8.6
	 *
	 * @param bool $is_dark_mode Whether the color scheme is for dark mode.
	 *
	 * @return array
	 */
	private function get_color_scheme_controls( $is_dark_mode = false ) {

		// Append '_dark' to keys if it's for dark mode.
		$is_dark_mode_suffix = $is_dark_mode ? '_dark' : '';

		// Data attributes to disable extensions from appearing in the input field.
		$color_scheme_data = [
			'1p-ignore' => 'true', // 1Password ignore.
			'lp-ignore' => 'true', // LastPass ignore.
		];

		$colors   = [];
		$controls = [
			"email_background_color{$is_dark_mode_suffix}" => esc_html__( 'Background', 'wpforms-lite' ),
			"email_body_color{$is_dark_mode_suffix}"       => esc_html__( 'Body', 'wpforms-lite' ),
			"email_text_color{$is_dark_mode_suffix}"       => esc_html__( 'Text', 'wpforms-lite' ),
			"email_links_color{$is_dark_mode_suffix}"      => esc_html__( 'Links', 'wpforms-lite' ),
		];

		foreach ( $controls as $key => $label ) {
			// Construct the color controls array.
			$colors[ $key ] = [
				'name' => $label,
				'data' => array_merge(
					[
						'fallback-color' => $this->style_overrides[ $key ],
					],
					$color_scheme_data
				),
			];
		}

		return $colors;
	}

	/**
	 * Get current email template hyperlink.
	 *
	 * @since 1.8.5
	 *
	 * @return string
	 */
	private function get_current_template_preview_link() {

		// Leave if the user has the legacy template is set or the user doesn't have the capability.
		if ( ! wpforms_current_user_can() || Helpers::is_legacy_html_template() ) {
			return '';
		}

		$template_name    = Helpers::get_current_template_name();
		$current_template = Notifications::get_available_templates( $template_name );

		// Return empty string if the current template is not found.
		// Leave early if the preview link is empty.
		if ( ! isset( $current_template['path'] ) || ! class_exists( $current_template['path'] ) || empty( $current_template['preview'] ) ) {
			return '';
		}

		return sprintf(
			wp_kses( /* translators: %1$s - Email template preview URL. */
				__( '<a href="%1$s" class="wpforms-btn-preview" target="_blank" rel="noopener">Preview Email Template</a>', 'wpforms-lite' ),
				[
					'a' => [
						'class'  => true,
						'href'   => true,
						'target' => true,
						'rel'    => true,
					],
				]
			),
			esc_url( $current_template['preview'] )
		);
	}

	/**
	 * Maybe add the background color control to the email settings.
	 * This is only available in the free version.
	 *
	 * @since 1.8.5
	 *
	 * @param array $settings Email settings.
	 *
	 * @return array
	 */
	private function maybe_add_background_color_control( $settings ) {

		// Leave as is if the Pro version is active and no legacy template available.
		if ( ! Helpers::is_legacy_html_template() && wpforms()->is_pro() ) {
			return $settings;
		}

		// Add the background color control after the header image.
		return wpforms_array_insert(
			$settings,
			[
				'email-background-color' => [
					'id'        => 'email-background-color',
					'name'      => esc_html__( 'Background Color', 'wpforms-lite' ),
					'desc'      => esc_html__( 'Customize the background color of the email template.', 'wpforms-lite' ),
					'class'     => [ 'email-background-color', 'has-preview-changes', 'email-light-mode' ],
					'type'      => 'color',
					'is_hidden' => $this->plain_text,
					'default'   => '#e9eaec',
					'data'      => [
						'fallback-color' => $this->style_overrides['email_background_color'],
						'1p-ignore'      => 'true', // 1Password ignore.
						'lp-ignore'      => 'true', // LastPass ignore.
					],
				],
			],
			'email-color-scheme',
			'before'
		);
	}

	/**
	 * Gets the class for the header image control.
	 *
	 * This is used to determine if the header image is external.
	 * Legacy header image control was allowing external URLs.
	 *
	 * Note that this evaluation is only available for the "Light" mode,
	 * as the "Dark" mode is a new feature and doesn't have the legacy header image control.
	 *
	 * @since 1.8.5
	 *
	 * @return string
	 */
	private function get_external_header_image_class() {

		$header_image_url = wpforms_setting( 'email-header-image', '' );

		// If the header image URL is empty, return an empty string.
		if ( empty( $header_image_url ) ) {
			return '';
		}

		$site_url = home_url(); // Get the current site's URL.

		// Get the hosts of the site URL and the header image URL.
		$site_url_host         = wp_parse_url( $site_url, PHP_URL_HOST );
		$header_image_url_host = wp_parse_url( $header_image_url, PHP_URL_HOST );

		// Check if the header image URL host is different from the site URL host.
		if ( $header_image_url_host && $site_url_host && $header_image_url_host !== $site_url_host ) {
			return 'has-external-image-url';
		}

		return ''; // If none of the conditions match, return an empty string.
	}

	/**
	 * Determine if the current page is the "Email" settings page.
	 *
	 * @since 1.8.5
	 *
	 * @return bool
	 */
	private function is_settings_page() {

		return wpforms_is_admin_page( 'settings', 'email' );
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit