/**
  * @Route(
  *      "/{documentId}/add/comments/{userId}/{dropzoneId}/{correctionId}",
  *      name="innova_collecticiel_add_comment",
  *      requirements={"documentId" = "\d+", "userId" = "\d+", "dropzoneId" = "\d+", "correctionId" = "\d+"}
  * )
  * @ParamConverter("document", class="InnovaCollecticielBundle:Document", options={"id" = "documentId"})
  * @ParamConverter("user",class="ClarolineCoreBundle:User",options={"id" = "userId"})
  * @ParamConverter("dropzone", class="InnovaCollecticielBundle:Dropzone", options={"id" = "dropzoneId"})
  * @ParamConverter("correction", class="InnovaCollecticielBundle:Correction", options={"id" = "correctionId"})
  * @Method("POST")
  * @Template()
  */
 public function AddCommentsInnovaAction(Document $document, User $user, Dropzone $dropzone, Correction $correction)
 {
     $em = $this->getDoctrine()->getManager();
     // Valorisation du commentaire
     $comment = new Comment();
     $comment->setDocument($document);
     $comment->setUser($user);
     $form = $this->get('form.factory')->createBuilder(new CommentType(), $comment)->getForm();
     // Récupération de la saisie du commentaire
     $request = $this->get('request');
     if ($request->isMethod('POST')) {
         $form->handleRequest($request);
         if ($form->isValid()) {
             $em = $this->getDoctrine()->getManager();
             // Insertion en base du commentaire
             $em->persist($comment);
             $em->flush();
         }
     }
     // Ajouter la création du log de la création du commentaire. InnovaERV.
     $unitOfWork = $em->getUnitOfWork();
     $unitOfWork->computeChangeSets();
     $dropzoneChangeSet = $unitOfWork->getEntityChangeSet($dropzone);
     $event = new LogCommentCreateEvent($dropzone, $dropzoneChangeSet, $comment);
     $this->dispatch($event);
     // Redirection vers la page des commentaires. InnovaERV.
     return $this->redirect($this->generateUrl('innova_collecticiel_drops_detail_comment', array('resourceId' => $dropzone->getId(), 'state' => 'edit', 'correctionId' => $correction->getId(), 'documentId' => $document->getId())));
 }
 /**
  * @Route(
  *      "/add/comments/{userId}/{dropzoneId}",
  *      name="innova_collecticiel_add_comment_for_docs",
  *      requirements={"userId" = "\d+", "dropzoneId" = "\d+"}
  * )
  * @ParamConverter("user",class="ClarolineCoreBundle:User",options={"id" = "userId"})
  * @ParamConverter("dropzone", class="InnovaCollecticielBundle:Dropzone", options={"id" = "dropzoneId"})
  * @Method("POST")
  * @Template()
  */
 public function addCommentForDocsInnovaAction(User $user, Dropzone $dropzone)
 {
     // Saisie des commentaires à la volée.
     // Récupération de l'USER
     $user = $this->get('security.context')->getToken()->getUser();
     $em = $this->getDoctrine()->getManager();
     $comment = new Comment();
     $form = $this->get('form.factory')->createBuilder(new CommentType(), $comment)->getForm();
     // Récupération de la saisie du commentaire
     $request = $this->get('request');
     if ($request->isMethod('POST')) {
         $form->handleRequest($request);
         if ($form->isValid()) {
             // Récupération du commentaire
             $commentText = $comment->getCommentText();
             // Récupération des documents sur lesquels porte le commentaire saisi
             $docs = $this->getRequest()->request->get('docs');
             // Récupération des ID des documents
             $explodeDocIdS = explode('|', $docs);
             // Parcours du tableau des documents
             foreach ($explodeDocIdS as $documentId) {
                 // Je ne prends pas le dernier élément du tableau
                 if (is_numeric($documentId)) {
                     // Création du nouveau commentaire
                     $document = $this->getDoctrine()->getRepository('InnovaCollecticielBundle:Document')->find($documentId);
                     // Valorisation du commentaire
                     $comment = new Comment();
                     $comment->setDocument($document);
                     $comment->setCommentText($commentText);
                     $comment->setUser($user);
                     // Insertion en base du commentaire
                     $em->persist($comment);
                     // Envoi notification. InnovaERV
                     $usersIds = [];
                     // Ici, on récupère le créateur du collecticiel = l'admin
                     if ($document->getType() === 'url') {
                         $userCreator = $document->getDrop()->getDropzone()->getResourceNode()->getCreator()->getId();
                     } else {
                         $userCreator = $document->getResourceNode()->getCreator()->getId();
                     }
                     // Ici, on récupère celui qui vient de déposer le nouveau document
                     $userDropDocument = $document->getDrop()->getUser()->getId();
                     $userSenderDocument = $document->getSender()->getId();
                     if ($userCreator === $userSenderDocument) {
                         // Ici avertir l'étudiant qui a travaillé sur ce collecticiel
                         $usersIds[] = $userDropDocument;
                     } else {
                         // Ici avertir celui a qui créé le collecticiel
                         $usersIds[] = $userCreator;
                     }
                     $event = new LogDropzoneAddCommentEvent($dropzone, $dropzone->getManualState(), $usersIds, $comment);
                     $this->get('event_dispatcher')->dispatch('log', $event);
                 }
             }
             $em->flush();
         }
     }
     // Ajouter la création du log de la création du commentaire. InnovaERV.
     $unitOfWork = $em->getUnitOfWork();
     $unitOfWork->computeChangeSets();
     $dropzoneChangeSet = $unitOfWork->getEntityChangeSet($dropzone);
     $event = new LogCommentCreateEvent($dropzone, $dropzoneChangeSet, $comment);
     $this->dispatch($event);
     // Redirection vers les demandes adressées. InnovaERV.
     return $this->redirect($this->generateUrl('innova_collecticiel_drops_awaiting', ['resourceId' => $dropzone->getId()]));
 }
 /**
  * @param Dropzone $dropzone
  * @param mixed    $dropzoneChangeSet
  * @param comment  $comment
  */
 public function __construct(Dropzone $dropzone, $dropzoneChangeSet, Comment $comment)
 {
     $details = array('dropzone' => array('id' => $dropzone->getId(), 'changeSet' => $dropzoneChangeSet), 'comment' => array('id' => $comment->getId(), 'document' => $comment->getDocument()->getId(), 'user' => $comment->getUser()));
     parent::__construct($dropzone->getResourceNode(), $details);
 }
 /**
  * @Route(
  *      "/add/comments/{userId}/{dropzoneId}",
  *      name="innova_collecticiel_add_comment_for_docs",
  *      requirements={"userId" = "\d+", "dropzoneId" = "\d+"}
  * )
  * @ParamConverter("user",class="ClarolineCoreBundle:User",options={"id" = "userId"})
  * @ParamConverter("dropzone", class="InnovaCollecticielBundle:Dropzone", options={"id" = "dropzoneId"})
  * @Method("POST")
  * @Template()
  */
 public function AddCommentForDocsInnovaAction(User $user, Dropzone $dropzone)
 {
     // Récupération de l'USER
     $user = $this->get('security.context')->getToken()->getUser();
     $em = $this->getDoctrine()->getManager();
     $comment = new Comment();
     $form = $this->get('form.factory')->createBuilder(new CommentType(), $comment)->getForm();
     // Récupération de la saisie du commentaire
     $request = $this->get('request');
     if ($request->isMethod('POST')) {
         $form->handleRequest($request);
         if ($form->isValid()) {
             $dropzoneManager = $this->get('innova.manager.dropzone_manager');
             // Récupération du commentaire
             $commentText = $comment->getCommentText();
             // Récupération des documents sur lesquels porte le commentaire saisi
             $docs = $this->getRequest()->request->get('docs');
             // Récupération des ID des documents
             $explodeDocIdS = explode("|", $docs);
             // Parcours du tableau des documents
             foreach ($explodeDocIdS as $documentId) {
                 // Je ne prends pas le dernier élément du tableau
                 if (is_numeric($documentId)) {
                     // Création du nouveau commentaire
                     $document = $this->getDoctrine()->getRepository('InnovaCollecticielBundle:Document')->find($documentId);
                     // Valorisation du commentaire
                     $comment = new Comment();
                     $comment->setDocument($document);
                     $comment->setCommentText($commentText);
                     $comment->setUser($user);
                     //                        var_dump($documentId);
                     // Insertion en base du commentaire
                     $em->persist($comment);
                 }
             }
             $em->flush();
             // Envoi notification. InnovaERV
             $usersIds = $dropzoneManager->getDropzoneUsersIds($dropzone);
             $usersIds = array();
             $usersIds[] = $dropzone->getResourceNode()->getCreator()->getId();
             $usersIds[] = $document->getSender()->getId();
             $event = new LogDropzoneAddCommentEvent($dropzone, $dropzone->getManualState(), $usersIds);
             $this->get('event_dispatcher')->dispatch('log', $event);
         }
     }
     // Ajouter la création du log de la création du commentaire. InnovaERV.
     $unitOfWork = $em->getUnitOfWork();
     $unitOfWork->computeChangeSets();
     $dropzoneChangeSet = $unitOfWork->getEntityChangeSet($dropzone);
     $event = new LogCommentCreateEvent($dropzone, $dropzoneChangeSet, $comment);
     $this->dispatch($event);
     // Redirection vers les demandes adressées. InnovaERV.
     return $this->redirect($this->generateUrl('innova_collecticiel_drops_awaiting', array('resourceId' => $dropzone->getId())));
 }