trinity-cms-bundles/src/Trinity/Bundle/ContentManagerBundle/Command/RebuildNavPostCopyCommand.php

132 lines
4.4 KiB
PHP

<?php
namespace Trinity\Bundle\ContentManagerBundle\Command;
use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Trinity\Bundle\ContentManagerBundle\Model\NavQuery;
use Trinity\Bundle\ContentManagerBundle\Model\NodeQuery;
class RebuildNavPostCopyCommand extends ContainerAwareCommand
{
protected function configure()
{
$this
->setName('nav:rebuild')
->setDescription('Rebuild navigations after copies')
->setHelp(<<<EOF
The <info>%command.name%</info> rebuilds navigations after copies.
EOF
)
;
}
/**
* {@inheritdoc}
*/
protected function execute(InputInterface $input, OutputInterface $output)
{
$navigations = NavQuery::create()->find();
foreach ($navigations as $navigation) {
$rootNode = $navigation->getRootNode();
$menus = $navigation->getMenus();
foreach ($menus as $menu) {
$nodes = $menu->getNodes();
$lastNode = $rootNode;
foreach ($nodes as $k => $node) {
echo "\n", $k, "[", $node->getLevel() ,"]", " ", $node->getTitle(), "\n";
if ($node->getLevel() === 1 && $k === 0) {
$node
->moveToLastChildOf($rootNode)
->save();
echo "> moveToLastChildOf 1 ".$rootNode->getTitle(), "\n";
} elseif ($node->getLevel() === 1 && $k > 0) {
while ($lastNode->getLevel() !== 1) {
$lastNode = $lastNode->getParent();
}
$node
->moveAfter($lastNode)
->save();
echo "> moveAfter 2 ".$lastNode->getTitle(), "\n";
} else {
if ($node->getLevel() > $lastNode->getLevel()) {
$node
->moveAbove($lastNode)
->save();
echo "> moveAbove 3 ".$lastNode->getTitle(), "\n";
} elseif ($node->getLevel() === $lastNode->getLevel()) {
$node
->moveAfter($lastNode)
->save();
echo "> moveAfter 4 ".$lastNode->getTitle(), "\n";
} else {
$diffParentLevel = $node->getLevel() - $lastNode->getLevel() + 1;
for ($i = 0; $i <= $diffParentLevel; $i++) {
$lastNode = $lastNode->getParent();
}
$node
->moveAbove($lastNode)
->save();
echo "> moveAbove 5 ".$lastNode->getTitle(), "\n";
echo "> diff ", $diffParentLevel, "\n";
}
}
$lastNode = $node;
}
}
foreach ($rootNode->getChildren() as $child) {
$l = $child->getLevel();
for ($i = 0; $i < $i; $i++) {
echo " ";
}
echo $child->getTitle();
echo "\n";
foreach ($child->getChildren() as $child2) {
$l = $child2->getLevel();
for ($i = 0; $i < $l; $i++) {
echo " ";
}
echo $child2->getTitle();
echo "\n";
foreach ($child2->getChildren() as $child3) {
$l = $child3->getLevel();
for ($i = 0; $i < $l; $i++) {
echo " ";
}
echo $child3->getTitle();
echo "\n";
}
}
}
}
$nodes = NodeQuery::create()->find();
foreach ($nodes as $node) {
if (preg_match('/cms_node_/', $node->getRouteName())) {
$node->setRouteName('cms_node_'.$node->getId())->save();
}
}
}
}