function weaverx_validate_all_options($in)
{
    /* validation for all options  */
    $err_msg = '';
    // no error message yet
    if (empty($in)) {
        wp_die(__('You attempted to save options, but something has gone wrong. Please be sure you are logged in and your host is correctly configured. See the "Weaver Doesn\'t Save Settings" FAQ on weavertheme.com.', 'weaver-xtreme'));
    }
    if (!current_user_can('edit_theme_options')) {
        wp_die(__('You do not have sufficient permissions to manage options for this site.', 'weaver-xtreme'));
    }
    $wvr_last = '';
    foreach ($in as $key => $value) {
        switch ($key) {
            /* -------- integer -------- */
            case 'excerpt_length':
                if (!empty($value) && (!is_numeric($value) || !is_int((int) $value))) {
                    $opt_id = str_replace('', '', $key);
                    $opt_id = str_replace('_', ' ', $opt_id);
                    $err_msg .= __('Option must be an integer value: ', 'weaver-xtreme') . '"' . $opt_id . '" = "' . $value . '".' . __(' Value has been cleared to blank value', 'weaver-xtreme') . '<br />';
                    $in[$key] = '';
                }
                break;
                /* ---------- text ----------- */
            /* ---------- text ----------- */
            case 'excerpt_more_msg':
            case 'header_maxwidth':
                if (!empty($value)) {
                    $in[$key] = weaverx_filter_textarea($value);
                }
                break;
            case 'themename':
                // can't be empty!
                if (empty($value)) {
                    $in[$key] = 'please-give-this-a-name';
                } else {
                    $in[$key] = weaverx_filter_textarea($value);
                }
                break;
                /* code */
            /* code */
            case 'copyright':
                // Alternate copyright
            // Alternate copyright
            case '_css_rows':
                if (!empty($value)) {
                    $in[$key] = weaverx_filter_code($value);
                }
                break;
            case '_perpagewidgets':
                // Add widget areas for per page - names must be lower case
                if (!empty($value)) {
                    $in[$key] = strtolower(str_ireplace(' ', '', weaverx_filter_code($value)));
                }
                break;
            case '_althead_opts':
            case 'head_opts':
                if (!empty($value)) {
                    $in[$key] = weaverx_filter_head($value);
                }
                break;
            case 'wvrx_css_saved':
                if (!empty($value)) {
                    $in[$key] = weaverx_filter_code($value);
                    //$in[$key] = wp_filter_post_kses( trim(stripslashes($value)) );
                }
                break;
                /* must not have <style .... </style> */
            /* must not have <style .... </style> */
            case 'add_css':
                // Add CSS Rules to Weaver Xtreme's style rules
                if (!empty($value)) {
                    $val = weaverx_filter_code($value);
                    $in[$key] = $val;
                    if (stripos($val, '<style') !== false || stripos($val, '</style') !== false || stripos($val, '<script') !== false || stripos($val, '</script') !== false) {
                        $err_msg .= __('&lt;style&gt; or &lt;script&gt; tags have been automatically stripped from your "Add CSS Rules"!', 'weaver-xtreme') . ' ' . __('Please correct your entry.', 'weaver-xtreme') . '<br />';
                        $in[$key] = wp_filter_post_kses(trim(stripslashes($val)));
                    }
                }
                break;
            case '_fonts_google':
                $in[$key] = $value;
                break;
            case 'last_option':
                // check for last_option...
                if (!empty($value)) {
                    $wvr_last = $value;
                }
                break;
            default:
                /* to here, then colors, _css, or checkbox/selectors */
                $keylen = strlen($key);
                if (strrpos($key, '_css') == $keylen - 4) {
                    // all _css settings
                    if (!empty($value)) {
                        $val = weaverx_filter_code($value);
                        if (stripos($val, '<style') !== false || stripos($val, '</style') !== false || stripos($val, '<script') !== false || stripos($val, '</script') !== false) {
                            $err_msg .= __('&lt;style&gt; or &lt;script&gt; tags have been automatically stripped from your CSS+ rules,', 'weaver-xtreme') . ' ' . __('Please correct your entry.', 'weaver-xtreme') . '<br />';
                            $val = wp_filter_post_kses(trim($val));
                        }
                        $in[$key] = $val;
                        if (strpos($val, '{') === false || strpos($val, '}') === false) {
                            $opt_id = str_replace('_css', '', $key);
                            // kill _css
                            $opt_id = str_replace('', '', $opt_id);
                            $opt_id = str_replace('_', ' ', $opt_id);
                            $err_msg .= __('CSS options must be enclosed in {}\'s: ', 'weaver-xtreme') . '"' . $opt_id . '" = "' . $value . '". ' . __('Please correct your entry.', 'weaver-xtreme') . '<br />';
                        }
                    }
                    break;
                }
                // _css
                if (strrpos($key, '_insert') == $keylen - 7) {
                    // all _insert settings
                    if (!empty($value)) {
                        $val = weaverx_filter_code($value);
                        $in[$key] = $val;
                    }
                    break;
                }
                // _insert
                if (strrpos($key, '_url') == $keylen - 4) {
                    // all _url settings
                    if (!empty($value)) {
                        $val = weaverx_filter_code($value);
                        // can't use esc_url because that forces a leading html{background-image: url(%template_directory%assets/images/addon_themes.png);}
                        $in[$key] = $val;
                    }
                    break;
                }
                // _insert
                if (strrpos($key, '_dec') == $keylen - 4) {
                    if (!empty($value) && !is_numeric($value)) {
                        $opt_id = str_replace('', '', $key);
                        $opt_id = str_replace('_dec', '', $opt_id);
                        $opt_id = str_replace('_', ' ', $opt_id);
                        $err_msg .= __('Option must be a numeric value: ', 'weaver-xtreme') . '"' . $opt_id . '" = "' . $value . '". ' . __('Value has been cleared to blank value.', 'weaver-xtreme') . '<br />';
                        $in[$key] = '';
                    }
                    break;
                }
                if (strrpos($key, '_int') == $keylen - 4 || strrpos($key, '_X') == $keylen - 2 || strrpos($key, '_Y') == $keylen - 2 || strrpos($key, '_L') == $keylen - 2 || strrpos($key, '_R') == $keylen - 2 || strrpos($key, '_T') == $keylen - 2 || strrpos($key, '_B') == $keylen - 2) {
                    if (!empty($value) && (!is_numeric($value) || !is_int((int) $value))) {
                        $opt_id = str_replace('', '', $key);
                        $opt_id = str_replace('_int', '', $opt_id);
                        $opt_id = str_replace('_', ' ', $opt_id);
                        $err_msg .= __('Option must be a numeric value: ', 'weaver-xtreme') . '"' . $opt_id . '" = "' . $value . '". ' . __('Value has been cleared to blank value.', 'weaver-xtreme') . '<br />';
                        $in[$key] = '';
                    }
                    break;
                }
                if (strrpos($key, 'color') == $keylen - 5) {
                    // _bgcolor and _color (order here important - after _css, etc.)
                    if (!empty($value)) {
                        $val = trim(weaverx_filter_code($value));
                        if (preg_match('/^#?+[0-9a-f]{3}(?:[0-9a-f]{3})?$/i', $val)) {
                            // hex value
                            $val = strtoupper($val);
                            // force hex values to upper case, just to be tidy
                            if ($val[0] != '#') {
                                $val = '#' . $val;
                            }
                            $in[$key] = $val;
                        } else {
                            if (preg_match("/^([a-zA-Z])+\$/i", $val)) {
                                // name - all letters
                                $in[$key] = $val;
                            } else {
                                // only legal things left are rgb and rgba
                                $isrgb = strpos($val, 'rgb');
                                $ishsa = strpos($val, 'hsl');
                                if ($isrgb === false && $ishsa === false) {
                                    if ($value == ' ') {
                                        $in[$key] = '';
                                    } else {
                                        $err_msg .= __('Color must be a valid # hex value, rgb value, or color name (a-z): ', 'weaver-xtreme') . '"' . $key . '" = "' . bin2hex($value) . '". ' . __('Value has been cleared to blank value.', 'weaver-xtreme') . '<br />';
                                    }
                                    $in[$key] = '';
                                } else {
                                    $in[$key] = $val;
                                }
                            }
                        }
                    }
                    break;
                }
                if (!empty($value) && is_string($value) && !is_numeric($value)) {
                    $in[$key] = weaverx_filter_textarea($value);
                }
                break;
        }
    }
    if (false && $wvr_last != 'Weaver Xtreme') {
        $err_msg .= __('Warning - your host may be configured to limit how many input var options you are allowed to pass via PHP.
Unfortunately, this means your settings may not be saved correctly. See the "Weaver II Doesn\'t Save Settings" FAQ on weavertheme.com.<br />', 'weaver-xtreme');
    }
    if (!empty($err_msg)) {
        add_settings_error('weaverx_settings', 'settings_error', $err_msg, 'error');
    } else {
        add_settings_error('weaverx_settings', 'settings_updated', __('Weaver Xtreme Settings Saved.', 'weaver-xtreme'), 'updated');
    }
    return $in;
}
function wvrx_ts_save_post_fields($post_id)
{
    $default_post_fields = array('_pp_category', '_pp_tag', '_pp_onepost', '_pp_orderby', '_pp_sort_order', '_pp_author', '_pp_posts_per_page', '_pp_primary-widget-area', '_pp_secondary-widget-area', '_pp_sidebar_width', '_pp_top-widget-area', '_pp_bottom-widget-area', '_pp_sitewide-top-widget-area', '_pp_sitewide-bottom-widget-area', '_pp_post_type', '_pp_hide_page_title', '_pp_hide_site_title', '_pp_hide_menus', '_pp_hide_header_image', '_pp_hide_footer', '_pp_hide_header', '_pp_hide_sticky', '_pp_force_post_full', '_pp_force_post_excerpt', '_pp_show_post_avatar', '_pp_bodyclass', '_pp_fi_link', '_pp_fi_location', '_pp_post_fi_location', '_pp_post_styles', '_pp_hide_top_post_meta', '_pp_hide_bottom_post_meta', '_pp_stay_on_page', '_pp_hide_on_menu', '_pp_show_featured_img', '_pp_hide_infotop', '_pp_hide_infobottom', '_pp_hide_visual_editor', '_pp_masonry_span2', '_show_post_bubble', '_pp_hide_post_title', '_pp_post_add_link', '_pp_hide_post_format_label', '_pp_page_layout', '_pp_wvrx_pwp_type', '_pp_wvrx_pwp_cols', '_pp_post_filter', '_pp_header-widget-area', '_pp_footer-widget-area', '_pp_hide_page_infobar', '_pp_hide_n_posts', '_pp_fullposts', '_pp_pwp_masonry', '_pp_pwp_compact', '_pp_pwp_compact_posts', '_primary-widget-area', '_secondary-widget-area', '_header-widget-area', '_footer-widget-area', '_sitewide-top-widget-area', '_sitewide-bottom-widget-area', '_page-top-widget-area', '_page-bottom-widget-area', '_pp_full_browser_height', '_pp_page_cols', '_pp_bgcolor', '_pp_color', '_pp_bg_fullwidth', '_pp_lr_padding', '_pp_tb_padding', '_pp_margin', '_pp_post_class', '_pp_bgimg', '_pp_mobile_bgimg', '_pp_parallax_height', '_pp_use_parallax', '_pp_parallax_not_wide', '_pp_footer_add_class', '_pp_container_add_class', '_pp_content_add_class', '_pp_post_add_class', '_pp_infobar_add_class', '_pp_wrapper_add_class', '_pp_header_add_class', '_pp_header_image_html_text');
    if (weaverx_allow_multisite()) {
        array_push($default_post_fields, '_pp_raw_html');
    }
    $all_post_fields = $default_post_fields;
    if (isset($_POST['post_meta'])) {
        foreach ($all_post_fields as $post_field) {
            if (isset($_POST[$post_field])) {
                $data = $_POST[$post_field];
                if ($post_field != '_pp_post_styles') {
                    $data = stripslashes($data);
                }
                // passed via post, so strip slashes
                if (get_post_meta($post_id, $post_field) == '') {
                    add_post_meta($post_id, $post_field, weaverx_filter_textarea($data), true);
                } else {
                    if ($data != get_post_meta($post_id, $post_field, true)) {
                        update_post_meta($post_id, $post_field, weaverx_filter_textarea($data));
                    } else {
                        if ($data == '') {
                            delete_post_meta($post_id, $post_field, get_post_meta($post_id, $post_field, true));
                        }
                    }
                }
            } else {
                delete_post_meta($post_id, $post_field, get_post_meta($post_id, $post_field, true));
            }
        }
    }
}
 private static function _load_theme($wp_customize)
 {
     // Make sure we have a valid nonce.
     if (!wp_verify_nonce($_REQUEST['wvrx-upload-subtheme'], 'wvrx_select_subtheme')) {
         unset($_POST['wvrx-upload-subtheme']);
         unset($_REQUEST['wvrx-upload-subtheme']);
         weaverx_alert('invalid nonce upload');
         return;
     }
     unset($_POST['wvrx-upload-subtheme']);
     unset($_REQUEST['wvrx-upload-subtheme']);
     if (!isset($_POST['subtheme_picked'])) {
         weaverx_alert('Please select a subtheme to upload.');
         return;
     }
     $theme = weaverx_filter_textarea($_POST['subtheme_picked']);
     $filename = get_template_directory() . '/subthemes/' . $theme . '.wxt';
     if (!weaverx_f_exists($filename)) {
         weaverx_alert(__('Sorry, unable to upload the subtheme.', 'weaver-xtreme'));
         return false;
     }
     $contents = weaverx_f_get_contents($filename);
     // use either real (pro) or file (standard) version of function
     if (empty($contents)) {
         return false;
     }
     // Setup global vars.
     global $wp_customize;
     // upload theme from users computer
     // they've supplied and uploaded a file
     $ok = true;
     // no errors so far
     if (!self::reset_options($contents)) {
         return;
     }
     wp_redirect(home_url('/wp-admin/customize.php?return=%2Fwp-admin%2Fthemes.php%3Fpage%3DWeaverX'));
     //weaverx_alert( __('Weaver Xtreme uploaded subtheme ', 'weaver-xtreme' /*adm*/) . ucwords(str_replace('-',' ',$theme) ) );
 }
function weaverx_process_options_themes()
{
    if (weaverx_submitted('set_subtheme')) {
        // invoked from Weaver Xtreme Subthemes tab (this file)
        if (isset($_POST['theme_picked'])) {
            $theme = weaverx_filter_textarea($_POST['theme_picked']);
            if (weaverx_activate_subtheme($theme)) {
                weaverx_save_msg(__("Subtheme Selected: ", 'weaver-xtreme') . $theme);
            } else {
                weaverx_save_msg(__("Invalid Subtheme file detected. Your installation of Weaver Xtreme may be broken.", 'weaver-xtreme'));
            }
        } else {
            weaverx_save_msg(__("Please select a subtheme.", 'weaver-xtreme'));
        }
        return true;
    }
    if (weaverx_submitted('save_mytheme')) {
        // invoked from Save/Restore tab
        weaverx_save_msg(__("Current settings saved in WordPress database.", 'weaver-xtreme'));
        global $weaverx_opts_cache;
        if (!$weaverx_opts_cache) {
            $weaverx_opts_cache = get_option(apply_filters('weaverx_options', 'weaverx_settings'), array());
        }
        if (current_user_can('manage_options')) {
            $compressed = array_filter($weaverx_opts_cache, 'strlen');
            // filter out all null options (strlen == 0)
            update_option(apply_filters('weaverx_options', 'weaverx_settings_backup'), $compressed);
            if (apply_filters('weaverx_xtra_type', '+backup') != 'inactive') {
                delete_option('weaverx_plus_backup');
            }
        }
        return true;
    }
    if (weaverx_submitted('restore_mytheme')) {
        // invoked from Save/Restore tab
        global $weaverx_opts_cache;
        $saved = get_option(apply_filters('weaverx_options', 'weaverx_settings_backup'), array());
        if (!empty($saved)) {
            $weaverx_opts_cache = $saved;
            weaverx_wpupdate_option('weaverx_settings', $weaverx_opts_cache);
        }
        weaverx_save_msg(__("Current settings restored from WordPress database.", 'weaver-xtreme'));
        return true;
    }
    if (weaverx_submitted('hide_thumbs')) {
        $hide = weaverx_getopt('_hide_theme_thumbs');
        weaverx_setopt('_hide_theme_thumbs', !$hide);
        return true;
    }
    // save/restore options
    if (weaverx_submitted('weaverx_clear_messages')) {
        return true;
    }
    if (weaverx_submitted('reset_weaverx')) {
        if (!current_user_can('manage_options')) {
            wp_die(__('You do not have the capability to do that.', 'weaver-xtreme'));
        }
        // delete everything!
        weaverx_save_msg(__('All Weaver Xtreme settings have been reset to the defaults.', 'weaver-xtreme'));
        delete_option(apply_filters('weaverx_options', 'weaverx_settings'));
        global $weaverx_opts_cache;
        $weaverx_opts_cache = false;
        // clear the cache
        weaverx_init_opts('reset_weaverx');
        delete_option(apply_filters('weaverx_options', 'weaverx_settings_backup'));
        do_action('weaverxplus_admin', 'reset_weaverxplus');
        update_user_meta(get_current_user_id(), 'tgmpa_dismissed_notice', 0);
        // reset the dismiss on the plugin loader
        return true;
    }
    if (weaverx_submitted('uploadtheme') && function_exists('weaverx_loadtheme')) {
        weaverx_loadtheme();
        return true;
    }
    return false;
}