HEX
Server: LiteSpeed
System: Linux linux31.centraldnserver.com 4.18.0-553.83.1.lve.el8.x86_64 #1 SMP Wed Nov 12 10:04:12 UTC 2025 x86_64
User: salamatk (1501)
PHP: 8.1.33
Disabled: show_source, system, shell_exec, passthru, exec, popen, proc_open
Upload Files
File: /home/salamatk/.trash/woodmart1/inc/integrations/woocommerce/modules/attributes-meta-boxes.php
<?php
/**
 * Add meta boxes to attributes interface for woocommerce.
 *
 * @package Woodmart.
 */

if ( ! defined( 'WOODMART_THEME_DIR' ) ) {
	exit( 'No direct script access allowed' );
}

if ( ! function_exists( 'woodmart_wc_attribute_update' ) ) {
	/**
	 * This function save woocommerce attribute data after push 'update' button.
	 *
	 * @param mixed $attribute_id .
	 * @param mixed $attribute .
	 * @param mixed $old_attribute_name .
	 */
	function woodmart_wc_attribute_update( $attribute_id, $attribute, $old_attribute_name ) {
		$attribute_swatch_size = isset( $_POST['attribute_swatch_size'] ) ? $_POST['attribute_swatch_size'] : ''; // phpcs:ignore.
		update_option( 'woodmart_pa_' . $attribute['attribute_name'] . '_swatch_size', sanitize_text_field( $attribute_swatch_size ), false );

		$attribute_swatch_bg_style = isset( $_POST['attribute_swatch_style'] ) ? $_POST['attribute_swatch_style'] : ''; // phpcs:ignore.
		update_option( 'woodmart_pa_' . $attribute['attribute_name'] . '_swatch_style', sanitize_text_field( $attribute_swatch_bg_style ), false );

		$attribute_swatch_dis_style = isset( $_POST['attribute_swatch_dis_style'] ) ? $_POST['attribute_swatch_dis_style'] : ''; // phpcs:ignore.
		update_option( 'woodmart_pa_' . $attribute['attribute_name'] . '_swatch_dis_style', sanitize_text_field( $attribute_swatch_dis_style ), false );

		$attribute_swatch_shape = isset( $_POST['attribute_swatch_shape'] ) ? $_POST['attribute_swatch_shape'] : ''; // phpcs:ignore.
		update_option( 'woodmart_pa_' . $attribute['attribute_name'] . '_swatch_shape', sanitize_text_field( $attribute_swatch_shape ), false );

		$attribute_show_on_product = isset( $_POST['attribute_show_on_product'] ) ? $_POST['attribute_show_on_product'] : ''; // phpcs:ignore.
		update_option( 'woodmart_pa_' . $attribute['attribute_name'] . '_show_on_product', sanitize_text_field( $attribute_show_on_product ), false );

		$attribute_thumbnail = isset( $_POST['product_attr_thumbnail_id'] ) ? $_POST['product_attr_thumbnail_id'] : ''; // phpcs:ignore.
		update_option( 'woodmart_pa_' . sanitize_title_with_dashes( $attribute['attribute_name'] ) . '_thumbnail', sanitize_text_field( $attribute_thumbnail ), false );

		$attribute_hint = isset( $_POST['attribute_hint'] ) ? $_POST['attribute_hint'] : ''; // phpcs:ignore.
		update_option( 'woodmart_pa_' . sanitize_title_with_dashes( $attribute['attribute_name'] ) . '_hint', sanitize_text_field( $attribute_hint ), false );

		$attribute_change_image = isset( $_POST['attribute_change_image'] ) ? $_POST['attribute_change_image'] : ''; // phpcs:ignore.
		update_option( 'woodmart_pa_' . $attribute['attribute_name'] . '_change_image', sanitize_text_field( $attribute_change_image ), false );
	}

	add_action( 'woocommerce_attribute_updated', 'woodmart_wc_attribute_update', 20, 3 );
}

