diff --git a/CHANGELOG.md b/CHANGELOG.md index c5cdc3f86..f38c2ff09 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -69,6 +69,8 @@ 1. [](#new) * Added support for custom `FormFlash` save locations * Added a new `Utils::arrayLower()` method for lowercasing arrays + * Support new GRAV_BASEDIR environment variable [#2541](https://github.com/getgrav/grav/pull/2541) + * Allow users to override plugin handler priorities [#2165](https://github.com/getgrav/grav/pull/2165) 1. [](#improved) * Use new `Utils::getSupportedPageTypes()` to enforce `html,htm` at the front of the list [#2531](https://github.com/getgrav/grav/issues/2531) * Updated vendor libraries diff --git a/system/router.php b/system/router.php index 9ab055892..43571b354 100644 --- a/system/router.php +++ b/system/router.php @@ -17,11 +17,22 @@ if (is_file($_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . $_SERVER['SCRIPT_N return false; } +$grav_index = 'index.php'; + +/* Check the GRAV_BASEDIR environment variable and use if set */ +$grav_basedir = getenv('GRAV_BASEDIR') ?: ''; + +if (isset($grav_basedir)) { + $grav_index = ltrim($grav_basedir, '/') . DIRECTORY_SEPARATOR . $grav_index; + $grav_basedir = DIRECTORY_SEPARATOR . trim($grav_basedir, DIRECTORY_SEPARATOR); + define('GRAV_ROOT', str_replace(DIRECTORY_SEPARATOR, '/', getcwd()) . $grav_basedir); +} + $_SERVER = array_merge($_SERVER, $_ENV); -$_SERVER['SCRIPT_FILENAME'] = $_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . 'index.php'; -$_SERVER['SCRIPT_NAME'] = DIRECTORY_SEPARATOR . 'index.php'; -$_SERVER['PHP_SELF'] = DIRECTORY_SEPARATOR . 'index.php'; +$_SERVER['SCRIPT_FILENAME'] = $_SERVER['DOCUMENT_ROOT'] . $grav_basedir .DIRECTORY_SEPARATOR . 'index.php'; +$_SERVER['SCRIPT_NAME'] = $grav_basedir . DIRECTORY_SEPARATOR . 'index.php'; +$_SERVER['PHP_SELF'] = $grav_basedir . DIRECTORY_SEPARATOR . 'index.php'; error_log(sprintf('%s:%d [%d]: %s', $_SERVER['REMOTE_ADDR'], $_SERVER['REMOTE_PORT'], http_response_code(), $_SERVER['REQUEST_URI']), 4); -require 'index.php'; +require $grav_index; diff --git a/system/src/Grav/Common/Plugin.php b/system/src/Grav/Common/Plugin.php index d85fcb4cf..8729a519f 100644 --- a/system/src/Grav/Common/Plugin.php +++ b/system/src/Grav/Common/Plugin.php @@ -151,15 +151,32 @@ class Plugin implements EventSubscriberInterface, \ArrayAccess if (\is_string($params)) { $dispatcher->addListener($eventName, [$this, $params]); } elseif (\is_string($params[0])) { - $dispatcher->addListener($eventName, [$this, $params[0]], $params[1] ?? 0); + $dispatcher->addListener($eventName, [$this, $params[0]], $this->getPriority($params, $eventName)); } else { foreach ($params as $listener) { - $dispatcher->addListener($eventName, [$this, $listener[0]], $listener[1] ?? 0); + $dispatcher->addListener($eventName, [$this, $listener[0]], $this->getPriority($listener, $eventName)); } } } } + /** + * @param array $params + * @param string $eventName + */ + private function getPriority($params, $eventName) + { + $grav = Grav::instance(); + $override = implode('.', ["priorities", $this->name, $eventName, $params[0]]); + if ($grav['config']->get($override) !== null) + { + return $grav['config']->get($override); + } elseif (isset($params[1])) { + return $params[1]; + } + return 0; + } + /** * @param array $events */