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.147.81.172
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/misswavenigeria.com/wp-content/plugins/siteorigin-panels/widgets/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /home/wavevlvu/misswavenigeria.com/wp-content/plugins/siteorigin-panels/widgets/widgets.php
<?php
// Include all the basic widgets
include plugin_dir_path( __FILE__ ) . '/less/functions.php';

/**
 * Include all the widget files and register their widgets
 */
function origin_widgets_init() {
	foreach ( glob( plugin_dir_path( __FILE__ ) . '/widgets/*/*.php' ) as $file ) {
		include_once $file;

		$p = pathinfo( $file );
		$class = $p['filename'];
		$class = str_replace( '-', ' ', $class );
		$class = ucwords( $class );
		$class = str_replace( ' ', '_', $class );

		$class = 'SiteOrigin_Panels_Widget_' . $class;

		if ( class_exists( $class ) ) {
			register_widget( $class );
		}
	}
}
add_action( 'widgets_init', 'origin_widgets_init' );

function origin_widgets_enqueue( $prefix ) {
	if ( $prefix == 'widgets.php' ) {
		wp_enqueue_script( 'origin-widgets-admin-script', plugin_dir_url( __FILE__ ) . 'js/admin.js', array( 'jquery' ), SITEORIGIN_PANELS_VERSION );
	}
}
add_action( 'admin_enqueue_scripts', 'origin_widgets_enqueue' );

function origin_widgets_generate_css( $class, $style, $preset, $version = null ) {
	$widget = new $class();

	if ( ! is_subclass_of( $widget, 'SiteOrigin_Panels_Widget' ) ) {
		return '';
	}

	if ( empty( $version ) ) {
		$version = SITEORIGIN_PANELS_VERSION;
	}

	$id = str_replace( '_', '', strtolower( str_replace( 'SiteOrigin_Panels_Widget_', '', $class ) ) );
	$key = strtolower( $id . '-' . $style . '-' . $preset . '-' . str_replace( '.', '', $version ) );

	$css = get_site_transient( 'origin_wcss:' . $key );

	if ( $css === false || ( defined( 'SITEORIGIN_PANELS_NOCACHE' ) && SITEORIGIN_PANELS_NOCACHE ) ) {
		// Recreate the CSS
		$css = "/* Regenerate Cache */\n\n";
		$css .= $widget->create_css( $style, $preset );
		$css = preg_replace( '#/\*.*?\*/#s', '', $css );
		$css = preg_replace( '/\s*([{}|:;,])\s+/', '$1', $css );
		$css = preg_replace( '/\s\s+(.*)/', '$1', $css );
		$css = str_replace( ';}', '}', $css );

		set_site_transient( 'origin_wcss:' . $key, $css, 86400 );
	}

	return $css;
}

function origin_widgets_footer_css() {
	global $origin_widgets_generated_css;

	if ( ! empty( $origin_widgets_generated_css ) ) {
		echo "<style>";

		foreach ( $origin_widgets_generated_css as $id => $css ) {
			if ( empty( $css ) ) {
				continue;
			}
			echo $css;
			$origin_widgets_generated_css[$id] = '';
		}
		echo '</style>';
	}
}
add_action( 'wp_head', 'origin_widgets_footer_css' );
add_action( 'wp_footer', 'origin_widgets_footer_css' );

/**
 * Class SiteOrigin_Panels_Widget
 */
abstract class SiteOrigin_Panels_Widget extends WP_Widget {
	public $form_args;
	protected $demo;
	protected $origin_id;
	public $sub_widgets;

	private $styles;

	/**
	 * Create the widget
	 *
	 * @param string $name            Name for the widget displayed on the configuration page.
	 * @param array  $widget_options  Optional Passed to wp_register_sidebar_widget()
	 *                                - description: shown on the configuration page
	 *                                - classname
	 * @param array  $control_options Optional Passed to wp_register_widget_control()
	 *                                - width: required if more than 250px
	 *                                - height: currently not used but may be needed in the future
	 * @param array  $form            Form arguments.
	 * @param array  $demo            Values for the demo of the page builder widget.
	 *
	 * @internal param string $id_base
	 */
	public function __construct( $name, $widget_options = array(), $control_options = array(), $form = array(), $demo = array() ) {
		$id_base = str_replace( 'SiteOrigin_Panels_Widget_', '', get_class( $this ) );
		$id_base = strtolower( str_replace( '_', '-', $id_base ) );

		parent::__construct( 'origin_' . $id_base, $name, $widget_options, $control_options );
		$this->origin_id = $id_base;

		$this->form_args = $form;
		$this->demo = $demo;
		$this->styles = array();
		$this->sub_widgets = array();
	}

