age $post * * @return bool */ private function update_translation_job_fields( $rid, $post ) { $updated_any = false; $job_id = $this->get_translation_job_id( $rid ); $translation_fields = $this->get_translations_job_fields( $job_id ); if ( isset( $post->string_data ) && is_array( $post->string_data ) ) { foreach ( $post->string_data as $field_type => $field_value ) { $updated = $this->insert_update_translation_job_field( $field_value, $translation_fields, $field_type, $job_id ); if ( ! $updated_any && $updated ) { $updated_any = true; } } } return $updated_any; } protected function get_translation_job_id( $rid ) { global $wpdb; $job_id_query = "SELECT MAX(job_id) FROM {$wpdb->prefix}icl_translate_job WHERE rid=%d GROUP BY rid"; $job_id_prepare = $wpdb->prepare( $job_id_query, $rid ); $job_id = $wpdb->get_var( $job_id_prepare ); return $job_id; } private function get_translations_job_fields( $job_id ) { global $wpdb; $translation_fields_query = "SELECT field_type, field_data, tid, field_translate FROM {$wpdb->prefix}icl_translate WHERE job_id=%d"; $translation_fields_query = $wpdb->prepare( $translation_fields_query, $job_id ); $translation_fields = $wpdb->get_results( $translation_fields_query, OBJECT_K ); return $translation_fields; } private function delete_translation_field( $tid ) { global $wpdb; $wpdb->delete( $wpdb->prefix . 'icl_translate', array( 'tid' => $tid ), array( '%d' ) ); } private function insert_update_translation_job_field( $field_value, $translation_fields, $field_type, $job_id ) { $updated = false; $field_data = base64_encode( $field_value ); if ( ! isset( $translation_fields[ $field_type ] ) ) { $this->insert_translation_field( $job_id, $field_type, $field_data ); $updated = true; } elseif ( $translation_fields[ $field_type ]->field_data != $field_data ) { $this->update_translation_field( $field_data, $translation_fields, $field_type ); $updated = true; } return $updated; } private function update_translation_field( $field_data, $translation_fields, $field_type ) { global $wpdb; $wpdb->update( $wpdb->prefix . 'icl_translate', array( 'field_data' => $field_data, 'field_finished' => 0, ), array( 'tid' => $translation_fields[ $field_type ]->tid ) ); } private function insert_translation_field( $job_id, $field_type, $field_data ) { global $wpdb; $data = array( 'job_id' => $job_id, 'content_id' => 0, 'field_type' => $field_type, 'field_format' => 'base64', 'field_translate' => 1, 'field_data' => $field_data, 'field_data_translated' => 0, 'field_finished' => 0, ); $wpdb->insert( $wpdb->prefix . 'icl_translate', $data ); } public function get_package() { return $this->package; } } age $post * * @return bool */ private function update_translation_job_fields( $rid, $post ) { $updated_any = false; $job_id = $this->get_translation_job_id( $rid ); $translation_fields = $this->get_translations_job_fields( $job_id ); if ( isset( $post->string_data ) && is_array( $post->string_data ) ) { foreach ( $post->string_data as $field_type => $field_value ) { $updated = $this->insert_update_translation_job_field( $field_value, $translation_fields, $field_type, $job_id ); if ( ! $updated_any && $updated ) { $updated_any = true; } } } return $updated_any; } protected function get_translation_job_id( $rid ) { global $wpdb; $job_id_query = "SELECT MAX(job_id) FROM {$wpdb->prefix}icl_translate_job WHERE rid=%d GROUP BY rid"; $job_id_prepare = $wpdb->prepare( $job_id_query, $rid ); $job_id = $wpdb->get_var( $job_id_prepare ); return $job_id; } private function get_translations_job_fields( $job_id ) { global $wpdb; $translation_fields_query = "SELECT field_type, field_data, tid, field_translate FROM {$wpdb->prefix}icl_translate WHERE job_id=%d"; $translation_fields_query = $wpdb->prepare( $translation_fields_query, $job_id ); $translation_fields = $wpdb->get_results( $translation_fields_query, OBJECT_K ); return $translation_fields; } private function delete_translation_field( $tid ) { global $wpdb; $wpdb->delete( $wpdb->prefix . 'icl_translate', array( 'tid' => $tid ), array( '%d' ) ); } private function insert_update_translation_job_field( $field_value, $translation_fields, $field_type, $job_id ) { $updated = false; $field_data = base64_encode( $field_value ); if ( ! isset( $translation_fields[ $field_type ] ) ) { $this->insert_translation_field( $job_id, $field_type, $field_data ); $updated = true; } elseif ( $translation_fields[ $field_type ]->field_data != $field_data ) { $this->update_translation_field( $field_data, $translation_fields, $field_type ); $updated = true; } return $updated; } private function update_translation_field( $field_data, $translation_fields, $field_type ) { global $wpdb; $wpdb->update( $wpdb->prefix . 'icl_translate', array( 'field_data' => $field_data, 'field_finished' => 0, ), array( 'tid' => $translation_fields[ $field_type ]->tid ) ); } private function insert_translation_field( $job_id, $field_type, $field_data ) { global $wpdb; $data = array( 'job_id' => $job_id, 'content_id' => 0, 'field_type' => $field_type, 'field_format' => 'base64', 'field_translate' => 1, 'field_data' => $field_data, 'field_data_translated' => 0, 'field_finished' => 0, ); $wpdb->insert( $wpdb->prefix . 'icl_translate', $data ); } public function get_package() { return $this->package; } }