function get_translation_jobs($args = array()) { global $wpdb, $sitepress, $wp_query; // defaults $args_default = array('translator_id' => 0, 'status' => false, 'include_unassigned' => false); extract($args_default); extract($args, EXTR_OVERWRITE); $_exp = explode('-', $translator_id); $service = isset($_exp[1]) ? $_exp[1] : 'local'; $translator_id = $_exp[0]; $where = " s.status > " . ICL_TM_NOT_TRANSLATED; if ($status != '') { $where .= " AND s.status=" . intval($status); } if (!empty($translator_id)) { if ($include_unassigned) { $where .= " AND (j.translator_id=" . intval($translator_id) . " OR j.translator_id=0) "; } else { $where .= " AND j.translator_id=" . intval($translator_id); } if (!empty($service)) { $where .= " AND s.translation_service='{$service}'"; } } if (!empty($from)) { $where .= " AND t.source_language_code='" . $wpdb->escape($from) . "'"; } if (!empty($to)) { $where .= " AND t.language_code='" . $wpdb->escape($to) . "'"; } // ORDER BY if ($include_unassigned) { $orderby[] = 'j.translator_id DESC'; } $orderby[] = ' j.job_id DESC '; $orderby = join(', ', $orderby); // LIMIT if (!isset($_GET['paged'])) { $_GET['paged'] = 1; } $offset = ($_GET['paged'] - 1) * $limit_no; $limit = " " . $offset . ',' . $limit_no; $jobs = $wpdb->get_results("SELECT SQL_CALC_FOUND_ROWS \n j.job_id, t.trid, t.language_code, t.source_language_code, \n s.translation_id, s.status, s.needs_update, s.translator_id, u.display_name AS translator_name, s.translation_service \n FROM {$wpdb->prefix}icl_translate_job j\n JOIN {$wpdb->prefix}icl_translation_status s ON j.rid = s.rid\n JOIN {$wpdb->prefix}icl_translations t ON s.translation_id = t.translation_id\n LEFT JOIN {$wpdb->users} u ON s.translator_id = u.ID\n WHERE {$where} AND revision IS NULL\n ORDER BY {$orderby}\n LIMIT {$limit}\n "); $count = $wpdb->get_var("SELECT FOUND_ROWS()"); $wp_query->found_posts = $count; $wp_query->query_vars['posts_per_page'] = $limit_no; $wp_query->max_num_pages = ceil($wp_query->found_posts / $limit_no); foreach ($jobs as $k => $row) { //original $post_id = $wpdb->get_var($wpdb->prepare("\n SELECT field_data\n FROM {$wpdb->prefix}icl_translate\n WHERE job_id=%d and field_type='original_id'", $row->job_id)); $parts = explode('_', $post_id); if ($parts[0] == 'external') { $jobs[$k]->original_doc_id = $post_id; $jobs[$k]->post_title = base64_decode($wpdb->get_var($wpdb->prepare("\n SELECT field_data\n FROM {$wpdb->prefix}icl_translate\n WHERE job_id=%d and field_type='name'", $row->job_id))); if ($jobs[$k]->post_title == "") { // try the title field. $jobs[$k]->post_title = base64_decode($wpdb->get_var($wpdb->prepare("\n SELECT field_data\n FROM {$wpdb->prefix}icl_translate\n WHERE job_id=%d and field_type='title'", $row->job_id))); } $jobs[$k]->edit_link = $this->tm_post_link($post_id); $ldf = $sitepress->get_language_details($row->source_language_code); } else { $doc = $wpdb->get_row($wpdb->prepare("SELECT ID, post_title, post_type FROM {$wpdb->posts} WHERE ID=%d", $post_id)); if ($doc) { $jobs[$k]->post_title = $doc->post_title; $jobs[$k]->original_doc_id = $doc->ID; $jobs[$k]->edit_link = get_edit_post_link($doc->ID); $ldf = $sitepress->get_language_details($sitepress->get_element_language_details($post_id, 'post_' . $doc->post_type)->language_code); } else { $jobs[$k]->post_title = __("The original has been deleted!", "sitepress"); $jobs[$k]->original_doc_id = 0; $jobs[$k]->edit_link = ""; $ldf['display_name'] = __("Deleted", "sitepress"); } } $ldt = $sitepress->get_language_details($row->language_code); $jobs[$k]->lang_text = $ldf['display_name'] . ' » ' . $ldt['display_name']; if ($row->translation_service == 'icanlocalize') { $row->translator_name = ICL_Pro_Translation::get_translator_name($row->translator_id); } } return $jobs; }
function get_translation_jobs($args = array()) { global $wpdb, $sitepress, $wp_query; // defaults /** @var $translator_id int */ /** @var $status int */ /** @var $include_unassigned bool */ /** @var $orderby bool|string */ /** @var $limit_no int */ $args_default = array('translator_id' => 0, 'status' => false, 'include_unassigned' => false); extract($args_default); extract($args, EXTR_OVERWRITE); $language_pairs = array(); $_exp = explode('-', $translator_id); $service = isset($_exp[1]) ? $_exp[1] : 'local'; $translator_id = $_exp[0]; $where = " s.status > " . ICL_TM_NOT_TRANSLATED; if ($status != '') { $where .= " AND s.status=" . intval($status); } if ($status != ICL_TM_DUPLICATE) { $where .= " AND s.status <> " . ICL_TM_DUPLICATE; } if (!empty($translator_id)) { if ($include_unassigned) { $where .= " AND (j.translator_id=" . intval($translator_id) . " OR j.translator_id=0) "; } else { $where .= " AND j.translator_id=" . intval($translator_id); } if (!empty($service)) { $where .= " AND s.translation_service='{$service}'"; } $language_pairs = get_user_meta($translator_id, $wpdb->prefix . 'language_pairs', true); } // HANDLE FROM if (!empty($from)) { $where .= PHP_EOL . " AND t.source_language_code='" . esc_sql($from) . "'"; } else { // only if we filter by translator, make sure to use just the 'from' languages that apply // in no translator_id, ommit condition and all will be pulled if ($translator_id) { if (!empty($to)) { // get 'from' languages corresdonding to $to (to $translator_id) $from_languages = array(); foreach ($language_pairs as $fl => $tls) { if (isset($tls[$to])) { $from_languages[] = $fl; } } if ($from_languages) { $where .= PHP_EOL . sprintf(" AND t.source_language_code IN(%s)", "'" . join("','", $from_languages) . "'"); } } else { // all to all case // get all possible combinations for $translator_id $from_languages = array_keys($language_pairs); $where_conditions = array(); foreach ($from_languages as $fl) { $to_languages = "'" . join("','", array_keys($language_pairs[$fl])) . "'"; $where_conditions[] = sprintf(" (t.source_language_code='%s' AND t.language_code IN (%s)) ", $fl, $to_languages); } if (!empty($where_conditions)) { $where .= PHP_EOL . ' AND ( ' . join(' OR ', $where_conditions) . ')'; } } } } // HANDLE TO if (!empty($to)) { $where .= PHP_EOL . " AND t.language_code='" . esc_sql($to) . "'"; } else { // only if we filter by translator, make sure to use just the 'from' languages that apply // in no translator_id, omit condition and all will be pulled if ($translator_id) { if (!empty($from)) { // get languages the user can translate into from $from $tos = isset($language_pairs[$from]) ? array_keys($language_pairs[$from]) : array(); if ($tos) { $where .= PHP_EOL . sprintf(" AND t.language_code IN(%s)", "'" . join("','", $tos) . "'"); } } else { // covered by 'all to all case' above } } } // ORDER BY if ($include_unassigned) { $orderby[] = 'j.translator_id DESC'; } $orderby[] = ' j.job_id DESC '; $orderby = join(', ', $orderby); // LIMIT if (!isset($_GET['paged'])) { $_GET['paged'] = 1; } $offset = ($_GET['paged'] - 1) * $limit_no; $limit = " " . $offset . ',' . $limit_no; $jobs = $wpdb->get_results("SELECT SQL_CALC_FOUND_ROWS\n\t\t\t\tj.job_id, t.trid, t.language_code, t.source_language_code,\n\t\t\t\ts.translation_id, s.status, s.needs_update, s.translator_id, u.display_name AS translator_name, s.translation_service\n\t\t\t\tFROM {$wpdb->prefix}icl_translate_job j\n\t\t\t\t\tJOIN {$wpdb->prefix}icl_translation_status s ON j.rid = s.rid\n\t\t\t\t\tJOIN {$wpdb->prefix}icl_translations t ON s.translation_id = t.translation_id\n\t\t\t\t\tLEFT JOIN {$wpdb->users} u ON s.translator_id = u.ID\n\t\t\t\tWHERE {$where} AND revision IS NULL\n\t\t\t\tORDER BY {$orderby}\n\t\t\t\tLIMIT {$limit}\n\t\t\t"); //echo '<pre>'; //print_r($wpdb->last_query); //echo '</pre>'; $count = $wpdb->get_var("SELECT FOUND_ROWS()"); $wp_query->found_posts = $count; $wp_query->query_vars['posts_per_page'] = $limit_no; $wp_query->max_num_pages = ceil($wp_query->found_posts / $limit_no); foreach ($jobs as $k => $row) { //original $post_id = $wpdb->get_var($wpdb->prepare("\n\t\t\t\t\t\t\t\t\t\t\t\t\t SELECT field_data\n\t\t\t\t\t\t\t\t\t\t\t\t\t FROM {$wpdb->prefix}icl_translate\n\t\t\t\t\t\t\t\t\t\t\t\t\t WHERE job_id=%d and field_type='original_id'", $row->job_id)); $parts = explode('_', $post_id); if ($parts[0] == 'external') { $jobs[$k]->original_doc_id = $post_id; $jobs[$k]->post_title = base64_decode($wpdb->get_var($wpdb->prepare("\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t SELECT field_data\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t FROM {$wpdb->prefix}icl_translate\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t WHERE job_id=%d and field_type='name'", $row->job_id))); if ($jobs[$k]->post_title == "") { // try the title field. $jobs[$k]->post_title = base64_decode($wpdb->get_var($wpdb->prepare("\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t SELECT field_data\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t FROM {$wpdb->prefix}icl_translate\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t WHERE job_id=%d and field_type='title'", $row->job_id))); } $jobs[$k]->post_title = apply_filters('WPML_translation_job_title', $jobs[$k]->post_title, $post_id); $jobs[$k]->edit_link = self::tm_post_link($post_id); $ldf = $sitepress->get_language_details($row->source_language_code); } else { $doc = $wpdb->get_row($wpdb->prepare("SELECT ID, post_title, post_type FROM {$wpdb->posts} WHERE ID=%d", $post_id)); if ($doc) { $jobs[$k]->post_title = $doc->post_title; $jobs[$k]->original_doc_id = $doc->ID; $jobs[$k]->edit_link = get_edit_post_link($doc->ID); $ldf = $sitepress->get_language_details($sitepress->get_element_language_details($post_id, 'post_' . $doc->post_type)->language_code); } else { $jobs[$k]->post_title = __("The original has been deleted!", "sitepress"); $jobs[$k]->original_doc_id = 0; $jobs[$k]->edit_link = ""; $ldf['display_name'] = __("Deleted", "sitepress"); } } $ldt = $sitepress->get_language_details($row->language_code); $jobs[$k]->lang_text = $ldf['display_name'] . ' » ' . $ldt['display_name']; if ($row->translation_service == 'icanlocalize') { $row->translator_name = ICL_Pro_Translation::get_translator_name($row->translator_id); } } return $jobs; }
function get_translation_jobs($args = array()) { global $wpdb, $sitepress, $wp_query; // defaults $args_default = array('translator_id' => 0, 'status' => false, 'include_unassigned' => false); extract($args_default); extract($args, EXTR_OVERWRITE); $_exp = explode('-', $translator_id); $service = isset($_exp[1]) ? $_exp[1] : 'local'; $translator_id = $_exp[0]; $where = "1"; if ($status != '') { $where .= " AND s.status=" . intval($status); } if (!empty($translator_id)) { if ($include_unassigned) { $where .= " AND (j.translator_id=" . intval($translator_id) . " OR j.translator_id=0) "; } else { $where .= " AND j.translator_id=" . intval($translator_id); } if (!empty($service)) { $where .= " AND s.translation_service='{$service}'"; } } if (!empty($from)) { $where .= " AND t.source_language_code='" . $wpdb->escape($from) . "'"; } if (!empty($to)) { $where .= " AND t.language_code='" . $wpdb->escape($to) . "'"; } // ORDER BY if ($include_unassigned) { $orderby[] = 'j.translator_id DESC'; } $orderby[] = ' j.job_id DESC '; $orderby = join(', ', $orderby); // LIMIT if (!isset($_GET['paged'])) { $_GET['paged'] = 1; } $offset = ($_GET['paged'] - 1) * $limit_no; $limit = " " . $offset . ',' . $limit_no; $jobs = $wpdb->get_results("SELECT SQL_CALC_FOUND_ROWS \r\n j.job_id, t.trid, t.language_code, t.source_language_code, s.status, s.needs_update, s.translator_id, u.display_name AS translator_name, s.translation_service \r\n FROM {$wpdb->prefix}icl_translate_job j\r\n JOIN {$wpdb->prefix}icl_translation_status s ON j.rid = s.rid\r\n JOIN {$wpdb->prefix}icl_translations t ON s.translation_id = t.translation_id\r\n LEFT JOIN {$wpdb->users} u ON s.translator_id = u.ID\r\n WHERE {$where} AND revision IS NULL\r\n ORDER BY {$orderby}\r\n LIMIT {$limit}\r\n "); $count = $wpdb->get_var("SELECT FOUND_ROWS()"); $wp_query->found_posts = $count; $wp_query->query_vars['posts_per_page'] = $limit_no; $wp_query->max_num_pages = ceil($wp_query->found_posts / $limit_no); foreach ($jobs as $k => $row) { //original $doc = $wpdb->get_row($wpdb->prepare("\r\n SELECT p.ID, p.post_title \r\n FROM {$wpdb->prefix}icl_translations t \r\n JOIN {$wpdb->posts} p ON p.ID = t.element_id\r\n WHERE t.trid = %d AND t.language_code = '%s'", $row->trid, $row->source_language_code)); $jobs[$k]->post_title = $doc->post_title; $jobs[$k]->edit_link = get_edit_post_link($doc->ID); $ldt = $sitepress->get_language_details($row->language_code); $ldf = $sitepress->get_language_details($row->source_language_code); $jobs[$k]->lang_text = $ldf['display_name'] . ' » ' . $ldt['display_name']; if ($row->translation_service == 'icanlocalize') { $row->translator_name = ICL_Pro_Translation::get_translator_name($row->translator_id); } } return $jobs; }