/home/arranoyd/pi-konzalting/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 type="text/css">';
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
*/
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
*/
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
_e( 'This is a legacy widget. ', 'siteorigin-panels' );
_e( 'Ideally you should move to using widgets from the SiteOrigin Widgets Bundle instead. ', 'siteorigin-panels' );
_e( "It'll be moved to a separate plugin after Page Builder 2.6 is released. ", 'siteorigin-panels' );
echo '<a href="https://siteorigin.com/widgets-bundle/" target="_blank" rel="noopener noreferrer">' . __( 'Widgets Bundle', 'siteorigin-panels' ) . '</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 $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 $this->get_field_id( $field_id ); ?>" name="<?php echo $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 $this->get_field_id( $field_id ); ?>" name="<?php echo $this->get_field_name( $field_id ); ?>" rows="<?php echo intval($field_args['height']) ?>"><?php echo esc_textarea($instance[$field_id]) ?></textarea><?php
break;
case 'number' :
?><input type="number" class="small-text" id="<?php echo $this->get_field_id( $field_id ); ?>" name="<?php echo $this->get_field_name( $field_id ); ?>" value="<?php echo floatval($instance[$field_id]) ?>" /><?php
break;
case 'checkbox' :
?><input type="checkbox" class="small-text" id="<?php echo $this->get_field_id( $field_id ); ?>" name="<?php echo $this->get_field_name( $field_id ); ?>" <?php checked(!empty($instance[$field_id])) ?>/><?php
break;
case 'select' :
?>
<select id="<?php echo $this->get_field_id( $field_id ); ?>" name="<?php echo $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 endforeach; ?>
</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 $this->get_field_id('origin_style') ?>"><?php _e('Style', 'siteorigin-panels') ?></label>
<select name="<?php echo $this->get_field_name('origin_style') ?>" id="<?php echo $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)) : 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 endforeach; endif; ?>
<?php endforeach ?>
</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 $this->get_field_id('origin_style_'.$id) ?>"><?php printf(__('%s Style', 'siteorigin-panels'), $sub[0]) ?></label>
<select name="<?php echo $this->get_field_name('origin_style_'.$id) ?>" id="<?php echo $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 endforeach; endif; ?>
<?php endforeach ?>
</select>
</p>
<?php
}
do_action('siteorigin_panels_widget_after_styles', $this, $instance);
}
/**
* Render the widget.
*
* @param array $args
* @param array $instance
* @return bool|void
*/
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'];
echo 'Template not found';
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
*
* @param $id
* @param $instance
*/
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
*
* @param $style
* @param $preset
* @return string
*/
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
*
* @param $style
* @param $preset
*/
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
*/
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
*/
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
*/
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
*
* @param $style_id
* @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.
*
* @param $name
* @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
*/
function render_demo($args = array()){
$this->widget($args, $this->demo);
}
/**
* Register a widget that we'll be using inside this widget.
*
* @param $id
* @param $name
* @param $class
*/
function add_sub_widget($id, $name, $class){
$this->sub_widgets[$id] = array($name, $class);
}
/**
* Add the fields required to query the posts.
*/
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
*
* @param $instance
* @return WP_Query
*/
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 {
function __construct() {
parent::__construct(
'siteorigin-panels-gallery',
__( 'Gallery (PB)', 'siteorigin-panels' ),
array(
'description' => __( 'Displays a gallery.', 'siteorigin-panels' ),
)
);
}
function widget( $args, $instance ) {
echo $args['before_widget'];
$shortcode_attr = array();
foreach($instance as $k => $v){
if(empty($v)) continue;
$shortcode_attr[] = $k.'="'.esc_attr($v).'"';
}
echo do_shortcode('[gallery '.implode(' ', $shortcode_attr).']');
echo $args['after_widget'];
}
function update( $new, $old ) {
return $new;
}
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 $this->get_field_id( 'ids' ) ?>"><?php _e( 'Gallery Images', 'siteorigin-panels' ) ?></label>
<a href="#" onclick="return false;" class="so-gallery-widget-select-attachments hidden"><?php _e('edit gallery', 'siteorigin-panels') ?></a>
<input type="text" class="widefat" value="<?php echo esc_attr($instance['ids']) ?>" name="<?php echo $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 $this->get_field_id( 'size' ) ?>"><?php _e( 'Image Size', 'siteorigin-panels' ) ?></label>
<select name="<?php echo $this->get_field_name( 'size' ) ?>" id="<?php echo $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 endforeach; endif; ?>
</select>
</p>
<p>
<label for="<?php echo $this->get_field_id( 'type' ) ?>"><?php _e( 'Gallery Type', 'siteorigin-panels' ) ?></label>
<input type="text" class="regular" value="<?php echo esc_attr($instance['type']) ?>" name="<?php echo $this->get_field_name('type') ?>" />
</p>
<p>
<label for="<?php echo $this->get_field_id( 'columns' ) ?>"><?php _e( 'Columns', 'siteorigin-panels' ) ?></label>
<input type="text" class="regular" value="<?php echo esc_attr($instance['columns']) ?>" name="<?php echo $this->get_field_name('columns') ?>" />
</p>
<p>
<label for="<?php echo $this->get_field_id( 'link' ) ?>"><?php _e( 'Link To', 'siteorigin-panels' ) ?></label>
<select name="<?php echo $this->get_field_name( 'link' ) ?>" id="<?php echo $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 {
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
*/
function widget( $args, $instance ) {
echo $args['before_widget'];
if(!empty($instance['href'])) echo '<a href="' . $instance['href'] . '">';
echo '<img src="'.esc_url($instance['src']).'" />';
if(!empty($instance['href'])) echo '</a>';
echo $args['after_widget'];
}
function update($new, $old){
$new = wp_parse_args($new, array(
'src' => '',
'href' => '',
));
return $new;
}
function form( $instance ) {
$instance = wp_parse_args($instance, array(
'src' => '',
'href' => '',
));
?>
<p>
<label for="<?php echo $this->get_field_id( 'src' ) ?>"><?php _e( 'Image URL', 'siteorigin-panels' ) ?></label>
<input type="text" class="widefat" id="<?php echo $this->get_field_id( 'src' ) ?>" name="<?php echo $this->get_field_name( 'src' ) ?>" value="<?php echo esc_attr($instance['src']) ?>" />
</p>
<p>
<label for="<?php echo $this->get_field_id( 'href' ) ?>"><?php _e( 'Destination URL', 'siteorigin-panels' ) ?></label>
<input type="text" class="widefat" id="<?php echo $this->get_field_id( 'href' ) ?>" name="<?php echo $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 {
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
*/
function widget( $args, $instance ) {
$embed = new WP_Embed();
if(!wp_script_is('fitvids'))
wp_enqueue_script('fitvids', plugin_dir_url( __FILE__ ) . 'js/jquery.fitvids.js', array('jquery'), SITEORIGIN_PANELS_VERSION);
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
*/
function form( $instance ) {
$instance = wp_parse_args( $instance, array(
'video' => '',
) );
?>
<p>
<label for="<?php echo $this->get_field_id( 'video' ) ?>"><?php _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
}
function update( $new, $old ) {
$new['video'] = str_replace( 'https://', 'http://', $new['video'] );
return $new;
}
}
class SiteOrigin_Panels_Widgets_Video extends WP_Widget {
function __construct() {
parent::__construct(
'siteorigin-panels-video',
__( 'Self Hosted Video (PB)', 'siteorigin-panels' ),
array(
'description' => __( 'A self hosted video player.', 'siteorigin-panels' ),
)
);
}
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'];
}
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;
}
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 _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 _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 _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 _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');