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; }
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; }