/**
  * @param int   $user_id
  * @param array $args
  *
  * @return bool
  */
 function is_translator($user_id, $args = array())
 {
     $admin_override = true;
     extract($args, EXTR_OVERWRITE);
     $is_translator = $this->sitepress->get_wp_api()->user_can($user_id, 'translate');
     // check if user is administrator and return true if he is
     if ($admin_override && $this->sitepress->get_wp_api()->user_can($user_id, 'manage_options')) {
         $is_translator = true;
     } else {
         if (isset($lang_from) && isset($lang_to)) {
             $user_language_pairs = $this->get_language_pairs($user_id);
             if (!empty($user_language_pairs)) {
                 foreach ($user_language_pairs as $user_lang_from => $user_lang_to) {
                     if (array_key_exists($lang_to, $user_lang_to)) {
                         $is_translator = true;
                         break;
                     }
                 }
             } else {
                 $is_translator = false;
             }
         }
         if (isset($job_id)) {
             $job_record = $this->tm_records->icl_translate_job_by_job_id($job_id);
             $translator_id = in_array($job_record->service(), array('local', 0)) ? $job_record->translator_id() : -1;
             $is_translator = $translator_id == $user_id || $is_translator && empty($translator_id);
         }
     }
     return apply_filters('wpml_override_is_translator', $is_translator, $user_id, $args);
 }
 private function get_validation_results($job, $data_to_validate)
 {
     $is_valid = true;
     $original_post = $data_to_validate['original_post'];
     $element_type_prefix = $data_to_validate['type_prefix'];
     $validation_default_results = array('is_valid' => $is_valid, 'messages' => array());
     if (!$job || !$original_post || !$element_type_prefix) {
         $is_valid = false;
         if (!$job) {
             $validation_default_results['messages'][] = __('Job ID is missing', 'sitepress');
         }
         if (!$original_post) {
             $validation_default_results['messages'][] = __('The original post cannot be retrieved', 'sitepress');
         }
         if (!$element_type_prefix) {
             $validation_default_results['messages'][] = __('The type of the post cannot be retrieved', 'sitepress');
         }
     } elseif (!$this->tm_records->icl_translate_job_by_job_id($job->job_id)->is_open()) {
         $is_valid = false;
         $validation_default_results['messages'][] = __('This job cannot be edited anymore because a newer job for this element exists.', 'wpml-translation-management');
     }
     $validation_default_results['is_valid'] = $is_valid;
     $validation_results = apply_filters('wpml_translation_validation_data', $validation_default_results, $data_to_validate);
     $validation_results = array_merge($validation_default_results, $validation_results);
     if (!$is_valid && $validation_results['is_valid']) {
         $validation_results['is_valid'] = $is_valid;
     }
     return $validation_results;
 }
 /**
  * @param int   $user_id
  * @param array $args
  *
  * @return bool
  */
 function is_translator($user_id, $args = array())
 {
     $admin_override = true;
     extract($args, EXTR_OVERWRITE);
     $is_translator = $this->sitepress->get_wp_api()->user_can($user_id, 'translate');
     // check if user is administrator and return true if he is
     if ($admin_override && $this->sitepress->get_wp_api()->user_can($user_id, 'activate_plugins')) {
         $is_translator = true;
     } else {
         if (isset($lang_from) && isset($lang_to)) {
             $um = $this->get_language_pairs($user_id);
             $is_translator = $is_translator && isset($um[$lang_from]) && isset($um[$lang_from][$lang_to]) && $um[$lang_from][$lang_to];
         }
         if (isset($job_id)) {
             $job_record = $this->tm_records->icl_translate_job_by_job_id($job_id);
             $translator_id = in_array($job_record->service(), array('local', 0)) ? $job_record->translator_id() : -1;
             $is_translator = $translator_id == $user_id || $is_translator && empty($translator_id);
         }
     }
     return apply_filters('wpml_override_is_translator', $is_translator, $user_id, $args);
 }