function siteorigin_widget_post_selector_admin_form_field($value, $field_name) { ?> <input type="hidden" value="<?php echo esc_attr($value); ?> " name="<?php echo $field_name; ?> " class="siteorigin-widget-input" /> <a href="#" class="sow-select-posts button button-secondary"> <span class="sow-current-count"><?php echo esc_html(siteorigin_widget_post_selector_count_posts($value)); ?> </span> <?php esc_html_e('Build posts query', 'so-widgets-bundle'); ?> </a> <?php }
/** * Render a form field * * @param $name * @param $field * @param $value * @param array $repeater */ function render_field($name, $field, $value, $repeater = array(), $is_template = false) { if (is_null($value) && isset($field['default'])) { $value = $field['default']; } $wrapper_classes = array('siteorigin-widget-field', 'siteorigin-widget-field-type-' . $field['type'], 'siteorigin-widget-field-' . $name); if (!empty($field['state_name'])) { $wrapper_classes[] = 'siteorigin-widget-field-state-' . $field['state_name']; } if (!empty($field['hidden'])) { $wrapper_classes[] = 'siteorigin-widget-field-is-hidden'; } if (!empty($field['optional'])) { $wrapper_classes[] = 'siteorigin-widget-field-is-optional'; } ?> <div class="<?php echo implode(' ', array_map('sanitize_html_class', $wrapper_classes)); ?> "><?php $field_id = $this->so_get_field_id($name, $repeater, $is_template); if ($field['type'] != 'repeater' && $field['type'] != 'checkbox' && $field['type'] != 'separator' && !empty($field['label'])) { ?> <label for="<?php echo $field_id; ?> " class="siteorigin-widget-field-label <?php if (empty($field['hide'])) { echo 'siteorigin-widget-section-visible'; } ?> "> <?php echo $field['label']; if (!empty($field['optional'])) { echo ' <span class="field-optional">(' . __('Optional', 'siteorigin-panels') . ')</span>'; } ?> </label> <?php } switch ($field['type']) { case 'text': ?> <input type="text" name="<?php echo $this->so_get_field_name($name, $repeater); ?> " id="<?php echo $field_id; ?> " value="<?php echo esc_attr($value); ?> " class="widefat siteorigin-widget-input" /><?php break; case 'color': ?> <input type="text" name="<?php echo $this->so_get_field_name($name, $repeater); ?> " id="<?php echo $field_id; ?> " value="<?php echo esc_attr($value); ?> " class="widefat siteorigin-widget-input siteorigin-widget-input-color" /><?php break; case 'number': ?> <input type="text" name="<?php echo $this->so_get_field_name($name, $repeater); ?> " id="<?php echo $field_id; ?> " value="<?php echo esc_attr($value); ?> " class="widefat siteorigin-widget-input siteorigin-widget-input-number" /><?php break; case 'textarea': ?> <textarea type="text" name="<?php echo $this->so_get_field_name($name, $repeater); ?> " id="<?php echo $field_id; ?> " class="widefat siteorigin-widget-input" rows="<?php echo !empty($field['rows']) ? intval($field['rows']) : 4; ?> "><?php echo esc_textarea($value); ?> </textarea><?php break; case 'editor': // The editor field doesn't actually work yet, this is just a placeholder ?> <textarea type="text" name="<?php echo $this->so_get_field_name($name, $repeater); ?> " id="<?php echo $field_id; ?> " class="widefat siteorigin-widget-input siteorigin-widget-input-editor" rows="<?php echo !empty($field['rows']) ? intval($field['rows']) : 4; ?> "><?php echo esc_textarea($value); ?> </textarea><?php break; case 'slider': ?> <div class="siteorigin-widget-slider-value"><?php echo !empty($value) ? $value : 0; ?> </div> <div class="siteorigin-widget-slider-wrapper"> <div class="siteorigin-widget-value-slider"></div> </div> <input type="number" name="<?php echo $this->so_get_field_name($name, $repeater); ?> " id="<?php echo $field_id; ?> " value="<?php echo !empty($value) ? esc_attr($value) : 0; ?> " min="<?php echo isset($field['min']) ? intval($field['min']) : 0; ?> " max="<?php echo isset($field['max']) ? intval($field['max']) : 100; ?> " data-integer="<?php echo !empty($field['integer']) ? 'true' : 'false'; ?> " /> <?php break; case 'select': ?> <select name="<?php echo $this->so_get_field_name($name, $repeater); ?> " id="<?php echo $field_id; ?> " class="siteorigin-widget-input"> <?php if (isset($field['prompt'])) { ?> <option value="default" disabled="disabled" selected="selected"><?php echo esc_html($field['prompt']); ?> </option> <?php } ?> <?php foreach ($field['options'] as $key => $val) { ?> <option value="<?php echo esc_attr($key); ?> " <?php selected($key, $value); ?> ><?php echo esc_html($val); ?> </option> <?php } ?> </select> <?php break; case 'checkbox': ?> <label for="<?php echo $field_id; ?> "> <input type="checkbox" name="<?php echo $this->so_get_field_name($name, $repeater); ?> " id="<?php echo $field_id; ?> " class="siteorigin-widget-input" <?php checked(!empty($value)); ?> /> <?php echo $field['label']; ?> </label> <?php break; case 'radio': ?> <?php if (!isset($field['options']) || empty($field['options'])) { return; } ?> <?php foreach ($field['options'] as $k => $v) { ?> <label for="<?php echo $field_id . '-' . $k; ?> "> <input type="radio" name="<?php echo $this->so_get_field_name($name, $repeater); ?> " id="<?php echo $field_id . '-' . $k; ?> " class="siteorigin-widget-input" value="<?php echo esc_attr($k); ?> " <?php checked($k, $value); ?> > <?php echo esc_html($v); ?> </label> <?php } ?> <?php break; case 'media': if (version_compare(get_bloginfo('version'), '3.5', '<')) { printf(__('You need to <a href="%s">upgrade</a> to WordPress 3.5 to use media fields', 'siteorigin'), admin_url('update-core.php')); break; } if (!empty($value)) { if (is_array($value)) { $src = $value; } else { $post = get_post($value); $src = wp_get_attachment_image_src($value, 'thumbnail'); if (empty($src)) { $src = wp_get_attachment_image_src($value, 'thumbnail', true); } } } else { $src = array('', 0, 0); } $choose_title = empty($field['choose']) ? __('Choose Media', 'siteorigin-widgets') : $field['choose']; $update_button = empty($field['update']) ? __('Set Media', 'siteorigin-widgets') : $field['update']; $library = empty($field['library']) ? 'image' : $field['library']; ?> <div class="media-field-wrapper"> <div class="current"> <div class="thumbnail-wrapper"> <img src="<?php echo esc_url($src[0]); ?> " class="thumbnail" <?php if (empty($src[0])) { echo "style='display:none'"; } ?> /> </div> <div class="title"><?php if (!empty($post)) { echo esc_attr($post->post_title); } ?> </div> </div> <a href="#" class="media-upload-button" data-choose="<?php echo esc_attr($choose_title); ?> " data-update="<?php echo esc_attr($update_button); ?> " data-library="<?php echo esc_attr($library); ?> "> <?php echo esc_html($choose_title); ?> </a> <a href="#" class="media-remove-button"><?php _e('Remove', 'siteorigin'); ?> </a> </div> <input type="hidden" value="<?php echo esc_attr(is_array($value) ? '-1' : $value); ?> " name="<?php echo $this->so_get_field_name($name, $repeater); ?> " class="siteorigin-widget-input" /> <div class="clear"></div> <?php break; case 'posts': ?> <input type="hidden" value="<?php echo esc_attr(is_array($value) ? '' : $value); ?> " name="<?php echo $this->so_get_field_name($name, $repeater); ?> " class="siteorigin-widget-input" /> <a href="#" class="sow-select-posts button button-secondary"> <span class="sow-current-count"><?php echo siteorigin_widget_post_selector_count_posts(is_array($value) ? '' : $value); ?> </span> <?php _e('Build posts query'); ?> </a> <?php break; case 'repeater': if (!isset($field['fields']) || empty($field['fields'])) { return; } ob_start(); $repeater[] = $name; foreach ($field['fields'] as $sub_field_name => $sub_field) { $this->render_field($sub_field_name, $sub_field, isset($value[$sub_field_name]) ? $value[$sub_field_name] : null, $repeater, true); } $html = ob_get_clean(); $this->repeater_html[$name] = $html; $item_label = isset($field['item_label']) ? $field['item_label'] : null; if (!empty($item_label)) { // convert underscore naming convention to camelCase for javascript // and encode as json string $item_label = $this->underscores_to_camel_case($item_label); $item_label = json_encode($item_label); } $item_name = !empty($field['item_name']) ? $field['item_name'] : __('Item', 'siteorigin-widgets'); ?> <div class="siteorigin-widget-field-repeater" data-item-name="<?php echo esc_attr($item_name); ?> " data-repeater-name="<?php echo esc_attr($name); ?> " <?php echo !empty($item_label) ? 'data-item-label="' . esc_attr($item_label) . '"' : ''; ?> > <div class="siteorigin-widget-field-repeater-top"> <div class="siteorigin-widget-field-repeater-expend"></div> <h3><?php echo $field['label']; ?> </h3> </div> <div class="siteorigin-widget-field-repeater-items"> <?php if (!empty($value)) { foreach ($value as $v) { ?> <div class="siteorigin-widget-field-repeater-item ui-draggable"> <div class="siteorigin-widget-field-repeater-item-top"> <div class="siteorigin-widget-field-expand"></div> <div class="siteorigin-widget-field-remove"></div> <h4><?php echo esc_html($field['item_name']); ?> </h4> </div> <div class="siteorigin-widget-field-repeater-item-form"> <?php foreach ($field['fields'] as $sub_field_name => $sub_field) { $this->render_field($sub_field_name, $sub_field, isset($v[$sub_field_name]) ? $v[$sub_field_name] : null, $repeater); } ?> </div> </div> <?php } } ?> </div> <div class="siteorigin-widget-field-repeater-add"><?php _e('Add', 'siteorigin-widgets'); ?> </div> </div> <?php break; case 'widget': // Create the extra form entries $sub_widget = new $field['class'](); ?> <div class="siteorigin-widget-section <?php if (!empty($field['hide'])) { echo 'siteorigin-widget-section-hide'; } ?> "><?php foreach ($sub_widget->form_options() as $sub_name => $sub_field) { $this->render_field($name . '][' . $sub_name, $sub_field, isset($value[$sub_name]) ? $value[$sub_name] : null, $repeater); } ?> </div><?php break; case 'icon': static $widget_icon_families; if (empty($widget_icon_families)) { $widget_icon_families = apply_filters('siteorigin_widgets_icon_families', array()); } list($value_family, $null) = !empty($value) ? explode('-', $value, 2) : array('fontawesome', ''); ?> <div class="siteorigin-widget-icon-selector siteorigin-widget-field-subcontainer"> <select class="siteorigin-widget-icon-family" > <?php foreach ($widget_icon_families as $family_id => $family_info) { ?> <option value="<?php echo esc_attr($family_id); ?> " <?php selected($value_family, $family_id); ?> ><?php echo esc_html($family_info['name']); ?> (<?php echo count($family_info['icons']); ?> )</option> <?php } ?> </select> <input type="hidden" name="<?php echo $this->so_get_field_name($name, $repeater); ?> " value="<?php echo esc_attr($value); ?> " class="siteorigin-widget-icon-icon siteorigin-widget-input" /> <div class="siteorigin-widget-icon-icons"></div> </div> <?php break; case 'section': ?> <div class="siteorigin-widget-section <?php if (!empty($field['hide'])) { echo 'siteorigin-widget-section-hide'; } ?> "><?php if (!isset($field['fields']) || empty($field['fields'])) { return; } foreach ((array) $field['fields'] as $sub_name => $sub_field) { $this->render_field($name . '][' . $sub_name, $sub_field, isset($value[$sub_name]) ? $value[$sub_name] : null, $repeater); } ?> </div><?php break; case 'bucket': // A bucket select and explore field ?> <input type="text" name="<?php echo $this->so_get_field_name($name, $repeater); ?> " id="<?php echo $field_id; ?> " value="<?php echo esc_attr($value); ?> " class="widefat siteorigin-widget-input" /><?php break; default: _e('Unknown Field', 'siteorigin-widgets'); break; } if (!empty($field['description'])) { ?> <div class="siteorigin-widget-field-description"><?php echo wp_kses_post($field['description']); ?> </div><?php } ?> </div><?php }
/** * Render a form field * * @param $name * @param $field * @param $value * @param array $repeater */ function render_field($name, $field, $value, $repeater = array()) { ?> <div class="siteorigin-widget-field siteorigin-widget-field-type-<?php echo sanitize_html_class($field['type']); ?> siteorigin-widget-field-<?php echo sanitize_html_class($name); ?> "><?php if ($field['type'] != 'repeater' && $field['type'] != 'checkbox' && $field['type'] != 'separator') { ?> <label aa for="<?php echo $this->so_get_field_id($name, $repeater); ?> " <?php if (empty($field['hide'])) { echo 'class="siteorigin-widget-section-visible"'; } ?> ><?php echo $field['label']; ?> </label><?php } switch ($field['type']) { case 'text': ?> <input type="text" name="<?php echo $this->so_get_field_name($name, $repeater); ?> " id="<?php echo $this->so_get_field_id($name, $repeater); ?> " value="<?php echo esc_attr($value); ?> " class="widefat siteorigin-widget-input" /><?php break; case 'color': ?> <input type="text" name="<?php echo $this->so_get_field_name($name, $repeater); ?> " id="<?php echo $this->so_get_field_id($name, $repeater); ?> " value="<?php echo esc_attr($value); ?> " class="widefat siteorigin-widget-input siteorigin-widget-input-color" /><?php break; case 'number': ?> <input type="text" name="<?php echo $this->so_get_field_name($name, $repeater); ?> " id="<?php echo $this->so_get_field_id($name, $repeater); ?> " value="<?php echo esc_attr($value); ?> " class="widefat siteorigin-widget-input siteorigin-widget-input-number" /><?php break; case 'textarea': ?> <textarea type="text" name="<?php echo $this->so_get_field_name($name, $repeater); ?> " id="<?php echo $this->so_get_field_id($name, $repeater); ?> " class="widefat siteorigin-widget-input" rows="<?php echo !empty($field['rows']) ? intval($field['rows']) : 4; ?> "><?php echo esc_textarea($value); ?> </textarea><?php break; case 'editor': ?> <textarea type="text" name="<?php echo $this->so_get_field_name($name, $repeater); ?> " id="<?php echo $this->so_get_field_id($name, $repeater); ?> " class="widefat siteorigin-widget-input siteorigin-widget-input-editor" rows="<?php echo !empty($field['rows']) ? intval($field['rows']) : 4; ?> "><?php echo esc_textarea($value); ?> </textarea><?php break; case 'select': ?> <select name="<?php echo $this->so_get_field_name($name, $repeater); ?> " id="<?php echo $this->so_get_field_id($name, $repeater); ?> " class="siteorigin-widget-input"> <?php foreach ($field['options'] as $v => $t) { ?> <option value="<?php echo esc_attr($v); ?> " <?php selected($v, $value); ?> ><?php echo esc_html($t); ?> </option> <?php } ?> </select> <?php break; case 'checkbox': ?> <label for="<?php echo $this->so_get_field_id($name, $repeater); ?> "> <input type="checkbox" name="<?php echo $this->so_get_field_name($name, $repeater); ?> " id="<?php echo $this->so_get_field_id($name, $repeater); ?> " class="siteorigin-widget-input" <?php checked(!empty($value)); ?> /> <?php echo $field['label']; ?> </label> <?php break; case 'media': if (version_compare(get_bloginfo('version'), '3.5', '<')) { printf(__('You need to <a href="%s">upgrade</a> to WordPress 3.5 to use media fields', 'siteorigin'), admin_url('update-core.php')); break; } if (!empty($value)) { if (is_array($value)) { $src = $value; } else { $post = get_post($value); $src = wp_get_attachment_image_src($value, 'thumbnail'); if (empty($src)) { $src = wp_get_attachment_image_src($value, 'thumbnail', true); } } } else { $src = array('', 0, 0); } $choose_title = empty($args['choose']) ? __('Choose Media', 'siteorigin-widgets') : $args['choose']; $update_button = empty($args['update']) ? __('Set Media', 'siteorigin-widgets') : $args['update']; $library = empty($field['library']) ? 'image' : $field['library']; ?> <div class="media-field-wrapper"> <div class="current"> <div class="thumbnail-wrapper"> <img src="<?php echo esc_url($src[0]); ?> " class="thumbnail" <?php if (empty($src[0])) { echo "style='display:none'"; } ?> /> </div> <div class="title"><?php if (!empty($post)) { echo esc_attr($post->post_title); } ?> </div> </div> <a href="#" class="media-upload-button" data-choose="<?php echo esc_attr($choose_title); ?> " data-update="<?php echo esc_attr($update_button); ?> " data-library="<?php echo esc_attr($library); ?> "> <?php echo esc_html($choose_title); ?> </a> <a href="#" class="media-remove-button"><?php _e('Remove', 'siteorigin'); ?> </a> </div> <input type="hidden" value="<?php echo esc_attr(is_array($value) ? '-1' : $value); ?> " name="<?php echo $this->so_get_field_name($name, $repeater); ?> " class="siteorigin-widget-input" /> <div class="clear"></div> <?php break; case 'posts': ?> <input type="hidden" value="<?php echo esc_attr(is_array($value) ? '' : $value); ?> " name="<?php echo $this->so_get_field_name($name, $repeater); ?> " class="siteorigin-widget-input" /> <a href="#" class="sow-select-posts button button-secondary"> <span class="sow-current-count"><?php echo siteorigin_widget_post_selector_count_posts(is_array($value) ? '' : $value); ?> </span> <?php _e('Build Posts Query'); ?> </a> <?php break; case 'repeater': ob_start(); $repeater[] = $name; foreach ($field['fields'] as $sub_field_name => $sub_field) { $this->render_field($sub_field_name, $sub_field, isset($value[$sub_field_name]) ? $value[$sub_field_name] : false, $repeater); } $html = ob_get_clean(); $this->repeater_html[$name] = $html; ?> <div class="siteorigin-widget-field-repeater" data-item-name="<?php echo esc_attr($field['item_name']); ?> " data-repeater-name="<?php echo esc_attr($name); ?> "> <div class="siteorigin-widget-field-repeater-top"> <div class="siteorigin-widget-field-repeater-expend"></div> <h3><?php echo $field['label']; ?> </h3> </div> <div class="siteorigin-widget-field-repeater-items"> <?php if (!empty($value)) { foreach ($value as $v) { ?> <div class="siteorigin-widget-field-repeater-item"> <div class="siteorigin-widget-field-repeater-item-top"> <div class="siteorigin-widget-field-expand"></div> <div class="siteorigin-widget-field-remove"></div> <h4><?php echo esc_html($field['item_name']); ?> </h4> </div> <div class="siteorigin-widget-field-repeater-item-form"> <?php foreach ($field['fields'] as $sub_field_name => $sub_field) { $this->render_field($sub_field_name, $sub_field, isset($v[$sub_field_name]) ? $v[$sub_field_name] : false, $repeater); } ?> </div> </div> <?php } } ?> </div> <div class="siteorigin-widget-field-repeater-add"><?php _e('Add', 'siteorigin-widgets'); ?> </div> </div> <?php break; case 'widget': // Create the extra form entries $sub_widget = new $field['class'](); ?> <div class="siteorigin-widget-section <?php if (!empty($field['hide'])) { echo 'siteorigin-widget-section-hide'; } ?> "><?php foreach ($sub_widget->form_options() as $sub_name => $sub_field) { if (isset($value[$sub_name])) { $sub_value = $value[$sub_name]; } elseif (isset($sub_field['default'])) { $sub_value = $sub_field['default']; } else { $sub_value = false; } $this->render_field($name . '][' . $sub_name, $sub_field, $sub_value, $repeater); } ?> </div><?php break; case 'icon': static $widget_icon_families; if (empty($widget_icon_families)) { $widget_icon_families = apply_filters('siteorigin_widgets_icon_families', array()); } list($value_family, $null) = !empty($value) ? explode('-', $value, 2) : array('fontawesome', ''); ?> <div class="siteorigin-widget-icon-selector siteorigin-widget-field-subcontainer"> <select class="siteorigin-widget-icon-family" > <?php foreach ($widget_icon_families as $family_id => $family_info) { ?> <option value="<?php echo esc_attr($family_id); ?> " <?php selected($value_family, $family_id); ?> ><?php echo esc_html($family_info['name']); ?> (<?php echo count($family_info['icons']); ?> )</option> <?php } ?> </select> <input type="hidden" name="<?php echo $this->so_get_field_name($name, $repeater); ?> " value="<?php echo esc_attr($value); ?> " class="siteorigin-widget-icon-icon siteorigin-widget-input" /> <div class="siteorigin-widget-icon-icons"></div> </div> <?php break; case 'section': ?> <div class="siteorigin-widget-section <?php if (!empty($field['hide'])) { echo 'siteorigin-widget-section-hide'; } ?> "><?php foreach ((array) $field['fields'] as $sub_name => $sub_field) { if (isset($value[$sub_name])) { $sub_value = $value[$sub_name]; } elseif (isset($sub_field['default'])) { $sub_value = $sub_field['default']; } else { $sub_value = false; } $this->render_field($name . '][' . $sub_name, $sub_field, $sub_value, $repeater); } ?> </div><?php break; default: _e('Unknown Field', 'siteorigin-widgets'); break; } if (!empty($field['description'])) { ?> <div class="siteorigin-widget-field-description"><?php echo esc_html($field['description']); ?> </div><?php } ?> </div><?php }