Files
doitinpoland.com/wp-content/plugins/wpml-media-translation/classes/media-translation/class-wpml-media-image-translate.php
2023-09-12 21:41:04 +02:00

131 lines
3.5 KiB
PHP

<?php
/**
* Class WPML_Media_Image_Translate
* Allows getting translated images in a give language from an attachment
*/
class WPML_Media_Image_Translate {
/**
* @var SitePress
*/
private $sitepress;
/**
* @var WPML_Media_Attachment_By_URL_Factory
*/
private $attachment_by_url_factory;
/**
* WPML_Media_Image_Translate constructor.
*
* @param SitePress $sitepress
* @param WPML_Media_Attachment_By_URL_Factory $attachment_by_url_factory
*/
public function __construct( SitePress $sitepress, WPML_Media_Attachment_By_URL_Factory $attachment_by_url_factory ) {
$this->sitepress = $sitepress;
$this->attachment_by_url_factory = $attachment_by_url_factory;
}
/**
* @param int $attachment_id
* @param string $language
* @param string $size
*
* @return string
*/
public function get_translated_image( $attachment_id, $language, $size = null ) {
$image_url = '';
$attachment = new WPML_Post_Element( $attachment_id, $this->sitepress );
$attachment_translation = $attachment->get_translation( $language );
if ( $attachment_translation ) {
$uploads_dir = wp_get_upload_dir();
$attachment_id = $attachment_translation->get_id();
if ( null === $size ) {
$image_url = $uploads_dir['baseurl'] . '/' . get_post_meta( $attachment_id, '_wp_attached_file', true );
} else {
$image_url = $this->get_sized_image_url( $attachment_id, $size, $uploads_dir );
}
}
return $image_url;
}
/**
* @param string $img_src
* @param string $source_language
* @param string $target_language
*
* @return string|bool
*/
public function get_translated_image_by_url( $img_src, $source_language, $target_language ) {
$attachment_id = $this->get_attachment_id_by_url( $img_src, $source_language );
if ( $attachment_id ) {
$size = $this->get_image_size_from_url( $img_src, $attachment_id );
try {
$img_src = $this->get_translated_image( $attachment_id, $target_language, $size );
} catch ( Exception $e ) {
$img_src = false;
}
} else {
$img_src = false;
}
return $img_src;
}
/**
* @param string $img_src
* @param string $source_language
*
* @return int
*/
public function get_attachment_id_by_url( $img_src, $source_language ) {
$attachment_by_url = $this->attachment_by_url_factory->create( $img_src, $source_language );
return (int) $attachment_by_url->get_id();
}
/**
* @param string $url
* @param int $attachment_id
*
* @return string
*/
private function get_image_size_from_url( $url, $attachment_id ) {
$media_sizes = new WPML_Media_Sizes();
return $media_sizes->get_image_size_from_url( $url, $attachment_id );
}
/**
* @param $attachment_id
* @param $size
* @param $uploads_dir
*
* @return string
*/
private function get_sized_image_url( $attachment_id, $size, $uploads_dir ) {
$image_url = '';
$meta_data = wp_get_attachment_metadata( $attachment_id );
if ( array_key_exists( $size, $meta_data['sizes'] ) ) {
$image_url_parts = array( $uploads_dir['baseurl'] );
if ( array_key_exists( 'file', $meta_data ) ) {
$file_subdirectory = $meta_data['file'];
$file_subdirectory_parts = explode( '/', $file_subdirectory );
array_pop( $file_subdirectory_parts );
$image_url_parts[] = implode( '/', $file_subdirectory_parts );
}
$image_url_parts[] = $meta_data['sizes'][ $size ]['file'];
$image_url = implode( '/', $image_url_parts );
}
return $image_url;
}
}