/** * Post load * * @param LifecycleEventArgs $args */ public function postLoad(LifecycleEventArgs $args) { $entity = $args->getObject(); if ($entity instanceof DocumentNode) { $entity->setUserNode($this->nodeProvider->isUserNode($entity)); } }
/** * onPreSetData * * @param FormEvent $event * * @SuppressWarnings("PMD") */ public function onPreSetData(FormEvent $event) { $data = $event->getData(); $form = $event->getForm(); if (null === $data) { return; } if (null === $data->getId()) { $form->add($this->factory->createNamed('filename', 'hidden', null, array('auto_initialize' => false))); $form->add($this->factory->createNamed('originalName', 'hidden', null, array('auto_initialize' => false))); $form->add($this->factory->createNamed('token', 'hidden', null, array('mapped' => false, 'auto_initialize' => false))); } if (null === $data || null === $data->getId()) { return; } $rootNode = $this->nodeProvider->getRootNode(); $repository = $this->registry->getRepository('Erichard\\DmsBundle\\Entity\\DocumentNode'); $allTree = $this->registry->getRepository('Erichard\\DmsBundle\\Entity\\DocumentNodeClosure')->createQueryBuilder('c')->select('d.id')->innerJoin('c.descendant', 'd')->where('c.ancestor = :id')->setParameter('id', $rootNode->getId())->getQuery()->getResult(); $treeArray = array(); foreach ($allTree as $tree) { $treeArray[] = $tree['id']; } $descendants = $this->registry->getRepository('Erichard\\DmsBundle\\Entity\\DocumentNodeClosure')->createQueryBuilder('c')->select('d.id')->innerJoin('c.descendant', 'd')->where('c.ancestor = :id')->setParameter('id', $data->getId())->getQuery()->getArrayResult(); $descendants = array_map(function ($descendant) { return $descendant['id']; }, $descendants); $tree = $repository->getNodesHierarchyQueryBuilder(null, false, array('childSort' => array('field' => 'name', 'dir' => 'asc')), true); if (count($descendants) > 0) { $tree->andWhere('node.id NOT IN (:node_id)')->setParameter('node_id', $descendants); } $realTreeArray = array(); foreach ($tree->getQuery()->getArrayResult() as $node) { if (in_array($node[0]['descendant']['id'], $treeArray)) { $realTreeArray[] = $node; } } $tree = $repository->buildTree($realTreeArray); // On met en place notre itérator en vue de retirer la profondeur de nos éléments $iterator = new \RecursiveIteratorIterator(new GedmoTreeIterator($tree), \RecursiveIteratorIterator::SELF_FIRST); $choices = array(); foreach ($iterator as $node) { $nodeName = $node['name']; if ($node['id'] == $rootNode->getId()) { $nodeName = $this->registry->getContainer()->get('translator')->trans('home', array(), 'ErichardDmsBundle'); } $depth = $iterator->getDepth(); $choices[$node['id']] = str_repeat(" ", $depth) . $nodeName; } $form->add($this->factory->createNamedBuilder('node', 'choice', $data->getParent(), array('label' => 'move_document', 'required' => true, 'choices' => $choices, 'auto_initialize' => false))->addModelTransformer(new NodeToIdTransformer($this->registry))->getForm()); }