	/**
	 * Update the widget and save the new CSS.
	 *
	 * @param array $old
	 * @param array $new
	 *
	 * @return array
	 */
	public function update( $new, $old ) {
		// We wont clear cache if this is a preview
		if ( ! is_preview() ) {
			// Remove the old CSS file
			if ( ! empty( $old['origin_style'] ) ) {
				list( $style, $preset ) = explode( ':', $old['origin_style'] );
				$this->clear_css_cache( $style, $preset );
			}

			// Clear the cache for all sub widgets
			if ( ! empty( $this->sub_widgets ) ) {
				global $wp_widget_factory;

				foreach ( $this->sub_widgets as $id => $sub ) {
					if ( empty( $old['origin_style_' . $id] ) ) {
						continue;
					}
					$the_widget = $wp_widget_factory->widgets[$sub[1]];
					list( $style, $preset ) = explode( ':', $old['origin_style_' . $id] );

					$the_widget->clear_css_cache( $style, $preset );
				}
			}
		}

		foreach ( $this->form_args as $field_id => $field_args ) {
			if ( $field_args['type'] == 'checkbox' ) {
				$new[$field_id] = ! empty( $new[$field_id] );
			}
		}

		return $new;
	}

	/**
	 * Display the form for the widget. Auto generated from form array.
	 *
	 * @param array $instance
	 *
	 * @return string|void
	 */
	public function form( $instance ) {
		?>
		<div style="margin-bottom: 20px;">
			<strong>
				<?php
				printf(
					__( 'This is a legacy Page Builder widget. Please move to use widgets from the %sSiteOrigin Widgets Bundle%s plugin when able.', 'siteorigin-panels' ),
					'<a href="https://wordpress.org/plugins/so-widgets-bundle" target="_blank" rel="noopener noreferrer">',
					'</a>'
				);
				?>
			</strong>
		</div>
		<?php

		foreach ( $this->form_args as $field_id => $field_args ) {
			if ( isset( $field_args['default'] ) && ! isset( $instance[ $field_id ] ) ) {
				$instance[ $field_id ] = $field_args['default'];
			}

			if ( ! isset( $instance[$field_id] ) ) {
				$instance[ $field_id ] = false;
			}

			?><p><label for="<?php echo esc_attr( $this->get_field_id( $field_id ) ); ?>"><?php echo esc_html( $field_args['label'] ); ?></label><?php

			if ( $field_args['type'] != 'checkbox' ) {
				echo '<br />';
			}

			switch( $field_args['type'] ) {
				case 'text':
					?>
					<input
						type="text"
						class="widefat"
						id="<?php echo esc_attr( $this->get_field_id( $field_id ) ); ?>"
						name="<?php echo esc_attr( $this->get_field_name( $field_id ) ); ?>"
						value="<?php echo esc_attr( $instance[ $field_id ] ); ?>"
					/>
					<?php
					break;

				case 'textarea':
					if ( empty( $field_args['height'] ) ) {
						$field_args['height'] = 6;
					}
					?>
					<textarea
						class="widefat"
						id="<?php echo esc_attr( $this->get_field_id( $field_id ) ); ?>"
						name="<?php echo esc_attr( $this->get_field_name( $field_id ) ); ?>"
						rows="<?php echo (int) $field_args['height']; ?>"
					><?php echo esc_textarea( $instance[ $field_id ] ); ?></textarea>
					<?php
					break;

				case 'number':
					?>
					<input
						type="number"
						class="small-text"
						id="<?php echo esc_attr( $this->get_field_id( $field_id ) ); ?>"
						name="<?php echo esc_attr( $this->get_field_name( $field_id ) ); ?>"
						value="<?php echo (float) $instance[ $field_id ]; ?>"
					/>
					<?php
					break;

				case 'checkbox':
					?>
					<input
						type="checkbox"
						class="small-text"
						id="<?php echo esc_attr( $this->get_field_id( $field_id ) ); ?>"
						name="<?php echo esc_attr( $this->get_field_name( $field_id ) ); ?>"
						<?php checked( ! empty( $instance[ $field_id ] ) ); ?>
					/>
					<?php
					break;

				case 'select':
					?>
					<select
						id="<?php echo esc_attr( $this->get_field_id( $field_id ) ); ?>"
						name="<?php echo esc_attr( $this->get_field_name( $field_id ) ); ?>">
						<?php foreach ( $field_args['options'] as $k => $v ) { ?>
							<option
								value="<?php echo esc_attr( $k ); ?>"
								<?php selected( $instance[ $field_id ], $k ); ?>
							>
								<?php echo esc_html( $v ); ?>
							</option>
						<?php } ?>
					</select>
					<?php
					break;
			}

			if ( ! empty( $field_args['description'] ) ) {
				echo '<small class="description">' . esc_html( $field_args['description'] ) . '</small>';
			}

			?>
			</p>
			<?php
		}

		if ( ! isset( $instance['origin_style'] ) ) {
			$instance['origin_style'] = ! empty( $this->widget_options['default_style'] ) ? $this->widget_options['default_style'] : false;
		}

		do_action( 'siteorigin_panels_widget_before_styles', $this, $instance );

		// Now, lets add the style options.
		$styles = $this->get_styles();

		if ( ! empty( $styles ) ) {
			?>
			<p>
				<label for="<?php echo esc_attr( $this->get_field_id( 'origin_style' ) ); ?>"><?php esc_html_e( 'Style', 'siteorigin-panels' ); ?></label>
				<select name="<?php echo esc_attr( $this->get_field_name( 'origin_style' ) ); ?>" id="<?php echo esc_attr( $this->get_field_id( 'origin_style' ) ); ?>">
					<?php
					foreach ( $this->get_styles() as $style_id => $style_info ) {
						$presets = $this->get_style_presets( $style_id ); ?>
						<?php if ( ! empty( $presets ) ) { ?>
							<?php foreach ( $presets as $preset_id => $preset ) { ?>
								<option value="<?php echo esc_attr( $style_id . ':' . $preset_id ); ?>" <?php selected( $style_id . ':' . $preset_id, $instance['origin_style'] ); ?>>
									<?php echo esc_html( $style_info['Name'] . ' - ' . ucwords( str_replace( '_', ' ', $preset_id ) ) ); ?>
								</option>
							<?php } ?>
						<?php } ?>
					<?php } ?>
				</select>
			</p>
			<?php
		}

		do_action( 'siteorigin_panels_widget_before_substyles', $this, $instance );

		foreach ( $this->sub_widgets as $id => $sub ) {
			global $wp_widget_factory;
			$the_widget = $wp_widget_factory->widgets[$sub[1]];

			if ( ! isset( $instance['origin_style_' . $id] ) ) {
				$instance['origin_style_' . $id] = ! empty( $this->widget_options['default_style_' . $id] ) ? $this->widget_options['default_style_' . $id] : false;
			}

			?>
			<p>
				<label for="<?php echo esc_attr( $this->get_field_id( 'origin_style_' . $id ) ); ?>"><?php printf( __( '%s Style', 'siteorigin-panels' ), $sub[0] ); ?></label>
				<select name="<?php echo esc_attr( $this->get_field_name( 'origin_style_' . $id ) ); ?>" id="<?php echo esc_attr( $this->get_field_id( 'origin_style_' . $id ) ); ?>">
					<?php foreach ( $the_widget->get_styles() as $style_id => $style_info ) {
						$presets = $the_widget->get_style_presets( $style_id ); ?>
						<?php if ( ! empty( $presets ) ) {
							foreach ( $presets as $preset_id => $preset ) { ?>
								<option value="<?php echo esc_attr( $style_id . ':' . $preset_id ); ?>" <?php selected( $style_id . ':' . $preset_id, $instance['origin_style_' . $id] ); ?>>
									<?php echo esc_html( $style_info['Name'] . ' - ' . ucwords( str_replace( '_', ' ', $preset_id ) ) ); ?>
								</option>
							<?php } ?>
						<?php } ?>
					<?php } ?>
				</select>
			</p>
			<?php
		}

		do_action( 'siteorigin_panels_widget_after_styles', $this, $instance );
	}

	/**
	 * Render the widget.
	 *
	 * @param array $args
	 * @param array $instance
	 *
	 * @return bool|void
	 */
	public function widget( $args, $instance ) {
		// Set up defaults for all the widget args
		foreach ( $this->form_args as $field_id => $field_args ) {
			if ( isset( $field_args['default'] ) && ! isset( $instance[$field_id] ) ) {
				$instance[$field_id] = $field_args['default'];
			}

			if ( ! isset( $instance[ $field_id ] ) ) {
				$instance[ $field_id ] = false;
			}
		}

		// Filter the title
		if ( ! empty( $instance['title'] ) ) {
			$instance['title'] = apply_filters( 'widget_title', $instance['title'], $instance, $this->id_base );
		}

		if ( ! empty( $instance['origin_style'] ) ) {
			list( $style, $preset ) = explode( ':', $instance['origin_style'] );
			$style = sanitize_file_name( $style );
			$preset = sanitize_file_name( $preset );

			$data = $this->get_style_data( $style );
			$template = $data['Template'];
		} else {
			$style = 'default';
			$preset = 'default';
		}

		if ( empty( $template ) ) {
			$template = 'default';
		}

		$template_file = false;
		$paths = $this->get_widget_paths();

		foreach ( $paths as $path ) {
			if ( file_exists( $path . '/' . $this->origin_id . '/tpl/' . $template . '.php' ) ) {
				$template_file = $path . '/' . $this->origin_id . '/tpl/' . $template . '.php';
				break;
			}
		}

		if ( empty( $template_file ) ) {
			echo $args['before_widget'];
			esc_html_e( 'Template not found', 'siteorigin-panels' );
			echo $args['after_widget'];

			return false;
		}

		// Dynamically generate the CSS
		global $origin_widgets_generated_css;

		if ( empty( $origin_widgets_generated_css ) ) {
			$origin_widgets_generated_css = array();
		}

		if ( ! empty( $instance['origin_style'] ) ) {
			$filename = $this->origin_id . '-' . $style . '-' . $preset;

			if ( ! isset( $origin_widgets_generated_css[$filename] ) ) {
				$origin_widgets_generated_css[$filename] = origin_widgets_generate_css( get_class( $this ), $style, $preset );
			}
		}

		if ( method_exists( $this, 'enqueue_scripts' ) ) {
			$this->enqueue_scripts();
		}

		$widget_classes = apply_filters( 'siteorigin_widgets_classes', array(
			'origin-widget',
			'origin-widget-' . $this->origin_id,
			'origin-widget-' . $this->origin_id . '-' . $style . '-' . $preset,
		), $instance );

		if ( method_exists( $this, 'widget_classes' ) ) {
			$widget_classes = $this->widget_classes( array(
				'origin-widget',
				'origin-widget-' . $this->origin_id,
				'origin-widget-' . $this->origin_id . '-' . $style . '-' . $preset,
			), $instance );
		}

		echo $args['before_widget'];
		echo '<div class="' . esc_attr( implode( ' ', $widget_classes ) ) . '">';
		include $template_file;
		echo '</div>';
		echo $args['after_widget'];
	}

	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	// Extra functions specific to a SiteOrigin widget.
	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

