HEX
Server: Apache/2.4.41 (Ubuntu)
System: Linux wordpress-ubuntu-s-2vcpu-4gb-fra1-01 5.4.0-169-generic #187-Ubuntu SMP Thu Nov 23 14:52:28 UTC 2023 x86_64
User: root (0)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/delta/wp-content/plugins/sitepress-multilingual-cms/classes/class-wpml-file.php
<?php
/**
 * WPML_File class file.
 *
 * @package wpml-core
 */

/**
 * Class WPML_File
 */
class WPML_File {
	/**
	 * WPML WP API instance.
	 *
	 * @var WPML_WP_API $wp_api
	 */
	private $wp_api;

	/**
	 * WP_Filesystem_Direct instance.
	 *
	 * @var WP_Filesystem_Direct
	 */
	private $filesystem;

	/**
	 * WPML_File constructor.
	 *
	 * @param WPML_WP_API|null          $wp_api     WPML WP API instance.
	 * @param WP_Filesystem_Direct|null $filesystem WP_Filesystem_Direct instance.
	 */
	public function __construct( WPML_WP_API $wp_api = null, WP_Filesystem_Direct $filesystem = null ) {
		if ( ! $wp_api ) {
			$wp_api = new WPML_WP_API();
		}

		$this->wp_api = $wp_api;

		if ( ! $filesystem ) {
			$filesystem = new WP_Filesystem_Direct( null );
		}

		$this->filesystem = $filesystem;
	}

	/**
	 * Fix directory separator if backslash is used.
	 *
	 * @param string $path Path to fix.
	 *
	 * @return string
	 */
	public function fix_dir_separator( $path ) {
		$directory_separator = $this->wp_api->constant( 'DIRECTORY_SEPARATOR' );

		return ( '\\' === $directory_separator ) ? str_replace( '/', '\\', $path ) : str_replace( '\\', '/', $path );
	}

	/**
	 * Get uri from file path.
	 *
	 * @param string  $path File path.
	 * @param boolean $trimProtocol
	 *
	 * @return string
	 */
	public function get_uri_from_path( $path, $trimProtocol = true ) {
		$base = null;

		if ( $this->wp_api->defined( 'WP_CONTENT_DIR' ) && $this->wp_api->defined( 'WP_CONTENT_URL' ) ) {
			$base_path = $this->fix_dir_separator( (string) $this->wp_api->constant( 'WP_CONTENT_DIR' ) );

			if ( 0 === strpos( $path, $base_path ) ) {
				$base = array(
					'path' => $base_path,
					'uri'  => $this->wp_api->constant( 'WP_CONTENT_URL' ),
				);
			}

			if ( false === strpos( $path, $base_path ) ) {
				$base = array(
					'path' => $base_path,
					'uri'  => $this->wp_api->constant( 'WP_CONTENT_URL' ),
				);

				$wpml_plugin_folder_parts = explode(
					(string) $this->wp_api->constant( 'DIRECTORY_SEPARATOR' ),
					(string) $this->wp_api->constant( 'WPML_PLUGIN_PATH' )
				);

				if ( $wpml_plugin_folder_parts ) {
					$wpml_plugin_folder_parts = $this->pop_folder_array( 1, $wpml_plugin_folder_parts );

					$wpml_plugins_folder = implode(
						(string) $this->wp_api->constant( 'DIRECTORY_SEPARATOR' ),
						$wpml_plugin_folder_parts
					);
					$path                = str_replace(
						$wpml_plugins_folder,
						(string) $this->wp_api->constant( 'WP_PLUGIN_DIR' ),
						$path
					);
				}
			}
		}

		if ( ! $base ) {
			$base = array(
				'path' => (string) $this->wp_api->constant( 'ABSPATH' ),
				'uri'  => (string) site_url(),
			);
		}

		if ( $trimProtocol ) {
			$base['uri'] = preg_replace( '/(^https?:)/', '', (string) $base['uri'] );
		}

		$relative_path = substr( $path, strlen( $base['path'] ) );
		$relative_path = str_replace( array( '/', '\\' ), '/', $relative_path );
		$relative_path = ltrim( $relative_path, '/' );

		return trailingslashit( (string) $base['uri'] ) . $relative_path;
	}

	/**
	 * Recursive function to pop a folder array.
	 *
	 * @param int      $times
	 * @param string[] $folder_array
	 * @return string[]
	 */
	private function pop_folder_array( $times, $folder_array ) {
		$latest_folder = array_pop( $folder_array );
		if ( '..' === $latest_folder ) {
			return $this->pop_folder_array( $times + 1, $folder_array );
		}
		if ( '.' === $latest_folder ) {
			return $this->pop_folder_array( $times, $folder_array );
		}
		if ( $times > 1 ) {
			return $this->pop_folder_array( $times - 1, $folder_array );
		}
		return $folder_array;
	}

	/**
	 * Get path relative to ABSPATH.
	 *
	 * @param string $path File path.
	 *
	 * @return string
	 */
	public function get_relative_path( $path ) {
		return str_replace( $this->fix_dir_separator( ABSPATH ), '', $this->fix_dir_separator( $path ) );
	}

	/**
	 * Get full file path.
	 *
	 * @param string $path File path.
	 *
	 * @return string
	 */
	public function get_full_path( $path ) {
		return ABSPATH . $this->get_relative_path( $path );
	}

	/**
	 * Check if file exists.
	 *
	 * @param string $path File path.
	 *
	 * @return bool
	 */
	public function file_exists( $path ) {
		return $this->filesystem->is_readable( $this->get_full_path( $path ) );
	}

	/**
	 * Get file modification time.
	 *
	 * @param string $path File path.
	 *
	 * @return int
	 */
	public function get_file_modified_timestamp( $path ) {
		return $this->filesystem->mtime( $this->get_full_path( $path ) );
	}
}