denyAccessUnlessGranted('read', $part); return $this->render( 'Parts/info/show_part_info.html.twig', [ 'part' => $part, 'attachment_helper' => $attachmentHelper, 'pricedetail_helper' => $pricedetailHelper, 'pictures' => $previewGenerator->getPreviewAttachments($part) ] ); } /** * @Route("/{id}/edit", name="part_edit") * * @param Part $part * * @param Request $request * @param EntityManagerInterface $em * @return \Symfony\Component\HttpFoundation\Response */ public function edit(Part $part, Request $request, EntityManagerInterface $em, TranslatorInterface $translator, AttachmentManager $attachmentHelper, AttachmentSubmitHandler $attachmentSubmitHandler) { $this->denyAccessUnlessGranted('edit', $part); $form = $this->createForm(PartBaseType::class, $part); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { //Upload passed files $attachments = $form['attachments']; foreach ($attachments as $attachment) { /** @var $attachment FormInterface */ $options = [ 'secure_attachment' => $attachment['secureFile']->getData(), 'download_url' => $attachment['downloadURL']->getData() ]; try { $attachmentSubmitHandler->handleFormSubmit($attachment->getData(), $attachment['file']->getData(), $options); } catch (AttachmentDownloadException $ex) { $this->addFlash( 'error', $translator->trans('attachment.download_failed') . ' ' . $ex->getMessage() ); } } $em->persist($part); $em->flush(); $this->addFlash('info', $translator->trans('part.edited_flash')); //Reload form, so the SIUnitType entries use the new part unit $form = $this->createForm(PartBaseType::class, $part); } elseif ($form->isSubmitted() && ! $form->isValid()) { $this->addFlash('error', $translator->trans('part.edited_flash.invalid')); } return $this->render('Parts/edit/edit_part_info.html.twig', [ 'part' => $part, 'form' => $form->createView(), 'attachment_helper' => $attachmentHelper, ]); } /** * @Route("/{id}/delete", name="part_delete", methods={"DELETE"}) * @param Request $request * @param Part $part * @return \Symfony\Component\HttpFoundation\RedirectResponse */ public function delete(Request $request, Part $part) { $this->denyAccessUnlessGranted('delete', $part); if ($this->isCsrfTokenValid('delete' . $part->getId(), $request->request->get('_token'))) { $entityManager = $this->getDoctrine()->getManager(); //Remove part $entityManager->remove($part); //Flush changes $entityManager->flush(); $this->addFlash('success', 'part.deleted'); } return $this->redirectToRoute('homepage'); } /** * @Route("/new", name="part_new") * * @param Request $request * @param EntityManagerInterface $em * @param TranslatorInterface $translator * @return \Symfony\Component\HttpFoundation\Response */ public function new(Request $request, EntityManagerInterface $em, TranslatorInterface $translator, AttachmentManager $attachmentHelper, AttachmentSubmitHandler $attachmentSubmitHandler) { $new_part = new Part(); $this->denyAccessUnlessGranted('create', $new_part); $cid = $request->get('cid', 1); $category = $em->find(Category::class, $cid); $new_part->setCategory($category); $form = $this->createForm(PartBaseType::class, $new_part); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { //Upload passed files $attachments = $form['attachments']; foreach ($attachments as $attachment) { /** @var $attachment FormInterface */ $options = [ 'secure_attachment' => $attachment['secureFile']->getData(), 'download_url' => $attachment['downloadURL']->getData() ]; try { $attachmentSubmitHandler->handleFormSubmit($attachment->getData(), $attachment['file']->getData(), $options); } catch (AttachmentDownloadException $ex) { $this->addFlash( 'error', $translator->trans('attachment.download_failed') . ' ' . $ex->getMessage() ); } } $em->persist($new_part); $em->flush(); $this->addFlash('success', $translator->trans('part.created_flash')); return $this->redirectToRoute('part_edit', ['id' => $new_part->getID()]); } if ($form->isSubmitted() && ! $form->isValid()) { $this->addFlash('error', $translator->trans('part.created_flash.invalid')); } return $this->render('Parts/edit/new_part.html.twig', [ 'part' => $new_part, 'form' => $form->createView(), 'attachment_helper' => $attachmentHelper ]); } /** * @Route("/{id}/clone", name="part_clone") * @param Part $part * @param Request $request * @param EntityManagerInterface $em * @param TranslatorInterface $translator * @return \Symfony\Component\HttpFoundation\RedirectResponse|\Symfony\Component\HttpFoundation\Response */ public function clone(Part $part, Request $request, EntityManagerInterface $em, TranslatorInterface $translator) { /** @var Part $new_part */ $new_part = clone $part; $this->denyAccessUnlessGranted('create', $new_part); $form = $this->createForm(PartBaseType::class, $new_part); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { $em->persist($new_part); $em->flush(); $this->addFlash('success', $translator->trans('part.created_flash')); return $this->redirectToRoute('part_edit', ['id' => $new_part->getID()]); } return $this->render('Parts/edit/new_part.html.twig', [ 'part' => $new_part, 'form' => $form->createView(), ]); } }