function cancel_translation_request($translation_id)
 {
     global $wpdb;
     if (is_array($translation_id)) {
         foreach ($translation_id as $id) {
             $this->cancel_translation_request($id);
         }
     } else {
         list($rid, $translator_id) = $wpdb->get_row($wpdb->prepare("SELECT rid, translator_id FROM {$wpdb->prefix}icl_translation_status WHERE translation_id=%d", $translation_id), ARRAY_N);
         $job_id = $wpdb->get_var($wpdb->prepare("SELECT job_id FROM {$wpdb->prefix}icl_translate_job WHERE rid=%d AND revision IS NULL ", $rid));
         if ($this->settings['notification']['resigned'] == ICL_TM_NOTIFICATION_IMMEDIATELY && !empty($translator_id)) {
             require_once ICL_PLUGIN_PATH . '/inc/translation-management/tm-notification.class.php';
             $tn_notification = new TM_Notification();
             $tn_notification->translator_removed($translator_id, $job_id);
             $tn_notification->mail_queue();
         }
         $wpdb->query($wpdb->prepare("DELETE FROM {$wpdb->prefix}icl_translate_job WHERE job_id=%d", $job_id));
         $wpdb->query($wpdb->prepare("DELETE FROM {$wpdb->prefix}icl_translate WHERE job_id=%d", $job_id));
         $max_job_id = $wpdb->get_var($wpdb->prepare("SELECT MAX(job_id) FROM {$wpdb->prefix}icl_translate_job WHERE rid=%d", $rid));
         if ($max_job_id) {
             $wpdb->query($wpdb->prepare("UPDATE {$wpdb->prefix}icl_translate_job SET revision = NULL WHERE job_id=%d", $max_job_id));
             $_prevstate = $wpdb->get_var($wpdb->prepare("SELECT _prevstate FROM {$wpdb->prefix}icl_translation_status WHERE translation_id = %d", $translation_id));
             if (!empty($_prevstate)) {
                 $_prevstate = unserialize($_prevstate);
                 $wpdb->update($wpdb->prefix . 'icl_translation_status', array('status' => $_prevstate['status'], 'translator_id' => $_prevstate['translator_id'], 'needs_update' => $_prevstate['needs_update'], 'md5' => $_prevstate['md5'], 'translation_service' => $_prevstate['translation_service'], 'translation_package' => $_prevstate['translation_package'], 'timestamp' => $_prevstate['timestamp'], 'links_fixed' => $_prevstate['links_fixed']), array('translation_id' => $translation_id));
             }
         } else {
             $wpdb->query($wpdb->prepare("DELETE FROM {$wpdb->prefix}icl_translation_status WHERE translation_id=%d", $translation_id));
         }
         // delete record from icl_translations if trid is null
         $wpdb->query($wpdb->prepare("DELETE FROM {$wpdb->prefix}icl_translations WHERE translation_id=%d AND element_id IS NULL", $translation_id));
     }
 }
 function resign_translator($job_id)
 {
     global $wpdb;
     list($translator_id, $rid) = $wpdb->get_row($wpdb->prepare("SELECT translator_id, rid FROM {$wpdb->prefix}icl_translate_job WHERE job_id=%d", $job_id), ARRAY_N);
     if (!empty($translator_id)) {
         if ($this->settings['notification']['resigned'] != ICL_TM_NOTIFICATION_NONE) {
             require_once ICL_PLUGIN_PATH . '/inc/translation-management/tm-notification.class.php';
             if ($job_id) {
                 $tn_notification = new TM_Notification();
                 $tn_notification->translator_resigned($translator_id, $job_id);
             }
         }
     }
     $wpdb->update($wpdb->prefix . 'icl_translate_job', array('translator_id' => 0), array('job_id' => $job_id));
     $wpdb->update($wpdb->prefix . 'icl_translation_status', array('translator_id' => 0, 'status' => ICL_TM_WAITING_FOR_TRANSLATOR), array('rid' => $rid));
 }