Files
domokits-NEW/domokits/local/modules/TheliaBlocks/Command/ValidateJsonContent.php

140 lines
4.8 KiB
PHP

<?php
/*
* This file is part of the Thelia package.
* http://www.thelia.net
*
* (c) OpenStudio <info@thelia.net>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace TheliaBlocks\Command;
use Symfony\Component\Console\Helper\ProgressBar;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Thelia\Command\ContainerAwareCommand;
use TheliaBlocks\Model\BlockGroupI18nQuery;
class ValidateJsonContent extends ContainerAwareCommand
{
public function __construct()
{
parent::__construct();
}
protected function configure(): void
{
$this
->setName('thelia_blocks:blocks:validate')
->setDescription('Validate & update json_content structure');
}
protected function execute(InputInterface $input, OutputInterface $output): int
{
$jsonContents = BlockGroupI18nQuery::create()->find();
$output->writeln('<bg=blue>============================================================= </>');
$output->writeln('<fg=blue>Thelia blocks json_content validation started</>');
$progressBar = new ProgressBar($output, $jsonContents->count());
$progressBar->start();
foreach ($jsonContents as $jsonContent) {
$content = $jsonContent->getJsonContent();
$decodedJson = json_decode($content, true);
foreach ($decodedJson as $key => $value) {
/* if ($value['type']['id'] === 'blockAccordion') {
$oldData = $decodedJson[$key]['data'];
$group = array_map(function ($item) {
if (isset($item['group'])) {
$item['content'] = [];
$item['content'][] = $item['group'];
unset($item['group']);
$item['content'][0]['data'] = ['content' => [$item['content'][0]['data']]];
}
return $item;
}, $oldData);
$decodedJson[$key]['data'] = [
'title' => '',
'group' => $group,
];
} */
if ($value['type']['id'] === "blockAccordion") {
$accordionTitle = $decodedJson[$key]['data']['group']['title'];
$accordionContent = $decodedJson[$key]['data']['group']['group'];
$decodedJson[$key]['data'] = [
'title' => $accordionTitle,
'group' => $accordionContent,
];
}
if ($value['type']['id'] === 'blockGroup') {
$oldData = $decodedJson[$key]['data'];
$itemsFromData = array_map(function ($item) {
return $item;
}, $oldData);
$decodedJson[$key]['data'] = [
'content' => [$itemsFromData],
];
}
if ($value['type']['id'] === 'multiColumns') {
$oldData = $decodedJson[$key]['data'];
$itemsFromGroupsInCol = array_map(function ($item) {
if (isset($item['group'])) {
$item = $item['group']['data'];
}
foreach ($item as $index => $column){
if (null === $column['type']['id'] || empty($column['type']['id'])) {
unset($item[$index]);
}
}
return $item;
}, $oldData);
$oldData = $itemsFromGroupsInCol;
$decodedJson[$key]['title'] = [
'default' => \count($itemsFromGroupsInCol) . ' Columns',
'fr' => \count($itemsFromGroupsInCol) . ' Colonnes',
'en' => \count($itemsFromGroupsInCol) . ' Columns',
'es' => \count($itemsFromGroupsInCol) . ' Columnas',
'it' => \count($itemsFromGroupsInCol) . ' Colonne',
];
$decodedJson[$key]['data'] = $oldData;
}
}
$jsonContent->setJsonContent(json_encode($decodedJson));
$jsonContent->save();
$progressBar->advance();
}
$progressBar->finish();
$output->writeln('');
$output->writeln('<info>Thelia blocks json_content validation ended</info>');
$output->writeln('<bg=blue>============================================================= </>');
return 1;
}
}