/**
  * Deep magic goes here.
  * Gets a subject with some of its last messages datas.
  *
  * @param ResourceInstance $forum
  *
  * @return type
  */
 public function findSubjects(Category $category, $getQuery = false)
 {
     $dql = "\n            SELECT s.id as id,\n            COUNT(m_count.id) AS count_messages,\n            MAX(m.creationDate) AS last_message_created,\n            s.id as subjectId,\n            s.title as title,\n            s.isSticked as isSticked,\n            s.author as subject_author,\n            subjectCreator.lastName as subject_creator_lastname,\n            subjectCreator.firstName as subject_creator_firstname,\n            subjectCreator.id as subject_creator_id,\n            lastUser.lastName as last_message_creator_lastname,\n            lastUser.firstName as last_message_creator_firstname,\n            s.creationDate as subject_created,\n            s.isClosed as is_closed\n            FROM Claroline\\ForumBundle\\Entity\\Subject s\n            JOIN s.messages m_count\n            JOIN s.creator subjectCreator\n            JOIN s.category category\n            JOIN s.messages m\n            JOIN m.creator lastUser WITH lastUser.id =\n                (\n                    SELECT lcu.id FROM Claroline\\ForumBundle\\Entity\\Message m2\n                    JOIN m2.subject s2\n                    JOIN m2.creator lcu\n                    JOIN s2.category c2\n                    WHERE NOT EXISTS\n                    (\n                        SELECT m3 FROM Claroline\\ForumBundle\\Entity\\Message m3\n                        JOIN m3.subject s3\n                        WHERE s2.id = s3.id\n                        AND m2.id < m3.id\n                    )\n                    and c2.id = :categoryId\n                    and m2.id = m.id\n                )\n            WHERE category.id = :categoryId\n            GROUP BY s.id, subjectCreator.lastName, subjectCreator.firstName, lastUser.lastName, lastUser.firstName\n            ORDER BY isSticked DESC, last_message_created DESC\n        ";
     $query = $this->_em->createQuery($dql);
     $query->setParameter('categoryId', $category->getId());
     return $getQuery ? $query : $query->getResult();
 }
示例#2
0
 public function postUpdate()
 {
     $em = $this->container->get('doctrine.orm.entity_manager');
     $process = false;
     if (in_array('claro_forum_subject_temp', $this->conn->getSchemaManager()->listTableNames())) {
         $columns = $this->conn->getSchemaManager()->listTableColumns('claro_forum_subject_temp');
         foreach ($columns as $column) {
             if ($column->getName() === 'forum_id') {
                 $process = true;
                 break;
             }
         }
     }
     if ($process) {
         $this->log('restoring the subjects...');
         $forums = $em->getRepository('ClarolineForumBundle:Forum')->findAll();
         $sql = 'SELECT * FROM claro_forum_subject_temp WHERE forum_id = :forumId';
         $stmt = $this->conn->prepare($sql);
         foreach ($forums as $forum) {
             $category = new Category();
             $category->setName($forum->getResourceNode()->getName());
             $category->setForum($forum);
             $em->persist($category);
             $em->flush();
             $stmt->bindValue('forumId', $forum->getId());
             $stmt->execute();
             foreach ($stmt->fetchAll() as $rowsSubject) {
                 $this->conn->query("INSERT INTO claro_forum_subject VALUES (\n                        {$rowsSubject['id']},\n                        {$category->getId()},\n                        {$rowsSubject['user_id']},\n                        {$this->conn->quote($rowsSubject['title'])},\n                        '{$rowsSubject['created']}',\n                        '{$rowsSubject['updated']}',\n                        false\n                    )");
             }
         }
         $this->log('restoring the messages...');
         $this->conn->query('INSERT IGNORE INTO claro_forum_message SELECT * FROM claro_forum_message_temp');
         $this->conn->query('DROP TABLE claro_forum_message_temp');
         $this->conn->query('DROP TABLE claro_forum_subject_temp');
         $this->conn->query('DROP TABLE claro_forum_options');
     } else {
         $this->log('categories already added');
     }
     $widget = $em->getRepository('ClarolineCoreBundle:Widget\\Widget')->findBy(array('name' => 'claroline_forum_widget'));
     if (!$widget) {
         $this->log('adding the forum widget...');
         $plugin = $em->getRepository('ClarolineCoreBundle:Plugin')->findOneBy(array('vendorName' => 'Claroline', 'bundleName' => 'ForumBundle'));
         $widget = new Widget();
         $widget->setName('claroline_forum_widget');
         $widget->setDisplayableInDesktop(true);
         $widget->setDisplayableInWorkspace(true);
         $widget->setConfigurable(false);
         $widget->setExportable(false);
         $widget->setIcon('none');
         $widget->setPlugin($plugin);
         $em->persist($widget);
         $plugin->setHasOptions(true);
         $em->persist($widget);
         $em->flush();
     } else {
         $this->log('forum widget already added');
     }
 }
