HEX
Server: Apache
System: Linux webm020.cluster127.gra.hosting.ovh.net 6.18.42-ovh-vps-grsec-zfs+ #1 SMP PREEMPT_DYNAMIC Wed Aug 5 15:59:48 CEST 2026 x86_64
User: bohousj (181416)
PHP: 8.4.22
Disabled: _dyuweyrj4,_dyuweyrj4r,dl
Upload Files
File: /home/bohousj/www/wp-content/plugins/happy-elementor-addons-pro/classes/designs-manager.php
<?php
namespace Happy_Addons_Pro;

use Elementor\Controls_Manager;
use Happy_Addons_Pro\Controls\Image_Selector;

defined( 'ABSPATH' ) || die();

class Designs_Manager {

	public static function init() {
		
		// add_action( 'happyaddons_start_register_controls', [ __CLASS__, 'add_surprise_controls' ], 10, 3 );
		if( defined('HAPPY_ADDONS_VERSION') && HAPPY_ADDONS_VERSION >= '3.8.4' ) {
			add_action( 'happyaddons_after_register_content_controls', [ __CLASS__, 'add_surprise_controls' ], 10, 3 );
		}else{
			add_action( 'happyaddons_start_register_controls', [ __CLASS__, 'add_surprise_controls' ], 10, 3 );
		}
		add_action( 'elementor/editor/after_enqueue_scripts', [ __CLASS__, 'enqueue_editor_scripts' ] );
		add_action( 'wp_ajax_ha_make_me_surprised', [ __CLASS__, 'surprise_me' ] );
	}

	public static function surprise_me() {
		if ( ! check_ajax_referer( self::get_secret_id(), 'secret' ) ) {
			wp_send_json_error( __( 'Invalid surprise request', 'happy-addons-pro' ), 403 );
		}

		if ( empty( $_GET['widget'] ) ) {
			wp_send_json_error( __( 'Incomplete surprise request', 'happy-addons-pro' ), 404 );
		}

		if ( ! ( $surprises = self::get_surprises( substr( $_GET['widget'], 3 ) ) ) ) {
			wp_send_json_error( __( 'Surprise not found', 'happy-addons-pro' ), 404 );
		}

		// Finally you got the surprise
		wp_send_json_success( $surprises, 200 );
	}

	protected static function get_surprises( $design_name ) {
		$design = HAPPY_ADDONS_PRO_DIR_PATH . 'assets/designs/' . $design_name . '/' . $design_name . '.json';
		if ( ! is_readable( $design ) ) {
			return false;
		}
		return file_get_contents( $design );
	}

	private static function get_secret_id() {
		return 'ha_surprise_secret';
	}

	public static function enqueue_editor_scripts() {
		$data = '
        .elementor-control-_ha_design .ha-reset-design {
            position: absolute;
            -webkit-transform: translateY(-50%);
            transform: translateY(-50%);
            cursor: pointer;
			top: 2%;
			left: auto;
			right: 20px;
			padding: 3px;
			border-radius: 6px;
			box-shadow: none;
			font-size: var(--control-title-size);
			border: 0;
			background: none;
        }

		html[dir="rtl"] .elementor-control-_ha_design .ha-reset-design,
		body.rtl .elementor-control-_ha_design .ha-reset-design {
			left: 20px;
			right: auto;
        }

        .elementor-control-_ha_design .ha-reset-design:hover {
            color: #562dd4;
        }
        ';
		wp_add_inline_style( 'hapro-editor-css', $data );

		if ( hapro_is_elementor_version( '>=', '2.8.0' ) ) {
			$src = HAPPY_ADDONS_PRO_ASSETS . 'admin/js/design-new.min.js';
		} else {
			$src = HAPPY_ADDONS_PRO_ASSETS . 'admin/js/design.min.js';
		}

		wp_enqueue_script(
			'hapro-design',
			$src,
			[ 'elementor-editor' ],
			HAPPY_ADDONS_PRO_VERSION,
			true
		);

		wp_localize_script(
			'hapro-design',
			'hapro',
			[
				'ajaxUrl' => admin_url( 'admin-ajax.php' ),
				'secret'  => wp_create_nonce( self::get_secret_id() ),
			]
		);
	}

