get_settings(); $default_language = $this->get_default_language(); switch($request){ case 'set_active_languages': $resp = array(); $old_active_languages_count = count($this->get_active_languages()); $lang_codes = filter_input( INPUT_POST, 'langs', FILTER_SANITIZE_FULL_SPECIAL_CHARS, FILTER_NULL_ON_FAILURE ); $lang_codes = explode(',',$lang_codes); $setup_instance = wpml_get_setup_instance(); if ( $setup_instance->set_active_languages ( $lang_codes ) ) { $resp[0] = 1; $iclsettings['active_languages'] = wpml_reload_active_languages_setting(); $active_langs = $this->get_active_languages(); $iclresponse =''; $default_categories = $sitepress->get_setting( 'default_categories', array() ); $default_category_main = $wpdb->get_var( $wpdb->prepare("SELECT name FROM {$wpdb->terms} t JOIN {$wpdb->term_taxonomy} tx ON t.term_id=tx.term_id WHERE term_taxonomy_id = %d AND taxonomy='category'", $default_categories[$default_language] )); $default_category_trid = $wpdb->get_var( $wpdb->prepare("SELECT trid FROM {$wpdb->prefix}icl_translations WHERE element_id = %d AND element_type='tax_category'", $default_categories[$default_language])); foreach($active_langs as $lang){ $is_default = ( $default_language ==$lang['code']); $iclresponse .= '
  • 1){ $resp[2] =$this->get_setting('setup_complete') ? 1 : -2; }elseif($old_active_languages_count > 1 && count($lang_codes) < 2){ $resp[2] = $this->get_setting('setup_complete') ? -1 : -3; }else{ $resp[2] = $this->get_setting('setup_complete') ? 0 : -3; } }else{ $resp[0] = 0; } echo join('|',$resp); do_action('icl_update_active_languages'); break; case 'set_default_language': $previous_default = $default_language; $new_default_language = filter_input( INPUT_POST, 'lang', FILTER_SANITIZE_FULL_SPECIAL_CHARS, FILTER_NULL_ON_FAILURE ); if($response = $this->set_default_language( $new_default_language )){ echo '1|'.$previous_default.'|'; }else{ echo'0||' ; } if(1 === $response){ echo __('WordPress language file (.mo) is missing. Keeping existing display language.', 'sitepress'); } break; case 'set_languages_order': $languages_order = filter_input( INPUT_POST, 'order', FILTER_SANITIZE_FULL_SPECIAL_CHARS, FILTER_NULL_ON_FAILURE ); $iclsettings['languages_order'] = explode(';', $languages_order ); $this->save_settings($iclsettings); echo json_encode(array('message' => __('Languages order updated', 'sitepress'))); break; case 'icl_tdo_options': $iclsettings['translated_document_status'] = filter_input( INPUT_POST, 'icl_translated_document_status', FILTER_SANITIZE_NUMBER_INT, FILTER_NULL_ON_FAILURE ); $iclsettings['translated_document_page_url'] = filter_input( INPUT_POST, 'icl_translated_document_page_url', FILTER_SANITIZE_FULL_SPECIAL_CHARS, FILTER_NULL_ON_FAILURE ); $this->save_settings($iclsettings); echo '1|'; break; case 'icl_save_language_switcher_options': $_POST = stripslashes_deep( $_POST ); $ls_options = filter_input_array ( INPUT_POST, array_fill_keys ( array( 'icl_lso_link_empty', 'icl_lso_flags', 'icl_lso_native_lang', 'icl_lso_display_lang' ), array( 'filter' => FILTER_SANITIZE_NUMBER_INT, 'flags' => FILTER_NULL_ON_FAILURE ) ) ); if ( ! $this->get_setting( 'setup_complete' ) ) { if ( isset( $iclsettings['setup_reset'] ) ) { unset( $iclsettings['setup_reset'] ); } } if(isset($_POST['icl_lang_sel_config'])){ $iclsettings['icl_lang_sel_config'] = $_POST['icl_lang_sel_config']; } if(isset($_POST['icl_lang_sel_footer_config'])){ $iclsettings['icl_lang_sel_footer_config'] = $_POST['icl_lang_sel_footer_config']; } if (isset($_POST['icl_lang_sel_type'])) $iclsettings['icl_lang_sel_type'] = $_POST['icl_lang_sel_type']; if (isset($_POST['icl_lang_sel_stype'])) $iclsettings['icl_lang_sel_stype'] = $_POST['icl_lang_sel_stype']; $iclsettings['icl_lang_sel_orientation'] = $_POST['icl_lang_sel_orientation']; if (isset($_POST['icl_lang_sel_footer'])) $iclsettings['icl_lang_sel_footer'] = 1; else $iclsettings['icl_lang_sel_footer'] = 0; if (isset($_POST['icl_post_availability'])) $iclsettings['icl_post_availability'] = 1; else $iclsettings['icl_post_availability'] = 0; if (isset($_POST['icl_post_availability_position'])) $iclsettings['icl_post_availability_position'] = $_POST['icl_post_availability_position']; if (isset($_POST['icl_post_availability_text'])) $iclsettings['icl_post_availability_text'] = $_POST['icl_post_availability_text']; $iclsettings['icl_widget_title_show'] = (isset($_POST['icl_widget_title_show'])) ? 1 : 0; $iclsettings['icl_additional_css'] = $_POST['icl_additional_css']; $iclsettings['display_ls_in_menu'] = @intval($_POST['display_ls_in_menu']); $iclsettings['menu_for_ls'] = @intval($_POST['menu_for_ls']); $iclsettings['icl_lang_sel_copy_parameters'] = join(', ', array_map('trim', explode(',', $_POST['copy_parameters']))); if(!$ls_options['icl_lso_flags'] && !$ls_options['icl_lso_native_lang'] && !$ls_options['icl_lso_display_lang']){ echo '0|'; echo __('At least one of the language switcher style options needs to be checked', 'sitepress'); }else{ $this->save_settings($iclsettings); echo 1; } $ls_sidebars = isset($_POST[ 'icl_language_switcher_sidebars' ]) ? $_POST[ 'icl_language_switcher_sidebars' ] : false; $setup_instance = wpml_get_setup_instance(); $setup_instance->finish_step3($ls_sidebars, $ls_options); break; case 'registration_form_submit': $ret['error'] = ''; $setup_instance = wpml_get_setup_instance(); if($_POST['button_action'] == 'later'){ //success $ret['success'] = sprintf(__('WPML will work on your site, but you will not receive updates. WPML updates are essential for keeping your site running smoothly and secure. To receive automated updates, you need to complete the registration, in the %splugins admin%s page.', 'sitepress'), '', ''); }elseif($_POST['button_action'] == 'finish'){ $setup_instance->finish_installation(); }else{ if(empty($_POST['installer_site_key'])){ $ret['error'] = __('Missing site key.'); }else{ $site_key = $_POST['installer_site_key']; if(class_exists('WP_Installer')){ $args['repository_id'] = 'wpml'; $args['nonce'] = wp_create_nonce('save_site_key_' . $args['repository_id']) ; $args['site_key'] = $site_key; $args['return'] = 1; $r = WP_Installer()->save_site_key($args); if(!empty($r['error'])){ $ret['error'] = $r['error']; }else{ //success $ret['success'] = __('Thank you for registering WPML on this site. You will receive automatic updates when new versions are available.', 'sitepress'); } } $setup_instance->finish_installation($site_key); } } echo json_encode($ret); break; case 'icl_admin_language_options': $iclsettings['admin_default_language'] = $_POST['icl_admin_default_language']; $this->save_settings($iclsettings); echo 1; break; case 'icl_blog_posts': $iclsettings['show_untranslated_blog_posts'] = $_POST['icl_untranslated_blog_posts']; $this->save_settings($iclsettings); echo 1; break; case 'icl_page_sync_options': $iclsettings['sync_page_ordering'] = @intval($_POST['icl_sync_page_ordering']); $iclsettings['sync_page_parent'] = @intval($_POST['icl_sync_page_parent']); $iclsettings['sync_page_template'] = @intval($_POST['icl_sync_page_template']); $iclsettings['sync_comment_status'] = @intval($_POST['icl_sync_comment_status']); $iclsettings['sync_ping_status'] = @intval($_POST['icl_sync_ping_status']); $iclsettings['sync_sticky_flag'] = @intval($_POST['icl_sync_sticky_flag']); $iclsettings['sync_password'] = @intval($_POST['icl_sync_password']); $iclsettings['sync_private_flag'] = @intval($_POST['icl_sync_private_flag']); $iclsettings['sync_post_format'] = @intval($_POST['icl_sync_post_format']); $iclsettings['sync_delete'] = @intval($_POST['icl_sync_delete']); $iclsettings['sync_delete_tax'] = @intval($_POST['icl_sync_delete_tax']); $iclsettings['sync_post_taxonomies'] = @intval($_POST['icl_sync_post_taxonomies']); $iclsettings['sync_post_date'] = @intval($_POST['icl_sync_post_date']); $iclsettings['sync_comments_on_duplicates'] = @intval($_POST['icl_sync_comments_on_duplicates']); $this->save_settings($iclsettings); echo 1; break; case 'language_domains': $language_domains_helper = new WPML_Lang_Domains_Box( $this ); echo $language_domains_helper->render(); break; case 'icl_theme_localization_type': $icl_tl_type = @intval($_POST['icl_theme_localization_type']); $iclsettings['theme_localization_type'] = $icl_tl_type; $iclsettings['theme_localization_load_textdomain'] = @intval($_POST['icl_theme_localization_load_td']); $filtered_textdomain_value = filter_input( INPUT_POST, 'textdomain_value', FILTER_SANITIZE_FULL_SPECIAL_CHARS, FILTER_NULL_ON_FAILURE ); $iclsettings['gettext_theme_domain_name'] = $filtered_textdomain_value; if($icl_tl_type == 1) { do_action ( 'wpml_scan_theme_for_strings', true ); }elseif($icl_tl_type==2){ $parent_theme = get_template_directory(); $child_theme = get_stylesheet_directory(); $languages_folders = array(); if($found_folder = icl_tf_determine_mo_folder($parent_theme)){ $languages_folders['parent'] = $found_folder; } if($parent_theme != $child_theme && $found_folder = icl_tf_determine_mo_folder($child_theme)){ $languages_folders['child'] = $found_folder; } $iclsettings['theme_language_folders'] = $languages_folders; } $this->save_settings($iclsettings); echo '1|'.$icl_tl_type; break; case 'dismiss_help': icl_set_setting('dont_show_help_admin_notice', true); icl_save_settings(); break; case 'dismiss_page_estimate_hint': icl_set_setting('dismiss_page_estimate_hint', !icl_get_setting('dismiss_page_estimate_hint')); icl_save_settings(); break; case 'dismiss_upgrade_notice': icl_set_setting('hide_upgrade_notice', implode('.', array_slice(explode('.', ICL_SITEPRESS_VERSION), 0, 3))); icl_save_settings(); break; case 'setup_got_to_step1': $setup_instance = wpml_get_setup_instance(); $setup_instance->go_to_setup1(); break; case 'setup_got_to_step2': icl_set_setting('setup_wizard_step', 2); icl_save_settings(); break; case 'toggle_show_translations': icl_set_setting('show_translations_flag', intval(!icl_get_setting('show_translations_flag', false))); icl_save_settings(); break; case 'icl_messages': //TODO: handle with Translation Proxy if ( ! icl_get_setting( 'icl_disable_reminders' ) ) { break; } exit; case 'icl_help_links': if ( isset( $iclq ) && $iclq ) { $links = $iclq->get_help_links(); $lang = icl_get_setting( 'admin_default_language' ); if (!isset($links['resources'][$lang])) { $lang = 'en'; } if (isset($links['resources'][$lang])) { $output = ''; echo '1|' . $output; } else { echo '0|'; } } break; case 'icl_show_sidebar': icl_set_setting('icl_sidebar_minimized', $_POST['state']=='hide'?1:0); icl_save_settings(); break; case 'icl_promote_form': icl_set_setting('promote_wpml', @intval($_POST['icl_promote'])); icl_save_settings(); echo '1|'; break; case 'save_translator_note': update_post_meta($_POST['post_id'], '_icl_translator_note', $_POST['note']); break; case 'icl_st_track_strings': foreach($_POST['icl_st'] as $k=>$v){ $iclsettings['st'][$k] = $v; } if(isset($iclsettings)) { $this->save_settings($iclsettings); } echo 1; break; case 'icl_st_more_options': $iclsettings['st']['translated-users'] = !empty($_POST['users']) ? array_keys($_POST['users']) : array(); $this->save_settings($iclsettings); if(!empty($iclsettings['st']['translated-users'])){ $sitepress_settings['st']['translated-users'] = $iclsettings['st']['translated-users']; icl_st_register_user_strings_all(); } echo 1; break; case 'icl_st_ar_form': // Auto register string settings. $iclsettings['st']['icl_st_auto_reg'] = $_POST['icl_auto_reg_type']; $this->save_settings($iclsettings); echo 1; break; case 'icl_hide_languages': $iclsettings['hidden_languages'] = empty($_POST['icl_hidden_languages']) ? array() : $_POST['icl_hidden_languages']; $this->set_setting('hidden_languages', array()); //reset current value $active_languages = $this->get_active_languages(); if(!empty($iclsettings['hidden_languages'])){ if(1 == count($iclsettings['hidden_languages'])){ $out = sprintf(__('%s is currently hidden to visitors.', 'sitepress'), $active_languages[$iclsettings['hidden_languages'][0]]['display_name']); }else{ foreach($iclsettings['hidden_languages'] as $l){ $_hlngs[] = $active_languages[$l]['display_name']; } $hlangs = join(', ', $_hlngs); $out = sprintf(__('%s are currently hidden to visitors.', 'sitepress'), $hlangs); } $out .= ' ' . sprintf(__('You can enable its/their display for yourself, in your profile page.', 'sitepress'), 'profile.php#wpml'); } else { $out = __('All languages are currently displayed.', 'sitepress'); } $this->save_settings($iclsettings); echo '1|'.$out; break; case 'icl_adjust_ids': $iclsettings['auto_adjust_ids'] = @intval($_POST['icl_adjust_ids']); $this->save_settings($iclsettings); echo '1|'; break; case 'icl_automatic_redirect': if (!isset($_POST['icl_remember_language']) || $_POST['icl_remember_language'] < 24) { $_POST['icl_remember_language'] = 24; } $iclsettings['automatic_redirect'] = @intval($_POST['icl_automatic_redirect']); $iclsettings['remember_language'] = @intval($_POST['icl_remember_language']); $this->save_settings($iclsettings); echo '1|'; break; case 'icl_troubleshooting_more_options': $iclsettings['troubleshooting_options'] = $_POST['troubleshooting_options']; $this->save_settings($iclsettings); echo '1|'; break; case 'reset_languages': $setup_instance = wpml_get_setup_instance(); $setup_instance->reset_language_data(); break; case 'icl_support_update_ticket': if (isset($_POST['ticket'])) { $temp = str_replace('icl_support_ticket_', '', $_POST['ticket']); $temp = explode('_', $temp); $id = (int)$temp[0]; $num = (int)$temp[1]; if ($id && $num) { if (isset($iclsettings['icl_support']['tickets'][$id])) { $iclsettings['icl_support']['tickets'][$id]['messages'] = $num; $this->save_settings($iclsettings); } } } break; case 'icl_custom_tax_sync_options': if(!empty($_POST['icl_sync_tax'])){ foreach($_POST['icl_sync_tax'] as $k=>$v){ $iclsettings['taxonomies_sync_option'][$k] = $v; if($v){ $this->verify_taxonomy_translations($k); } } if ( isset( $iclsettings ) ) { $this->save_settings($iclsettings); } } echo '1|'; break; case 'icl_custom_posts_sync_options': $new_options = ! empty( $_POST['icl_sync_custom_posts'] ) ? $_POST['icl_sync_custom_posts'] : array(); /** @var WPML_Settings_Helper $settings_helper */ $settings_helper = wpml_load_settings_helper(); $settings_helper->update_cpt_sync_settings( $new_options ); echo '1|'; break; case 'copy_from_original': /* * apply filtering as to add further elements * filters will have to like as such * add_filter('wpml_copy_from_original_fields', 'my_copy_from_original_fields'); * * function my_copy_from_original_fields( $elements ) { * $custom_field = 'editor1'; * $elements[ 'customfields' ][ $custom_fields ] = array( * 'editor_name' => 'custom_editor_1', * 'editor_type' => 'editor', * 'value' => 'test' * ); * * $custom_field = 'editor2'; * $elements[ 'customfields' ][ $custom_fields ] = array( * 'editor_name' => 'textbox1', * 'editor_type' => 'text', * 'value' => 'testtext' * ); * * return $elements; * } * This filter would result in custom_editor_1 being populated with the value "test" * and the textfield with id #textbox1 to be populated with "testtext". * editor type is always either text when populating general fields or editor when populating * a wp editor. The editor id can be either judged from the arguments used in the wp_editor() call * or from looking at the tinyMCE.Editors object that the custom post type's editor sends to the browser. */ $content_type = filter_input( INPUT_POST, 'content_type' ); $excerpt_type = filter_input( INPUT_POST, 'excerpt_type' ); $trid = filter_input( INPUT_POST, 'trid' ); $lang = filter_input( INPUT_POST, 'lang' ); echo wp_json_encode( WPML_Post_Edit_Ajax::copy_from_original_fields( $content_type, $excerpt_type, $trid, $lang ) ); break; case 'save_user_preferences': $user_preferences = $this->get_user_preferences(); $this->set_user_preferences( array_merge_recursive( $user_preferences, $_POST[ 'user_preferences' ] ) ); $this->save_user_preferences(); break; case 'wpml_cf_translation_preferences': if ( empty( $_POST[ WPML_POST_META_SETTING_INDEX_SINGULAR ] ) ) { echo '' . __( 'Error: No custom field', 'sitepress' ) . ''; die(); } $_POST[WPML_POST_META_SETTING_INDEX_SINGULAR] = @strval( $_POST[ WPML_POST_META_SETTING_INDEX_SINGULAR ] ); if ( ! isset( $_POST['translate_action'] ) ) { echo '' . __( 'Error: Please provide translation action', 'sitepress' ) . ''; die(); } $_POST['translate_action'] = @intval( $_POST['translate_action'] ); if ( defined( 'WPML_TM_VERSION' ) ) { global $iclTranslationManagement; if ( ! empty( $iclTranslationManagement ) ) { $iclTranslationManagement->settings[ WPML_POST_META_SETTING_INDEX_PLURAL ][ $_POST[ WPML_POST_META_SETTING_INDEX_SINGULAR ] ] = $_POST['translate_action']; $iclTranslationManagement->save_settings(); echo '' . __( 'Settings updated', 'sitepress' ) . ''; } else { echo '' . __( 'Error: WPML Translation Management plugin not initiated', 'sitepress' ) . ''; } } else { echo '' . __( 'Error: Please activate WPML Translation Management plugin', 'sitepress' ) . ''; } break; case 'icl_seo_options': $iclsettings['seo']['head_langs'] = isset($_POST['icl_seo_head_langs']) ? intval($_POST['icl_seo_head_langs']) : 0; $iclsettings['seo']['canonicalization_duplicates'] = isset($_POST['icl_seo_canonicalization_duplicates']) ? intval($_POST['icl_seo_canonicalization_duplicates']) : 0; $this->save_settings($iclsettings); echo '1|'; break; case 'dismiss_object_cache_warning': $iclsettings['dismiss_object_cache_warning'] = true; $this->save_settings($iclsettings); echo '1|'; break; case 'update_option': $iclsettings[$_REQUEST['option']] = $_REQUEST['value']; $this->save_settings($iclsettings); break; case 'connect_translations': $new_trid = $_POST['new_trid']; $post_type = $_POST['post_type']; $post_id = $_POST['post_id']; $set_as_source = $_POST['set_as_source']; $language_details = $sitepress->get_element_language_details($post_id, 'post_' . $post_type); if ( $set_as_source ) { $wpdb->update( $wpdb->prefix . 'icl_translations', array( 'source_language_code' => $language_details->language_code ), array( 'trid' => $new_trid, 'element_type' => 'post_' . $post_type ) ); $wpdb->update( $wpdb->prefix . 'icl_translations', array( 'source_language_code' => null, 'trid' => $new_trid ), array( 'element_id' => $post_id, 'element_type' => 'post_' . $post_type ) ); } else { $original_element_language = $sitepress->get_default_language(); $trid_elements = $sitepress->get_element_translations( $new_trid, 'post_' . $post_type ); if($trid_elements) { foreach ( $trid_elements as $trid_element ) { if ( $trid_element->original ) { $original_element_language = $trid_element->language_code; break; } } } $wpdb->update( $wpdb->prefix . 'icl_translations', array( 'source_language_code' => $original_element_language, 'trid' => $new_trid ), array( 'element_id' => $post_id, 'element_type' => 'post_' . $post_type ) ); } echo wp_json_encode(true); break; case 'get_posts_from_trid': $trid = $_POST['trid']; $post_type = $_POST['post_type']; $translations = $sitepress->get_element_translations($trid, 'post_' . $post_type); $results = array(); foreach($translations as $language_code => $translation) { $post = get_post($translation->element_id); $title = $post->post_title ? $post->post_title : strip_shortcodes(wp_trim_words( $post->post_content, 50 )); $source_language_code = $translation->source_language_code; $results[] = (object) array('language' => $language_code, 'title' => $title, 'source_language' => $source_language_code); } echo wp_json_encode($results); break; case 'get_orphan_posts': $trid = $_POST['trid']; $post_type = $_POST['post_type']; $source_language = $_POST['source_language']; $results = $sitepress->get_orphan_translations($trid, $post_type, $source_language); echo wp_json_encode($results); break; default: if(function_exists('ajax_' . $request)) { $function_name = 'ajax_' . $request; $function_name(); } else { do_action('icl_ajx_custom_call', $request, $_REQUEST); } } exit;