HEX
Server: Apache/2.4.65 (Debian)
System: Linux web6 5.10.0-36-amd64 #1 SMP Debian 5.10.244-1 (2025-09-29) x86_64
User: innocamp (1028)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /home/plan4ev/public_html/wp-content/plugins/siteorigin-premium/addons/plugin/cta/cta.php
<?php
/*
Plugin Name: SiteOrigin Call-To-Action
Description: Boost your Call To Action Widget with expanded settings and styles, offering precise control to create compelling buttons that engage and convert your audience.
Version: 1.0.0
Author: SiteOrigin
Author URI: https://siteorigin.com
License: GPL3
License URI: https://www.gnu.org/licenses/gpl-3.0.txt
Documentation: https://siteorigin.com/premium-documentation/plugin-addons/call-to-action/
Tags: Widgets Bundle
Video: 314963197
Requires: so-widgets-bundle/cta
*/

class SiteOrigin_Premium_Plugin_Cta {
	public function __construct() {
		add_action( 'init', array( $this, 'init_addon' ) );
	}

	public static function single() {
		static $single;

		return empty( $single ) ? $single = new self() : $single;
	}

	/**
	 * Do any required intialization.
	 */
	public function init_addon() {
		$this->add_filters();
	}

	/**
	 * Add filters for modifying various widget related properties and configuration.
	 */
	public function add_filters() {
		if ( class_exists( 'SiteOrigin_Widget_Cta_Widget' ) ) {
			add_filter( 'siteorigin_widgets_form_options_sow-cta', array( $this, 'admin_form_options' ), 10, 2 );

			add_filter( 'siteorigin_widgets_less_variables_sow-cta', array( $this, 'add_less_variables' ), 10, 3 );

			add_action( 'siteorigin_widgets_cta_after_wrapper', array( $this, 'add_html_background' ) );

			add_filter( 'siteorigin_widgets_less_vars_sow-cta', array( $this, 'add_less' ), 20, 3 );
		}
	}

	/**
	 * Filters the admin form for the call-to-action widget to add Premium fields.
	 *
	 * @param $form_options array The Call-To-Action Widget's form options.
	 * @param $widget SiteOrigin_Widget_Cta_Widget The widget object.
	 *
	 * @return mixed The updated form options array containing the new and modified fields.
	 */
	public function admin_form_options( $form_options, $widget ) {
		if ( empty( $form_options ) ) {
			return $form_options;
		}

		$form_options['design']['fields']['image'] = array(
			'type' => 'section',
			'label' => __( 'Image', 'siteorigin-premium' ),
			'fields' => array(
				'file' => array(
					'type' => 'media',
					'label' => __( 'Image', 'siteorigin-premium' ),
					'library' => 'image',
					'fallback' => true,
				),
				'display' => array(
					'type' => 'select',
					'label' => __( 'Image Display', 'siteorigin-premium' ),
					'default' => 'background',
					'options' => array(
						'background' => __( 'Background Image', 'siteorigin-premium' ),
						'right' => __( 'Right of Text', 'siteorigin-premium' ),
						'left' => __( 'Left of Text', 'siteorigin-premium' ),
					),
					'state_emitter' => array(
						'callback' => 'select',
						'args' => array( 'image' )
					),
				),
				'background_style' => array(
					'type' => 'select',
					'label' => __( 'Background Style', 'siteorigin-premium' ),
					'default' => 'cover',
					'options' => array(
						'cover' => __( 'Cover', 'siteorigin-premium' ),
						'contain' => __( 'Contain', 'siteorigin-premium' ),
						'fixed' => __( 'Fixed', 'siteorigin-premium' ),
						'parallax' => __( 'Parallax', 'siteorigin-premium' ),
					),
					'state_handler' => array(
						'image[background]' => array( 'show' ),
						'_else[image]' => array( 'hide' ),
					),
				),
				'gutter' => array(
					'label' => __( 'Gutter', 'siteorigin-premium' ),
					'type' => 'measurement',
					'default' => '25px',
					'state_handler' => array(
						'image[left,right]' => array( 'show' ),
						'_else[image]' => array( 'hide' ),
					),
				),
				'image_size' => array(
					'type' => 'image-size',
					'label' => __( 'Image Size', 'siteorigin-premium' ),
					'default' => 'full',
				),
			),
		);

		$form_options['design']['fields']['layout']['fields']['content_vertical_align'] = array(
			'name' => 'alignment',
			'type' => 'select',
			'label' => __( 'Content Vertical Alignment', 'siteorigin-premium' ),
			'default' => 'center',
			'state_handler' => array(
				'image[right,left]' => array( 'show' ),
				'_else[image]' => array( 'hide' ),
			),
			'options' => array(
				'start' => __( 'Top', 'siteorigin-premium' ),
				'center' => __( 'Center', 'siteorigin-premium' ),
				'end' => __( 'Bottom', 'siteorigin-premium' ),
			),
		);

		$form_options['design']['fields']['layout']['fields']['padding'] = array(
			'type' => 'multi-measurement',
			'label' => __( 'Padding', 'siteorigin-premium' ),
			'default' => '2em 2.5em 2em 2.5em',
			'measurements' => array(
				'top' => array(
					'label' => __( 'Top', 'siteorigin-premium' ),
					'units' => array( 'px', '%', 'em' ),
				),
				'right' => array(
					'label' => __( 'Right', 'siteorigin-premium' ),
					'units' => array( 'px', '%', 'em' ),
				),
				'bottom' => array(
					'label' => __( 'Bottom', 'siteorigin-premium' ),
					'units' => array( 'px', '%', 'em' ),
				),
				'left' => array(
					'label' => __( 'Left', 'siteorigin-premium' ),
					'units' => array( 'px', '%', 'em' ),
				),
			),
		);

		return $form_options;
	}

