/** * 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(); }
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'); } }
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); }
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); }
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); }