	/**
	 * A sub widget is a widget that's style is required by this widget
	 */
	public function sub_widget( $id, $instance ) {
		$sub = $this->sub_widgets[$id];
		global $wp_widget_factory;
		$the_widget = $wp_widget_factory->widgets[$sub[1]];
		$the_widget->widget( array( 'before_widget' => '', 'after_widget' => '' ), $instance );
	}

	/**
	 * Get the CSS for the given style and preset
	 *
	 * @return string
	 */
	public function create_css( $style, $preset ) {
		$paths = $this->get_widget_paths();
		$style_file = false;

		// Find the file - exit if it can't be found.
		foreach ( $paths as $path ) {
			if ( file_exists( $path . '/' . $this->origin_id . '/styles/' . $style . '.less' ) ) {
				$style_file = $path . '/' . $this->origin_id . '/styles/' . $style . '.less';
				break;
			}
		}

		if ( empty( $style_file ) ) {
			return '';
		}

		if ( ! class_exists( 'lessc' ) ) {
			include plugin_dir_path( __FILE__ ) . 'lib/lessc.inc.php';
		}

		foreach ( $this->get_widget_folders() as $folder => $folder_url ) {
			$filename = rtrim( $folder, '/' ) . '/' . $this->origin_id . '/styles/' . $style . '.less';

			if ( file_exists( $filename ) ) {
				$less = file_get_contents( $filename );
				break;
			}
		}
		// Add in the mixins
		$less = str_replace(
			'@import "../../../less/mixins";',
			"\n\n" . file_get_contents( plugin_dir_path( __FILE__ ) . 'less/mixins.less' ),
			$less
		);

		// Apply the preset variables to the LESS file
		$presets = $this->get_style_presets( $style );

		if ( ! empty( $presets[$preset] ) && is_array( $presets[$preset] ) ) {
			foreach ( $presets[$preset] as $k => $v ) {
				$less = preg_replace( '/@' . preg_quote( $k ) . ':(.*);/', '@' . $k . ': ' . $v . ';', $less );
			}
		}

		// Scope the CSS with the wrapper we'll be adding
		$less = '.origin-widget.origin-widget-' . $this->origin_id . '-' . $style . '-' . $preset . ' {' . $less . '}';
		$lc = new lessc();
		$lc->setPreserveComments( false );

		$lc->registerFunction( 'lumlighten', 'origin_widgets_less_lumlighten' );
		$lc->registerFunction( 'lumdarken', 'origin_widgets_less_lumdarken' );
		$lc->registerFunction( 'texture', 'origin_widgets_less_texture' );
		$lc->registerFunction( 'widgetimage', 'origin_widgets_less_widgetimage' );

		// Create the CSS
		return $lc->compile( $less );
	}

	/**
	 * Removes a CSS file
	 */
	public function clear_css_cache( $style, $preset ) {
		$filename = $this->origin_id . '-' . $style . '-' . $preset;
		delete_site_transient( 'origin_widgets_css_cache:' . $filename );
	}

	/**
	 * Get all the paths where we'll look for widgets.
	 *
	 * @return array
	 */
	public function get_widget_paths() {
		static $paths = array();

		if ( empty( $paths ) ) {
			$paths = array_keys( $this->get_widget_folders() );
		}

		return $paths;
	}

	/**
	 * Get all the folders where we'll look for widgets
	 *
	 * @return mixed|void
	 */
	public static function get_widget_folders() {
		static $folders = array();

		if ( empty( $folders ) ) {
			$folders = array(
				get_stylesheet_directory() . '/widgets' => get_stylesheet_directory_uri() . '/widgets/widgets',
				get_template_directory() . '/widgets' => get_template_directory_uri() . '/widgets',
				plugin_dir_path( __FILE__ ) . 'widgets' => plugin_dir_url( __FILE__ ) . 'widgets',
			);
			$folders = apply_filters( 'siteorigin_widget_folders', $folders );
		}

		return $folders;
	}

