Files
doitinpoland.com/wp-content/plugins/wpml-string-translation/classes/string-tracking/class-wpml-st-string-positions-in-source.php
2023-09-12 21:41:04 +02:00

138 lines
3.1 KiB
PHP

<?php
/**
* Class WPML_ST_String_Positions_In_Source
*/
class WPML_ST_String_Positions_In_Source extends WPML_ST_String_Positions {
const KIND = ICL_STRING_TRANSLATION_STRING_TRACKING_TYPE_SOURCE;
const TEMPLATE = 'positions-in-source.twig';
/**
* @var SitePress $sitepress
*/
private $sitepress;
/**
* @var WP_Filesystem_Direct $filesystem
*/
private $filesystem;
/**
* @var WPML_File_Name_Converter $filename_converter
*/
private $filename_converter;
/**
* @var \WPML_WP_API
*/
private $wp_api;
public function __construct(
SitePress $sitePress,
WPML_ST_DB_Mappers_String_Positions $string_position_mapper,
IWPML_Template_Service $template_service,
WPML_WP_API $wp_api
) {
$this->sitepress = $sitePress;
$this->wp_api = $wp_api;
parent::__construct( $string_position_mapper, $template_service );
}
protected function get_model( $string_id ) {
$positions = $this->get_positions( $string_id );
$st_settings = $this->sitepress->get_setting( 'st' );
$highlight_color = '#FFFF00';
if ( array_key_exists( 'hl_color', $st_settings ) ) {
$highlight_color = $st_settings['hl_color'];
}
return array(
'positions' => $positions,
'no_results_label' => __( 'No records found', 'wpml-string-translation' ),
'highlight_color' => $highlight_color,
);
}
protected function get_template_name() {
return self::TEMPLATE;
}
/**
* @param int $string_id
*
* @return array
*/
private function get_positions( $string_id ) {
$positions = array();
$paths = $this->get_mapper()->get_positions_by_string_and_kind( $string_id, self::KIND );
foreach ( $paths as $path ) {
$position = explode( '::', $path );
$path = isset( $position[0] ) ? $position[0] : null;
if( ! $this->get_filesystem()->exists( $path ) ) {
$path = $this->maybe_transform_from_relative_path_to_absolute_path( $path );
}
if ( $path && $this->get_filesystem()->is_readable( $path ) ) {
$positions[] = array(
'path' => $path,
'line' => isset( $position[1] ) ? $position[1] : null,
'content' => $this->get_filesystem()->get_contents_array( $path ),
);
}
}
return $positions;
}
/**
* @param string $path
*
* @return string|false
*/
private function maybe_transform_from_relative_path_to_absolute_path( $path ) {
$path = $this->get_filename_converter()->transform_reference_to_realpath( $path );
if ( $this->get_filesystem()->exists( $path ) ) {
return $path;
}
return false;
}
/**
* @return WP_Filesystem_Direct
*/
private function get_filesystem() {
if ( ! $this->filesystem ) {
$this->filesystem = $this->get_wp_api()->get_wp_filesystem_direct();
}
return $this->filesystem;
}
/**
* @return WPML_WP_API
*/
private function get_wp_api() {
if ( ! $this->wp_api ) {
$this->wp_api = new WPML_WP_API();
}
return $this->wp_api;
}
/**
* @return WPML_File_Name_Converter
*/
private function get_filename_converter() {
if ( ! $this->filename_converter ) {
$this->filename_converter = new WPML_File_Name_Converter();
}
return $this->filename_converter;
}
}