/** * @Route( * "/{resourceId}/drop", * name="icap_dropzone_drop", * requirements={"resourceId" = "\d+"} * ) * @ParamConverter("dropzone", class="IcapDropzoneBundle:Dropzone", options={"id" = "resourceId"}) * @ParamConverter("user", options={ * "authenticatedUser" = true, * "messageEnabled" = true, * "messageTranslationKey" = "Participate in an evaluation requires authentication. Please login.", * "messageTranslationDomain" = "icap_dropzone" * }) * @Template() */ public function dropAction(Request $request, Dropzone $dropzone, $user) { $this->get('icap.manager.dropzone_voter')->isAllowToOpen($dropzone); $em = $this->getDoctrine()->getManager(); $dropRepo = $em->getRepository('IcapDropzoneBundle:Drop'); if ($dropRepo->findOneBy(['dropzone' => $dropzone, 'user' => $user, 'finished' => true]) !== null) { $request->getSession()->getFlashBag()->add('error', $this->get('translator')->trans('You ve already made your copy for this review', [], 'icap_dropzone')); return $this->redirect($this->generateUrl('icap_dropzone_open', ['resourceId' => $dropzone->getId()])); } $notFinishedDrop = $dropRepo->findOneBy(['dropzone' => $dropzone, 'user' => $user, 'finished' => false]); if ($notFinishedDrop === null) { $notFinishedDrop = new Drop(); $number = $dropRepo->getLastNumber($dropzone) + 1; $notFinishedDrop->setNumber($number); $notFinishedDrop->setUser($user); $notFinishedDrop->setDropzone($dropzone); $notFinishedDrop->setFinished(false); $em->persist($notFinishedDrop); $em->flush(); $em->refresh($notFinishedDrop); $event = new LogDropStartEvent($dropzone, $notFinishedDrop); $this->dispatch($event); } $form = $this->createForm(new DropType(), $notFinishedDrop); $form_url = $this->createForm(new DocumentType(), null, ['documentType' => 'url']); $form_file = $this->createForm(new DocumentType(), null, ['documentType' => 'file']); $form_resource = $this->createForm(new DocumentType(), null, ['documentType' => 'resource']); $form_text = $this->createForm(new DocumentType(), null, ['documentType' => 'text']); $drop = $notFinishedDrop; if ($request->isMethod('POST')) { $form->handleRequest($request); if (count($notFinishedDrop->getDocuments()) === 0) { $form->addError(new FormError('Add at least one document')); } if ($form->isValid()) { // change the folder name to take the datetime of the drop event $dropDate = new \DateTime(); $date_format = $this->get('translator')->trans('date_form_datepicker_php', [], 'platform'); $rm = $this->get('claroline.manager.resource_manager'); $node = $rm->getById($notFinishedDrop->getHiddenDirectory()->getId()); // set the date time of the drop. $folderName = $node->getName(); $rm->rename($node, $folderName . ' ' . $dropDate->format($date_format . ' ' . 'H:i:s')); //()); //end setting datetime. $notFinishedDrop->setFinished(true); $em = $this->getDoctrine()->getManager(); $em->persist($notFinishedDrop); $em->flush(); $rm = $this->get('claroline.manager.role_manager'); $event = new LogDropEndEvent($dropzone, $notFinishedDrop, $rm); $this->dispatch($event); $request->getSession()->getFlashBag()->add('success', $this->get('translator')->trans('Your copy has been saved', [], 'icap_dropzone')); return $this->redirect($this->generateUrl('icap_dropzone_open', ['resourceId' => $dropzone->getId()])); } } $allowedTypes = []; if ($dropzone->getAllowWorkspaceResource()) { $allowedTypes[] = 'resource'; } if ($dropzone->getAllowUpload()) { $allowedTypes[] = 'file'; } if ($dropzone->getAllowUrl()) { $allowedTypes[] = 'url'; } if ($dropzone->getAllowRichText()) { $allowedTypes[] = 'text'; } $resourceTypes = $this->getDoctrine()->getRepository('ClarolineCoreBundle:Resource\\ResourceType')->findAll(); $dropzoneManager = $this->get('icap.manager.dropzone_manager'); $dropzoneProgress = $dropzoneManager->getDropzoneProgressByUser($dropzone, $user); return ['workspace' => $dropzone->getResourceNode()->getWorkspace(), '_resource' => $dropzone, 'dropzone' => $dropzone, 'drop' => $drop, 'form' => $form->createView(), 'form_url' => $form_url->createView(), 'form_file' => $form_file->createView(), 'form_resource' => $form_resource->createView(), 'form_text' => $form_text->createView(), 'allowedTypes' => $allowedTypes, 'resourceTypes' => $resourceTypes, 'dropzoneProgress' => $dropzoneProgress]; }