Ejemplo n.º 1
0
 /**
  * @param User $user
  * @param PageAnimal $pageAnimal
  * @throws HistoryException
  * @throws ValidationException
  */
 public function commit(User $user, PageAnimal $pageAnimal)
 {
     /** @var PageAnimalBranch $pageAnimalBranch */
     $pageAnimalBranch = $this->pageAnimalBranchRepository->find($pageAnimal->getId());
     if ($pageAnimalBranch == null) {
         throw new HistoryException(HistoryException::BRANCHE_INCONNUE);
     }
     if ($user->getId() !== $pageAnimalBranch->getOwner()->getId()) {
         throw new HistoryException(HistoryException::DROIT_REFUSE);
     }
     /** @var PageAnimalCommit $clientHead */
     $clientHead = $this->pageAnimalCommitRepository->find($pageAnimal->getHead());
     if ($clientHead->getId() !== $pageAnimalBranch->getCommit()->getId()) {
         throw new HistoryException(HistoryException::NON_FAST_FORWARD);
     }
     if (empty($pageAnimal->getNom())) {
         throw new ValidationException(ValidationException::EMPTY_NOM);
     }
     if (empty($pageAnimal->getDateNaissance())) {
         throw new ValidationException(ValidationException::EMPTY_DATE_NAISSANCE);
     }
     $commit = new PageAnimalCommit($clientHead, $pageAnimal->getNom(), $pageAnimal->getDateNaissance(), $pageAnimal->getDescription(), $pageAnimal->getStatut(), $pageAnimal->getSexe(), $pageAnimal->getPhotos());
     $this->doctrine->persist($commit);
     $pageAnimalBranch->setCommit($commit);
     $this->doctrine->flush([$commit, $pageAnimalBranch]);
     $pageAnimal->setHead($commit->getId());
 }
Ejemplo n.º 2
0
 /**
  * @expectedException \AppBundle\Service\ValidationException
  * @expectedExceptionCode \AppBundle\Service\ValidationException::EMPTY_DATE_NAISSANCE
  */
 public function testCommit_dateNaissance_empty()
 {
     // Simulation d'une page animal en base de données
     $user = new User();
     $pageAnimalBranch = new PageAnimalBranch();
     $pageAnimalBranch->setOwner($user);
     $commit = new PageAnimalCommit(null, 'rodolf', $this->timeService->now(), null, PageAnimal::DISPONIBLE, PageAnimal::MALE, null);
     $commit->setId(1);
     $pageAnimalBranch->setCommit($commit);
     $this->pageAnimalBranchRepository->method('find')->willReturn($pageAnimalBranch);
     $this->pageAnimalCommitRepository->method('find')->with($commit->getId())->willReturn($commit);
     // Commit la page avec un nom vide
     $pageAnimal = $this->pageAnimalService->find($pageAnimalBranch->getId());
     $pageAnimal->setDateNaissance(null);
     $this->pageAnimalService->commit($user, $pageAnimal);
 }
Ejemplo n.º 3
0
 /**
  * @param User $user
  * @param PageEleveur $commitingPageEleveur
  * @return PageEleveur
  * @throws HistoryException
  */
 public function commit(User $user, PageEleveur $commitingPageEleveur)
 {
     /** @var PageEleveurCommit $clientHead */
     $clientHead = $this->pageEleveurCommitRepository->find($commitingPageEleveur->getHead());
     /** @var PageEleveurBranch $pageEleveurBranch */
     $pageEleveurBranch = $this->pageEleveurBranchRepository->find($commitingPageEleveur->getId());
     if (!$pageEleveurBranch || !$clientHead) {
         throw new HistoryException(HistoryException::BRANCHE_INCONNUE);
     }
     if ($pageEleveurBranch->getOwner()->getId() !== $user->getId()) {
         throw new HistoryException(HistoryException::DROIT_REFUSE);
     }
     if ($clientHead->getId() !== $pageEleveurBranch->getCommit()->getId()) {
         throw new HistoryException(HistoryException::NON_FAST_FORWARD);
     }
     $managedActialites = [];
     if ($commitingPageEleveur->getActualites() !== null) {
         foreach ($commitingPageEleveur->getActualites() as $actualite) {
             if ($actualite->hashCode() !== $actualite->getId()) {
                 // l'actualité a été modifiée, on doit persister la nouvelle version
                 $this->doctrine->persist($actualite);
             } else {
                 // L'actualité n'a pas changé
                 $actualite = $this->doctrine->merge($actualite);
             }
             array_push($managedActialites, $actualite);
         }
     }
     $newCommit = new PageEleveurCommit($clientHead, $commitingPageEleveur->getNom(), $commitingPageEleveur->getDescription(), $commitingPageEleveur->getEspeces(), $commitingPageEleveur->getRaces(), $commitingPageEleveur->getLieu(), $commitingPageEleveur->getAnimaux() !== null ? array_map(function (PageAnimal $pageAnimal) use($user) {
         if ($pageAnimal->getOwner()->getId() !== $user->getId()) {
             throw new HistoryException(HistoryException::DROIT_REFUSE);
         }
         return $this->pageAnimalBranchRepository->find($pageAnimal->getId());
     }, $commitingPageEleveur->getAnimaux()) : [], $managedActialites);
     $this->doctrine->persist($newCommit);
     $pageEleveurBranch->setCommit($newCommit);
     $this->doctrine->flush([$newCommit, $pageEleveurBranch]);
     $pageEleveur = $this->fromBranch($this->findAtCommit($commitingPageEleveur->getId(), $newCommit->getId()));
     return $pageEleveur;
 }