예제 #1
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');
     }
 }
예제 #2
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;
 }
예제 #3
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;
 }