Inputs = $return[0]; $this->Menu = $return[1]; $this->Defaults = $return[2]; } /** * Sanitize option * * Sanitize & returns default values if don't exist * * Notes: - For further uses, you can check for the $value['type'] and performs more speficic sanitization on the option - The ultimate objective of this function is to prevent the "undefined index" errors some authors are having due to malformed options array */ public static function sanitize_option($value) { $defaults = array( "name" => "", "desc" => "", "id" => "", "std" => "", "mod" => "", "type" => "" ); $value = wp_parse_args($value, $defaults); return $value; } /** * Process options data and build option fields * * @uses get_theme_mod() * * @access public * @since 1.0.0 * * @return array */ public static function optionsframework_machine($options) { global $smof_output, $smof_details, $smof_data; if (empty($options)) { return; } if (empty($smof_data)){ $smof_data = of_get_options(); } $data = $smof_data; $defaults = array(); $counter = 0; $menu = ''; $output = ''; $update_data = false; do_action('optionsframework_machine_before', array( 'options' => $options, 'smof_data' => $smof_data, )); if ($smof_output != "") { $output .= $smof_output; $smof_output = ""; } // $k = 0; // $info = false; foreach ($options as $value) { // sanitize option if ($value['type'] != "heading") { $value = self::sanitize_option($value); } $counter++; //create array of defaults if ($value['type'] == 'multicheck') { if (is_array($value['std'])) { foreach ($value['std'] as $i => $key) { $defaults[$value['id']][$key] = true; } } else { $defaults[$value['id']][$value['std']] = true; } } else { if (isset($value['id'])) { $defaults[$value['id']] = $value['std']; } } /* condition start */ if (!empty($smof_data) || !empty($data)) { if (array_key_exists('id', $value) && !isset($smof_data[$value['id']])) { $smof_data[$value['id']] = $value['std']; if ($value['type'] == "checkbox" && $value['std'] == 0) { $smof_data[$value['id']] = 0; } else { $update_data = true; } } if (array_key_exists('id', $value) && !isset($smof_details[$value['id']])) { $smof_details[$value['id']] = $smof_data[$value['id']]; } //Start Heading if ($value['type'] != "heading") { $attributes = array(); if (isset($value['id']) && $value['id']) { $attributes[] = 'id="section-' . $value['id'] . '"'; // $attributes[] = 'data-target="' . $value['id'] . '"'; } if (isset($value['child_of']) && $value['child_of']) { $attributes[] = 'data-child_of="' . $value['child_of'] . '"'; } if (isset($value['m_target']) && $value['m_target']) { $target_show = is_array($value['m_target']) ? implode(',', $value['m_target']) : $value['m_target']; $attributes[] = 'data-target="' . $target_show . '"'; } $class = 'section section-' . $value['type']; $class .= isset($value['class']) ? ' ' . $value['class'] : ''; //hide items in checkbox group if (array_key_exists("fold", $value)) { $class .= (isset($smof_data[$value['fold']]) && $smof_data[$value['fold']]) ? " f_" . $value['fold'] . " " : " f_" . $value['fold'] . " temphide "; } $attributes[] = 'class="' . $class . '"'; if (isset($value['data-class_show'])) { $attributes[] = 'data-class_show="' . esc_attr($value['data-class_show']) . '"'; } $output .= '
' . "\n"; //only show header if 'name' value exists if ($value['name']) { $output .= '

' . $value['name'] . '

' . "\n"; } $output .= $value['type'] != "info" ? '' : ''; $output .= '
' . "\n" . '
' . "\n"; } //End Heading //switch statement to handle various options type switch ($value['type']) { //text input case 'text': case 'password': $t_value = ''; $t_value = stripslashes($smof_data[$value['id']]); $t_value = str_replace('"', "'", $t_value); $mini = ''; if (isset($value['mod']) && $value['mod'] == 'mini') { $mini .= ' mini'; } $output .= ''; break; //select option case 'select': $mini = ''; if (!isset($value['mod'])) { $value['mod'] = ''; } if ($value['mod'] == 'mini') { $mini = 'mini'; } $select_class = 'select of-input'; $select_class .= isset($value['select_class']) && $value['select_class'] ? ' ' . $value['select_class'] : ''; $output .= '
'; $output .= '
'; break; //select option case 'select2id': $mini = ''; if (!isset($value['mod'])) { $value['mod'] = ''; } if ($value['mod'] == 'mini') { $mini = 'mini'; } $select_class = 'select of-input'; $select_class .= isset($value['select_class']) && $value['select_class'] ? ' ' . $value['select_class'] : ''; $output .= '
'; $output .= '
'; break; //textarea option case 'textarea': $cols = '8'; $ta_value = ''; if (isset($value['options'])) { $ta_options = $value['options']; if (isset($ta_options['cols'])) { $cols = $ta_options['cols']; } } $ta_value = stripslashes($smof_data[$value['id']]); $output .= ''; break; //radiobox option case "radio": $checked = (isset($smof_data[$value['id']])) ? checked($smof_data[$value['id']], $option, false) : ''; foreach ($value['options'] as $option => $name) { $output .= '
'; } break; //checkbox option case 'checkbox': if (!isset($smof_data[$value['id']])) { $smof_data[$value['id']] = 0; } $fold = ''; if (array_key_exists("folds", $value)) { $fold = "fld "; } $output .= ''; $output .= ''; break; //multiple checkbox option case 'multicheck': $multi_stored = isset($smof_data[$value['id']]) ? $smof_data[$value['id']] : $defaults[$value['id']]; foreach ($value['options'] as $key => $option) { if (!isset($multi_stored[$key])) { $multi_stored[$key] = ''; } $of_key_string = $value['id'] . '_' . $key; $output .= '
'; } break; // Color picker case "color": $default_color = ''; if (isset($value['std'])) { $default_color = ' data-default-color="' . $value['std'] . '" '; } $output .= ''; break; //typography option case 'typography': $typography_stored = isset($smof_data[$value['id']]) ? $smof_data[$value['id']] : $value['std']; /* Font Size */ if (isset($typography_stored['size'])) { $output .= '
'; $output .= '
'; } /* Line Height */ if (isset($typography_stored['height'])) { $output .= '
'; $output .= '
'; } /* Font Face */ if (isset($typography_stored['face'])) { $output .= '
'; $output .= '
'; } /* Font Weight */ if (isset($typography_stored['style'])) { $output .= '
'; $output .= '
'; } /* Font Color */ if (isset($typography_stored['color'])) { $output .= '
'; $output .= ''; } break; //border option case 'border': /* Border Width */ $border_stored = $smof_data[$value['id']]; $output .= '
'; $output .= '
'; /* Border Style */ $output .= '
'; $output .= '
'; /* Border Color */ $output .= '
'; $output .= ''; break; //images checkbox - use image as checkboxes case 'images': $i = 0; $select_value = (isset($smof_data[$value['id']])) ? $smof_data[$value['id']] : ''; foreach ($value['options'] as $key => $option) { $i++; $checked = ''; $selected = ''; if (null != checked($select_value, $key, false)) { $checked = checked($select_value, $key, false); // $selected = 'of-radio-img-selected'; $selected = ' ns-radio-img-selected'; } $output .= ''; $output .= ''; $output .= '
' . $key . '
'; $output .= ''; $output .= ''; $output .= ''; $output .= '
'; } break; //display a single image case "image": $src = $value['std']; $output .= ''; break; //display a button with url case 'button': $src = $value['std']; $output .= ''; $output .= ''; break; //info (for small intro box etc) case "info": $info_text = $value['std']; $output .= '
' . $info_text . '
'; break; //tab heading case 'heading': if ($counter >= 2) { $output .= '
' . "\n"; // $output .= $info ? '
' . "\n" : ''; // $info = false; } //custom icon $icon = ''; if (isset($value['icon'])) { $icon = ' style="background-image: url(' . $value['icon'] . ');"'; } $header_class = isset($value['target']) ? 'heading-' . str_replace(' ','-', strtolower($value['target'])) : str_replace(' ', '', strtolower($value['name'])); $jquery_click_hook = "of-option-" . $header_class; $menu .= '
  • ' . $value['name'] . '
  • '; $output .= '
    ' . "\n"; break; //drag & drop slide manager case 'slider': $output .= '
      '; $slides = $smof_data[$value['id']]; $count = count($slides); if ($count < 2) { $oldorder = 1; $order = 1; $output .= Options_Machine::optionsframework_slider_function($value['id'], $value['std'], $oldorder, $order); } else { $i = 0; foreach ($slides as $slide) { $oldorder = $slide['order']; $i++; $order = $i; $output .= Options_Machine::optionsframework_slider_function($value['id'], $value['std'], $oldorder, $order); } } $output .= '
    '; $output .= '' . esc_html__('Add New Slide', 'elessi-theme') . '
    '; break; //drag & drop block manager case 'sorter': // Make sure to get list of all the default blocks first $all_blocks = $value['std']; $temp = array(); // holds default blocks $temp2 = array(); // holds saved blocks foreach ($all_blocks as $blocks) { $temp = array_merge($temp, $blocks); } $sortlists = isset($data[$value['id']]) && !empty($data[$value['id']]) ? $data[$value['id']] : $value['std']; foreach ($sortlists as $sortlist) { $temp2 = array_merge($temp2, $sortlist); } // now let's compare if we have anything missing foreach ($temp as $k => $v) { if (!array_key_exists($k, $temp2)) { $sortlists['disabled'][$k] = $v; } } // now check if saved blocks has blocks not registered under default blocks foreach ($sortlists as $key => $sortlist) { foreach ($sortlist as $k => $v) { if (!array_key_exists($k, $temp)) { unset($sortlist[$k]); } } $sortlists[$key] = $sortlist; } // assuming all sync'ed, now get the correct naming for each block foreach ($sortlists as $key => $sortlist) { foreach ($sortlist as $k => $v) { $sortlist[$k] = $temp[$k]; } $sortlists[$key] = $sortlist; } $output .= '
    '; if ($sortlists) { foreach ($sortlists as $group => $sortlist) { $output .= '
      '; $output .= '

      ' . $group . '

      '; foreach ($sortlist as $key => $list) { $output .= ''; if ($key != "placebo") { $output .= '
    • '; $output .= ''; $output .= $list; $output .= '
    • '; } } $output .= '
    '; } } $output .= '
    '; break; //background images option case 'tiles': $i = 0; $select_value = isset($smof_data[$value['id']]) && !empty($smof_data[$value['id']]) ? $smof_data[$value['id']] : ''; if (is_array($value['options'])) { foreach ($value['options'] as $key => $option) { $i++; $checked = ''; $selected = ''; if (NULL != checked($select_value, $option, false)) { $checked = checked($select_value, $option, false); $selected = 'of-radio-tile-selected'; } $output .= ''; $output .= ''; $output .= '
    '; $output .= '
    '; } } break; //backup and restore options data case 'backup': $instructions = $value['desc']; $backup = of_get_options(ELESSI_ADMIN_BACKUPS); $init = of_get_options('smof_init'); $log = !isset($backup['backup_log']) ? esc_html__('No backups yet.', 'elessi-theme') : $backup['backup_log']; $output .= '
    '; $output .= '
    ' . $instructions . "\n"; $output .= '

    ' . esc_html__('Last Backup : ', 'elessi-theme') . '' . $log . '

    ' . "\n"; $output .= '' . esc_html__('Backup Options', 'elessi-theme') . ''; $output .= 'Restore Options'; $output .= '
    '; break; //export or import data between different installs case 'transfer': $instructions = $value['desc']; $output .= '' . "\n"; $output .= '' . esc_html__('Import Options', 'elessi-theme') . ''; break; // google font field case 'select_google_font': $output .= '
    '; $output .= '
    '; $g_text = isset($value['preview']['text']) ? $value['preview']['text'] : '0123456789 ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz'; $g_size = isset($value['preview']['size']) ? 'style="font-size: ' . $value['preview']['size'] . ';"' : ''; $hide = ($smof_data[$value['id']] != "none" && $smof_data[$value['id']] != "") ? "" : " hide"; $output .= '

    ' . $g_text . '

    '; break; // Nasa upload Custom font case 'nasa_upload_custom_font' : $output .= '
    '; $output .= ''; $output .= ''; $output .= '
    '; break; //JQuery UI Slider case 'sliderui': $s_val = $s_min = $s_max = $s_step = $s_edit = ''; //no errors, please $s_val = stripslashes($smof_data[$value['id']]); $s_min = !isset($value['min']) ? '0' : $value['min']; $s_max = !isset($value['max']) ? ($s_min + 1) : $value['max']; $s_step = !isset($value['step']) ? '1' : $value['step']; $s_edit = !isset($value['edit']) ? ' readonly="readonly"' : ''; if ($s_val == '') { $s_val = $s_min; } //values $s_data = 'data-id="' . $value['id'] . '" data-val="' . $s_val . '" data-min="' . $s_min . '" data-max="' . $s_max . '" data-step="' . $s_step . '"'; //html output $output .= ''; $output .= '
    '; break; //Switch option case 'switch': if (!isset($smof_data[$value['id']])) { $smof_data[$value['id']] = 0; } $fold = ''; if (array_key_exists("folds", $value)) { $fold = "s_fld "; } $cb_enabled = $cb_disabled = ''; //no errors, please //Get selected if ($smof_data[$value['id']] == 1) { $cb_enabled = ' selected'; $cb_disabled = ''; } else { $cb_enabled = ''; $cb_disabled = ' selected'; } //Label ON $on = !isset($value['on']) ? esc_html__('On', 'elessi-theme') : $value['on']; //Label OFF $off = !isset($value['off']) ? esc_html__('Off', 'elessi-theme') : $value['off']; $output .= '

    '; $output .= ''; $output .= ''; $output .= ''; $output .= ''; $output .= '

    '; break; // Uploader 3.5 case "upload": case "media": if (!isset($value['mod'])) { $value['mod'] = ''; } $u_val = ''; if ($smof_data[$value['id']]) { $u_val = stripslashes($smof_data[$value['id']]); } $output .= Options_Machine::optionsframework_media_uploader_function($value['id'], $u_val, $value['mod']); break; /** * Ajax field */ case 'ajax_field': $t_value = ''; $t_value = stripslashes($smof_data[$value['id']]); $t_value = str_replace('"', "'", $t_value); $t_value = $t_value == '' ? $value['std'] : $t_value; $output .= '
    '; $output .= '
    '; $output .= '' . esc_html__('Current value:', 'elessi-theme') . ' ' . $t_value . ''; $output .= '    '; $output .= '' . esc_html__('Change', 'elessi-theme') . ''; $output .= '
    '; $output .= ''; $output .= '
    '; $output .= ''; $output .= '
    '; break; /** * Fake Purchase */ case 'fake_purchases': $t_value = isset($smof_data[$value['id']]) ? $smof_data[$value['id']] : $value['std']; $check_svg =' '; $output .= '
    '; $output .= '
    ' . esc_html__('Customer in country purchased a', 'elessi-theme') . '
    ' . esc_html__('Time ago', 'elessi-theme') . ' ' . $check_svg . esc_html__('Verified', 'elessi-theme') . '
    '; $output .= ' '; $output .= '
    '; break; default: break; } $output = apply_filters('nasa_smof_loop_output_item', $output, $value); do_action('optionsframework_machine_loop', array( 'options' => $options, 'smof_data' => $smof_data, 'defaults' => $defaults, 'counter' => $counter, 'menu' => $menu, 'output' => $output, 'value' => $value )); if ($smof_output != "") { $output .= $smof_output; $smof_output = ""; } //description of each option if ($value['type'] != 'heading') { $img_desc = !isset($value['img_desc']) ? '' : '
    ' . "\n"; $img_class = !isset($value['img_desc']) ? '' : ' has-img-desc'; $explain_value = !isset($value['desc']) ? '' : '
    ' . $value['desc'] . $img_desc . '
    ' . "\n"; $output .= '
    ' . $explain_value . "\n"; $output .= '
    ' . "\n"; } } /* condition empty end */ // $k++; } if ($update_data == true) { of_save_options($smof_data); } $output .= ''; do_action('optionsframework_machine_after', array( 'options' => $options, 'smof_data' => $smof_data, 'defaults' => $defaults, 'counter' => $counter, 'menu' => $menu, 'output' => $output, 'value' => $value )); if ($smof_output != "") { $output .= $smof_output; $smof_output = ""; } return array($output, $menu, $defaults); } /** * Native media library uploader * * @uses get_theme_mod() * * @access public * @since 1.0.0 * * @return string */ public static function optionsframework_media_uploader_function($id, $std, $mod) { $smof_data = of_get_options(); $uploader = ''; $upload = ""; if (isset($smof_data[$id])) { $upload = $smof_data[$id]; } $val = $upload != "" ? $upload : $std; if (is_numeric($upload)) { $image = wp_get_attachment_image_src($upload, 'full'); if (isset($image[0])) { $upload = $image[0]; } } $hide = ''; if ($mod == "min") { $hide = 'hide'; } $uploader .= ''; //Upload controls DIV $uploader .= '
    '; //If the user has WP3.5+ show upload/remove button if (function_exists('wp_enqueue_media')) { $uploader .= '' . esc_html__('Upload', 'elessi-theme') . ''; if (!empty($upload)) { $hide = ''; } else { $hide = 'hide'; } $uploader .= '' . esc_html__('Remove', 'elessi-theme') . ''; } else { $uploader .= '

    ' . esc_html__('Upgrade your version of WordPress for full media support.', 'elessi-theme') . '

    '; } $uploader .= '
    ' . "\n"; //Preview $uploader .= '
    '; if (!empty($upload)) { $uploader .= ''; $uploader .= ''; $uploader .= ''; } else { if ($val) { $uploader .= ''; $uploader .= ''; $uploader .= ''; } } $uploader .= '
    '; $uploader .= '
    ' . "\n"; return $uploader; } /** * Drag and drop slides manager * * @uses get_theme_mod() * * @access public * @since 1.0.0 * * @return string */ public static function optionsframework_slider_function($id, $std, $oldorder, $order) { $smof_data = of_get_options(); $slider = ''; $slide = isset($smof_data[$id]) ? $smof_data[$id] : array(); $val = isset($slide[$oldorder]) ? $slide[$oldorder] : $std; //initialize all vars $slidevars = array('title', 'url', 'link', 'description'); foreach ($slidevars as $slidevar) { if (!isset($val[$slidevar])) { $val[$slidevar] = ''; } } //begin slider interface $slider .= !empty($val['title']) ? '
  • ' . stripslashes($val['title']) . '' : '
  • ' . esc_html__('Slide', 'elessi-theme') . ' ' . $order . ''; $slider .= ''; $slider .= '' . esc_html__('Edit', 'elessi-theme') . '
    '; $slider .= '
    '; $slider .= ''; $slider .= ''; $slider .= ''; $slider .= ''; $slider .= '
    ' . esc_html__('Upload', 'elessi-theme') . ''; $hide = !empty($val['url']) ? '' : 'hide'; $slider .= '' . esc_html__('Remove', 'elessi-theme') . ''; $slider .= '
    ' . "\n"; $slider .= '
    '; if (!empty($val['url'])) { $slider .= ''; $slider .= ''; $slider .= ''; } $slider .= '
    '; $slider .= ''; $slider .= ''; $slider .= ''; $slider .= ''; $slider .= 'Delete'; $slider .= '
    ' . "\n"; $slider .= '
    '; $slider .= '
  • '; return $slider; } } //end Options Machine class