Skip to content

Commit

Permalink
feat: Backport command for exporting node types from the database to …
Browse files Browse the repository at this point in the history
…yaml files

Backport command for exporting node types from the database to yaml
files
  • Loading branch information
eliot488995568 authored Feb 10, 2025
1 parent e84e8f1 commit 2a5dfc0
Show file tree
Hide file tree
Showing 22 changed files with 267 additions and 40 deletions.
12 changes: 6 additions & 6 deletions lib/Models/src/Core/AbstractEntities/AbstractField.php
Original file line number Diff line number Diff line change
Expand Up @@ -263,7 +263,7 @@ abstract class AbstractField extends AbstractPositioned
#[
ORM\Column(name: 'group_name', type: 'string', length: 250, nullable: true),
Assert\Length(max: 250),
SymfonySerializer\Groups(['node_type', 'setting']),
SymfonySerializer\Groups(['node_type', 'node_type:export', 'setting']),
Serializer\Groups(['node_type', 'setting']),
Serializer\Type('string'),
Serializer\Expose
Expand All @@ -284,7 +284,7 @@ abstract class AbstractField extends AbstractPositioned
ORM\Column(type: 'string', length: 250),
Serializer\Expose,
Serializer\Groups(['node_type', 'setting']),
SymfonySerializer\Groups(['node_type', 'setting']),
SymfonySerializer\Groups(['node_type', 'node_type:export', 'setting']),
Assert\Length(max: 250),
Serializer\Type('string'),
Assert\NotBlank(),
Expand All @@ -297,7 +297,7 @@ abstract class AbstractField extends AbstractPositioned
Serializer\Expose,
Serializer\Groups(['node_type', 'setting']),
Serializer\Type('string'),
SymfonySerializer\Groups(['node_type', 'setting']),
SymfonySerializer\Groups(['node_type', 'node_type:export', 'setting']),
Assert\Length(max: 250),
Assert\NotBlank(),
Assert\NotNull()
Expand All @@ -308,7 +308,7 @@ abstract class AbstractField extends AbstractPositioned
ORM\Column(type: 'string', length: 250, nullable: true),
Serializer\Expose,
Serializer\Groups(['node_type', 'setting']),
SymfonySerializer\Groups(['node_type', 'setting']),
SymfonySerializer\Groups(['node_type', 'node_type:export', 'setting']),
Assert\Length(max: 250),
Serializer\Type('string')
]
Expand All @@ -318,7 +318,7 @@ abstract class AbstractField extends AbstractPositioned
ORM\Column(type: 'text', nullable: true),
Serializer\Expose,
Serializer\Groups(['node_type', 'setting']),
SymfonySerializer\Groups(['node_type', 'setting']),
SymfonySerializer\Groups(['node_type', 'node_type:export', 'setting']),
Serializer\Type('string')
]
protected ?string $description = null;
Expand Down Expand Up @@ -351,7 +351,7 @@ abstract class AbstractField extends AbstractPositioned
#[
ORM\Column(name: 'expanded', type: 'boolean', nullable: false, options: ['default' => false]),
Serializer\Groups(['node_type', 'setting']),
SymfonySerializer\Groups(['node_type', 'setting']),
SymfonySerializer\Groups(['node_type', 'node_type:export', 'setting']),
Serializer\Type('bool'),
Serializer\Expose
]
Expand Down
5 changes: 5 additions & 0 deletions lib/RoadizCoreBundle/config/services.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ services:
$importFilesConfigPath: '%roadiz_core.import_files_config_path%'
$kernelProjectDir: '%kernel.project_dir%'
$apiResourcesDir: '%kernel.project_dir%/config/api_resources'
$nodeTypesDir: '%kernel.project_dir%/config/node_types'
$debug: '%kernel.debug%'
$kernelEnvironment: '%kernel.environment%'
$defaultControllerClass: '%roadiz_core.default_node_source_controller%'
Expand Down Expand Up @@ -241,6 +242,10 @@ services:
# By default, .inner is passed as argument
decorates: 'api_platform.jsonld.normalizer.item'
decoration_priority: 5
# NodesTypes
RZ\Roadiz\CoreBundle\Serializer\Normalizer\NodeTypeFieldNormalizer:
tags:
- { name: 'serializer.normalizer', priority: 5 }
# Need a different name to avoid duplicate YAML key
roadiz_core.serializer.normalizer.nodes_sources_path.json:
class: 'RZ\Roadiz\CoreBundle\Serializer\Normalizer\NodesSourcesPathNormalizer'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,9 @@
use Symfony\Component\Console\Style\SymfonyStyle;