if ( ! function_exists( 'woodmart_wc_attribute_add' ) ) {
	/**
	 * This function save woocommerce attribute data after push 'Add attribute' button.
	 *
	 * @param mixed $attribute_id .
	 * @param mixed $attribute .
	 */
	function woodmart_wc_attribute_add( $attribute_id, $attribute ) {
		$attribute_swatch_size = isset( $_POST['attribute_swatch_size'] ) ? $_POST['attribute_swatch_size'] : ''; // phpcs:ignore.
		add_option( 'woodmart_pa_' . $attribute['attribute_name'] . '_swatch_size', sanitize_text_field( $attribute_swatch_size ), '', false );

		$attribute_swatch_bg_style = isset( $_POST['attribute_swatch_style'] ) ? $_POST['attribute_swatch_style'] : ''; // phpcs:ignore.
		add_option( 'woodmart_pa_' . $attribute['attribute_name'] . '_swatch_style', sanitize_text_field( $attribute_swatch_bg_style ), '', false );

		$attribute_swatch_dis_style = isset( $_POST['attribute_swatch_dis_style'] ) ? $_POST['attribute_swatch_dis_style'] : ''; // phpcs:ignore.
		add_option( 'woodmart_pa_' . $attribute['attribute_name'] . '_swatch_dis_style', sanitize_text_field( $attribute_swatch_dis_style ), '', false );

		$attribute_swatch_shape = isset( $_POST['attribute_swatch_shape'] ) ? $_POST['attribute_swatch_shape'] : ''; // phpcs:ignore.
		add_option( 'woodmart_pa_' . $attribute['attribute_name'] . '_swatch_shape', sanitize_text_field( $attribute_swatch_shape ), '', false );

		$attribute_show_on_product = isset( $_POST['attribute_show_on_product'] ) ? $_POST['attribute_show_on_product'] : ''; // phpcs:ignore.
		add_option( 'woodmart_pa_' . $attribute['attribute_name'] . '_show_on_product', sanitize_text_field( $attribute_show_on_product ), '', false );

		$attribute_thumbnail = isset( $_POST['product_attr_thumbnail_id'] ) ? $_POST['product_attr_thumbnail_id'] : ''; // phpcs:ignore.
		add_option( 'woodmart_pa_' . sanitize_title_with_dashes( $attribute['attribute_name'] ) . '_thumbnail', sanitize_text_field( $attribute_thumbnail ), '', false );

		$attribute_hint = isset( $_POST['attribute_hint'] ) ? $_POST['attribute_hint'] : ''; // phpcs:ignore.
		add_option( 'woodmart_pa_' . sanitize_title_with_dashes( $attribute['attribute_name'] ) . '_hint', sanitize_text_field( $attribute_hint ), '', false );

		$attribute_change_image = isset( $_POST['attribute_change_image'] ) ? $_POST['attribute_change_image'] : ''; // phpcs:ignore.
		add_option( 'woodmart_pa_' . $attribute['attribute_name'] . '_change_image', sanitize_text_field( $attribute_change_image ), '', false );
	}

	add_action( 'woocommerce_attribute_added', 'woodmart_wc_attribute_add', 20, 2 );
}

if ( ! function_exists( 'woodmart_wc_get_attribute_term' ) ) {

	/**
	 * Get attribute term.
	 *
	 * @param mixed $attribute_name .
	 * @param mixed $term .
	 * @return false|mixed|void
	 */
	function woodmart_wc_get_attribute_term( $attribute_name, $term, $default = false ) {
		return get_option( 'woodmart_' . $attribute_name . '_' . $term, $default );
	}
}

