/
NodeTypesAddFieldCommand.php
59 lines (51 loc) · 2 KB
/
NodeTypesAddFieldCommand.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
<?php
declare(strict_types=1);
namespace RZ\Roadiz\Console;
use RZ\Roadiz\Core\Entities\NodeType;
use RZ\Roadiz\Core\Entities\NodeTypeField;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Style\SymfonyStyle;
/**
* Command line utils for managing node-types from terminal.
*/
class NodeTypesAddFieldCommand extends NodeTypesCreationCommand
{
protected function configure()
{
$this->setName('nodetypes:add-fields')
->setDescription('Add fields to a node-type')
->addArgument(
'name',
InputArgument::REQUIRED,
'Node-type name'
);
}
protected function execute(InputInterface $input, OutputInterface $output)
{
$io = new SymfonyStyle($input, $output);
$this->entityManager = $this->getHelper('doctrine')->getEntityManager();
$name = $input->getArgument('name');
/** @var NodeType|null $nodeType */
$nodeType = $this->entityManager
->getRepository(NodeType::class)
->findOneBy(['name' => $name]);
if ($nodeType !== null) {
$latestPosition = $this->entityManager
->getRepository(NodeTypeField::class)
->findLatestPositionInNodeType($nodeType);
$this->addNodeTypeField($nodeType, $latestPosition + 1, $io);
$this->entityManager->flush();
$handler = $this->getHelper('handlerFactory')->getHandler($nodeType);
$handler->regenerateEntityClass();
$io->success('Node type ' . $nodeType->getName() . ' has been updated.' . PHP_EOL .
'Do not forget to update database schema!' . PHP_EOL .
'bin/roadiz orm:schema-tool:update --dump-sql --force');
return 0;
} else {
$io->error('Node-type "' . $name . '" does not exist.');
return 1;
}
}
}