[FEATURE] Allow to override PATH_site via environment variables 31/51331/10
authorHelmut Hummel <typo3@helhum.io>
Mon, 16 Jan 2017 20:35:26 +0000 (21:35 +0100)
committerBenni Mack <benni@typo3.org>
Thu, 30 Mar 2017 13:26:03 +0000 (15:26 +0200)
In order to make it possible to call TYPO3 from outside the document
root (e.g. CLI binaries) the patch allows to set TYPO3_PATH_ROOT via
environment variables.

This way it is possible to call binaries / external applications that
use the TYPO3 system environment builder.

The env variables are already set via the TYPO3 Console composer
plugin, and could also be incorporated in the composer-plugin of
the TYPO3 Core.

Resolves: #79343
Resolves: #79461
Releases: master
Change-Id: I078b050e35ef7de54744318386139859c2160a0b
Reviewed-on: https://review.typo3.org/51331
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Susanne Moog <susanne.moog@typo3.org>
Tested-by: Susanne Moog <susanne.moog@typo3.org>
Reviewed-by: Helmut Hummel <typo3@helhum.io>
Tested-by: Helmut Hummel <typo3@helhum.io>
Reviewed-by: Claus Due <claus@phpmind.net>
Tested-by: Claus Due <claus@phpmind.net>
Reviewed-by: Benni Mack <benni@typo3.org>
Tested-by: Benni Mack <benni@typo3.org>
components/testing_framework/Classes/Core/Testbase.php
components/testing_framework/Resources/Core/Build/UnitTestsBootstrap.php
typo3/sysext/core/Classes/Core/SystemEnvironmentBuilder.php
typo3/sysext/core/Documentation/Changelog/master/Feature-79343-AllowOverridingPATH_siteViaEnvironmentVariable.rst [new file with mode: 0644]

index 24b1ef3..93545bc 100644 (file)
@@ -97,7 +97,7 @@ class Testbase
         $_SERVER['SCRIPT_NAME'] = PATH_thisScript;
 
         if (!file_exists(PATH_thisScript)) {
-            $this->exitWithMessage('Unable to determine path to entry script. Please check your path or set an environment variable \'TYPO3_PATH_WEB\' to your root path.');
+            $this->exitWithMessage('Unable to determine path to entry script. Please check your path or set an environment variable \'TYPO3_PATH_ROOT\' to your root path.');
         }
     }
 
@@ -113,7 +113,7 @@ class Testbase
         }
 
         if (!file_exists(ORIGINAL_ROOT . 'typo3/cli_dispatch.phpsh')) {
-            $this->exitWithMessage('Unable to determine path to entry script. Please check your path or set an environment variable \'TYPO3_PATH_WEB\' to your root path.');
+            $this->exitWithMessage('Unable to determine path to entry script. Please check your path or set an environment variable \'TYPO3_PATH_ROOT\' to your root path.');
         }
     }
 
@@ -681,7 +681,10 @@ class Testbase
      */
     protected function getWebRoot()
     {
-        if (getenv('TYPO3_PATH_WEB')) {
+        if (getenv('TYPO3_PATH_ROOT')) {
+            $webRoot = getenv('TYPO3_PATH_ROOT');
+        } elseif (getenv('TYPO3_PATH_WEB')) {
+            // @deprecated
             $webRoot = getenv('TYPO3_PATH_WEB');
         } else {
             $webRoot = getcwd();
index 33576e6..5fb2181 100644 (file)
@@ -45,7 +45,7 @@ call_user_func(function () {
     // Retrieve an instance of class loader and inject to core bootstrap
     $classLoaderFilepath = __DIR__ . '/../../../../../vendor/autoload.php';
     if (!file_exists($classLoaderFilepath)) {
-        die('ClassLoader can\'t be loaded. Please check your path or set an environment variable \'TYPO3_PATH_WEB\' to your root path.');
+        die('ClassLoader can\'t be loaded. Please check your path or set an environment variable \'TYPO3_PATH_ROOT\' to your root path.');
     }
     $classLoader = require $classLoaderFilepath;
     \TYPO3\CMS\Core\Core\Bootstrap::getInstance()
index 33ee08c..5e9dd31 100644 (file)
@@ -160,7 +160,13 @@ class SystemEnvironmentBuilder
         // Absolute path of the document root of the instance with trailing slash
         // Example "/var/www/instance-name/htdocs/"
         if (!defined('PATH_site')) {
-            define('PATH_site', self::getPathSite($entryPointLevel));
+            // Check if the site path has been set by the outside (e.g. dotenv or the composer installer)
+            if (getenv('TYPO3_PATH_ROOT')) {
+                $rootPath = getenv('TYPO3_PATH_ROOT');
+                define('PATH_site', $rootPath . '/');
+            } else {
+                define('PATH_site', self::getPathSite($entryPointLevel));
+            }
         }
         // Absolute path of the typo3 directory of the instance with trailing slash
         // Example "/var/www/instance-name/htdocs/typo3/"
diff --git a/typo3/sysext/core/Documentation/Changelog/master/Feature-79343-AllowOverridingPATH_siteViaEnvironmentVariable.rst b/typo3/sysext/core/Documentation/Changelog/master/Feature-79343-AllowOverridingPATH_siteViaEnvironmentVariable.rst
new file mode 100644 (file)
index 0000000..00818d7
--- /dev/null
@@ -0,0 +1,25 @@
+.. include:: ../../Includes.txt
+
+=====================================================================
+Feature: #79343 - Allow overriding PATH_site via environment variable
+=====================================================================
+
+See :issue:`79343`
+
+Description
+===========
+
+It is now possible to define the `PATH_site` constant, which acts as a basis for any entry point
+running a TYPO3 system, via the environment variable `TYPO3_PATH_ROOT`.
+
+This variable is automatically calculated and set for any TYPO3 installation set up via composer,
+making it possible to run the TYPO3 command line interface from any location of the system.
+
+
+Impact
+======
+
+When using the command line entry-point `typo3/sysext/core/bin/typo3` with composer, it can also
+be called from a projects' default `bin/` directory.
+
+.. index:: CLI, PHP-API
\ No newline at end of file