	/**
	 * Get all the folders where we'll look for widget images
	 *
	 * @return mixed|void
	 */
	public static function get_image_folders() {
		static $folders = array();

		if ( empty( $folders ) ) {
			$folders = array(
				get_stylesheet_directory() . '/widgets/img' => get_stylesheet_directory_uri() . '/widgets/img',
				get_template_directory() . '/widgets/img' => get_template_directory_uri() . '/widgets/img',
				plugin_dir_path( __FILE__ ) . 'img' => plugin_dir_url( __FILE__ ) . 'img',
			);
			$folders = apply_filters( 'siteorigin_widget_image_folders', $folders );
		}

		return $folders;
	}

	/**
	 * Get all the styles for this widget.
	 *
	 * @return array
	 */
	public function get_styles() {
		if ( empty( $this->styles ) ) {
			// We can add extra paths here
			foreach ( $this->get_widget_paths() as $path ) {
				if ( !is_dir( $path ) ) {
					continue;
				}

				$files = glob( $path . '/' . $this->origin_id . '/styles/*.less' );

				if ( ! empty( $files ) ) {
					foreach ( glob( $path . '/' . $this->origin_id . '/styles/*.less' ) as $file ) {
						$p = pathinfo( $file );
						$this->styles[$p['filename']] = $this->get_style_data( $p['filename'] );
					}
				}
			}
		}

		return $this->styles;
	}

	/**
	 * Get the presets for a given style
	 *
	 * @return mixed|void
	 */
	public function get_style_presets( $style_id ) {
		$presets = array();

		foreach ( $this->get_widget_folders() as $folder => $folder_uri ) {
			$filename = rtrim( $folder, '/' ) . '/' . $this->origin_id . '/presets/' . sanitize_file_name( $style_id ) . '.php';

			if ( file_exists( $filename ) ) {
				// This file should register a filter that adds the presets
				$new_presets = include $filename;
				$presets = array_merge( $presets, $new_presets );
			}
		}

		return apply_filters( 'origin_widget_presets_' . $this->origin_id . '_' . $style_id, $presets );
	}

	/**
	 * Get data for the style.
	 *
	 * @return array
	 */
	public function get_style_data( $name ) {
		$paths = $this->get_widget_paths();

		foreach ( $paths as $path ) {
			$filename = $path . '/' . $this->origin_id . '/styles/' . sanitize_file_name( $name ) . '.less';

			if ( !file_exists( $filename ) ) {
				continue;
			}

			$data = get_file_data( $filename, array(
				'Name' => 'Name',
				'Template' => 'Template',
				'Author' => 'Author',
				'Author URI' => 'Author URI',
			), 'origin_widget' );

			return $data;
		}

		return false;
	}

	/**
	 * Render a demo of the widget.
	 *
	 * @param array $args
	 */
	public function render_demo( $args = array() ) {
		$this->widget( $args, $this->demo );
	}

	/**
	 * Register a widget that we'll be using inside this widget.
	 */
	public function add_sub_widget( $id, $name, $class ) {
		$this->sub_widgets[$id] = array( $name, $class );
	}

	/**
	 * Add the fields required to query the posts.
	 */
	public function add_post_query_fields() {
		// Add the posts type field
		$post_types = get_post_types( array( 'public' => true ) );
		$post_types = array_values( $post_types );
		$this->form_args['query_post_type'] = array(
			'type' => 'select',
			'options' => $post_types,
			'label' => __( 'Post Type', 'siteorigin-panels' ),
		);

		// Add the posts per page field
		$this->form_args['query_posts_per_page'] = array(
			'type' => 'number',
			'default' => 10,
			'label' => __( 'Posts Per Page', 'siteorigin-panels' ),
		);

		$this->form_args['query_orderby'] = array(
			'type' => 'select',
			'label' => __( 'Order By', 'siteorigin-panels' ),
			'options' => array(
				'none'  => __( 'None', 'siteorigin-panels' ),
				'ID'  => __( 'Post ID', 'siteorigin-panels' ),
				'author'  => __( 'Author', 'siteorigin-panels' ),
				'name'  => __( 'Name', 'siteorigin-panels' ),
				'name'  => __( 'Name', 'siteorigin-panels' ),
				'date'  => __( 'Date', 'siteorigin-panels' ),
				'modified'  => __( 'Modified', 'siteorigin-panels' ),
				'parent'  => __( 'Parent', 'siteorigin-panels' ),
				'rand'  => __( 'Random', 'siteorigin-panels' ),
				'comment_count'  => __( 'Comment Count', 'siteorigin-panels' ),
				'menu_order'  => __( 'Menu Order', 'siteorigin-panels' ),
			),
		);

		$this->form_args['query_order'] = array(
			'type' => 'select',
			'label' => __( 'Order', 'siteorigin-panels' ),
			'options' => array(
				'ASC'  => __( 'Ascending', 'siteorigin-panels' ),
				'DESC'  => __( 'Descending', 'siteorigin-panels' ),
			),
		);

		$this->form_args['query_sticky'] = array(
			'type' => 'select',
			'label' => __( 'Sticky Posts', 'siteorigin-panels' ),
			'options' => array(
				''  => __( 'Default', 'siteorigin-panels' ),
				'ignore'  => __( 'Ignore Sticky', 'siteorigin-panels' ),
				'exclude'  => __( 'Exclude Sticky', 'siteorigin-panels' ),
				'only'  => __( 'Only Sticky', 'siteorigin-panels' ),
			),
		);

		$this->form_args['query_additional'] = array(
			'type' => 'text',
			'label' => __( 'Additional Arguments', 'siteorigin-panels' ),
			'description' => preg_replace(
				'/1\{ *(.*?) *\}/',
				'<a href="http://codex.wordpress.org/Function_Reference/query_posts">$1</a>',
				__( 'Additional query arguments. See 1{query_posts}.', 'siteorigin-panels' )
			),
		);
	}