	/**
	 * @param $widget
	 */
	public static function add_surprise_controls( $widget ) {
		$widget_key = substr( $widget->get_name(), 3 );
		$designs    = self::get_designs_map();

		if ( isset( $designs[ $widget_key ] ) && ! empty( $designs[ $widget_key ] ) ) {
			$widget->start_controls_section(
				'_section_ha_design',
				[
					'label' => __( 'Presets', 'happy-addons-pro' ),
					'tab'   => Controls_Manager::TAB_CONTENT,
				]
			);

			$widget->add_control(
				'_ha_design',
				[
					'label'          => __( 'Designs', 'happy-addons-pro' ),
					'label_block'    => true,
					'show_label'     => true,
					'type'           => Image_Selector::TYPE,
					'default'        => '',
					'options'        => self::get_image_list( $widget_key, $designs[ $widget_key ] ),
					'render_type'    => 'none',
					'style_transfer' => true,
				]
			);

			$widget->end_controls_section();
		}
	}

	public static function get_image_list( $widget_key, $design_count ) {
		$list      = [];
		$path      = HAPPY_ADDONS_PRO_DIR_URL . 'assets/designs/' . $widget_key;
		$extension = '.jpg';
		for ( $i = 1; $i <= $design_count; $i++ ) {
			$list[ 'design-' . $i ] = [
				'title' => ucwords( 'design ' . $i ),
				'url'   => $path . '/design-' . $i . $extension,
			];
		}
		return $list;
	}

	public static function get_designs_map() {
		return [
			'accordion'                     => 9,
			'advanced-data-table'           => 4,
			'advanced-heading'              => 14,
			'advanced-slider'               => 8,
			'advanced-tabs'                 => 13,
			'animated-text'                 => 10,
			'author-list'                   => 5,
			'bar-chart'                     => 4,
			'breadcrumbs'                   => 11,
			'business-hour'                 => 10,
			'calderaform'                   => 4,
			'card'                          => 13,
			'carousel'                      => 6,
			'cf7'                           => 4,
			'content-switcher'              => 5,
			'countdown'                     => 12,
			'data-table'                    => 7,
			'dual-button'                   => 7,
			'edd-category-grid'             => 2,
			'edd-product-carousel'          => 2,
			'edd-product-grid'              => 2,
			'edd-single-product'            => 3,
			'event-calendar'                => 4,
			'feature-list'                  => 11,
			'flip-box'                      => 9,
			'fluent-form'                   => 6,
			'fun-factor'                    => 8,
			'gradient-heading'              => 5,
			'gravityforms'                  => 3,
			'horizontal-timeline'           => 6,
			'hotspots'                      => 6,
			'hover-box'                     => 7,
			'icon-box'                      => 11,
			'image-accordion'               => 5,
			'image-compare'                 => 5,
			'image-grid'                    => 5,
			'image-hover-effect'            => 17,
			'image-stack-group'             => 11,
			'infobox'                       => 12,
			'instagram-feed'                => 9,
			'line-chart'                    => 5,
			'link-hover'                    => 15,
			'list-group'                    => 10,
			'logo-carousel'                 => 8,
			'logo-grid'                     => 6,
			'mailchimp'                     => 11,
			'member'                        => 10,
			'news-ticker'                   => 11,
			'ninjaform'                     => 3,
			'number'                        => 8,
			'pie-chart'                     => 2,
			'polar-chart'                   => 2,
			'post-carousel'                 => 10,
			'post-grid-new'                 => 9,
			'post-list'                     => 12,
			'post-tab'                      => 6,
			'post-tiles'                    => 12,
			'price-menu'                    => 10,
			'pricing-table'                 => 11,
			'product-carousel-new'          => 3,
			'product-category-carousel-new' => 3,
			'product-category-grid-new'     => 6,
			'product-grid-new'              => 4,
			'promo-box'                     => 9,
			'radar-chart'                   => 2,
			'review'                        => 9,
			'scrolling-image'               => 8,
			'single-product-new'            => 7,
			'skills'                        => 4,
			'slider'                        => 4,
			'smart-post-list'               => 10,
			'social-icons'                  => 13,
			'social-share'                  => 14,
			'step-flow'                     => 7,
			'sticky-video'                  => 4,
			'taxonomy-list'                 => 7,
			'team-carousel'                 => 12,
			'testimonial'                   => 7,
			'testimonial-carousel'          => 13,
			'timeline'                      => 13,
			'toggle'                        => 11,
			'twitter-carousel'              => 8,
			'twitter-feed'                  => 8,
			'unfold'                        => 8,
			'wc-cart'                       => 1,
			'wc-checkout'                   => 1,
			'weform'                        => 3,
			'wpform'                        => 4,
		];
	}
}

Designs_Manager::init();