- Working on CLI modules

This commit is contained in:
Dave M. 2023-07-09 12:37:39 -04:00
parent 52c7407519
commit 41083c767a
10 changed files with 90 additions and 4 deletions

51
meta/definitions/cli.php Normal file
View File

@ -0,0 +1,51 @@
<?php
use function DI\autowire, DI\create, DI\get;
use Psr\Http\Message\ResponseInterface;
use Mcnd\CLI\CliMiddleware;
use Notes\CLI\CommandFetcher;
use Lean\Lean;
return [
/*CronardMiddleware::class => function($c) {
$cronardMiddleware = new CronardMiddleware($c, getenv('CRON_KEY'), function() : ResponseInterface {
return new HtmlResponse(sprintf("%s - cron task begin...", date('Y-m-d H:i:s')));
}, [], $c->get(TaskFetcher::class));
return $cronardMiddleware->fromFile(getenv("META_PATH")."/crontab.php")->fromAnnotations($c->get(TaskFetcher::class));
},
TaskFetcher::class => function($c) {
$fetcher = new TaskFetcher(null, null, $c->get('cronard.caching'));
$fetcher->setFolderList(array_map(function($item) {
return $item;
}, $c->get(Lean::class)->getCronard()));
return $fetcher;
},*/
CommandFetcher::class => function($c) {
$fetcher = new CommandFetcher(null, null, $c->get('cli.caching'));
$fetcher->setFolderList(array_map(function($item) {
return $item;
}, $c->get(Lean::class)->getCli()));
return $fetcher;
},
CliMiddleware::class => function($c) {
return new CliMiddleware($c, $c->get('cli.response:default'), $c->get(CommandFetcher::class));
},
'cli.response:default' => function($c) {
return function() {
return new \Laminas\Diactoros\Response\TextResponse("This is the default response from CLI middleware which indicates that no command were registered for this application.\n");
};
},
];

View File

@ -81,7 +81,7 @@ return [
};
},
'routes.middlewares' => [ "dump", "errorHandler", SessionMiddleware::class, CronardMiddleware::class, Mcnd\Event\EventMiddleware::class, HttpBasicAuthentication::class ],
'routes.middlewares' => [ "dump", "errorHandler", SessionMiddleware::class, CronardMiddleware::class, Mcnd\Event\EventMiddleware::class, Mcnd\CLI\CliMiddleware::class, ],
'routes.list' => function($c) {
return function (ContainerInterface $container) {
@ -94,7 +94,6 @@ return [
}
$routing = $container->get(Lean\Routing::class);
$routing->registerRoute($container, getenv('URL_BASE'));
return $router;

View File

@ -6,6 +6,7 @@ use Laminas\Diactoros\Response\HtmlResponse;
use TheBugs\JavascriptMiddleware;
use Cronard\CronardMiddleware,
Notes\Cronard\TaskFetcher;

View File

@ -34,6 +34,10 @@ return array_merge(
'cronard' => [
'%ESCAPED_NAMESPACE%\\Controller' => implode(DIRECTORY_SEPARATOR, [ getenv("PROJECT_PATH"), 'src', 'Controller', '' ]),
],
'cli' => [
'%ESCAPED_NAMESPACE%\\Controller' => implode(DIRECTORY_SEPARATOR, [ getenv("PROJECT_PATH"), 'src', 'Controller', '' ]),
],
],
],

View File

@ -15,5 +15,6 @@ return [
'breadcrumbs.caching' => create(Kash\ArrayCache::class)->constructor( get(Kash\CacheInvalidator::class), "lean.breadcrumbs", 30),
'ulmus.caching' => create(Kash\ArrayCache::class)->constructor( get(Kash\CacheInvalidator::class), "ulmus.entities", 30),
'cronard.caching' => create(Kash\ArrayCache::class)->constructor( get(Kash\CacheInvalidator::class), "lean.cronards", 30),
'events.caching' => create(Kash\ArrayCache::class)->constructor( get(Kash\CacheInvalidator::class), "lean.events", random_int(3600, 7200)),
'events.caching' => create(Kash\ArrayCache::class)->constructor( get(Kash\CacheInvalidator::class), "lean.events", 30),
'cli.caching' => create(Kash\ArrayCache::class)->constructor( get(Kash\CacheInvalidator::class), "lean.cli", 30),
];

View File

@ -49,4 +49,5 @@ return [
'ulmus.caching' => create(Kash\ApcuCache::class)->constructor( get(Kash\CacheInvalidator::class), "ulmus.entities", random_int(3600, 7200)),
'cronard.caching' => create(Kash\ApcuCache::class)->constructor( get(Kash\CacheInvalidator::class), "lean.cronards", random_int(3600, 7200)),
'events.caching' => create(Kash\ApcuCache::class)->constructor( get(Kash\CacheInvalidator::class), "lean.events", random_int(3600, 7200)),
'cli.caching' => create(Kash\ApcuCache::class)->constructor( get(Kash\CacheInvalidator::class), "lean.cli", random_int(3600, 7200)),
];

View File

@ -25,7 +25,7 @@ class PrivilegeGrantAccess implements PermissionGrantInterface {
*/
public function is_dev() : bool
{
return false;
return getenv('DEBUG');
}
public function is_admin(User $user) : bool

View File

@ -16,6 +16,8 @@ class Application
public array $routes;
public array $cli;
public array $cronard;
public array $entities;
@ -73,10 +75,15 @@ class Application
if (is_array($data['cronard'] ?? false)) {
$this->cronard = $data['cronard'];
}
if (is_array($data['events'] ?? false)) {
$this->events = $data['events'];
}
if (is_array($data['cli'] ?? false)) {
$this->cli = $data['cli'];
}
return $this;
}
}

View File

@ -117,6 +117,22 @@ trait ControllerTrait {
return new FileDownloadResponse($path, $code, $headers);
}
public function renderCLI(ServerRequestInterface $request, mixed $data) : ResponseInterface
{
if ($data instanceof \JsonSerializable ) {
return $this->renderJson(
$data
);
}
elseif ( is_array($data) ) {
var_export($data);
}
return $this->renderText(
$data . PHP_EOL
);
}
public function fromResponse(ResponseInterface $response)
{
if ( $response->getStatusCode() === 200 ) {

View File

@ -83,6 +83,11 @@ class Lean
return array_merge(...array_map(fn($app) => $app->cronard ?? [], $this->applications));
}
public function getCLI() : array
{
return array_merge(...array_map(fn($app) => $app->cli ?? [], $this->applications));
}
public function getEvents() : array
{
return array_merge(...array_map(fn($app) => $app->events ?? [], $this->applications));
@ -128,6 +133,7 @@ class Lean
$path = dirname(__DIR__) . "/meta/definitions/";
return array_merge(
require($path . "cli.php"),
require($path . "cronard.php"),
require($path . "email.php"),
require($path . "event.php"),