Created
January 30, 2017 07:30
-
-
Save paveljanda/09faeb6941c8ca27d14519c5c1c46f33 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* @param int $item_id | |
* @param int|NULL $prev_id | |
* @param int|NULL $next_id | |
* @return void | |
*/ | |
public function handleSort($item_id, $prev_id, $next_id) | |
{ | |
$repository = $this->em->getRepository(Item::class); | |
$item = $repository->find($item_id); | |
/** | |
* 1, Find out order of item BEFORE current tarif | |
*/ | |
if (!$prev_id) { | |
$previousItem = NULL; | |
} else { | |
$previousItem = $repository->find($prev_id); | |
} | |
/** | |
* 2, Find out order of item AFTER current tarif | |
*/ | |
if (!$next_id) { | |
$nextItem = NULL; | |
} else { | |
$nextItem = $repository->find($next_id); | |
} | |
/** | |
* 3, Find all item that have to be moved one position up | |
*/ | |
$itemsToMoveUp = $repository->createQueryBuilder('r') | |
->where('r.order <= :order') | |
->setParameter('order', $previousItem ? $previousItem->getOrder() : 0) | |
->andWhere('r.order > :order2') | |
->setParameter('order2', $item->getOrder()) | |
->getQuery() | |
->getResult(); | |
foreach ($itemsToMoveUp as $t) { | |
$t->setOrder($t->getOrder() - 1); | |
$this->em->persist($t); | |
} | |
/** | |
* 3, Find all item that have to be moved one position down | |
*/ | |
$itemsToMoveDown = $repository->createQueryBuilder('r') | |
->where('r.order >= :order') | |
->setParameter('order', $nextItem ? $nextItem->getOrder() : 0) | |
->andWhere('r.order < :order2') | |
->setParameter('order2', $item->getOrder()) | |
->getQuery() | |
->getResult(); | |
foreach ($itemsToMoveDown as $t) { | |
$t->setOrder($t->getOrder() + 1); | |
$this->em->persist($t); | |
} | |
/** | |
* Update current item order | |
*/ | |
if ($previousItem) { | |
$item->setOrder($previousItem->getOrder() + 1); | |
} else if ($nextItem) { | |
$item->setOrder($nextItem->getOrder() - 1); | |
} else { | |
$item->setOrder(1); | |
} | |
$this->em->persist($item)->flush(); | |
$this->flashMessage('Pořadí tabulek uloženo', 'success'); | |
$this->redrawControl('flashes'); | |
$this['itemGrid']->redrawControl(); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment