Advertisement
Guest User

function add_translation_job :: with conditional v1

a guest
Mar 28th, 2013
44
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 7.20 KB | None | 0 0
  1.     /**
  2.     * Adds a translation job record in icl_translate_job
  3.     *
  4.     * @param mixed $rid
  5.     * @param mixed $translator_id
  6.     */
  7.     function add_translation_job($rid, $translator_id, $translation_package){
  8.         global $wpdb, $current_user;        
  9.         get_currentuserinfo();
  10.         if(!$current_user->ID){
  11.             $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));
  12.         }else{
  13.             $manager_id = $current_user->ID;
  14.         }
  15.        
  16.         $translation_status = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->prefix}icl_translation_status WHERE rid=%d", $rid));
  17.        
  18.         // if we have a previous job_id for this rid mark it as the top (last) revision
  19.         list($prev_job_id, $prev_job_translated) = $wpdb->get_row($wpdb->prepare("
  20.                    SELECT job_id, translated FROM {$wpdb->prefix}icl_translate_job WHERE rid=%d AND revision IS NULL
  21.        ", $rid), ARRAY_N);
  22.         if(!is_null($prev_job_id)){
  23.          
  24.             // if previous job is not complete bail out
  25.             if(!$prev_job_translated){
  26.                 //trigger_error(sprintf(__('Translation is in progress for job: %s.', 'sitepress'), $prev_job_id), E_USER_NOTICE);
  27.                 return false;
  28.             }
  29.            
  30.             $last_rev = $wpdb->get_var($wpdb->prepare("
  31.                SELECT MAX(revision) AS rev FROM {$wpdb->prefix}icl_translate_job WHERE rid=%d AND revision IS NOT NULL
  32.            ", $rid));        
  33.             $wpdb->update($wpdb->prefix . 'icl_translate_job', array('revision'=>$last_rev+1), array('job_id'=>$prev_job_id));
  34.            
  35.             $prev_job = $this->get_translation_job($prev_job_id);
  36.            
  37.             $original_post = get_post($prev_job->original_doc_id);
  38.             //change
  39.             if(is_array($prev_job->elements)){     
  40.                 foreach($prev_job->elements as $element){
  41.                     $prev_translation[$element->field_type] = $element->field_data_translated;
  42.                     switch($element->field_type){
  43.                         case 'title':
  44.                             if($this->decode_field_data($element->field_data, $element->field_format) == $original_post->post_title){
  45.                                 //$unchanged[$element->field_type] = $element->field_data_translated;
  46.                                 $unchanged[$element->field_type] = true;
  47.                             }
  48.                             break;
  49.                         case 'body':
  50.                             if($this->decode_field_data($element->field_data, $element->field_format) == $original_post->post_content){
  51.                                 //$unchanged[$element->field_type] = $element->field_data_translated;
  52.                                 $unchanged[$element->field_type] = true;
  53.                             }
  54.                             break;
  55.                         case 'excerpt':
  56.                             if($this->decode_field_data($element->field_data, $element->field_format) == $original_post->post_excerpt){
  57.                                 //$unchanged[$element->field_type] = $element->field_data_translated;
  58.                                 $unchanged[$element->field_type] = true;
  59.                             }
  60.                             break;                    
  61.                         case 'tags':
  62.                             $terms = (array)get_the_terms( $prev_job->original_doc_id , 'post_tag' );
  63.                             $_taxs = array();
  64.                             foreach($terms as $term){
  65.                                 $_taxs[] = $term->name;    
  66.                             }
  67.                             if($element->field_data == $this->encode_field_data($_taxs, $element->field_format)){
  68.                                 //$unchanged['tags'] = $element->field_data_translated;
  69.                                 $unchanged['tags'] = true;
  70.                             }                    
  71.                             break;
  72.                         case 'categories':
  73.                             $terms = get_the_terms( $prev_job->original_doc_id , 'category' );
  74.                             $_taxs = array();
  75.                             foreach($terms as $term){
  76.                                 $_taxs[] = $term->name;    
  77.                             }
  78.                             if($element->field_data == $this->encode_field_data($_taxs, $element->field_format)){
  79.                                 //$unchanged['categories'] = $element->field_data_translated;
  80.                                 $unchanged['categories'] = true;
  81.                             }                                    
  82.                             break;
  83.                         default:
  84.                             if(false !== strpos($element->field_type, 'field-') && !empty($this->settings['custom_fields_translation'])){                                
  85.                                 $cf_name = preg_replace('#^field-#', '', $element->field_type);
  86.                                 if($this->decode_field_data($element->field_data, $element->field_format) == get_post_meta($prev_job->original_doc_id, $cf_name, 1)){
  87.                                     //$unchanged[$element->field_type] = $element->field_data_translated;
  88.                                     $unchanged[$element->field_type] = true;
  89.                                 }
  90.                             }else{
  91.                                 // taxonomies                                                
  92.                                 if(taxonomy_exists($element->field_type)){
  93.                                     $terms = get_the_terms( $prev_job->original_doc_id , $element->field_type );
  94.                                     $_taxs = array();
  95.                                     foreach($terms as $term){
  96.                                         $_taxs[] = $term->name;    
  97.                                     }
  98.                                     if($element->field_data == $this->encode_field_data($_taxs, $element->field_format)){
  99.                                         //$unchanged[$element->field_type] = $field['data_translated'];
  100.                                         $unchanged[$element->field_type] = true;
  101.                                     }  
  102.                                 }                                  
  103.                             }                
  104.                     }
  105.                 }
  106.             }
  107.             //\change
  108.         }
  109.        
  110.         $wpdb->insert($wpdb->prefix . 'icl_translate_job', array(
  111.             'rid' => $rid,
  112.             'translator_id' => $translator_id,
  113.             'translated'    => 0,
  114.             'manager_id'    => $manager_id
  115.         ));        
  116.         $job_id = $wpdb->insert_id;
  117.        
  118.         foreach($translation_package['contents'] as $field => $value){
  119.             $job_translate = array(
  120.                 'job_id'            => $job_id,
  121.                 'content_id'        => 0,
  122.                 'field_type'        => $field,
  123.                 'field_format'      => isset($value['format'])?$value['format']:'',
  124.                 'field_translate'   => $value['translate'],
  125.                 'field_data'        => $value['data'],
  126.                 'field_data_translated' => isset($prev_translation[$field]) ? $prev_translation[$field] : '',
  127.                 'field_finished'    => 0      
  128.             );
  129.             if(isset($unchanged[$field])){                
  130.                 $job_translate['field_finished'] = 1;
  131.             }
  132.             //$job_translate['field_data_translated'] = $unchanged[$field];    
  133.            
  134.             $wpdb->insert($wpdb->prefix . 'icl_translate', $job_translate);    
  135.         }
  136.        
  137.         if($this->settings['doc_translation_method'] == ICL_TM_TMETHOD_EDITOR){ // only send notifications if the translation editor method is on
  138.             if(!defined('ICL_TM_DISABLE_ALL_NOTIFICATIONS') && $translation_status->translation_service=='local'){
  139.                 if($this->settings['notification']['new-job'] == ICL_TM_NOTIFICATION_IMMEDIATELY){
  140.                     require_once ICL_PLUGIN_PATH . '/inc/translation-management/tm-notification.class.php';
  141.                     if($job_id){
  142.                         $tn_notification = new TM_Notification();
  143.                         if(empty($translator_id)){
  144.                             $tn_notification->new_job_any($job_id);    
  145.                         }else{
  146.                             $tn_notification->new_job_translator($job_id, $translator_id);
  147.                         }            
  148.                     }
  149.                 }
  150.             }
  151.         }
  152.  
  153.         return $job_id;
  154.        
  155.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement