$js){
if(isset($js['javascript']) && !empty($js['javascript'])){
echo $js['javascript'];
}else if(isset($js['src'])){
$src = $js['src'];
if($enqueue_script){
$handle = isset($js['handle']) ? $js['handle'] : (is_string($k) ? $k : 'qtranslate-admin-js-'.(++$cnt) );
$ver = isset($js['ver']) ? $js['ver'] : QTX_VERSION;
$url = content_url($src);
wp_register_script( $handle, $url, $deps, $ver, true);
wp_enqueue_script( $handle );
$deps[] = $handle;
}else{
$fp = WP_CONTENT_DIR . '/' . $src;
readfile($fp);
}
}
}
}
function qtranxf_detect_admin_language($url_info) {
global $q_config;
$cs=null;
$lang=null;
/** @since 3.2.9.9.6
* Detect language from $_POST['WPLANG'].
*/
if(isset($_POST['WPLANG'])){
// User is switching the language using "Site Language" field on page /wp-admin/options-general.php
$wplang = sanitize_text_field($_POST['WPLANG']);
if(empty($wplang)) $wplang = 'en';
foreach($q_config['enabled_languages'] as $language){
if($q_config['locale'][$language] != $wplang) continue;
$lang = $language;
break;
}
if(!$lang){
$lang=substr($wplang,0,2);
$lang=qtranxf_resolveLangCase($lang,$cs);
}
}
if(!$lang && isset($_COOKIE[QTX_COOKIE_NAME_ADMIN])){
$lang=qtranxf_resolveLangCase($_COOKIE[QTX_COOKIE_NAME_ADMIN],$cs);
$url_info['lang_cookie_admin'] = $lang;
}
if(!$lang){
$lang = $q_config['default_language'];
}
$url_info['doing_front_end'] = false;
$url_info['lang_admin'] = $lang;
return $url_info;
}
add_filter('qtranslate_detect_admin_language','qtranxf_detect_admin_language');
/**
* @return bool true if $a and $b are equal.
*/
function qtranxf_array_compare($a,$b) {
if( !is_array($a) || !is_array($b) ) return false;
if(count($a) != count($b)) return false;
foreach($a as $k => $v){
if(!isset($b[$k])) return false;
if(is_array($v)){
if(!qtranxf_array_compare($v,$b[$k])) return false;
}else{
if($b[$k] !== $v) return false;
}
}
return true;
}
function qtranxf_join_texts($texts,$sep) {
switch($sep){
//case '<': return qtranxf_join_c($texts);//no longer in use
case 'byline': return qtranxf_join_byline($texts);
case '{': return qtranxf_join_s($texts);
default: return qtranxf_join_b($texts);
}
}
function qtranxf_convert_to_b($text) {
$blocks = qtranxf_get_language_blocks($text);
if( count($blocks) > 1 ){
foreach($blocks as $key => $b){
if(empty($b)) unset($blocks[$key]);
}
}
if( count($blocks) <= 1 )
return $text;
$text='';
$lang = false;
$lang_closed = true;
foreach($blocks as $block) {
if(preg_match("#^$#ism", $block, $matches)) {
$lang_closed = false;
$lang = $matches[1];
$text .= '[:'.$lang.']';
continue;
} elseif(preg_match("#^\[:([a-z]{2})\]$#ism", $block, $matches)) {
$lang_closed = false;
$lang = $matches[1];
$text .= '[:'.$lang.']';
continue;
}
switch($block){
case '[:]':
case '':
$lang = false;
break;
default:
if( !$lang && !$lang_closed ){
$text .= '[:]';
$lang_closed = true;
}
$text .= $block;
break;
}
}
$text .= '[:]';
return $text;
}
function qtranxf_convert_to_b_no_closing($text) {
$blocks = qtranxf_get_language_blocks($text);
if( count($blocks) > 1 ){
foreach($blocks as $key => $b){
if(empty($b)) unset($blocks[$key]);
}
}
if( count($blocks) > 1 ){
$texts = qtranxf_split_blocks($blocks);
$text = qtranxf_join_b_no_closing($texts);
}
return $text;
}
function qtranxf_convert_to_c($text) {
$blocks = qtranxf_get_language_blocks($text);
if( count($blocks) > 1 ){
foreach($blocks as $key => $b){
if(empty($b)) unset($blocks[$key]);
}
}
if( count($blocks) > 1 ){
$texts = qtranxf_split_blocks($blocks);
$text = qtranxf_join_c($texts);
}
return $text;
}
function qtranxf_convert_to_b_deep($text) {
if(is_array($text)) {
foreach($text as $key => $t) {
$text[$key] = qtranxf_convert_to_b_deep($t);
}
return $text;
}
if( is_object($text) || $text instanceof __PHP_Incomplete_Class ) {
foreach(get_object_vars($text) as $key => $t) {
$text->$key = qtranxf_convert_to_b_deep($t);
}
return $text;
}
if(!is_string($text) || empty($text))
return $text;
return qtranxf_convert_to_b($text);
}
function qtranxf_convert_to_b_no_closing_deep($text) {
if(is_array($text)) {
foreach($text as $key => $t) {
$text[$key] = qtranxf_convert_to_b_no_closing_deep($t);
}
return $text;
}
if( is_object($text) || $text instanceof __PHP_Incomplete_Class ) {
foreach(get_object_vars($text) as $key => $t) {
$text->$key = qtranxf_convert_to_b_no_closing_deep($t);
}
return $text;
}
if(!is_string($text) || empty($text))
return $text;
return qtranxf_convert_to_b_no_closing($text);
}
function qtranxf_convert_database($action){
global $wpdb;
$wpdb->show_errors(); @set_time_limit(0);
qtranxf_convert_database_options($action);
qtranxf_convert_database_posts($action);
qtranxf_convert_database_postmeta($action);
switch($action){
case 'b_only':
return __('Database has been converted to square bracket format.', 'qtranslate').'
'.__('Note: custom entries are not touched.', 'qtranslate');
case 'c_dual':
return __('Database has been converted to legacy dual-tag format.', 'qtranslate').'
'.__('Note: custom entries are not touched.', 'qtranslate');
default: return '';
}
}
function qtranxf_convert_database_options($action){
global $wpdb;
$wpdb->show_errors();
$result = $wpdb->get_results('SELECT option_id, option_value FROM '.$wpdb->options);
if(!$result) return;
switch($action){
case 'b_only':
foreach($result as $row) {
if(!qtranxf_isMultilingual($row->option_value)) continue;
$value = maybe_unserialize($row->option_value);
$value_converted=qtranxf_convert_to_b_deep($value);
$value_serialized = maybe_serialize($value_converted);
if($value_serialized === $row->option_value) continue;
//Since 3.2-b3: Replaced mysql_real_escape_string with $wpdb->prepare
$wpdb->query($wpdb->prepare('UPDATE '.$wpdb->options.' set option_value = %s WHERE option_id = %d', $value_serialized, $row->option_id));
}
break;
case 'c_dual':
foreach($result as $row) {
if(!qtranxf_isMultilingual($row->option_value)) continue;
$value = maybe_unserialize($row->option_value);
$value_converted=qtranxf_convert_to_b_no_closing_deep($value);
$value_serialized = maybe_serialize($value_converted);
if($value_serialized === $row->option_value) continue;
//Since 3.2-b3: Replaced mysql_real_escape_string with $wpdb->prepare
$wpdb->query($wpdb->prepare('UPDATE '.$wpdb->options.' set option_value = %s WHERE option_id = %d', $value_serialized, $row->option_id));
}
break;
default: break;
}
}
function qtranxf_convert_database_posts($action){
global $wpdb;
$result = $wpdb->get_results('SELECT ID, post_title, post_content, post_excerpt FROM '.$wpdb->posts);
if(!$result) return;
switch($action){
case 'b_only':
foreach($result as $row) {
$title=qtranxf_convert_to_b($row->post_title);
$content=qtranxf_convert_to_b($row->post_content);
$excerpt=qtranxf_convert_to_b($row->post_excerpt);
if( $title==$row->post_title && $content==$row->post_content && $excerpt==$row->post_excerpt ) continue;
//Since 3.2-b3: Replaced mysql_real_escape_string with $wpdb->prepare
$wpdb->query($wpdb->prepare('UPDATE '.$wpdb->posts.' set post_content = %s, post_title = %s, post_excerpt = %s WHERE ID = %d',$content, $title, $excerpt, $row->ID));
//$wpdb->query('UPDATE '.$wpdb->posts.' set post_content = "'.mysql_real_escape_string($content).'", post_title = "'.mysql_real_escape_string($title).'", post_excerpt = "'.mysql_real_escape_string($excerpt).'" WHERE ID='.$row->ID);
}
break;
case 'c_dual':
foreach($result as $row) {
$title=qtranxf_convert_to_c($row->post_title);
$content=qtranxf_convert_to_c($row->post_content);
$excerpt=qtranxf_convert_to_c($row->post_excerpt);
if( $title==$row->post_title && $content==$row->post_content && $excerpt==$row->post_excerpt ) continue;
//Since 3.2-b3: Replaced mysql_real_escape_string with $wpdb->prepare
$wpdb->query($wpdb->prepare('UPDATE '.$wpdb->posts.' set post_content = %s, post_title = %s, post_excerpt = %s WHERE ID = %d',$content, $title, $excerpt, $row->ID));
//$wpdb->query('UPDATE '.$wpdb->posts.' set post_content = "'.mysql_real_escape_string($content).'", post_title = "'.mysql_real_escape_string($title).'", post_excerpt = "'.mysql_real_escape_string($excerpt).'" WHERE ID='.$row->ID);
}
break;
default: break;
}
}
function qtranxf_convert_database_postmeta($action){
global $wpdb;
$result = $wpdb->get_results('SELECT meta_id, meta_value FROM '.$wpdb->postmeta);
if(!$result) return;
switch($action){
case 'b_only':
foreach($result as $row) {
if(!qtranxf_isMultilingual($row->meta_value)) continue;
$value = maybe_unserialize($row->meta_value);
$value_converted=qtranxf_convert_to_b_deep($value);
$value_serialized = maybe_serialize($value_converted);
if($value_serialized === $row->meta_value) continue;
$wpdb->query($wpdb->prepare('UPDATE '.$wpdb->postmeta.' set meta_value = %s WHERE meta_id = %d', $value_serialized, $row->meta_id));
}
break;
case 'c_dual':
foreach($result as $row) {
if(!qtranxf_isMultilingual($row->meta_value)) continue;
$value = maybe_unserialize($row->meta_value);
$value_converted=qtranxf_convert_to_b_no_closing_deep($value);
$value_serialized = maybe_serialize($value_converted);
if($value_serialized === $row->meta_value) continue;
$wpdb->query($wpdb->prepare('UPDATE '.$wpdb->postmeta.' set meta_value = %s WHERE meta_id = %d', $value_serialized, $row->meta_id));
}
break;
default: break;
}
}
function qtranxf_mark_default($text) {
global $q_config;
$blocks = qtranxf_get_language_blocks($text);
if( count($blocks) > 1 ) return $text;//already have other languages.
$content=array();
foreach($q_config['enabled_languages'] as $language) {
if($language == $q_config['default_language']) {
$content[$language] = $text;
}else{
$content[$language] = '';
}
}
return qtranxf_join_b($content);
}
function qtranxf_term_name_encoded($name) {
global $q_config;
if(isset($q_config['term_name'][$name])) {
$name = qtranxf_join_b($q_config['term_name'][$name]);
}
return $name;
}
function qtranxf_get_term_joined($obj,$taxonomy=null) {
global $q_config;
if(is_object($obj)) {
// object conversion
if(isset($q_config['term_name'][$obj->name])) {
//'[:'.$q_config['language'].']'.$obj->name
$obj->name = qtranxf_join_b($q_config['term_name'][$obj->name]);
//qtranxf_dbg_log('qtranxf_get_term_joined: object:',$obj);
}
}elseif(isset($q_config['term_name'][$obj])) {
$obj = qtranxf_join_b($q_config['term_name'][$obj]);
//'[:'.$q_config['language'].']'.$obj.
//qtranxf_dbg_echo('qtranxf_get_term_joined: string:',$obj,true);//never fired, we probably do not need it
}
return $obj;
}
/**
* @since 3.4.6.8
* @return string default language name of term $nm in langulage $lang
* @param string $lang two-letter language code to search for $nm
* @param string $nm name of term in language $lang
* @param string $taxonomy
*/
function qtranxf_find_term($lang, $term, $taxonomy=null) {
global $q_config;
if($lang != $q_config['default_language']){
foreach($q_config['term_name'] as $nm => $ts){
if(empty($ts[$lang])) continue;
if( $ts[$lang] == $term ) return $nm;
}
}
return $term;
}
/*
* @since 3.4.6.8
* @return string default language name of term $nm in langulage $lang
* @param string $lang two-letter language code to search for $nm
* @param string $nm name of term in language $lang
* @param string $taxonomy
*
function qtranxf_find_term_like($lang, $s, $taxonomy=null) {
global $q_config;
if($lang != $q_config['default_language']){
foreach($q_config['term_name'] as $nm => $ts){
if(empty($ts[$lang])) continue;
if(function_exists('mb_stripos'))
$p = stripos($ts[$lang],$s);
else
$p = stripos($ts[$lang],$s);
if( $p !== false) return $nm;
}
}
return $s;
} */
function qtranxf_get_terms_joined($terms, $taxonomy=null, $args=null) {
global $q_config;
if(is_array($terms)){
// handle arrays recursively
foreach($terms as $key => $term) {
$terms[$key] = qtranxf_get_terms_joined($term,$taxonomy);
}
}else{
$terms = qtranxf_get_term_joined($terms,$taxonomy);
}
return $terms;
}
function qtranxf_useAdminTermLibJoin($obj, $taxonomies=null, $args=null) {
global $pagenow;
//qtranxf_dbg_echo('qtranxf_useAdminTermLibJoin: $pagenow='.$pagenow);
//qtranxf_dbg_echo('qtranxf_useAdminTermLibJoin: $obj:',$obj);
//qtranxf_dbg_echo('qtranxf_useAdminTermLibJoin: $taxonomies:',$taxonomies);
//qtranxf_dbg_echo('qtranxf_useAdminTermLibJoin: $args:',$args);
switch($pagenow){
case 'nav-menus.php':
case 'edit-tags.php':
case 'term.php':
case 'edit.php':
return qtranxf_get_terms_joined($obj);
default: return qtranxf_useTermLib($obj);
}
}
add_filter('get_term', 'qtranxf_useAdminTermLibJoin', 5, 2);
add_filter('get_terms', 'qtranxf_useAdminTermLibJoin', 5, 3);
/*
* @since 3.4.6.8
*/
function qtranxf_admin_term_name($value, $term_id, $taxonomy = null, $context = null){
global $pagenow;
if( !empty($context) && $pagenow == 'edit.php' )
switch($context){
case 'display': return qtranxf_useCurrentLanguageIfNotFoundUseDefaultLanguage($value);
}
return $value;
}
add_filter('term_name', 'qtranxf_admin_term_name', 5, 4);//used in function sanitize_term_field
//does someone use it?
function qtranxf_useAdminTermLib($obj) {
//qtranxf_dbg_echo('qtranxf_useAdminTermLib: $obj: ',$obj,true);
if ($script_name==='/wp-admin/term.php' || ($script_name==='/wp-admin/edit-tags.php' &&
strstr($_SERVER['QUERY_STRING'], 'action=edit' )!==FALSE))
{
return $obj;
}
else
{
return qtranxf_useTermLib($obj);
}
}
//add_filter('get_term', 'qtranxf_useAdminTermLib',0);
//add_filter('get_terms', 'qtranxf_useAdminTermLib',0);
function qtranxf_updateTermLibrary() {
global $q_config;
if(!isset($_POST['action'])) return;
switch($_POST['action']) {
case 'editedtag':
case 'addtag':
case 'editedcat':
case 'addcat':
case 'add-cat':
case 'add-tag':
case 'add-link-cat':
if(isset($_POST['qtrans_term_'.$q_config['default_language']]) && $_POST['qtrans_term_'.$q_config['default_language']]!='') {
$default = htmlspecialchars(qtranxf_stripSlashesIfNecessary($_POST['qtrans_term_'.$q_config['default_language']]), ENT_NOQUOTES);
if(!isset($q_config['term_name'][$default]) || !is_array($q_config['term_name'][$default])) $q_config['term_name'][$default] = array();
foreach($q_config['enabled_languages'] as $lang) {
$_POST['qtrans_term_'.$lang] = qtranxf_stripSlashesIfNecessary($_POST['qtrans_term_'.$lang]);
if($_POST['qtrans_term_'.$lang]!='') {
$q_config['term_name'][$default][$lang] = htmlspecialchars($_POST['qtrans_term_'.$lang], ENT_NOQUOTES);
} else {
$q_config['term_name'][$default][$lang] = $default;
}
}
update_option('qtranslate_term_name',$q_config['term_name']);
}
break;
}
}
function qtranxf_stripSlashesIfNecessary($str) {
/**
* @since 3.2.9.8.4 WordPress now always supplies slashed data
*/
//if(1==get_magic_quotes_gpc()) {
$str = stripslashes($str);
//}
return $str;
}
function qtranxf_updateTermLibraryJoin() {
global $q_config;
if(!isset($_POST['action'])) return;
$action=$_POST['action'];
if(!isset($_POST['qtrans_term_field_name'])) return;
$field=$_POST['qtrans_term_field_name'];
$default_name_original=$_POST['qtrans_term_field_default_name'];
//qtranxf_dbg_log('$_POST:',$_POST);
$field_value = qtranxf_stripSlashesIfNecessary($_POST[$field]);
//qtranxf_dbg_log('$field_value='.$field_value);
$names=qtranxf_split($field_value);
//qtranxf_dbg_log('names=',$names);
$default_name=htmlspecialchars($names[$q_config['default_language']], ENT_NOQUOTES);
$_POST[$field]=$default_name;
if(empty($default_name))
return;//will generate error later from WP
foreach($names as $lang => $name){
$q_config['term_name'][$default_name_original][$lang] = htmlspecialchars($name, ENT_NOQUOTES);
}
if($default_name_original != $default_name){
$q_config['term_name'][$default_name]=$q_config['term_name'][$default_name_original];
unset($q_config['term_name'][$default_name_original]);
}
update_option('qtranslate_term_name',$q_config['term_name']);
}
function qtranxf_updateTranslations($type) {
global $q_config;
if(!isset($_POST[$type])) return;
}
/*
function qtranxf_edit_terms($term_id, $taxonomy){
//qtranxf_dbg_log('qtranxf_edit_terms: $name='.$name);
}
add_action('edit_terms','qtranxf_edit_terms');
//function qtranxf_gettext($translated_text, $text, $domain) {
function qtranxf_gettext($translated_text) {
//same as qtranxf_useCurrentLanguageIfNotFoundUseDefaultLanguage
$blocks = qtranxf_get_language_blocks($translated_text);
if(count($blocks)<=1)//no language is encoded in the $text, the most frequent case
return $translated_text;
global $q_config;
//qtranxf_dbg_log('qtranxf_gettext: $translated_text=',$translated_text,true);
return $translated_text;
//return qtranxf_use_block($q_config['language'], $blocks);
//return qtranxf_use($q_config['language'], $translated_text, false);
}
//function qtranxf_gettext_with_context($translated_text, $text, $context, $domain) {
function qtranxf_gettext_with_context($translated_text) {
return qtranxf_gettext($translated_text);
}
add_filter('gettext', 'qtranxf_gettext',0);
add_filter('gettext_with_context', 'qtranxf_gettext_with_context',0);
*/
function qtranxf_getLanguageEdit() {
global $q_config;
return isset($_COOKIE['qtrans_edit_language']) ? $_COOKIE['qtrans_edit_language'] : $q_config['language'];
}
/*
function qtranxf_language_columns($columns) {
return array(
'code' => _x('Code', 'Two-letter Language Code meant.', 'qtranslate'),
'flag' => __('Flag', 'qtranslate'),
'name' => __('Name', 'qtranslate'),
'status' => __('Action', 'qtranslate'),
'status2' => __('Edit', 'qtranslate'),
'status3' => __('Stored', 'qtranslate')
);
}
add_filter('manage_language_columns', 'qtranxf_language_columns');
*/
function qtranxf_languageColumnHeader($columns){
$new_columns = array();
if(isset($columns['cb'])) $new_columns['cb'] = '';
if(isset($columns['title'])) $new_columns['title'] = '';
if(isset($columns['author'])) $new_columns['author'] = '';
if(isset($columns['categories'])) $new_columns['categories'] = '';
if(isset($columns['tags'])) $new_columns['tags'] = '';
$new_columns['language'] = __('Languages', 'qtranslate');
return array_merge($new_columns, $columns);
}
function qtranxf_languageColumn($column) {
global $q_config, $post;
if ($column == 'language') {
$missing_languages = null;
$available_languages = qtranxf_getAvailableLanguages($post->post_content);
if($available_languages === FALSE){
echo _x('Languages are not set', 'Appears in the column "Languages" on post listing pages, when content has no language tags yet.', 'qtranslate');
}else{
$missing_languages = array_diff($q_config['enabled_languages'], $available_languages);
$available_languages_name = array();
$language_names = null;
foreach($available_languages as $language) {
if(isset($q_config['language_name'][$language])){
$language_name = $q_config['language_name'][$language];
}else{
if(!$language_names) $language_names = qtranxf_default_language_name();
$language_name = isset($language_names[$language]) ? $language_names[$language] : __('Unknown Language', 'qtranslate');
$language_name .= ' ('.__('Not enabled', 'qtranslate').')';
}
$available_languages_name[] = $language_name;
}
$available_languages_names = join(', ', $available_languages_name);
echo apply_filters('qtranslate_available_languages_names',$available_languages_names);
}
do_action('qtranslate_languageColumn', $available_languages, $missing_languages);
}
return $column;
}
function qtranxf_fetch_file_selection($dir,$suffix='.css'){
//qtranxf_dbg_log('qtranxf_fetch_file_selection: dir:',$dir);
$files = array();
$dir_handle = @opendir($dir);
if(!$dir_handle) return false;
while (false !== ($file = readdir($dir_handle))) {
if(!qtranxf_endsWith($file,$suffix)) continue;
$nm = basename($file, $suffix);
if(!$nm) continue;
$nm = str_replace('_',' ',$nm);
if(qtranxf_endsWith($nm,'.min')){
$nm = substr($nm,-4);
$files[$nm] = $file;
}elseif(!isset($files[$nm])){
$files[$nm] = $file;
}
}
ksort($files);
//qtranxf_dbg_log('qtranxf_fetch_file_selection: files:',$files);
return $files;
}
/*
* former qtranxf_fixAdminBar($wp_admin_bar)
*/
function qtranxf_before_admin_bar_render() {
global $wp_admin_bar, $q_config;
if(!isset($wp_admin_bar)) return;
$nodes = $wp_admin_bar->get_nodes();
//qtranxf_dbg_log('qtranxf_before_admin_bar_render: $nodes:', $nodes);
if(!isset($nodes)) return;//sometimes $nodes is NULL
$lang = $q_config['language'];
foreach($nodes as $node) {
//$nd = qtranxf_useCurrentLanguageIfNotFoundUseDefaultLanguage($node);
$nd = qtranxf_use($lang,$node);
$wp_admin_bar->add_node($nd);
}
//qtranxf_dbg_log('qtranxf_before_admin_bar_render: $wp_admin_bar:', $wp_admin_bar);
}
//function qtranxf_after_admin_bar_render() {
// global $wp_admin_bar;
//}
function qtranxf_admin_list_cats($text) {
global $pagenow;
//qtranxf_dbg_echo('qtranxf_admin_list_cats: $text',$text);
switch($pagenow){
case 'edit-tags.php':
case 'term.php':
//replace [:] with <:>
$blocks = qtranxf_get_language_blocks($text);
if(count($blocks)<=1) return $text;
$texts = qtranxf_split_blocks($blocks);
//$text = qtranxf_join_c($texts);
$text = qtranxf_join_b($texts);//with closing tag
return $text;
default: return qtranxf_useCurrentLanguageIfNotFoundUseDefaultLanguage($text);
}
}
add_filter('list_cats', 'qtranxf_admin_list_cats',0);
function qtranxf_admin_dropdown_cats($text) {
global $pagenow;
//qtranxf_dbg_echo('qtranxf_admin_list_cats: $text',$text);
switch($pagenow){
case 'edit-tags.php':
case 'term.php':
return $text;
default: return qtranxf_useCurrentLanguageIfNotFoundUseDefaultLanguage($text);
}
}
add_filter('wp_dropdown_cats', 'qtranxf_admin_dropdown_cats',0);
function qtranxf_admin_category_description($text) {
global $pagenow;
switch($pagenow){
case 'term.php':
case 'edit-tags.php':
return $text;
default: return qtranxf_useCurrentLanguageIfNotFoundUseDefaultLanguage($text);
}
}
add_filter('category_description', 'qtranxf_admin_category_description',0);
function qtranxf_admin_the_title($title) {
global $pagenow;
//todo this filter should not be used in admin area at all?
if(defined('DOING_AJAX') && DOING_AJAX)//nav-menus.php#752
return $title;
global $pagenow;
switch($pagenow){
//case 'term.php':
//case 'edit-tags.php':
case 'nav-menus.php':
return $title;
default: return qtranxf_useCurrentLanguageIfNotFoundUseDefaultLanguage($title);
}
}
add_filter('the_title', 'qtranxf_admin_the_title', 0);//WP: fires for display purposes only
//filter added in qtranslate_hooks.php
if(!function_exists('qtranxf_trim_words')){
function qtranxf_trim_words( $text, $num_words, $more, $original_text ) {
global $q_config;
//qtranxf_dbg_log('qtranxf_trim_words: $text: ',$text);
//qtranxf_dbg_log('qtranxf_trim_words: $original_text: ',$original_text);
$blocks = qtranxf_get_language_blocks($original_text);
//qtranxf_dbg_log('qtranxf_trim_words: $blocks: ',$blocks);
if ( count($blocks) <= 1 )
return $text;
$lang = $q_config['language'];
$texts = qtranxf_split_blocks($blocks);
foreach($texts as $key => $txt){
$texts[$key] = wp_trim_words($txt, $num_words, $more);
}
return qtranxf_join_b($texts);//has to be 'b', because 'c' gets stripped in /wp-admin/includes/nav-menu.php:182: esc_html( $item->description )
}
}
/**
* The same as core wp_htmledit_pre in /wp-includes/formatting.php,
* but with last argument of htmlspecialchars $double_encode off,
* which makes it to survive multiple applications from other plugins,
* for example, "PS Disable Auto Formatting" (https://wordpress.org/plugins/ps-disable-auto-formatting/)
* cited on support thread https://wordpress.org/support/topic/incompatibility-with-ps-disable-auto-formatting.
* @since 2.9.8.9
*/
if(!function_exists('qtranxf_htmledit_pre')){
function qtranxf_htmledit_pre($output) {
if ( !empty($output) )
$output = htmlspecialchars($output, ENT_NOQUOTES, get_option( 'blog_charset' ), false ); // convert only < > &
return apply_filters( 'htmledit_pre', $output );
}
}
function qtranxf_the_editor($editor_div)
{
// remove wpautop, which causes unmatched
on combined language strings if('html' != wp_default_editor()) { remove_filter('the_editor_content', 'wp_richedit_pre'); add_filter('the_editor_content', 'qtranxf_htmledit_pre', 99); } return $editor_div; } /* @since 3.3.8.7 use filter 'admin_title' instead function qtranxf_filter_options_general($value){ global $q_config; global $pagenow; switch($pagenow){ case 'options-general.php': case 'customize.php'://there is more work to do for this case return $value; default: break; } $lang = $q_config['language']; return qtranxf_use_language($lang,$value,false,false); } add_filter('option_blogname', 'qtranxf_filter_options_general'); add_filter('option_blogdescription', 'qtranxf_filter_options_general'); */ function qtranxf_updateGettextDatabases($force = false, $only_for_language = '') { require_once(QTRANSLATE_DIR.'/admin/qtx_update_gettext_db.php'); return qtranxf_updateGettextDatabasesEx($force, $only_for_language); } /* this did not work, need more investigation function qtranxf_enable_blog_title_filters($name) { add_filter('option_blogname', 'qtranxf_filter_options_general'); add_filter('option_blogdescription', 'qtranxf_filter_options_general'); } add_action( 'get_header', 'qtranxf_enable_blog_title_filters' ); function qtranxf_disable_blog_title_filters($name) { remove_filter('option_blogname', 'qtranxf_filter_options_general'); remove_filter('option_blogdescription', 'qtranxf_filter_options_general'); } add_action( 'wp_head', 'qtranxf_disable_blog_title_filters' ); */ function qtranxf_add_conf_filters(){ global $q_config; switch($q_config['editor_mode']){ case QTX_EDITOR_MODE_SINGLGE: case QTX_EDITOR_MODE_RAW: add_filter('gettext', 'qtranxf_gettext',0); add_filter('gettext_with_context', 'qtranxf_gettext_with_context',0); add_filter('ngettext', 'qtranxf_ngettext',0); break; case QTX_EDITOR_MODE_LSB: default: //applied in /wp-includes/class-wp-editor.php add_filter('the_editor', 'qtranxf_the_editor'); break; } } function qtranxf_del_conf_filters(){ global $q_config; remove_filter('gettext', 'qtranxf_gettext',0); remove_filter('gettext_with_context', 'qtranxf_gettext_with_context',0); remove_filter('ngettext', 'qtranxf_ngettext',0); remove_filter('the_editor', 'qtranxf_the_editor'); } /** * Get the currently selected admin color scheme (to be used for generated CSS) * @return array */ function qtranxf_get_user_admin_color() { global $_wp_admin_css_colors; $user_id = get_current_user_id(); $user_admin_color = get_user_meta( $user_id, 'admin_color', true ); if(!$user_admin_color){ //ajax calls do not have user authenticated? $user_admin_color = 'fresh'; } return $_wp_admin_css_colors[$user_admin_color]->colors; } function qtranxf_meta_box_LSB() { /* global $q_config; $flag_location=qtranxf_flag_location(); $lsb = '
'; echo $lsb; */ printf(__('This is a set of "%s" from %s. Click any blank space between the buttons and drag it to a place where you would need it the most. Click the handle at the top-right corner of this widget to hide this message.', 'qtranslate'), __('Language Switching Buttons','qtranslate'), 'qTranslate‑X'); } function qtranxf_add_meta_box_LSB($post_type, $post) { global $q_config, $pagenow; if( $q_config['editor_mode'] != QTX_EDITOR_MODE_LSB) return; switch($pagenow){ case 'post-new.php': case 'post.php': break; default: return; } if(empty($post_type)) if(isset($post->post_type)) $post_type = $post->post_type; else return; //qtranxf_dbg_log('qtranxf_add_meta_box_LSB: $post_type: ', $post_type);//, true); $page_config = qtranxf_get_admin_page_config_post_type($post_type); if(empty($page_config)) return; add_meta_box( 'qtranxs-meta-box-lsb', __('Language', 'qtranslate'), 'qtranxf_meta_box_LSB', $post_type, 'normal', 'low'); } add_action( 'add_meta_boxes', 'qtranxf_add_meta_box_LSB', 10, 2 ); /** * @since 3.3 * @return true if post type is listed in option 'Post Types'. */ function qtranxf_post_type_optional($post_type) { switch($post_type){ case 'revision': case 'nav_menu_item': return false; //no option for this type default: return true; } } function qtranxf_json_encode($o){ if(version_compare(PHP_VERSION, '5.4.0') >= 0) return json_encode($o,JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES); return json_encode($o); } /** * @since 3.4 * return reference to $page_config['forms'][$nm]['fields'] */ function qtranxf_config_add_form( &$page_config, $nm){ if(!isset($page_config['forms'][$nm])) $page_config['forms'][$nm] = array('fields' => array()); else if(!isset($page_config['forms'][$nm]['fields'])) $page_config['forms'][$nm]['fields'] = array(); } /** * @since 3.4.5 * check the WP Nonce - OK if POST is empty * @link https://codex.wordpress.org/Function_Reference/wp_nonce_field#Examples * @param string $nonce_name Name specified when generating the nonce * @param string $nonce_field Form input name for the nonce * @return boolean True if the nonce is ok */ function qtranxf_verify_nonce($nonce_name, $nonce_field = '_wpnonce') { return empty( $_POST ) || check_admin_referer( $nonce_name, $nonce_field ); } /** * @since 3.4.6.5 */ function qtranxf_decode_name_value_pair(&$a,$nam,$val) { if(preg_match( '#([^\[]*)\[([^\]]+)\](.*)#', $nam, $matches )) { $n = $matches[1]; $k = $matches[2]; $s = $matches[3]; if(is_numeric($n)) $n = (int)$n; if(is_numeric($k)) $k = (int)$k; if(empty($a[$n])) $a[$n] = array(); if(empty($s)){ $a[$n][$k] = $val; }else{ qtranxf_decode_name_value_pair($a[$n],$k.$s,$val);//recursive call } }else{ $a[$nam] = $val; } } /** * @since 3.4.6.5 */ function qtranxf_decode_name_value($data) { $a = array(); foreach ( $data as $nv ) { qtranxf_decode_name_value_pair($a,$nv->name,wp_slash($nv->value)); /* if ( preg_match( '#(.*)\[(\w+)\]#', $nv->name, $matches ) ) { $nm = $matches[1]; if ( empty( $a[ $nm ] ) ) { $a[ $nm ] = array(); } $key = $matches[2]; if ( is_numeric( $key ) ) { $key = (int) $key; } $a[ $nm ][ $key ] = wp_slash( $nv->value ); } else { $a[ $nv->name ] = wp_slash( $nv->value ); } */ } return $a; } add_filter('manage_posts_columns', 'qtranxf_languageColumnHeader'); add_filter('manage_posts_custom_column', 'qtranxf_languageColumn'); add_filter('manage_pages_columns', 'qtranxf_languageColumnHeader'); add_filter('manage_pages_custom_column', 'qtranxf_languageColumn');