132 lines
4.4 KiB
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();
|
|
}
|
|
}
|
|
}
|
|
}
|