コード例 #1
0
 /**
  * @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];
 }