feat(App): create it
This commit is contained in:
parent
13832e4cc7
commit
1a75dad626
116
App.php
Normal file
116
App.php
Normal file
@ -0,0 +1,116 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SPDX-License-Identifier: EUPL-1.2
|
||||||
|
* Authors: see /README.md
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace SeaCMS;
|
||||||
|
|
||||||
|
use Exception;
|
||||||
|
use Pico;
|
||||||
|
use Throwable;
|
||||||
|
|
||||||
|
set_error_handler(function (
|
||||||
|
int $errno,
|
||||||
|
string $errstr,
|
||||||
|
string $errfile = '',
|
||||||
|
int $errline = -1
|
||||||
|
) {
|
||||||
|
if (!isset($GLOBALS['errorMessages'])){
|
||||||
|
$GLOBALS['errorMessages']= [];
|
||||||
|
}
|
||||||
|
$GLOBALS['errorMessages'][] = <<<HTML
|
||||||
|
<div>
|
||||||
|
Error : $errstr<br>
|
||||||
|
in file '$errfile' (line '$errline').<br/>
|
||||||
|
ErrCode : $errno
|
||||||
|
</div>
|
||||||
|
|
||||||
|
HTML;
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
|
||||||
|
class App
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Pico instance.
|
||||||
|
* @var Pico
|
||||||
|
*/
|
||||||
|
protected $pico;
|
||||||
|
|
||||||
|
public function __construct(string $contentFolderFromRoot)
|
||||||
|
{
|
||||||
|
// sanitize content folder
|
||||||
|
$cwd = getcwd();
|
||||||
|
if (empty($contentFolderFromRoot)){
|
||||||
|
$contentFolderFromRoot = 'content';
|
||||||
|
} else {
|
||||||
|
$contentFolderFromRoot = str_replace('\\','/',$contentFolderFromRoot);
|
||||||
|
}
|
||||||
|
if (!is_dir($cwd)){
|
||||||
|
throw new Exception("getcwd returned a path that is not a directory !");
|
||||||
|
}
|
||||||
|
if (!is_dir("$cwd/$contentFolderFromRoot")){
|
||||||
|
$contentFolderFromRoot = 'vendor/picocms/pico/content-sample';
|
||||||
|
}
|
||||||
|
if (substr($contentFolderFromRoot,-1) !== '/'){
|
||||||
|
$contentFolderFromRoot .= '/';
|
||||||
|
}
|
||||||
|
// instance Pico
|
||||||
|
$this->pico = new Pico(
|
||||||
|
$cwd, // root dir
|
||||||
|
$contentFolderFromRoot, // config dir
|
||||||
|
'vendor/picocms/plugins/', // plugins dir
|
||||||
|
'vendor/picocms/themes/' // themes dir
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function runPico(): string
|
||||||
|
{
|
||||||
|
return $this->pico->run();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* instanciate Pico and run it then echo output
|
||||||
|
* @param string $contentFolderFromRoot where is the root folder
|
||||||
|
*/
|
||||||
|
public static function run(string $contentFolderFromRoot)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
$app = new App($contentFolderFromRoot);
|
||||||
|
$output = $app->runPico();
|
||||||
|
self::appendErrorMessagesIfNeeded($output);
|
||||||
|
} catch (Throwable $th) {
|
||||||
|
$output = <<<HTML
|
||||||
|
<div style="color:red;">
|
||||||
|
Exception : {$th->__toString()}
|
||||||
|
</div>
|
||||||
|
HTML;
|
||||||
|
} finally {
|
||||||
|
echo $output;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* append error messages from $GLOBALS['errorMessages']
|
||||||
|
* only if $_GET['debug'] === 'yes'
|
||||||
|
* @param string &$output
|
||||||
|
*/
|
||||||
|
protected static function appendErrorMessagesIfNeeded(string &$output)
|
||||||
|
{
|
||||||
|
if (!empty($_GET['debug']) && $_GET['debug'] === 'yes' && !empty($GLOBALS['errorMessages'])){
|
||||||
|
$formattedMessages = implode("\n", $GLOBALS['errorMessages']);
|
||||||
|
$formattedMessages = <<<HTML
|
||||||
|
<div style="background-color:navajowhite;">
|
||||||
|
$formattedMessages
|
||||||
|
</div>
|
||||||
|
HTML;
|
||||||
|
if (preg_match('/<\/body>/i', $output, $match)) {
|
||||||
|
$output = str_replace($match[0], $formattedMessages.$match[0], $output);
|
||||||
|
} else {
|
||||||
|
$output = $output.$formattedMessages;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -29,6 +29,9 @@
|
|||||||
"suggest": {
|
"suggest": {
|
||||||
"picocms/pico-theme": "Default pico theme : revision ^3.0"
|
"picocms/pico-theme": "Default pico theme : revision ^3.0"
|
||||||
},
|
},
|
||||||
|
"autoload": {
|
||||||
|
"classmap": ["App.php"]
|
||||||
|
},
|
||||||
"extra": {
|
"extra": {
|
||||||
"pico-plugin-dir": "vendor/picocms/plugins/",
|
"pico-plugin-dir": "vendor/picocms/plugins/",
|
||||||
"pico-theme-dir": "vendor/picocms/themes/"
|
"pico-theme-dir": "vendor/picocms/themes/"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user