	/**
	 * Get all the posts for the current query
	 *
	 * @return WP_Query
	 */
	public static function get_query_posts( $instance ) {
		$query_args = array();

		foreach ( $instance as $k => $v ) {
			if ( strpos( $k, 'query_' ) === 0 ) {
				$query_args[preg_replace( '/query_/', '', $k, 1 )] = $v;
			}
		}
		$query = $query_args;
		unset( $query['additional'] );
		unset( $query['sticky'] );

		// Add the additional arguments
		$query = wp_parse_args( $query_args['additional'], $query );

		// Add the sticky posts if required
		switch( $query_args['sticky'] ) {
			case 'ignore':
				$query['ignore_sticky_posts'] = 1;
				break;

			case 'only':
				$query['post__in'] = get_option( 'sticky_posts' );
				break;

			case 'exclude':
				$query['post__not_in'] = get_option( 'sticky_posts' );
				break;
		}

		// Add the current page
		global $wp_query;
		$query['paged'] = $wp_query->get( 'paged' );

		return new WP_Query( $query );
	}
}

// All the standard bundled widgets

/**
 * A gallery widget
 *
 * Class SiteOrigin_Panels_Widgets_Gallery
 */
class SiteOrigin_Panels_Widgets_Gallery extends WP_Widget {
	public function __construct() {
		parent::__construct(
			'siteorigin-panels-gallery',
			__( 'Gallery (PB)', 'siteorigin-panels' ),
			array(
				'description' => __( 'Displays a gallery.', 'siteorigin-panels' ),
			)
		);
	}

	public function widget( $args, $instance ) {
		echo $args['before_widget'];

		$shortcode_attr = array();

		foreach ( $instance as $k => $v ) {
			if ( empty( $v ) ) {
				continue;
			}
			$shortcode_attr[] = sanitize_key( $k ) . '="' . esc_attr( $v ) . '"';
		}

		echo do_shortcode( '[gallery ' . implode( ' ', $shortcode_attr ) . ']' );

		echo $args['after_widget'];
	}

	public function update( $new, $old ) {
		return $new;
	}

	public function form( $instance ) {
		global $_wp_additional_image_sizes;

		$types = apply_filters( 'siteorigin_panels_gallery_types', array() );

		$instance = wp_parse_args( $instance, array(
			'ids' => '',
			'size' => apply_filters( 'siteorigin_panels_gallery_default_size', '' ),
			'type' => apply_filters( 'siteorigin_panels_gallery_default_type', '' ),
			'columns' => 3,
			'link' => '',
		) );

		?>
		<p>
			<label for="<?php echo esc_attr( $this->get_field_id( 'ids' ) ); ?>"><?php esc_html_e( 'Gallery Images', 'siteorigin-panels' ); ?></label>
			<a href="#" onclick="return false;" class="so-gallery-widget-select-attachments hidden"><?php esc_html_e( 'edit gallery', 'siteorigin-panels' ); ?></a>
			<input type="text" class="widefat" value="<?php echo esc_attr( $instance['ids'] ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'ids' ) ); ?>" />
		</p>
		<p class="description">
			<?php _e( "Comma separated attachment IDs. Defaults to all current page's attachments.", 'siteorigin-panels' ); ?>
		</p>

		<p>
			<label for="<?php echo esc_attr( $this->get_field_id( 'size' ) ); ?>"><?php esc_html_e( 'Image Size', 'siteorigin-panels' ); ?></label>
			<select name="<?php echo esc_attr( $this->get_field_name( 'size' ) ); ?>" id="<?php echo esc_attr( $this->get_field_id( 'size' ) ); ?>">
				<option value="" <?php selected( empty( $instance['size'] ) ); ?>><?php esc_html_e( 'Default', 'siteorigin-panels' ); ?></option>
				<option value="large" <?php selected( 'large', $instance['size'] ); ?>><?php esc_html_e( 'Large', 'siteorigin-panels' ); ?></option>
				<option value="medium" <?php selected( 'medium', $instance['size'] ); ?>><?php esc_html_e( 'Medium', 'siteorigin-panels' ); ?></option>
				<option value="thumbnail" <?php selected( 'thumbnail', $instance['size'] ); ?>><?php esc_html_e( 'Thumbnail', 'siteorigin-panels' ); ?></option>
				<option value="full" <?php selected( 'full', $instance['size'] ); ?>><?php esc_html_e( 'Full', 'siteorigin-panels' ); ?></option>
				<?php if ( ! empty( $_wp_additional_image_sizes ) ) {
					foreach ( $_wp_additional_image_sizes as $name => $info ) { ?>
						<option value="<?php echo esc_attr( $name ); ?>" <?php selected( $name, $instance['size'] ); ?>><?php echo esc_html( $name ); ?></option>
					<?php } ?>
				<?php } ?>
			</select>
		</p>

		<p>
			<label for="<?php echo esc_attr( $this->get_field_id( 'type' ) ); ?>"><?php esc_html_e( 'Gallery Type', 'siteorigin-panels' ); ?></label>
			<input type="text" class="regular" value="<?php echo esc_attr( $instance['type'] ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'type' ) ); ?>" />
		</p>

		<p>
			<label for="<?php echo esc_attr( $this->get_field_id( 'columns' ) ); ?>"><?php esc_html_e( 'Columns', 'siteorigin-panels' ); ?></label>
			<input type="text" class="regular" value="<?php echo esc_attr( $instance['columns'] ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'columns' ) ); ?>" />
		</p>

		<p>
			<label for="<?php echo esc_attr( $this->get_field_id( 'link' ) ); ?>"><?php esc_html_e( 'Link To', 'siteorigin-panels' ); ?></label>
			<select name="<?php echo esc_attr( $this->get_field_name( 'link' ) ); ?>" id="<?php echo esc_attr( $this->get_field_id( 'link' ) ); ?>">
				<option value="" <?php selected( '', $instance['link'] ); ?>><?php esc_html_e( 'Attachment Page', 'siteorigin-panels' ); ?></option>
				<option value="file" <?php selected( 'file', $instance['link'] ); ?>><?php esc_html_e( 'File', 'siteorigin-panels' ); ?></option>
				<option value="none" <?php selected( 'none', $instance['link'] ); ?>><?php esc_html_e( 'None', 'siteorigin-panels' ); ?></option>
			</select>
		</p>

	<?php
	}
}

