Skip to content

Commit 56ae4d0

Browse files
[5.0] Allow JPATH constants overridable and make SiteRouter JPATH_PUBLIC aware (#41570)
* Allow JPATH constants overridable and make SiteRouter JPATH_PUBLIC aware Useful for public folder for example or only partial overrides. * Update libraries/src/Router/SiteRouter.php Co-authored-by: Dimitris Grammatikogiannis <[email protected]> --------- Co-authored-by: Dimitris Grammatikogiannis <[email protected]>
1 parent 47c1a9a commit 56ae4d0

File tree

7 files changed

+53
-66
lines changed

7 files changed

+53
-66
lines changed

administrator/includes/app.php

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,7 @@
1717
include_once dirname(__DIR__) . '/defines.php';
1818
}
1919

20-
if (!defined('_JDEFINES')) {
21-
define('JPATH_BASE', dirname(__DIR__));
22-
require_once JPATH_BASE . '/includes/defines.php';
23-
}
24-
25-
if (!defined('JPATH_PUBLIC')) {
26-
define('JPATH_PUBLIC', JPATH_ROOT);
27-
}
20+
require_once __DIR__ . '/defines.php';
2821

2922
// Check for presence of vendor dependencies not included in the git repository
3023
if (!file_exists(JPATH_LIBRARIES . '/vendor/autoload.php') || !is_dir(JPATH_PUBLIC . '/media/vendor')) {

administrator/includes/defines.php

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -9,21 +9,24 @@
99

1010
defined('_JEXEC') or die;
1111

12+
// Define JPATH constants if not defined yet
13+
defined('JPATH_BASE') || define('JPATH_BASE', dirname(__DIR__));
14+
1215
// Global definitions
1316
$parts = explode(DIRECTORY_SEPARATOR, JPATH_BASE);
1417
array_pop($parts);
1518

1619
// Defines
17-
define('JPATH_ROOT', implode(DIRECTORY_SEPARATOR, $parts));
18-
define('JPATH_SITE', JPATH_ROOT);
19-
define('JPATH_PUBLIC', JPATH_ROOT);
20-
define('JPATH_CONFIGURATION', JPATH_ROOT);
21-
define('JPATH_ADMINISTRATOR', JPATH_ROOT . DIRECTORY_SEPARATOR . 'administrator');
22-
define('JPATH_LIBRARIES', JPATH_ROOT . DIRECTORY_SEPARATOR . 'libraries');
23-
define('JPATH_PLUGINS', JPATH_ROOT . DIRECTORY_SEPARATOR . 'plugins');
24-
define('JPATH_INSTALLATION', JPATH_ROOT . DIRECTORY_SEPARATOR . 'installation');
25-
define('JPATH_THEMES', JPATH_BASE . DIRECTORY_SEPARATOR . 'templates');
26-
define('JPATH_CACHE', JPATH_ADMINISTRATOR . DIRECTORY_SEPARATOR . 'cache');
27-
define('JPATH_MANIFESTS', JPATH_ADMINISTRATOR . DIRECTORY_SEPARATOR . 'manifests');
28-
define('JPATH_API', JPATH_ROOT . DIRECTORY_SEPARATOR . 'api');
29-
define('JPATH_CLI', JPATH_ROOT . DIRECTORY_SEPARATOR . 'cli');
20+
defined('JPATH_ROOT') || define('JPATH_ROOT', implode(DIRECTORY_SEPARATOR, $parts));
21+
defined('JPATH_SITE') || define('JPATH_SITE', JPATH_ROOT);
22+
defined('JPATH_PUBLIC') || define('JPATH_PUBLIC', JPATH_ROOT);
23+
defined('JPATH_CONFIGURATION') || define('JPATH_CONFIGURATION', JPATH_ROOT);
24+
defined('JPATH_ADMINISTRATOR') || define('JPATH_ADMINISTRATOR', JPATH_ROOT . DIRECTORY_SEPARATOR . 'administrator');
25+
defined('JPATH_LIBRARIES') || define('JPATH_LIBRARIES', JPATH_ROOT . DIRECTORY_SEPARATOR . 'libraries');
26+
defined('JPATH_PLUGINS') || define('JPATH_PLUGINS', JPATH_ROOT . DIRECTORY_SEPARATOR . 'plugins');
27+
defined('JPATH_INSTALLATION') || define('JPATH_INSTALLATION', JPATH_ROOT . DIRECTORY_SEPARATOR . 'installation');
28+
defined('JPATH_THEMES') || define('JPATH_THEMES', JPATH_BASE . DIRECTORY_SEPARATOR . 'templates');
29+
defined('JPATH_CACHE') || define('JPATH_CACHE', JPATH_ADMINISTRATOR . DIRECTORY_SEPARATOR . 'cache');
30+
defined('JPATH_MANIFESTS') || define('JPATH_MANIFESTS', JPATH_ADMINISTRATOR . DIRECTORY_SEPARATOR . 'manifests');
31+
defined('JPATH_API') || define('JPATH_API', JPATH_ROOT . DIRECTORY_SEPARATOR . 'api');
32+
defined('JPATH_CLI') || define('JPATH_CLI', JPATH_ROOT . DIRECTORY_SEPARATOR . 'cli');

api/includes/app.php

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,7 @@
1717
include_once dirname(__DIR__) . '/defines.php';
1818
}
1919

20-
if (!defined('_JDEFINES')) {
21-
define('JPATH_BASE', dirname(__DIR__));
22-
require_once JPATH_BASE . '/includes/defines.php';
23-
}
24-
25-
if (!defined('JPATH_PUBLIC')) {
26-
define('JPATH_PUBLIC', JPATH_ROOT);
27-
}
20+
require_once __DIR__ . '/defines.php';
2821

2922
require_once JPATH_BASE . '/includes/framework.php';
3023

api/includes/defines.php

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,21 +9,24 @@
99

1010
defined('_JEXEC') or die;
1111

12+
// Define JPATH constants if not defined yet
13+
defined('JPATH_BASE') || define('JPATH_BASE', dirname(__DIR__));
14+
1215
// Global definitions
1316
$parts = explode(DIRECTORY_SEPARATOR, JPATH_BASE);
1417
array_pop($parts);
1518

16-
// Defines.
17-
define('JPATH_ROOT', implode(DIRECTORY_SEPARATOR, $parts));
18-
define('JPATH_SITE', JPATH_ROOT);
19-
define('JPATH_PUBLIC', JPATH_ROOT);
20-
define('JPATH_CONFIGURATION', JPATH_ROOT);
21-
define('JPATH_ADMINISTRATOR', JPATH_ROOT . DIRECTORY_SEPARATOR . 'administrator');
22-
define('JPATH_LIBRARIES', JPATH_ROOT . DIRECTORY_SEPARATOR . 'libraries');
23-
define('JPATH_PLUGINS', JPATH_ROOT . DIRECTORY_SEPARATOR . 'plugins');
24-
define('JPATH_INSTALLATION', JPATH_ROOT . DIRECTORY_SEPARATOR . 'installation');
25-
define('JPATH_THEMES', JPATH_BASE . DIRECTORY_SEPARATOR . 'templates');
26-
define('JPATH_CACHE', JPATH_ADMINISTRATOR . DIRECTORY_SEPARATOR . 'cache');
27-
define('JPATH_MANIFESTS', JPATH_ADMINISTRATOR . DIRECTORY_SEPARATOR . 'manifests');
28-
define('JPATH_API', JPATH_ROOT . DIRECTORY_SEPARATOR . 'api');
29-
define('JPATH_CLI', JPATH_ROOT . DIRECTORY_SEPARATOR . 'cli');
19+
// Defines
20+
defined('JPATH_ROOT') || define('JPATH_ROOT', implode(DIRECTORY_SEPARATOR, $parts));
21+
defined('JPATH_SITE') || define('JPATH_SITE', JPATH_ROOT);
22+
defined('JPATH_PUBLIC') || define('JPATH_PUBLIC', JPATH_ROOT);
23+
defined('JPATH_CONFIGURATION') || define('JPATH_CONFIGURATION', JPATH_ROOT);
24+
defined('JPATH_ADMINISTRATOR') || define('JPATH_ADMINISTRATOR', JPATH_ROOT . DIRECTORY_SEPARATOR . 'administrator');
25+
defined('JPATH_LIBRARIES') || define('JPATH_LIBRARIES', JPATH_ROOT . DIRECTORY_SEPARATOR . 'libraries');
26+
defined('JPATH_PLUGINS') || define('JPATH_PLUGINS', JPATH_ROOT . DIRECTORY_SEPARATOR . 'plugins');
27+
defined('JPATH_INSTALLATION') || define('JPATH_INSTALLATION', JPATH_ROOT . DIRECTORY_SEPARATOR . 'installation');
28+
defined('JPATH_THEMES') || define('JPATH_THEMES', JPATH_BASE . DIRECTORY_SEPARATOR . 'templates');
29+
defined('JPATH_CACHE') || define('JPATH_CACHE', JPATH_ADMINISTRATOR . DIRECTORY_SEPARATOR . 'cache');
30+
defined('JPATH_MANIFESTS') || define('JPATH_MANIFESTS', JPATH_ADMINISTRATOR . DIRECTORY_SEPARATOR . 'manifests');
31+
defined('JPATH_API') || define('JPATH_API', JPATH_ROOT . DIRECTORY_SEPARATOR . 'api');
32+
defined('JPATH_CLI') || define('JPATH_CLI', JPATH_ROOT . DIRECTORY_SEPARATOR . 'cli');

includes/app.php

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,7 @@
1717
include_once dirname(__DIR__) . '/defines.php';
1818
}
1919

20-
if (!defined('_JDEFINES')) {
21-
define('JPATH_BASE', dirname(__DIR__));
22-
require_once JPATH_BASE . '/includes/defines.php';
23-
}
20+
require_once __DIR__ . '/defines.php';
2421

2522
if (!defined('JPATH_PUBLIC')) {
2623
define('JPATH_PUBLIC', JPATH_ROOT);

includes/defines.php

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -9,20 +9,18 @@
99

1010
defined('_JEXEC') or die;
1111

12-
// Global definitions
13-
$parts = explode(DIRECTORY_SEPARATOR, JPATH_BASE);
14-
15-
// Defines.
16-
define('JPATH_ROOT', implode(DIRECTORY_SEPARATOR, $parts));
17-
define('JPATH_SITE', JPATH_ROOT);
18-
define('JPATH_CONFIGURATION', JPATH_ROOT);
19-
define('JPATH_PUBLIC', JPATH_ROOT);
20-
define('JPATH_ADMINISTRATOR', JPATH_ROOT . DIRECTORY_SEPARATOR . 'administrator');
21-
define('JPATH_LIBRARIES', JPATH_ROOT . DIRECTORY_SEPARATOR . 'libraries');
22-
define('JPATH_PLUGINS', JPATH_ROOT . DIRECTORY_SEPARATOR . 'plugins');
23-
define('JPATH_INSTALLATION', JPATH_ROOT . DIRECTORY_SEPARATOR . 'installation');
24-
define('JPATH_THEMES', JPATH_BASE . DIRECTORY_SEPARATOR . 'templates');
25-
define('JPATH_CACHE', JPATH_ADMINISTRATOR . DIRECTORY_SEPARATOR . 'cache');
26-
define('JPATH_MANIFESTS', JPATH_ADMINISTRATOR . DIRECTORY_SEPARATOR . 'manifests');
27-
define('JPATH_API', JPATH_ROOT . DIRECTORY_SEPARATOR . 'api');
28-
define('JPATH_CLI', JPATH_ROOT . DIRECTORY_SEPARATOR . 'cli');
12+
// Define JPATH constants if not defined yet
13+
defined('JPATH_BASE') || define('JPATH_BASE', dirname(__DIR__));
14+
defined('JPATH_ROOT') || define('JPATH_ROOT', JPATH_BASE);
15+
defined('JPATH_SITE') || define('JPATH_SITE', JPATH_ROOT);
16+
defined('JPATH_PUBLIC') || define('JPATH_PUBLIC', JPATH_ROOT);
17+
defined('JPATH_CONFIGURATION') || define('JPATH_CONFIGURATION', JPATH_ROOT);
18+
defined('JPATH_ADMINISTRATOR') || define('JPATH_ADMINISTRATOR', JPATH_ROOT . DIRECTORY_SEPARATOR . 'administrator');
19+
defined('JPATH_LIBRARIES') || define('JPATH_LIBRARIES', JPATH_ROOT . DIRECTORY_SEPARATOR . 'libraries');
20+
defined('JPATH_PLUGINS') || define('JPATH_PLUGINS', JPATH_ROOT . DIRECTORY_SEPARATOR . 'plugins');
21+
defined('JPATH_INSTALLATION') || define('JPATH_INSTALLATION', JPATH_ROOT . DIRECTORY_SEPARATOR . 'installation');
22+
defined('JPATH_THEMES') || define('JPATH_THEMES', JPATH_BASE . DIRECTORY_SEPARATOR . 'templates');
23+
defined('JPATH_CACHE') || define('JPATH_CACHE', JPATH_ADMINISTRATOR . DIRECTORY_SEPARATOR . 'cache');
24+
defined('JPATH_MANIFESTS') || define('JPATH_MANIFESTS', JPATH_ADMINISTRATOR . DIRECTORY_SEPARATOR . 'manifests');
25+
defined('JPATH_API') || define('JPATH_API', JPATH_ROOT . DIRECTORY_SEPARATOR . 'api');
26+
defined('JPATH_CLI') || define('JPATH_CLI', JPATH_ROOT . DIRECTORY_SEPARATOR . 'cli');

libraries/src/Router/SiteRouter.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -149,11 +149,11 @@ public function parseInit(&$router, &$uri)
149149
if (preg_match("#.*?\.php#u", $path, $matches)) {
150150
// Get the current entry point path relative to the site path.
151151
$scriptPath = realpath($_SERVER['SCRIPT_FILENAME'] ?: str_replace('\\\\', '\\', $_SERVER['PATH_TRANSLATED']));
152-
$relativeScriptPath = str_replace('\\', '/', str_replace(JPATH_SITE, '', $scriptPath));
152+
$relativeScriptPath = str_replace('\\', '/', str_replace(JPATH_PUBLIC, '', $scriptPath));
153153

154154
// If a php file has been found in the request path, check to see if it is a valid file.
155155
// Also verify that it represents the same file from the server variable for entry script.
156-
if (is_file(JPATH_SITE . $matches[0]) && ($matches[0] === $relativeScriptPath)) {
156+
if (is_file(JPATH_PUBLIC . $matches[0]) && ($matches[0] === $relativeScriptPath)) {
157157
// Remove the entry point segments from the request path for proper routing.
158158
$path = str_replace($matches[0], '', $path);
159159
}

0 commit comments

Comments
 (0)