function ot_validate_settings_array($settings = array()) { /* validate settings */ if (count($settings) > 0) { /* fix numeric keys since drag & drop will change them */ $settings = array_values($settings); /* loop through settings */ foreach ($settings as $k => $setting) { /* remove from array if missing values */ if (!isset($setting['label']) && !isset($setting['id']) || '' == $setting['label'] && '' == $setting['id']) { unset($settings[$k]); } else { /* validate label */ if ('' != $setting['label']) { $settings[$k]['label'] = wp_kses_post($setting['label']); } /* missing label set to unfiltered ID */ if (!isset($setting['label']) || '' == $setting['label']) { $settings[$k]['label'] = $setting['id']; /* missing ID set to label */ } else { if (!isset($setting['id']) || '' == $setting['id']) { $setting['id'] = wp_kses_post($setting['label']); } } /* sanitize ID once everything has been checked first */ $settings[$k]['id'] = ot_sanitize_option_id(wp_kses_post($setting['id'])); } /* validate description */ if ('' != $setting['desc']) { $settings[$k]['desc'] = wp_kses_post($setting['desc']); } /* validate choices */ if (isset($setting['choices'])) { /* loop through choices */ foreach ($setting['choices'] as $ck => $choice) { /* remove from array if missing values */ if (!isset($choice['label']) && !isset($choice['value']) || '' == $choice['label'] && '' == $choice['value']) { unset($setting['choices'][$ck]); } else { /* missing label set to unfiltered ID */ if (!isset($choice['label']) || '' == $choice['label']) { $setting['choices'][$ck]['label'] = wp_kses_post($choice['value']); /* missing value set to label */ } else { if (!isset($choice['value']) || '' == $choice['value']) { $setting['choices'][$ck]['value'] = ot_sanitize_option_id(wp_kses_post($choice['label'])); } } } } /* update keys and push new array values */ $settings[$k]['choices'] = array_values($setting['choices']); } /* validate sub settings */ if (isset($setting['settings'])) { $settings[$k]['settings'] = ot_validate_settings_array($setting['settings']); } } } /* return array but strip those damn slashes out first!!! */ return ot_stripslashes($settings); }
function rj_taxonomy_ot_save_settings() { if (isset($_REQUEST['page']) && $_REQUEST['page'] == 'rj-ot-taxonomy_metabox') { rj_ot_admin_scriptss(); rj_ot_admin_styless(); wp_enqueue_script('rj_ot_taxonomy_script', plugin_dir_url(dirname(__FILE__)) . 'js/taxonomy-ot-metabox-ui-settings.js'); } /* check and verify import settings nonce */ if (isset($_POST['option_tree_settings_nonce']) && wp_verify_nonce($_POST['option_tree_settings_nonce'], 'rj_option_tree_settings_form') && isset($_GET['page']) && $_GET['page'] == 'rj-ot-taxonomy_metabox') { /* settings value */ $settings = isset($_POST[ot_settings_id()]) ? $_POST[ot_settings_id()] : ''; /* validate sections */ if (isset($settings['sections'])) { /* fix numeric keys since drag & drop will change them */ $settings['sections'] = array_values($settings['sections']); /* loop through sections */ foreach ($settings['sections'] as $k => $section) { /* remove from array if missing values */ if (!isset($section['title']) && !isset($section['id']) || '' == $section['title'] && '' == $section['id']) { unset($settings['sections'][$k]); } else { /* validate label */ if ('' != $section['title']) { $settings['sections'][$k]['title'] = wp_kses_post($section['title']); } /* missing title set to unfiltered ID */ if (!isset($section['title']) || '' == $section['title']) { $settings['sections'][$k]['title'] = wp_kses_post($section['id']); /* missing ID set to title */ } else { if (!isset($section['id']) || '' == $section['id']) { $section['id'] = wp_kses_post($section['title']); } } /* sanitize ID once everything has been checked first */ $settings['sections'][$k]['id'] = ot_sanitize_option_id(wp_kses_post($section['id'])); } } $settings['sections'] = ot_stripslashes($settings['sections']); } /* validate settings by looping over array as many times as it takes */ if (isset($settings['settings'])) { $settings['settings'] = ot_validate_settings_array($settings['settings']); } /* validate contextual_help */ if (isset($settings['contextual_help']['content'])) { /* fix numeric keys since drag & drop will change them */ $settings['contextual_help']['content'] = array_values($settings['contextual_help']['content']); /* loop through content */ foreach ($settings['contextual_help']['content'] as $k => $content) { /* remove from array if missing values */ if (!isset($content['title']) && !isset($content['id']) || '' == $content['title'] && '' == $content['id']) { unset($settings['contextual_help']['content'][$k]); } else { /* validate label */ if ('' != $content['title']) { $settings['contextual_help']['content'][$k]['title'] = wp_kses_post($content['title']); } /* missing title set to unfiltered ID */ if (!isset($content['title']) || '' == $content['title']) { $settings['contextual_help']['content'][$k]['title'] = wp_kses_post($content['id']); /* missing ID set to title */ } else { if (!isset($content['id']) || '' == $content['id']) { $content['id'] = wp_kses_post($content['title']); } } /* sanitize ID once everything has been checked first */ $settings['contextual_help']['content'][$k]['id'] = ot_sanitize_option_id(wp_kses_post($content['id'])); } /* validate textarea description */ if (isset($content['content'])) { $settings['contextual_help']['content'][$k]['content'] = wp_kses_post($content['content']); } } } /* validate contextual_help sidebar */ if (isset($settings['contextual_help']['sidebar'])) { $settings['contextual_help']['sidebar'] = wp_kses_post($settings['contextual_help']['sidebar']); } $settings['contextual_help'] = ot_stripslashes($settings['contextual_help']); /* default message */ $message = 'failed'; /* is array: save & show success message */ if (is_array($settings)) { /* WPML unregister ID's that have been removed */ if (function_exists('icl_unregister_string')) { $current = get_option(ot_settings_id()); $options = get_option(ot_options_id()); if (isset($current['settings'])) { /* Empty ID array */ $new_ids = array(); /* Build the WPML IDs array */ foreach ($settings['settings'] as $setting) { if ($setting['id']) { $new_ids[] = $setting['id']; } } /* Remove missing IDs from WPML */ foreach ($current['settings'] as $current_setting) { if (!in_array($current_setting['id'], $new_ids)) { if (!empty($options[$current_setting['id']]) && in_array($current_setting['type'], array('list-item', 'slider'))) { foreach ($options[$current_setting['id']] as $key => $value) { foreach ($value as $ckey => $cvalue) { ot_wpml_unregister_string($current_setting['id'] . '_' . $ckey . '_' . $key); } } } else { if (!empty($options[$current_setting['id']]) && $current_setting['type'] == 'social-icons') { foreach ($options[$current_setting['id']] as $key => $value) { foreach ($value as $ckey => $cvalue) { ot_wpml_unregister_string($current_setting['id'] . '_' . $ckey . '_' . $key); } } } else { ot_wpml_unregister_string($current_setting['id']); } } } } } } update_option('rj_taxonomy_' . ot_settings_id(), $settings); $message = 'success'; } /* redirect */ wp_redirect(add_query_arg(array('action' => 'save-settings', 'message' => $message), $_POST['_wp_http_referer'])); exit; } return false; }