HEX
Server: Apache/2.4.63 (Unix)
System: Linux TOMS-220NAS 4.4.302+ #86009 SMP Wed Nov 26 18:19:17 CST 2025 x86_64
User: flavio87 (1026)
PHP: 8.3.27
Disabled: NONE
Upload Files
File: /volume1/web/tom-marchisa/wp-content/plugins/real-physical-media/inc/Util.php
<?php

namespace DevOwl\RealPhysicalMedia;

use DevOwl\RealPhysicalMedia\base\UtilsProvider;
\defined('ABSPATH') or die('No script kiddies please!');
// Avoid direct file request
/**
 * Util helper.
 * @internal
 */
class Util
{
    use UtilsProvider;
    /**
     * This is needed to get the home_url without any additional pathes (e.g. WPML).
     */
    public static function getOriginalHomeUrl()
    {
        // In multisite, `switch_to_blog()` must resolve the hostname from the current blog's
        // persisted options. A global `WP_SITEURL` constant can be request-dependent and would
        // otherwise make every subsite look like the same host.
        if (!\is_multisite() && \defined('WP_HOME')) {
            // Constant is defined (https://wordpress.org/support/article/changing-the-site-url/#edit-wp-config-php)
            $home_url = \constant('WP_HOME');
        } else {
            // Force so the options cache is filled
            \get_option('home');
            // Directly read from our cache cause we want to skip `home` / `option_home` filters (https://git.io/JOnGV)
            // Why `alloptions`? Due to the fact that `home` is `autoloaded=yes`, it is loaded via `wp_load_alloptions` and filled
            // to the cache key `alloptions`. The filters are used by WPML and PolyLang but we do not care about them
            $alloptions = \wp_cache_get('alloptions', 'options');
            $home_url = \is_array($alloptions) ? $alloptions['home'] : \home_url();
        }
        $home_url = \trailingslashit($home_url);
        $home_url = \set_url_scheme($home_url, \is_ssl() ? 'https' : 'http');
        return $home_url;
    }
    /**
     * Remove empty dirs recursively.
     *
     * @param string $path
     * @see http://stackoverflow.com/questions/1833518/remove-empty-subfolders-with-php
     */
    public static function removeEmptyDirs($path)
    {
        $empty = \true;
        foreach (\glob($path . \DIRECTORY_SEPARATOR . '*') as $file) {
            $empty &= \is_dir($file) && self::removeEmptyDirs($file);
        }
        return $empty && @\rmdir($path);
    }
    /**
     * Recursive glob.
     *
     * @param string $base
     * @param string $pattern
     * @param int $flags
     * @see https://stackoverflow.com/a/36034646/5506547
     */
    public static function rglob($base, $pattern, $flags = 0)
    {
        if (\substr($base, -1) !== \DIRECTORY_SEPARATOR) {
            $base .= \DIRECTORY_SEPARATOR;
        }
        $files = \glob($base . $pattern, $flags);
        foreach (\glob($base . '*', \GLOB_ONLYDIR | \GLOB_NOSORT | \GLOB_MARK) as $dir) {
            $dirFiles = self::rglob($dir, $pattern, $flags);
            if ($dirFiles !== \false) {
                $files = \array_merge($files, $dirFiles);
            }
        }
        return $files;
    }
    /**
     * Find the common prefix of a string array.
     *
     * @param string[] $array
     * @see https://stackoverflow.com/a/1336357/5506547
     */
    public static function commonPrefix($array)
    {
        if (\count($array) === 0) {
            return '';
        }
        $pl = 0;
        // common prefix length
        $n = \count($array);
        $l = \strlen($array[0]);
        while ($pl < $l) {
            $c = $array[0][$pl];
            for ($i = 1; $i < $n; $i++) {
                if ($array[$i][$pl] !== $c) {
                    break 2;
                }
            }
            ++$pl;
        }
        return \substr($array[0], 0, $pl);
    }
    /**
     * Checks if a string ends with a given string.
     *
     * @param string $haystack
     * @param string $needle
     * @see https://stackoverflow.com/a/834355/5506547
     */
    public static function endsWith($haystack, $needle)
    {
        if (!\is_string($haystack) || !\is_string($needle)) {
            return \false;
        }
        $length = \strlen($needle);
        if ($length === 0) {
            return \true;
        }
        return \substr($haystack, -$length) === $needle;
    }
}