/** * Shift position values for pages siblings of and after $page by $delta. * * @param Page $page The page for which to shift position. * @param integer $delta The shift value of position. * @param boolean $strict Does $page is include (true) or not (false, by default). * * @return PageRepository */ private function shiftPosition(Page $page, $delta, $strict = false) { if (true === $page->hasMainSection()) { return $this; } $query = $this->createQueryBuilder('p')->set('p._position', 'p._position + :delta_node')->andWhere('p._section = :section')->andWhere('p._position >= :position')->setParameters(['delta_node' => $delta, 'section' => $page->getSection(), 'position' => $page->getPosition()]); if (true === $strict) { $query->andWhere('p != :page')->setParameter('page', $page); } else { $page->setPosition($page->getPosition() + $delta); } $query->update()->getQuery()->execute(); return $this; }