sitepress = $sitepress; $this->template_loader = $template_loader; $this->post_with_media_files_factory = $post_with_media_files_factory; $this->translation_element_factory = $translation_element_factory; } public function add_hooks() { add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_res' ) ); add_action( 'wp_ajax_wpml_media_load_image_selector', array( $this, 'load_images_selector' ) ); add_action( 'wp_ajax_wpml_media_toogle_show_media_selector', array( $this, 'toggle_show_media_selector' ) ); add_filter( 'wpml_translation_dashboard_row_data', array( $this, 'add_media_data_to_dashboard_row' ), 10, 2 ); add_action( 'wpml_tm_after_translation_dashboard_documents', array( $this, 'add_media_selector_preloader' ) ); } public function enqueue_res() { $current_screen = get_current_screen(); if ( $current_screen->id === 'wpml_page_' . $this->sitepress->get_wp_api()->constant( 'WPML_TM_FOLDER' ) . '/menu/main' ) { $wpml_media_url = $this->sitepress->get_wp_api()->constant( 'WPML_MEDIA_URL' ); wp_enqueue_script( 'wpml-media-selector', $wpml_media_url . '/res/js/media-selector.js', array( 'jquery' ), false, true ); wp_enqueue_style( 'wpml-media-selector', $wpml_media_url . '/res/css/media-selector.css', array() ); } } public function load_images_selector() { $post_id = (int) $_POST['post_id']; $languages = array_map( 'sanitize_text_field', $_POST['languages'] ); $media_files_list = $this->get_media_files_list( $post_id, $languages ); $media_files_count = count( $media_files_list ); $model = array( 'files' => $media_files_list, 'post_id' => $post_id ); $html = $this->template_loader->get_template()->show( $model, 'media-selector.twig' ); wp_send_json_success( array( 'html' => $html, 'media_files_count' => $media_files_count ) ); } /** * @param int $post_id * @param array $languages * * @return array */ private function get_media_files_list( $post_id, $languages ) { $media_files_list = array(); $post_with_media = $this->post_with_media_files_factory->create( $post_id ); $media_ids = $post_with_media->get_media_ids(); foreach ( $media_ids as $attachment_id ) { $media_files_list[ $attachment_id ] = array( 'thumbnail' => wp_get_attachment_thumb_url( $attachment_id ), 'name' => get_post_field( 'post_title', $attachment_id ), 'translated' => $this->media_file_is_translated( $attachment_id, $languages ) ); } return $media_files_list; } private function media_file_is_translated( $attachment_id, $languages ) { $post_element = $this->translation_element_factory->create( $attachment_id, 'post' ); foreach ( $languages as $language ) { $translation = $post_element->get_translation( $language ); if ( null === $translation || get_post_meta( $attachment_id, '_wp_attached_file', true ) === get_post_meta( $translation->get_id(), '_wp_attached_file', true ) ) { return false; } } return true; } public function toggle_show_media_selector() { $current_value = get_user_meta( get_current_user_id(), self::USER_META_HIDE_POST_MEDIA_SELECTOR, true ); update_user_meta( get_current_user_id(), self::USER_META_HIDE_POST_MEDIA_SELECTOR, ! $current_value ); wp_send_json_success(); } /** * @param array $row_data * @param stdClass $doc_data * * @return array */ public function add_media_data_to_dashboard_row( $row_data, $doc_data ) { if ( 0 !== strpos( $doc_data->translation_element_type, 'post_' ) ) { return $row_data; } $row_data = $this->add_post_has_media_flag( $row_data, $doc_data->ID ); $row_data = $this->add_post_type_attribute_data( $row_data, $doc_data->ID ); return $row_data; } /** * @param array $data * @param int $post_id * * @return array */ private function add_post_has_media_flag( array $data, $post_id ) { $data['has-media'] = get_post_meta( $post_id, WPML_Media_Set_Posts_Media_Flag::HAS_MEDIA_POST_FLAG, true ); return $data; } /** * @param array $data * @param int $post_id * * @return array */ private function add_post_type_attribute_data( $data, $post_id ) { $post_type = get_post_type( $post_id ); $post_type_object = get_post_type_object( $post_type ); $data['post-type'] = strtolower( $post_type_object->labels->singular_name ); return $data; } public function add_media_selector_preloader() { $model = array( 'strings' => array( 'has_posts' => sprintf( __( 'Choose which media to translate with this %s', 'wpml-media' ), '%POST_TYPE%' ), 'loading' => __( 'Loading...', 'wpml-media' ) ), 'hide_selector' => get_user_meta( get_current_user_id(), self::USER_META_HIDE_POST_MEDIA_SELECTOR, true ) ); echo $this->template_loader->get_template()->show( $model, 'media-selector-preloader.twig' ); } }