Current Path : /storage/v11800/affypharma/public_html/wp-content/plugins/auxin-elements/includes/classes/ |
Linux v11800 5.3.0-1023-aws #25~18.04.1-Ubuntu SMP Fri Jun 5 15:19:18 UTC 2020 aarch64
|
Current File : /storage/v11800/affypharma/public_html/wp-content/plugins/auxin-elements/includes/classes/class-auxin-widget.php |
<?php
/**
* A class for creating widgets dynamically base of Master widget list
*
*
* @package Auxin
* @license LICENSE.txt
* @author averta
* @link http://phlox.pro/
* @copyright (c) 2010-2024 averta
*/
// no direct access allowed
if ( ! defined('ABSPATH') ) exit;
/*--------------------------------*/
if( ! class_exists( 'Auxin_Widget' ) ) :
class Auxin_Widget extends WP_Widget {
private $defaults = array();
public $fields = array();
public $widget_fun_name;
private $dependency_list = array();
private $widget_info;
private $attach_ids_list = null;
private $att_ids = null;
/**
* Sets up the widgets name, Id, description and etc
*/
public function __construct( $widget_info ) {
parent::__construct( $widget_info['base_ID'] , $name = $widget_info['name'], $widget_info['args'] );
$this->widget_info = $widget_info;
$this->fields = $widget_info['params'];
$this->widget_fun_name = $widget_info['auxin_output_callback'];
$this->set_defaults();
}
private function set_defaults(){
foreach ( $this->fields as $field ) {
$this->defaults[ $field["id"] ] = $field["value"];
}
$this->defaults[ '__uid' ] = $this->widget_info['base_ID'] . '_' . substr( uniqid( ''. rand() ), -8 );
}
//
/**
* Outputs the content of the widget
*
* @param array $args The field keys and their real values
* @param array $instance The widget name, id and global configs
* @return string The widget output for front-end
*/
public function widget( $args, $instance ) {
// if the 'widget_info' was available in passed array, we can determine
// whether the array is from widget class or not
// make sure to pass same class name for wrapper to widget too
if( isset( $this->widget_info['base_class'] ) ){
$args['base_class'] = $this->widget_info['base_class'];
}
$instance['widget_info'] = $args;
if( function_exists( $this->widget_fun_name ) ){
echo call_user_func( $this->widget_fun_name, $instance );
} else {
auxin_error( __('The callback for widget does not exists.', 'auxin-elements') );
}
}
/**
* Outputs the options form on admin
*
* @param array $instance The widget options
*/
public function form( $instance ) {
$instance = wp_parse_args( (array) $instance, $this->defaults );
echo '<div id="' . esc_attr( $this->defaults[ '__uid' ] ) . '" class="auxin-admin-widget-wrapper">';
// creates id attributes for fields to be saved by update()
foreach ( $this->fields as $field ) {
$id = $field['id'];
// make sure description is set
$field["description"] = ! isset( $field["description"] ) ? '': $field["description"];
$this->watch_for_field_dependencies( $field );
switch ( $field['type'] ) {
case 'aux_taxonomy':
$categories = get_terms( array(
'taxonomy' => $field['taxonomy'],
'orderby' => 'count',
'hide_empty' => true
));
$categories_list = array( ' ' => __('All Categories', 'auxin-elements' ) ) ;
foreach ( $categories as $key => $value ) {
$categories_list[ $value->term_id ] = $value->name;
}
if( gettype( $instance[ $id ] ) === "string" ) {
$select = array( $instance[ $id ] );
} else {
$select = $instance[ $id ];
}
echo '<div class="aux-element-field aux-multiple-selector ">',
'<label for="' . esc_attr( $this->get_field_id($id) ) . '" >'. esc_html( $field["name"] ) .'</label>',
'<select multiple="multiple" name="' . esc_attr( $this->get_field_name($id) ) . '" id="' . esc_attr( $this->get_field_name($id) ) . '" class="aux-orig-select2 aux-admin-select2 aux-select2-multiple">';
echo '<option value="">' . esc_html__('Choose ..', 'auxin-elements') . '</option>';
foreach ( $categories_list as $key => $value ) {
printf(
'<option value="%s" class="hot-topic" %s style="margin-bottom:3px;">%s</option>',
esc_attr( $key ),
in_array( $key, $select) ? 'selected="selected"' : '',
esc_html( $value )
);
}
echo '</select>';
if ( $field["description"] ) {
echo '<p class="option-description">' . esc_html( $field["description"] ) . '</p>';
}
echo '</div>';
break;
case 'iconpicker':
case 'aux_iconpicker':
$font_icons = Auxin()->Font_Icons->get_icons_list('fontastic');
echo '<div class="aux-element-field aux-iconpicker">';
echo '<label for="'. esc_attr( $this->get_field_name($id) ).'" >'. esc_html( $field["name"] ).'</label><br />';
echo sprintf( '<select name="%1$s" id="%1$s" class="aux-fonticonpicker aux-select" >', esc_attr( $this->get_field_name($id) ) );
echo '<option value="">' . esc_html__('Choose ..', 'auxin-elements') . '</option>';
if( is_array( $font_icons ) ){
foreach ( $font_icons as $icon ) {
$icon_id = trim( $icon->classname, '.' );
echo '<option value="'. esc_attr( $icon_id ) .'" '. selected( $instance[$id], $icon_id, false ) .' >'. esc_html( $icon->name ) . '</option>';
}
}
echo '</select>';
if ( $field["description"] ) {
echo '<p class="option-description">' . esc_html( $field["description"] ) . '</p>';
}
echo '</div>';
break;
case 'textarea_html':
case 'textarea_raw_html':
echo '<div class="aux-element-field aux-visual-selector">',
'<label for="'.esc_attr( $this->get_field_id($id) ).'" >'. esc_html( $field["name"] ).'</label>',
'<textarea class="widefat" id="'.esc_attr( $this->get_field_id($id) ).'" name="'.esc_attr( $this->get_field_name($id) ).'" name="'. esc_attr( $this->get_field_name($id) ) .'">',
wp_kses_post( $instance[$id] ).'</textarea>';
if ( $field["description"] ) {
echo '<p class="option-description textarea-desc">' . esc_html( $field["description"] ) . '</p>';
}
echo '</div>';
break;
case 'textbox':
case 'textfield':
echo '<div class="aux-element-field aux-visual-selector">',
'<label for="'. esc_attr( $this->get_field_id($id) ) .'" >'. esc_html( $field["name"] ).'</label>',
'<input class="widefat" id="'. esc_attr( $this->get_field_id($id) ) .'" name="'. esc_attr( $this->get_field_name($id) ) .'" type="text" value="'. esc_attr( $instance[$id] ) .'" />';
if ( $field["description"] ) {
echo '<p class="option-description">' . esc_html( $field["description"] ) . '</p>';
}
echo '</div>';
break;
case 'dropdown':
case 'select':
if( is_array( $instance[$id] ) ){
if( ! empty( $instance['def_value'] ) ){
$current_value = $instance['def_value'];
} else {
$default_value = array_keys( $instance[ $id ] );
$current_value = $default_value[0];
}
} else {
$current_value = $instance[ $id ];
}
echo '<div class="aux-element-field aux-dropdown">',
'<label for="'. esc_attr( $this->get_field_id( $id ) ) .'" >'. esc_html( $field['name'] ) . '</label>',
'<select name="' . esc_attr( $this->get_field_name( $id ) ) . '" id="' . esc_attr( $this->get_field_id( $id ) ) . '" value="' . esc_attr( $current_value ) . '" >';
foreach ( $field['options'] as $key => $value ) {
printf( '<option value="%s" %s >%s</option>', esc_attr( $key ), selected( $current_value, $key, false ), esc_html( $value ) );
}
echo '</select>';
if ( $field["description"] ) {
echo '<p class="option-description">' . esc_html( $field["description"] ) . '</p>';
}
echo '</div>';
break;
// Select2 single
case 'aux_select2_single' :
if( is_array( $instance[$id] ) ){
if( ! empty( $instance['def_value'] ) ){
$current_value = $instance['def_value'];
} else {
$default_value = array_keys( $instance[ $id ] );
$current_value = $default_value[0];
}
} else {
$current_value = $instance[ $id ];
}
echo '<div class="aux-element-field aux-multiple-selector ">',
'<label for="'. esc_attr( $this->get_field_id($id) ) .'" >'. esc_html( $field["name"] ) .'</label>',
'<div class="section-row-right" >' ,
'<select name="'. esc_attr( $this->get_field_name($id) ) .'" id="'. esc_attr( $this->get_field_id($id) ) .'" class="aux-orig-select2 aux-admin-select2 aux-select2-single" data-value="'. esc_attr( $current_value ) .'" value="'. esc_attr( $current_value ) .'" style="width:150px" >';
foreach ( $field['options'] as $key => $value ) {
printf( '<option value="%s" %s >%s</option>', esc_attr( $key ), selected( $current_value, $key, false ), esc_html( $value ) );
}
echo '</select></div>';
if ( $field["description"] ) {
echo '<p class="option-description">' . esc_html( $field["description"] ) . '</p>';
}
echo '</div>' ;
break;
// defining of aux_select2_multiple field type for widget.
case 'aux_select2_multiple' :
if( gettype( $instance[ $id ] ) ==="string" ) {
$select = explode( ',', $instance[ $id ] );
} else {
$select = $instance[ $id ];
}
echo '<div class="aux-element-field aux-multiple-selector ">';
echo '<select multiple="multiple" name="'. esc_attr( $this->get_field_name($id) ) .'" id="'. esc_attr( $this->get_field_id($id) ) .'" style="width:100%" ' . ' class="wpb-multiselect wpb_vc_param_value aux-select2-multiple ' . esc_sql( $field['id'] ) . ' ' . esc_attr( $field['type'] ) . '_field">';
foreach ( $field['options'] as $key => $value ) {
$active_attr = in_array( $key, $select) ? 'selected="selected"' : '';
echo sprintf( '<option value="%s" %s >%s</option>', esc_attr( $key ), $active_attr, esc_html( $value ) );
}
echo '</select>';
if ( $field["description"] ) {
echo '<p class="option-description">' . esc_html( $field["description"] ) . '</p>';
}
echo '</div>' ;
break;
case 'aux_visual_select':
echo '<div class="aux-element-field aux-visual-selector">';
echo '<label for="'. esc_attr( $this->get_field_id($id) ) .'" >'. esc_html( $field["name"] ) .'</label>';
echo '<select class="meta-select visual-select-wrapper" name="' . esc_attr( $this->get_field_name( $id ) ) . '" id="' . esc_attr( $this->get_field_id( $id ) ) . '" value="' . esc_attr( $instance[$id] ) . '" >';
$tmp_instance_id = $instance[$id];
foreach ( $field['choices'] as $id => $option_info ) {
echo sprintf( '<option value="%s" %s %s %s %s>%s</option>',
esc_attr( $id ),
( $tmp_instance_id == $id ? ' selected ' : "" ),
( empty( $option_info['css_class'] ) && ! empty( $option_info['image'] ) ? 'data-symbol="'. esc_attr( $option_info['image'] ) .'"' : '' ),
( ! empty( $option_info['video_src'] ) ? 'data-video-src="'. esc_attr( $option_info['video_src'] ).'"' : '' ),
( ! empty( $option_info['css_class'] ) ? 'data-class="'. esc_attr( $option_info['css_class'] ) .'"' : '' ),
esc_html( $option_info['label'] )
);
}
echo '</select>';
if ( $field["description"] ) {
echo '<p class="option-description visual-selector-desc">' . esc_html( $field["description"] ) . '</p>';
}
echo '</div>';
break;
case 'checkbox':
case 'aux_switch':
$instance[$id] = isset( $instance[$id] ) ? (bool)$instance[$id] : false;
$tick = $instance[$id]? 'checked="checked"': '';
echo '<div class="aux-element-field aux_switch">',
'<input class="hidden_aux_switch" type="hidden" value="0" id="_'. esc_attr( $this->get_field_id($id) ) .'-hidden" name="'. esc_attr( $this->get_field_name($id) ) .'" >',
'<input class="checkbox widefat aux_switch" type="checkbox" ' . $tick . ' id="'. esc_attr( $this->get_field_id($id) ) .'" name="'. esc_attr( $this->get_field_name($id) ) .'" >',
'<label for="'. esc_attr( $this->get_field_id($id) ) .'" >'. esc_html( $field["name"] ) .'</label>';
if ( $field["description"] ) {
echo '<p class="option-description">' . esc_html( $field["description"] ) . '</p>';
}
echo '</div>';
break;
case 'color':
case 'colorpicker':
echo '<div class="aux-element-field aux-colorpicker">',
'<label for="'. esc_attr( $this->get_field_id($id) ) .'" >'. esc_html( $field["name"] ) .'</label>',
'<div class="mini-color-wrapper"><input id="'. esc_attr( $this->get_field_id($id) ) .'" name="'. esc_attr( $this->get_field_name($id) ) .'" type="text"type="text" value="'. esc_attr( $instance[$id] ) .'" ></div>';
if ( $field["description"] ) {
echo '<p class="option-description">' . esc_html( $field["description"] ) . '</p>';
}
echo '</div>';
break;
case 'aux_select_image':
case 'attach_image':
// Store attachment src for avertaAttachMedia field
if( !empty($instance[$id]) ) {
$att_ids = explode( ',', $instance[$id] );
$attach_ids_list = auxin_get_the_resized_attachment_src( $att_ids, 80, 80, true );
if(!empty($att_ids)) {
printf( "<script>auxin.attachmedia = jQuery.extend( auxin.attachmedia, %s );</script>", wp_json_encode( array_unique( $attach_ids_list ) ) );
}
}
echo '<div class="aux-element-field av3_container aux_select_image axi-attachmedia-wrapper">',
'<label for="'. esc_attr( $this->get_field_id($id) ) .'" >'. esc_html( $field["name"] ) .'</label>',
'<input type="text" class="white" name="'. esc_attr( $this->get_field_name( $id ) ).'" ' . 'id="'. esc_attr( $this->get_field_id( $id ) ).'" ' . 'value="' . esc_attr( $instance[$id] ) .
'" data-media-type="image" data-limit="1" data-multiple="0"
data-add-to-list="'. esc_html__('Add Image', 'auxin-elements') .'"
data-uploader-submit="'. esc_html__('Add Image', 'auxin-elements') .'"
data-uploader-title="'. esc_html__('Select Image', 'auxin-elements') .'"> ';
if ( $field["description"] ) {
echo '<p class="option-description">' . esc_html( $field["description"] ) . '</p>';
}
echo '</div>';
break;
case 'aux_select_images':
case 'attach_images':
// Store attachment src for avertaAttachMedia field
if( !empty($instance[$id]) ) {
$att_ids = explode( ',', $instance[$id] );
$attach_ids_list = auxin_get_the_resized_attachment_src( $att_ids, 80, 80, true );
if(!empty($att_ids)) {
printf( "<script>auxin.attachmedia = jQuery.extend( auxin.attachmedia, %s );</script>", wp_json_encode( array_unique( $attach_ids_list ) ) );
}
}
echo '<div class="aux-element-field av3_container aux_select_image axi-attachmedia-wrapper">',
'<label for="'. esc_attr( $this->get_field_id($id) ) .'" >'. esc_html( $field["name"] ) .'</label>',
'<input type="text" class="white" name="'. esc_attr( $this->get_field_name($id) ) .'" ' . 'id="'. esc_attr( $this->get_field_id($id) ) .'" ' . 'value="' . esc_attr( $instance[$id] ) .
'" data-media-type="image" data-limit="9999" data-multiple="1"
data-add-to-list="'.esc_html__('Add Image', 'auxin-elements').'"
data-uploader-submit="'.esc_html__('Add Image', 'auxin-elements').'"
data-uploader-title="'.esc_html__('Select Image', 'auxin-elements').'"> ';
if ( $field["description"] ) {
echo '<p class="option-description">' . esc_html( $field["description"] ) . '</p>';
}
echo '</div>';
break;
case 'aux_select_video':
case 'attach_video':
// Store attachment src for avertaAttachMedia field
if( !empty($instance[$id]) ) {
$att_ids = explode( ',', $instance[$id] );
$attach_ids_list = auxin_get_the_resized_attachment_src( $att_ids, 80, 80, true );
if(!empty($att_ids)) {
printf( "<script>auxin.attachmedia = jQuery.extend( auxin.attachmedia, %s );</script>", wp_json_encode( array_unique( $attach_ids_list ) ) );
}
}
echo '<div class="aux-element-field av3_container aux_select_image axi-attachmedia-wrapper">',
'<label for="'. esc_attr( $this->get_field_id($id) ) .'" >'. esc_html( $field["name"] ) .'</label>',
'<input type="text" class="white" name="'. esc_attr( $this->get_field_name($id) ) .'" ' . 'id="'. esc_attr( $this->get_field_id($id) ) .'" ' . 'value="' . esc_attr( $instance[$id] ) .
'" data-media-type="video" data-limit="1" data-multiple="0"
data-add-to-list="'.esc_html__('Add Video', 'auxin-elements').'"
data-uploader-submit="'.esc_html__('Add Video', 'auxin-elements').'"
data-uploader-title="'.esc_html__('Select Video', 'auxin-elements').'"> ';
if ( $field["description"] ) {
echo '<p class="option-description">' . esc_html( $field["description"] ) . '</p>';
}
echo '</div>';
break;
case 'aux_select_audio':
case 'attach_audio':
// Store attachment src for avertaAttachMedia field
if( !empty($instance[$id]) ) {
$att_ids = explode( ',', $instance[$id] );
$attach_ids_list = auxin_get_the_resized_attachment_src( $att_ids, 80, 80, true );
if(!empty($att_ids)) {
printf( "<script>auxin.attachmedia = jQuery.extend( auxin.attachmedia, %s );</script>", wp_json_encode( array_unique( $attach_ids_list ) ) );
}
}
echo '<div class="aux-element-field av3_container aux_select_image axi-attachmedia-wrapper">',
'<label for="'. esc_attr( $this->get_field_id($id) ) .'" >'. esc_html( $field["name"] ) .'</label>',
'<input type="text" class="white" name="'. esc_attr( $this->get_field_name($id) ) .'" ' . 'id="'. esc_attr( $this->get_field_id($id) ) .'" ' . 'value="' . esc_attr( $instance[$id] ) .
'" data-media-type="audio" data-limit="1" data-multiple="0"
data-add-to-list="'.esc_html__('Add Audio', 'auxin-elements').'"
data-uploader-submit="'.esc_html__('Add Audio', 'auxin-elements').'"
data-uploader-title="'.esc_html__('Select Audio', 'auxin-elements').'"> ';
if ( $field["description"] ) {
echo '<p class="option-description">' . esc_html( $field["description"] ) . '</p>';
}
echo '</div>';
default:
break;
}
}
echo '</div>';
// axpp( $this->dependency_list );
$this->print_dependencies();
}
/**
* Loop to collect dependency map of metafields
*
* @param array $field field options
* @return void
*/
public function watch_for_field_dependencies( $field = array() ){
if( empty( $field ) ){
return;
}
$field_dependencies = array();
if( isset( $field['dependency'] ) && ! empty( $field['dependency'] ) ){
$depend = $field['dependency'];
if( isset( $depend['element'] ) && ( isset( $depend['value'] ) && ! empty( $depend['value'] ) ) ){
unset( $depend['relation'] );
unset( $depend['callback'] );
$field_dependencies[ $depend['element'] ] = array( 'value' => (array)$depend['value'] );
}
}
if( $field_dependencies ){
$this->dependency_list[ $field['id'] ] = $field_dependencies;
}
}
/**
* Print metafield dependencies
*
* @return string JSON string containing metafield dependencies
*/
public function print_dependencies(){
// echo js dependencies
printf( '<script>
function auxinCreateNamespace(n){for(var e=n.split("."),a=window,i="",r=e.length,t=0;r>t;t++)"window"!=e[t]&&(i=e[t],a[i]=a[i]||{},a=a[i]);return a;}
auxinCreateNamespace("auxin.elements.%3$s");
auxin.elements.%3$s.dependencies = %2$s;
auxin.elements.%3$s.baseid = "%1$s";</script>',
$this->widget_info['base_ID'],
wp_json_encode( $this->dependency_list ),
$this->defaults[ '__uid' ]
);
}
/**
* Processing widget options on save
*
* @param array $new_instance The new options
* @param array $old_instance The previous options
*/
function update( $new_instance, $old_instance ) {
$instance = $old_instance;
// TODO: we exclode the defaults because on checkbox there is no this value on unchecked and it replaces with defaults
// $new_instance = wp_parse_args( (array) $new_instance, $this->defaults );
$new_instance = wp_parse_args( (array) $new_instance );
foreach ( $this->fields as $field ) {
$id = $field["id"];
if( ! isset( $new_instance[ $id ] ) ) {
continue;
}
if( $field["type"] == "aux_switch" ) {
$instance[ $id ] = !empty($new_instance[$id ] ) ? 1 : 0;
}
if( $field["type"] == "aux_select2_multiple" ) {
$instance[ $id ] = esc_sql( $new_instance[ $id ] );
} else {
$instance[ $id ] = is_array( $new_instance[ $id ] ) ? $new_instance[ $id ] : strip_tags( $new_instance[ $id ] );
}
}
return $instance;
}
} // end widget class
endif;