if ( ! function_exists( 'woodmart_render_product_attrs_admin_options' ) ) {
	/**
	 * Add product attribute labels options
	 *
	 * @since 1.0.0
	 */
	function woodmart_render_product_attrs_admin_options() {
		wp_enqueue_media();
		wp_enqueue_script( 'woodmart-admin-options', WOODMART_ASSETS . '/js/options.js', array(), WOODMART_VERSION, true );

		$swatch_shape_list     = array(
			'round'   => esc_html__( 'Round', 'woodmart' ),
			'rounded' => esc_html__( 'Rounded', 'woodmart' ),
			'square'  => esc_html__( 'Square', 'woodmart' ),
		);
		$swatch_size_list      = array(
			'xs'      => esc_html__( 'XS', 'woodmart' ),
			'default' => esc_html__( 'S', 'woodmart' ),
			'm'       => esc_html__( 'M', 'woodmart' ),
			'large'   => esc_html__( 'L', 'woodmart' ),
			'xlarge'  => esc_html__( 'XL', 'woodmart' ),
			'xxl'     => esc_html__( 'XXL', 'woodmart' ),
		);
		$swatch_style_list     = array(
			'1' => esc_html__( 'Style 1', 'woodmart' ),
			'2' => esc_html__( 'Style 2', 'woodmart' ),
			'3' => esc_html__( 'Style 3', 'woodmart' ),
			'4' => esc_html__( 'Style 4', 'woodmart' ),
		);
		$swatch_dis_style_list = array(
			'1' => esc_html__( 'Style 1', 'woodmart' ),
			'2' => esc_html__( 'Style 2', 'woodmart' ),
			'3' => esc_html__( 'Style 3', 'woodmart' ),
		);

		$show_on_product      = '';
		$thumb_id             = '';
		$attribute_hint       = '';
		$change_image_product = '';

		if ( ! empty( $_GET['edit'] ) ) { // phpcs:ignore
			$attribute_id   = sanitize_text_field( wp_unslash( $_GET['edit'] ) ); // phpcs:ignore
			$taxonomy_ids   = wc_get_attribute_taxonomy_ids();
			$attribute_name = 'pa_' . array_search( $attribute_id, $taxonomy_ids, false ); // phpcs:ignore

			$swatch_shape         = woodmart_wc_get_attribute_term( $attribute_name, 'swatch_shape' );
			$swatch_size          = woodmart_wc_get_attribute_term( $attribute_name, 'swatch_size' );
			$swatch_style         = woodmart_wc_get_attribute_term( $attribute_name, 'swatch_style' );
			$swatch_dis_style     = woodmart_wc_get_attribute_term( $attribute_name, 'swatch_dis_style' );
			$show_on_product      = woodmart_wc_get_attribute_term( $attribute_name, 'show_on_product' );
			$thumb_id             = woodmart_wc_get_attribute_term( $attribute_name, 'thumbnail' );
			$attribute_hint       = woodmart_wc_get_attribute_term( $attribute_name, 'hint' );
			$change_image_product = woodmart_wc_get_attribute_term( $attribute_name, 'change_image' );
		}

		$swatch_shape     = ! empty( $swatch_shape ) ? $swatch_shape : 'round';
		$swatch_size      = ! empty( $swatch_size ) ? $swatch_size : 'default';
		$swatch_style     = ! empty( $swatch_style ) ? $swatch_style : '1';
		$swatch_dis_style = ! empty( $swatch_dis_style ) ? $swatch_dis_style : '1';

		?>
		<div class="xts-box xts-options xts-metaboxes xts-theme-style">
			<div class="xts-box-content">
				<div class="xts-fields-tabs">
					<div class="xts-sections">
						<div class="xts-section xts-active-section" data-id="general">
							<div class="xts-fields">
								<div class="xts-group-title">
									<span><?php esc_html_e( 'Swatch', 'woodmart' ); ?></span>
								</div>
								<div class="xts-fields-group xts-group">
									<div class="xts-field xts-settings-field xts-buttons-control xts-images-set">
										<div class="xts-option-title">
											<label>
												<span>
													<?php esc_html_e( 'Swatch style', 'woodmart' ); ?>
												</span>
											</label>
										</div>
										<div class="xts-option-control">
											<div class="xts-btns-set">
												<?php foreach ( $swatch_style_list as $value => $label ) : ?>
													<div class="xts-set-item xts-set-btn-img<?php echo (string) $value === $swatch_style ? ' xts-active' : ''; ?>" data-value="<?php echo esc_attr( $value ); ?>">
														<img src="<?php echo esc_url( WOODMART_ASSETS_IMAGES . '/settings/swatches/swatches-style-' . $value . '.jpg' ); ?>" title="<?php echo esc_attr( $label ); ?>" alt="<?php echo esc_attr( $label ); ?>">
														<span class="xts-images-set-lable"><?php echo esc_html( $label ); ?></span>
													</div>
												<?php endforeach; ?>
											</div>
											<input type="hidden" name="attribute_swatch_style" value="<?php echo esc_attr( $swatch_style ); ?>">
										</div>
									</div>
									<div class="xts-field xts-settings-field xts-buttons-control xts-images-set">
										<div class="xts-option-title">
											<label>
												<span>
													<?php esc_html_e( 'Disabled swatch style', 'woodmart' ); ?>
												</span>
											</label>
										</div>
										<div class="xts-option-control">
											<div class="xts-btns-set">
												<?php foreach ( $swatch_dis_style_list as $value => $label ) : ?>
													<div class="xts-set-item xts-set-btn-img<?php echo (string) $value === $swatch_dis_style ? ' xts-active' : ''; ?>" data-value="<?php echo esc_attr( $value ); ?>">
														<img src="<?php echo esc_url( WOODMART_ASSETS_IMAGES . '/settings/swatches/disable-swatches-style-' . $value . '.jpg' ); ?>" title="<?php echo esc_attr( $label ); ?>" alt="<?php echo esc_attr( $label ); ?>">
														<span class="xts-images-set-lable"><?php echo esc_html( $label ); ?></span>
													</div>
												<?php endforeach; ?>
											</div>
											<input type="hidden" name="attribute_swatch_dis_style" value="<?php echo esc_attr( $swatch_dis_style ); ?>">
										</div>
									</div>
									<div class="xts-field xts-settings-field xts-buttons-control xts-images-set">
										<div class="xts-option-title">
											<label>
												<span>
													<?php esc_html_e( 'Swatch shape', 'woodmart' ); ?>
												</span>
											</label>
										</div>
										<div class="xts-option-control">
											<div class="xts-btns-set">
												<?php foreach ( $swatch_shape_list as $value => $label ) : ?>
													<div class="xts-set-item xts-set-btn-img<?php echo $value === $swatch_shape ? ' xts-active' : ''; ?>" data-value="<?php echo esc_attr( $value ); ?>">
														<img src="<?php echo esc_url( WOODMART_ASSETS_IMAGES . '/settings/swatches/swatch-form-' . $value . '.jpg' ); ?>" title="<?php echo esc_attr( $label ); ?>" alt="<?php echo esc_attr( $label ); ?>">
														<span class="xts-images-set-lable"><?php echo esc_html( $label ); ?></span>
													</div>
												<?php endforeach; ?>
											</div>
											<input type="hidden" name="attribute_swatch_shape" value="<?php echo esc_attr( $swatch_shape ); ?>">
										</div>
									</div>
									<div class="xts-field xts-settings-field xts-buttons-control">
										<div class="xts-option-title">
											<label>
												<span>
													<?php esc_html_e( 'Swatch size', 'woodmart' ); ?>
												</span>
											</label>
										</div>
										<div class="xts-option-control">
											<div class="xts-btns-set">
												<?php foreach ( $swatch_size_list as $value => $label ) : ?>
													<div class="xts-set-item xts-set-btn<?php echo $value === $swatch_size ? ' xts-active' : ''; ?>" data-value="<?php echo esc_attr( $value ); ?>">
														<span class="xts-images-set-lable"><?php echo esc_html( $label ); ?></span>
													</div>
												<?php endforeach; ?>
											</div>
											<input type="hidden" name="attribute_swatch_size" value="<?php echo esc_attr( $swatch_size ); ?>">
										</div>
									</div>
								</div>
								<div class="xts-group-title">
									<span><?php esc_html_e( 'Extra', 'woodmart' ); ?></span>
								</div>
								<div class="xts-fields-group xts-group">
									<div class="xts-field xts-settings-field xts-switcher-control">
										<div class="xts-option-title">
											<label>
												<span>
													<?php esc_html_e( 'Show attribute label on products', 'woodmart' ); ?>
												</span>
											</label>
											<div class="xts-hint">
												<div class="xts-tooltip xts-top"><img data-src="<?php echo esc_url( WOODMART_TOOLTIP_URL . 'show-attribute-label-on-products.jpg' ); ?>" alt=""></div>
											</div>
										</div>
										<div class="xts-option-control">
											<div class="xts-switcher-btn<?php echo esc_attr( 'on' === $show_on_product ? ' xts-active' : '' ); ?>" data-on="on" data-off="off">
												<div class="xts-switcher-dot-wrap">
													<div class="xts-switcher-dot"></div>
												</div>
												<div class="xts-switcher-labels">
													<span class="xts-switcher-label xts-on">
														<?php esc_html_e( 'Yes', 'woodmart' ); ?>
													</span>
													<span class="xts-switcher-label xts-off">
														<?php esc_html_e( 'No', 'woodmart' ); ?>
													</span>
												</div>
											</div>
											<input type="hidden" name="attribute_show_on_product" value="<?php echo esc_attr( $show_on_product ); ?>" >
										</div>
										<p class="xts-field-description">
											<?php esc_html_e( 'Enable this option to show an attribute label on the product image.', 'woodmart' ); ?>
										</p>
									</div>
									<div class="xts-field xts-settings-field xts-switcher-control">
										<div class="xts-option-title">
											<label>
												<span>
													<?php esc_html_e( 'Change product image on attribute click', 'woodmart' ); ?>
												</span>
											</label>
											<div class="xts-hint xts-loaded">
												<div class="xts-tooltip xts-top">
													<div class="xts-tooltip-inner"><video data-src="https://woodmart.xtemos.com/theme-settings-tooltips/change-product-image-attribute-click.mp4" autoplay="" loop="" muted="" src="https://woodmart.xtemos.com/theme-settings-tooltips/change-product-image-attribute-click.mp4"></video></div>
												</div>
											</div>
										</div>
										<div class="xts-option-control">
											<div class="xts-switcher-btn<?php echo esc_attr( 'on' === $change_image_product ? ' xts-active' : '' ); ?>" data-on="on" data-off="off">
												<div class="xts-switcher-dot-wrap">
													<div class="xts-switcher-dot"></div>
												</div>
												<div class="xts-switcher-labels">
													<span class="xts-switcher-label xts-on">
														<?php esc_html_e( 'Yes', 'woodmart' ); ?>
													</span>
													<span class="xts-switcher-label xts-off">
														<?php esc_html_e( 'No', 'woodmart' ); ?>
													</span>
												</div>
											</div>
											<input type="hidden" name="attribute_change_image" value="<?php echo esc_attr( $change_image_product ); ?>" >
										</div>
									</div>
									<div class="xts-field xts-settings-field xts-upload-control">
										<div class="xts-option-title">
											<label>
												<span>
													<?php esc_html_e( 'Attribute icon', 'woocommerce' ); ?>
												</span>
											</label>
											<div class="xts-hint">
												<div class="xts-tooltip xts-top"><img data-src="<?php echo esc_url( WOODMART_TOOLTIP_URL . 'attribute-icon.jpg' ); ?>" alt=""></div>
											</div>
										</div>
										<div class="xts-option-control">
											<div class="xts-upload-preview">
												<?php if ( ! empty( $thumb_id ) ) : ?>
													<img src="<?php echo esc_attr( wp_get_attachment_image_url( $thumb_id ) ); ?>" alt="">
												<?php endif; ?>
											</div>
											<div class="xts-upload-btns">
												<a class="xts-btn xts-upload-btn xts-i-import">
													<?php esc_html_e( 'Upload', 'woodmart' ); ?>
												</a>
												<a class="xts-btn xts-color-warning xts-remove-upload-btn xts-i-trash<?php echo ( isset( $thumb_id ) && ! empty( $thumb_id ) ) ? ' xts-active' : ''; ?>">
													<?php esc_html_e( 'Remove', 'woodmart' ); ?>
												</a>

												<input id="product_attr_thumbnail_id" type="hidden" class="xts-upload-input-id" name="product_attr_thumbnail_id" value="<?php echo esc_attr( $thumb_id ); ?>" />
											</div>
										</div>
										<p class="xts-field-description">
											<?php esc_html_e( 'Upload an icon that will be displayed on the additional information table.', 'woodmart' ); ?>
										</p>
									</div>
									<div class="xts-field xts-settings-field">
										<div class="xts-option-title">
											<label for="attribute_hint">
												<span>
													<?php esc_html_e( 'Attribute hint content', 'woodmart' ); ?>
												</span>
											</label>
											<div class="xts-hint">
												<div class="xts-tooltip xts-top"><img data-src="<?php echo esc_url( WOODMART_TOOLTIP_URL . 'attribute-hint.gif' ); ?>" alt=""></div>
											</div>
										</div>
										<div class="xts-option-control">
											<textarea id="attribute_hint" class="xts-textarea-plain" rows="5" name="attribute_hint"><?php echo esc_textarea( $attribute_hint ); ?></textarea>
										</div>
										<p class="xts-field-description">
											<?php esc_html_e( 'Enter the text that will be displayed as a hint on the additional information table.', 'woodmart' ); ?>
										</p>
									</div>
								</div>
							</div>
						</div>
					</div>
				</div>
			</div>
		</div>
		<?php
	}

	add_action( 'woocommerce_after_edit_attribute_fields', 'woodmart_render_product_attrs_admin_options' );
	add_action( 'woocommerce_after_add_attribute_fields', 'woodmart_render_product_attrs_admin_options' );
}