示例#3
0
 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;
 }
 /**
  * @param \Claroline\ForumBundle\Entity\Category $category
  */
 public function __construct(Category $category)
 {
     $details = array('category' => array('id' => $category->getId()), 'forum' => array('id' => $category->getForum()->getId()));
     parent::__construct($category->getForum()->getResourceNode(), $details);
 }
示例#5
0
 public function copy(Forum $forum)
 {
     $newForum = new Forum();
     $forum->setName($forum->getName());
     $oldCategories = $forum->getCategories();
     $this->om->persist($newForum);
     foreach ($oldCategories as $oldCategory) {
         $newCategory = new Category();
         $newCategory->setName($oldCategory->getName());
         $newCategory->setForum($newForum);
         $newCategory->setCreationDate($oldCategory->getCreationDate());
         $newCategory->setModificationDate($oldCategory->getModificationDate());
         $oldSubjects = $oldCategory->getSubjects();
         foreach ($oldSubjects as $oldSubject) {
             $newSubject = new Subject();
             $newSubject->setTitle($oldSubject->getTitle());
             $newSubject->setCreator($oldSubject->getCreator());
             $newSubject->setCategory($newCategory);
             $newSubject->setCreationDate($oldSubject->getCreationDate());
             $newSubject->setModificationDate($oldSubject->getModificationDate());
             $newSubject->setIsSticked($oldSubject->isSticked());
             $oldMessages = $oldSubject->getMessages();
             foreach ($oldMessages as $oldMessage) {
                 $newMessage = new Message();
                 $newMessage->setSubject($newSubject);
                 $newMessage->setCreator($oldMessage->getCreator());
                 $newMessage->setContent($oldMessage->getContent());
                 $newMessage->setCreationDate($oldMessage->getCreationDate());
                 $newMessage->setModificationDate($oldMessage->getModificationDate());
                 $this->om->persist($newMessage);
             }
             $this->om->persist($newSubject);
         }
         $this->om->persist($newCategory);
     }
     return $newForum;
 }
 /**
  * @param \Claroline\ForumBundle\Entity\Category $category
  * @param string                                 $oldName
  * @param string                                 $newName
  */
 public function __construct(Category $category, $oldName, $newName)
 {
     $details = array('category' => array('id' => $category->getId()), 'forum' => array('id' => $category->getForum()->getId()), 'oldName' => $oldName, 'newName' => $newName);
     parent::__construct($category->getForum()->getResourceNode(), $details);
 }
示例#7
0
 public function setCategory(Category $category)
 {
     $this->category = $category;
     $category->addSubject($this);
 }
 /**
  * @EXT\Route(
  *     "/subject/{subject}/move/{newCategory}",
  *     name="claro_subject_move",
  *     options={"expose"=true}
  * )
  * @EXT\Method("GET")
  *
  * @param Subject  $subject
  * @param Category $newCategory
  */
 public function moveSubjectAction(Subject $subject, Category $newCategory)
 {
     $forum = $newCategory->getForum();
     $this->checkAccess($forum);
     $this->forumManager->moveSubject($subject, $newCategory);
     return new RedirectResponse($this->generateUrl('claro_forum_categories', array('forum' => $forum->getId())));
 }
 /**
  * @param \Claroline\ForumBundle\Entity\Subject  $subject
  * @param \Claroline\ForumBundle\Entity\Category $oldCategory
  * @param \Claroline\ForumBundle\Entity\Category $newCategory
  */
 public function __construct(Subject $subject, Category $oldCategory, Category $newCategory)
 {
     $details = array('subject' => array('id' => $subject->getId()), 'category' => array('oldCategoryId' => $oldCategory->getId(), 'newCategoryId' => $newCategory->getId()), 'forum' => array('id' => $subject->getCategory()->getForum()->getId()));
     parent::__construct($subject->getCategory()->getForum()->getResourceNode(), $details);
 }