d'; $this->enqueue_mail( $mail ); $this->sitepress->switch_locale(); return $mail; } /** * @param array $model * @param WPML_Element_Translation_Job $job * * @return string */ private function update_model_for_deadline( array $model, WPML_Element_Translation_Job $job ) { if ( $job->is_completed_on_time() ) { $model['deadline_status'] = __( 'The translation job was completed on time.', 'wpml-translation-management' ); } else { $overdue_days = $job->get_number_of_days_overdue(); $model['deadline_status'] = sprintf( _n( 'This translation job is overdue by %s day.', 'This translation job is overdue by %s days.', $overdue_days, 'wpml-translation-management' ), $overdue_days ); if ( $overdue_days >= 7 ) { $model['promote_translation_services'] = ! $this->has_active_remote_service; } } return $model; } /** * @param int $translator_id * @param WPML_Translation_Job|int $job * * @return bool */ public function translator_removed_mail( $translator_id, $job ) { /** @var WPML_Translation_Job $job */ list( $manager_id, $job ) = $this->get_mail_elements( $job ); if ( ! $job || $manager_id == $translator_id ) { return false; } $translator = new WP_User( $translator_id ); $manager = new WP_User( $manager_id ); $user_language = $this->sitepress->get_user_admin_language( $manager->ID ); $doc_title = $job->get_title(); $this->sitepress->switch_locale( $user_language ); list( $lang_from, $lang_to ) = $this->get_lang_to_from( $job, $user_language ); $mail['to'] = $translator->display_name . ' <' . $translator->user_email . '>'; $mail['subject'] = sprintf( __( 'Removed from translation job on %s', 'wpml-translation-management' ), get_bloginfo( 'name' ) ); $mail['body'] = sprintf( __( 'You have been removed from the translation job "%s" for %s to %s.', 'wpml-translation-management' ), $doc_title, $lang_from, $lang_to ); $mail['type'] = 'translator'; $this->enqueue_mail( $mail ); $this->sitepress->switch_locale(); return $mail; } /** * @param int $translator_id * @param int|WPML_Translation_Job $job_id * * @return array|bool */ public function translator_resign_mail( $translator_id, $job_id ) { /** @var WPML_Translation_Job $job */ list( $manager_id, $job ) = $this->get_mail_elements( $job_id ); if ( ! $job || $manager_id == $translator_id ) { return false; } $translator = new WP_User( $translator_id ); $manager = new WP_User( $manager_id ); $tj_url = admin_url( 'admin.php?page=' . WPML_TM_FOLDER . '/menu/main.php&sm=jobs' ); $doc_title = $job->get_title(); $user_language = $this->sitepress->get_user_admin_language( $manager->ID ); $this->sitepress->switch_locale( $user_language ); list( $lang_from, $lang_to ) = $this->get_lang_to_from( $job, $user_language ); $mail = array(); if ( $this->notification_settings['resigned'] == ICL_TM_NOTIFICATION_IMMEDIATELY ) { $mail['to'] = $manager->display_name . ' <' . $manager->user_email . '>'; $mail['subject'] = sprintf( __( 'Translator has resigned from job on %s', 'wpml-translation-management' ), get_bloginfo( 'name' ) ); $original_doc_title = $doc_title ? $doc_title : __( 'Deleted', 'wpml-translation-management'); $mail['body'] = sprintf( __( 'Translator %s has resigned from the translation job "%s" for %s to %s.%sView translation jobs: %s', 'wpml-translation-management' ), $translator->display_name, $original_doc_title, $lang_from, $lang_to, "\n", $tj_url ); $mail['type'] = 'admin'; $this->enqueue_mail( $mail ); } //restore locale $this->sitepress->switch_locale(); return $mail; } private function enqueue_mail( $mail ) { if ( $mail !== 'empty_queue' ) { $this->mail_cache[ $mail['type'] ][ $mail['to'] ][ $mail['subject'] ]['body'][] = $mail['body']; if ( isset( $mail['attachment'] ) ) { $this->mail_cache[ $mail['type'] ][ $mail['to'] ][ $mail['subject'] ]['attachment'][] = $mail['attachment']; } $this->process_mail_queue = true; } } /** * @param int|WPML_Translation_Job $job_id * * @return array */ private function get_mail_elements( $job_id ) { $job = is_object( $job_id ) ? $job_id : $this->job_factory->get_translation_job( $job_id, false, 0, true ); if ( is_object( $job ) ) { $data = $job->get_basic_data(); $manager_id = isset( $data->manager_id ) ? $data->manager_id : - 1; } else { $job = false; $manager_id = false; } return array( $manager_id, $job ); } /** * @param WPML_Translation_Job $job * @param string $user_language * * @return array */ private function get_lang_to_from( $job, $user_language ) { $sql = "SELECT name FROM {$this->wpdb->prefix}icl_languages_translations WHERE language_code=%s AND display_language_code=%s LIMIT 1"; $lang_from = $this->wpdb->get_var( $this->wpdb->prepare( $sql, $job->get_source_language_code(), $user_language ) ); $lang_to = $this->wpdb->get_var( $this->wpdb->prepare( $sql, $job->get_language_code(), $user_language ) ); return array( $lang_from, $lang_to ); } }