Skip to content

Instantly share code, notes, and snippets.

@paveljanda
Created January 30, 2017 07:30
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save paveljanda/09faeb6941c8ca27d14519c5c1c46f33 to your computer and use it in GitHub Desktop.
Save paveljanda/09faeb6941c8ca27d14519c5c1c46f33 to your computer and use it in GitHub Desktop.
<?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