Compare commits
1 Commits
9868fc8c3d
...
a71bc0aa43
Author | SHA1 | Date | |
---|---|---|---|
|
a71bc0aa43 |
278
App.php
278
App.php
@ -141,64 +141,244 @@ class App
|
|||||||
*/
|
*/
|
||||||
protected function update_SERVERIfNeeded(Pico $pico, string $configDir)
|
protected function update_SERVERIfNeeded(Pico $pico, string $configDir)
|
||||||
{
|
{
|
||||||
$requestUrl = null;
|
$data = [
|
||||||
$config = [
|
'FROM_QUERY_STRING' => '',
|
||||||
'rewrite_url' => false,
|
'FROM_SCRIPT_NAME' => '',
|
||||||
'themes_url' => self::THEMES_PATH,
|
'FROM_SCRIPT_FILENAME' => '',
|
||||||
'plugins_url' => self::PLUGINS_PATH,
|
'rootPath' => '/',
|
||||||
|
'rootPathFound' => false,
|
||||||
|
'rewriteModeactivated' => false,
|
||||||
|
'page' => 'index',
|
||||||
|
'continue' => true
|
||||||
];
|
];
|
||||||
$nbLevels = 0;
|
$this
|
||||||
|
->extractRequestUrlFormQueryString($data)
|
||||||
|
->extractRequestUrlFromScriptFileName($data,$configDir)
|
||||||
|
->extractRequestUrlFromScriptName($data,$configDir)
|
||||||
|
->extractRootPathFromScriptNameIfNeeded($data,$configDir)
|
||||||
|
->definePage($data)
|
||||||
|
->setUrl($data, $configDir, $pico);
|
||||||
|
}
|
||||||
|
|
||||||
// use QUERY_STRING; e.g. /pico/?sub/page
|
/**
|
||||||
$pathComponent = isset($_SERVER['QUERY_STRING']) ? $_SERVER['QUERY_STRING'] : '';
|
* extract requestUrlFromQueryString
|
||||||
if ($pathComponent) {
|
* @param array &$data
|
||||||
$pathComponent = strstr($pathComponent, '&', true) ?: $pathComponent;
|
* @return self
|
||||||
if (strpos($pathComponent, '=') === false) {
|
*/
|
||||||
$requestUrl = trim(rawurldecode($pathComponent), '/');
|
protected function extractRequestUrlFormQueryString(array &$data): self
|
||||||
|
{
|
||||||
|
if ($data['continue']){
|
||||||
|
// use QUERY_STRING; e.g. ?sub/page
|
||||||
|
$qString = isset($_SERVER['QUERY_STRING']) ? $_SERVER['QUERY_STRING'] : '';
|
||||||
|
if ($qString) {
|
||||||
|
$qString = strstr($qString, '&', true) ?: $qString;
|
||||||
|
if (strpos($qString, '=') === false) {
|
||||||
|
$data['FROM_QUERY_STRING'] = $qString;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
if (isset($_SERVER)){
|
/**
|
||||||
if (!empty($requestUrl)){
|
* extract requestUrlFromScriptName
|
||||||
$supposedEndUrlForRewrite = $configDir.$requestUrl.'/index.php';
|
* @param array &$data
|
||||||
$supposedEndUrlForNotRewrite = $configDir.'index.php';
|
* @param string $configDir
|
||||||
if (!empty($_SERVER['SCRIPT_NAME']) && substr($_SERVER['SCRIPT_NAME'],-strlen($supposedEndUrlForRewrite)) == $supposedEndUrlForRewrite){
|
* @return self
|
||||||
$_SERVER['SCRIPT_NAME'] = str_replace($supposedEndUrlForRewrite,$configDir.'index.php',$_SERVER['SCRIPT_NAME']);
|
*/
|
||||||
if (!empty($_SERVER['SCRIPT_FILENAME'])){
|
protected function extractRequestUrlFromScriptName(array &$data, string $configDir): self
|
||||||
$_SERVER['SCRIPT_FILENAME'] = str_replace($supposedEndUrlForRewrite,$configDir.'index.php',$_SERVER['SCRIPT_FILENAME']);
|
{
|
||||||
}
|
if ($data['continue'] && !empty($_SERVER['SCRIPT_NAME']) && is_string($_SERVER['SCRIPT_NAME'])){
|
||||||
if (!empty($_SERVER['REQUEST_URI'])){
|
// use SCRIPT_NAME; e.g. /subfolder/content/sub/page/index.php
|
||||||
$_SERVER['REQUEST_URI'] = str_replace([$configDir.$requestUrl.'/',$configDir.$requestUrl],$configDir,$_SERVER['REQUEST_URI']);
|
$matches = [];
|
||||||
}
|
$configDirForMatch = preg_quote($configDir,'/');
|
||||||
$config['rewrite_url'] = true;
|
if (preg_match("/^(.*)$configDirForMatch(.*)(?!.php)(?:index.php)?$/",$_SERVER['SCRIPT_NAME'],$matches)){
|
||||||
$nbLevels = count(explode('/',$configDir.$requestUrl));
|
$data['rootPath'] = $matches[1];
|
||||||
} elseif (!empty($_SERVER['SCRIPT_NAME']) && substr($_SERVER['SCRIPT_NAME'],-strlen($supposedEndUrlForNotRewrite)) == $supposedEndUrlForNotRewrite) {
|
$data['rootPathFound'] = true;
|
||||||
$nbLevels = count(explode('/',$configDir)) -1;
|
$data['FROM_SCRIPT_NAME'] = $this->formatStringWithLeadingSlash($matches[2],false);
|
||||||
}
|
} elseif (!empty($data['FROM_SCRIPT_FILENAME']) && (
|
||||||
} elseif (!empty($_SERVER['SCRIPT_NAME']) && is_string($_SERVER['SCRIPT_NAME'])) {
|
$this->isServerEndedBy("{$data['FROM_SCRIPT_FILENAME']}/index.php",'SCRIPT_NAME') ||
|
||||||
|
$this->isServerEndedBy("{$data['FROM_SCRIPT_FILENAME']}/",'SCRIPT_NAME')
|
||||||
|
)
|
||||||
|
){
|
||||||
|
$data['rootPath'] = $this->formatStringWithLeadingSlash($matches[2],false);
|
||||||
|
$data['rootPathFound'] = true;
|
||||||
|
$data['FROM_SCRIPT_NAME'] = $data['FROM_SCRIPT_FILENAME'];
|
||||||
|
$data['rewriteModeactivated'] = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* extract requestUrlFromScriptFileName
|
||||||
|
* @param array &$data
|
||||||
|
* @param string $configDir
|
||||||
|
* @return self
|
||||||
|
*/
|
||||||
|
protected function extractRequestUrlFromScriptFileName(array &$data, string $configDir): self
|
||||||
|
{
|
||||||
|
if ($data['continue'] &&
|
||||||
|
!empty($_SERVER['SCRIPT_FILENAME']) &&
|
||||||
|
is_string($_SERVER['SCRIPT_FILENAME']) &&
|
||||||
|
substr($_SERVER['SCRIPT_FILENAME'],-strlen('index.php')) == 'index.php'){
|
||||||
|
// use SCRIPT_FILENAME; e.g. /var/www/subfolder/content/sub/page/index.php
|
||||||
|
|
||||||
|
// check if the current folder seems to correspond to root folder of seacms
|
||||||
|
if (is_dir('content') && is_dir('sites') && is_file('index.php')){
|
||||||
|
|
||||||
|
$cwd = realpath(getcwd());
|
||||||
|
$truncatedFileName = substr(realpath($_SERVER['SCRIPT_FILENAME']),strlen($cwd));
|
||||||
$matches = [];
|
$matches = [];
|
||||||
$configDirForMatch = preg_quote($configDir,'/');
|
$configDirForMatch1 = preg_quote($configDir,'/');
|
||||||
if (preg_match("/^(.*)$configDirForMatch(.*)index.php$/",$_SERVER['SCRIPT_NAME'],$matches)){
|
$configDirForMatch2 = preg_quote(str_replace('/','\\',$configDir),'/');
|
||||||
$rootPath = $matches[1];
|
if (preg_match("/^(.*)(?:$configDirForMatch1|$configDirForMatch2)(.*)index.php$/",$_SERVER['SCRIPT_FILENAME'],$matches)){
|
||||||
$requestUrl = !empty($matches[2]) ? (substr($matches[2],-1) == '/' ? substr($matches[2],0,-1) : $matches[2]) : '';
|
$formFileName = str_replace('\\','/',$matches[2]);
|
||||||
|
$data['FROM_SCRIPT_FILENAME'] = $this->formatStringWithLeadingSlash($formFileName,false);
|
||||||
if (!empty($requestUrl)){
|
|
||||||
$supposedEndUrlForRewrite = $configDir.$requestUrl.'/index.php';
|
|
||||||
if (!empty($_SERVER['SCRIPT_FILENAME'])){
|
|
||||||
$_SERVER['SCRIPT_FILENAME'] = str_replace($supposedEndUrlForRewrite,$configDir.'index.php',$_SERVER['SCRIPT_FILENAME']);
|
|
||||||
}
|
|
||||||
if (!empty($_SERVER['SCRIPT_NAME'])){
|
|
||||||
$_SERVER['SCRIPT_NAME'] = str_replace($supposedEndUrlForRewrite,$configDir.'index.php',$_SERVER['SCRIPT_NAME']);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$nbLevels = count(explode('/',$configDir)) -1;
|
|
||||||
$config['rewrite_url'] = true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$previous = implode('',array_fill(0,$nbLevels,'../'));
|
return $this;
|
||||||
$config['themes_url'] = $previous.$config['themes_url'];
|
}
|
||||||
$config['plugins_url'] = $previous.$config['plugins_url'];
|
|
||||||
|
/**
|
||||||
|
* extract rootPath from ScriptName
|
||||||
|
* @param array &$data
|
||||||
|
* @param string $configDir
|
||||||
|
* @return self
|
||||||
|
*/
|
||||||
|
protected function extractRootPathFromScriptNameIfNeeded(array &$data, string $configDir): self
|
||||||
|
{
|
||||||
|
if ($data['continue'] && !$data['rootPathFound']){
|
||||||
|
// use SCRIPT_NAME; e.g. /subfolder/index.php
|
||||||
|
$matches = [];
|
||||||
|
$wantedPage = empty($data['FROM_SCRIPT_FILENAME']) ? '' : $data['FROM_SCRIPT_FILENAME'];
|
||||||
|
$wantedPageQuoted = preg_quote($wantedPage,'/');
|
||||||
|
if (preg_match("/^(.*){$wantedPageQuoted}\/(?:index.php)?$/",$_SERVER['SCRIPT_NAME'],$matches)){
|
||||||
|
$data['rootPath'] = $this->formatStringWithLeadingSlash($matches[1],true);
|
||||||
|
$data['rootPathFound'] = true;
|
||||||
|
$data['rewriteModeactivated'] = (realpath($_SERVER['SCRIPT_FILENAME']) == realpath(getcwd()."/{$configDir}index.php"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* format string with leading '/'
|
||||||
|
* @param null|string $rawString
|
||||||
|
* @param bool $withLeadingSlash
|
||||||
|
* @return string $page
|
||||||
|
*/
|
||||||
|
protected function formatStringWithLeadingSlash(?string $rawString, bool $withLeadingSlash = false): string
|
||||||
|
{
|
||||||
|
return $withLeadingSlash
|
||||||
|
? (!empty($rawString) ? (substr($rawString,-1) == '/' ? $rawString : $rawString.'/') : '/')
|
||||||
|
: (!empty($rawString) ? (substr($rawString,-1) == '/' ? substr($rawString,0,-1) : $rawString) : '');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* define page
|
||||||
|
* @param array $data
|
||||||
|
* @return $this
|
||||||
|
*/
|
||||||
|
protected function definePage(array &$data): self
|
||||||
|
{
|
||||||
|
if ($data['continue']){
|
||||||
|
$data['page'] = !empty($data['FROM_QUERY_STRING'])
|
||||||
|
? $data['FROM_QUERY_STRING']
|
||||||
|
: (
|
||||||
|
!empty($data['FROM_SCRIPT_NAME'])
|
||||||
|
? $data['FROM_SCRIPT_NAME']
|
||||||
|
: (
|
||||||
|
!empty($data['FROM_SCRIPT_FILENAME'])
|
||||||
|
? $data['FROM_SCRIPT_FILENAME']
|
||||||
|
: 'index'
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* set SERVER QUERY_STRING
|
||||||
|
* @param array $data
|
||||||
|
* @param string $configDir
|
||||||
|
* @param Pico $pico
|
||||||
|
* @return $this
|
||||||
|
*/
|
||||||
|
protected function setUrl(array $data, string $configDir, Pico $pico): self
|
||||||
|
{
|
||||||
|
$bfserver = $_SERVER;
|
||||||
|
// SCRIPT_NAME
|
||||||
|
$rootPath = (empty($data['rootPath']) || !is_string($data['rootPath'])) ? '/' : $this->formatStringWithLeadingSlash($data['rootPath'],true);
|
||||||
|
$_SERVER['SCRIPT_NAME'] = $rootPath.($data['rewriteModeactivated']?'':$configDir).'index.php';
|
||||||
|
|
||||||
|
$_SERVER['PHP_SELF'] = $_SERVER['SCRIPT_NAME'].($_SERVER['PATH_INFO'] ?? '');
|
||||||
|
$_SERVER['DOCUMENT_URI'] = $_SERVER['PHP_SELF'];
|
||||||
|
|
||||||
|
// QUERY_STRING
|
||||||
|
$qString = isset($_SERVER['QUERY_STRING']) ? $_SERVER['QUERY_STRING'] : '';
|
||||||
|
if (substr($qString,0,strlen($data['page'])+1)==$data['page'].'&'){
|
||||||
|
$qString = substr($qString,strlen($data['page'])+1);
|
||||||
|
} elseif ($qString == $data['page']){
|
||||||
|
$qString = '';
|
||||||
|
}
|
||||||
|
if (!empty($data['page'])){
|
||||||
|
$qString = $data['page'].(empty($qString) ? '' : "&$qString");
|
||||||
|
}
|
||||||
|
$_SERVER['QUERY_STRING'] = $qString;
|
||||||
|
$_SERVER['REQUEST_URI'] = $_SERVER['DOCUMENT_URI'].(empty($_SERVER['QUERY_STRING'])?'':"?{$_SERVER['QUERY_STRING']}");
|
||||||
|
|
||||||
|
//SCRIPT_FILENAME
|
||||||
|
$cwd = getcwd();
|
||||||
|
$fn = str_replace('\\','/',realpath($cwd.'/'.$configDir.'index.php'));
|
||||||
|
$_SERVER['SCRIPT_FILENAME'] = $fn;
|
||||||
|
|
||||||
|
// config
|
||||||
|
$baseUrl = $this->getBaseUrl($rootPath,$configDir,$pico);
|
||||||
|
$config = $pico->getConfig();
|
||||||
|
$config['rewrite_url'] = true;
|
||||||
|
$config['configDir'] = $this->formatStringWithLeadingSlash($configDir,false);
|
||||||
|
$config['content_dir'] = $this->formatStringWithLeadingSlash($configDir,false);
|
||||||
|
$config['themes_url'] = "$baseUrl$rootPath".self::THEMES_PATH;
|
||||||
|
$config['plugins_url'] = "$baseUrl$rootPath".self::PLUGINS_PATH;
|
||||||
$pico->setConfig($config);
|
$pico->setConfig($config);
|
||||||
|
|
||||||
|
$server = $_SERVER;
|
||||||
|
$dataJSON = json_encode(compact(['data','configDir','qString','cwd','fn','config','server','bfserver']));
|
||||||
|
// echo <<<HTML
|
||||||
|
// <script>
|
||||||
|
// console.log($dataJSON)
|
||||||
|
// </script>
|
||||||
|
// HTML;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* test if $_SERVER[$key] end by $wantedValue
|
||||||
|
* @param string $wantedValue
|
||||||
|
* @param string $key
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
protected function isServerEndedBy(string $wantedValue, string $key): bool
|
||||||
|
{
|
||||||
|
return (!empty($_SERVER[$key]) && is_string($_SERVER[$key]) && substr($_SERVER[$key],-strlen($wantedValue)) == $wantedValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* generate Base Url
|
||||||
|
* @param string $rootPath
|
||||||
|
* @param string $configDir
|
||||||
|
* @param Pico $pico
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
protected function getBaseUrl(string $rootPath,string $configDir, Pico $pico): string
|
||||||
|
{
|
||||||
|
$baseUrl = $this->formatStringWithLeadingSlash($pico->getBaseUrl(),true);
|
||||||
|
|
||||||
|
if (substr($baseUrl,-strlen($rootPath.$configDir)) == $rootPath.$configDir){
|
||||||
|
$baseUrl = substr($baseUrl,0,-strlen($rootPath.$configDir));
|
||||||
|
}
|
||||||
|
return $this->formatStringWithLeadingSlash($baseUrl,false);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -18,31 +18,32 @@ final class AppTest extends TestCase {
|
|||||||
/**
|
/**
|
||||||
* register error handlers
|
* register error handlers
|
||||||
*/
|
*/
|
||||||
public function testInit()
|
public function registerErrorHandler()
|
||||||
{
|
{
|
||||||
$displayErrors = true;
|
if (empty($GLOBALS['errrHandlerSet'])){
|
||||||
set_error_handler(function(
|
$GLOBALS['errrHandlerSet'] = "1";
|
||||||
int $errno,
|
$displayErrors = true;
|
||||||
string $errstr,
|
set_error_handler(function(
|
||||||
?string $errfile = null,
|
int $errno,
|
||||||
?int $errline = null,
|
string $errstr,
|
||||||
?array $errcontext = null
|
?string $errfile = null,
|
||||||
) use (&$displayErrors){
|
?int $errline = null,
|
||||||
if ($displayErrors){
|
?array $errcontext = null
|
||||||
echo "\nError $errstr ($errno)\nIn file $errfile\nLine : $errline\n";
|
) use (&$displayErrors){
|
||||||
}
|
if ($displayErrors){
|
||||||
});
|
echo "\nError $errstr ($errno)\nIn file $errfile\nLine : $errline\n";
|
||||||
register_shutdown_function(function (){
|
}
|
||||||
$lastErr = error_get_last();
|
});
|
||||||
if (!is_null($lastErr)){
|
register_shutdown_function(function (){
|
||||||
echo "\nAn error occured\n".json_encode($lastErr)."\n";
|
$lastErr = error_get_last();
|
||||||
}
|
if (!is_null($lastErr)){
|
||||||
});
|
echo "\nAn error occured\n".json_encode($lastErr)."\n";
|
||||||
$this->assertTrue($displayErrors);
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @depends testInit
|
|
||||||
* @dataProvider apiRewriteProvider
|
* @dataProvider apiRewriteProvider
|
||||||
* @covers App::update_SERVERIfNeeded
|
* @covers App::update_SERVERIfNeeded
|
||||||
* @param string $rootFolder
|
* @param string $rootFolder
|
||||||
@ -67,6 +68,7 @@ final class AppTest extends TestCase {
|
|||||||
string $waitedPluginsUrl,
|
string $waitedPluginsUrl,
|
||||||
): void
|
): void
|
||||||
{
|
{
|
||||||
|
$this->registerErrorHandler();
|
||||||
$this->saveSERVER();
|
$this->saveSERVER();
|
||||||
$this->defineServer(
|
$this->defineServer(
|
||||||
true,
|
true,
|
||||||
@ -85,10 +87,11 @@ final class AppTest extends TestCase {
|
|||||||
} catch (Throwable $th){
|
} catch (Throwable $th){
|
||||||
|
|
||||||
}
|
}
|
||||||
|
$sn = $_SERVER['SCRIPT_NAME'];
|
||||||
$cwd = getcwd();
|
$cwd = getcwd();
|
||||||
$this->revertSERVER();
|
$this->revertSERVER();
|
||||||
$this->assertTrue($thrown,"TestBaseUrlException not found");
|
$this->assertTrue($thrown,"TestBaseUrlException not found");
|
||||||
$this->assertEquals($waitedBaseUrl,$foundTh->getBaseUrl(),"Not same baseUrl");
|
$this->assertEquals($waitedBaseUrl,$foundTh->getBaseUrl(),"Not same baseUrl ($sn)");
|
||||||
$this->assertEquals("$cwd/vendor/picocms/plugins/",$foundTh->getPluginDir(),"Not same pluginDir");
|
$this->assertEquals("$cwd/vendor/picocms/plugins/",$foundTh->getPluginDir(),"Not same pluginDir");
|
||||||
$this->assertEquals("$cwd/vendor/picocms/themes/",$foundTh->getThemeDir(),"Not same themeDir");
|
$this->assertEquals("$cwd/vendor/picocms/themes/",$foundTh->getThemeDir(),"Not same themeDir");
|
||||||
$this->assertEquals("$cwd/",$foundTh->getRootDir(),"Not same rootDir");
|
$this->assertEquals("$cwd/",$foundTh->getRootDir(),"Not same rootDir");
|
||||||
@ -126,10 +129,6 @@ final class AppTest extends TestCase {
|
|||||||
$this->prepareAPage($data,'/sea','sites/default','sub/index');
|
$this->prepareAPage($data,'/sea','sites/default','sub/index');
|
||||||
$this->prepareAPage($data,'/sea','sites/default','theme');
|
$this->prepareAPage($data,'/sea','sites/default','theme');
|
||||||
|
|
||||||
// echo "\n";
|
|
||||||
// foreach($data as $name => $line){
|
|
||||||
// echo "$name => ".implode(',',$line)."\n";
|
|
||||||
// }
|
|
||||||
return $data;
|
return $data;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -137,53 +136,64 @@ final class AppTest extends TestCase {
|
|||||||
array &$data,
|
array &$data,
|
||||||
string $baseScriptName,
|
string $baseScriptName,
|
||||||
string $rootFolder,
|
string $rootFolder,
|
||||||
string $pageId
|
string $waitedPageId
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
$baseUrl = 'http://localhost'.$baseScriptName.'/';
|
$baseUrl = 'http://localhost'.$baseScriptName.'/';
|
||||||
$isIndex = ($pageId == 'index');
|
|
||||||
$isSubIndex = (substr($pageId,-strlen('/index')) == '/index');
|
// tests
|
||||||
$pageIdInUrl = $isIndex ? '' : ($isSubIndex ? substr($pageId,0,-strlen('/index')) : $pageId) ;
|
$isIndex = ($waitedPageId == 'index');
|
||||||
$queriesStrings = $isIndex ? [['q'=>'','s'=>'','f'=>'']] : [
|
$isSubIndex = (substr($waitedPageId,-strlen('/index')) == '/index');
|
||||||
['q'=>$pageIdInUrl,'s'=>'','f'=>''],
|
|
||||||
['q'=>'','s'=>$pageIdInUrl,'f'=>''],
|
// intermediate variables
|
||||||
['q'=>'','s'=>$pageIdInUrl,'f'=>$pageIdInUrl],
|
$pageIdInUrl = $isIndex ? '' : ($isSubIndex ? substr($waitedPageId,0,-strlen('/index')) : $waitedPageId) ;
|
||||||
['q'=>$pageIdInUrl,'s'=>$pageIdInUrl,'f'=>''],
|
$waitedPageEndUrl = $pageIdInUrl;
|
||||||
['q'=>$pageIdInUrl,'s'=>$pageIdInUrl,'f'=>$pageIdInUrl]
|
|
||||||
];
|
foreach([false,true] as $viaQueryString){
|
||||||
foreach ($queriesStrings as $queryData) {
|
$queryString = $viaQueryString ? $pageIdInUrl : '';
|
||||||
$queryString = empty($queryData['q']) ? '' :'?'.$queryData['q'];
|
$queryStringWithQuestion = ($viaQueryString && !empty($pageIdInUrl)) ? "?$pageIdInUrl" : '';
|
||||||
$scriptNameMiddle = empty($queryData['s']) ? '' : $queryData['s'].'/';
|
$formattedQueryString = str_replace('/','%2F',$pageIdInUrl);
|
||||||
foreach (['','index.php'] as $endScriptName) {
|
|
||||||
$formattedQueryString = str_replace('/','%2F',$queryString);
|
foreach (['','index.php'] as $endShortScriptName) {
|
||||||
$pageUrl = empty($queryData['s']) ? (empty($queryData['q']) ? '' : $formattedQueryString) : $queryData['s'];
|
|
||||||
$canRewriteFromRoot = empty($queryData['s']) && empty($queryData['f']);
|
// $filePath from getcwd
|
||||||
if ($rootFolder == 'content' && $canRewriteFromRoot){
|
|
||||||
$scriptName = "$baseScriptName/$scriptNameMiddle$endScriptName";
|
if ($rootFolder == 'content' && $viaQueryString){
|
||||||
$name = $rootFolder.$scriptName.$queryString.'*';
|
// test also from base
|
||||||
$this->prepareData($data,$name,$rootFolder,'index.php',$scriptName,$queryData['q'],$baseUrl,$pageId,$pageUrl);
|
$filePath = 'index.php';
|
||||||
|
$shortScriptName = "$baseScriptName/$endShortScriptName";
|
||||||
|
$name = $rootFolder.$shortScriptName.$queryStringWithQuestion.'*';
|
||||||
|
$waitedBaseUrl = "$baseUrl/content/";
|
||||||
|
$this->prepareData($baseUrl,$data,$name,$rootFolder,$filePath,$shortScriptName,$queryString,$waitedBaseUrl,$waitedPageId,$waitedPageEndUrl);
|
||||||
}
|
}
|
||||||
foreach ([false,true] as $withRewrite) {
|
|
||||||
if ($withRewrite){
|
foreach([false,true] as $viaScriptName){
|
||||||
$scriptName = "$baseScriptName/$scriptNameMiddle$endScriptName";
|
$folderInScriptName = ($viaScriptName && !empty($pageIdInUrl)) ? "$pageIdInUrl/" : '';
|
||||||
$name = $rootFolder.$scriptName.$queryString.' R';
|
$folderInScriptFileName = ($viaScriptName && !empty($pageIdInUrl)) ? "/$pageIdInUrl" :'' ;
|
||||||
$waitedUrl = $baseUrl;
|
|
||||||
} else {
|
foreach ([false,true] as $withRewrite) {
|
||||||
$scriptName = "$baseScriptName/$rootFolder/$scriptNameMiddle$endScriptName";
|
if ($viaQueryString || $endShortScriptName){
|
||||||
$name = $rootFolder.$scriptName.$queryString;
|
$filePath = "$rootFolder$folderInScriptFileName/index.php";
|
||||||
$waitedUrl = $baseUrl.$rootFolder.'/';
|
$shortScriptName = $withRewrite
|
||||||
|
? "$baseScriptName/$folderInScriptName$endShortScriptName"
|
||||||
|
: "$baseScriptName/$rootFolder/$folderInScriptName$endShortScriptName";
|
||||||
|
|
||||||
|
$waitedBaseUrl = $withRewrite
|
||||||
|
? $baseUrl
|
||||||
|
: "$baseUrl$rootFolder/";
|
||||||
|
|
||||||
|
$name = $rootFolder.$shortScriptName.$queryStringWithQuestion.($withRewrite ? ' R': '');
|
||||||
|
$this->prepareData($baseUrl,$data,$name,$rootFolder,$filePath,$shortScriptName,$queryString,$waitedBaseUrl,$waitedPageId,$waitedPageEndUrl);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if ($canRewriteFromRoot){
|
|
||||||
$this->prepareData($data,$name."*",$rootFolder,"index.php",$scriptName,$queryData['q'],$waitedUrl,$pageId,$pageUrl);
|
|
||||||
}
|
|
||||||
$formattedRootMiddle = empty($pageIdInUrl) ? '' : "/$pageIdInUrl";
|
|
||||||
$this->prepareData($data,$name,$rootFolder,"$rootFolder$formattedRootMiddle/index.php",$scriptName,$queryData['q'],$waitedUrl,$pageId,$pageUrl);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function prepareData(
|
protected function prepareData(
|
||||||
|
string $baseUrl,
|
||||||
array &$data,
|
array &$data,
|
||||||
string $name,
|
string $name,
|
||||||
string $rootFolder,
|
string $rootFolder,
|
||||||
@ -196,13 +206,8 @@ final class AppTest extends TestCase {
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
$waitedPageUrl = $waitedBaseUrl.$waitedPageEndUrl;
|
$waitedPageUrl = $waitedBaseUrl.$waitedPageEndUrl;
|
||||||
$nbLevels = in_array($shortScriptName,['/','/index.php']) ? 0 : count(explode('/',$rootFolder));
|
$waitedThemesUrl = $baseUrl.'vendor/picocms/themes';
|
||||||
$prefix = implode('/',array_fill(0,$nbLevels,'..'));
|
$waitedPluginsUrl = $baseUrl.'vendor/picocms/plugins';
|
||||||
if (!empty($prefix)){
|
|
||||||
$prefix .= '/';
|
|
||||||
}
|
|
||||||
$waitedThemesUrl = $waitedBaseUrl.$prefix.'vendor/picocms/themes';
|
|
||||||
$waitedPluginsUrl = $waitedBaseUrl.$prefix.'vendor/picocms/plugins';
|
|
||||||
$data[$name] = compact([
|
$data[$name] = compact([
|
||||||
'rootFolder',
|
'rootFolder',
|
||||||
'filePath',
|
'filePath',
|
||||||
@ -294,9 +299,10 @@ final class AppTest extends TestCase {
|
|||||||
$_SERVER['REMOTE_ADDR'] = '127.0.0.1'; // forced
|
$_SERVER['REMOTE_ADDR'] = '127.0.0.1'; // forced
|
||||||
$_SERVER['REMOTE_PORT'] = '80'; // forced
|
$_SERVER['REMOTE_PORT'] = '80'; // forced
|
||||||
$_SERVER['SERVER_ADDR'] = '127.0.0.1'; // forced
|
$_SERVER['SERVER_ADDR'] = '127.0.0.1'; // forced
|
||||||
$_SERVER['SERVER_ADDR'] = '80'; // forced
|
$_SERVER['SERVER_PORT'] = '80'; // forced
|
||||||
$_SERVER['SERVER_NAME'] = 'localhost'; // forced
|
$_SERVER['SERVER_NAME'] = 'localhost'; // forced
|
||||||
$_SERVER['HTTPS'] = null; // forced
|
$_SERVER['HTTPS'] = null; // forced
|
||||||
|
$_SERVER['REQUEST_TIME'] = time();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user