/** * Returns the number of posts for a given post_type, date and language combination that is published. * * @param string $lang language code to check * @param null|int $year * @param null|int $month * @param null|int $day * @param string|array $post_type * * @return bool * * @used-by \WPML_Languages::add_date_or_cpt_url_to_ls_lang to determine what languages to show in the Language Switcher */ public function archive_query_has_posts($lang, $year = null, $month = null, $day = null, $post_type = 'post') { $cache_args = array(); $cache_args['lang'] = $lang; $cache_args['year'] = $year; $cache_args['month'] = $month; $cache_args['day'] = $day; $cache_args['post_type'] = $post_type; $cache_key = md5(json_encode($cache_args)); $cache_group = 'archive_query_has_posts'; $cache = new WPML_WP_Cache($cache_group); $found = false; $result = $cache->get($cache_key, $found); if (!$found) { $post_status_snippet = $this->wp_api->current_user_can('read') ? "p.post_status IN (" . wpml_prepare_in(array('publish', 'private')) . ") " : "p.post_status = 'publish'"; $post_type_snippet = is_array($post_type) ? " AND post_type IN (" . wpml_prepare_in($post_type) . ") " : $this->wpdb->prepare(' AND p.post_type = %s ', $post_type); $year_snippet = (bool) $year === true ? $this->wpdb->prepare(' AND year(p.post_date) = %d ', $year) : ''; $month_snippet = (bool) $month === true ? $this->wpdb->prepare(' AND month(p.post_date) = %d ', $month) : ''; $day_snippet = (bool) $day === true ? $this->wpdb->prepare(' AND day(p.post_date) = %d ', $day) : ''; $lang_snippet = $this->wpdb->prepare(' AND t.language_code = %s ', $lang); $result = $this->wpdb->get_var("\n SELECT p.ID FROM {$this->wpdb->posts} p\n\t\t\t\t\t\tJOIN {$this->wpdb->prefix}icl_translations t\n\t\t\t\t\t\t\tON p.ID = t.element_id AND t.element_type = CONCAT('post_', p.post_type)\n\t\t\t\t\t\tWHERE " . $post_status_snippet . $year_snippet . $month_snippet . $day_snippet . $post_type_snippet . $lang_snippet . "\n\t\t\t\t\t\tLIMIT 1"); $cache->set($cache_key, $result); } return (bool) $result; }
/** * @package wpml-core */ function icl_reset_language_data() { global $wpdb, $sitepress; $active = $wpdb->get_col("SELECT code FROM {$wpdb->prefix}icl_languages WHERE active = 1"); $wpdb->query("TRUNCATE TABLE `{$wpdb->prefix}icl_languages`"); SitePress_Setup::fill_languages(); $wpdb->query("TRUNCATE TABLE `{$wpdb->prefix}icl_languages_translations`"); SitePress_Setup::fill_languages_translations(); $wpdb->query("TRUNCATE TABLE `{$wpdb->prefix}icl_flags`"); SitePress_Setup::fill_flags(); //restore active $wpdb->query("UPDATE {$wpdb->prefix}icl_languages SET active=1 WHERE code IN(" . wpml_prepare_in($active) . ")"); $wpdb->update($wpdb->prefix . 'icl_flags', array('from_template' => 0), null); $codes = $wpdb->get_col("SELECT code FROM {$wpdb->prefix}icl_languages"); foreach ($codes as $code) { if (!$code || $wpdb->get_var($wpdb->prepare("SELECT lang_code FROM {$wpdb->prefix}icl_flags WHERE lang_code = %s", $code))) { continue; } if (!file_exists(ICL_PLUGIN_PATH . '/res/flags/' . $code . '.png')) { $file = 'nil.png'; } else { $file = $code . '.png'; } $wpdb->insert($wpdb->prefix . 'icl_flags', array('lang_code' => $code, 'flag' => $file, 'from_template' => 0)); } $last_default_language = $sitepress !== null ? $sitepress->get_default_language() : 'en'; if (!in_array($last_default_language, $codes)) { $allowed_langs = array_intersect(array_keys($sitepress->get_active_languages()), $codes); $sitepress->set_default_language(array_pop($allowed_langs)); } icl_cache_clear(); }
/** * @param array|string $post_type * @param WP_User $author_data * @param array $lang * * @return int */ public function author_query_has_posts($post_type, $author_data, $lang) { global $wpdb; $post_types = (array) $post_type; $post_type_snippet = (bool) $post_types ? " AND post_type IN (" . wpml_prepare_in($post_types) . ") " : ""; return $wpdb->get_var($wpdb->prepare("\n SELECT COUNT(p.ID) FROM {$wpdb->posts} p\n\t\t\t\t\t\tJOIN {$wpdb->prefix}icl_translations t\n\t\t\t\t\t\t\tON p.ID=t.element_id AND t.element_type = CONCAT('post_', p.post_type)\n\t\t\t\t\t\tWHERE p.post_author=%d\n\t\t\t\t\t\t " . $post_type_snippet . "\n\t\t\t\t\t\t AND post_status='publish'\n\t\t\t\t\t\t AND language_code=%s", $author_data->ID, $lang['code'])); }
/** * Returns the number of posts for a given post_type, date and language combination that is published. * * @param string $lang language code to check * @param int $year * @param null|int $month * @param null|int $day * @param string $post_type * * @return null|string * * @used-by \WPML_Languages::add_date_or_cpt_url_to_ls_lang to determine what languages to show in the Language Switcher */ public function archive_query_has_posts($lang, $year = null, $month = null, $day = null, $post_type = 'post') { $post_types = (array) $post_type; $post_type_snippet = (bool) $post_types ? " AND post_type IN (" . wpml_prepare_in($post_types) . ") " : ""; $year_snippet = (bool) $year === true ? $this->wpdb->prepare(' AND year(p.post_date) = %d ', $year) : ''; $month_snippet = (bool) $month === true ? $this->wpdb->prepare(' AND month(p.post_date) = %d ', $month) : ''; $day_snippet = (bool) $day === true ? $this->wpdb->prepare(' AND day(p.post_date) = %d ', $day) : ''; return $this->wpdb->get_var($this->wpdb->prepare("\n SELECT COUNT(p.ID) FROM {$this->wpdb->posts} p\n\t\t\t\t\t\tJOIN {$this->wpdb->prefix}icl_translations t\n\t\t\t\t\t\t\tON p.ID = t.element_id AND t.element_type = CONCAT('post_', p.post_type)\n\t\t\t\t\t\tWHERE post_status='publish'\n\t\t\t\t\t\t\t" . $year_snippet . $month_snippet . $day_snippet . $post_type_snippet . "\n\t\t\t\t\t\t AND language_code = %s", $lang)); }
private function get_new_terms_just_duplicated($duplicate_ids, $taxonomies) { if ((bool) $duplicate_ids === false || (bool) $taxonomies === false) { return array(); } $duplicate_ids_in = wpml_prepare_in($duplicate_ids, '%d'); $taxonomies_in = wpml_prepare_in($taxonomies); $terms = $this->wpdb->get_results("SELECT tt.term_taxonomy_id, tt.taxonomy\n\t\t\t FROM {$this->wpdb->term_taxonomy} tt\n\t\t\t JOIN {$this->wpdb->term_relationships} tr\n\t\t\t\tON tt.term_taxonomy_id = tr.term_taxonomy_id\n\t\t\t JOIN {$this->wpdb->postmeta} pm\n\t\t\t ON pm.post_id = tr.object_id\n\t\t\t JOIN {$this->wpdb->terms} t_duplicate\n\t\t\t ON t_duplicate.term_id = tt.term_id\n\t\t\t JOIN {$this->wpdb->terms} t_original\n\t\t\t ON t_original.name = t_duplicate.name\n\t\t\t JOIN {$this->wpdb->term_taxonomy} tt_master\n\t\t\t ON tt_master.term_id = t_original.term_id\n\t\t\t JOIN {$this->wpdb->term_relationships} tr_master\n\t\t\t ON tt_master.term_taxonomy_id = tr_master.term_taxonomy_id\n\t\t\t LEFT JOIN {$this->wpdb->term_relationships} tr_other\n\t\t\t ON tt.term_taxonomy_id = tr_other.term_taxonomy_id\n\t\t\t AND tr_other.object_id != tr.object_id\n\t\t\t AND tr_other.object_id NOT IN ({$duplicate_ids_in})\n\t\t LEFT JOIN {$this->wpdb->postmeta} pm_other\n\t\t ON pm_other.post_id = tr_other.object_id\n\t\t AND NOT (pm_other.meta_key = '_icl_lang_duplicate_of'\n\t\t AND pm_other.meta_value IN ({$duplicate_ids_in}))\n\t\t WHERE pm.meta_key = '_icl_lang_duplicate_of'\n\t\t AND tr_other.object_id IS NULL\n\t\t AND pm_other.post_id IS NULL\n\t\t AND pm.meta_value IN ({$duplicate_ids_in})\n\t\t AND tr_master.object_id IN ({$duplicate_ids_in})\n\t\t AND tt.taxonomy IN ({$taxonomies_in})"); return $terms; }
/** * Filters the active languages to include all languages in which strings exist. * * @param array[] $source_langs * * @return array[] */ public function filter_tm_source_langs($source_langs) { $string_lang_codes = $this->wpdb->get_col("\tSELECT DISTINCT(s.language)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tFROM {$this->wpdb->prefix}icl_strings s\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tWHERE s.language\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tNOT IN (" . wpml_prepare_in(array_keys($source_langs)) . ")"); foreach ($string_lang_codes as $lang_code) { $language = $this->sitepress->get_language_details($lang_code); if ((bool) $language === true) { $source_langs[$lang_code] = $language; } } return $source_langs; }
protected function extra_conditions_snippet() { $extra_conditions = ""; if (!empty($this->post_status)) { $status_snippet = " AND post_status IN (" . wpml_prepare_in($this->post_status) . ") "; $extra_conditions .= apply_filters('_icl_posts_language_count_status', $status_snippet); } $extra_conditions .= $this->post_status != array('trash') ? " AND post_status <> 'trash'" : ''; $extra_conditions .= " AND post_status <> 'auto-draft' "; $extra_conditions .= parent::extra_conditions_snippet(); return $extra_conditions; }
private function migrate_old_translated_values($form_id) { global $wpdb; $st_context = $this->tm_api->get_st_context($form_id); $form_strings = array_keys($this->tm_api->get_form_strings($form_id)); foreach ($form_strings as &$string_name) { $string_name = "{$form_id}_" . $string_name; } $s_name_in = wpml_prepare_in($form_strings); $id_s_needing_update = $wpdb->get_results($wpdb->prepare("SELECT st.id AS id, cs.id AS right_id\n FROM {$wpdb->prefix}icl_strings s\n JOIN {$wpdb->prefix}icl_strings cs\n ON CONCAT(%s,cs.title) = s.name\n JOIN {$wpdb->prefix}icl_string_translations st\n ON s.id = st.string_id\n LEFT JOIN {$wpdb->prefix}icl_string_translations cst\n ON cs.id = cst.string_id AND st.language = cst.language\n WHERE s.context = 'gravity_form'\n AND cs.context = %s\n AND cst.language IS NULL\n AND s.name IN ({$s_name_in})", $form_id . '_', $st_context)); foreach ($id_s_needing_update as $id_data) { $wpdb->update($wpdb->prefix . 'icl_string_translations', array('string_id' => $id_data->right_id), array('id' => $id_data->id)); } }
private function get_multiple_slug_adjusted_IDs($slugs) { global $wpdb; $pages_with_name = $wpdb->get_results("\n\t\t\t\tSELECT ID, post_name, post_parent\n\t\t\t\tFROM {$wpdb->posts} p\n\t\t\t\tJOIN {$wpdb->prefix}icl_translations t\n\t\t\t\tON p.ID = t.element_id AND element_type='post_page'\n\t\t\t\tWHERE p.post_name IN (" . wpml_prepare_in($slugs) . ")\n\t\t\t\t"); $page_names = array(); $page_objects = array(); foreach ($pages_with_name as $page) { $page_names[$page->ID] = $page->post_name; $page_objects[$page->ID] =& $page; } array_pop($slugs); foreach ($pages_with_name as &$page) { $page = $this->remove_by_wrong_parent($page, $page->post_parent, $page_names, $page_objects, $slugs); } return array_filter($pages_with_name); }
function cms_navigation_meta_box($post) { global $wpdb, $sitepress; if (!$sitepress->get_setting('setup_complete')) { return; } //if it's a new post copy some custom fields from the original post $cms_nav_section = false; if ($post->ID == 0 && isset($_GET['trid']) && $_GET['trid']) { $copied_custom_fields = array('_top_nav_excluded', '_cms_nav_minihome'); foreach ($copied_custom_fields as $k => $v) { $copied_custom_fields[$k] = "'" . $v . "'"; } $res_prepared = $wpdb->prepare("\r\r\n SELECT meta_key, meta_value FROM {$wpdb->prefix}icl_translations tr\r\r\n JOIN {$wpdb->postmeta} pm ON tr.element_id = pm.post_id\r\r\n WHERE tr.trid=%d AND (source_language_code IS NULL OR source_language_code='')\r\r\n AND meta_key IN (" . wpml_prepare_in($copied_custom_fields) . ")\r\r\n ", $_GET['trid']); $res = $wpdb->get_results($res_prepared); foreach ($res as $r) { $post_custom[$r->meta_key][0] = $r->meta_value; } } else { // get sections global $sitepress; $current_language = $sitepress->get_current_language(); $sql = $wpdb->prepare("\r\r\n\t\t\t\t\tSELECT\r\r\n\t\t\t\t\t DISTINCT meta_value\r\r\n\t\t\t\t\tFROM {$wpdb->postmeta} pm\r\r\n\t\t\t\t\tINNER JOIN {$wpdb->prefix}icl_translations t\r\r\n\t\t\t\t\tON t.element_id = pm.post_id\r\r\n\t\t\t\t\tWHERE meta_key='_cms_nav_section'\r\r\n\t\t\t\t\tAND t.element_type = 'post_page'\r\r\n\t\t\t\t\tAND t.language_code = %s\r\r\n\t\t\t\t\t", $current_language); $sections = $wpdb->get_col($sql); $post_custom = get_post_custom($post->ID); $cms_nav_section = isset($post_custom['_cms_nav_section'][0]) ? $post_custom['_cms_nav_section'][0] : ''; } $top_nav_excluded = isset($post_custom['_top_nav_excluded'][0]) ? $post_custom['_top_nav_excluded'][0] : ''; $cms_nav_minihome = isset($post_custom['_cms_nav_minihome'][0]) ? $post_custom['_cms_nav_minihome'][0] : ''; $cms_nav_offsite_url = isset($post_custom['_cms_nav_offsite_url'][0]) ? $post_custom['_cms_nav_offsite_url'][0] : ''; if ($top_nav_excluded) { $top_nav_excluded = 'checked="checked"'; } if ($cms_nav_minihome) { $cms_nav_minihome = 'checked="checked"'; } ?> <p> <label><input type="checkbox" value="1" name="exclude_from_top_nav" <?php echo $top_nav_excluded; ?> /> <?php echo __('Exclude from the top navigation', 'wpml-cms-nav'); ?> </label> <label><input type="checkbox" value="1" name="cms_nav_minihome" <?php echo $cms_nav_minihome; ?> /> <?php echo __('Mini home (don\'t list child pages for this page)', 'wpml-cms-nav'); ?> </label> </p> <p> <?php echo __('Section', 'wpml-cms-nav'); ?> <?php if (!empty($sections)) { ?> <select name="cms_nav_section"> <option value=''><?php echo __('--none--', 'wpml-cms-nav'); ?> </option> <?php foreach ($sections as $s) { ?> <option <?php if ($s == $cms_nav_section) { echo 'selected="selected"'; } ?> ><?php echo $s; ?> </option> <?php } ?> </select> <?php } ?> <input type="text" name="cms_nav_section_new" value="" <?php if (!empty($sections)) { ?> style="display:none"<?php } ?> /> <?php if (!empty($sections)) { ?> <a href="javascript:" id="cms_nav_add_section"><?php echo __('enter new', 'wpml-cms-nav'); ?> </a> <?php } ?> </p> <p> <label><?php echo __('Offsite page address', 'wpml-cms-nav'); ?> <input type="text" style="width:100%" name="_cms_nav_offsite_url" value="<?php echo esc_attr($cms_nav_offsite_url); ?> " /></label> </p> <?php }
/** * @param string|array $terms_ids * * @return array */ private function adjust_taxonomies_terms_ids($terms_ids) { /** @var wpdb $wpdb */ global $wpdb; $terms_ids = array_unique($this->explode_and_trim($terms_ids)); if (empty($terms_ids)) { return $terms_ids; } // in_statement added two times to limit size of inner query $in_statement = wpml_prepare_in($terms_ids, '%d'); $sql = $wpdb->prepare("SELECT a.term_id AS original, b.translated AS translated, a.taxonomy AS taxonomy\r\n FROM {$wpdb->term_taxonomy} a LEFT OUTER JOIN\r\n (SELECT t.term_id translated, o.term_id\r\n FROM {$wpdb->term_taxonomy} o, {$wpdb->term_taxonomy} t\r\n WHERE o.term_id IN ({$in_statement})\r\n AND t.term_id = (\tSELECT tt.term_id\r\n FROM {$wpdb->term_taxonomy} tt\r\n WHERE tt.term_taxonomy_id\r\n = (\tSELECT element_id\r\n FROM {$wpdb->prefix}icl_translations el\r\n WHERE el.trid = (\tSELECT tr.trid\r\n FROM {$wpdb->prefix}icl_translations tr\r\n WHERE tr.element_id = o.term_taxonomy_id\r\n AND tr.element_type LIKE 'tax%%' LIMIT 1)\r\n AND el.language_code = %s\r\n LIMIT 1)\r\n LIMIT 1)) b on a.term_id=b.term_id\r\n WHERE a.term_id IN ({$in_statement})\r\n ", $this->get_current_language()); $adjusted_ids = $wpdb->get_results($sql); $translated_ids = array(); foreach ($adjusted_ids as $adjusted_term) { if (!$this->is_translated_taxonomy($adjusted_term->taxonomy)) { $translated_ids[] = $adjusted_term->original; continue; } if (!is_null($adjusted_term->translated)) { $translated_ids[] = $adjusted_term->translated; } } return $translated_ids; }
public function sync_with_translations($post_id, $post_vars = false) { global $wpdb; $term_count_update = new WPML_Update_Term_Count(); $post = get_post($post_id); $translated_ids = $this->post_translation->get_element_translations($post_id, false, true); $post_format = $this->sync_post_format ? get_post_format($post_id) : null; $ping_status = $this->sync_ping_status ? pings_open($post_id) ? 'open' : 'closed' : null; $comment_status = $this->sync_comment_status ? comments_open($post_id) ? 'open' : 'closed' : null; $post_password = $this->sync_password ? $post->post_password : null; $post_status = $this->sync_private_flag && get_post_status($post_id) === 'private' ? 'private' : null; $menu_order = $this->sync_menu_order && !empty($post->menu_order) ? $post->menu_order : null; $page_template = $this->sync_page_template && get_post_type($post_id) === 'page' ? get_page_template_slug($post_id) : null; $post_date = $this->sync_post_date ? $wpdb->get_var($wpdb->prepare("SELECT post_date FROM {$wpdb->posts} WHERE ID=%d LIMIT 1", $post_id)) : null; if ((bool) $post_vars === true) { $this->sync_sticky_flag($this->post_translation->get_element_trid($post_id), $post_vars); } foreach ($translated_ids as $lang_code => $translated_pid) { $this->sync_custom_fields($post_id, $translated_pid); if ($post_format !== null) { set_post_format($translated_pid, $post_format); } if ($post_date !== null) { $post_date_gmt = get_gmt_from_date($post_date); $data = array('post_date' => $post_date, 'post_date_gmt' => $post_date_gmt); $now = gmdate('Y-m-d H:i:59'); if (mysql2date('U', $post_date_gmt, false) > mysql2date('U', $now, false)) { $post_status = 'future'; } else { $post_status = 'publish'; } $data['post_status'] = $post_status; $wpdb->update($wpdb->posts, $data, array('ID' => $translated_pid)); } if ($post_password !== null) { $wpdb->update($wpdb->posts, array('post_password' => $post_password), array('ID' => $translated_pid)); } if ($post_status !== null && !in_array(get_post_status($translated_pid), array('auto-draft', 'draft', 'inherit', 'trash'))) { $wpdb->update($wpdb->posts, array('post_status' => $post_status), array('ID' => $translated_pid)); $term_count_update->update_for_post($translated_pid); } if ($post_status == null && $this->sync_private_flag && get_post_status($translated_pid) == 'private') { $wpdb->update($wpdb->posts, array('post_status' => get_post_status($post_id)), array('ID' => $translated_pid)); $term_count_update->update_for_post($translated_pid); } if ($ping_status !== null) { $wpdb->update($wpdb->posts, array('ping_status' => $ping_status), array('ID' => $translated_pid)); } if ($comment_status !== null) { $wpdb->update($wpdb->posts, array('comment_status' => $comment_status), array('ID' => $translated_pid)); } if ($page_template !== null) { update_post_meta($translated_pid, '_wp_page_template', $page_template); } $this->sync_with_translations($translated_pid); } if ($this->sync_parent) { $this->maybe_fix_translated_parent(get_post_type($post_id)); } if ($menu_order !== null && (bool) $translated_ids !== false) { $wpdb->query("UPDATE {$wpdb->posts}\n\t\t\t\t SET menu_order={$menu_order}\n\t\t\t\t WHERE ID IN (" . wpml_prepare_in($translated_ids, '%d') . ")"); } }
function icl_st_get_pending_string_translations_stats() { global $wpdb, $sitepress, $sitepress_settings; $current_user = $sitepress->get_current_user(); $user_lang_pairs = get_user_meta($current_user->ID, $wpdb->prefix . 'language_pairs', true); $stats = array(); if (!empty($user_lang_pairs[$sitepress_settings['st']['strings_language']])) { $results = $wpdb->get_results($wpdb->prepare("\r\n SELECT COUNT(id) AS c, language \r\n FROM {$wpdb->prefix}icl_string_translations \r\n WHERE status=%d AND language IN (" . wpml_prepare_in(array_keys($user_lang_pairs[$sitepress_settings['st']['strings_language']])) . ")\r\n AND (translator_id IS NULL or translator_id > 0)\r\n GROUP BY language\r\n ORDER BY c DESC\r\n ", ICL_TM_WAITING_FOR_TRANSLATOR)); foreach ($results as $r) { $_stats[$r->language] = $r->c; } foreach ($user_lang_pairs[$sitepress_settings['st']['strings_language']] as $lang => $one) { $stats[$lang] = isset($_stats[$lang]) ? $_stats[$lang] : 0; } } return $stats; }
function icl_upgrade_2_0_0_steps($step, $stepper) { global $wpdb, $sitepress, $wp_post_types, $sitepress_settings; if (!isset($sitepress)) { $sitepress = new SitePress(); } $TranslationManagement = new TranslationManagement(); $default_language = $sitepress->get_default_language(); define('ICL_TM_DISABLE_ALL_NOTIFICATIONS', true); // make sure no notifications are being sent //if(defined('icl_upgrade_2_0_0_runonce')){ // return; //} //define('icl_upgrade_2_0_0_runonce', true); // fix source_language_code // assume that the lowest element_id is the source language ini_set('max_execution_time', 300); $post_types = array_keys($wp_post_types); foreach ($post_types as $pt) { $types[] = 'post_' . $pt; } $temp_upgrade_data = get_option('icl_temp_upgrade_data', array('step' => 0, 'offset' => 0)); switch ($step) { case 1: // if the tables are missing, call the plugin activation routine $table_name = $wpdb->prefix . 'icl_translation_status'; if ($wpdb->get_var("SHOW TABLES LIKE '{$table_name}'") != $table_name) { icl_sitepress_activate(); } $wpdb->query("ALTER TABLE `{$wpdb->prefix}icl_translations` CHANGE `element_type` `element_type` VARCHAR( 32 ) NOT NULL DEFAULT 'post_post'"); $wpdb->query("ALTER TABLE `{$wpdb->prefix}icl_translations` CHANGE `element_id` `element_id` BIGINT( 20 ) NULL DEFAULT NULL "); // fix source_language_code // all source documents must have null if (isset($types)) { $wpdb->query($wpdb->prepare("UPDATE {$wpdb->prefix}icl_translations SET source_language_code = NULL\n\t\t\t\t\tWHERE element_type IN('" . join("','", $types) . "') AND source_language_code = '' AND language_code=%s", $default_language)); // get translated documents with missing source language $res = $wpdb->get_results($wpdb->prepare("\n\t\t\t\t\tSELECT translation_id, trid, language_code\n\t\t\t\t\tFROM {$wpdb->prefix}icl_translations\n\t\t\t\t\tWHERE (source_language_code = '' OR source_language_code IS NULL)\n\t\t\t\t\t\tAND element_type IN('" . join("','", $types) . "')\n\t\t\t\t\t\tAND language_code <> %s\n\t\t\t\t\t\t", $default_language)); foreach ($res as $row) { $wpdb->query($wpdb->prepare("UPDATE {$wpdb->prefix}icl_translations SET source_language_code = %s WHERE translation_id=%d", $default_language, $row->translation_id)); } } $temp_upgrade_data['step'] = 2; update_option('icl_temp_upgrade_data', $temp_upgrade_data); return array('message' => __('Processing translations...', 'sitepress')); break; case 2: $limit = 100; $offset = $temp_upgrade_data['offset']; $processing = FALSE; //loop existing translations if (isset($types)) { $res = $wpdb->get_results($wpdb->prepare("SELECT * FROM {$wpdb->prefix}icl_translations\n WHERE element_type IN(" . wpml_prepare_in($types) . " )\n AND source_language_code IS NULL LIMIT %d OFFSET %d", array($limit, $offset))); foreach ($res as $row) { $processing = TRUE; // grab translations $translations = $sitepress->get_element_translations($row->trid, $row->element_type); $md5 = 0; $table_name = $wpdb->prefix . 'icl_node'; if ($wpdb->get_var("SHOW TABLES LIKE '{$table_name}'") == $table_name) { list($md5, $links_fixed) = $wpdb->get_row($wpdb->prepare("\n\t\t\t\t\t\t\tSELECT md5, links_fixed FROM {$wpdb->prefix}icl_node\n\t\t\t\t\t\t\tWHERE nid = %d\n\t\t\t\t\t\t", $row->element_id), ARRAY_N); } if (!$md5) { $md5 = $TranslationManagement->post_md5($row->element_id); } $translation_package = $TranslationManagement->create_translation_package($row->element_id); foreach ($translations as $lang => $t) { if (!$t->original) { // determine service and status $service = 'local'; $needs_update = 0; list($rid, $status, $current_md5) = $wpdb->get_row($wpdb->prepare("\n\t\t\t\t\t\t\t\tSELECT c.rid, n.status , c.md5\n\t\t\t\t\t\t\t\tFROM {$wpdb->prefix}icl_content_status c\n\t\t\t\t\t\t\t\t\tJOIN {$wpdb->prefix}icl_core_status n ON c.rid = n.rid\n\t\t\t\t\t\t\t\tWHERE c.nid = %d AND target = %s\n\t\t\t\t\t\t\t\tORDER BY rid DESC\n\t\t\t\t\t\t\t\tLIMIT 1\n\t\t\t\t\t\t\t", $row->element_id, $lang), ARRAY_N); $translator_id = false; if ($rid) { if ($current_md5 != $md5) { $needs_update = 1; } if ($status == 3) { $status = 10; } else { $status = 2; } $service = 'icanlocalize'; foreach ($sitepress_settings['icl_lang_status'] as $lpair) { if ($lpair['from'] == $row->language_code && $lpair['to'] == $lang && isset($lpair['translators'][0]['id'])) { $translator_id = $lpair['translators'][0]['id']; break; } } } else { $status = 10; $translator_id = $wpdb->get_var($wpdb->prepare("SELECT post_author FROM {$wpdb->posts} WHERE ID=%d", $t->element_id)); $tlp = get_user_meta($translator_id, $wpdb->prefix . 'language_pairs', true); $tlp[$row->language_code][$lang] = 1; $TranslationManagement->edit_translator($translator_id, $tlp); } // add translation_status record list($newrid) = $TranslationManagement->update_translation_status(array('translation_id' => $t->translation_id, 'status' => $status, 'translator_id' => $translator_id, 'needs_update' => $needs_update, 'md5' => $md5, 'translation_service' => $service, 'translation_package' => serialize($translation_package), 'links_fixed' => intval(isset($links_fixed) ? $links_fixed : 0))); $job_id = $TranslationManagement->add_translation_job($newrid, $translator_id, $translation_package); if ($job_id && $status == 10) { $post = get_post($t->element_id); $TranslationManagement->save_job_fields_from_post($job_id, $post); } } } } } if ($processing) { update_option('icl_temp_upgrade_data', array('step' => 2, 'offset' => intval($offset + 100))); $stepper->setNextStep(2); } else { update_option('icl_temp_upgrade_data', array('step' => 3, 'offset' => 1.0E+20)); } $message = $processing ? __('Processing translations...', 'sitepress') : __('Finalizing upgrade...', 'sitepress'); return array('message' => $message); break; case 3: // removing the plugins text table; importing data into a Sitepress setting $results = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}icl_plugins_texts"); if (!empty($results)) { foreach ($results as $row) { $cft[$row->attribute_name] = $row->translate + 1; } if (isset($cft)) { $iclsettings['translation-management']['custom_fields_translation'] = $cft; $sitepress->save_settings($iclsettings); } $wpdb->query("DROP TABLE {$wpdb->prefix}icl_plugins_texts"); } $iclsettings['language_selector_initialized'] = 1; if (get_option('_force_mp_post_http')) { $iclsettings['troubleshooting_options']['http_communication'] = intval(get_option('_force_mp_post_http')); delete_option('_force_mp_post_http'); } // set default translators if (isset($sitepress_settings['icl_lang_status'])) { foreach ($sitepress_settings['icl_lang_status'] as $lpair) { if (!empty($lpair['translators'])) { $iclsettings['default_translators'][$lpair['from']][$lpair['to']] = array('id' => $lpair['translators'][0]['id'], 'type' => 'icanlocalize'); } } } $sitepress->save_settings($iclsettings); $iclsettings['migrated_2_0_0'] = 1; $sitepress->save_settings($iclsettings); delete_option('icl_temp_upgrade_data'); return array('message' => __('Done', 'sitepress'), 'completed' => 1); break; default: return array('error' => __('Missing step', 'sitepress'), 'stop' => 1); } }
function add_posts_management_column($columns) { global $posts, $wpdb, $__management_columns_posts_translations; $element_type = isset($_REQUEST['post_type']) ? 'post_' . $_REQUEST['post_type'] : 'post_post'; if (count($this->get_active_languages()) <= 1 || get_query_var('post_status') == 'trash') { return $columns; } if (isset($_POST['action']) && $_POST['action'] == 'inline-save' && $_POST['post_ID']) { $p = new stdClass(); $p->ID = $_POST['post_ID']; $posts = array($p); } elseif (empty($posts)) { return $columns; } if (is_null($__management_columns_posts_translations)) { $post_ids = array(); foreach ($posts as $p) { $post_ids[] = $p->ID; } // get posts translations // get trids $trid_array = $wpdb->get_col($wpdb->prepare("\n\t\t\t\tSELECT trid FROM {$wpdb->prefix}icl_translations\n\t\t\t\tWHERE element_type = %s AND element_id IN (" . wpml_prepare_in($post_ids, '%d') . ")\n\t\t\t", $element_type)); $elements_translations = $wpdb->get_results("\n\t\t\t\tSELECT trid, element_id, language_code, source_language_code\n\t\t\t\tFROM {$wpdb->prefix}icl_translations\n\t\t\t\tWHERE trid IN (" . wpml_prepare_in($trid_array, '%d') . ")\n\t\t\t"); foreach ($elements_translations as $v) { $by_trid[$v->trid][] = $v; } foreach ($elements_translations as $v) { if (in_array($v->element_id, $post_ids)) { $el_trid = $v->trid; foreach ($elements_translations as $val) { if ($val->trid == $el_trid) { $__management_columns_posts_translations[$v->element_id][$val->language_code] = $val; } } } } } $active_languages = $this->get_active_languages(); $languages = array(); foreach ($active_languages as $v) { if ($v['code'] == $this->get_current_language()) { continue; } $languages[] = $v['code']; } $res = $wpdb->get_results($wpdb->prepare("\n\t\t\tSELECT f.lang_code, f.flag, f.from_template, l.name\n\t\t\tFROM {$wpdb->prefix}icl_flags f\n\t\t\t\tJOIN {$wpdb->prefix}icl_languages_translations l ON f.lang_code = l.language_code\n\t\t\tWHERE l.display_language_code = %s AND f.lang_code IN(" . wpml_prepare_in($languages) . ")\n\t\t", $this->admin_language)); foreach ($res as $r) { if ($r->from_template) { $wp_upload_dir = wp_upload_dir(); $flag_path = $wp_upload_dir['baseurl'] . '/flags/'; } else { $flag_path = ICL_PLUGIN_URL . '/res/flags/'; } $flags[$r->lang_code] = '<img src="' . $flag_path . $r->flag . '" width="18" height="12" alt="' . $r->name . '" title="' . $r->name . '" />'; } $flags_column = ''; foreach ($active_languages as $v) { if (isset($flags[$v['code']])) { $flags_column .= $flags[$v['code']]; } } $new_columns = array(); foreach ($columns as $k => $v) { $new_columns[$k] = $v; if ($k == 'title') { $new_columns['icl_translations'] = $flags_column; } } return $new_columns; }
private function duplicate_custom_fields($master_post_id, $lang) { $duplicate_post_id = false; $post_type = get_post_field('post_type', $master_post_id); $trid = $this->sitepress->get_element_trid($master_post_id, 'post_' . $post_type); if ($trid) { $translations = $this->sitepress->get_element_translations($trid, 'post_' . $post_type); if (isset($translations[$lang])) { $duplicate_post_id = $translations[$lang]->element_id; } else { return false; // translation not found! } } $default_exceptions = WPML_Config::get_custom_fields_translation_settings(); $exceptions = apply_filters('wpml_duplicate_custom_fields_exceptions', array()); $exceptions = array_merge($exceptions, $default_exceptions); $exceptions = array_unique($exceptions); $exceptions_in = !empty($exceptions) ? 'AND meta_key NOT IN ( ' . wpml_prepare_in($exceptions) . ') ' : ''; $from_where_string = "FROM {$this->wpdb->postmeta} WHERE post_id = %d " . $exceptions_in; $post_meta_master = $this->wpdb->get_results("SELECT meta_key, meta_value " . $this->wpdb->prepare($from_where_string, $master_post_id)); $this->wpdb->query("DELETE " . $this->wpdb->prepare($from_where_string, $duplicate_post_id)); foreach ($post_meta_master as $post_meta) { $is_serialized = is_serialized($post_meta->meta_value); $meta_data = array('context' => 'custom_field', 'attribute' => 'value', 'key' => $post_meta->meta_key, 'is_serialized' => $is_serialized, 'post_id' => $duplicate_post_id, 'master_post_id' => $master_post_id); /** * @deprecated use 'wpml_duplicate_generic_string' instead, with the same arguments */ $icl_duplicate_generic_string = apply_filters('icl_duplicate_generic_string', $post_meta->meta_value, $lang, $meta_data); $post_meta->meta_value = $icl_duplicate_generic_string; $wpml_duplicate_generic_string = apply_filters('wpml_duplicate_generic_string', $post_meta->meta_value, $lang, $meta_data); $post_meta->meta_value = $wpml_duplicate_generic_string; if (!is_serialized($post_meta->meta_value)) { $post_meta->meta_value = maybe_serialize($post_meta->meta_value); } $this->wpdb->insert($this->wpdb->postmeta, array('post_id' => $duplicate_post_id, 'meta_key' => $post_meta->meta_key, 'meta_value' => $post_meta->meta_value), array('%d', '%s', '%s')); } return true; }
/** * Filter the MLA_List_Table columns * * Inserts the language columns just after the item thumbnail column. * Defined as static because it is called before the List_Table object is created. * Added as a filter when the file is loaded. * * @since 2.11 * * @param array $columns An array of columns. * format: column_slug => Column Label * * @return array updated array of columns. */ public static function mla_list_table_get_columns($columns) { global $sitepress, $wpdb; if (is_null(self::$language_columns) && $sitepress->is_translated_post_type('attachment')) { /* * Build language management columns */ $show_language = 'checked' == MLACore::mla_get_option('language_column', false, false, MLA_WPML::$mla_language_option_definitions); $current_language = $sitepress->get_current_language(); $languages = $sitepress->get_active_languages(); $view_status = isset($_REQUEST['status']) ? $_REQUEST['status'] : ''; if (1 < count($languages) && $view_status != 'trash') { $show_translations = 'checked' == MLACore::mla_get_option('translations_column', false, false, MLA_WPML::$mla_language_option_definitions); } else { $show_translations = false; } self::$language_columns = array(); if ($show_language && 'all' == $current_language) { self::$language_columns['language'] = __('Language', 'wpml-media'); } if ($show_translations) { $language_codes = array(); foreach ($languages as $language) { if ($current_language != $language['code']) { $language_codes[] = $language['code']; } } $results = $wpdb->get_results($wpdb->prepare("\n\t\t\t\t\tSELECT f.lang_code, f.flag, f.from_template, l.name\n\t\t\t\t\tFROM {$wpdb->prefix}icl_flags f\n\t\t\t\t\t\tJOIN {$wpdb->prefix}icl_languages_translations l ON f.lang_code = l.language_code\n\t\t\t\t\tWHERE l.display_language_code = %s AND f.lang_code IN(" . wpml_prepare_in($language_codes) . ")", $sitepress->get_admin_language())); $wp_upload_dir = wp_upload_dir(); foreach ($results as $result) { if ($result->from_template) { $flag_path = $wp_upload_dir['baseurl'] . '/flags/'; } else { $flag_path = ICL_PLUGIN_URL . '/res/flags/'; } $flags[$result->lang_code] = '<img src="' . $flag_path . $result->flag . '" width="18" height="12" alt="' . $result->name . '" title="' . $result->name . '" />'; } $flags_column = ''; foreach ($languages as $language) { if (isset($flags[$language['code']])) { $flags_column .= $flags[$language['code']]; } } self::$language_columns['icl_translations'] = $flags_column; } // multi-language not trash } // add columns if (!empty(self::$language_columns)) { $end = array_slice($columns, 2); $columns = array_slice($columns, 0, 2); $columns = array_merge($columns, self::$language_columns, $end); } return $columns; }
/** * Add missing language to taxonomies * * @param array $post_types */ private function add_missing_language_to_taxonomies($post_types) { global $sitepress, $wpdb; $taxonomy_types = array(); foreach ($post_types as $post_type) { $taxonomy_types = array_merge($sitepress->get_translatable_taxonomies(true, $post_type), $taxonomy_types); } $taxonomy_types = array_unique($taxonomy_types); $taxonomies = $wpdb->get_results("SELECT taxonomy, term_taxonomy_id FROM {$wpdb->term_taxonomy} WHERE taxonomy IN (" . wpml_prepare_in($taxonomy_types) . ")"); if ($taxonomies) { foreach ($taxonomies as $taxonomy) { $this->add_missing_language_to_taxonomy($taxonomy); } } }
/** * @param int $post_id * @param string $taxonomy * @param array $changed_ttids * @param bool $bulk * Running this function will remove certain issues arising out of bulk adding of terms to posts of various languages. * This case can result in situations in which the WP Core functionality adds a term to a post, before the language assignment * operations of WPML are triggered. This leads to states in which terms can be assigned to a post even though their language * differs from that of the post. * This function behaves between hierarchical and flag taxonomies. Hierarchical terms from the wrong taxonomy are simply removed * from the post. Flat terms are added with the same name but in the correct language. * For flat terms this implies either the use of the existing term or the creation of a new one. * This function uses wpdb queries instead of the WordPress API, it is therefore save to be run out of * any language setting. */ public static function quick_edited_post_terms($post_id, $taxonomy, $changed_ttids = array(), $bulk = false) { global $wpdb, $sitepress, $wpml_post_translations; if (!$sitepress->is_translated_taxonomy($taxonomy) || !($post_lang = $wpml_post_translations->get_element_lang_code($post_id))) { return; } $query_for_allowed_ttids = $wpdb->prepare("SELECT element_id FROM {$wpdb->prefix}icl_translations WHERE language_code = %s AND element_type = %s", $post_lang, 'tax_' . $taxonomy); $allowed_ttids = $wpdb->get_col($query_for_allowed_ttids); $new_ttids = array(); foreach ($changed_ttids as $ttid) { if (!in_array($ttid, $allowed_ttids)) { $wrong_term_where = array('object_id' => $post_id, 'term_taxonomy_id' => $ttid); if (is_taxonomy_hierarchical($taxonomy)) { // Hierarchical terms are simply deleted if they land on the wrong language $wpdb->delete($wpdb->term_relationships, array('object_id' => $post_id, 'term_taxonomy_id' => $ttid)); } else { /* Flat taxonomy terms could also be given via their names and not their ttids * In this case we append the ttids resulting from these names to the $changed_ttids array, * we do this only in the case of these terms actually being present in another but the * posts' language. */ $query_for_term_name = $wpdb->prepare("SELECT t.name FROM {$wpdb->terms} AS t JOIN {$wpdb->term_taxonomy} AS tt ON t.term_id = tt.term_id WHERE tt.term_taxonomy_id=%d", $ttid); $term_name = $wpdb->get_var($query_for_term_name); $ttid_in_correct_lang = false; if (!empty($allowed_ttids)) { $in = wpml_prepare_in($allowed_ttids, "%d"); // Try to get the ttid of a term in the correct language, that has the same $ttid_in_correct_lang = $wpdb->get_var($wpdb->prepare("SELECT tt.term_taxonomy_id\n\t\t\t\t\t\t\tFROM\n\t\t\t\t\t\t\t\t{$wpdb->terms} AS t\n\t\t\t\t\t\t\t\tJOIN {$wpdb->term_taxonomy} AS tt\n\t\t\t\t\t\t\t\t\tON t.term_id = tt.term_id\n\t\t\t\t\t\t\tWHERE t.name=%s AND tt.taxonomy=%s AND tt.term_taxonomy_id IN ({$in})", $term_name, $taxonomy)); } if (!$ttid_in_correct_lang) { /* If we do not have a term by this name in the given taxonomy and language we have to create it. * In doing so we must avoid interactions with filtering by wpml on this functionality and ensure uniqueness for the slug of the newly created term. */ $new_term = wp_insert_term($term_name, $taxonomy, array('slug' => self::term_unique_slug(sanitize_title($term_name), $taxonomy, $post_lang))); if (isset($new_term['term_taxonomy_id'])) { $ttid_in_correct_lang = $new_term['term_taxonomy_id']; $trid = $bulk ? $sitepress->get_element_trid($ttid, 'tax_' . $taxonomy) : false; $sitepress->set_element_language_details($ttid_in_correct_lang, 'tax_' . $taxonomy, $trid, $post_lang); } } if (!in_array($ttid_in_correct_lang, $changed_ttids)) { $wpdb->update($wpdb->term_relationships, array('term_taxonomy_id' => $ttid_in_correct_lang), $wrong_term_where); $new_ttids[] = $ttid_in_correct_lang; } else { $wpdb->delete($wpdb->term_relationships, array('object_id' => $post_id, 'term_taxonomy_id' => $ttid)); } } } } // Update term counts manually here, since using sql, will not trigger the updating of term counts automatically. wp_update_term_count(array_merge($changed_ttids, $new_ttids), $taxonomy); }
function _get_lang_info() { global $wpdb; // get the attachment languages. //if query-attachments need display all attachments if (isset($_POST['action']) && $_POST['action'] == 'query-attachments') { $results_prepared = $wpdb->prepare("SELECT ID, post_parent FROM {$wpdb->posts} WHERE post_type=%s", array('attachment')); $results = $wpdb->get_results($results_prepared); } else { //don't display attachments auto-draft posts $results_prepared = $wpdb->prepare("SELECT p.ID, p.post_parent FROM {$wpdb->posts} AS p LEFT JOIN {$wpdb->posts} AS p1 ON p.post_parent = p1.id WHERE p1.post_status <> %s AND p.post_type=%s", array('auto-draft', 'attachment')); $results = $wpdb->get_results($results_prepared); } $this->parents = array(); $this->unattached = array(); foreach ($results as $result) { $this->parents[$result->ID] = $result->post_parent; if (!$result->post_parent) { $this->unattached[] = $result->ID; } } if (isset($_POST['action']) && $_POST['action'] == 'query-attachments') { //don't display attachments auto-draft posts $results_prepared = $wpdb->prepare("\n\t\t\t\t\t\t\t\t\t\t\tSELECT p.id, t.language_code\n\t\t\t\t\t\t\t\t\t\t\tFROM {$wpdb->posts} AS p\n\t\t\t\t\t\t\t\t\t\t\t\tLEFT JOIN {$wpdb->posts} AS p1 ON p.post_parent = p1.id\n\t\t\t\t\t\t\t\t\t\t\t\tINNER JOIN {$wpdb->prefix}icl_translations AS t ON p.id = t.element_id\n\t\t\t\t\t\t\t\t\t\t\tWHERE p1.post_status <> %s\n\t\t\t\t\t\t\t\t\t\t\t\tAND t.element_type=%s\n\t\t\t\t\t\t\t\t\t\t", array('auto-draft', 'post_attachment')); $results = $wpdb->get_results($results_prepared); } else { $results_prepared = $wpdb->prepare("\n\t\t\t\t\t\t\t\t\t\t\tSELECT p.id, t.language_code\n\t\t\t\t\t\t\t\t\t\t\tFROM {$wpdb->posts} AS p\n\t\t\t\t\t\t\t\t\t\t\t\tINNER JOIN {$wpdb->prefix}icl_translations AS t ON p.id = t.element_id\n\t\t\t\t\t\t\t\t\t\t\tWHERE t.element_type=%s\n\t\t\t\t\t\t\t\t\t\t", array('post_attachment')); $results = $wpdb->get_results($results_prepared); } $this->languages = array(); foreach ($results as $result) { $this->languages[$result->id] = $result->language_code; } // determine list of att without language set (with their parents) foreach ($this->parents as $att_id => $parent_id) { if (!isset($this->languages[$att_id]) && isset($parent_languages[$parent_id])) { $missing_languages[$att_id] = $parent_id; } } // get language of their parents if (!empty($missing_languages)) { $results_prepared = "\n SELECT p.ID, t.language_code\n FROM {$wpdb->posts} p JOIN {$wpdb->prefix}icl_translations t ON p.ID = t.element_id AND t.element_type = CONCAT('post_', p.post_type)\n WHERE p.ID IN(" . wpml_prepare_in($missing_languages, '%d') . ")"; $results = $wpdb->get_results($results_prepared); foreach ($results as $row) { $parent_languages[$row->ID] = $row->language_code; } } // set language of their parents if (isset($parent_languages)) { foreach ($this->parents as $att_id => $parent_id) { if (!isset($this->languages[$att_id])) { $this->languages[$att_id] = $parent_languages[$parent_id]; } } } }
function icl_get_tax_children_recursive($id, $taxonomy = 'category') { global $wpdb; $id = (array) $id; $children = $wpdb->get_col($wpdb->prepare("SELECT term_id\n FROM {$wpdb->term_taxonomy} x\n WHERE x.taxonomy=%s\n AND parent IN (" . wpml_prepare_in($id, '%d') . ")", $taxonomy)); if (!empty($children)) { $children = array_merge($children, icl_get_tax_children_recursive($children)); } return $children; }
/** * Formats term data retrieved from the database. * * @param $data array * * @return array */ private function format_term_elements($data) { global $wpdb; $terms = array(); foreach ($data as $element) { $term_translation = base64_decode($element->field_data_translated); if (!$term_translation) { $post_fields = isset($_POST['fields']) ? $_POST['fields'] : null; $current_element_in_post_fields = $post_fields ? $post_fields[$element->field_type] : null; if ($current_element_in_post_fields && $current_element_in_post_fields['tid'] == $element->tid) { $term_translation = $current_element_in_post_fields['data']; } } $terms[substr($element->field_type, 2)] = array('original' => base64_decode($element->field_data), 'translation' => $term_translation, 'tid' => $element->tid, 'ttid_string' => $element->field_type); } $return = array(); $ttids = array_keys($terms); if (!empty($ttids)) { $ttid_in_query_fragment = "term_taxonomy_id IN (" . wpml_prepare_in($ttids, '%d') . ")"; $query = "SELECT taxonomy, term_taxonomy_id FROM {$wpdb->term_taxonomy} WHERE " . $ttid_in_query_fragment; $res = $wpdb->get_results($query); foreach ($res as $term) { if (!isset($return[$term->taxonomy])) { $return[$term->taxonomy] = array(); } $return[$term->taxonomy][] = $terms[$term->term_taxonomy_id]; } } return $return; }
public function set_locale_file_names($locale_file_names_pairs) { $lfn = $this->get_locale_file_names(); $new = array_diff(array_keys($locale_file_names_pairs), array_keys($lfn)); if (!empty($new)) { foreach ($new as $code) { $this->wpdb->insert($this->wpdb->prefix . 'icl_locale_map', array('code' => $code, 'locale' => $locale_file_names_pairs[$code])); } } $remove = array_diff(array_keys($lfn), array_keys($locale_file_names_pairs)); if (!empty($remove)) { $this->wpdb->query("DELETE FROM {$this->wpdb->prefix}icl_locale_map\n WHERE code IN (" . wpml_prepare_in($remove) . ")"); } $update = array_diff($locale_file_names_pairs, $lfn); foreach ($update as $code => $locale) { $this->wpdb->update($this->wpdb->prefix . 'icl_locale_map', array('locale' => $locale), array('code' => $code)); } return true; }
$active = $wpdb->get_col("SELECT code FROM {$wpdb->prefix}icl_languages WHERE active = 1"); $wpdb->query("TRUNCATE TABLE `{$wpdb->prefix}icl_languages`"); // @since 3.1.5 - mysql_* function deprecated in php 5.5+ $wpdb->query("TRUNCATE TABLE `{$wpdb->prefix}icl_languages_translations`"); $wpdb->query("TRUNCATE TABLE `{$wpdb->prefix}icl_flags`"); foreach ($langs_names as $key => $val) { if (strpos($key, 'Norwegian Bokm') === 0) { $key = 'Norwegian Bokmål'; $lang_codes[$key] = 'nb'; } // exception for norwegian $default_locale = isset($lang_locales[$lang_codes[$key]]) ? $lang_locales[$lang_codes[$key]] : ''; @$wpdb->insert($wpdb->prefix . 'icl_languages', array('english_name' => $key, 'code' => $lang_codes[$key], 'major' => $val['major'], 'active' => 0, 'default_locale' => $default_locale)); } //restore active $wpdb->query("UPDATE {$wpdb->prefix}icl_languages SET active=1 WHERE code IN(" . wpml_prepare_in($active) . ")"); foreach ($langs_names as $lang => $val) { if (strpos($lang, 'Norwegian Bokm') === 0) { $lang = 'Norwegian Bokmål'; $lang_codes[$lang] = 'nb'; } foreach ($val['tr'] as $k => $display) { if (strpos($k, 'Norwegian Bokm') === 0) { $k = 'Norwegian Bokmål'; } if (!trim($display)) { $display = $lang; } if (!$wpdb->get_var($wpdb->prepare("SELECT id FROM {$wpdb->prefix}icl_languages_translations\n WHERE language_code=%s\n AND display_language_code=%s", $lang_codes[$lang], $lang_codes[$k]))) { $wpdb->insert($wpdb->prefix . 'icl_languages_translations', array('language_code' => $lang_codes[$lang], 'display_language_code' => $lang_codes[$k], 'name' => $display)); }
function delete_language($lang_id) { global $wpdb, $sitepress; $lang = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->prefix}icl_languages WHERE id=%d", $lang_id)); if ($lang) { if (in_array($lang->code, $this->built_in_languages)) { $error = __("Error: This is a built in language. You can't delete it.", 'sitepress'); } else { $wpdb->query($wpdb->prepare("DELETE FROM {$wpdb->prefix}icl_languages WHERE id=%d", $lang_id)); $wpdb->query($wpdb->prepare("DELETE FROM {$wpdb->prefix}icl_languages_translations WHERE language_code=%s", $lang->code)); $translation_ids = $wpdb->get_col($wpdb->prepare("SELECT translation_id FROM {$wpdb->prefix}icl_translations WHERE language_code=%s", $lang->code)); if ($translation_ids) { $rids = $wpdb->get_col("SELECT rid FROM {$wpdb->prefix}icl_translation_status WHERE translation_id IN (" . wpml_prepare_in($translation_ids, '%d') . ")"); if ($rids) { $job_ids = $wpdb->get_col("SELECT job_id FROM {$wpdb->prefix}icl_translate_job WHERE rid IN (" . wpml_prepare_in($rids, '%d') . ")"); if ($job_ids) { $wpdb->query("DELETE FROM {$wpdb->prefix}icl_translate WHERE job_id IN (" . wpml_prepare_in($job_ids, '%d') . ")"); } } } // delete posts $post_ids = $wpdb->get_col($wpdb->prepare("SELECT element_id FROM {$wpdb->prefix}icl_translations WHERE element_type LIKE %s AND language_code=%s", array(wpml_like_escape('post_') . '%', $lang->code))); remove_action('delete_post', array($sitepress, 'delete_post_actions')); foreach ($post_ids as $post_id) { wp_delete_post($post_id, true); } add_action('delete_post', array($sitepress, 'delete_post_actions')); // delete terms remove_action('delete_term', array($sitepress, 'delete_term'), 1, 3); $tax_ids = $wpdb->get_col($wpdb->prepare("SELECT element_id FROM {$wpdb->prefix}icl_translations WHERE element_type LIKE %s AND language_code=%s", array(wpml_like_escape('tax_') . '%', $lang->code))); foreach ($tax_ids as $tax_id) { $row = $wpdb->get_row($wpdb->prepare("SELECT term_id, taxonomy FROM {$wpdb->term_taxonomy} WHERE term_taxonomy_id=%d", $tax_id)); if ($row) { wp_delete_term($row->term_id, $row->taxonomy); } } add_action('delete_term', array($sitepress, 'delete_term'), 1, 3); // delete comments global $IclCommentsTranslation; remove_action('delete_comment', array($IclCommentsTranslation, 'delete_comment_actions')); foreach ($post_ids as $post_id) { wp_delete_post($post_id, true); } add_action('delete_comment', array($IclCommentsTranslation, 'delete_comment_actions')); $wpdb->query($wpdb->prepare("DELETE FROM {$wpdb->prefix}icl_translations WHERE language_code=%s", $lang->code)); $wpdb->query($wpdb->prepare("DELETE FROM {$wpdb->prefix}icl_strings WHERE language=%s", $lang->code)); $wpdb->query($wpdb->prepare("DELETE FROM {$wpdb->prefix}icl_string_translations WHERE language=%s", $lang->code)); $wpdb->query($wpdb->prepare("DELETE FROM {$wpdb->prefix}icl_locale_map WHERE code=%s", $lang->code)); $wpdb->query($wpdb->prepare("DELETE FROM {$wpdb->prefix}icl_flags WHERE lang_code=%s", $lang->code)); icl_cache_clear(false); $sitepress->icl_translations_cache->clear(); $sitepress->clear_flags_cache(); $sitepress->icl_language_name_cache->clear(); $this->message(sprintf(__("The language %s was deleted.", 'sitepress'), '<strong>' . $lang->code . '</strong>')); } } else { $error = __('Error: Language not found.', 'sitepress'); } if (!empty($error)) { $this->error($error); } }
public function prefetch_ids($element_ids) { $element_ids = (array) $element_ids; $element_ids = array_diff($element_ids, array_keys($this->element_trids)); if ((bool) $element_ids === false) { return; } $trid_snippet = " tridt.element_id IN (" . wpml_prepare_in($element_ids, '%d') . ")"; $sql = $this->build_sql($trid_snippet); $elements = $this->wpdb->get_results($sql, ARRAY_A); $this->group_and_populate_cache($elements); }
function option_nav_menu_options($val) { global $wpdb, $sitepress; // special case of getting menus with auto-add only in a specific language $debug_backtrace = $sitepress->get_backtrace(5); //Ignore objects and limit to first 5 stack frames, since 4 is the highest index we use if (isset($debug_backtrace[4]) && $debug_backtrace[4]['function'] == '_wp_auto_add_pages_to_menu' && !empty($val['auto_add'])) { $post_lang = isset($_POST['icl_post_language']) ? $_POST['icl_post_language'] : (isset($_POST['lang']) ? $_POST['lang'] : false); //$val['auto_add'] = false; if ($post_lang) { $val['auto_add'] = $wpdb->get_col($wpdb->prepare("\n\t\t\t\t\tSELECT element_id\n\t\t\t\t\tFROM {$wpdb->prefix}icl_translations\n\t\t\t\t\tWHERE element_type='tax_nav_menu'\n\t\t\t\t\t\tAND element_id IN (" . wpml_prepare_in($val['auto_add'], '%d') . ")\n\t\t\t\t\t\tAND language_code = %s", $post_lang)); } } return $val; }
function presscore_wpml_parse_query_filter($q) { global $wpdb, $sitepress; $current_language = $sitepress->get_current_language(); $default_language = $sitepress->get_default_language(); if ($current_language != $default_language) { $cat_array = array(); // cat if (isset($q->query_vars['cat']) && !empty($q->query_vars['cat'])) { $cat_array = array_map('intval', array_map('trim', explode(',', $q->query_vars['cat']))); } // category_name if (isset($q->query_vars['category_name']) && !empty($q->query_vars['category_name'])) { $categories = explode(",", $q->query_vars['category_name']); $cat_array = array(); foreach ($categories as $category) { $category = trim($category); if ($category == "") { // it happens for category_name = "some-cat,some-cat-2,", with comma at end continue; } $cat = get_term_by('slug', preg_replace('#((.*)/)#', '', $category), 'category'); if (!$cat) { $cat = get_term_by('name', $category, 'category'); } if (isset($cat) && is_object($cat) && $cat->term_id) { $cat_array[] = $cat->term_id; } } if (empty($cat_array)) { $q->query_vars['p'] = -1; } } // category_and if (isset($q->query_vars['category__and']) && !empty($q->query_vars['category__and'])) { $cat_array = $q->query_vars['category__and']; } // category_in if (isset($q->query_vars['category__in']) && !empty($q->query_vars['category__in'])) { $cat_array = array_unique(array_merge($cat_array, array_map('intval', $q->query_vars['category__in']))); } // category__not_in if (isset($q->query_vars['category__not_in']) && !empty($q->query_vars['category__not_in'])) { $__cats = array(); foreach ($q->query_vars['category__not_in'] as $key => $val) { $__cats[$key] = -1 * intval($val); } $cat_array = array_unique(array_merge($cat_array, $__cats)); } if (!empty($cat_array)) { $translated_ids = array(); foreach ($cat_array as $c) { if (intval($c) < 0) { $sign = -1; } else { $sign = 1; } $translated_ids[] = $sign * intval(icl_object_id(abs($c), 'category', true)); } //cat if (isset($q->query_vars['cat']) && !empty($q->query_vars['cat'])) { $q->query_vars['cat'] = join(',', $translated_ids); } // category_name if (isset($q->query_vars['category_name']) && !empty($q->query_vars['category_name'])) { $_ctmp = get_term_by('id', $translated_ids[0], 'category'); $q->query_vars['category_name'] = $_ctmp->slug; } // category__and if (isset($q->query_vars['category__and']) && !empty($q->query_vars['category__and'])) { $q->query_vars['category__and'] = $translated_ids; } // category__in if (isset($q->query_vars['category__in']) && !empty($q->query_vars['category__in'])) { $__translated_in = array(); foreach ($translated_ids as $key => $t_id) { if ($t_id > 0) { $__translated_in[$key] = $t_id; } } $q->query_vars['category__in'] = $__translated_in; } // category__not_in if (isset($q->query_vars['category__not_in']) && !empty($q->query_vars['category__not_in'])) { $__translated_not_in = array(); foreach ($translated_ids as $key => $t_id) { if ($t_id < 0) { $__translated_not_in[$key] = $t_id; } } $q->query_vars['category__not_in'] = $__translated_not_in; } } // TAGS $tag_array = array(); // tag $tag_glue = ''; if (isset($q->query_vars['tag']) && !empty($q->query_vars['tag'])) { if (false !== strpos($q->query_vars['tag'], ' ')) { $tag_glue = '+'; $exp = explode(' ', $q->query_vars['tag']); } else { $tag_glue = ','; $exp = explode(',', $q->query_vars['tag']); } foreach ($exp as $e) { $tag_array[] = $wpdb->get_var($wpdb->prepare("SELECT x.term_id FROM {$wpdb->terms} t\r\n JOIN {$wpdb->term_taxonomy} x ON t.term_id=x.term_id WHERE x.taxonomy='post_tag' AND t.slug=%s", $e)); } $_tmp = array_unique($tag_array); if (count($_tmp) == 1 && empty($_tmp[0])) { $tag_array = array(); } } // tag_id if (isset($q->query_vars['tag_id']) && !empty($q->query_vars['tag_id'])) { $tag_array = array_map('trim', explode(',', $q->query_vars['tag_id'])); } // tag__and if (isset($q->query_vars['tag__and']) && !empty($q->query_vars['tag__and'])) { $tag_array = $q->query_vars['tag__and']; } // tag__in if (isset($q->query_vars['tag__in']) && !empty($q->query_vars['tag__in'])) { $tag_array = $q->query_vars['tag__in']; } // tag__not_in if (isset($q->query_vars['tag__not_in']) && !empty($q->query_vars['tag__not_in'])) { $tag_array = $q->query_vars['tag__not_in']; } // tag_slug__in if (isset($q->query_vars['tag_slug__in']) && !empty($q->query_vars['tag_slug__in'])) { foreach ($q->query_vars['tag_slug__in'] as $t) { if ($tg = $wpdb->get_var($wpdb->prepare("\r\n SELECT x.term_id FROM {$wpdb->terms} t\r\n JOIN {$wpdb->term_taxonomy} x ON t.term_id=x.term_id\r\n WHERE x.taxonomy='post_tag' AND t.slug=%s", $t))) { $tag_array[] = $tg; } } } // tag_slug__and if (isset($q->query_vars['tag_slug__and']) && !empty($q->query_vars['tag_slug__and'])) { foreach ($q->query_vars['tag_slug__and'] as $t) { $tag_array[] = $wpdb->get_var($wpdb->prepare("SELECT x.term_id FROM {$wpdb->terms} t\r\n JOIN {$wpdb->term_taxonomy} x ON t.term_id=x.term_id WHERE x.taxonomy='post_tag' AND t.slug=%s", $t)); } } if (!empty($tag_array)) { $translated_ids = array(); foreach ($tag_array as $c) { if (intval($c) < 0) { $sign = -1; } else { $sign = 1; } $_tid = intval(icl_object_id(abs($c), 'post_tag', true)); $translated_ids[] = $sign * $_tid; } } if (!empty($translated_ids)) { //tag if (isset($q->query_vars['tag']) && $q->query_vars['tag'] !== "") { $slugs = $wpdb->get_col("SELECT slug\r\n FROM {$wpdb->terms}\r\n WHERE term_id IN (" . wpml_prepare_in($translated_ids, '%d') . ")"); $q->query_vars['tag'] = join($tag_glue, $slugs); } //tag_id if (isset($q->query_vars['tag_id']) && !empty($q->query_vars['tag_id'])) { $q->query_vars['tag_id'] = join(',', $translated_ids); } // tag__and if (isset($q->query_vars['tag__and']) && !empty($q->query_vars['tag__and'])) { $q->query_vars['tag__and'] = $translated_ids; } // tag__in if (isset($q->query_vars['tag__in']) && !empty($q->query_vars['tag__in'])) { $q->query_vars['tag__in'] = $translated_ids; } // tag__not_in if (isset($q->query_vars['tag__not_in']) && !empty($q->query_vars['tag__not_in'])) { $q->query_vars['tag__not_in'] = array_map('abs', $translated_ids); } // tag_slug__in if (isset($q->query_vars['tag_slug__in']) && !empty($q->query_vars['tag_slug__in'])) { $q->query_vars['tag_slug__in'] = $wpdb->get_col("SELECT slug\r\n FROM {$wpdb->terms}\r\n WHERE term_id IN (" . wpml_prepare_in($translated_ids, '%d') . ")"); } // tag_slug__and if (isset($q->query_vars['tag_slug__and']) && !empty($q->query_vars['tag_slug__and'])) { $q->query_vars['tag_slug__and'] = $wpdb->get_col("SELECT slug\r\n FROM {$wpdb->terms}\r\n WHERE term_id IN (" . wpml_prepare_in($translated_ids, '%d') . ")"); } } // POST & PAGES $post_type = !empty($q->query_vars['post_type']) ? $q->query_vars['post_type'] : 'post'; if (!is_array($post_type)) { $post_type = (array) $post_type; } // page_id if (isset($q->query_vars['page_id']) && !empty($q->query_vars['page_id'])) { $q->query_vars['page_id'] = icl_object_id($q->query_vars['page_id'], 'page', true); $q->query = preg_replace('/page_id=[0-9]+/', 'page_id=' . $q->query_vars['page_id'], $q->query); } // Adjust included IDs adjusting them with translated element, if present if (isset($q->query_vars['include']) && !empty($q->query_vars['include'])) { $include_arr = is_array($q->query_vars['include']) ? $q->query_vars['include'] : explode(',', $q->query_vars['include']); $include_arr_adjusted = array(); foreach ($include_arr as $include_arr_id) { $include_arr_adjusted[] = icl_object_id($include_arr_id, get_post_type($include_arr_id), true); } $q->query_vars['include'] = is_array($q->query_vars['include']) ? $include_arr_adjusted : implode(',', $include_arr_adjusted); } // Adjust excluded IDs adjusting them with translated element, if present if (isset($q->query_vars['exclude']) && !empty($q->query_vars['exclude'])) { $exclude_arr = is_array($q->query_vars['exclude']) ? $q->query_vars['exclude'] : explode(',', $q->query_vars['exclude']); $exclude_arr_adjusted = array(); foreach ($exclude_arr as $exclude_arr_id) { $exclude_arr_adjusted[] = icl_object_id($exclude_arr_id, get_post_type($exclude_arr_id), true); } $q->query_vars['exclude'] = is_array($q->query_vars['exclude']) ? $exclude_arr_adjusted : implode(',', $exclude_arr_adjusted); } // Adjust post id if (isset($q->query_vars['p']) && !empty($q->query_vars['p'])) { $q->query_vars['p'] = icl_object_id($q->query_vars['p'], $post_type[0], true); } // Adjust name if ($sitepress->is_translated_post_type($post_type[0]) && isset($q->query_vars['name']) && !empty($q->query_vars['name'])) { $pid_prepared = $wpdb->prepare("SELECT ID FROM {$wpdb->posts} WHERE post_name=%s AND post_type=%s", array($q->query_vars['name'], $post_type[0])); $pid = $wpdb->get_var($pid_prepared); if (!empty($pid)) { $q->query_vars['p'] = icl_object_id($pid, $post_type[0], true); unset($q->query_vars['name']); } } // Adjust page name if (isset($q->query_vars['pagename']) && !empty($q->query_vars['pagename'])) { // find the page with the page name in the current language. $pid = $wpdb->get_var($wpdb->prepare("\r\n SELECT ID\r\n FROM {$wpdb->posts} p\r\n JOIN {$wpdb->prefix}icl_translations t\r\n ON p.ID = t.element_id AND element_type='post_page'\r\n WHERE p.post_name=%s AND t.language_code = %s\r\n ", $q->query_vars['pagename'], $current_language)); if ($pid) { $q->query_vars['page_id'] = $pid; // We have found the page id unset($q->query_vars['pagename']); if ($q->query_vars['page_id'] == get_option('page_for_posts')) { // it's the blog page. $q->is_page = false; // $wp_query->is_page = false; $q->is_home = true; // $wp_query->is_home = true; $q->is_posts_page = true; // $wp_query->is_posts_page = true; } } } // post__in if (isset($q->query_vars['post__in']) && !empty($q->query_vars['post__in'])) { $pid = array(); foreach ($q->query_vars['post__in'] as $p) { if ($post_type) { foreach ($post_type as $pt) { $pid[] = icl_object_id($p, $pt, true); } } } $q->query_vars['post__in'] = $pid; } // post__not_in if (isset($q->query_vars['post__not_in']) && !empty($q->query_vars['post__not_in'])) { $pid = array(); foreach ($q->query_vars['post__not_in'] as $p) { if ($post_type) { foreach ($post_type as $pt) { $pid[] = icl_object_id($p, $pt, true); } } } $q->query_vars['post__not_in'] = $pid; } // post_parent if (isset($q->query_vars['post_parent']) && !empty($q->query_vars['post_parent']) && $q->query_vars['post_type'] != 'attachment') { if ($post_type) { $_parent_type = $wpdb->get_var($wpdb->prepare("SELECT post_type FROM {$wpdb->posts} WHERE ID=%d", $q->query_vars['post_parent'])); $q->query_vars['post_parent'] = icl_object_id($q->query_vars['post_parent'], $_parent_type, true); } } // custom taxonomies if (isset($q->query_vars['taxonomy']) && $q->query_vars['taxonomy']) { $tax_id = $wpdb->get_var($wpdb->prepare("SELECT term_id FROM {$wpdb->terms} WHERE slug=%s", $q->query_vars['term'])); if ($tax_id) { $translated_tax_id = icl_object_id($tax_id, $q->query_vars['taxonomy'], true); } if (isset($translated_tax_id)) { $q->query_vars['term'] = $wpdb->get_var($wpdb->prepare("SELECT slug FROM {$wpdb->terms} WHERE term_id = %d", $translated_tax_id)); $q->query[$q->query_vars['taxonomy']] = $q->query_vars['term']; } } //TODO: [WPML 3.3] Discuss this. Why WP assumes it's there if query vars are altered? Look at wp-includes/query.php line #2468 search: if ( $this->query_vars_changed ) { if (!isset($q->query_vars['meta_query'])) { $q->query_vars['meta_query'] = array(); } if (isset($q->query_vars['tax_query']) && is_array($q->query_vars['tax_query'])) { foreach ($q->query['tax_query'] as $num => $fields) { if (!isset($fields['terms'])) { continue; } if (is_array($fields['terms'])) { foreach ($fields['terms'] as $term) { $taxonomy = get_term_by($fields['field'], $term, $fields['taxonomy']); if (is_object($taxonomy)) { if ($fields['field'] == 'id') { $field = isset($taxonomy->term_id) ? $taxonomy->term_id : null; } else { $field = isset($taxonomy->{$fields['field']}) ? $taxonomy->{$fields['field']} : null; } $tmp = $q->query['tax_query'][$num]['terms']; $tmp = array_diff((array) $tmp, array($term)); // removes from array element with original value $tmp[] = $field; //Reindex array $q->query['tax_query'][$num]['terms'] = array_values($tmp); if (isset($q->tax_query->queries[$num]['terms'])) { $tmp = $q->tax_query->queries[$num]['terms']; } else { $tmp = array(); // clean $tmp variable } $tmp = array_diff((array) $tmp, array($term)); // see above $tmp[] = $field; //Reindex array $q->tax_query->queries[$num]['terms'] = array_values($tmp); $tmp = $q->query_vars['tax_query'][$num]['terms']; $tmp = array_diff((array) $tmp, array($term)); // see above $tmp[] = $field; //Reindex array $q->query_vars['tax_query'][$num]['terms'] = array_values($tmp); unset($tmp); } } } else { if (is_string($fields['terms'])) { $taxonomy = get_term_by($fields['field'], $fields['terms'], $fields['taxonomy']); if (is_object($taxonomy)) { $field = isset($taxonomy->{$fields['field']}) ? $taxonomy->{$fields['field']} : null; $q->query['tax_query'][$num]['terms'] = $field; $q->tax_query->queries[$num]['terms'][0] = $field; $q->query_vars['tax_query'][$num]['terms'] = $field; } } } } } } return $q; }
foreach ($wp_taxonomies as $t => $v) { $orphans = $wpdb->get_col("\r\n SELECT t.translation_id \r\n FROM {$wpdb->prefix}icl_translations t \r\n LEFT JOIN {$wpdb->term_taxonomy} p \r\n ON t.element_id = p.term_taxonomy_id \r\n WHERE t.element_type = 'tax_{$t}' \r\n AND p.taxonomy <> '{$t}'\r\n "); if (!empty($orphans)) { $wpdb->query("DELETE FROM {$wpdb->prefix}icl_translations\r\n WHERE translation_id IN (" . wpml_prepare_in($orphans, '%d') . ")"); } } } // remove ghost translations // get unlinked rids $rids = $wpdb->get_col("SELECT rid FROM {$wpdb->prefix}icl_translation_status WHERE translation_id NOT IN (SELECT translation_id FROM {$wpdb->prefix}icl_translations)"); if ($rids) { $jids = $wpdb->get_col("SELECT job_id FROM {$wpdb->prefix}icl_translate_job WHERE rid IN (" . wpml_prepare_in($rids, '%d') . ")"); if ($jids) { $wpdb->query("DELETE FROM {$wpdb->prefix}icl_translate WHERE job_id IN (" . wpml_prepare_in($jids, '%d') . ")"); $wpdb->query("DELETE FROM {$wpdb->prefix}icl_translate_job WHERE job_id IN (" . wpml_prepare_in($jids, '%d') . ")"); $wpdb->query("DELETE FROM {$wpdb->prefix}icl_translation_status WHERE rid IN (" . wpml_prepare_in($rids, '%d') . ")"); } } // remove any duplicates in icl_translations $trs = $wpdb->get_results("SELECT element_id, GROUP_CONCAT(translation_id) AS tids FROM {$wpdb->prefix}icl_translations\r\n WHERE element_id > 0 AND element_type LIKE 'post\\_%' GROUP BY element_id"); foreach ($trs as $r) { $exp = explode(',', $r->tids); if (count($exp) > 1) { $maxtid = max($exp); foreach ($exp as $e) { if ($e != $maxtid) { $wpdb->query($wpdb->prepare("DELETE FROM {$wpdb->prefix}icl_translations WHERE translation_id=%d", $e)); } } } }
public function render($domains) { $all_languages = $this->sitepress->get_languages($this->sitepress->get_admin_language()); ?> <div id="wpml-change-domain-language-dialog" class="wpml-change-language-dialog" title="<?php _e('Language of domains', 'wpml-string-translation'); ?> " style="display:none" data-button-text="<?php _e('Apply', 'wpml-string-translation'); ?> " data-cancel-text="<?php _e('Cancel', 'wpml-string-translation'); ?> " > <label for="wpml-domain-select"> <?php _e('Select for which domain to set the language: ', 'wpml-string-translation'); ?> </label> <select id="wpml-domain-select"> <option value="" selected="selected"><?php _e('-- Please select --', 'wpml-string-translation'); ?> </option> <?php foreach ($domains as $domain) { $results = $this->wpdb->get_results($this->wpdb->prepare("\r\n\t\t\t\t\t\t\t\tSELECT language, COUNT(language) AS count\r\n\t\t\t\t\t\t\t\tFROM {$this->wpdb->prefix}icl_strings s\r\n\t\t\t\t\t\t\t\tWHERE context = %s\r\n\t\t\t\t\t\t\t\t\tAND language IN (" . wpml_prepare_in(array_keys($all_languages)) . ")\r\n\t\t\t\t\t\t\t\tGROUP BY language\r\n\t\t\t\t\t\t\t\t", $domain->context), ARRAY_A); foreach ($results as &$result) { $result['display_name'] = $all_languages[$result['language']]['display_name']; } $domain_lang = $this->language_of_domain->get_language($domain->context); if ($domain_lang) { $domain_data = 'data-domain_lang="' . $domain_lang . '" '; } else { $domain_data = 'data-domain_lang="" '; } echo '<option value="' . $domain->context . '" data-langs="' . esc_attr(wp_json_encode($results)) . '"' . $domain_data . '>' . $domain->context . '</option>'; } ?> </select> <div class="js-summary wpml-cdl-summary" style="display:none" > <p class="wpml-cdl-info"> <?php _e('This domain currently has the following strings:', 'wpml-string-translation'); ?> </p> <table class="widefat striped wpml-cdl-table"> <thead> <tr> <td class="manage-column column-cb check-column"><input class="js-all-check" type="checkbox" value="all" /></td> <th><?php _e('Current source language', 'wpml-string-translation'); ?> </th> <th class="num"><?php _e('Number of strings', 'wpml-string-translation'); ?> </th> </tr> </thead> <tbody> </tbody> </table> <div class="js-lang-select-area wpml-cdl-info"> <label for="wpml-source-domain-language-change"><?php _e('Set the source language of these strings to:', 'wpml-string-translation'); ?> </label> <?php $lang_selector = new WPML_Simple_Language_Selector($this->sitepress); echo $lang_selector->render(array('id' => 'wpml-source-domain-language-change')); ?> <label for="wpml-cdl-set-default"> <input id="wpml-cdl-set-default" type="checkbox" class="js-default" value="use-as-default" checked="checked" /> <?php _e('Use this language as the default language for new strings in this domain', 'wpml-string-translation'); ?> </label> </div> </div> <img src="<?php echo ICL_PLUGIN_URL . '/res/img/ajax-loader.gif'; ?> " alt="loading" height="16" width="16" class="wpml_tt_spinner"/> <?php wp_nonce_field('wpml_change_string_domain_language_nonce', 'wpml_change_string_domain_language_nonce'); ?> </div> <?php }