if ( ! function_exists( 'woodmart_get_term_hint_html' ) ) {
	/**
	 * Get term html.
	 *
	 * @param string $term_name Output term name.
	 * @param string $tooltip Output term tooltip.
	 *
	 * @return string
	 */
	function woodmart_get_term_hint_html( $term_name, $tooltip = '' ) {
		ob_start();
		?>
			<span class="wd-attr-term">
				<?php echo wp_kses_post( wpautop( wptexturize( $term_name ) ) ); ?>

				<?php if ( ! empty( $tooltip ) ) : ?>
					<span class="wd-hint wd-tooltip">
						<?php echo wp_kses_post( $tooltip ); ?>
					</span>
				<?php endif; ?>
			</span>
		<?php

		return trim( ob_get_clean() );
	}
}

if ( ! function_exists( 'woodmart_add_term_hint' ) ) {
	/**
	 * Add term hint.
	 *
	 * @param string               $term_html Output terms html.
	 * @param WC_Product_Attribute $attribute Instance of WC_Product_Attribute class.
	 * @param array                $values List of term values.
	 *
	 * @return string
	 */
	function woodmart_add_term_hint( $term_html, $attribute, $values ) {
		global $product;

		if ( ! $product || 'variation' === $product->get_type() ) {
			return $term_html;
		}

		foreach ( $attribute->get_options() as $key => $term_id ) {
			$tooltip        = get_term_meta( $term_id, 'pa_term_hint', true );
			$values[ $key ] = woodmart_get_term_hint_html( $values[ $key ], $tooltip );
		}

		return implode( ', ', $values );
	}

	add_filter( 'woocommerce_attribute', 'woodmart_add_term_hint', 10, 3 );
}