/** * @param \DLigo\Animaltool\Domain\Model\Animal $animal * @param \DLigo\Animaltool\Domain\Model\Owner $owner * @param array<\DLigo\Animaltool\Domain\Model\Bread> $bread * @param string $tag * @param array $externals * @param array $treatments * @Flow\Validate (argumentName="$treatments", type="\DLigo\Animaltool\Validation\Validator\TreatmentValidator",options={"isArray"=true} ) * @Flow\Validate (argumentName="$animal.photo", type="NotEmpty") * @return void */ public function updateAction(Animal $animal, $owner, $bread, $tag, $externals = array(), $treatments = array()) { if ($animal->getIsPrivate()) { $animal->setRFID($tag); $oldowner = $animal->getOwner(); if ($oldowner) { foreach (array('Name', 'FirstName', 'IDNumber', 'CNP', 'Phone', 'Street', 'HouseNumber', 'ZipCode', 'City', 'Region', 'Country', 'PassId', 'Comment') as $field) { $get = 'get' . $field; $set = 'set' . $field; $oldowner->{$set}($owner->{$get}()); } } else { $animal->setOwner($owner); } } else { $animal->setEarTag($tag); $animal->setOwner(null); } foreach ($externals as $eid => $eArray) { $external = $this->externalRepository->findByIdentifier($eid); foreach (array('name', 'firstName', 'lastName', 'externalType', 'isPermanent', 'phone', 'street', 'houseNumber', 'zipCode', 'city', 'region', 'country', 'comment') as $field) { $set = 'set' . ucfirst($field); $external->{$set}($eArray[$field]); } if ($external->getExternalType() == \DLigo\Animaltool\Domain\Model\External::CLINIC) { $external->setIsPermanent(false); } if ($external->getExternalType() == \DLigo\Animaltool\Domain\Model\External::ADOPTION) { $external->setIsPermanent(true); } if ($external->getIsPermanent()) { $external->stopExternal(); } else { $open = true; } $this->externalRepository->update($external); } foreach ($treatments as $trid => $treatArray) { $treatment = $this->treatmentRepository->findByIdentifier($trid); $treatment->setComment($treatArray['comment']); $doctor = $this->userRepository->findByIdentifier(isset($treatArray['doctor']['__identity']) ? $treatArray['doctor']['__identity'] : $treatArray['doctor']); $treatment->setDoctor($doctor); $therapies = new \Doctrine\Common\Collections\ArrayCollection(); $extras = new \Doctrine\Common\Collections\ArrayCollection(); if (is_array($treatArray['therapies'])) { foreach ($treatArray['therapies'] as $thid) { $therapy = $this->therapyRepository->findByIdentifier($thid); if ($therapy->getHasExtraData()) { $extra = $this->treatmentExtraRepository->findByTherapyAndTreatment($thid, $treatment)->getFirst(); if (!$extra) { $extra = new \DLigo\Animaltool\Domain\Model\TreatmentExtra(); $extra->setTreatment($treatment); $extra->setTherapy($therapy); } $extra->setValue($treatArray['treatmentExtra'][$thid]); unset($treatArray['treatmentExtra'][$thid]); $extras->add($extra); } $therapies->add($therapy); } } $treatment->setTherapies($therapies); $treatment->setTreatmentExtras($extras); $this->treatmentRepository->update($treatment); if (isset($treatArray['treatmentExtra']) && is_array($treatArray['treatmentExtra'])) { foreach ($treatArray['treatmentExtra'] as $thid => $value) { $extra = $this->treatmentExtraRepository->findByTherapyAndTreatment($thid, $treatment)->getFirst(); if ($extra != null) { $this->treatmentExtraRepository->remove($extra); } } } } $speciesid = $this->persistenceManager->getIdentifierByObject($animal->getSpecies()); /* $breadid=isset($bread[$speciesid]['__identity'])?$bread[$speciesid]['__identity']:$bread[$speciesid]; $animal->setBread($this->breadRepository->findByIdentifier($breadid)); */ $animal->setBread($bread[$speciesid]); $this->animalRepository->update($animal); $this->addFlashMessage('Updated the animal.', '', \TYPO3\Flow\Error\Message::SEVERITY_OK, array(), 'flash.animal.update'); $this->redirect('index'); }