/** * Adds a translation job record in icl_translate_job * * @param mixed $rid * @param mixed $translator_id * @param $translation_package * * @return bool|int */ function add_translation_job($rid, $translator_id, $translation_package) { global $wpdb, $current_user; get_currentuserinfo(); if (empty($this->settings)) { $this->init(); } if (!$current_user->ID) { $manager_id = $wpdb->get_var($wpdb->prepare("SELECT manager_id FROM {$wpdb->prefix}icl_translate_job WHERE rid=%d ORDER BY job_id DESC LIMIT 1", $rid)); } else { $manager_id = $current_user->ID; } $translation_status = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->prefix}icl_translation_status WHERE rid=%d", $rid)); // if we have a previous job_id for this rid mark it as the top (last) revision list($prev_job_id, $prev_job_translated) = $wpdb->get_row($wpdb->prepare("\r\n\t\t\t\t\tSELECT job_id, translated FROM {$wpdb->prefix}icl_translate_job WHERE rid=%d AND revision IS NULL\r\n\t\t", $rid), ARRAY_N); $prev_translation = array(); if (!is_null($prev_job_id)) { if (!$prev_job_translated) { // Job id needed to generate the xliff file return $prev_job_id; } $last_rev = $wpdb->get_var($wpdb->prepare("\r\n\t\t\t\tSELECT MAX(revision) AS rev FROM {$wpdb->prefix}icl_translate_job WHERE rid=%d AND revision IS NOT NULL\r\n\t\t\t", $rid)); $wpdb->update($wpdb->prefix . 'icl_translate_job', array('revision' => $last_rev + 1), array('job_id' => $prev_job_id)); $prev_job = $this->get_translation_job($prev_job_id); if (isset($prev_job->original_doc_id)) { $original_post = get_post($prev_job->original_doc_id); foreach ($prev_job->elements as $element) { $prev_translation[$element->field_type] = $element->field_data_translated; switch ($element->field_type) { case 'title': if (self::decode_field_data($element->field_data, $element->field_format) == $original_post->post_title) { //$unchanged[$element->field_type] = $element->field_data_translated; $unchanged[$element->field_type] = true; } break; case 'body': if (self::decode_field_data($element->field_data, $element->field_format) == $original_post->post_content) { //$unchanged[$element->field_type] = $element->field_data_translated; $unchanged[$element->field_type] = true; } break; case 'excerpt': if (self::decode_field_data($element->field_data, $element->field_format) == $original_post->post_excerpt) { //$unchanged[$element->field_type] = $element->field_data_translated; $unchanged[$element->field_type] = true; } break; default: if (false !== strpos($element->field_type, 'field-') && !empty($this->settings['custom_fields_translation'])) { $cf_name = preg_replace('#^field-#', '', $element->field_type); if (self::decode_field_data($element->field_data, $element->field_format) == get_post_meta($prev_job->original_doc_id, $cf_name, 1)) { //$unchanged[$element->field_type] = $element->field_data_translated; $unchanged[$element->field_type] = true; } } else { // taxonomies if (strpos($element->field_type, 't_', 0)) { $ttid = substr($element->field_type, 2); $term_name = $wpdb->get_var($wpdb->prepare("SELECT name FROM {$wpdb->terms} WHERE term_id = (SELECT term_id FROM {$wpdb->term_taxonomy} WHERE term_taxonomy_id = %d LIMIT 1)", $ttid)); if ($element->field_data == $this->encode_field_data($term_name, $element->field_format)) { $unchanged[$element->field_type] = true; } } } } } } } $translate_job_insert_data = array('rid' => $rid, 'translator_id' => $translator_id, 'translated' => 0, 'manager_id' => $manager_id); $wpdb->insert($wpdb->prefix . 'icl_translate_job', $translate_job_insert_data); $job_id = $wpdb->insert_id; $package_helper = new WPML_Element_Translation_Package(); $package_helper->save_package_to_job($translation_package, $job_id, $prev_translation); if ($translation_status->translation_service == 'local') { if (isset($this->settings['notification']['new-job']) && $this->settings['notification']['new-job'] == ICL_TM_NOTIFICATION_IMMEDIATELY) { if ($job_id) { if (empty($translator_id)) { do_action('wpml_tm_new_job_notification', $job_id); } else { do_action('wpml_tm_assign_job_notification', $job_id, $translator_id); } } } do_action('wpml_added_local_translation_job', $job_id); } return $job_id; }