/** * The form submission is working but I had to do some weird things to make it works. * * @EXT\Route( * "/subject/create/{category}", * name="claro_forum_create_subject" * ) * @EXT\ParamConverter("authenticatedUser", options={"authenticatedUser" = true}) * @EXT\Template("ClarolineForumBundle:Forum:subjectForm.html.twig") * * @param Category $category * * @throws \Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException * @throws \Exception * * @return array|\Symfony\Component\HttpFoundation\RedirectResponse */ public function createSubjectAction(Category $category) { $forum = $category->getForum(); $collection = new ResourceCollection(array($forum->getResourceNode())); if (!$this->authorization->isGranted('post', $collection)) { throw new AccessDeniedException($collection->getErrorsForDisplay()); } $form = $this->get('form.factory')->create(new SubjectType(), new Subject()); $form->handleRequest($this->get('request')); if ($form->isValid()) { $user = $this->tokenStorage->getToken()->getUser(); $subject = $form->getData(); $subject->setCreator($user); $subject->setAuthor($user->getFirstName() . ' ' . $user->getLastName()); //instantiation of the new resources $subject->setCategory($category); $this->forumManager->createSubject($subject); $dataMessage = $form->get('message')->getData(); if ($dataMessage['content'] !== null) { $message = new Message(); $message->setContent($dataMessage['content']); $message->setCreator($user); $message->setAuthor($user->getFirstName() . ' ' . $user->getLastName()); $message->setSubject($subject); $this->forumManager->createMessage($message, $subject); return new RedirectResponse($this->generateUrl('claro_forum_subjects', array('category' => $category->getId()))); } } $form->get('message')->addError(new FormError($this->get('translator')->trans('field_content_required', array(), 'forum'))); return array('form' => $form->createView(), '_resource' => $forum, 'workspace' => $forum->getResourceNode()->getWorkspace()); }
/** * @param \Claroline\ForumBundle\Entity\Message $message * @param \Claroline\ForumBundle\Entity\Subject $subject * * @throws \Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException * * @return \Claroline\ForumBundle\Entity\Message */ public function createMessage(Message $message, Subject $subject) { $forum = $subject->getCategory()->getForum(); $collection = new ResourceCollection(array($forum->getResourceNode())); if (!$this->authorization->isGranted('post', $collection)) { throw new AccessDeniedHttpException($collection->getErrorsForDisplay()); } $user = $this->tokenStorage->getToken()->getUser(); $message->setCreator($user); $message->setAuthor($user->getFirstName() . ' ' . $user->getLastName()); $message->setSubject($subject); $this->om->persist($message); $this->om->flush(); $this->dispatch(new CreateMessageEvent($message)); $this->sendMessageNotification($message, $message->getCreator()); return $message; }
public function import(array $data) { $forum = new Forum(); $repo = $this->om->getRepository('ClarolineCoreBundle:User'); if (isset($data['data'])) { foreach ($data['data'] as $category) { $entityCategory = new Category(); $entityCategory->setForum($forum); $entityCategory->setName($category['category']['name']); foreach ($category['category']['subjects'] as $subject) { $subjectEntity = new Subject(); $subjectEntity->setTitle($subject['subject']['name']); $creator = null; if ($subject['subject']['creator'] !== null) { $creator = $repo->findOneByUsername($subject['subject']['creator']); } if ($creator === null) { $creator = $this->container->get('security.context')->getToken()->getUser(); } $subjectEntity->setCreator($creator); $subjectEntity->setCategory($entityCategory); foreach ($subject['subject']['messages'] as $message) { $messageEntity = new Message(); $content = file_get_contents($this->getRootPath() . DIRECTORY_SEPARATOR . $message['message']['path']); $messageEntity->setContent($content); $creator = null; if ($message['message']['creator'] !== null) { $creator = $repo->findOneByUsername($message['message']['creator']); } if ($creator === null) { $creator = $this->container->get('security.context')->getToken()->getUser(); } $messageEntity->setCreator($creator); $messageEntity->setSubject($subjectEntity); $messageEntity->setAuthor($message['message']['author']); $this->om->persist($messageEntity); } $this->om->persist($subjectEntity); } $this->om->persist($entityCategory); } } $this->om->persist($forum); return $forum; }