WS_OK_7.4.33
<?php
namespace aviaFramework\widgets\base;
/**
* Base class for widgets
*
* @author guenter
* @since 4.9 Code was moved from class-framework-widgets.php
*/
if( ! defined( 'AVIA_FW' ) ) { exit( 'No direct script access allowed' ); }
if( ! class_exists( __NAMESPACE__ . '\Avia_Widget', false ) )
{
abstract class Avia_Widget extends \WP_Widget
{
/**
*
* @since 4.3.2
* @var array
*/
protected $field_names;
/**
* Default values for the widget
*
* @since 4.9
* @var array
*/
protected $defaults;
/**
* @since 4.3.2
* @param string $id_base
* @param string $name
* @param array $widget_options
* @param array $control_options
*/
public function __construct( $id_base, $name, array $widget_options = array(), array $control_options = array() )
{
if( ! isset( $widget_options['classname'] ) )
{
$widget_options['classname'] = '';
}
$widget_options['classname'] = trim( 'avia-widget-container ' . $widget_options['classname'] );
parent::__construct( $id_base, $name, $widget_options, $control_options );
$this->field_names = array();
$this->defaults = array();
}
/**
* @since 4.3.2
*/
public function __destruct()
{
if( method_exists( $this, 'parent::__destruct' ) )
{
parent::__destruct();
}
unset( $this->field_names );
unset( $this->defaults );
}
/**
* Returns an array that contains all default instance members filled with default values
*
* @since 4.3.2 implemengted as abstract function
* @since 4.9 added with logic
* @param array $instance
* @return array
*/
protected function parse_args_instance( array $instance )
{
$new_instance = wp_parse_args( $instance, $this->defaults );
return $new_instance;
}
/**
* Only display a short default message or a custom preview
*
* @since 4.9
* @param array $args
* @param array $instance
* @return boolean
*/
protected function in_block_editor_preview( array $args, array $instance = array() )
{
if( isset( $_REQUEST['legacy-widget-preview'] ) || ( defined( 'REST_REQUEST' ) && REST_REQUEST ) )
{
if( false === $this->widget_block_preview( $args, $instance) )
{
echo isset( $args['before_widget'] ) ? $args['before_widget'] : '';
echo '<h2>' . $this->name . '</h2>';
echo '<p>' . __( 'Widget content only rendered in frontend.', 'avia_framework' ) . '</p>';
echo isset( $args['after_widget'] ) ? $args['after_widget'] : '';
}
return true;
}
return false;
}
/**
* Callback to output a custom block preview
*
* @since 4.9
* @param array $args
* @param array $instance
* @return boolean true if output processed
*/
protected function widget_block_preview( array $args, array $instance = array() )
{
return false;
}
/**
* Returns an array of all default fields
*
* @since 4.3.2
* @return array
*/
protected function get_field_names()
{
if( empty( $this->field_names ) )
{
$fields = $this->parse_args_instance( array() );
$this->field_names = array_keys( $fields );
}
return $this->field_names;
}
/**
* Iterates over form elements (uses structure as in admin options page)
*
* @since 4.7.3.1
* @param array $elements
* @return string
*/
protected function render_form_elements( array $elements )
{
$html = new \avia_htmlhelper();
$output = '';
foreach( $elements as $element )
{
$output .= $html->render_single_element( $element );
}
return $output;
}
/**
* Output the <option> tag for a series of numbers and set the selected attribute
*
* @since 4.3.2
* @added_by günter
* @param int $start
* @param int $end
* @param string $selected
*/
static public function number_options( $start = 1, $end = 50, $selected = 1 )
{
$options = array();
for( $i = $start; $i <= $end; $i++ )
{
$options[ $i ] = $i;
}
return Avia_Widget::options_from_array( $options, $selected );
}
/**
* Output the <option> tag for a key - value array and set the selected attribute
*
* @since 4.3.2
* @added_by günter
* @param array $options
* @param type $selected
* @return string
*/
static public function options_from_array( array $options, $selected )
{
$out = '';
foreach( $options as $key => $value )
{
$out .= '<option value="' . $key . '" ' . selected( $key, $selected ) . '>' . esc_html( $value ) . '</option>';
}
return $out;
}
}
}