X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=CRM%2FUtils%2FFile.php;h=000d9505d4b71167e8397369f95082a52a393591;hb=b2c9a0e36dd10d388b6ea0cab6afdc6e253119d0;hp=69a5465ca047247867d50245a6fead37ae8dfd0f;hpb=2348546bf725cefd3a3c42f43a1ec73287350dc4;p=civicrm-core.git diff --git a/CRM/Utils/File.php b/CRM/Utils/File.php index 69a5465ca0..000d9505d4 100644 --- a/CRM/Utils/File.php +++ b/CRM/Utils/File.php @@ -577,8 +577,19 @@ HTACCESS; } /** - * Create the base file path from which all our internal directories are - * offset. This is derived from the template compile directory set + * (Deprecated) Create the file-path from which all other internal paths are + * computed. This implementation determines it as `dirname(CIVICRM_TEMPLATE_COMPILEDIR)`. + * + * This approach is problematic - e.g. it prevents one from authentically + * splitting the CIVICRM_TEMPLATE_COMPILEDIR away from other dirs. The implementation + * is preserved for backwards compatibility (and should only be called by + * CMS-adapters and by Civi\Core\Paths). + * + * Do not use it for new path construction logic. Instead, use Civi::paths(). + * + * @deprecated + * @see \Civi::paths() + * @see \Civi\Core\Paths */ public static function baseFilePath() { static $_path = NULL; @@ -629,6 +640,10 @@ HTACCESS; * @param $directory * * @return string + * @deprecated + * Computation of a relative path requires some base. + * This implementation is problematic because it relies on an + * implicit base which was constructed problematically. */ public static function relativeDirectory($directory) { // Do nothing on windows @@ -655,12 +670,12 @@ HTACCESS; /** * @param $directory - * @param string|NULL $basePath + * @param string $basePath * The base path when evaluating relative paths. Should include trailing slash. * * @return string */ - public static function absoluteDirectory($directory, $basePath = NULL) { + public static function absoluteDirectory($directory, $basePath) { // check if directory is already absolute, if so return immediately // Note: Windows PHP accepts any mix of "/" or "\", so "C:\htdocs" or "C:/htdocs" would be a valid absolute path if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN' && preg_match(';^[a-zA-Z]:[/\\\\];', $directory)) { @@ -672,8 +687,12 @@ HTACCESS; return $directory; } - // make everything absolute from the baseFilePath - $basePath = ($basePath === NULL) ? self::baseFilePath() : $basePath; + if ($basePath === NULL) { + // Previous versions interpreted `NULL` to mean "default to `self::baseFilePath()`". + // However, no code in the known `universe` relies on this interpretation, and + // the `baseFilePath()` function is problematic/deprecated. + throw new \RuntimeException("absoluteDirectory() requires specifying a basePath"); + } // ensure that $basePath has a trailing slash $basePath = self::addTrailingSlash($basePath);