public function newVersionAction($treeId, $versionId)
 {
     // build
     $return = $this->build($treeId, $versionId);
     //process
     $doctrine = $this->getDoctrine()->getManager();
     $newTreeVersion = new TreeVersion();
     $newTreeVersion->setTree($this->tree);
     $form = $this->createForm(new AdminTreeNewVersionType());
     $request = $this->getRequest();
     if ($request->getMethod() == 'POST') {
         $form->handleRequest($request);
         if ($form->isValid()) {
             $newTreeVersion->setTitleAdmin($form->get('title')->getData());
             $doctrine->persist($newTreeVersion);
             $copyNewVersionOfTree = new CopyNewVersionOfTree($doctrine, $this->treeVersion, $newTreeVersion);
             $copyNewVersionOfTree->go();
             $doctrine->flush();
             return $this->redirect($this->generateUrl('questionkey_admin_tree_version_show', array('treeId' => $this->tree->getPublicId(), 'versionId' => $newTreeVersion->getPublicId())));
         }
     }
     return $this->render('QuestionKeyBundle:AdminTreeVersionEdit:newVersion.html.twig', array('tree' => $this->tree, 'treeVersion' => $this->treeVersion, 'form' => $form->createView()));
 }
 function testCopyLibraryContent()
 {
     $nodeHasLibraryContentRepo = $this->em->getRepository('QuestionKeyBundle:NodeHasLibraryContent');
     $user = new User();
     $user->setEmail("*****@*****.**");
     $user->setUsername("test");
     $user->setPassword("ouhosu");
     $this->em->persist($user);
     $tree = new Tree();
     $tree->setTitleAdmin('Tree');
     $tree->setOwner($user);
     $tree->setPublicId('tree');
     $this->em->persist($tree);
     $treeVersionOld = new TreeVersion();
     $treeVersionOld->setTree($tree);
     $treeVersionOld->setPublicId('v1');
     $treeVersionOld->setTitleAdmin('v1');
     $treeVersionOld->setFeatureLibraryContent(true);
     $this->em->persist($treeVersionOld);
     $treeVersionNew = new TreeVersion();
     $treeVersionNew->setTree($tree);
     $treeVersionNew->setPublicId('v2');
     $treeVersionNew->setTitleAdmin('v2');
     $treeVersionNew->setFeatureLibraryContent(true);
     $this->em->persist($treeVersionNew);
     $nodeOld1 = new Node();
     $nodeOld1->setTreeVersion($treeVersionOld);
     $nodeOld1->setPublicId('start');
     $nodeOld1->setTitle('START HERE');
     $this->em->persist($nodeOld1);
     $libraryContentOld1 = new LibraryContent();
     $libraryContentOld1->setTitleAdmin('TEST');
     $libraryContentOld1->setBodyText('test1');
     $libraryContentOld1->setTreeVersion($treeVersionOld);
     $this->em->persist($libraryContentOld1);
     $libraryContentOld2 = new LibraryContent();
     $libraryContentOld2->setTitleAdmin('TEST');
     $libraryContentOld2->setBodyText('test2');
     $libraryContentOld2->setTreeVersion($treeVersionOld);
     $this->em->persist($libraryContentOld2);
     $this->em->flush();
     $this->em->getRepository('QuestionKeyBundle:NodeHasLibraryContent')->addLibraryContentToNode($libraryContentOld1, $nodeOld1);
     $this->em->getRepository('QuestionKeyBundle:NodeHasLibraryContent')->addLibraryContentToNode($libraryContentOld2, $nodeOld1);
     ##################### COPY
     $copyNewVersionOfTree = new CopyNewVersionOfTree($this->em, $treeVersionOld, $treeVersionNew);
     $copyNewVersionOfTree->go();
     #####################  TEST NODES DIRECTLY
     $nodes = $this->em->getRepository('QuestionKeyBundle:Node')->findBy(array('treeVersion' => $treeVersionNew), array('publicId' => 'ASC'));
     $this->assertEquals(1, count($nodes));
     $node = $nodes[0];
     $this->assertEquals($nodeOld1->getPublicId(), $node->getPublicId());
     $this->assertEquals($nodeOld1->getTitle(), $node->getTitle());
     $this->assertEquals($nodeOld1->getTitleAdmin(), $node->getTitleAdmin());
     $this->assertEquals($nodeOld1->getTitlePreviousAnswers(), $node->getTitlePreviousAnswers());
     #####################  TEST LIBRARY CONTENT DIRECTLY
     $libraryContents = $this->em->getRepository('QuestionKeyBundle:LibraryContent')->findBy(array('treeVersion' => $treeVersionNew), array('publicId' => 'ASC'));
     $this->assertEquals(2, count($libraryContents));
     $libraryContent = $libraryContents[0];
     $this->assertEquals($libraryContentOld1->getTitleAdmin(), $libraryContent->getTitleAdmin());
     $libraryContent = $libraryContents[1];
     $this->assertEquals($libraryContentOld2->getTitleAdmin(), $libraryContent->getTitleAdmin());
     #####################  TEST LIBRARY CONTENT LOADING OFF NODE, INC SORT ORDER
     $libraryContents = $this->em->getRepository('QuestionKeyBundle:LibraryContent')->findForNode($node);
     $this->assertEquals(2, count($libraryContents));
     $libraryContent = $libraryContents[0];
     $this->assertEquals($libraryContentOld1->getTitleAdmin(), $libraryContent->getTitleAdmin());
     $nodeHasLibraryContent = $nodeHasLibraryContentRepo->findOneBy(array('libraryContent' => $libraryContent));
     $this->assertNotNull($nodeHasLibraryContent);
     $this->assertEquals(0, $nodeHasLibraryContent->getSort());
     $libraryContent = $libraryContents[1];
     $this->assertEquals($libraryContentOld2->getTitleAdmin(), $libraryContent->getTitleAdmin());
     $nodeHasLibraryContent = $nodeHasLibraryContentRepo->findOneBy(array('libraryContent' => $libraryContent));
     $this->assertNotNull($nodeHasLibraryContent);
     $this->assertEquals(1, $nodeHasLibraryContent->getSort());
 }