/** * Imports the given article. * @param int $id Article's ID * @param int $newJournalId New journal's ID * @param array|int $issueIds IDs of issues * @param array|int $sectionIds IDs of sections * @return Article * @throws \Doctrine\DBAL\DBALException * @throws \Doctrine\ORM\ORMException */ public function importArticle($id, $newJournalId, $issueIds, $sectionIds) { /** @var Journal $journal */ $journal = $this->em->getReference('OjsJournalBundle:Journal', $newJournalId); $this->consoleOutput->writeln("Reading article #" . $id . "... ", true); $articleSql = "SELECT articles.*, published_articles.issue_id, published_articles.seq, published_articles.date_published FROM articles " . " LEFT JOIN published_articles ON published_articles.article_id = articles.article_id WHERE" . " articles.article_id = :id"; $articleStatement = $this->dbalConnection->prepare($articleSql); $articleStatement->bindValue('id', $id); $articleStatement->execute(); $settingsSql = "SELECT locale, setting_name, setting_value FROM article_settings WHERE article_id = :id"; $settingsStatement = $this->dbalConnection->prepare($settingsSql); $settingsStatement->bindValue('id', $id); $settingsStatement->execute(); $pkpArticle = $articleStatement->fetch(); $pkpSettings = $settingsStatement->fetchAll(); $settings = array(); foreach ($pkpSettings as $setting) { $locale = !empty($setting['locale']) ? $setting['locale'] : 'none'; $name = $setting['setting_name']; $value = $setting['setting_value']; $settings[$locale][$name] = $value; } $article = new Article(); $article->setJournal($journal); $article->setCurrentLocale(!empty($pkpArticle['language']) ? $pkpArticle['language'] : 'en'); $article->setPrimaryLanguage(!empty($pkpArticle['language']) ? mb_substr($pkpArticle['language'], 0, 2, 'UTF-8') : 'en'); $article->setDoi(!empty($settings['none']['pub-id::doi']) ? $settings['none']['pub-id::doi'] : null); foreach ($settings as $fieldLocale => $fields) { $subject = !empty($fields['subject']) ? mb_substr($fields['subject'], 0, 254, 'UTF-8') : '-'; $article->setCurrentLocale(mb_substr($fieldLocale, 0, 2, 'UTF-8')); $article->setTitle(!empty($fields['title']) ? $fields['title'] : '-'); $article->setAbstract(!empty($fields['abstract']) ? $fields['abstract'] : '-'); $article->setKeywords($subject); $article->setTags($subject); } switch ($pkpArticle['status']) { case 0: // STATUS_ARCHIVED $article->setStatus(ArticleStatuses::STATUS_REJECTED); break; case 1: // STATUS_QUEUED $article->setStatus($this->determineStatus($id)); break; case 3: // STATUS_PUBLISHED $article->setStatus(ArticleStatuses::STATUS_PUBLISHED); break; case 4: // STATUS_DECLINED $article->setStatus(ArticleStatuses::STATUS_REJECTED); break; case 5: // STATUS_QUEUED_UNASSIGNED $article->setStatus(ArticleStatuses::STATUS_INREVIEW); break; case 6: // STATUS_QUEUED_REVIEW $article->setStatus(ArticleStatuses::STATUS_INREVIEW); break; case 7: // STATUS_QUEUED_EDITING $article->setStatus(ArticleStatuses::STATUS_PUBLISH_READY); break; case 8: // STATUS_INCOMPLETE $article->setStatus(ArticleStatuses::STATUS_NOT_SUBMITTED); break; } if (!empty($issueIds)) { if (!is_array($issueIds)) { /** @var Issue $issue */ $issue = $this->em->getReference('OjsJournalBundle:Issue', $issueIds); $article->setIssue($issue); } else { if (!empty($pkpArticle['issue_id']) && isset($issueIds[$pkpArticle['issue_id']])) { /** @var Issue $issue */ $issue = $this->em->getReference('OjsJournalBundle:Issue', $issueIds[$pkpArticle['issue_id']]); $article->setIssue($issue); } } } if (!empty($sectionIds)) { if (!is_array($sectionIds)) { /** @var Section $section */ $section = $this->em->getReference('OjsJournalBundle:Section', $sectionIds); $article->setSection($section); } else { if (!empty($pkpArticle['section_id']) && isset($sectionIds[$pkpArticle['section_id']])) { /** @var Section $section */ $section = $this->em->getReference('OjsJournalBundle:Section', $sectionIds[$pkpArticle['section_id']]); $article->setSection($section); } } } $article->setSubmissionDate(!empty($pkpArticle['date_submitted']) ? DateTime::createFromFormat('Y-m-d H:i:s', $pkpArticle['date_submitted']) : new DateTime()); $article->setPubdate(!empty($pkpArticle['date_published']) ? DateTime::createFromFormat('Y-m-d H:i:s', $pkpArticle['date_published']) : null); if (isset($pkpArticle['pages'])) { $pages = explode('-', $pkpArticle['pages']); isset($pages[0]) && $article->setFirstPage((int) $pages[0] == 0 && !empty($pages[0]) ? (int) StringHelper::roman2int($pages[0]) : (int) $pages[0]); isset($pages[1]) && $article->setLastPage((int) $pages[1] == 0 && !empty($pages[1]) ? (int) StringHelper::roman2int($pages[1]) : (int) $pages[1]); } if (!empty($pkpArticle['seq'])) { $article->setOrderNum(intval($pkpArticle['seq'])); } $this->em->persist($article); $this->importCitations($id, $article); $this->importAuthors($id, $article); $articleFileImporter = new ArticleFileImporter($this->dbalConnection, $this->em, $this->logger, $this->consoleOutput); $articleFileImporter->importArticleFiles($article, $id, $journal->getSlug()); $supFileImporter = new SupFileImporter($this->dbalConnection, $this->em, $this->logger, $this->consoleOutput); $supFileImporter->importSupFiles($article, $id, $journal->getSlug()); $pendingStatImport = new PendingStatisticImport($article, $id); $pendingSubmitterImport = new PendingSubmitterImport($article, $pkpArticle['user_id']); $this->em->persist($pendingStatImport); $this->em->persist($pendingSubmitterImport); return $article; }
protected function execute(InputInterface $input, OutputInterface $output) { $output->writeln('Creating sample data...'); $em = $this->getContainer()->get('doctrine')->getManager(); $manipulator = $this->getContainer()->get('fos_user.util.user_manipulator'); $manipulator->create('sample_author', 'author', '*****@*****.**', false, false); $user = $em->getRepository('OjsUserBundle:User')->findOneBy(['username' => 'sample_author']); $announcement = new AdminAnnouncement(); $announcement->setTitle('We are online!'); $announcement->setContent('We are now online and accepting submissions!'); $em->persist($announcement); $em->flush(); $post = new AdminPost(); $post->setCurrentLocale('en'); $post->setTitle('Welcome to OJS!'); $post->setSlug('Welcome to OJS!'); $post->setContent('Hello! We are now online and waiting for your submissions. ' . 'Our readers will be able to follow you and read your work ' . 'right after it gets published!'); $em->persist($post); $em->flush(); $publisherTypes = ['University', 'Government', 'Association', 'Foundation', 'Hospital', 'Chamber', 'Private']; foreach ($publisherTypes as $typeName) { $publisherType = new PublisherTypes(); $publisherType->setCurrentLocale('en'); $publisherType->setName($typeName); $em->persist($publisherType); } $em->flush(); $slug = $this->getContainer()->getParameter('defaultPublisherSlug'); $publisherType = $em->getRepository('OjsJournalBundle:PublisherTypes')->find(1); $publisher = new Publisher(); $publisher->setCurrentLocale('en'); $publisher->setName('OJS'); $publisher->setSlug($slug); $publisher->setEmail('*****@*****.**'); $publisher->setAddress('First Avenue, Exampletown'); $publisher->setPhone('+908501234567'); $publisher->setVerified(1); $publisher->setStatus(PublisherStatuses::STATUS_COMPLETE); $publisher->setPublisherType($publisherType); $em->persist($publisher); $em->flush(); $subject1 = new Subject(); $subject1->setCurrentLocale('en'); $subject1->setSubject('Computer Science'); $subject1->setTags('computer, science'); $subject2 = new Subject(); $subject2->setCurrentLocale('en'); $subject2->setSubject('Journalism'); $subject2->setTags('journalism'); $em->persist($subject1); $em->persist($subject2); $em->flush(); $language1 = new Lang(); $language1->setCurrentLocale('en'); $language1->setName('English'); $language1->setCode('en'); $language1->setRtl(false); $language2 = new Lang(); $language2->setCurrentLocale('tr'); $language2->setName('Türkçe'); $language2->setCode('tr'); $language2->setRtl(false); $em->persist($language1); $em->persist($language2); $em->flush(); $articleTypes = [['Case Report', 'Olgu Sunumu'], ['Research papers', 'Araştırma Makalesi'], ['Translation', 'Çeviri'], ['Note', 'Not'], ['Letter', 'Editöre Mektup'], ['Review Articles', 'Derleme'], ['Book review', 'Kitap İncelemesi'], ['Correction', 'Düzeltme'], ['Editorial', 'Editoryal'], ['Short Communication', 'Kısa Bildiri'], ['Meeting abstract', 'Toplantı Özetleri'], ['Conference Paper', 'Konferans Bildirisi'], ['Biography', 'Biyografi'], ['Bibliography', 'Bibliyografi'], ['News', 'Haber'], ['Report', 'Rapor'], ['Legislation Review', 'Yasa İncelemesi'], ['Decision Review', 'Karar İncelemesi'], ['Art and Literature', 'Sanat ve Edebiyat'], ['Other', 'Diğer']]; foreach ($articleTypes as $typeNames) { $type = new ArticleTypes(); $type->setCurrentLocale('en'); $type->setName($typeNames[0]); $type->setCurrentLocale('tr'); $type->setName($typeNames[1]); $em->persist($type); } $em->flush(); $contactTypes = ['Journal Contact', 'Primary Contact', 'Technical Contact', 'Author Support', 'Subscription Support', 'Publisher Support', 'Submission Support', 'Advertising', 'Media', 'Editor', 'Co-Editor']; foreach ($contactTypes as $typeName) { $type = new ContactTypes(); $type->setCurrentLocale('en'); $type->setName($typeName); $em->persist($type); } $em->flush(); $journal = new Journal(); $journal->setCurrentLocale('en'); $journal->setPublisher($publisher); $journal->setTitle('Introduction to OJS'); $journal->setSubtitle('How to use OJS'); $journal->setDescription('A journal about OJS'); $journal->setTitleAbbr('INTROJS'); $journal->setUrl('http://ojs.io'); $journal->setSlug('intro'); $journal->addSubject($subject1); $journal->addSubject($subject2); $journal->addLanguage($language1); $journal->addLanguage($language2); $journal->setMandatoryLang($language2); $journal->setFounded(new \DateTime('now')); $journal->setIssn('1234-5679'); $journal->setEissn('1234-5679'); $journal->setStatus(JournalStatuses::STATUS_PUBLISHED); $journal->setPublished(1); $em->persist($journal); $em->flush(); $this->createDemoFiles(); $issueFile = new IssueFile(); $issueFile->setCurrentLocale('en'); $issueFile->setTitle('Demo File'); $issueFile->setDescription('A file'); $issueFile->setFile('issue.txt'); $issueFile->setLangCode('en'); $issueFile->setType(0); $issueFile->setVersion(0); $issueFile->setUpdatedBy($user->getUsername()); $issueFileHistory = new FileHistory(); $issueFileHistory->setFileName('issue.txt'); $issueFileHistory->setOriginalName('issue.txt'); $issueFileHistory->setType('issuefiles'); $em->persist($issueFile); $em->persist($issueFileHistory); $em->flush(); $issue = new Issue(); $issue->setCurrentLocale('en'); $issue->setJournal($journal); $issue->setTitle('First Issue: Hello OJS!'); $issue->setDescription('First issue of the journal'); $issue->setNumber(1); $issue->setVolume(1); $issue->setYear(2015); $issue->setSpecial(1); $issue->setDatePublished(new \DateTime('now')); $issue->setTags('first, guide, tutorial'); $issue->setDatePublished(new \DateTime('now')); $issue->addIssueFile($issueFile); $em->persist($issue); $em->flush(); $section = new Section(); $section->setCurrentLocale('en'); $section->setJournal($journal); $section->setTitle('Tutorials'); $section->setHideTitle(0); $section->setAllowIndex(1); $em->persist($section); $em->flush(); $citation1 = new Citation(); $citation1->setCurrentLocale('en'); $citation1->setRaw('The Matrix [Motion picture]. (2001). Warner Bros. Pictures.'); $citation1->setOrderNum(0); $em->persist($citation1); $em->flush(); $articleFile = new ArticleFile(); $articleFile->setCurrentLocale('en'); $articleFile->setTitle('Demo File'); $articleFile->setDescription('A file'); $articleFile->setFile('article.txt'); $articleFile->setLangCode('en'); $articleFile->setType(0); $articleFile->setVersion(0); $articleFile->setUpdatedBy($user->getUsername()); $articleFileHistory = new FileHistory(); $articleFileHistory->setFileName('article.txt'); $articleFileHistory->setOriginalName('article.txt'); $articleFileHistory->setType('articlefiles'); $em->persist($articleFile); $em->persist($articleFileHistory); $em->flush(); $author = new Author(); $author->setCurrentLocale('en'); $author->setTitle('Dr.'); $author->setFirstName('John'); $author->setLastName('Doe'); $author->setEmail('*****@*****.**'); $em->persist($author); $em->flush(); $article1 = new Article(); $article1->setCurrentLocale('en'); $article1->setJournal($journal); $article1->setSection($section); $article1->setIssue($issue); $article1->setTitle('Getting Started with OJS'); $article1->setAbstract('A tutorial about using OJS'); $article1->setSubjects('OJS'); $article1->setKeywords('ojs, intro, starting'); $article1->setDoi('10.5281/zenodo.14791'); $article1->setSubmissionDate(new \DateTime('now')); $article1->setPubdate(new \DateTime('now')); $article1->setAnonymous(0); $article1->setFirstPage(1); $article1->setLastPage(5); $article1->setStatus(ArticleStatuses::STATUS_PUBLISHED); $article1->addCitation($citation1); $article1->addArticleFile($articleFile); $em->persist($article1); $em->flush(); $articleAuthor = new ArticleAuthor(); $articleAuthor->setAuthor($author); $articleAuthor->setArticle($article1); $articleAuthor->setAuthorOrder(0); $em->persist($articleAuthor); $em->flush(); $checklistItems = [['The title page should include necessary information.', "<ul>\n <li>The name(s) of the author(s)</li>\n <li>A concise and informative title</li>\n <li>The affiliation(s) of the author(s)</li>\n <li>The e-mail address, telephone number of the corresponding author </li>\n </ul>"], ['Manuscript must be approved.', 'All authors must have read and approved the most recent version of the manuscript.'], ['Manuscript must be <i>spell checked</i>.', 'The most recent version of the manuscript must be spell checked.']]; foreach ($checklistItems as $checklistItem) { $label = $checklistItem[0]; $detail = $checklistItem[1]; $item = new SubmissionChecklist(); $item->setLabel($label); $item->setDetail($detail); $item->setLocale('en'); $item->setJournal($journal); $em->persist($item); } $em->flush(); $periods = ['Monthly', 'Bimonthly', 'Quarterly', 'Triquarterly', 'Biannually', 'Annually', 'Spring', 'Summer', 'Fall', 'Winter']; foreach ($periods as $period) { $journalPeriod = new Period(); $journalPeriod->setCurrentLocale('en'); $journalPeriod->setPeriod($period); $em->persist($journalPeriod); } $em->flush(); }
protected function execute(InputInterface $input, OutputInterface $output) { $output->writeln('Creating sample data...'); $em = $this->getContainer()->get('doctrine')->getManager(); $manipulator = $this->getContainer()->get('fos_user.util.user_manipulator'); $manipulator->create('sample_author', 'author', '*****@*****.**', false, false); $announcement = new AdminAnnouncement(); $announcement->setTitle('We are online!'); $announcement->setContent('We are now online and accepting submissions!'); $em->persist($announcement); $em->flush(); $post = new AdminPost(); $post->setCurrentLocale('en'); $post->setTitle('Welcome to OJS!'); $post->setSlug('Welcome to OJS!'); $post->setContent('Hello! We are now online and waiting for your submissions. ' . 'Our readers will be able to follow you and read your work ' . 'right after it gets published!'); $em->persist($post); $em->flush(); $slug = $this->getContainer()->getParameter('defaultPublisherSlug'); $publisher = new Publisher(); $publisher->setCurrentLocale('en'); $publisher->setName('OJS'); $publisher->setSlug($slug); $publisher->setVerified(1); $publisher->setStatus(1); $em->persist($publisher); $em->flush(); $subject1 = new Subject(); $subject1->setCurrentLocale('en'); $subject1->setSubject('Computer Science'); $subject2 = new Subject(); $subject2->setCurrentLocale('en'); $subject2->setSubject('Journalism'); $em->persist($subject1); $em->persist($subject2); $em->flush(); $language1 = new Lang(); $language1->setCurrentLocale('en'); $language1->setName('English'); $language1->setCode('en'); $language1->setRtl(0); $language2 = new Lang(); $language2->setCurrentLocale('tr'); $language2->setName('Türkçe'); $language2->setCode('tr'); $language2->setRtl(0); $em->persist($language1); $em->persist($language2); $em->flush(); $articleTypes = ['Research', 'Analysis', 'Clinical Review', 'Practice', 'Research Methods and Reporting', 'Christmas Issue', 'Editorials', 'Blogs', 'Case Reports', 'Letters (rapid responses)', 'Obituaries', 'Personal Views', 'Fillers', 'Minerva Pictures', 'Endgames', 'What Your Patient is Thinking']; foreach ($articleTypes as $typeName) { $type = new ArticleTypes(); $type->setCurrentLocale('en'); $type->setName($typeName); $em->persist($type); } $em->flush(); $contactTypes = ['Journal Contact', 'Primary Contact', 'Technical Contact', 'Author Support', 'Subscription Support', 'Publisher Support', 'Submission Support', 'Advertising', 'Media']; foreach ($contactTypes as $typeName) { $type = new ContactTypes(); $type->setCurrentLocale('en'); $type->setName($typeName); $em->persist($type); } $em->flush(); $journal = new Journal(); $journal->setCurrentLocale('en'); $journal->setPublisher($publisher); $journal->setTitle('Introduction to OJS'); $journal->setSubtitle('How to use OJS'); $journal->setTitleAbbr('INTROJS'); $journal->setUrl('http://ojs.io'); $journal->setSlug('intro'); $journal->addSubject($subject1); $journal->addSubject($subject2); $journal->setMandatoryLang($language2); $em->persist($journal); $em->flush(); $issue = new Issue(); $issue->setCurrentLocale('en'); $issue->setJournal($journal); $issue->setTitle('First Issue: Hello OJS!'); $issue->setNumber(1); $issue->setVolume(1); $issue->setYear(2015); $issue->setSpecial(1); $issue->setTags('fisrt, guide, tutorial'); $issue->setDatePublished(new \DateTime('now')); $em->persist($issue); $em->flush(); $section = new Section(); $section->setCurrentLocale('en'); $section->setJournal($journal); $section->setTitle('Tutorials'); $section->setHideTitle(0); $section->setAllowIndex(1); $em->persist($section); $em->flush(); $citation1 = new Citation(); $citation1->setCurrentLocale('en'); $citation1->setRaw('The Matrix [Motion picture]. (2001). Warner Bros. Pictures.'); $em->persist($citation1); $em->flush(); $article1 = new Article(); $article1->setCurrentLocale('en'); $article1->setJournal($journal); $article1->setSection($section); $article1->setIssue($issue); $article1->setTitle('Getting Started with OJS'); $article1->setKeywords('ojs, intro, starting'); $article1->setDoi('10.5281/zenodo.14791'); $article1->setPubdate(new \DateTime('now')); $article1->setIsAnonymous(0); $article1->setFirstPage(1); $article1->setLastPage(5); $article1->setStatus(3); $article1->addCitation($citation1); $em->persist($article1); $em->flush(); }