Dave Mc Nicoll 0b1286c05f - WIP on CLI
2024-11-11 20:19:24 +00:00

64 lines
1.8 KiB
PHP

<?php
namespace Lean\Console\Form\Storage\Database;
use Picea\Ui\Method\{ FormInterface, FormContext, FormContextInterface };
use \Lean\Console\{ Lib, Entity };
use Picea\Compiler\Context;
use Psr\Http\Message\ServerRequestInterface;
use Ulmus\{ EntityCollection };
class Import implements FormInterface
{
protected ? Lib\DatabaseMigrations $migration;
protected array $connections;
public function __construct(Lib\DatabaseMigrations $migration, array $connections)
{
$this->migration = $migration;
$this->connections = $connections;
}
public function initialize(FormContextInterface $context) : void
{
$context->sourceTables ??= new EntityCollection();
$context->destinationTables ??= new EntityCollection();
}
public function validate(FormContextInterface $context) : bool
{
if ($context->source) {
$filtered = array_filter($this->migration->entities, fn($e, $key) => $key::repository()->adapter->name === $context->source, ARRAY_FILTER_USE_BOTH);
$context->sourceTables->replaceWith($filtered);
}
return $context->valid();
}
public function execute(FormContextInterface $context) : void
{
if ($context->copy) {
foreach (array_filter($context->copy) as $dest => $source) {
foreach($source::repository()->yield() as $src) {
$dest::repository()->save( $src->toArray(), null, true );
}
}
}
}
public static function getContext(ServerRequestInterface $request, ? string $formName = null) : FormContextInterface
{
return new class($request, $formName) extends FormContext {
public EntityCollection $sourceTables;
public EntityCollection $destinationTables;
};
}
}