	/**
	 * Filters the new design related fields into the LESS variables used for the LESS stylesheet.
	 *
	 * @param $less_variables array LESS variable values to be used in the LESS stylesheet.
	 * @param $instance array The widget instance containing possible values to be used in the LESS stylesheet.
	 * @param $widget SiteOrigin_Widget_Cta_Widget The widget object.
	 *
	 * @return mixed The updated LESS variables containing the new and modified variables.
	 */
	public function add_less_variables( $less_variables, $instance, $widget ) {
		if ( empty( $less_variables ) ) {
			return $less_variables;
		}

		$less_variables['padding'] = ! empty( $instance['design']['layout']['padding'] ) ? $instance['design']['layout']['padding'] : '2em 2.5em';
		if ( ! empty( $instance['design']['image'] ) ) {
			if (
				(
					! empty( $instance['design']['image']['file'] ) ||
					! empty( $instance['design']['image']['file_fallback'] )
				) &&
				$instance['design']['image']['display'] == 'background' &&
				$instance['design']['image']['background_style'] != 'parallax'
			) {
				$less_variables['image'] = 'url( "' . esc_url( self::get_background( $instance ) ) . '" )';
			}

			$less_variables['background_style'] = ! empty( $instance['design']['image']['background_style'] ) ? $instance['design']['image']['background_style'] : 'cover';
			$less_variables['background_display'] = ! empty( $instance['design']['image']['display'] ) ? $instance['design']['image']['display'] : 'background';
			$less_variables['content_align'] = ! empty( $instance['design']['layout']['content_vertical_align'] ) ? $instance['design']['layout']['content_vertical_align'] : 'top';

			$less_variables['button_align'] = ! empty( $instance['design']['layout']['desktop'] ) ? $instance['design']['layout']['desktop'] : '';
			$less_variables['button_align_mobile'] = ! empty( $instance['design']['layout']['mobile'] ) ? $instance['design']['layout']['mobile'] : '';

			if (
				! empty( $instance['design']['image']['gutter'] ) &&
				(
					$instance['design']['image']['display'] == 'left' ||
					$instance['design']['image']['display'] == 'right'
				)
			) {
				$less_variables['gutter'] = $instance['design']['image']['gutter'];
			}
		}

		return $less_variables;
	}

	private static function get_background( $instance ) {
		$background = siteorigin_widgets_get_attachment_image_src(
			$instance['design']['image']['file'],
			$instance['design']['image']['image_size'],
			! empty( $instance['design']['image']['file_fallback'] ) ? $instance['design']['image']['file_fallback'] : false
		);

		if ( ! empty( $background ) ) {
			return $background[0];
		}

		return false;
	}

	public function add_html_background( $instance ) {
		if (
			! empty( $instance['design']['image'] ) &&
			(
				! empty( $instance['design']['image']['file'] ) ||
				! empty( $instance['design']['image']['file_fallback'] )
			)
		) {

			if (
				$instance['design']['image']['display'] == 'left' ||
				$instance['design']['image']['display'] == 'right'
			) {
				$image = siteorigin_widgets_get_attachment_image(
					$instance['design']['image']['file'],
					$instance['design']['image']['image_size'],
					! empty( $instance['design']['image']['file_fallback'] ) ? $instance['design']['image']['file_fallback'] : false,
					array( 'class' => 'siteorigin-premium-cta-image' )
				);

				if ( ! empty( $image ) ) {
					echo $image;
				}
			} elseif ( $instance['design']['image']['background_style'] == 'parallax' ) {
				wp_enqueue_script( 'siteorigin-parallax' );
				wp_enqueue_script( 'simpleParallax' );

				$background = self::get_background( $instance );
				if ( ! empty( $background ) ) {
					?>
					<img
						class="siteorigin-premium-cta-background-parallax"
						src="<?php echo esc_url( $background ); ?>"
						data-siteorigin-parallax="true"
						loading="eager"
						style="position: absolute; top: 0; right: 0; bottom: 0; left: 0; z-index: 0;"
					>
					<?php
				}
			}
		}
	}

	/**
	 * If an image is set, import a LESS file.
	 *
	 * @param string $less The current less content.
	 * @param array $vars The current less variables.
	 * @param array $instance The current widget instance.
	 *
	 * @return string The updated less content.
	 */
	public function add_less( $less, $vars, $instance ) {
		if (
			! empty( $less ) &&
			! empty( $instance['design']['image'] ) &&
			(
				! empty( $instance['design']['image']['file'] ) ||
				! empty( $instance['design']['image']['file_fallback'] )
			)
		) {
			$less .= file_get_contents( plugin_dir_path( __FILE__ ) . 'less/image.less' );
		}

		return $less;
	}
}