$lng) {
if($lng != $original_lang) continue;
$q_config['enabled_languages'][$k] = $lng;
break;
}
}
if($original_lang==$q_config['default_language']){
// was default, so set modified the default
$q_config['default_language'] = $lang;
}
if($q_config['language'] == $original_lang){
qtranxf_setLanguageAdmin($lang);
}
}
}
}
$lang_props['language_name'] = sanitize_text_field($_POST['language_name']);
$lang_props['flag'] = sanitize_text_field($_POST['language_flag']);
$lang_props['locale'] = sanitize_text_field($_POST['language_locale']);
$lang_props['locale_html'] = sanitize_text_field($_POST['language_locale_html']);
$lang_props['date_format'] = sanitize_text_field(stripslashes($_POST['language_date_format']));
$lang_props['time_format'] = sanitize_text_field(stripslashes($_POST['language_time_format']));
$lang_props['not_available'] = wp_kses_post(stripslashes($_POST['language_na_message']));//allow valid HTML
if(empty($errors)) {
// everything is fine, insert language
foreach($lang_props as $k => $v){
$q_config[$k][$lang] = $v;
}
qtranxf_copyLanguage($langs, $q_config, $lang);
qtranxf_save_languages($langs);
qtranxf_enableLanguage($lang);
//qtranxf_update_config_header_css();
$original_lang = $lang;
$s = 'Custom Language Properties Used';
$b = 'I use the following language properties for '.$lang.':'.PHP_EOL .PHP_EOL;
foreach($lang_props as $k => $v){
$b .= $k.': '.$v.PHP_EOL;
}
$b .= PHP_EOL .'which should probably be used as a default preset on the plugin.'.PHP_EOL;
$b .= PHP_EOL .'Thank you very much!'.PHP_EOL;
$u = 'qtranslateteam@gmail.com?subject='.rawurlencode($s).'&body='.rawurlencode($b);
$messages[] = sprintf(__('The new language properties have been saved. If you think these properties should be the preset default, please %ssend email%s to the development team.', 'qtranslate'),'','');
}
if(!empty($errors)||isset($_GET['edit'])) {
// get old values in the form
$language_code = $lang;
}else{
//reset form for new language
$lang_props = array();
$original_lang = '';
}
}
elseif(isset($_GET['convert'])){
// update language tags
global $wpdb;
$wpdb->show_errors(); @set_time_limit(0);
$cnt = 0;
//this will not work correctly if set of languages is different
foreach($q_config['enabled_languages'] as $lang) {
$cnt +=
$wpdb->query('UPDATE '.$wpdb->posts.' set post_title = REPLACE(post_title, "[lang_'.$lang.']","[:'.$lang.']"), post_content = REPLACE(post_content, "[lang_'.$lang.']","[:'.$lang.']")');
$wpdb->query('UPDATE '.$wpdb->posts.' set post_title = REPLACE(post_title, "[/lang_'.$lang.']","[:]"), post_content = REPLACE(post_content, "[/lang_'.$lang.']","[:]")');
}
if($cnt > 0){
$messages[] = sprintf(__('%d database entries have been converted.', 'qtranslate'), $cnt);
}else{
$messages[] = __('No database entry has been affected while processing the conversion request.', 'qtranslate');
}
}
elseif(isset($_GET['markdefault'])){
// update language tags
global $wpdb;
$wpdb->show_errors(); @set_time_limit(0);
$result = $wpdb->get_results('SELECT ID, post_content, post_title, post_excerpt, post_type FROM '.$wpdb->posts.' WHERE post_status = \'publish\' AND (post_type = \'post\' OR post_type = \'page\') AND NOT (post_content LIKE \'%%\' OR post_title LIKE \'%%\' OR post_content LIKE \'%![:!]%\' ESCAPE \'!\' OR post_title LIKE \'%![:!]%\' ESCAPE \'!\')');
if(is_array($result)){
$cnt_page = 0;
$cnt_post = 0;
foreach($result as $post) {
$title=qtranxf_mark_default($post->post_title);
$content=qtranxf_mark_default($post->post_content);
$excerpt=qtranxf_mark_default($post->post_excerpt);
if( $title==$post->post_title && $content==$post->post_content && $excerpt==$post->post_excerpt ) continue;
switch($post->post_type){
case 'post': ++$cnt_post; break;
case 'page': ++$cnt_page; break;
}
//qtranxf_dbg_log('markdefault:'. PHP_EOL .'title old: '.$post->post_title. PHP_EOL .'title new: '.$title. PHP_EOL .'content old: '.$post->post_content. PHP_EOL .'content new: '.$content); continue;
$wpdb->query($wpdb->prepare('UPDATE '.$wpdb->posts.' set post_content = %s, post_title = %s, post_excerpt = %s WHERE ID = %d', $content, $title, $excerpt, $post->ID));
}
if($cnt_page > 0) $messages[] = sprintf(__('%d pages have been processed to set the default language.', 'qtranslate'), $cnt_page);
else $messages[] = __('No initially untranslated pages found to set the default language', 'qtranslate');
if($cnt_post > 0) $messages[] = sprintf(__('%d posts have been processed to set the default language.', 'qtranslate'), $cnt_post);
else $messages[] = __('No initially untranslated posts found to set the default language.', 'qtranslate');
$messages[] = sprintf(__('Post types other than "post" or "page", as well as unpublished entries, will have to be adjusted manually as needed, since there is no common way to automate setting the default language otherwise. It can be done with a custom script though. You may request a %spaid support%s for this.', 'qtranslate'), '', '');
}
}
elseif(isset($_GET['edit'])){
$lang = sanitize_text_field($_GET['edit']);
$lang = preg_replace('/[^a-z]/i', '', $lang);
if(strlen($lang) != 2){
$errors[] = __('Language Code has to be 2 characters long!', 'qtranslate');
}
$original_lang = $lang;
$language_code = $lang;
//$langs = $q_config;
$langs = array(); qtranxf_languages_configured($langs);
$lang_props['language_name'] = isset($langs['language_name'][$lang])?$langs['language_name'][$lang]:'';
$lang_props['locale'] = isset($langs['locale'][$lang])?$langs['locale'][$lang]:'';
$lang_props['locale_html'] = isset($langs['locale_html'][$lang])?$langs['locale_html'][$lang]:'';
$lang_props['date_format'] = isset($langs['date_format'][$lang])?$langs['date_format'][$lang]:'';
$lang_props['time_format'] = isset($langs['time_format'][$lang])?$langs['time_format'][$lang]:'';
$lang_props['not_available'] = isset($langs['not_available'][$lang])?$langs['not_available'][$lang]:'';
$lang_props['flag'] = isset($langs['flag'][$lang])?$langs['flag'][$lang]:'';
}
elseif(isset($_GET['delete'])){
$lang = sanitize_text_field($_GET['delete']);
// validate delete (protect code)
//if($q_config['default_language']==$lang) $errors[] = 'Cannot delete Default Language!';
//if(!isset($q_config['language_name'][$lang])||strtolower($lang)=='code') $errors[] = __('No such language!', 'qtranslate');
//if(empty($errors)) {
// // everything seems fine, delete language
$err = qtranxf_deleteLanguage($lang);
if(!empty($err)) $errors[] = $err;
//}
}
elseif(isset($_GET['enable'])){
$lang = sanitize_text_field($_GET['enable']);
// enable validate
if(!qtranxf_enableLanguage($lang)) {
$errors[] = __('Language is already enabled or invalid!', 'qtranslate');
}
}
elseif(isset($_GET['disable'])){
$lang = sanitize_text_field($_GET['disable']);
// enable validate
if($lang==$q_config['default_language'])
$errors[] = __('Cannot disable Default Language!', 'qtranslate');
if(!qtranxf_isEnabled($lang))
if(!isset($q_config['language_name'][$lang]))
$errors[] = __('No such language!', 'qtranslate');
// everything seems fine, disable language
if(empty($errors) && !qtranxf_disableLanguage($lang)) {
$errors[] = __('Language is already disabled!', 'qtranslate');
}
}
elseif(isset($_GET['moveup'])){
$lang = sanitize_text_field($_GET['moveup']);
$languages = qtranxf_getSortedLanguages();
$msg = __('No such language!', 'qtranslate');
foreach($languages as $key => $language) {
if($language!=$lang) continue;
if($key==0) {
$msg = __('Language is already first!', 'qtranslate');
break;
}
$languages[$key] = $languages[$key-1];
$languages[$key-1] = $language;
$q_config['enabled_languages'] = $languages;
$msg = __('New order saved.', 'qtranslate');
qtranxf_update_config_header_css();
break;
}
$messages[] = $msg;
}
elseif(isset($_GET['movedown'])){
$lang = sanitize_text_field($_GET['movedown']);
$languages = qtranxf_getSortedLanguages();
$msg = __('No such language!', 'qtranslate');
foreach($languages as $key => $language) {
if($language!=$lang) continue;
if($key==sizeof($languages)-1) {
$msg = __('Language is already last!', 'qtranslate');
break;
}
$languages[$key] = $languages[$key+1];
$languages[$key+1] = $language;
$q_config['enabled_languages'] = $languages;
$msg = __('New order saved.', 'qtranslate');
qtranxf_update_config_header_css();
break;
}
$messages[] = $msg;
}
do_action('qtranslate_editConfig');
$everything_fine = ((isset($_POST['submit'])||isset($_GET['delete'])||isset($_GET['enable'])||isset($_GET['disable'])||isset($_GET['moveup'])||isset($_GET['movedown']))&&empty($errors));
if($everything_fine) {
// settings might have changed, so save
qtranxf_saveConfig();
if(empty($messages)) {
$messages[] = __('Options saved.', 'qtranslate');
}
}
if($q_config['auto_update_mo']) {
if(!is_dir(WP_LANG_DIR) || !$ll = @fopen(trailingslashit(WP_LANG_DIR).'qtranslate.test','a')) {
$errors[] = sprintf(__('Could not write to "%s", Gettext Databases could not be downloaded!', 'qtranslate'), WP_LANG_DIR);
} else {
@fclose($ll);
@unlink(trailingslashit(WP_LANG_DIR).'qtranslate.test');
}
}
}
function qtranxf_resetConfig(){
global $qtranslate_options;
if(!current_user_can('manage_options')) return;
if(isset($_POST['qtranslate_reset_admin_notices'])){
delete_option('qtranslate_admin_notices');
qtranxf_add_message(__('Admin notices have been reset. You will see all applicable notices on admin pages and may dismiss them again.', 'qtranslate'));
}
if( !isset($_POST['qtranslate_reset']) || !isset($_POST['qtranslate_reset2']) )
return;
// reset all settings
foreach($qtranslate_options['front'] as $ops){ foreach($ops as $nm => $def){ delete_option('qtranslate_'.$nm); } }
foreach($qtranslate_options['admin'] as $ops){ foreach($ops as $nm => $def){ delete_option('qtranslate_'.$nm); } }
foreach($qtranslate_options['default_value'] as $nm => $def){ delete_option('qtranslate_'.$nm); }
foreach($qtranslate_options['languages'] as $nm => $opn){ delete_option($opn); }
// internal private options not loaded by default
delete_option('qtranslate_next_update_mo');
delete_option('qtranslate_next_thanks');
// obsolete options
delete_option('qtranslate_custom_pages');
delete_option('qtranslate_plugin_js_composer_off');
delete_option('qtranslate_widget_css');
delete_option('qtranslate_version');
delete_option('qtranslate_disable_header_css');
if(isset($_POST['qtranslate_reset3'])) {
delete_option('qtranslate_term_name');
if(isset($_POST['qtranslate_reset4'])){//not implemented yet
delete_option('qtranslate_version_previous');
//and delete translations in posts
}
}
remove_filter('locale', 'qtranxf_localeForCurrentLanguage',99);
qtranxf_reloadConfig();
add_filter('locale', 'qtranxf_localeForCurrentLanguage',99);
}
add_action('qtranslate_saveConfig','qtranxf_resetConfig',20);
function qtranxf_update_option( $nm, $default_value=null ) {
global $q_config;
if( !isset($q_config[$nm]) || ( !is_integer($q_config[$nm]) && empty($q_config[$nm]) ) ){
delete_option('qtranslate_'.$nm);
return;
}
if(!is_null($default_value)){
if(is_string($default_value)){
if(function_exists($default_value)){
$default_value = call_user_func($default_value);
}elseif(is_array($q_config[$nm])){
$default_value = preg_split('/[\s,]+/',$default_value,null,PREG_SPLIT_NO_EMPTY);
}
}
if( $default_value===$q_config[$nm] ){
delete_option('qtranslate_'.$nm);
return;
}
}
update_option('qtranslate_'.$nm, $q_config[$nm]);
}
function qtranxf_update_option_bool( $nm, $default_value=null ) {
global $q_config, $qtranslate_options;
if( !isset($q_config[$nm]) ){
delete_option('qtranslate_'.$nm);
return;
}
if(is_null($default_value)){
if(isset($qtranslate_options['default_value'][$nm])){
$default_value = $qtranslate_options['default_value'][$nm];
}elseif(isset($qtranslate_options['front']['bool'][$nm])){
$default_value = $qtranslate_options['front']['bool'][$nm];
}
}
if( !is_null($default_value) && $default_value === $q_config[$nm] ){
delete_option('qtranslate_'.$nm);
}else{
update_option('qtranslate_'.$nm, $q_config[$nm]?'1':'0');
}
}
/**
* saves entire configuration
*/
function qtranxf_saveConfig() {
global $q_config, $qtranslate_options;
qtranxf_update_option('default_language');
qtranxf_update_option('enabled_languages');
foreach($qtranslate_options['front']['int'] as $nm => $def){
qtranxf_update_option($nm,$def);
}
foreach($qtranslate_options['front']['bool'] as $nm => $def){
qtranxf_update_option_bool($nm,$def);
}
qtranxf_update_option_bool('qtrans_compatibility');
qtranxf_update_option_bool('disable_client_cookies');
foreach($qtranslate_options['front']['str'] as $nm => $def){
qtranxf_update_option($nm,$def);
}
foreach($qtranslate_options['front']['text'] as $nm => $def){
qtranxf_update_option($nm,$def);
}
foreach($qtranslate_options['front']['array'] as $nm => $def){
qtranxf_update_option($nm,$def);
}
qtranxf_update_option('domains');
update_option('qtranslate_ignore_file_types', implode(',',$q_config['ignore_file_types']));
qtranxf_update_option('flag_location',qtranxf_flag_location_default());
//if($q_config['filter_options_mode'] == QTX_FILTER_OPTIONS_LIST)
qtranxf_update_option('filter_options',explode(' ',QTX_FILTER_OPTIONS_DEFAULT));
//$qtranslate_options['languages'] are updated in a special way: look for _GET['edit'], $_GET['delete'], $_GET['enable'], $_GET['disable']
qtranxf_update_option('term_name');//uniquely special case
//save admin options
foreach($qtranslate_options['admin']['int'] as $nm => $def){
qtranxf_update_option($nm,$def);
}
foreach($qtranslate_options['admin']['bool'] as $nm => $def){
qtranxf_update_option_bool($nm,$def);
}
foreach($qtranslate_options['admin']['str'] as $nm => $def){
qtranxf_update_option($nm,$def);
}
foreach($qtranslate_options['admin']['text'] as $nm => $def){
qtranxf_update_option($nm,$def);
}
foreach($qtranslate_options['admin']['array'] as $nm => $def){
qtranxf_update_option($nm,$def);
}
do_action('qtranslate_saveConfig');
}
function qtranxf_reloadConfig() {
global $q_config;
$url_info = isset($q_config['url_info']) ? $q_config['url_info'] : null;
//qtranxf_dbg_log('qtranxf_reloadConfig: $url_info: ',$url_info);
qtranxf_del_conf_filters();
qtranxf_loadConfig();
qtranxf_admin_loadConfig();
if($url_info){
$q_config['url_info'] = $url_info;
if(isset($q_config['url_info']['language'])){
$q_config['language'] = $q_config['url_info']['language'];
}
if(!qtranxf_isEnabled($q_config['language'])){
$q_config['language'] = $q_config['default_language'];
}
//qtranxf_dbg_log('qtranxf_reloadConfig: $q_config[language]: ',$q_config['language']);
}
qtranxf_load_option_qtrans_compatibility();
}
function qtranxf_updateSetting($var, $type = QTX_STRING, $def = null) {
global $q_config, $qtranslate_options;
if(!isset($_POST['submit'])) return false;
if(!isset($_POST[$var]) && $type != QTX_BOOLEAN) return false;
if(is_null($def) && isset($qtranslate_options['default_value'][$var])){
$def = $qtranslate_options['default_value'][$var];
}
if(is_string($def) && function_exists($def)){
$def = call_user_func($def);
}
switch($type) {
case QTX_URL:
case QTX_LANGUAGE:
case QTX_STRING:
$val = sanitize_text_field($_POST[$var]);
if($type == QTX_URL) $val = trailingslashit($val);
else if($type == QTX_LANGUAGE && !qtranxf_isEnabled($val)) return false;
if(isset($q_config[$var])){
if($q_config[$var] === $val) return false;
}elseif(!is_null($def)){
if(empty($val) || $def === $val) return false;
}
if(empty($val) && $def) $val = $def;
$q_config[$var] = $val;
qtranxf_update_option($var, $def);
return true;
case QTX_TEXT:
$val = $_POST[$var];
//standardize multi-line string
$lns = preg_split('/\r?\n\r?/',$val);
foreach($lns as $key => $ln){
$lns[$key] = sanitize_text_field($ln);
}
$val = implode(PHP_EOL,$lns);
//qtranxf_dbg_log('qtranxf_updateSetting:QTX_TEXT: $_POST[$var]:'.PHP_EOL, $_POST[$var]);
//qtranxf_dbg_log('qtranxf_updateSetting:QTX_TEXT: $val:'.PHP_EOL, $val);
if(isset($q_config[$var])){
if($q_config[$var] === $val) return false;
}elseif(!is_null($def)){
if(empty($val) || $def === $val) return false;
}
if(empty($val) && $def) $val = $def;
$q_config[$var] = $val;
qtranxf_update_option($var, $def);
return true;
case QTX_ARRAY:
$val = $_POST[$var];
if(!is_array($_POST[$var])){
$val = sanitize_text_field($val);
$val = preg_split('/[\s,]+/',$val,null,PREG_SPLIT_NO_EMPTY);
}
if(empty($val) && !is_null($def)){
if(is_string($def)){
$val = preg_split('/[\s,]+/',$def,null,PREG_SPLIT_NO_EMPTY);
}else if(is_array($def)){
$val = $def;
}
}
if( isset($q_config[$var]) && qtranxf_array_compare($q_config[$var],$val) ) return false;
$q_config[$var] = $val;
qtranxf_update_option($var, $def);
return true;
case QTX_BOOLEAN:
if( isset($_POST[$var]) && $_POST[$var]==1 ) {
if($q_config[$var]) return false;
$q_config[$var] = true;
} else {
if(!$q_config[$var]) return false;
$q_config[$var] = false;
}
qtranxf_update_option_bool($var, $def);
return true;
case QTX_INTEGER:
$val = sanitize_text_field($_POST[$var]);
$val = intval($val);
if($q_config[$var] == $val) return false;
$q_config[$var] = $val;
qtranxf_update_option($var, $def);
return true;
}
return false;
}
/**
* Updates 'admin_config' and 'front_config' from *.json files listed in option 'config_files', and option 'custom_i18n_config'.
* @since 3.3.1
*/
function qtranxf_update_i18n_config(){
global $q_config;
if(!isset($q_config['config_files'])){
global $qtranslate_options;
qtranxf_admin_set_default_options($qtranslate_options);
qtranxf_load_option_array('config_files', $qtranslate_options['admin']['array']['config_files']);
qtranxf_load_option_array('custom_i18n_config', $qtranslate_options['admin']['array']['custom_i18n_config']);
}
$json_files = $q_config['config_files'];
$custom_i18n_config = $q_config['custom_i18n_config'];
$cfg = qtranxf_load_config_all($json_files,$custom_i18n_config);
if($q_config['admin_config'] !== $cfg['admin-config']){
$q_config['admin_config'] = $cfg['admin-config'];
qtranxf_update_option('admin_config');
}
if($q_config['front_config'] !== $cfg['front-config']){
$q_config['front_config'] = $cfg['front-config'];
qtranxf_update_option('front_config');
}
}
function qtranxf_updateSettingFlagLocation($nm) {
global $q_config;
if(!isset($_POST['submit'])) return false;
if(!isset($_POST[$nm])) return false;
$flag_location=untrailingslashit(sanitize_text_field($_POST[$nm]));
if(empty($flag_location)) $flag_location = qtranxf_flag_location_default();
$flag_location = trailingslashit($flag_location);
if(!file_exists(trailingslashit(WP_CONTENT_DIR).$flag_location))
return null;
if($flag_location != $q_config[$nm]){
$q_config[$nm]=$flag_location;
if($flag_location == qtranxf_flag_location_default())
delete_option('qtranslate_'.$nm);
else
update_option( 'qtranslate_'.$nm, $flag_location );
}
return true;
}
function qtranxf_updateSettingIgnoreFileTypes($nm) {
global $q_config;
if(!isset($_POST['submit'])) return false;
if(!isset($_POST[$nm])) return false;
$posted=preg_split('/[\s,]+/',strtolower(sanitize_text_field($_POST[$nm])),null,PREG_SPLIT_NO_EMPTY);
$val=explode(',',QTX_IGNORE_FILE_TYPES);
if(is_array($posted)){
foreach($posted as $v){
if(empty($v)) continue;
if(in_array($v,$val)) continue;
$val[]=$v;
}
}
if( qtranxf_array_compare($q_config[$nm],$val) ) return false;
$q_config[$nm] = $val;
update_option('qtranslate_'.$nm, implode(',',$val));
return true;
}
function qtranxf_parse_post_type_excluded() {
if(!isset($_POST['submit'])) return false;
if(!isset($_POST['post_types_all'])) return false;
if(!is_array($_POST['post_types_all'])) return false;
$post_type_excluded = array();
foreach($_POST['post_types_all'] as $post_type => $v){
if(isset($_POST['post_types'][$post_type])) continue;
$post_type_excluded[] = $post_type;
}
unset($_POST['post_types']);
unset($_POST['post_types_all']);
$_POST['post_type_excluded'] = $post_type_excluded;
//qtranxf_dbg_log('qtranxf_parse_post_type_excluded: $_POST[post_type_excluded]: ',$_POST['post_type_excluded']);
}
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);
}
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');
}
function qtranxf_executeOnUpdate() {
global $q_config;
$messages = &$q_config['url_info']['messages'];
if ( isset( $_POST['update_mo_now'] ) && $_POST['update_mo_now'] == '1' ) {
$result = qtranxf_updateGettextDatabases( true );
if( $result === 0 ) {
$messages[] = __( 'Gettext databases updated.', 'qtranslate' );
}
}
// ==== import/export msg was here
if(isset($_POST['convert_database'])){
$msg = qtranxf_convert_database($_POST['convert_database']);
if($msg) $messages[] = $msg;
}
}
//function qtranxf_updateLanguage() {
//}
/**
* Allow 3rd-party to include additional code here
*/
do_action('qtranslate_admin_options_update.php');