diff --git a/migrations/Version20250217095913.php b/migrations/Version20250217095913.php new file mode 100644 index 0000000..34272e0 --- /dev/null +++ b/migrations/Version20250217095913.php @@ -0,0 +1,31 @@ +addSql('ALTER TABLE organizational_unit ADD exclude_parent_changes TINYINT(1) DEFAULT NULL'); + } + + public function down(Schema $schema): void + { + // this down() migration is auto-generated, please modify it to your needs + $this->addSql('ALTER TABLE organizational_unit DROP exclude_parent_changes'); + } +} diff --git a/migrations/Version20250217115241.php b/migrations/Version20250217115241.php new file mode 100644 index 0000000..faf034e --- /dev/null +++ b/migrations/Version20250217115241.php @@ -0,0 +1,31 @@ +addSql('ALTER TABLE trace ADD progress INT DEFAULT NULL'); + } + + public function down(Schema $schema): void + { + // this down() migration is auto-generated, please modify it to your needs + $this->addSql('ALTER TABLE trace DROP progress'); + } +} diff --git a/migrations/Version20250217120940.php b/migrations/Version20250217120940.php new file mode 100644 index 0000000..cc7d61d --- /dev/null +++ b/migrations/Version20250217120940.php @@ -0,0 +1,31 @@ +addSql('ALTER TABLE network_settings DROP validation, DROP og_log'); + } + + public function down(Schema $schema): void + { + // this down() migration is auto-generated, please modify it to your needs + $this->addSql('ALTER TABLE network_settings ADD validation TINYINT(1) DEFAULT NULL, ADD og_log VARCHAR(255) DEFAULT NULL'); + } +} diff --git a/src/Dto/Input/ClientInput.php b/src/Dto/Input/ClientInput.php index 3f07594..c730555 100644 --- a/src/Dto/Input/ClientInput.php +++ b/src/Dto/Input/ClientInput.php @@ -161,6 +161,11 @@ final class ClientInput $client = new Client(); } + $menu = $this->menu?->getEntity() ?? $client->getOrganizationalUnit()?->getNetworkSettings()?->getMenu(); + $ogLive = $this->ogLive?->getEntity() ?? $client->getOrganizationalUnit()?->getNetworkSettings()?->getOgLive(); + $hardwareProfile = $this->hardwareProfile?->getEntity() ?? $client->getOrganizationalUnit()?->getNetworkSettings()?->getHardwareProfile(); + $repository = $this->repository?->getEntity() ?? $client->getOrganizationalUnit()?->getNetworkSettings()?->getRepository(); + $client->setName($this->name); $client->setSerialNumber($this->serialNumber); $client->setNetiface($this->netiface); @@ -168,10 +173,10 @@ final class ClientInput $client->setNetDriver($this->netDriver); $client->setMac($this->mac); $client->setIp($this->ip); - $client->setMenu($this->menu?->getEntity()); - $client->setOgLive($this->ogLive?->getEntity()); - $client->setHardwareProfile($this->hardwareProfile?->getEntity()); - $client->setRepository($this->repository?->getEntity()); + $client->setMenu($menu); + $client->setOgLive($ogLive); + $client->setHardwareProfile($hardwareProfile); + $client->setRepository($repository); $client->setTemplate($this->template?->getEntity()); $client->setPosition($this->position); $client->setStatus($this->status); diff --git a/src/Dto/Input/NetworkSettingsInput.php b/src/Dto/Input/NetworkSettingsInput.php index 5b11659..057d848 100644 --- a/src/Dto/Input/NetworkSettingsInput.php +++ b/src/Dto/Input/NetworkSettingsInput.php @@ -77,12 +77,6 @@ class NetworkSettingsInput #[Groups(['organizational-unit:write'])] public ?ImageRepositoryOutput $repository = null; - #[Groups(['organizational-unit:write'])] - public ?bool $validation = null; - - #[Groups(['organizational-unit:write'])] - public ?string $oglog = null; - #[Groups(['organizational-unit:write'])] public ?string $ogshare = null; @@ -146,7 +140,6 @@ class NetworkSettingsInput $networkSettings->setMcastSpeed($this->mcastSpeed); $networkSettings->setMcastPort($this->mcastPort); $networkSettings->setMcastMode($this->mcastMode); - $networkSettings->setOglog($this->oglog); $networkSettings->setOgshare($this->ogshare); if ($this->menu) { @@ -165,8 +158,6 @@ class NetworkSettingsInput $networkSettings->setRepository($this->repository->getEntity()); } - $networkSettings->setValidation($this->validation); - return $networkSettings; } } \ No newline at end of file diff --git a/src/Dto/Input/OrganizationalUnitInput.php b/src/Dto/Input/OrganizationalUnitInput.php index d06e337..64b8930 100644 --- a/src/Dto/Input/OrganizationalUnitInput.php +++ b/src/Dto/Input/OrganizationalUnitInput.php @@ -57,6 +57,9 @@ class OrganizationalUnitInput #[Groups(['organizational-unit:write'])] public ?bool $remotePc = false; + #[Groups(['organizational-unit:write'])] + public ?bool $excludeParentChanges = null; + public function __construct(?OrganizationalUnit $organizationalUnit = null) { if (!$organizationalUnit) { @@ -102,6 +105,7 @@ class OrganizationalUnitInput $organizationalUnit->setComments($this->comments); $organizationalUnit->setType($this->type); $organizationalUnit->setRemotePc($this->remotePc); + $organizationalUnit->setExcludeParentChanges($this->excludeParentChanges); if ($this->networkSettings){ $organizationalUnit->setNetworkSettings($this->networkSettings->createOrUpdateEntity($organizationalUnit->getNetworkSettings())); diff --git a/src/Dto/Output/NetworkSettingsOutput.php b/src/Dto/Output/NetworkSettingsOutput.php index d8391c3..2224045 100644 --- a/src/Dto/Output/NetworkSettingsOutput.php +++ b/src/Dto/Output/NetworkSettingsOutput.php @@ -60,15 +60,9 @@ final class NetworkSettingsOutput extends AbstractOutput #[Groups(['network-settings:read', "organizational-unit:read", "client:read"])] public ?ImageRepositoryOutput $repository = null; - #[Groups(['network-settings:read', "organizational-unit:read", "client:read"])] - public ?string $oglog = null; - #[Groups(['network-settings:read', "organizational-unit:read", "client:read"])] public ?string $ogshare = null; - #[Groups(['network-settings:read', "organizational-unit:read", "client:read"])] - public ?bool $validation = null; - #[Groups(['organizational-unit:read'])] public \DateTime $createdAt; @@ -92,7 +86,6 @@ final class NetworkSettingsOutput extends AbstractOutput $this->mcastSpeed = $networkSettings->getMcastSpeed(); $this->mcastPort = $networkSettings->getMcastPort(); $this->mcastMode = $networkSettings->getMcastMode(); - $this->oglog = $networkSettings->getOglog(); $this->ogshare = $networkSettings->getOgshare(); if ($networkSettings->getMenu()) { @@ -111,7 +104,6 @@ final class NetworkSettingsOutput extends AbstractOutput $this->repository = new ImageRepositoryOutput($networkSettings->getRepository()); } - $this->validation = $networkSettings->getValidation(); $this->createdAt = $networkSettings->getCreatedAt(); $this->createdBy = $networkSettings->getCreatedBy(); } diff --git a/src/Dto/Output/OrganizationalUnitOutput.php b/src/Dto/Output/OrganizationalUnitOutput.php index f1daa30..b77decf 100644 --- a/src/Dto/Output/OrganizationalUnitOutput.php +++ b/src/Dto/Output/OrganizationalUnitOutput.php @@ -61,6 +61,9 @@ final class OrganizationalUnitOutput extends AbstractOutput #[Groups(['organizational-unit:read'])] public ?bool $available = null; + #[Groups(['organizational-unit:read'])] + public ?bool $excludeParentChanges = null; + #[Groups(['organizational-unit:read'])] public \DateTime $createdAt; @@ -99,6 +102,7 @@ final class OrganizationalUnitOutput extends AbstractOutput )->toArray(); } + $this->excludeParentChanges = $organizationalUnit->isExcludeParentChanges(); $this->path = $organizationalUnit->getPath(); $this->createdAt = $organizationalUnit->getCreatedAt(); $this->createdBy = $organizationalUnit->getCreatedBy(); diff --git a/src/Dto/Output/TraceOutput.php b/src/Dto/Output/TraceOutput.php index c4666a3..bc3f35e 100644 --- a/src/Dto/Output/TraceOutput.php +++ b/src/Dto/Output/TraceOutput.php @@ -34,6 +34,9 @@ final class TraceOutput extends AbstractOutput #[Groups(['trace:read'])] public ?\DateTimeInterface $finishedAt = null; + #[Groups(['trace:read'])] + public ?int $progress = null; + #[Groups(['trace:read'])] public \DateTime $createdAt; @@ -56,6 +59,7 @@ final class TraceOutput extends AbstractOutput $this->output = $trace->getOutput(); $this->input = $trace->getInput(); $this->finishedAt = $trace->getFinishedAt(); + $this->progress = $trace->getProgress(); $this->createdAt = $trace->getCreatedAt(); $this->createdBy = $trace->getCreatedBy(); } diff --git a/src/Entity/NetworkSettings.php b/src/Entity/NetworkSettings.php index deecf79..a62e8ed 100644 --- a/src/Entity/NetworkSettings.php +++ b/src/Entity/NetworkSettings.php @@ -63,9 +63,6 @@ class NetworkSettings extends AbstractEntity #[ORM\JoinColumn(nullable: true)] private ?HardwareProfile $hardwareProfile = null; - #[ORM\Column(nullable: true)] - private ?bool $validation = null; - #[ORM\ManyToOne] private ?ImageRepository $repository = null; @@ -73,9 +70,6 @@ class NetworkSettings extends AbstractEntity #[ORM\JoinColumn( onDelete: 'SET NULL')] private ?OgLive $ogLive = null; - #[ORM\Column(length: 255, nullable: true)] - private ?string $ogLog = null; - #[ORM\Column(length: 255, nullable: true)] private ?string $ogShare = null; @@ -293,18 +287,6 @@ class NetworkSettings extends AbstractEntity return $this; } - public function getValidation(): ?bool - { - return $this->validation; - } - - public function setValidation(?bool $validation): static - { - $this->validation = $validation; - - return $this; - } - public function getRepository(): ?ImageRepository { return $this->repository; @@ -329,18 +311,6 @@ class NetworkSettings extends AbstractEntity return $this; } - public function getOgLog(): ?string - { - return $this->ogLog; - } - - public function setOgLog(?string $ogLog): static - { - $this->ogLog = $ogLog; - - return $this; - } - public function getOgShare(): ?string { return $this->ogShare; diff --git a/src/Entity/OrganizationalUnit.php b/src/Entity/OrganizationalUnit.php index b0d5596..8e29524 100644 --- a/src/Entity/OrganizationalUnit.php +++ b/src/Entity/OrganizationalUnit.php @@ -97,6 +97,9 @@ class OrganizationalUnit extends AbstractEntity #[ORM\Column] private ?bool $reserved = false; + #[ORM\Column(nullable: true)] + private ?bool $excludeParentChanges = null; + public function __construct() { parent::__construct(); @@ -429,4 +432,16 @@ class OrganizationalUnit extends AbstractEntity return $this; } + + public function isExcludeParentChanges(): ?bool + { + return $this->excludeParentChanges ?? false; + } + + public function setExcludeParentChanges(?bool $excludeParentChanges): static + { + $this->excludeParentChanges = $excludeParentChanges; + + return $this; + } } diff --git a/src/Entity/Trace.php b/src/Entity/Trace.php index 0faf0c7..205b37b 100644 --- a/src/Entity/Trace.php +++ b/src/Entity/Trace.php @@ -34,6 +34,9 @@ class Trace extends AbstractEntity #[ORM\Column(type: "json", nullable: true)] private ?array $input = null; + #[ORM\Column(nullable: true)] + private ?int $progress = null; + public function getClient(): ?Client { return $this->client; @@ -129,4 +132,16 @@ class Trace extends AbstractEntity return $this; } + + public function getProgress(): ?int + { + return $this->progress; + } + + public function setProgress(?int $progress): static + { + $this->progress = $progress; + + return $this; + } } diff --git a/src/EventSubscriber/OrganizationalUnitSubscriber.php b/src/EventSubscriber/OrganizationalUnitSubscriber.php index 02611ae..d305545 100644 --- a/src/EventSubscriber/OrganizationalUnitSubscriber.php +++ b/src/EventSubscriber/OrganizationalUnitSubscriber.php @@ -42,7 +42,7 @@ final readonly class OrganizationalUnitSubscriber implements EventSubscriberInte /** @var OrganizationalUnit $organizationalUnitEntity */ $organizationalUnitEntity = $organizationalUnitOutput->getEntity(); - if ($organizationalUnitEntity->getNetworkSettings() === null) { + if ($organizationalUnitEntity->getNetworkSettings() === null || $organizationalUnitEntity->isExcludeParentChanges()) { return; } @@ -56,8 +56,15 @@ final readonly class OrganizationalUnitSubscriber implements EventSubscriberInte private function updateChildrenNetworkSettings(OrganizationalUnit $parentUnit, NetworkSettings $networkSettings): void { + /** @var OrganizationalUnit $childUnit */ foreach ($parentUnit->getOrganizationalUnits() as $childUnit) { - $childUnit->setNetworkSettings($networkSettings); + //var_dump($childUnit->getNetworkSettings()->getMcastPort()); + if ($childUnit->isExcludeParentChanges()) { + $childUnit->setNetworkSettings(null); + } else{ + $childUnit->setNetworkSettings($networkSettings); + + } $this->entityManager->persist($childUnit); $this->updateChildrenNetworkSettings($childUnit, $networkSettings); @@ -66,7 +73,12 @@ final readonly class OrganizationalUnitSubscriber implements EventSubscriberInte private function buildNetworkSettings($organizationalUnitEntity): NetworkSettings { - $newNetworkSettings = new NetworkSettings(); + if ($organizationalUnitEntity->getNetworkSettings() === null) { + $newNetworkSettings = new NetworkSettings(); + } else { + $newNetworkSettings = $organizationalUnitEntity->getNetworkSettings(); + } + $newNetworkSettings->setNextServer($organizationalUnitEntity->getNetworkSettings()->getNextServer()); $newNetworkSettings->setBootFileName($organizationalUnitEntity->getNetworkSettings()->getBootFileName()); $newNetworkSettings->setProxy($organizationalUnitEntity->getNetworkSettings()->getProxy());