%PDF- %PDF-
Direktori : /var/www/projetos/romanian.ongrace.com/wp-content/plugins/siteorigin-panels/widgets/ |
Current File : /var/www/projetos/romanian.ongrace.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 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 (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 $this->get_field_id( $field_id ); ?>" name="<?php echo $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 $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');