/htdocs/wp-content/plugins/wpml-string-translation/inc/functions.php
PHP | 2619 lines | 2160 code | 385 blank | 74 comment | 448 complexity | 6d9bc3d38e6cd5a7760629a3a6ab8190 MD5 | raw file
Possible License(s): GPL-2.0
Large files files are truncated, but you can click here to view the full file
- <?php
- $icl_st_string_translation_statuses = array(
- ICL_STRING_TRANSLATION_COMPLETE => __('Translation complete','wpml-string-translation'),
- ICL_STRING_TRANSLATION_PARTIAL => __('Partial translation','wpml-string-translation'),
- ICL_STRING_TRANSLATION_NEEDS_UPDATE => __('Translation needs update','wpml-string-translation'),
- ICL_STRING_TRANSLATION_NOT_TRANSLATED => __('Not translated','wpml-string-translation'),
- ICL_STRING_TRANSLATION_WAITING_FOR_TRANSLATOR => __('Waiting for translator','wpml-string-translation')
- );
- add_action('plugins_loaded', 'icl_st_init');
- add_action('icl_update_active_languages', 'icl_update_string_status_all');
- add_action('update_option_blogname', 'icl_st_update_blogname_actions',5,2);
- add_action('update_option_blogdescription', 'icl_st_update_blogdescription_actions',5,2);
- if(!defined('XMLRPC')){
- // called separately for XMLRPC post saves
- add_action('save_post', 'icl_st_fix_links_in_strings', 19);
- }
- //add_filter('xmlrpc_methods','icl_add_custom_xmlrpc_methods');
- function icl_st_init(){
- global $sitepress_settings, $sitepress, $wpdb, $icl_st_err_str;
-
- if(isset($_GET['icl_action']) && $_GET['icl_action'] == 'view_string_in_page'){
- icl_st_string_in_page($_GET['string_id']);
- exit;
- }
- if(isset($_GET['icl_action']) && $_GET['icl_action'] == 'view_string_in_source'){
- icl_st_string_in_source($_GET['string_id']);
- exit;
- }
-
- if ( get_magic_quotes_gpc() && isset($_GET['page']) && $_GET['page'] == WPML_ST_FOLDER . '/menu/string-translation.php'){
- $_POST = stripslashes_deep( $_POST );
- }
-
- if(!isset($sitepress_settings['existing_content_language_verified']) || !$sitepress_settings['existing_content_language_verified']){
- return;
- }
-
- if(!isset($sitepress_settings['st']['sw'])){
- $sitepress_settings['st']['sw'] = array(); //no settings for now
- $sitepress->save_settings($sitepress_settings);
- $init_all = true;
- }
-
- if(!isset($sitepress_settings['st']['strings_per_page'])){
- $sitepress_settings['st']['strings_per_page'] = 10;
- $sitepress->save_settings($sitepress_settings);
- }elseif(isset($_GET['strings_per_page']) && $_GET['strings_per_page'] > 0){
- $sitepress_settings['st']['strings_per_page'] = $_GET['strings_per_page'];
- $sitepress->save_settings($sitepress_settings);
- }
- if(!isset($sitepress_settings['st']['icl_st_auto_reg'])){
- $sitepress_settings['st']['icl_st_auto_reg'] = 'disabled';
- $sitepress->save_settings($sitepress_settings);
- }
- if(empty($sitepress_settings['st']['strings_language'])){
- $iclsettings['st']['strings_language'] = $sitepress_settings['st']['strings_language'] = $sitepress->get_default_language();
- $sitepress->save_settings($iclsettings);
- }
-
- if(!isset($sitepress_settings['st']['translated-users'])) $sitepress_settings['st']['translated-users'] = array();
-
- if((isset($_POST['iclt_st_sw_save']) && wp_verify_nonce($_POST['_wpnonce'], 'icl_sw_form')) || isset($init_all)){
- if(isset($init_all)){
-
- icl_register_string('WP',__('Blog Title','wpml-string-translation'), get_option('blogname'));
- icl_register_string('WP',__('Tagline', 'wpml-string-translation'), get_option('blogdescription'));
- __icl_st_init_register_widget_titles();
-
- // create a list of active widgets
- $active_text_widgets = array();
- $widgets = (array)get_option('sidebars_widgets');
- foreach($widgets as $k=>$w){
- if('wp_inactive_widgets' != $k && $k != 'array_version'){
- foreach($widgets[$k] as $v){
- if(preg_match('#text-([0-9]+)#i',$v, $matches)){
- $active_text_widgets[] = $matches[1];
- }
- }
- }
- }
-
- $widget_text = get_option('widget_text');
- if(is_array($widget_text)){
- foreach($widget_text as $k=>$w){
- if(!empty($w) && isset($w['title']) && in_array($k, $active_text_widgets)){
- icl_register_string('Widgets', 'widget body - ' . md5(apply_filters('widget_text',$w['text'])), apply_filters('widget_text',$w['text']));
- }
- }
- }
- }
-
- if(isset($_POST['iclt_st_sw_save'])){
- $updat_string_statuses = false;
- $sitepress_settings['st']['sw'] = $_POST['icl_st_sw'];
- if($sitepress_settings['st']['strings_language'] != $_POST['icl_st_sw']['strings_language']){
- $updat_string_statuses = true;
- }
- $sitepress_settings['st']['strings_language'] = $_POST['icl_st_sw']['strings_language'];
- $sitepress->save_settings($sitepress_settings);
- if($updat_string_statuses){
- icl_update_string_status_all();
- }
-
-
- //register author strings
-
- if(!empty($sitepress_settings['st']['translated-users'])){
- icl_st_register_user_strings_all();
- }
-
- wp_redirect($_SERVER['REQUEST_URI'].'&updated=true');
- }
-
- }
-
- // handle po file upload
- if(isset($_POST['icl_po_upload']) && wp_verify_nonce($_POST['_wpnonce'], 'icl_po_form')){
- global $icl_st_po_strings;
- if($_FILES['icl_po_file']['size']==0){
- $icl_st_err_str = __('File upload error', 'wpml-string-translation');
- }else{
- $lines = file($_FILES['icl_po_file']['tmp_name']);
- $icl_st_po_strings = array();
-
- $fuzzy = 0;
- for($k = 0; $k < count($lines); $k++){
- if(0 === strpos($lines[$k], '#, fuzzy')){
- $fuzzy = 1;
- $k++;
- }
- $int = preg_match('#msgid "(.+)"#im',trim($lines[$k]), $matches);
- if($int){
- $string = str_replace('\"','"', $matches[1]);
- $int = preg_match('#msgstr "(.+)"#im',trim($lines[$k+1]),$matches);
- if($int){
- $translation = str_replace('\"','"',$matches[1]);
- }else{
- $translation = "";
- }
-
- $string_exists = $wpdb->get_var("
- SELECT id FROM {$wpdb->prefix}icl_strings
- WHERE context='".$wpdb->escape($_POST['icl_st_i_context_new']?$_POST['icl_st_i_context_new']:$_POST['icl_st_i_context'])."'
- AND name='".md5($string)."'");
-
- $icl_st_po_strings[] = array(
- 'string' => $string,
- 'translation' => $translation,
- 'fuzzy' => $fuzzy,
- 'exists' => $string_exists
- );
- $k++;
-
- }
- if(!trim($lines[$k])){
- $fuzzy = 0;
- }
- }
- if(empty($icl_st_po_strings)){
- $icl_st_err_str = __('No string found', 'wpml-string-translation');
- }
- }
- }
- elseif(isset($_POST['action']) && 'icl_st_save_strings' == $_POST['action']){
- $arr = array_intersect_key($_POST['icl_strings'], array_flip($_POST['icl_strings_selected']));
- //$arr = array_map('html_entity_decode', $arr);
- if(isset($_POST['icl_st_po_language'])){
- $arr_t = array_intersect_key($_POST['icl_translations'], array_flip($_POST['icl_strings_selected']));
- $arr_f = array_intersect_key($_POST['icl_fuzzy'], array_flip($_POST['icl_strings_selected']));
- //$arr_t = array_map('html_entity_decode', $arr_t);
- }
-
-
- // see if the strings are already registered and have names
- // case of adding translation
- $res = $wpdb->get_results("
- SELECT value, name
- FROM {$wpdb->prefix}icl_strings
- WHERE context = '". $wpdb->escape($_POST['icl_st_domain_name']) ."' AND value IN ('".join("','", array_map('mysql_real_escape_string', $arr))."')
- ");
- if(!empty($res)){
- foreach($res as $r){
- $map[$r->value] = $r->name;
- }
- }
-
- foreach($arr as $k=>$string){
- if(isset($map[$string])){
- $name = $map[$string];
- }else{
- $name = md5($string);
- }
- $string_id = icl_register_string($_POST['icl_st_domain_name'], $name, $string);
- if($string_id && isset($_POST['icl_st_po_language'])){
- if($arr_t[$k] != ""){
- if($arr_f[$k]){
- $_status = ICL_STRING_TRANSLATION_NOT_TRANSLATED;
- }else{
- $_status = ICL_STRING_TRANSLATION_COMPLETE;
- }
- icl_add_string_translation($string_id, $_POST['icl_st_po_language'], $arr_t[$k], $_status);
- icl_update_string_status($string_id);
- }
- }
- }
- }
-
- //handle po export
- if(isset($_POST['icl_st_pie_e']) && wp_verify_nonce($_POST['_wpnonce'], 'icl_po_export')){
- //force some filters
- if(isset($_GET['status'])) unset($_GET['status']);
- $_GET['show_results']='all';
- if($_POST['icl_st_e_context']){
- $_GET['context'] = $_POST['icl_st_e_context'];
- }
-
- $_GET['translation_language'] = $_POST['icl_st_e_language'];
- $strings = icl_get_string_translations();
- if(!empty($strings)){
- $po = icl_st_generate_po_file($strings, !isset($_POST['icl_st_pe_translations']));
- }else{
- $po = "";
- }
- if(!isset($_POST['icl_st_pe_translations'])){
- $popot = 'pot';
- $poname = $_POST['icl_st_e_context'] ? urlencode($_POST['icl_st_e_context']) : 'all_context';
- }else{
- $popot = 'po';
- $poname = $_GET['translation_language'];
- }
- header("Content-Type: application/force-download");
- header("Content-Type: application/octet-stream");
- header("Content-Type: application/download");
- header("Content-Disposition: attachment; filename=".$poname.'.'.$popot.";");
- header("Content-Length: ". strlen($po));
- echo $po;
- exit(0);
- }
-
- // handle string translation request
- elseif(isset($_POST['icl_st_action']) && $_POST['icl_st_action'] == 'send_strings'){
-
- if($_POST['iclnonce'] == wp_create_nonce('icl-string-translation')){
- $_POST = stripslashes_deep($_POST);
- $services = $_POST['service'];
- $string_ids = explode(',', $_POST['strings']);
- $translate_to = array();
- foreach($_POST['translate_to'] as $lang_to=>$one){
- if(isset($services[$lang_to])){
- $translate_to[$lang_to] = $services[$lang_to];
- }
- }
- if(!empty($translate_to)){
- icl_translation_send_strings($string_ids, $translate_to);
- }
- }
- }
-
-
- // hook into blog title and tag line
- add_filter('option_blogname', 'icl_sw_filters_blogname');
- add_filter('option_blogdescription', 'icl_sw_filters_blogdescription');
- add_filter('widget_title', 'icl_sw_filters_widget_title');
- add_filter('widget_text', 'icl_sw_filters_widget_text');
-
- if(isset($sitepress_settings['theme_localization_type']) && $sitepress_settings['theme_localization_type']==1){
- add_filter('gettext', 'icl_sw_filters_gettext', 9, 3);
- add_filter('gettext_with_context', 'icl_sw_filters_gettext_with_context', 9, 4);
- add_filter('ngettext', 'icl_sw_filters_ngettext', 9, 5);
- add_filter('ngettext_with_context', 'icl_sw_filters_nxgettext', 9, 6);
- }
-
- $widget_groups = $wpdb->get_results("SELECT option_name, option_value FROM {$wpdb->options} WHERE option_name LIKE 'widget\\_%'");
- foreach($widget_groups as $w){
- add_action('update_option_' . $w->option_name, 'icl_st_update_widget_title_actions', 5, 2);
- }
-
- add_action('update_option_widget_text', 'icl_st_update_text_widgets_actions', 5, 2);
- add_action('update_option_sidebars_widgets', '__icl_st_init_register_widget_titles');
-
- if($icl_st_err_str){
- add_action('admin_notices', 'icl_st_admin_notices');
- }
-
- add_filter('get_the_author_first_name', 'icl_st_author_first_name_filter', 10, 2);
- add_filter('get_the_author_last_name', 'icl_st_author_last_name_filter', 10, 2);
- add_filter('get_the_author_nickname', 'icl_st_author_nickname_filter', 10, 2);
- add_filter('get_the_author_description', 'icl_st_author_description_filter', 10, 2);
- add_filter('the_author', 'icl_st_author_displayname_filter', 10);
-
- }
- add_action('profile_update', 'icl_st_register_user_strings');
- add_action('user_register', 'icl_st_register_user_strings');
- function __icl_st_init_register_widget_titles(){
- global $wpdb;
-
- // create a list of active widgets
- $active_widgets = array();
- $widgets = (array)get_option('sidebars_widgets');
-
- foreach($widgets as $k=>$w){
- if('wp_inactive_widgets' != $k && $k != 'array_version'){
- if(is_array($widgets[$k]))
- foreach($widgets[$k] as $v){
- $active_widgets[] = $v;
- }
- }
- }
- foreach($active_widgets as $aw){
- $int = preg_match('#-([0-9]+)$#i',$aw, $matches);
- if($int){
- $suffix = $matches[1];
- }else{
- $suffix = 1;
- }
- $name = preg_replace('#-[0-9]+#','',$aw);
- //if($name == 'rss-links') $name = 'rss';
-
- //$w = $wpdb->get_row("SELECT option_name, option_value FROM {$wpdb->options} WHERE option_name = 'widget_{$name}'");
- //$value = unserialize($w->option_value);
- $value = get_option("widget_".$name);
- if(isset($value[$suffix]['title']) && $value[$suffix]['title']){
- $w_title = $value[$suffix]['title'];
- }else{
- $w_title = __icl_get_default_widget_title($aw);
- $value[$suffix]['title'] = $w_title;
- update_option("widget_".$name, $value);
- }
-
- if($w_title){
- icl_register_string('Widgets', 'widget title - ' . md5(apply_filters('widget_title',$w_title)), apply_filters('widget_title',$w_title));
-
- }
- }
- }
- function __icl_get_default_widget_title($id){
- if(preg_match('#archives(-[0-9]+)?$#i',$id)){
- $w_title = 'Archives';
- }elseif(preg_match('#categories(-[0-9]+)?$#i',$id)){
- $w_title = 'Categories';
- }elseif(preg_match('#calendar(-[0-9]+)?$#i',$id)){
- $w_title = 'Calendar';
- }elseif(preg_match('#links(-[0-9]+)?$#i',$id)){
- $w_title = 'Links';
- }elseif(preg_match('#meta(-[0-9]+)?$#i',$id)){
- $w_title = 'Meta';
- }elseif(preg_match('#pages(-[0-9]+)?$#i',$id)){
- $w_title = 'Pages';
- }elseif(preg_match('#recent-posts(-[0-9]+)?$#i',$id)){
- $w_title = 'Recent Posts';
- }elseif(preg_match('#recent-comments(-[0-9]+)?$#i',$id)){
- $w_title = 'Recent Comments';
- }elseif(preg_match('#rss-links(-[0-9]+)?$#i',$id)){
- $w_title = 'RSS';
- }elseif(preg_match('#search(-[0-9]+)?$#i',$id)){
- $w_title = 'Search';
- }elseif(preg_match('#tag-cloud(-[0-9]+)?$#i',$id)){
- $w_title = 'Tag Cloud';
- }else{
- $w_title = false;
- }
- return $w_title;
- }
- function icl_register_string($context, $name, $value, $allow_empty_value = false){
- global $wpdb, $sitepress, $sitepress_settings, $ICL_Pro_Translation;
- // if the default language is not set up return without doing anything
- if(
- !isset($sitepress_settings['existing_content_language_verified']) ||
- !$sitepress_settings['existing_content_language_verified']
- ){
- return;
- }
-
- // Check if cached (so exists)
- $cached = icl_t_cache_lookup($context, $name);
- if ($cached && isset($cached['original']) && $cached['original'] == $value) {
- return;
- }
-
- $language = $sitepress->get_default_language();
- $res = $wpdb->get_row("SELECT id, value, status, language FROM {$wpdb->prefix}icl_strings WHERE context='".$wpdb->escape($context)."' AND name='".$wpdb->escape($name)."'");
- if($res){
- $string_id = $res->id;
- $update_string = array();
- if($value != $res->value){
- $update_string['value'] = $value;
- }
- if($language != $res->language){
- $update_string['language'] = $language;
- }
- if(!empty($update_string)){
- $wpdb->update($wpdb->prefix.'icl_strings', $update_string, array('id'=>$string_id));
- $wpdb->update($wpdb->prefix.'icl_string_translations', array('status'=>ICL_STRING_TRANSLATION_NEEDS_UPDATE), array('string_id'=>$string_id));
- icl_update_string_status($string_id);
- }
- }else{
- if(!empty($value) && is_scalar($value) && trim($value) || $allow_empty_value){
- $string = array(
- 'language' => $language,
- 'context' => $context,
- 'name' => $name,
- 'value' => $value,
- 'status' => ICL_STRING_TRANSLATION_NOT_TRANSLATED,
- );
- $wpdb->insert($wpdb->prefix.'icl_strings', $string);
- $string_id = $wpdb->insert_id;
- }else{
- $string_id = 0;
- }
- }
- global $WPML_Sticky_Links;
- if(!empty($WPML_Sticky_Links) && $WPML_Sticky_Links->settings['sticky_links_strings']){
- require_once ICL_PLUGIN_PATH . '/inc/translation-management/pro-translation.class.php';
- ICL_Pro_Translation::_content_make_links_sticky($string_id, 'string', false);
- }
- return $string_id;
- }
- function icl_translate($context, $name, $original_value = false, $allow_empty_value = false, &$has_translation = null) {
- static $cache = null;
- if (isset($cache[$context][$name])) {
- return $cache[$context][$name];
- }
- icl_register_string($context, $name, $original_value, $allow_empty_value);
- $cache[$context][$name] = icl_t($context, $name, $original_value, $has_translation);
- return $cache[$context][$name];
- }
- function icl_st_is_registered_string($context, $name){
- global $wpdb;
- static $cache = array();
- if(isset($cache[$context][$name])){
- $string_id = $cache[$context][$name];
- }else{
- $string_id = $wpdb->get_var("
- SELECT id
- FROM {$wpdb->prefix}icl_strings WHERE context='".$wpdb->escape($context)."' AND name='".$wpdb->escape($name)."'");
- $cache[$context][$name] = $string_id;
- }
- return $string_id;
- }
- function icl_st_string_has_translations($context, $name){
- global $wpdb;
- $sql = "
- SELECT COUNT(st.id)
- FROM {$wpdb->prefix}icl_string_translations st
- JOIN {$wpdb->prefix}icl_strings s ON s.id=st.string_id
- WHERE s.name='".$wpdb->escape($name)."' AND s.context='".$wpdb->escape($context)."'
- ";
- return $wpdb->get_var($sql);
- }
- function icl_rename_string($context, $old_name, $new_name){
- global $wpdb;
- $wpdb->update($wpdb->prefix.'icl_strings', array('name'=>$new_name), array('context'=>$context, 'name'=>$old_name));
- }
- function icl_update_string_status($string_id){
- global $wpdb, $sitepress, $sitepress_settings;
- $st = $wpdb->get_results($wpdb->prepare("SELECT language, status FROM {$wpdb->prefix}icl_string_translations WHERE string_id=%d", $string_id));
-
- if($st){
- foreach($st as $t){
- if($sitepress_settings['st']['strings_language'] != $t->language){
- $translations[$t->language] = $t->status;
- }
- }
-
- $active_languages = $sitepress->get_active_languages();
-
- if(empty($translations) || max($translations) == ICL_STRING_TRANSLATION_NOT_TRANSLATED){
- $status = ICL_STRING_TRANSLATION_NOT_TRANSLATED;
- }elseif( in_array(ICL_STRING_TRANSLATION_WAITING_FOR_TRANSLATOR,$translations) ){
- $status = ICL_STRING_TRANSLATION_WAITING_FOR_TRANSLATOR;
- }elseif(count($translations) < count($active_languages) - intval(in_array($sitepress_settings['st']['strings_language'], array_keys($active_languages)))){
- if(in_array(ICL_STRING_TRANSLATION_NEEDS_UPDATE,$translations)){
- $status = ICL_STRING_TRANSLATION_NEEDS_UPDATE;
- }elseif(in_array(ICL_STRING_TRANSLATION_COMPLETE,$translations)){
- $status = ICL_STRING_TRANSLATION_PARTIAL;
- }else{
- $status = ICL_STRING_TRANSLATION_NOT_TRANSLATED;
- }
- }elseif(ICL_STRING_TRANSLATION_NEEDS_UPDATE == array_unique($translations)){
- $status = ICL_STRING_TRANSLATION_NEEDS_UPDATE;
- }else{
- if(in_array(ICL_STRING_TRANSLATION_NEEDS_UPDATE,$translations)){
- $status = ICL_STRING_TRANSLATION_NEEDS_UPDATE;
- }elseif(in_array(ICL_STRING_TRANSLATION_NOT_TRANSLATED,$translations)){
- $status = ICL_STRING_TRANSLATION_PARTIAL;
- }else{
- $status = ICL_STRING_TRANSLATION_COMPLETE;
- }
- }
- }else{
- $status = ICL_STRING_TRANSLATION_NOT_TRANSLATED;
- }
- $wpdb->update($wpdb->prefix.'icl_strings', array('status'=>$status), array('id'=>$string_id));
- return $status;
- }
- function icl_update_string_status_all(){
- global $wpdb;
- $res = $wpdb->get_col("SELECT id FROM {$wpdb->prefix}icl_strings");
- foreach($res as $id){
- icl_update_string_status($id);
- }
- }
- function icl_unregister_string($context, $name){
- global $wpdb;
- $string_id = $wpdb->get_var("SELECT id FROM {$wpdb->prefix}icl_strings WHERE context='".$wpdb->escape($context)."' AND name='".$wpdb->escape($name)."'");
- if($string_id){
- $wpdb->query("DELETE FROM {$wpdb->prefix}icl_strings WHERE id=" . $string_id);
- $wpdb->query("DELETE FROM {$wpdb->prefix}icl_string_translations WHERE string_id=" . $string_id);
- $wpdb->query("DELETE FROM {$wpdb->prefix}icl_string_positions WHERE string_id=" . $string_id);
- }
- do_action('icl_st_unregister_string', $string_id);
- }
- function __icl_unregister_string_multi($arr){
- global $wpdb;
- $str = join(',', array_map('intval', $arr));
- $wpdb->query("
- DELETE s.*, t.* FROM {$wpdb->prefix}icl_strings s LEFT JOIN {$wpdb->prefix}icl_string_translations t ON s.id = t.string_id
- WHERE s.id IN ({$str})");
- $wpdb->query("DELETE FROM {$wpdb->prefix}icl_string_positions WHERE string_id IN ({$str})");
- do_action('icl_st_unregister_string_multi', $arr);
- }
- function icl_t($context, $name, $original_value=false, &$has_translation=null, $dont_auto_register = false){
- global $wpdb, $sitepress, $sitepress_settings;
-
- // if the default language is not set up return
- if(!isset($sitepress_settings['existing_content_language_verified'])){
- if(isset($has_translation)) $has_translation = false;
- return $original_value !== false ? $original_value : $name;
- }
-
- if(defined('DOING_AJAX')){
- $current_language = $sitepress->get_language_cookie();
- }elseif(is_admin()){
- $current_language = $sitepress->get_admin_language();
- }else{
- $current_language = $sitepress->get_current_language();
- }
- $default_language = !empty($sitepress_settings['st']['strings_language']) ? $sitepress_settings['st']['strings_language'] : $sitepress->get_default_language();
-
- if($current_language == $default_language && $original_value){
-
- $ret_val = $original_value;
- if(isset($has_translation)) $has_translation = false;
-
- }else{
- $result = icl_t_cache_lookup($context, $name);
-
- $is_string_change =
- $result !== false && (
- $result['translated'] && $result['original'] != $original_value ||
- !$result['translated'] && $result['value'] != $original_value
- );
-
- if (($result === false || $is_string_change) && !is_admin() && !$dont_auto_register && $context != 'Widgets') {
- // See if we should auto register the strings.
- if (isset($sitepress_settings['st']['icl_st_auto_reg'])) {
- $auto_reg = $sitepress_settings['st']['icl_st_auto_reg'];
- } else {
- $auto_reg = 'disabled';
- }
-
- switch ($auto_reg) {
- case 'auto-admin':
- if (current_user_can('manage_options')) {
- icl_register_string($context, $name, $original_value);
- }
- break;
-
- case 'auto-always':
- icl_register_string($context, $name, $original_value);
- break;
- }
- }
- if($result === false || is_array($result) && !$result['translated'] && $original_value){
- $ret_val = $original_value;
- if(isset($has_translation)) $has_translation = false;
- }else{
- $ret_val = $result['value'];
- if(isset($has_translation)) $has_translation = true;
- }
-
- }
- return $ret_val;
- }
- function icl_add_string_translation($string_id, $language, $value = null, $status = false, $translator_id = null){
- global $wpdb;
-
- $res = $wpdb->get_row("SELECT id, value, status FROM {$wpdb->prefix}icl_string_translations WHERE string_id='".$wpdb->escape($string_id)."' AND language='".$wpdb->escape($language)."'");
-
- // the same string should not be sent two times to translation
- if(isset($res->status) && $res->status == ICL_STRING_TRANSLATION_WAITING_FOR_TRANSLATOR && is_null($value)){
- return false;
- }
-
- if($res){
- $st_id = $res->id;
- $st_update = array();
- if(!is_null($value) && $value != $res->value){ // null $value is for sending to translation. don't override existing.
- $st_update['value'] = $value;
- }
- if($status){
- $st_update['status'] = $status;
- }elseif($status === ICL_STRING_TRANSLATION_NOT_TRANSLATED){
- $st_update['status'] = ICL_STRING_TRANSLATION_NOT_TRANSLATED;
- }
-
- if(!empty($st_update)){
- if(!is_null($translator_id)){
- $st_update['translator_id'] = get_current_user_id();
- }
- $st_update['translation_date'] = current_time("mysql");
- $wpdb->update($wpdb->prefix.'icl_string_translations', $st_update, array('id'=>$st_id));
- }
- }else{
- if(!$status){
- $status = ICL_STRING_TRANSLATION_NOT_TRANSLATED;
- }
- $st = array(
- 'string_id' => $string_id,
- 'language' => $language,
- 'status' => $status
- );
- if(!is_null($value)){
- $st['value'] = $value;
- }
- if(!is_null($translator_id)){
- $st_update['translator_id'] = get_current_user_id();
- }
- $wpdb->insert($wpdb->prefix.'icl_string_translations', $st);
- $st_id = $wpdb->insert_id;
- }
- $GLOBALS['ICL_Pro_Translation']->_content_fix_links_to_translated_content($st_id, $language, 'string');
-
- icl_update_string_status($string_id);
-
- do_action('icl_st_add_string_translation', $st_id);
-
- return $st_id;
- }
- function icl_get_string_id($string, $context){
- global $wpdb;
- $id = (int) $wpdb->get_var($wpdb->prepare("SELECT id FROM {$wpdb->prefix}icl_strings WHERE value=%s AND context=%s", $string, $context));
- return $id;
- }
- function icl_get_string_translations($offset=0){
- global $wpdb, $sitepress, $sitepress_settings, $wp_query, $icl_st_string_translation_statuses;
- $string_translations = array();
-
- $extra_cond = "";
- if(icl_st_is_translator() && isset($_GET['status']) && preg_match("#".ICL_STRING_TRANSLATION_WAITING_FOR_TRANSLATOR."-(.+)#", $_GET['status'], $matches)){
- $status_filter = ICL_STRING_TRANSLATION_WAITING_FOR_TRANSLATOR;
- $status_filter_lang = $matches[1];
- $lcode_alias = str_replace('-', '', $status_filter_lang);
- $extra_cond .= " AND str_{$lcode_alias}.language = '{$status_filter_lang}' ";
- }else{
- $status_filter = isset($_GET['status']) ? intval($_GET['status']) : false;
- }
-
- $search_filter = isset($_GET['search']) ? $_GET['search'] : false;
- $exact_match = isset($_GET['em']) ? $_GET['em'] == 1 : false;
-
- if($status_filter !== false){
- if($status_filter == ICL_STRING_TRANSLATION_COMPLETE){
- $extra_cond .= " AND s.status = " . ICL_STRING_TRANSLATION_COMPLETE;
- }elseif($status_filter == ICL_STRING_TRANSLATION_WAITING_FOR_TRANSLATOR){
- ; // do nothing
- }else{
- $extra_cond .= " AND status IN (" . ICL_STRING_TRANSLATION_PARTIAL . "," . ICL_STRING_TRANSLATION_NEEDS_UPDATE . "," . ICL_STRING_TRANSLATION_NOT_TRANSLATED . "," . ICL_STRING_TRANSLATION_WAITING_FOR_TRANSLATOR . ")";
- }
- }
-
- if($search_filter != false){
- if($exact_match){
- $extra_cond .= " AND s.value = '". $wpdb->escape($search_filter)."' ";
- }else{
- $extra_cond .= " AND s.value LIKE '%". $wpdb->escape($search_filter)."%' ";
- }
- }
-
- $context_filter = isset($_GET['context']) ? $_GET['context'] : false;
- if($context_filter !== false){
- $extra_cond .= " AND s.context = '" . $wpdb->escape($context_filter) . "'";
- }
-
- if(isset($_GET['show_results']) && $_GET['show_results']=='all'){
- $limit = 9999;
- $offset = 0;
- }else{
- $limit = $sitepress_settings['st']['strings_per_page'];
- if(!isset($_GET['paged'])) $_GET['paged'] = 1;
- $offset = ($_GET['paged']-1)*$limit;
- }
-
- /* TRANSLATOR - START */
- if(icl_st_is_translator()){
-
- $user_lang_pairs = get_user_meta(get_current_user_id(), $wpdb->prefix.'language_pairs', true);
-
- if(!empty($status_filter_lang)){
-
- $_joins = $_sels = $_where = array();
- foreach($sitepress->get_active_languages() as $l){
- if($l['code'] == $sitepress_settings['st']['strings_language']) continue;
- $lcode_alias = str_replace('-', '', $l['code']);
- $_sels[] = "str_{$lcode_alias}.id AS id_{$lcode_alias},
- str_{$lcode_alias}.status AS status_{$lcode_alias},
- str_{$lcode_alias}.value AS value_{$lcode_alias},
- str_{$lcode_alias}.translator_id AS translator_{$lcode_alias},
- str_{$lcode_alias}.translation_date AS date_{$lcode_alias}
- ";
- $_joins[] = " LEFT JOIN {$wpdb->prefix}icl_string_translations str_{$lcode_alias} ON str_{$lcode_alias}.string_id = s.id AND str_{$lcode_alias}.language = '{$l['code']}'";
- }
-
- $sql = "
- SELECT SQL_CALC_FOUND_ROWS s.id AS string_id, s.language AS string_language, s.context, s.name, s.value, s.status,
- " . join(", ", $_sels) . "
- FROM {$wpdb->prefix}icl_strings s
- " . join("\n", $_joins) . "
- WHERE
- str_{$status_filter_lang}.status = ".ICL_STRING_TRANSLATION_WAITING_FOR_TRANSLATOR." AND
- (str_{$status_filter_lang}.translator_id IS NULL OR str_{$status_filter_lang}.translator_id = ".get_current_user_id().")
- {$extra_cond}
- ORDER BY string_id DESC
- LIMIT {$offset},{$limit}
- ";
- //echo '<pre>' . print_r($sql,1) . '</pre>';
- $res = $wpdb->get_results($sql, ARRAY_A);
-
- }else{
- $_joins = $_sels = $_where = array();
-
- foreach($sitepress->get_active_languages() as $l){
-
- if($l['code'] == $sitepress_settings['st']['strings_language']
- || empty($user_lang_pairs[$sitepress_settings['st']['strings_language']][$l['code']])) continue;
- $lcode_alias = str_replace('-', '', $l['code']);
- $lcode_alias = str_replace('-', '', $l['code']);
-
- $_sels[] = "str_{$lcode_alias}.id AS id_{$lcode_alias},
- str_{$lcode_alias}.status AS status_{$lcode_alias},
- str_{$lcode_alias}.value AS value_{$lcode_alias},
- str_{$lcode_alias}.translator_id AS translator_{$lcode_alias},
- str_{$lcode_alias}.translation_date AS date_{$lcode_alias}
- ";
- $_joins[] = "LEFT JOIN {$wpdb->prefix}icl_string_translations str_{$lcode_alias} ON str_{$lcode_alias}.string_id = s.id AND str_{$lcode_alias}.language='{$l['code']}'";
-
- if($status_filter == ICL_STRING_TRANSLATION_COMPLETE){
- $_where[] .= " AND str_{$lcode_alias}.status = " . ICL_STRING_TRANSLATION_COMPLETE;
- }else{
- if(empty($_lwhere)){
- $_lwhere = ' AND (';
- foreach($sitepress->get_active_languages() as $l2){
- if($l2['code'] == $sitepress_settings['st']['strings_language'] || empty($user_lang_pairs[$sitepress_settings['st']['strings_language']][$l2['code']])) continue;
- $l2code_alias = str_replace('-', '', $l2['code']);
- $_lwheres[] = " str_{$l2code_alias}.status = " . ICL_STRING_TRANSLATION_WAITING_FOR_TRANSLATOR . " OR
- str_{$l2code_alias}.translator_id = " . get_current_user_id() ;
- }
- $_lwhere .= join(' OR ', $_lwheres ) . ')';
- $_where[] = $_lwhere;
- }
- }
-
- }
-
-
- $sql = "
- SELECT SQL_CALC_FOUND_ROWS s.id AS string_id, s.language AS string_language, s.context, s.name, s.value, s.status, ".
- join(', ', $_sels) . "
- FROM {$wpdb->prefix}icl_strings s " . join("\n", $_joins) . "
- WHERE s.language = '{$sitepress_settings['st']['strings_language']}' ".join(' ', $_where) . "
- {$extra_cond}
- ORDER BY s.id DESC
- LIMIT {$offset},{$limit}
- ";
- $res = $wpdb->get_results($sql, ARRAY_A);
- }
-
- $wp_query->found_posts = $wpdb->get_var("SELECT FOUND_ROWS()");
- $wp_query->query_vars['posts_per_page'] = $limit;
- $wp_query->max_num_pages = ceil($wp_query->found_posts/$limit);
-
- if($res){
- if(!empty($status_filter_lang)){
- foreach($res as $row){
-
- $_translations = array();
- foreach($sitepress->get_active_languages() as $l){
- if($l['code'] == $sitepress_settings['st']['strings_language']) continue;
- $lcode_alias = str_replace('-', '', $l['code']);
- if($row['id_'. $lcode_alias]){
- $_translations[$l['code']] = array(
- 'id' => $row['id_'. $lcode_alias],
- 'status' => $row['status_'. $lcode_alias],
- 'language' => $l['code'],
- 'value' => $row['value_'. $lcode_alias],
- 'translator_id' => $row['translator_'. $lcode_alias],
- 'translation_date' => $row['date_'. $lcode_alias]
- );
- }
- }
-
-
- $string_translations[$row['string_id']] = array(
- 'string_id' => $row['string_id'],
- 'string_language' => $row['string_language'],
- 'context' => $row['context'],
- 'name' => $row['name'],
- 'value' => $row['value'],
- 'status' => ICL_STRING_TRANSLATION_WAITING_FOR_TRANSLATOR,
- 'translations' => $_translations
- );
- }
- //echo '<pre>' . print_r($string_translations,1) . '</pre>';
- }else{
- foreach($res as $row){
- $_translations = array();
-
- $_status = ICL_STRING_TRANSLATION_NOT_TRANSLATED;
- $_statuses = array();
- foreach($sitepress->get_active_languages() as $l){
- if($l['code'] == $sitepress_settings['st']['strings_language'] || empty($user_lang_pairs[$sitepress_settings['st']['strings_language']][$l['code']])) continue;
- $lcode_alias = str_replace('-', '', $l['code']);
- if($row['id_'. $lcode_alias]){
- $_translations[$l['code']] = array(
- 'id' => $row['id_'. $lcode_alias],
- 'status' => $row['status_'. $lcode_alias],
- 'language' => $l['code'],
- 'value' => $row['value_'. $lcode_alias],
- 'translator_id' => $row['translator_'. $lcode_alias],
- 'translation_date' => $row['date_'. $lcode_alias]
- );
- }
-
- $_statuses[$l['code']] = @intval($row['status_'. $lcode_alias]);
-
- if($row['status_'. $lcode_alias] == ICL_STRING_TRANSLATION_WAITING_FOR_TRANSLATOR){
- $_status == ICL_STRING_TRANSLATION_WAITING_FOR_TRANSLATOR;
- }
-
- }
- $_statuses = array_values($_statuses);
- $_statuses = array_unique($_statuses);
-
- if($_statuses == array(ICL_STRING_TRANSLATION_NOT_TRANSLATED)){
- $_status = ICL_STRING_TRANSLATION_NOT_TRANSLATED;
- }elseif($_statuses == array(ICL_STRING_TRANSLATION_COMPLETE, ICL_STRING_TRANSLATION_NOT_TRANSLATED)){
- $_status = ICL_STRING_TRANSLATION_PARTIAL;
- }elseif($_statuses == array(ICL_STRING_TRANSLATION_COMPLETE)){
- $_status = ICL_STRING_TRANSLATION_COMPLETE;
- }elseif(in_array(ICL_STRING_TRANSLATION_WAITING_FOR_TRANSLATOR, $_statuses) || in_array(ICL_STRING_TRANSLATION_NEEDS_UPDATE, $_statuses)){
- $_status = ICL_STRING_TRANSLATION_WAITING_FOR_TRANSLATOR;
- }
-
-
- $string_translations[$row['string_id']] = array(
- 'string_id' => $row['string_id'],
- 'string_language' => $row['string_language'],
- 'context' => $row['context'],
- 'name' => $row['name'],
- 'value' => $row['value'],
- 'status' => $_status,
- 'translations' => $_translations
- );
- }
-
- }
-
- }
- /* TRANSLATOR - END */
- }else{
-
- // removed check for language = default lang
- if($status_filter != ICL_STRING_TRANSLATION_WAITING_FOR_TRANSLATOR){
- $res = $wpdb->get_results("
- SELECT SQL_CALC_FOUND_ROWS id AS string_id, language AS string_language, context, name, value, status
- FROM {$wpdb->prefix}icl_strings s
- WHERE
- 1
- {$extra_cond}
- ORDER BY string_id DESC
- LIMIT {$offset},{$limit}
- ", ARRAY_A);
- }else{
- $res = $wpdb->get_results("
- SELECT SQL_CALC_FOUND_ROWS s.id AS string_id, s.language AS string_language, s.context, s.name, s.value, " . ICL_STRING_TRANSLATION_WAITING_FOR_TRANSLATOR . " AS status
- FROM {$wpdb->prefix}icl_strings s
- JOIN {$wpdb->prefix}icl_string_translations str ON str.string_id = s.id
- WHERE
- str.status = " . ICL_STRING_TRANSLATION_WAITING_FOR_TRANSLATOR . "
- {$extra_cond}
- ORDER BY string_id DESC
- LIMIT {$offset},{$limit}
- ", ARRAY_A);
- }
-
- $wp_query->found_posts = $wpdb->get_var("SELECT FOUND_ROWS()");
- $wp_query->query_vars['posts_per_page'] = $limit;
- $wp_query->max_num_pages = ceil($wp_query->found_posts/$limit);
-
- if($res){
- $extra_cond = '';
- if(isset($_GET['translation_language'])){
- $extra_cond .= " AND language='".$wpdb->escape($_GET['translation_language'])."'";
- }
-
- foreach($res as $row){
- $string_translations[$row['string_id']] = $row;
- $tr = $wpdb->get_results("
- SELECT id, language, status, value, translator_id, translation_date
- FROM {$wpdb->prefix}icl_string_translations
- WHERE string_id={$row['string_id']} {$extra_cond}
- ", ARRAY_A);
- if($tr){
- foreach($tr as $t){
- $string_translations[$row['string_id']]['translations'][$t['language']] = $t;
- }
- }
-
- }
- }
- }
-
- return $string_translations;
- }
- function icl_get_relative_translation_status($string_id, $translator_id){
- global $wpdb, $sitepress, $sitepress_settings;
-
- $user_lang_pairs = get_user_meta(get_current_user_id(), $wpdb->prefix.'language_pairs', true);
-
- $src_langs = array_intersect(array_keys($sitepress->get_active_languages()), array_keys($user_lang_pairs[$sitepress_settings['st']['strings_language']]));
-
- if(empty($src_langs)) return ICL_STRING_TRANSLATION_NOT_TRANSLATED;
-
- $sql = "SELECT st.status
- FROM {$wpdb->prefix}icl_strings s
- JOIN {$wpdb->prefix}icl_string_translations st ON s.id = st.string_id
- WHERE st.language IN ('" . join("','", $src_langs) . "') AND s.id = %d
- ";
- $statuses = $wpdb->get_col($wpdb->prepare($sql, $string_id));
-
- $status = ICL_STRING_TRANSLATION_NOT_TRANSLATED;
- $one_incomplete = false;
- foreach($statuses as $s){
- if($s == ICL_STRING_TRANSLATION_COMPLETE){
- $status = ICL_STRING_TRANSLATION_COMPLETE;
- }elseif($s == ICL_STRING_TRANSLATION_NOT_TRANSLATED){
- $one_incomplete = true;
- }
- }
-
- if($status == ICL_STRING_TRANSLATION_COMPLETE && $one_incomplete){
- $status = ICL_STRING_TRANSLATION_PARTIAL;
- }
-
- return $status;
-
- }
- function icl_get_strigs_tracked_in_pages($string_translations){
- global $wpdb;
- // get string position in page - if found
- $found_strings = $strings_in_page = array();
- foreach(array_keys((array)$string_translations) as $string_id){
- $found_strings[] = $string_id;
- }
- if($found_strings){
- $res = $wpdb->get_results("
- SELECT kind, string_id FROM {$wpdb->prefix}icl_string_positions
- WHERE string_id IN (".implode(',', $found_strings).")");
- foreach($res as $row){
- $strings_in_page[$row->kind][$row->string_id] = true;
- }
- }
- return $strings_in_page;
- }
- function icl_sw_filters_blogname($val){
- return icl_t('WP', 'Blog Title', $val);
- }
- function icl_sw_filters_blogdescription($val){
- return icl_t('WP', 'Tagline', $val);
- }
- function icl_sw_filters_widget_title($val){
- return icl_t('Widgets', 'widget title - ' . md5($val) , $val);
- }
- function icl_sw_filters_widget_text($val){
- $val = icl_t('Widgets', 'widget body - ' . md5($val) , $val);
- return $val;
- }
- function icl_sw_filters_gettext($translation, $text, $domain, $name = false){
- global $sitepress_settings;
- $has_translation = 0;
-
- $dbt = debug_backtrace();
- $dbt4 = @str_replace('\\','/',$dbt[4]['file']);
- $wp_plugin_dir = str_replace('\\','/',WP_PLUGIN_DIR);
- $wpmu_plugin_dir = str_replace('\\','/',WPMU_PLUGIN_DIR);
-
- if(0 === strpos($dbt4, $wp_plugin_dir)){
- if(dirname($dbt4) == $wp_plugin_dir){
- $plugin_folder = basename(str_replace($wp_plugin_dir, '', $dbt4));
- }else{
- $exp = explode('/', ltrim(str_replace($wp_plugin_dir, '', $dbt4),'/'));
- $plugin_folder = $exp[0];
- }
- $context = 'plugin ' . $plugin_folder;
- }elseif(0 === strpos($dbt4, $wpmu_plugin_dir)){
- $context = ($domain != 'default') ? 'plugin ' . $domain : 'plugin';
- }else{
- $context = ($domain != 'default') ? 'theme ' . $domain : 'WordPress';
- }
-
- // track strings if the user has enabled this and if it's and editor or admin
- if(isset($sitepress_settings['st']['track_strings']) && $sitepress_settings['st']['track_strings'] && current_user_can('edit_others_posts')){
- icl_st_track_string($text, $context, ICL_STRING_TRANSLATION_STRING_TRACKING_TYPE_PAGE);
- }
-
- if(empty($name)){
- $name = md5($text);
- }
- $ret_translation = icl_t($context, $name, $text, $has_translation);
- if(false === $has_translation){
- $ret_translation = $translation;
- }
-
- if(isset($_GET['icl_string_track_value']) && isset($_GET['icl_string_track_context'])
- && stripslashes($_GET['icl_string_track_context']) == $context && stripslashes($_GET['icl_string_track_value']) == $text){
- $ret_translation = '<span style="background-color:'.$sitepress_settings['st']['hl_color'].'">' . $ret_translation . '</span>';
-
- }
-
- return $ret_translation;
- }
- function icl_sw_filters_gettext_with_context($translation, $text, $_gettext_context, $domain){
- return icl_sw_filters_gettext($translation, $text, $domain, $_gettext_context . ': ' . $text);
- }
- function icl_sw_filters_ngettext($translation, $single, $plural, $number, $domain, $_gettext_context = false){
- if($number == 1){
- return @sprintf(icl_sw_filters_gettext($translation, $single, $domain, $_gettext_context), $number);
- }else{
- return @sprintf(icl_sw_filters_gettext($translation, $plural, $domain, $_gettext_context), $number);
- }
- }
- function icl_sw_filters_nxgettext($translation, $single, $plural, $number, $_gettext_context, $domain){
- return icl_sw_filters_ngettext($translation, $single, $plural, $number, $domain, $_gettext_context);
- }
- function icl_st_author_first_name_filter($value, $user_id){
- global $sitepress_settings;
-
- if(false === $user_id){
- global $authordata;
- $user_id = $authordata->data->ID;
- }
-
- $user = new WP_User($user_id);
- if ( is_array( $user->roles ) && array_intersect($user->roles, (array)$sitepress_settings['st']['translated-users'])){
- $value = icl_st_translate_author_fields('first_name', $value, $user_id);
- }
-
- return $value;
- }
- function icl_st_author_last_name_filter($value, $user_id){
- global $sitepress_settings;
-
- if(false === $user_id){
- global $authordata;
- $user_id = $authordata->data->ID;
- }
-
- $user = new WP_User($user_id);
- if ( is_array( $user->roles ) && array_intersect($user->roles, (…
Large files files are truncated, but you can click here to view the full file