/** * Checks whether the input user is allowed to edit this job * * @param stdClass|WP_User $user * * @return bool */ public function user_can_translate($user) { $translator_id = $this->get_translator_id(); $user_can_take_this_job = $translator_id === 0 || $translator_id === (int) $user->ID; $translator_has_job_language_pairs = $this->blog_translators->is_translator($user->ID, array('lang_from' => $this->get_source_language_code(), 'lang_to' => $this->get_language_code())); return $user_can_take_this_job && $translator_has_job_language_pairs || method_exists($user, 'has_cap') && $user->has_cap('manage_options') || !method_exists($user, 'has_cap') && user_can($user->ID, 'manage_options'); }
public function translator_languages_pairs_filter($default, $user) { $result = $default; $user_id = $this->get_user_id($user); if (is_numeric($user_id)) { if ($this->blog_translators->is_translator($user_id)) { $result = $this->blog_translators->get_language_pairs($user_id); } } return $result; }
public static function get_job_id_from_request() { /** * @var TranslationManagement $iclTranslationManagement * @var WPML_Post_Translation $wpml_post_translations */ global $iclTranslationManagement, $wpml_post_translations, $wpml_translation_job_factory, $sitepress, $wpdb; $job_id = filter_input(INPUT_GET, 'job_id', FILTER_SANITIZE_NUMBER_INT); $trid = filter_input(INPUT_GET, 'trid', FILTER_SANITIZE_NUMBER_INT); $language_code = filter_input(INPUT_GET, 'language_code', FILTER_SANITIZE_FULL_SPECIAL_CHARS); $source_language_code = filter_input(INPUT_GET, 'source_language_code', FILTER_SANITIZE_FULL_SPECIAL_CHARS); if (!$job_id && $trid && $language_code) { $job_id = $iclTranslationManagement->get_translation_job_id($trid, $language_code); if (!$job_id) { if (!$source_language_code) { $post_id = SitePress::get_original_element_id_by_trid($trid); } else { $posts_in_trid = $wpml_post_translations->get_element_translations(false, $trid); $post_id = isset($posts_in_trid[$source_language_code]) ? $posts_in_trid[$source_language_code] : false; } $blog_translators = new WPML_TM_Blog_Translators($wpdb); $args = array('lang_from' => $source_language_code, 'lang_to' => $language_code, 'job_id' => $job_id); if ($post_id && $blog_translators->is_translator($sitepress->get_current_user()->ID, $args)) { $job_id = $wpml_translation_job_factory->create_local_post_job($post_id, $language_code); } } } return $job_id; }
public function translator_languages_pairs_filter($default, $user) { $result = $default; $user_id = $this->get_user_id($user); if (is_numeric($user_id)) { $blog_translators = new WPML_TM_Blog_Translators($this->wpdb); if ($blog_translators->is_translator($user_id)) { $result = get_user_meta($user_id, $this->wpdb->prefix . 'language_pairs', true); } } return $result; }
/** * Adds the given language pair to the user. * * @param int $user_id * @param string $target_lang * @param string $source_lang * * @used-by \WPML_TM_Post_Actions::save_post_actions to add language pairs to admin users automatically when saving * a translation in a given language pair. */ private function maybe_add_as_translator($user_id, $target_lang, $source_lang) { if ($target_lang && !$this->blog_translators->is_translator($user_id, array('lang_from' => $source_lang, 'lang_to' => $target_lang, 'admin_override' => false))) { $this->action_helper->get_tm_instance()->add_translator($user_id, array($source_lang => array($target_lang => 1))); } }