Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Backport/node type yaml #41

Merged
merged 7 commits into from
Feb 10, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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