/**
* Command line utils for managing node-types from terminal.
* @deprecated nodeTypes will be static in future Roadiz versions
*
* Command line utils for managing node-types from terminal
*/
final class NodeTypesAddFieldCommand extends NodeTypesCreationCommand
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,9 @@
use Symfony\Component\Console\Style\SymfonyStyle;

/**
* Command line utils for managing node-types from terminal.
* @deprecated nodeTypes will be static in future Roadiz versions
*
* Command line utils for managing node-types from terminal
*/
class NodeTypesCreationCommand extends Command
{
Expand Down
4 changes: 3 additions & 1 deletion lib/RoadizCoreBundle/src/Console/NodeTypesDeleteCommand.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,9 @@
use Symfony\Component\Console\Style\SymfonyStyle;

/**
* Command line utils for managing node-types from terminal.
* @deprecated nodeTypes will be static in future Roadiz versions
*
* Command line utils for managing node-types from terminal
*/
final class NodeTypesDeleteCommand extends Command
{
Expand Down
72 changes: 72 additions & 0 deletions lib/RoadizCoreBundle/src/Console/NodeTypesExportFilesCommand.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
<?php

declare(strict_types=1);

namespace RZ\Roadiz\CoreBundle\Console;

use Doctrine\ORM\EntityNotFoundException;
use Doctrine\Persistence\ManagerRegistry;
use RZ\Roadiz\CoreBundle\Entity\NodeType;
use RZ\Roadiz\CoreBundle\NodeType\NodesTypesFilesExporter;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Style\SymfonyStyle;

final class NodeTypesExportFilesCommand extends Command
{
public function __construct(
private readonly ManagerRegistry $managerRegistry,
private readonly NodesTypesFilesExporter $nodesTypesGenerator,
?string $name = null,
) {
parent::__construct($name);
}

protected function configure(): void
{
$this->setName('nodetypes:export-files')
->setDescription('Migrate database node-types to YAML files.')
->addArgument('node-type', InputArgument::OPTIONAL, 'Only export specified node type.')
;
}

protected function execute(InputInterface $input, OutputInterface $output): int
{
$io = new SymfonyStyle($input, $output);

try {
if ($nodeType = $input->getArgument('node-type')) {
$nodeTypes = $this->managerRegistry
->getRepository(NodeType::class)
->findBy(['name' => $nodeType])
;
} else {
/** @var NodeType[] $nodeTypes */
$nodeTypes = $this->managerRegistry
->getRepository(NodeType::class)
->findAll();
}

if (0 === count($nodeTypes)) {
$io->error('No available node-types…');

return Command::SUCCESS;
}

foreach ($nodeTypes as $nt) {
$nodesTypesPath = $this->nodesTypesGenerator->generate($nt);
if (null !== $nodesTypesPath) {
$io->writeln('* Node Type <info>'.$nodesTypesPath.'</info> has been generated.');
}
}

return Command::SUCCESS;
} catch (EntityNotFoundException) {
$io->warning('You already use YAML files for your node-types.');

return Command::SUCCESS;
}
}
}
28 changes: 14 additions & 14 deletions lib/RoadizCoreBundle/src/Entity/NodeType.php
Original file line number Diff line number Diff line change
Expand Up @@ -41,15 +41,15 @@ class NodeType extends AbstractEntity implements NodeTypeInterface
#[
ORM\Column(name: 'color', type: 'string', length: 7, unique: false, nullable: true),
Serializer\Groups(['node_type', 'color']),
SymfonySerializer\Groups(['node_type', 'color']),
SymfonySerializer\Groups(['node_type', 'node_type:export', 'color']),
Serializer\Type('string'),
Assert\Length(max: 7),
]
protected ?string $color = '#000000';
#[
ORM\Column(type: 'string', length: 30, unique: true),
Serializer\Groups(['node_type', 'node']),
SymfonySerializer\Groups(['node_type', 'node']),
SymfonySerializer\Groups(['node_type', 'node_type:export', 'node']),
Serializer\Type('string'),
Assert\NotNull(),
Assert\NotBlank(),
Expand All @@ -61,7 +61,7 @@ class NodeType extends AbstractEntity implements NodeTypeInterface
#[
ORM\Column(name: 'display_name', type: 'string', length: 250),
Serializer\Groups(['node_type', 'node']),
SymfonySerializer\Groups(['node_type', 'node']),
SymfonySerializer\Groups(['node_type', 'node_type:export', 'node']),
Serializer\Type('string'),
Assert\NotNull(),
Assert\NotBlank(),
Expand All @@ -71,21 +71,21 @@ class NodeType extends AbstractEntity implements NodeTypeInterface
#[
ORM\Column(type: 'text', nullable: true),
Serializer\Groups(['node_type']),
SymfonySerializer\Groups(['node_type']),
SymfonySerializer\Groups(['node_type', 'node_type:export']),
Serializer\Type('string')
]
private ?string $description = null;
#[
ORM\Column(type: 'boolean', nullable: false, options: ['default' => true]),
Serializer\Groups(['node_type']),
SymfonySerializer\Groups(['node_type']),
SymfonySerializer\Groups(['node_type', 'node_type:export']),
Serializer\Type('boolean')
]
private bool $visible = true;
#[
ORM\Column(type: 'boolean', nullable: false, options: ['default' => false]),
Serializer\Groups(['node_type']),
SymfonySerializer\Groups(['node_type']),
SymfonySerializer\Groups(['node_type', 'node_type:export']),
Serializer\Type('boolean')
]
private bool $publishable = false;
Expand All @@ -96,14 +96,14 @@ class NodeType extends AbstractEntity implements NodeTypeInterface
#[
ORM\Column(type: 'boolean', nullable: false, options: ['default' => true]),
Serializer\Groups(['node_type']),
SymfonySerializer\Groups(['node_type']),
SymfonySerializer\Groups(['node_type', 'node_type:export']),
Serializer\Type('boolean')
]
private bool $attributable = false;
#[
ORM\Column(name: 'attributable_by_weight', type: 'boolean', nullable: false, options: ['default' => false]),
Serializer\Groups(['node_type']),
SymfonySerializer\Groups(['node_type']),
SymfonySerializer\Groups(['node_type', 'node_type:export']),
Serializer\Type('boolean')
]
private bool $sortingAttributesByWeight = false;
Expand All @@ -116,21 +116,21 @@ class NodeType extends AbstractEntity implements NodeTypeInterface
#[
ORM\Column(name: 'reachable', type: 'boolean', nullable: false, options: ['default' => true]),
Serializer\Groups(['node_type']),
SymfonySerializer\Groups(['node_type']),
SymfonySerializer\Groups(['node_type', 'node_type:export']),
Serializer\Type('boolean')
]
private bool $reachable = true;
#[
ORM\Column(name: 'hiding_nodes', type: 'boolean', nullable: false, options: ['default' => false]),
Serializer\Groups(['node_type']),
SymfonySerializer\Groups(['node_type']),
SymfonySerializer\Groups(['node_type', 'node_type:export']),
Serializer\Type('boolean')
]
private bool $hidingNodes = false;
#[
ORM\Column(name: 'hiding_non_reachable_nodes', type: 'boolean', nullable: false, options: ['default' => false]),
Serializer\Groups(['node_type']),
SymfonySerializer\Groups(['node_type']),
SymfonySerializer\Groups(['node_type', 'node_type:export']),
Serializer\Type('boolean')
]
private bool $hidingNonReachableNodes = false;
Expand All @@ -146,15 +146,15 @@ class NodeType extends AbstractEntity implements NodeTypeInterface
),
ORM\OrderBy(['position' => 'ASC']),
Serializer\Groups(['node_type']),
SymfonySerializer\Groups(['node_type']),
SymfonySerializer\Groups(['node_type', 'node_type:export']),
Serializer\Type("ArrayCollection<RZ\Roadiz\CoreBundle\Entity\NodeTypeField>"),
Serializer\Accessor(getter: 'getFields', setter: 'setFields')
]
private Collection $fields;
#[
ORM\Column(name: 'default_ttl', type: 'integer', nullable: false, options: ['default' => 0]),
Serializer\Groups(['node_type']),
SymfonySerializer\Groups(['node_type']),
SymfonySerializer\Groups(['node_type', 'node_type:export']),
Serializer\Type('int'),
Assert\GreaterThanOrEqual(value: 0),
Assert\NotNull
Expand All @@ -167,7 +167,7 @@ class NodeType extends AbstractEntity implements NodeTypeInterface
#[
ORM\Column(name: 'searchable', type: 'boolean', nullable: false, options: ['default' => true]),
Serializer\Groups(['node_type']),
SymfonySerializer\Groups(['node_type']),
SymfonySerializer\Groups(['node_type', 'node_type:export']),
Serializer\Type('boolean')
]
private bool $searchable = true;
Expand Down
Loading

0 comments on commit 2a5dfc0

Please sign in to comment.