This commit is contained in:
mcndave committed 2024-09-25 14:38:02 -04:00
commit ffe66e522c
19 files changed
+344 -88

No files matched your search

+28 -2
View File
@@ -3,11 +3,13 @@
namespace Lean;
use Lean\Factory\HttpFactory;
use Notes\Attribute\Ignore;
use Notes\Route\Attribute\Object\Route;
use Notes\Security\Attribute\Security;
use Picea, Picea\Ui\Method\FormContext;
use TheBugs\Email\MailerInterface;
use Storage\Session;
use League\CommonMark\CommonMarkConverter;
use Psr\Http\Message\{ ServerRequestInterface, ResponseInterface };
@@ -26,6 +28,7 @@ trait ControllerTrait {
public array $contextList = [];
#[Ignore]
public function exportJson(ServerRequestInterface $request, string $entityClass, bool $includeRelations = true, ? callable $callback = null) : ResponseInterface
{
foreach($entityClass::repository()->filterServerRequest( $entityClass::searchRequest()->fromRequest($request->withQueryParams($request->getQueryParams() + ['limit' => PHP_INT_MAX,])) )->loadAll() as $entity) {
@@ -35,6 +38,7 @@ trait ControllerTrait {
return $this->renderJson( array_filter($data ?? [], function($row) { return $row !== null; }));
}
#[Ignore]
public function renderRawView(string $view, ?array $variables = null) : string
{
if ( null === $content = $this->picea->renderHtml($view, $variables ?? [], $this) ) {
@@ -44,6 +48,7 @@ trait ControllerTrait {
return $content;
}
#[Ignore]
public function renderView(string $view, ?array $variables = null) : ResponseInterface
{
return static::renderHtml(
@@ -51,6 +56,7 @@ trait ControllerTrait {
);
}
#[Ignore]
public function renderError(string $errorCode, ?array $variables = null) : ResponseInterface
{
return static::renderHtml(
@@ -58,66 +64,78 @@ trait ControllerTrait {
);
}
#[Ignore]
public function renderDocumentation(string $filename) : ResponseInterface
{
return $this->renderMarkdown( file_get_contents(getenv("PROJECT_PATH") . "/meta/doc/$filename.md") );
}
#[Ignore]
protected function redirect(string $url, int $code = 302, array $headers = []) {
return HttpFactory::createRedirectResponse($url, $code, $headers);
}
#[Ignore]
public static function renderNothing(int $code = 204, array $headers = []) : ResponseInterface
{
return HttpFactory::createEmptyResponse($code, $headers);
}
#[Ignore]
public static function renderText(string $text, int $code = 200, array $headers = []) : ResponseInterface
{
return HttpFactory::createTextResponse($text, $code, $headers);
}
#[Ignore]
public static function renderHtml(string $html, int $code = 200, array $headers = []) : ResponseInterface
{
return HttpFactory::createHtmlResponse($html, $code, $headers);
}
#[Ignore]
public static function renderJson(mixed $data, int $code = 200, array $headers = []) : ResponseInterface
{
return HttpFactory::createJsonResponse($data, $code, $headers);
}
#[Ignore]
public function renderPdf($rawdata, int $status = 200, array $headers = []) : ResponseInterface
{
return HttpFactory::createPdfResponse($rawdata, $status, $headers);
}
#[Ignore]
public static function renderDownloadable(string $data, string $filename, int $code = 200, array $headers = []) : ResponseInterface
{
return HttpFactory::createDownloadableResponse($data, $filename, $code, $headers);
}
#[Ignore]
public static function renderImage(string $data, int $code = 200, array $headers = []) : ResponseInterface
{
return HttpFactory::createImageResponse($data, $code, $headers);
}
#[Ignore]
public static function renderAsset(string $path, int $code = 200, array $headers = []) : ResponseInterface
{
return HttpFactory::createFileDownloadResponse($path, $code, $headers);
}
#[Ignore]
public function renderMarkdown(string $filepath, int $code = 200, array $headers = []) : ResponseInterface
{
if ( ! class_exists(CommonMarkConverter::class)) {
throw new \BadFunctionCallException("League\CommonMark seems to be missing, please install dependency before trying to render Markdown content");
}
$markdown = ( new CommonMarkConverter() )->convertToHtml(file_get_contents($filepath));
$markdown = ( new CommonMarkConverter() )->convert(file_get_contents($filepath));
return $this->renderView("docs", get_defined_vars());
return $this->renderView("lean/layout/docs", get_defined_vars());
}
#[Ignore]
public function renderCLI(ServerRequestInterface $request, mixed $data) : ResponseInterface
{
if ($data instanceof \JsonSerializable ) {
@@ -134,6 +152,7 @@ trait ControllerTrait {
);
}
#[Ignore]
public function fromResponse(ResponseInterface $response)
{
if ( $response->getStatusCode() === 200 ) {
@@ -145,6 +164,7 @@ trait ControllerTrait {
return null;
}
#[Ignore]
public function asset(string $url, array $parameters = []) : string
{
if (! $this->picea ) {
@@ -154,6 +174,7 @@ trait ControllerTrait {
return $this->picea->compiler->getExtensionFromToken('asset')->buildAssetUrl($url, $parameters);
}
#[Ignore]
public function url(string $url, array $parameters = []) : string
{
if (! $this->picea ) {
@@ -163,6 +184,7 @@ trait ControllerTrait {
return $this->picea->compiler->getExtensionFromToken('url')->buildUrl($url, $parameters);
}
#[Ignore]
public function route(string $name, array $parameters = []) : string
{
if (! $this->picea ) {
@@ -172,11 +194,13 @@ trait ControllerTrait {
return $this->picea->compiler->getExtensionFromToken('route')->buildRouteUrl($name, $parameters);
}
#[Ignore]
public function json($data, int $flags = 0) : string
{
return htmlentities(json_encode($data, $flags), ENT_QUOTES, 'UTF-8');
}
#[Ignore]
public function pushContext(FormContext $context) : FormContext
{
$this->contextList[$context->formName ?? uniqid("context_")] = $context;
@@ -184,11 +208,13 @@ trait ControllerTrait {
return $context;
}
#[Ignore]
public function context(? string $name = null) : ? FormContext
{
return $name ? $this->contextList[$name] : array_values($this->contextList)[0] ?? null;
}
#[Ignore]
public function isRoute(mixed $name, ServerRequestInterface $request) : bool
{
foreach((array) $name as $item) {
+8 -12
View File
@@ -35,8 +35,6 @@ class Kernel {
public string $projectPath;
public string $routeDefinitionList = 'routes.list';
public function __construct(string $projectPath)
{
$this->projectPath = $projectPath;
@@ -138,16 +136,15 @@ class Kernel {
protected function serviceContainer() : self
{
$this->container->has(AdapterProxy::class) and $this->container->get(AdapterProxy::class);
$this->container->has('ulmus.caching') and ( Ulmus::$cache = $this->container->get('ulmus.caching') );
$this->container->has(Lean::class) and $this->container->get(Lean::class);
if ($this->container->has(I18n::class)) {
$i18n = $this->container->get(I18n::class);
$i18n->locale($this->locale);
$i18n->initialize(!getenv("DEBUG"));
if ($this->container->has('lean.autoload')) {
foreach($this->container->get('lean.autoload') as $class) {
$this->container->get($class);
}
}
# Must be removed from KERNEL !
$this->container->has('ulmus.caching') and ( Ulmus::$cache = $this->container->get('ulmus.caching') );
return $this;
}
@@ -155,8 +152,7 @@ class Kernel {
{
ServerRequestFactory::fromGlobals($_SERVER, $_GET, $_POST, $_COOKIE, $_FILES);
// Router
$routeFactory = $this->container->get($this->routeDefinitionList);
$routeFactory = $this->container->get(Routing\RouteDefinitionInterface::class);
$router = $routeFactory($this->container);
+5
View File
@@ -0,0 +1,5 @@
<?php
namespace Lean\Routing;
interface RouteDefinitionInterface {}