/**
 * An image widget
 *
 * Class SiteOrigin_Panels_Widgets_Image
 */
class SiteOrigin_Panels_Widgets_Image extends WP_Widget {
	public function __construct() {
		parent::__construct(
			'siteorigin-panels-image',
			__( 'Image (PB)', 'siteorigin-panels' ),
			array(
				'description' => __( 'Displays a simple image.', 'siteorigin-panels' ),
			)
		);
	}

	/**
	 * @param array $args
	 * @param array $instance
	 */
	public function widget( $args, $instance ) {
		echo $args['before_widget'];

		if ( ! empty( $instance['href'] ) ) {
			echo '<a href="' . esc_url( $instance['href'] ) . '">';
		}
		echo '<img src="' . esc_url( $instance['src'] ) . '" />';

		if ( ! empty( $instance['href'] ) ) {
			echo '</a>';
		}
		echo $args['after_widget'];
	}

	public function update( $new, $old ) {
		$new = wp_parse_args( $new, array(
			'src' => '',
			'href' => '',
		) );

		return $new;
	}

	public function form( $instance ) {
		$instance = wp_parse_args( $instance, array(
			'src' => '',
			'href' => '',
		) );

		?>
		<p>
			<label for="<?php echo esc_attr( $this->get_field_id( 'src' ) ); ?>"><?php esc_html_e( 'Image URL', 'siteorigin-panels' ); ?></label>
			<input type="text" class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'src' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'src' ) ); ?>" value="<?php echo esc_attr( $instance['src'] ); ?>" />
		</p>
		<p>
			<label for="<?php echo esc_attr( $this->get_field_id( 'href' ) ); ?>"><?php esc_html_e( 'Destination URL', 'siteorigin-panels' ); ?></label>
			<input type="text" class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'href' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'href' ) ); ?>" value="<?php echo esc_attr( $instance['href'] ); ?>" />
		</p>
	<?php
	}
}

/**
 * A widget that lets you embed video.
 */
class SiteOrigin_Panels_Widgets_EmbeddedVideo extends WP_Widget {
	public function __construct() {
		parent::__construct(
			'siteorigin-panels-embedded-video',
			__( 'Embedded Video (PB)', 'siteorigin-panels' ),
			array(
				'description' => __( 'Embeds a video.', 'siteorigin-panels' ),
			)
		);
	}

	/**
	 * Display the video using
	 *
	 * @param array $args
	 * @param array $instance
	 */
	public function widget( $args, $instance ) {
		$embed = new WP_Embed();

		if ( ! wp_script_is( 'siteorigin-panels-embedded-video' ) ) {
			wp_enqueue_script( 'siteorigin-panels-embedded-video', plugin_dir_url( __FILE__ ) . 'js/embedded-video.js', array( 'jquery', 'fitvids' ), SITEORIGIN_PANELS_VERSION );
		}

		echo $args['before_widget'];
		?><div class="siteorigin-fitvids"><?php echo $embed->run_shortcode( '[embed]' . $instance['video'] . '[/embed]' ); ?></div><?php
		echo $args['after_widget'];
	}

