function weaver_save_current_css()
{
    // write the current generated CSS to a file - called only from Weaver Admin
    if (!weaver_f_file_access_available()) {
        weaver_f_file_access_fail('Limited file access. Probably running with reduced functionality.');
        return '';
    }
    $save_dir = weaver_f_uploads_base_dir() . 'weaver-subthemes';
    $save_url = weaver_f_uploads_base_url() . 'weaver-subthemes';
    $usename = 'style-weaver.css';
    $ttw_theme_dir_exists = weaver_f_mkdir($save_dir);
    if (!$ttw_theme_dir_exists) {
        weaver_f_file_access_fail('Unable to create directory. Probably a file system permission problem. Directory' . $save_dir);
    }
    $ttw_theme_dir_writable = $ttw_theme_dir_exists;
    if (!weaver_f_is_writable($save_dir)) {
        weaver_f_file_access_fail('Directory not writable. Probably a file system permission problem. Directory: ' . $save_dir);
        $ttw_theme_dir_writable = false;
    }
    $filename = $save_dir . '/' . $usename;
    // we will add txt
    if (!$ttw_theme_dir_writable || !$ttw_theme_dir_exists || !($handle = weaver_f_open($filename, 'w'))) {
        weaver_f_file_access_fail('Unable to create file. Probably a file system permission problem. File: ' . $filename);
        return '';
    }
    weaver_f_write($handle, sprintf("/* WARNING: Do not edit this file. It is dynamically generated. Any edits you make will be overwritten. */\n/* This file generated using %s %s subtheme: %s */\n", WEAVER_THEMENAME, WEAVER_VERSION, weaver_getopt('ttw_subtheme')));
    weaver_output_style($handle);
    if (!weaver_f_close($handle)) {
        weaver_f_file_access_fail('Unable to create file. Probably a file system permission problem. File: ' . $filename);
        return '';
    }
    require_once 'wvr-editorcss.php';
    weaver_save_editor_css($save_dir);
    return $save_url . '/' . $usename;
}
function weaver_save_editor_css($mce_css_dir)
{
    // create a new editor-style.css file (sorry, no rtl) in the upload directory so will be multi-site compatible
    $base_style = get_template_directory() . '/editor-style.css';
    /* the default editor css file */
    if (!weaver_f_file_access_available() || !weaver_f_is_writable($mce_css_dir)) {
        return false;
        // just bail and let the default editor-style.css be used
    }
    /* delete current weaver-editor-style.css
          Copy default editor style to editor-style.css
          Add Weaver overrides to that file
          Close
       */
    if (!weaver_f_exists($base_style)) {
        return false;
    }
    $contents = weaver_f_get_contents($base_style);
    // get the core part
    $filename = trailingslashit($mce_css_dir) . 'weaver-editor-style.css';
    if (!($handle = weaver_f_open($filename, 'w'))) {
        // can't write - blow it off
        return false;
    }
    weaver_f_write($handle, $contents);
    // save new editor style css file
    weaver_f_write($handle, sprintf("\n/* Subtheme %s specific editor styling */\n", weaver_getopt('ttw_subtheme')));
    weaver_output_editor_style($handle);
    weaver_f_write($handle, sprintf("/* WEAVER WARNING: Do not edit this file. It is dynamically generated. Any edits you make will be overwritten. */\n/* This file generated using %s %s subtheme: %s */\n", WEAVER_THEMENAME, WEAVER_VERSION, weaver_getopt('ttw_subtheme')));
    weaver_f_close($handle);
    return;
}
function weaver_write_backup($savefile, $is_theme = true)
{
    /*	write the current settings to a file, return true or false
    	$savefile is a base-name - no directory, no extension
        */
    global $weaver_opts_cache, $weaver_main_opts_list, $weaver_advanced_opts_list;
    $nosave = array('ftp_hostname' => true, 'ftp_username' => true, 'ftp_password' => true);
    // don't write these
    if (!weaver_f_file_access_available()) {
        weaver_f_file_access_fail('Limited file access. Probably running with reduced functionality.');
        return '';
    }
    weaver_save_opts('weaver_write_backup', true);
    // let's save it in case the user forgot (saves everything)
    $wpdir = wp_upload_dir();
    // get the upload directory
    $save_dir = weaver_f_uploads_base_dir() . 'weaver-subthemes';
    $save_url = weaver_f_uploads_base_url() . 'weaver-subthemes';
    if ($is_theme) {
        $ext = '.wvr';
    } else {
        $ext = '.wvb';
    }
    $usename = strtolower(sanitize_file_name($savefile));
    $usename = str_replace($ext, '', $usename);
    if (strlen($usename) < 1) {
        return '';
    }
    $usename = $usename . $ext;
    $ttw_theme_dir_exists = weaver_f_mkdir($save_dir);
    $ttw_theme_dir_writable = $ttw_theme_dir_exists;
    if (!weaver_f_is_writable($save_dir)) {
        $ttw_theme_dir_writable = false;
    }
    $filename = trailingslashit($save_dir) . $usename;
    if (!$ttw_theme_dir_writable || !$ttw_theme_dir_exists || !($handle = weaver_f_open($filename, 'w'))) {
        weaver_f_file_access_fail('Unable to create file. Probably a file system permission problem. File: ' . $filename);
        return '';
    }
    /* file open, ready to write - so let's write something - either a backup or a theme */
    if (!$is_theme) {
        weaver_f_write($handle, "WVB-V02.00");
        /* Save theme settings: 10 byte header */
        $theme_opts = array();
        foreach ($weaver_opts_cache as $key => $value) {
            if ($value != '' && !isset($nosave[$key])) {
                $theme_opts[$key] = $value;
            }
        }
        $tosave = serialize($theme_opts);
        /* serialize full set of options right now */
    } else {
        /* save only theme settings */
        weaver_f_write($handle, "TTW-V01.10");
        /* Save theme settings: 10 byte header */
        global $weaver_dev;
        if ($weaver_dev) {
            $theme_name = weaver_getopt('ttw_themename');
            weaver_setopt('ttw_subtheme', $theme_name);
        }
        $theme_opts = array();
        /* now can set the new values from $restore */
        foreach ($weaver_opts_cache as $key => $value) {
            if ($value != '' && !isset($nosave[$key])) {
                if (isset($weaver_main_opts_list[$key]) && !$weaver_main_opts_list[$key]) {
                    $theme_opts[$key] = $value;
                } else {
                    if (isset($weaver_advanced_opts_list[$key]) && !$weaver_advanced_opts_list[$key]) {
                        $theme_opts[$key] = $value;
                    }
                }
            }
        }
        $tosave = serialize($theme_opts);
    }
    weaver_f_write($handle, $tosave);
    // write all Weaver settings to user save file
    weaver_f_close($handle);
    return trailingslashit($save_url) . $usename;
}