Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * Adds a translation job record in icl_translate_job
- *
- * @param mixed $rid
- * @param mixed $translator_id
- */
- function add_translation_job($rid, $translator_id, $translation_package){
- global $wpdb, $current_user;
- get_currentuserinfo();
- 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("
- SELECT job_id, translated FROM {$wpdb->prefix}icl_translate_job WHERE rid=%d AND revision IS NULL
- ", $rid), ARRAY_N);
- if(!is_null($prev_job_id)){
- // if previous job is not complete bail out
- if(!$prev_job_translated){
- //trigger_error(sprintf(__('Translation is in progress for job: %s.', 'sitepress'), $prev_job_id), E_USER_NOTICE);
- return false;
- }
- $last_rev = $wpdb->get_var($wpdb->prepare("
- SELECT MAX(revision) AS rev FROM {$wpdb->prefix}icl_translate_job WHERE rid=%d AND revision IS NOT NULL
- ", $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);
- $original_post = get_post($prev_job->original_doc_id);
- //change
- if(is_array($prev_job->elements)){
- foreach($prev_job->elements as $element){
- $prev_translation[$element->field_type] = $element->field_data_translated;
- switch($element->field_type){
- case 'title':
- if($this->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($this->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($this->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;
- case 'tags':
- $terms = (array)get_the_terms( $prev_job->original_doc_id , 'post_tag' );
- $_taxs = array();
- foreach($terms as $term){
- $_taxs[] = $term->name;
- }
- if($element->field_data == $this->encode_field_data($_taxs, $element->field_format)){
- //$unchanged['tags'] = $element->field_data_translated;
- $unchanged['tags'] = true;
- }
- break;
- case 'categories':
- $terms = get_the_terms( $prev_job->original_doc_id , 'category' );
- $_taxs = array();
- foreach($terms as $term){
- $_taxs[] = $term->name;
- }
- if($element->field_data == $this->encode_field_data($_taxs, $element->field_format)){
- //$unchanged['categories'] = $element->field_data_translated;
- $unchanged['categories'] = 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($this->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(taxonomy_exists($element->field_type)){
- $terms = get_the_terms( $prev_job->original_doc_id , $element->field_type );
- $_taxs = array();
- foreach($terms as $term){
- $_taxs[] = $term->name;
- }
- if($element->field_data == $this->encode_field_data($_taxs, $element->field_format)){
- //$unchanged[$element->field_type] = $field['data_translated'];
- $unchanged[$element->field_type] = true;
- }
- }
- }
- }
- }
- }
- //\change
- }
- $wpdb->insert($wpdb->prefix . 'icl_translate_job', array(
- 'rid' => $rid,
- 'translator_id' => $translator_id,
- 'translated' => 0,
- 'manager_id' => $manager_id
- ));
- $job_id = $wpdb->insert_id;
- foreach($translation_package['contents'] as $field => $value){
- $job_translate = array(
- 'job_id' => $job_id,
- 'content_id' => 0,
- 'field_type' => $field,
- 'field_format' => isset($value['format'])?$value['format']:'',
- 'field_translate' => $value['translate'],
- 'field_data' => $value['data'],
- 'field_data_translated' => isset($prev_translation[$field]) ? $prev_translation[$field] : '',
- 'field_finished' => 0
- );
- if(isset($unchanged[$field])){
- $job_translate['field_finished'] = 1;
- }
- //$job_translate['field_data_translated'] = $unchanged[$field];
- $wpdb->insert($wpdb->prefix . 'icl_translate', $job_translate);
- }
- if($this->settings['doc_translation_method'] == ICL_TM_TMETHOD_EDITOR){ // only send notifications if the translation editor method is on
- if(!defined('ICL_TM_DISABLE_ALL_NOTIFICATIONS') && $translation_status->translation_service=='local'){
- if($this->settings['notification']['new-job'] == ICL_TM_NOTIFICATION_IMMEDIATELY){
- require_once ICL_PLUGIN_PATH . '/inc/translation-management/tm-notification.class.php';
- if($job_id){
- $tn_notification = new TM_Notification();
- if(empty($translator_id)){
- $tn_notification->new_job_any($job_id);
- }else{
- $tn_notification->new_job_translator($job_id, $translator_id);
- }
- }
- }
- }
- }
- return $job_id;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement