Skip to content

Commit ef689bc

Browse files
AlexBDevbenjamin-hubert
authored andcommitted
CALAIS-67 Fix parent list when an item is edited (#19)
1 parent c5c02e9 commit ef689bc

File tree

2 files changed

+47
-15
lines changed

2 files changed

+47
-15
lines changed

Controller/Admin/CRUD/ItemAdmin.php

Lines changed: 46 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -82,13 +82,27 @@ protected function configureFormFields(FormMapper $formMapper)
8282
{
8383
$subject = $this->getSubject();
8484
$isNew = ($this->id($subject) === null) ? true : false;
85+
$request = $this->getRequest();
8586

86-
if ($isNew === true) {
87-
$idMenu = $this->getRequest()->query->getInt('create-menu');
88-
$idItem = $this->getRequest()->query->getInt('create-item');
89-
} else {
90-
$idMenu = $subject->getMenu()->getId();
91-
$idItem = ($subject->getParent() !== null) ? $subject->getParent()->getId() : 0;
87+
$idItem = null;
88+
$idMenu = null;
89+
if($request->query->has('uniqid')) {
90+
$formId = $request->query->get('uniqid');
91+
if ($request->request->has($formId)) {
92+
$formData = $request->request->get($formId);
93+
$idMenu = $formData['create-menu'];
94+
$idItem = $formData['create-item'];
95+
}
96+
}
97+
98+
if ($idMenu === null && $idItem === null) {
99+
if ($isNew === true) {
100+
$idMenu = $this->getRequest()->query->get('create-menu');
101+
$idItem = $this->getRequest()->query->get('create-item');
102+
} else {
103+
$idMenu = $subject->getMenu()->getId();
104+
$idItem = ($subject->getParent() !== null) ? $subject->getParent()->getId() : null;
105+
}
92106
}
93107

94108
$formMapper
@@ -98,7 +112,7 @@ protected function configureFormFields(FormMapper $formMapper)
98112
'property' => 'name',
99113
'query_builder' => function (EntityRepository $entityRepository) use ($idMenu) {
100114
$query = $entityRepository->createQuerybuilder('m');
101-
if ($idMenu === 0) {
115+
if ($idMenu === null) {
102116
return $query;
103117
}
104118

@@ -108,20 +122,27 @@ protected function configureFormFields(FormMapper $formMapper)
108122
},
109123
]);
110124

111-
if ($idItem === 0 && $idMenu === 0 || $isNew === false && $subject->getParent() !== null || $isNew === true && $idItem > 0) {
125+
if ($idItem != null) {
126+
$pool = $this->getConfigurationPool();
127+
$doctrine = $pool->getContainer()->get('doctrine.orm.default_entity_manager');
128+
$parentItem = $doctrine->getRepository('AlpixelMenuBundle:Item')->find($idItem);
129+
112130
$formMapper->add('parent', null, [
113131
'label' => 'Item parent',
114132
'required' => true,
115133
'property' => 'name',
116-
'query_builder' => function (EntityRepository $entityRepository) use ($idItem) {
117-
$query = $entityRepository->createQuerybuilder('i');
118-
if ($idItem === 0) {
119-
return $query;
134+
'data' => $parentItem,
135+
'query_builder' => function (EntityRepository $repository) use ($parentItem) {
136+
$qb = $repository->createQueryBuilder('i');
137+
138+
if ($parentItem->getParent() === null) {
139+
return $qb->where('i.parent IS NULL')
140+
->andWhere('i.menu = :id')
141+
->setParameter('id', $parentItem->getMenu());
120142
}
121143

122-
return $query
123-
->where('i.id = :id')
124-
->setParameter('id', $idItem);
144+
return $qb->where('i.id IN (:ids)')
145+
->setParameter('ids', $parentItem->getParent()->getChildren());
125146
},
126147
]);
127148
}
@@ -134,6 +155,16 @@ protected function configureFormFields(FormMapper $formMapper)
134155
->add('uri', 'text', [
135156
'label' => 'URI',
136157
'required' => true,
158+
])
159+
->add('create-menu', 'hidden', [
160+
'required' => false,
161+
'data' => $idMenu,
162+
'mapped' => false,
163+
])
164+
->add('create-item', 'hidden', [
165+
'required' => false,
166+
'data' => $idItem,
167+
'mapped' => false,
137168
]);
138169
}
139170

Entity/Repository/ItemRepository.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace Alpixel\Bundle\MenuBundle\Entity\Repository;
44

5+
use Alpixel\Bundle\MenuBundle\Entity\Item;
56
use Alpixel\Bundle\MenuBundle\Entity\Menu;
67
use Doctrine\ORM\EntityRepository;
78

0 commit comments

Comments
 (0)