	/**
	 * Display the embedded video form.
	 *
	 * @param array $instance
	 *
	 * @return string|void
	 */
	public function form( $instance ) {
		$instance = wp_parse_args( $instance, array(
			'video' => '',
		) );

		?>
		<p>
			<label for="<?php echo $this->get_field_id( 'video' ); ?>"><?php esc_html_e( 'Video', 'siteorigin-panels' ); ?></label>
			<input type="text" class="widefat" name="<?php echo $this->get_field_name( 'video' ); ?>" id="<?php echo $this->get_field_id( 'video' ); ?>" value="<?php echo esc_attr( $instance['video'] ); ?>" />
		</p>
		<?php
	}

	public function update( $new, $old ) {
		$new['video'] = str_replace( 'https://', 'http://', $new['video'] );

		return $new;
	}
}

class SiteOrigin_Panels_Widgets_Video extends WP_Widget {
	public function __construct() {
		parent::__construct(
			'siteorigin-panels-video',
			__( 'Self Hosted Video (PB)', 'siteorigin-panels' ),
			array(
				'description' => __( 'A self hosted video player.', 'siteorigin-panels' ),
			)
		);
	}

	public function widget( $args, $instance ) {
		if ( empty( $instance['url'] ) ) {
			return;
		}

		if ( !function_exists( 'wp_video_shortcode' ) ) {
			return;
		}

		$instance = wp_parse_args( $instance, array(
			'url' => '',
			'poster' => '',
			'autoplay' => false,
		) );

		echo $args['before_widget'];
		echo wp_video_shortcode( array(
			'src' => $instance['url'],
			'poster' => $instance['poster'],
			'autoplay' => $instance['autoplay'],
		) );
		echo $args['after_widget'];
	}

	public function update( $new, $old ) {
		$new['url'] = esc_url_raw( $new['url'] );
		$new['poster'] = esc_url_raw( $new['poster'] );
		$new['autoplay'] = ! empty( $new['autoplay'] ) ? 1 : 0;

		return $new;
	}

	public function form( $instance ) {
		$instance = wp_parse_args( $instance, array(
			'url' => '',
			'poster' => '',
			'skin' => 'siteorigin',
			'ratio' => 1.777,
			'autoplay' => false,
		) );

		?>
		<p>
			<label for="<?php echo $this->get_field_id( 'url' ); ?>"><?php esc_html_e( 'Video URL', 'siteorigin-panels' ); ?></label>
			<input id="<?php echo $this->get_field_id( 'url' ); ?>" name="<?php echo $this->get_field_name( 'url' ); ?>" type="text" class="widefat" value="<?php echo esc_attr( $instance['url'] ); ?>" />
		</p>
		<p>
			<label for="<?php echo $this->get_field_id( 'poster' ); ?>"><?php esc_html_e( 'Poster URL', 'siteorigin-panels' ); ?></label>
			<input id="<?php echo $this->get_field_id( 'poster' ); ?>" name="<?php echo $this->get_field_name( 'poster' ); ?>" type="text" class="widefat" value="<?php echo esc_attr( $instance['poster'] ); ?>" />
			<small class="description"><?php esc_html_e( 'An image that displays before the video starts playing.', 'siteorigin-panels' ); ?></small>
		</p>
		<p>
			<label for="<?php echo $this->get_field_id( 'autoplay' ); ?>">
				<input id="<?php echo $this->get_field_id( 'autoplay' ); ?>" name="<?php echo $this->get_field_name( 'autoplay' ); ?>" type="checkbox" value="1" <?php checked( $instance['autoplay'] ); ?> />
				<?php esc_html_e( 'Auto Play Video', 'siteorigin-panels' ); ?>
			</label>
		</p>
	<?php
	}
}

/**
 * A shortcode for self hosted video.
 *
 * @param array $atts
 *
 * @return string
 */
function siteorigin_panels_video_shortcode( $atts ) {
	/**
	 * @var string $url
	 * @var string $poster
	 * @var string $skin
	 */
	$instance = shortcode_atts( array(
		'url' => '',
		'src' => '',
		'poster' => '',
		'skin' => 'siteorigin',
		'ratio' => 1.777,
		'autoplay' => 0,
	), $atts );

	if ( ! empty( $instance['src'] ) ) {
		$instance['url'] = $instance['src'];
	}

	if ( empty( $instance['url'] ) ) {
		return;
	}

	ob_start();
	the_widget( 'SiteOrigin_Panels_Widgets_Video', $instance );

	return ob_get_clean();
}
add_shortcode( 'self_video', 'siteorigin_panels_video_shortcode' );

/**
 * Register the widgets.
 */
function siteorigin_panels_widgets_init() {
	register_widget( 'SiteOrigin_Panels_Widgets_Gallery' );
	register_widget( 'SiteOrigin_Panels_Widgets_Image' );
	register_widget( 'SiteOrigin_Panels_Widgets_EmbeddedVideo' );
	register_widget( 'SiteOrigin_Panels_Widgets_Video' );
}
add_action( 'widgets_init', 'siteorigin_panels_widgets_init' );

Youez - 2016 - github.com/yon3zu
LinuXploit