Ejemplo n.º 1
0
 /**
  * @param array $parameters
  * @param Tag   $tag
  */
 protected function updatePosition($parameters, Tag $tag)
 {
     /*
      * First, we set the new parent
      */
     $parent = null;
     if (!empty($parameters['newParent']) && $parameters['newParent'] > 0) {
         $parent = $this->getService('em')->find('RZ\\Roadiz\\Core\\Entities\\Tag', (int) $parameters['newParent']);
         if ($parent !== null) {
             $tag->setParent($parent);
         }
     } else {
         $tag->setParent(null);
     }
     /*
      * Then compute new position
      */
     if (!empty($parameters['nextTagId']) && $parameters['nextTagId'] > 0) {
         $nextTag = $this->getService('em')->find('RZ\\Roadiz\\Core\\Entities\\Tag', (int) $parameters['nextTagId']);
         if ($nextTag !== null) {
             $tag->setPosition($nextTag->getPosition() - 0.5);
         }
     } elseif (!empty($parameters['prevTagId']) && $parameters['prevTagId'] > 0) {
         $prevTag = $this->getService('em')->find('RZ\\Roadiz\\Core\\Entities\\Tag', (int) $parameters['prevTagId']);
         if ($prevTag !== null) {
             $tag->setPosition($prevTag->getPosition() + 0.5);
         }
     }
     // Apply position update before cleaning
     $this->getService('em')->flush();
     if ($parent !== null) {
         $parent->getHandler()->cleanChildrenPositions();
     } else {
         TagHandler::cleanRootTagsPositions();
     }
     /*
      * Dispatch event
      */
     $event = new FilterTagEvent($tag);
     $this->getService('dispatcher')->dispatch(TagEvents::TAG_UPDATED, $event);
 }