/** * Convert a field */ public function create_field($field, $section_id = null) { $args = array(); $args['section_id'] = $section_id; $args['title'] = isset($field['label']) ? $field['label'] : ''; $args['subtitle'] = isset($field['description']) ? $field['description'] : ''; $args['description'] = isset($field['help']) ? $field['help'] : ''; $args['class'] = isset($field['class']) ? $field['class'] . ' avada_options' : 'avada_options'; $args['options'] = isset($field['choices']) ? $field['choices'] : array(); $args['required'] = array(); if (isset($field['required']) && is_array($field['required']) && !empty($field['required'])) { foreach ($field['required'] as $requirement) { $requirement['operator'] = '==' == $requirement['operator'] ? '=' : $requirement['operator']; $args['required'][] = array($requirement['setting'], $requirement['operator'], $requirement['value']); } } elseif (isset($args['required'])) { unset($args['required']); } // This will allow us to have an 'options_mode' setting. // We can have 'simple', 'advanced' etc there, and options will be shown depending on our selection. if (isset($field['option_mode'])) { if (!isset($args['required'])) { $args['required'] = array(); } $args['required'][] = array('options_mode', '=', $field['option_mode']); } if (!isset($field['type'])) { return; } $font_size_dimension_fields = array('meta_font_size', 'es_title_font_size', 'es_caption_font_size', 'ec_sidew_font_size', 'image_rollover_icon_size', 'pagination_font_size', 'form_input_height', 'copyright_font_size', 'tagline_font_size', 'header_sticky_nav_font_size', 'page_title_font_size', 'page_title_subheader_font_size', 'breadcrumbs_font_size', 'content_box_title_size', 'content_box_icon_size', 'counter_box_title_size', 'counter_box_icon_size', 'counter_box_body_size', 'social_links_font_size', 'sidew_font_size', 'slider_arrow_size', 'slidingbar_font_size', 'header_social_links_font_size', 'footer_social_links_font_size', 'sharing_social_links_font_size', 'post_titles_font_size', 'post_titles_font_lh', 'post_titles_extras_font_size', 'woo_icon_font_size'); switch ($field['type']) { case 'color': if (!isset($field['transparent'])) { $args['transparent'] = false; } $args['validate_callback'] = 'avada_avadaredux_validate_color_hex'; break; case 'code': $args['type'] = 'ace_editor'; $args['mode'] = isset($args['options']) && isset($args['options']['language']) ? $args['options']['language'] : 'css'; $args['theme'] = isset($args['choices']) && isset($args['choices']['theme']) ? $args['choices']['theme'] : 'chrome'; $args['options']['minLines'] = !isset($args['options']['minLines']) ? 18 : $args['options']['minLines']; $args['options']['maxLines'] = !isset($args['options']['maxLines']) ? 30 : $args['options']['maxLines']; if ('custom_css' == $field['id']) { $args['full_width'] = true; } break; case 'radio-buttonset': $args['type'] = 'button_set'; break; case 'dimension': $args['type'] = 'text'; $args['class'] .= ' dimension'; $args['options'] = ''; $args['validate_callback'] = 'avada_avadaredux_validate_dimension'; if (in_array($field['id'], $font_size_dimension_fields)) { // $args['subtitle'] = sprintf( esc_html__( '%s Enter value including a CSS unit, ex: %s. Valid CSS units for this field are px, em, rem.', 'Avada' ), $args['subtitle'], $field['default'] ); $args['validate_callback'] = 'avada_avadaredux_validate_font_size'; $args['subtitle'] = sprintf(esc_html__('%s Enter value including CSS unit (px, em, rem), ex: %s.', 'Avada'), $args['subtitle'], $field['default']); } else { $args['subtitle'] = sprintf(esc_html__('%s Enter value including any valid CSS unit, ex: %s.', 'Avada'), $args['subtitle'], $field['default']); } break; case 'dimensions': if ('lightbox_video_dimensions' == $field['id']) { $args['subtitle'] = sprintf(esc_html__('%s In pixels, ex: %s.', 'Avada'), $args['subtitle'], implode(', ', $field['default'])); } else { $args['subtitle'] = sprintf(esc_html__('%s Enter values including any valid CSS unit, ex: %s.', 'Avada'), $args['subtitle'], implode(', ', $field['default'])); } $args['validate_callback'] = 'avada_avadaredux_validate_dimensions'; break; case 'spacing': $args['top'] = isset($field['choices']) && isset($field['choices']['top']) ? true : false; $args['bottom'] = isset($field['choices']) && isset($field['choices']['bottom']) ? true : false; $args['left'] = isset($field['choices']) && isset($field['choices']['left']) ? true : false; $args['right'] = isset($field['choices']) && isset($field['choices']['right']) ? true : false; $args['validate_callback'] = 'avada_avadaredux_validate_dimensions'; $args['subtitle'] = sprintf(esc_html__('%s Enter values including any valid CSS unit, ex: %s.', 'Avada'), $args['subtitle'], implode(', ', $field['default'])); break; case 'number': $args['type'] = 'spinner'; if (isset($field['choices']) && isset($field['choices']['min'])) { $args['min'] = $field['choices']['min']; } if (isset($field['choices']) && isset($field['choices']['max'])) { $args['max'] = $field['choices']['max']; } if (isset($field['choices']) && isset($field['choices']['step'])) { $args['step'] = $field['choices']['step']; } break; case 'select': $args['width'] = 'width:100%;'; $args['select2'] = array('minimumResultsForSearch' => '-1', 'allowClear' => false); break; case 'slider': $not_in_pixels = array('carousel_speed', 'counter_box_speed', 'testimonials_speed', 'slidingbar_widgets_columns', 'footer_widgets_columns', 'blog_grid_columns', 'excerpt_length_blog', 'excerpt_length_portfolio', 'posts_slideshow_number', 'slideshow_speed', 'tfes_interval', 'tfes_speed', 'lightbox_slideshow_speed', 'lightbox_opacity', 'map_zoom_level', 'search_results_per_page', 'number_related_posts', 'related_posts_columns', 'related_posts_speed', 'related_posts_swipe_items', 'pw_jpeg_quality', 'portfolio_items', 'woo_items', 'woocommerce_shop_page_columns', 'woocommerce_related_columns', 'woocommerce_archive_page_columns', 'typography_sensitivity', 'typography_factor'); if (!in_array($field['id'], $not_in_pixels)) { $args['subtitle'] = $args['subtitle'] . ' ' . esc_html__('In pixels.', 'Avada'); } if (isset($field['choices']) && isset($field['choices']['min'])) { $args['min'] = $field['choices']['min']; } if (isset($field['choices']) && isset($field['choices']['max'])) { $args['max'] = $field['choices']['max']; } if (isset($field['choices']) && isset($field['choices']['step'])) { $args['step'] = $field['choices']['step']; } if (isset($field['choices']['step']) && 1 > $field['choices']['step']) { $args['resolution'] = 0.1; if (0.1 > $field['choices']['step']) { $args['resolution'] = 0.01; } elseif (0.01 > $field['choices']['step']) { $args['resolution'] = 0.001; } } break; case 'switch': case 'toggle': $args['type'] = 'switch'; if (isset($field['choices']) && isset($field['choices']['on'])) { $args['on'] = $field['choices']['on']; } if (isset($field['choices']) && isset($field['choices']['off'])) { $args['off'] = $field['choices']['off']; } break; case 'color-alpha': $args['type'] = 'color_alpha'; $args['transparent'] = false; $args['validate_callback'] = 'avada_avadaredux_validate_color_rgba'; break; case 'preset': $args['type'] = 'image_select'; $args['presets'] = true; $args['options'] = array(); foreach ($field['choices'] as $choice => $choice_args) { if (is_array($choice_args)) { $args['options'][$choice] = array('alt' => $choice_args['label'], 'img' => $choice_args['image'], 'presets' => $choice_args['settings']); } } break; case 'radio-image': $args['type'] = 'image_select'; $args['options'] = array(); foreach ($field['choices'] as $id => $url) { $args['options'][$id] = array('alt' => $id, 'img' => $url); } if ('header_layout' == $field['id']) { $args['full_width'] = true; } break; case 'upload': case 'media': $args['type'] = 'media'; if (isset($field['default']) && !is_array($field['default'])) { $args['default'] = '' == $field['default'] ? array() : ($args['default'] = array('url' => $field['default'])); } break; case 'radio': $args['options'] = array(); foreach ($field['choices'] as $choice => $label) { if (is_array($label)) { $args['options'][$choice] = '<span style="font-weight: bold; font-size: 1.1em; line-height: 2.2em;">' . $label[0] . '</span><p>' . $label[1] . '<p>'; } else { $args['options'][$choice] = $label; } } break; case 'multicheck': $args['type'] = 'checkbox'; break; case 'typography': $args['default'] = array(); if (isset($field['default'])) { if (isset($field['default']['font-weight'])) { $args['default']['font-weight'] = $field['default']['font-weight']; } if (isset($field['default']['font-size'])) { $args['default']['font-size'] = $field['default']['font-size']; } if (isset($field['default']['font-family'])) { $args['default']['font-family'] = $field['default']['font-family']; $args['default']['font-backup'] = true; $args['default']['google'] = true; } if (isset($field['default']['line-height'])) { $args['default']['line-height'] = $field['default']['line-height']; } if (isset($field['default']['word-spacing'])) { $args['default']['word-spacing'] = $field['default']['word-spacing']; } if (isset($field['default']['letter-spacing'])) { $args['default']['letter-spacing'] = $field['default']['letter-spacing']; } if (isset($field['default']['color'])) { $args['default']['color'] = $field['default']['color']; } if (isset($field['default']['text-align'])) { $args['default']['text-align'] = $field['default']['text-align']; } if (isset($field['default']['text-transform'])) { $args['default']['text-transform'] = $field['default']['text-transform']; } if (isset($field['default']['margin-top'])) { $args['default']['margin-top'] = $field['default']['margin-top']; } if (isset($field['default']['margin-bottom'])) { $args['default']['margin-bottom'] = $field['default']['margin-bottom']; } } $args['fonts'] = Avada_Data::standard_fonts(); $args['font-backup'] = true; $args['font-style'] = isset($args['default']['font-style']) || isset($field['choices']['font-style']) && $field['choices']['font-style'] ? true : false; $args['font-weight'] = isset($args['default']['font-weight']) || isset($field['choices']['font-weight']) && $field['choices']['font-weight'] ? true : false; $args['font-size'] = isset($args['default']['font-size']) || isset($field['choices']['font-size']) && $field['choices']['font-size'] ? true : false; $args['font-family'] = isset($args['default']['font-family']) || isset($field['choices']['font-family']) && $field['choices']['font-family'] ? true : false; $args['subsets'] = isset($args['default']['font-family']) || isset($field['choices']['font-family']) && $field['choices']['font-family'] ? true : false; $args['line-height'] = isset($args['default']['line-height']) || isset($field['choices']['line-height']) && $field['choices']['line-height'] ? true : false; $args['word-spacing'] = isset($args['default']['word-spacing']) || isset($field['choices']['word-spacing']) && $field['choices']['word-spacing'] ? true : false; $args['letter-spacing'] = isset($args['default']['word-spacing']) || isset($field['choices']['letter-spacing']) && $field['choices']['letter-spacing'] ? true : false; $args['text-align'] = isset($args['default']['text-align']) || isset($field['choices']['text-align']) && $field['choices']['text-align'] ? true : false; $args['text-transform'] = isset($args['default']['text-transform']) || isset($field['choices']['text-transform']) && $field['choices']['text-transform'] ? true : false; $args['color'] = isset($args['default']['color']) || isset($field['choices']['color']) && $field['choices']['color'] ? true : false; $args['margin-top'] = isset($args['default']['margin-top']) || isset($field['choices']['margin-top']) && $field['choices']['margin-top'] ? true : false; $args['margin-bottom'] = isset($args['default']['margin-bottom']) || isset($field['choices']['margin-bottom']) && $field['choices']['margin-bottom'] ? true : false; $args['select2'] = array('allowClear' => false); $args['validate_callback'] = 'avada_avadaredux_validate_typography'; break; case 'repeater': $args['fields'] = array(); $args['group_values'] = true; $args['sortable'] = true; $i = 0; foreach ($field['fields'] as $repeater_field_id => $repeater_field_args) { $repeater_field_args['label'] = isset($repeater_field_args['label']) ? $repeater_field_args['label'] : ''; $args['fields'][$i] = array('id' => $repeater_field_id, 'type' => isset($repeater_field_args['type']) ? $repeater_field_args['type'] : 'text', 'title' => $repeater_field_args['label'], 'placeholder' => isset($repeater_field_args['default']) ? $repeater_field_args['default'] : $repeater_field_args['label']); if (isset($repeater_field_args['choices'])) { $args['fields'][$i]['options'] = $repeater_field_args['choices']; } if (isset($repeater_field_args['type']) && 'select' == $repeater_field_args['type']) { $args['fields'][$i]['width'] = 'width:100%;'; $args['fields'][$i]['select2'] = array('minimumResultsForSearch' => '-1'); } if (isset($repeater_field_args['type']) && 'color' == $repeater_field_args['type']) { $args['fields'][$i]['transparent'] = false; } if (isset($repeater_field_args['type']) && 'upload' == $repeater_field_args['type']) { $args['fields'][$i]['type'] = 'media'; if (isset($repeater_field_args['mode'])) { $args['fields'][$i]['mode'] = $repeater_field_args['mode']; } if (isset($repeater_field_args['preview'])) { $args['fields'][$i]['preview'] = $repeater_field_args['preview']; } } $i++; } unset($args['options']); if ('custom_fonts' == $field['id']) { $args['validate_callback'] = 'avada_avadaredux_validate_custom_fonts'; } break; case 'accordion': $args['type'] = 'accordion'; $args['title'] = $field['label']; $args['subtitle'] = isset($field['description']) ? $field['description'] : ''; unset($field['fields']); unset($field['label']); unset($field['default']); unset($field['options']); break; case 'custom': $args['type'] = 'raw'; $args['full_width'] = true; if (isset($field['style']) && $field['style'] == 'heading') { $args['content'] = '<div class="avadaredux-field-info"><p class="avadaredux-info-desc" style="font-size:13px;"><b>' . $field['description'] . '</b></p></div>'; $args['class'] .= ' custom-heading'; } else { $args['content'] = $field['description']; $args['class'] .= ' custom-info'; } $args['description'] = ''; $args['subtitle'] = ''; $args['raw_html'] = true; break; } // Add validation to the email field if (isset($field['id']) && 'email_address' == $field['id']) { $args['validate'] = 'email'; } $args = wp_parse_args($args, $field); if (class_exists('AvadaRedux')) { AvadaRedux::setField($this->key, $args); } }