Exemplo n.º 1
0
/**
 * @since 3.4
 */
function qtranxf_load_config_all($json_files, $custom_config)
{
    global $q_config;
    $nerr = isset($q_config['url_info']['errors']) ? count($q_config['url_info']['errors']) : 0;
    $cfg = qtranxf_load_config_files($json_files);
    $cfg = qtranxf_merge_config($cfg, $custom_config);
    $cfg = qtranxf_standardize_i18n_config($cfg);
    // store the errors permanently until an admin fixes them,
    // otherwise admin may not realise that not all configurations are loaded.
    if (!empty($q_config['url_info']['errors']) && $nerr != count($q_config['url_info']['errors'])) {
        //new errors occurred
        $errs = array_slice($q_config['url_info']['errors'], $nerr);
        update_option('qtranslate_config_errors', $errs);
    } else {
        delete_option('qtranslate_config_errors');
    }
    return $cfg;
}
function qtranxf_updateSettings()
{
    global $qtranslate_options, $q_config;
    $errors =& $q_config['url_info']['errors'];
    // update front settings
    /**
     * Opportunity to prepare special custom settings update on sub-plugins
     */
    do_action('qtranslate_update_settings_pre');
    // special cases handling for front options
    qtranxf_updateSetting('default_language', QTX_LANGUAGE);
    //enabled_languages are not changed at this place
    qtranxf_updateSettingFlagLocation('flag_location');
    qtranxf_updateSettingIgnoreFileTypes('ignore_file_types');
    $_POST['language_name_case'] = isset($_POST['camel_case']) ? '0' : '1';
    // special cases handling for front options - end
    foreach ($qtranslate_options['front']['int'] as $nm => $def) {
        qtranxf_updateSetting($nm, QTX_INTEGER, $def);
    }
    qtranxf_updateSettingDateI18N('date_i18n');
    foreach ($qtranslate_options['front']['bool'] as $nm => $def) {
        qtranxf_updateSetting($nm, QTX_BOOLEAN, $def);
    }
    qtranxf_updateSetting('qtrans_compatibility', QTX_BOOLEAN);
    foreach ($qtranslate_options['front']['str'] as $nm => $def) {
        qtranxf_updateSetting($nm, QTX_STRING, $def);
    }
    foreach ($qtranslate_options['front']['text'] as $nm => $def) {
        qtranxf_updateSetting($nm, QTX_TEXT, $def);
    }
    foreach ($qtranslate_options['front']['array'] as $nm => $def) {
        qtranxf_updateSetting($nm, QTX_ARRAY, $def);
    }
    qtranxf_updateSetting('filter_options', QTX_ARRAY);
    switch ($q_config['url_mode']) {
        case QTX_URL_DOMAIN:
        case QTX_URL_DOMAINS:
            $q_config['disable_client_cookies'] = true;
            break;
        case QTX_URL_QUERY:
        case QTX_URL_PATH:
        default:
            qtranxf_updateSetting('disable_client_cookies', QTX_BOOLEAN);
            break;
    }
    $domains = isset($q_config['domains']) ? $q_config['domains'] : array();
    foreach ($q_config['enabled_languages'] as $lang) {
        $id = 'language_domain_' . $lang;
        if (!isset($_POST[$id])) {
            continue;
        }
        $domain = preg_replace('#^/*#', '', untrailingslashit(trim($_POST[$id])));
        //qtranxf_dbg_log('qtranxf_updateSettings: domain['.$lang.']: ',$domain);
        $domains[$lang] = $domain;
    }
    if (!empty($domains) && (!isset($q_config['domains']) || !qtranxf_array_compare($q_config['domains'], $domains))) {
        $q_config['domains'] = $domains;
        qtranxf_update_option('domains');
    }
    // update admin settings
    //special cases handling for admin options
    if (isset($_POST['json_config_files'])) {
        //verify that files are loadable
        $json_config_files_post = sanitize_text_field(stripslashes($_POST['json_config_files']));
        $json_files = preg_split('/[\\s,]+/', $json_config_files_post, null, PREG_SPLIT_NO_EMPTY);
        if (empty($json_files)) {
            $_POST['config_files'] = array();
            unset($_POST['json_config_files']);
        } else {
            $nerr = isset($q_config['url_info']['errors']) ? count($q_config['url_info']['errors']) : 0;
            $cfg = qtranxf_load_config_files($json_files);
            if (!empty($q_config['url_info']['errors']) && $nerr != count($q_config['url_info']['errors'])) {
                //new errors occurred
                $_POST['json_config_files'] = implode(PHP_EOL, $json_files);
                remove_action('admin_notices', 'qtranxf_admin_notices_errors');
                if ($json_files == $q_config['config_files']) {
                    //option is not changed, apparently something happened to files, then make the error permanent
                    update_option('qtranslate_config_errors', array_slice($q_config['url_info']['errors'], $nerr));
                }
            } else {
                $_POST['config_files'] = implode(PHP_EOL, $json_files);
                unset($_POST['json_config_files']);
                delete_option('qtranslate_config_errors');
            }
        }
    }
    if (isset($_POST['json_custom_i18n_config'])) {
        //verify that JSON string can be parsed
        $cfg_json = sanitize_text_field(stripslashes($_POST['json_custom_i18n_config']));
        if (empty($cfg_json)) {
            $_POST['custom_i18n_config'] = array();
        } else {
            $cfg = json_decode($cfg_json, true);
            if ($cfg) {
                $_POST['custom_i18n_config'] = $cfg;
                unset($_POST['json_custom_i18n_config']);
            } else {
                $_POST['json_custom_i18n_config'] = stripslashes($_POST['json_custom_i18n_config']);
                $errors[] = sprintf(__('Cannot parse JSON code in the field "%s".', 'qtranslate'), __('Custom Configuration', 'qtranslate'));
            }
        }
    }
    if ($_POST['highlight_mode'] != QTX_HIGHLIGHT_MODE_CUSTOM_CSS) {
        $_POST['highlight_mode_custom_css'] = '';
    }
    if ($_POST['lsb_style'] != $q_config['lsb_style']) {
        $_POST['lsb_style_wrap_class'] = '';
        $_POST['lsb_style_active_class'] = '';
    }
    qtranxf_parse_post_type_excluded();
    //special cases handling for admin options - end
    do_action('qtranslate_update_settings_admin');
    foreach ($qtranslate_options['admin']['int'] as $nm => $def) {
        qtranxf_updateSetting($nm, QTX_INTEGER, $def);
    }
    foreach ($qtranslate_options['admin']['bool'] as $nm => $def) {
        qtranxf_updateSetting($nm, QTX_BOOLEAN, $def);
    }
    foreach ($qtranslate_options['admin']['str'] as $nm => $def) {
        qtranxf_updateSetting($nm, QTX_STRING, $def);
    }
    foreach ($qtranslate_options['admin']['text'] as $nm => $def) {
        qtranxf_updateSetting($nm, QTX_TEXT, $def);
    }
    foreach ($qtranslate_options['admin']['array'] as $nm => $def) {
        qtranxf_updateSetting($nm, QTX_ARRAY, $def);
    }
    if (empty($_POST['json_config_files'])) {
        //only update if config files parsed successfully
        qtranxf_update_i18n_config();
    }
    $q_config['i18n-cache'] = array();
    //clear i18n-config cache
    /**
     * Opportunity to update special custom settings on sub-plugins
     */
    do_action('qtranslate_update_settings');
}