64 lines
1.8 KiB
PHP
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;
|
|
|
|
};
|
|
}
|
|
}
|