/** * Save author * @see Form::execute() * @see Form::execute() */ function execute() { $authorDao = DAORegistry::getDAO('AuthorDAO'); $submission = $this->getSubmission(); $author = $this->getAuthor(); if (!$author) { // this is a new submission contributor $author = new Author(); $author->setSubmissionId($submission->getId()); $existingAuthor = false; } else { $existingAuthor = true; if ($submission->getId() !== $author->getSubmissionId()) { fatalError('Invalid author!'); } } $author->setFirstName($this->getData('firstName')); $author->setMiddleName($this->getData('middleName')); $author->setLastName($this->getData('lastName')); $author->setSuffix($this->getData('suffix')); $author->setAffiliation($this->getData('affiliation'), null); // localized $author->setCountry($this->getData('country')); $author->setEmail($this->getData('email')); $author->setUrl($this->getData('userUrl')); $author->setOrcid($this->getData('orcid')); $author->setUserGroupId($this->getData('userGroupId')); $author->setBiography($this->getData('biography'), null); // localized $author->setPrimaryContact($this->getData('primaryContact') ? true : false); $author->setIncludeInBrowse($this->getData('includeInBrowse') ? true : false); // in order to be able to use the hook parent::execute(); if ($existingAuthor) { $authorDao->updateObject($author); $authorId = $author->getId(); } else { $authorId = $authorDao->insertObject($author); } return $authorId; }
/** * Save changes to article. * @param $request Request * @return int the article ID */ function execute() { $articleDao =& DAORegistry::getDAO('ArticleDAO'); $authorDao =& DAORegistry::getDAO('AuthorDAO'); $article =& $this->article; // Retrieve the previous citation list for comparison. $previousRawCitationList = $article->getCitations(); // Update article $article->setTitle($this->getData('title'), null); // Localized $article->setAbstract($this->getData('abstract'), null); // Localized $article->setDiscipline($this->getData('discipline'), null); // Localized $article->setSubjectClass($this->getData('subjectClass'), null); // Localized $article->setSubject($this->getData('subject'), null); // Localized $article->setCoverageGeo($this->getData('coverageGeo'), null); // Localized $article->setCoverageChron($this->getData('coverageChron'), null); // Localized $article->setCoverageSample($this->getData('coverageSample'), null); // Localized $article->setType($this->getData('type'), null); // Localized $article->setLanguage($this->getData('language')); $article->setSponsor($this->getData('sponsor'), null); // Localized $article->setCitations($this->getData('citations')); if ($article->getSubmissionProgress() <= $this->step) { $article->stampStatusModified(); $article->setSubmissionProgress($this->step + 1); } // Update authors $authors = $this->getData('authors'); for ($i = 0, $count = count($authors); $i < $count; $i++) { if ($authors[$i]['authorId'] > 0) { // Update an existing author $author =& $authorDao->getAuthor($authors[$i]['authorId'], $article->getId()); $isExistingAuthor = true; } else { // Create a new author $author = new Author(); $isExistingAuthor = false; } if ($author != null) { $author->setSubmissionId($article->getId()); $author->setFirstName($authors[$i]['firstName']); $author->setMiddleName($authors[$i]['middleName']); $author->setLastName($authors[$i]['lastName']); $author->setAffiliation($authors[$i]['affiliation'], null); $author->setCountry($authors[$i]['country']); $author->setEmail($authors[$i]['email']); $author->setData('orcid', $authors[$i]['orcid']); $author->setUrl($authors[$i]['url']); if (array_key_exists('competingInterests', $authors[$i])) { $author->setCompetingInterests($authors[$i]['competingInterests'], null); } $author->setBiography($authors[$i]['biography'], null); $author->setPrimaryContact($this->getData('primaryContact') == $i ? 1 : 0); $author->setSequence($authors[$i]['seq']); HookRegistry::call('Author::Form::Submit::AuthorSubmitStep3Form::Execute', array(&$author, &$authors[$i])); if ($isExistingAuthor) { $authorDao->updateAuthor($author); } else { $authorDao->insertAuthor($author); } } unset($author); } // Remove deleted authors $deletedAuthors = preg_split('/:/', $this->getData('deletedAuthors'), -1, PREG_SPLIT_NO_EMPTY); for ($i = 0, $count = count($deletedAuthors); $i < $count; $i++) { $authorDao->deleteAuthorById($deletedAuthors[$i], $article->getId()); } parent::execute(); // Save the article $articleDao->updateArticle($article); // Update references list if it changed. $citationDao =& DAORegistry::getDAO('CitationDAO'); $rawCitationList = $article->getCitations(); if ($previousRawCitationList != $rawCitationList) { $citationDao->importCitations($this->request, ASSOC_TYPE_ARTICLE, $article->getId(), $rawCitationList); } return $this->articleId; }
/** * Save changes to article. * @return int the article ID */ function execute() { $articleDao =& DAORegistry::getDAO('ArticleDAO'); if (isset($this->article)) { // Update existing article $this->article->setSectionId($this->getData('sectionId')); $this->article->setLocale($this->getData('locale')); $this->article->setCommentsToEditor($this->getData('commentsToEditor')); if ($this->article->getSubmissionProgress() <= $this->step) { $this->article->stampStatusModified(); $this->article->setSubmissionProgress($this->step + 1); } $articleDao->updateArticle($this->article); } else { // Insert new article $journal =& $this->request->getJournal(); $user =& $this->request->getUser(); $this->article = new Article(); $this->article->setLocale($this->getData('locale')); $this->article->setUserId($user->getId()); $this->article->setJournalId($journal->getId()); $this->article->setSectionId($this->getData('sectionId')); $this->article->stampStatusModified(); $this->article->setSubmissionProgress($this->step + 1); $this->article->setLanguage(String::substr($this->article->getLocale(), 0, 2)); $this->article->setCommentsToEditor($this->getData('commentsToEditor')); $articleDao->insertArticle($this->article); $this->articleId = $this->article->getId(); // Set user to initial author $authorDao =& DAORegistry::getDAO('AuthorDAO'); /* @var $authorDao AuthorDAO */ $user =& $this->request->getUser(); $author = new Author(); $author->setSubmissionId($this->articleId); $author->setFirstName($user->getFirstName()); $author->setMiddleName($user->getMiddleName()); $author->setLastName($user->getLastName()); $author->setAffiliation($user->getAffiliation(null), null); $author->setCountry($user->getCountry()); $author->setEmail($user->getEmail()); $author->setData('orcid', $user->getData('orcid')); $author->setUrl($user->getUrl()); $author->setBiography($user->getBiography(null), null); $author->setPrimaryContact(1); $authorDao->insertAuthor($author); } return $this->articleId; }
/** * Import papers (including metadata and files). */ function importPapers() { if ($this->hasOption('verbose')) { printf("Importing papers\n"); } import('classes.file.PaperFileManager'); import('classes.search.PaperSearchIndex'); $userDao =& DAORegistry::getDAO('UserDAO'); $roleDao =& DAORegistry::getDAO('RoleDAO'); $trackDao =& DAORegistry::getDAO('TrackDAO'); $paperDao =& DAORegistry::getDAO('PaperDAO'); $publishedPaperDao =& DAORegistry::getDAO('PublishedPaperDAO'); $galleyDao =& DAORegistry::getDAO('PaperGalleyDAO'); $unassignedTrackId = null; $result =& $this->importDao->retrieve('SELECT * FROM papers ORDER by id'); while (!$result->EOF) { $row =& $result->fields; $schedConf =& $this->schedConfMap[$row['cf']]; $schedConfId = $schedConf->getId(); // Bring in the primary user for this paper. $user = $userDao->getUserByUsername(Core::cleanVar($row['login'])); if (!$user) { unset($user); $user = new User(); $user->setUsername(Core::cleanVar($row['login'])); $user->setFirstName(Core::cleanVar($row['first_name'])); $user->setLastName(Core::cleanVar($row['surname'])); $user->setAffiliation(Core::cleanVar($row['affiliation']), Locale::getLocale()); $user->setEmail(Core::cleanVar($row['email'])); $user->setUrl(Core::cleanVar($row['url'])); $user->setBiography(Core::cleanVar($row['bio']), Locale::getLocale()); $user->setLocales(array()); $user->setDateRegistered($row['created']); $user->setDateLastLogin($row['created']); $user->setMustChangePassword(1); $password = Validation::generatePassword(); $user->setPassword(Validation::encryptCredentials($user->getUsername(), $password)); if ($this->hasOption('emailUsers')) { import('classes.mail.MailTemplate'); $mail = new MailTemplate('USER_REGISTER'); $mail->setFrom($schedConf->getSetting('contactEmail'), $schedConf->getSetting('contactName')); $mail->assignParams(array('username' => $user->getUsername(), 'password' => $password, 'conferenceName' => $schedConf->getFullTitle())); $mail->addRecipient($user->getEmail(), $user->getFullName()); $mail->send(); } $user->setDisabled(0); $otherUser =& $userDao->getUserByEmail(Core::cleanVar($row['email'])); if ($otherUser !== null) { // User exists with this email -- munge it to make unique $user->setEmail('ocs-' . Core::cleanVar($row['login']) . '+' . Core::cleanVar($row['email'])); $this->conflicts[] = array(&$otherUser, &$user); } unset($otherUser); $userDao->insertUser($user); // Make this user a author $role = new Role(); $role->setSchedConfId($schedConf->getId()); $role->setConferenceId($schedConf->getConferenceId()); $role->setUserId($user->getId()); $role->setRoleId(ROLE_ID_AUTHOR); $roleDao->insertRole($role); unset($role); } $userId = $user->getId(); // Bring in the basic entry for the paper $paper = new Paper(); $paper->setUserId($userId); $paper->setLocale(Locale::getPrimaryLocale()); $paper->setSchedConfId($schedConfId); $oldTrackId = $row['primary_track_id']; if (!$oldTrackId || !isset($this->trackMap[$oldTrackId])) { $oldTrackId = $row['secondary_track_id']; } if (!$oldTrackId || !isset($this->trackMap[$oldTrackId])) { if (!$unassignedTrackId) { // Create an "Unassigned" track to use for submissions // that didn't have a track in OCS 1.x. $track = new Track(); $track->setSchedConfId($schedConf->getId()); $track->setTitle('UNASSIGNED', Locale::getLocale()); $track->setSequence(REALLY_BIG_NUMBER); $track->setDirectorRestricted(1); $track->setMetaReviewed(1); $unassignedTrackId = $trackDao->insertTrack($track); } $newTrackId = $unassignedTrackId; } else { $newTrackId = $this->trackMap[$oldTrackId]; } $paper->setTrackId($newTrackId); $paper->setTitle(Core::cleanVar($row['title']), Locale::getLocale()); $paper->setAbstract(Core::cleanVar($row['abstract']), Locale::getLocale()); $paper->setDiscipline(Core::cleanVar($row['discipline']), Locale::getLocale()); $paper->setSponsor(Core::cleanVar($row['sponsor']), Locale::getLocale()); $paper->setSubject(Core::cleanVar($row['topic']), Locale::getLocale()); $paper->setLanguage(Core::cleanVar($row['language'])); $paper->setDateSubmitted($row['created']); $paper->setDateStatusModified($row['timestamp']); // $paper->setTypeConst($row['present_format'] == 'multiple' ? SUBMISSION_TYPE_PANEL : SUBMISSION_TYPE_SINGLE); FIXME $paper->setCurrentRound(REVIEW_ROUND_ABSTRACT); $paper->setSubmissionProgress(0); $paper->setPages(''); // Bring in authors $firstNames = split("\n", Core::cleanVar($row['first_name'] . "\n" . $row['add_first_names'])); $lastNames = split("\n", Core::cleanVar($row['surname'] . "\n" . $row['add_surnames'])); $emails = split("\n", Core::cleanVar($row['email'] . "\n" . $row['add_emails'])); $affiliations = split("\n", Core::cleanVar($row['affiliation'] . "\n" . $row['add_affiliations'])); $urls = split("\n", Core::cleanVar($row['url'] . "\n" . $row['add_urls'])); foreach ($emails as $key => $email) { if (empty($email)) { continue; } $author = new Author(); $author->setEmail($email); $author->setFirstName($firstNames[$key]); $author->setLastName($lastNames[$key]); $author->setAffiliation($affiliations[$key], Locale::getLocale()); @$author->setUrl($urls[$key]); // Suppress warnings from inconsistent OCS 1.x data $author->setPrimaryContact($key == 0 ? 1 : 0); $paper->addAuthor($author); unset($author); } switch ($row['accepted']) { case 'true': $paper->setStatus(STATUS_PUBLISHED); $paperId = $paperDao->insertPaper($paper); $publishedPaper = new PublishedPaper(); $publishedPaper->setPaperId($paperId); $publishedPaper->setSchedConfId($schedConfId); $publishedPaper->setDatePublished(Core::getCurrentDate()); $publishedPaper->setSeq(REALLY_BIG_NUMBER); $publishedPaper->setViews(0); $publishedPaperDao->insertPublishedPaper($publishedPaper); $publishedPaperDao->resequencePublishedPapers($paper->getTrackId(), $schedConfId); break; case 'reject': $paper->setStatus(STATUS_DECLINED); $paperId = $paperDao->insertPaper($paper); break; default: $paper->setStatus(STATUS_QUEUED); $paperId = $paperDao->insertPaper($paper); } $this->paperMap[$row['id']] =& $paper; $paperFileManager = new PaperFileManager($paperId); if (!empty($row['paper']) && $row['paper'] != 'PDF') { $format = 'text/html'; $extension = $paperFileManager->getDocumentExtension($format); $fileId = $paperFileManager->writeSubmissionFile('migratedFile' . $extension, $row['paper'], $format); $paper->setSubmissionFileId($fileId); $paperDao->updatePaper($paper); $fileId = $paperFileManager->writePublicFile('migratedGalley' . $extension, $row['paper'], $format); PaperSearchIndex::updateFileIndex($paperId, PAPER_SEARCH_GALLEY_FILE, $fileId); if (strstr($format, 'html')) { $galley = new PaperHTMLGalley(); $galley->setLabel('HTML'); } else { $galley = new PaperGalley(); switch ($format) { case 'application/pdf': $galley->setLabel('PDF'); break; case 'application/postscript': $galley->setLabel('PostScript'); break; case 'application/msword': $galley->setLabel('Word'); break; case 'text/xml': $galley->setLabel('XML'); break; case 'application/powerpoint': $galley->setLabel('Slideshow'); break; default: $galley->setLabel('Untitled'); break; } } $galley->setLocale(Locale::getLocale()); $galley->setPaperId($paperId); $galley->setFileId($fileId); $galleyDao->insertGalley($galley); unset($galley); } elseif ($row['paper'] == 'PDF') { $fileId = $paperFileManager->copySubmissionFile($this->importPath . '/papers/' . $row['pdf'], 'application/pdf'); $paper->setSubmissionFileId($fileId); $paperDao->updatePaper($paper); $fileId = $paperFileManager->copyPublicFile($this->importPath . '/papers/' . $row['pdf'], 'application/pdf'); PaperSearchIndex::updateFileIndex($paperId, PAPER_SEARCH_GALLEY_FILE, $fileId); $galley = new PaperGalley(); $galley->setLabel('PDF'); $galley->setLocale(Locale::getLocale()); $galley->setPaperId($paperId); $galley->setFileId($fileId); $galleyDao->insertGalley($galley); unset($galley); } // FIXME: The following fields from OCS 1.x are UNUSED: // program_insert approach coverage format relation appendix_names appendix_dates // appendix appendix_pdf secondary_track_id multiple_* restrict_access paper_email // delete_paper comment_email unset($user); unset($paper); unset($schedConf); unset($paperFileManager); $result->MoveNext(); } $result->Close(); }
/** * Save changes to submission. * @return int the monograph ID */ function execute() { $monographDao =& DAORegistry::getDAO('MonographDAO'); if (isset($this->monograph)) { // Update existing monograph $this->monograph->setSeriesId($this->getData('seriesId')); $this->monograph->setLocale($this->getData('locale')); $this->monograph->setCommentsToEditor($this->getData('commentsToEditor')); if ($this->monograph->getSubmissionProgress() <= $this->step) { $this->monograph->stampStatusModified(); $this->monograph->setSubmissionProgress($this->step + 1); } $monographDao->updateMonograph($this->monograph); } else { $press =& Request::getPress(); $user =& Request::getUser(); // Get the session and the user group id currently used $sessionMgr =& SessionManager::getManager(); $session =& $sessionMgr->getUserSession(); // Create new monograph $this->monograph = new Monograph(); $this->monograph->setLocale($this->getData('locale')); $this->monograph->setUserId($user->getId()); $this->monograph->setPressId($press->getId()); $this->monograph->setSeriesId($this->getData('seriesId')); $this->monograph->stampStatusModified(); $this->monograph->setSubmissionProgress($this->step + 1); $this->monograph->setLanguage(String::substr($this->monograph->getLocale(), 0, 2)); $this->monograph->setCommentsToEditor($this->getData('commentsToEditor')); $this->monograph->setWorkType($this->getData('isEditedVolume') ? WORK_TYPE_EDITED_VOLUME : WORK_TYPE_AUTHORED_WORK); $this->monograph->setCurrentStageId(WORKFLOW_STAGE_ID_SUBMISSION); // Get a default user group id for an Author $userGroupDao =& DAORegistry::getDAO('UserGroupDAO'); $defaultAuthorGroup =& $userGroupDao->getDefaultByRoleId($press->getId(), ROLE_ID_AUTHOR); // Set user to initial author $authorDao =& DAORegistry::getDAO('AuthorDAO'); $user =& Request::getUser(); $author = new Author(); $author->setFirstName($user->getFirstName()); $author->setMiddleName($user->getMiddleName()); $author->setLastName($user->getLastName()); $author->setAffiliation($user->getAffiliation(null), null); $author->setCountry($user->getCountry()); $author->setEmail($user->getEmail()); $author->setUrl($user->getUrl()); $author->setUserGroupId($defaultAuthorGroup->getId()); $author->setBiography($user->getBiography(null), null); $author->setPrimaryContact(1); $monographDao->insertMonograph($this->monograph); $this->monographId = $this->monograph->getId(); $author->setSubmissionId($this->monographId); $authorDao->insertAuthor($author); } return $this->monographId; }
/** * Save changes to paper. * @return int the paper ID */ function execute() { $paperDao =& DAORegistry::getDAO('PaperDAO'); $authorDao =& DAORegistry::getDAO('AuthorDAO'); $paper =& $this->paper; $conference =& Request::getConference(); $schedConf =& Request::getSchedConf(); $user =& Request::getUser(); // Update paper $paper->setTitle($this->getData('title'), null); // Localized $reviewMode = $this->paper->getReviewMode(); if ($reviewMode != REVIEW_MODE_PRESENTATIONS_ALONE) { $paper->setAbstract($this->getData('abstract'), null); // Localized } $paper->setDiscipline($this->getData('discipline'), null); // Localized $paper->setSubjectClass($this->getData('subjectClass'), null); // Localized $paper->setSubject($this->getData('subject'), null); // Localized $paper->setCoverageGeo($this->getData('coverageGeo'), null); // Localized $paper->setCoverageChron($this->getData('coverageChron'), null); // Localized $paper->setCoverageSample($this->getData('coverageSample'), null); // Localized $paper->setType($this->getData('type'), null); // Localized $paper->setLanguage($this->getData('language')); // Localized $paper->setSponsor($this->getData('sponsor'), null); // Localized $paper->setCitations($this->getData('citations')); // Update the submission progress if necessary. if ($paper->getSubmissionProgress() <= $this->step) { $paper->stampStatusModified(); // If we aren't about to collect the paper, the submission is complete // (for now) $reviewMode = $this->paper->getReviewMode(); if ($reviewMode == REVIEW_MODE_BOTH_SIMULTANEOUS || $reviewMode == REVIEW_MODE_PRESENTATIONS_ALONE) { if (!$schedConf->getSetting('acceptSupplementaryReviewMaterials')) { $paper->setSubmissionProgress($this->step + 2); } else { $paper->setSubmissionProgress($this->step + 1); } // The line below is necessary to ensure that // the paper upload goes in with the correct // stage number (i.e. paper). $paper->setCurrentStage(REVIEW_STAGE_PRESENTATION); } else { $paper->setDateSubmitted(Core::getCurrentDate()); $paper->stampStatusModified(); $paper->setCurrentStage(REVIEW_STAGE_ABSTRACT); $this->assignDirectors($paper); if ($schedConf->getSetting('acceptSupplementaryReviewMaterials')) { $paper->setSubmissionProgress($this->step + 2); } else { $paper->setSubmissionProgress(0); $this->confirmSubmission($paper, $user, $schedConf, $conference, 'SUBMISSION_ACK'); } } } // Update authors $authors = $this->getData('authors'); for ($i = 0, $count = count($authors); $i < $count; $i++) { if ($authors[$i]['authorId'] > 0) { // Update an existing author $author =& $paper->getAuthor($authors[$i]['authorId']); $isExistingAuthor = true; } else { // Create a new author $author = new Author(); $isExistingAuthor = false; } if ($author != null) { $author->setFirstName($authors[$i]['firstName']); $author->setMiddleName($authors[$i]['middleName']); $author->setLastName($authors[$i]['lastName']); $author->setAffiliation($authors[$i]['affiliation']); $author->setCountry($authors[$i]['country']); $author->setEmail($authors[$i]['email']); $author->setUrl($authors[$i]['url']); $author->setBiography($authors[$i]['biography'], null); // Localized $author->setPrimaryContact($this->getData('primaryContact') == $i ? 1 : 0); $author->setSequence($authors[$i]['seq']); if ($isExistingAuthor == false) { $paper->addAuthor($author); } } unset($author); } // Remove deleted authors $deletedAuthors = explode(':', $this->getData('deletedAuthors')); for ($i = 0, $count = count($deletedAuthors); $i < $count; $i++) { $paper->removeAuthor($deletedAuthors[$i]); } // Save the paper $paperDao->updatePaper($paper); // Log the submission, even though it may not be "complete" // at this step. This is important because we don't otherwise // capture changes in review process. import('paper.log.PaperLog'); import('paper.log.PaperEventLogEntry'); PaperLog::logEvent($this->paperId, PAPER_LOG_ABSTRACT_SUBMIT, LOG_TYPE_AUTHOR, $user->getId(), 'log.author.abstractSubmitted', array('submissionId' => $paper->getId(), 'authorName' => $user->getFullName())); return $this->paperId; }
/** * Save settings. */ function execute() { $articleDao =& DAORegistry::getDAO('ArticleDAO'); $signoffDao =& DAORegistry::getDAO('SignoffDAO'); $sectionEditorSubmissionDao =& DAORegistry::getDAO('SectionEditorSubmissionDAO'); $application =& PKPApplication::getApplication(); $request =& $application->getRequest(); $user =& $request->getUser(); $router =& $request->getRouter(); $journal =& $router->getContext($request); $article = new Article(); $article->setLocale($journal->getPrimaryLocale()); // FIXME in bug #5543 $article->setUserId($user->getId()); $article->setJournalId($journal->getId()); $article->setSectionId($this->getData('sectionId')); $article->setLanguage(String::substr($journal->getPrimaryLocale(), 0, 2)); $article->setTitle($this->getData('title'), null); // Localized $article->setAbstract($this->getData('abstract'), null); // Localized $article->setDiscipline($this->getData('discipline'), null); // Localized $article->setSubjectClass($this->getData('subjectClass'), null); // Localized $article->setSubject($this->getData('subject'), null); // Localized $article->setCoverageGeo($this->getData('coverageGeo'), null); // Localized $article->setCoverageChron($this->getData('coverageChron'), null); // Localized $article->setCoverageSample($this->getData('coverageSample'), null); // Localized $article->setType($this->getData('type'), null); // Localized $article->setSponsor($this->getData('sponsor'), null); // Localized $article->setCitations($this->getData('citations')); $article->setPages($this->getData('pages')); // Set some default values so the ArticleDAO doesn't complain when adding this article $article->setDateSubmitted(Core::getCurrentDate()); $article->setStatus(STATUS_PUBLISHED); $article->setSubmissionProgress(0); $article->stampStatusModified(); $article->setCurrentRound(1); $article->setFastTracked(1); $article->setHideAuthor(0); $article->setCommentsStatus(0); // Insert the article to get it's ID $articleDao->insertArticle($article); $articleId = $article->getId(); // Add authors $authors = $this->getData('authors'); for ($i = 0, $count = count($authors); $i < $count; $i++) { if ($authors[$i]['authorId'] > 0) { // Update an existing author $author =& $article->getAuthor($authors[$i]['authorId']); $isExistingAuthor = true; } else { // Create a new author $author = new Author(); $isExistingAuthor = false; } if ($author != null) { $author->setSubmissionId($articleId); $author->setFirstName($authors[$i]['firstName']); $author->setMiddleName($authors[$i]['middleName']); $author->setLastName($authors[$i]['lastName']); if (array_key_exists('affiliation', $authors[$i])) { $author->setAffiliation($authors[$i]['affiliation'], null); } $author->setCountry($authors[$i]['country']); $author->setEmail($authors[$i]['email']); $author->setUrl($authors[$i]['url']); if (array_key_exists('competingInterests', $authors[$i])) { $author->setCompetingInterests($authors[$i]['competingInterests'], null); } $author->setBiography($authors[$i]['biography'], null); $author->setPrimaryContact($this->getData('primaryContact') == $i ? 1 : 0); $author->setSequence($authors[$i]['seq']); if ($isExistingAuthor == false) { $article->addAuthor($author); } } } // Add the submission files as galleys import('classes.file.TemporaryFileManager'); import('classes.file.ArticleFileManager'); $tempFileIds = $this->getData('tempFileId'); $temporaryFileManager = new TemporaryFileManager(); $articleFileManager = new ArticleFileManager($articleId); foreach (array_keys($tempFileIds) as $locale) { $temporaryFile = $temporaryFileManager->getFile($tempFileIds[$locale], $user->getId()); $fileId = null; if ($temporaryFile) { $fileId = $articleFileManager->temporaryFileToArticleFile($temporaryFile, ARTICLE_FILE_SUBMISSION); $fileType = $temporaryFile->getFileType(); if (strstr($fileType, 'html')) { import('classes.article.ArticleHTMLGalley'); $galley = new ArticleHTMLGalley(); } else { import('classes.article.ArticleGalley'); $galley = new ArticleGalley(); } $galley->setArticleId($articleId); $galley->setFileId($fileId); $galley->setLocale($locale); if ($galley->isHTMLGalley()) { $galley->setLabel('HTML'); } else { if (strstr($fileType, 'pdf')) { $galley->setLabel('PDF'); } else { if (strstr($fileType, 'postscript')) { $galley->setLabel('Postscript'); } else { if (strstr($fileType, 'xml')) { $galley->setLabel('XML'); } else { $galley->setLabel(__('common.untitled')); } } } } $galleyDao =& DAORegistry::getDAO('ArticleGalleyDAO'); $galleyDao->insertGalley($galley); } if ($locale == $journal->getPrimaryLocale()) { $article->setSubmissionFileId($fileId); $article->SetReviewFileId($fileId); } // Update file search index import('classes.search.ArticleSearchIndex'); if (isset($galley)) { ArticleSearchIndex::updateFileIndex($galley->getArticleId(), ARTICLE_SEARCH_GALLEY_FILE, $galley->getFileId()); } } // Designate this as the review version by default. $authorSubmissionDao =& DAORegistry::getDAO('AuthorSubmissionDAO'); $authorSubmission =& $authorSubmissionDao->getAuthorSubmission($articleId); import('classes.submission.author.AuthorAction'); AuthorAction::designateReviewVersion($authorSubmission, true); // Accept the submission $sectionEditorSubmission =& $sectionEditorSubmissionDao->getSectionEditorSubmission($articleId); $articleFileManager = new ArticleFileManager($articleId); $sectionEditorSubmission->setReviewFile($articleFileManager->getFile($article->getSubmissionFileId())); import('classes.submission.sectionEditor.SectionEditorAction'); SectionEditorAction::recordDecision($sectionEditorSubmission, SUBMISSION_EDITOR_DECISION_ACCEPT); // Create signoff infrastructure $copyeditInitialSignoff = $signoffDao->build('SIGNOFF_COPYEDITING_INITIAL', ASSOC_TYPE_ARTICLE, $articleId); $copyeditAuthorSignoff = $signoffDao->build('SIGNOFF_COPYEDITING_AUTHOR', ASSOC_TYPE_ARTICLE, $articleId); $copyeditFinalSignoff = $signoffDao->build('SIGNOFF_COPYEDITING_FINAL', ASSOC_TYPE_ARTICLE, $articleId); $copyeditInitialSignoff->setUserId(0); $copyeditAuthorSignoff->setUserId($user->getId()); $copyeditFinalSignoff->setUserId(0); $signoffDao->updateObject($copyeditInitialSignoff); $signoffDao->updateObject($copyeditAuthorSignoff); $signoffDao->updateObject($copyeditFinalSignoff); $layoutSignoff = $signoffDao->build('SIGNOFF_LAYOUT', ASSOC_TYPE_ARTICLE, $articleId); $layoutSignoff->setUserId(0); $signoffDao->updateObject($layoutSignoff); $proofAuthorSignoff = $signoffDao->build('SIGNOFF_PROOFREADING_AUTHOR', ASSOC_TYPE_ARTICLE, $articleId); $proofProofreaderSignoff = $signoffDao->build('SIGNOFF_PROOFREADING_PROOFREADER', ASSOC_TYPE_ARTICLE, $articleId); $proofLayoutEditorSignoff = $signoffDao->build('SIGNOFF_PROOFREADING_LAYOUT', ASSOC_TYPE_ARTICLE, $articleId); $proofAuthorSignoff->setUserId($user->getId()); $proofProofreaderSignoff->setUserId(0); $proofLayoutEditorSignoff->setUserId(0); $signoffDao->updateObject($proofAuthorSignoff); $signoffDao->updateObject($proofProofreaderSignoff); $signoffDao->updateObject($proofLayoutEditorSignoff); import('classes.author.form.submit.AuthorSubmitForm'); AuthorSubmitForm::assignEditors($article); $articleDao->updateArticle($article); // Add to end of editing queue import('classes.submission.editor.EditorAction'); if (isset($galley)) { EditorAction::expediteSubmission($article); } if ($this->getData('destination') == "issue") { // Add to an existing issue $issueId = $this->getData('issueId'); $this->scheduleForPublication($articleId, $issueId); } // Index article. import('classes.search.ArticleSearchIndex'); ArticleSearchIndex::indexArticleMetadata($article); // Import the references list. $citationDao =& DAORegistry::getDAO('CitationDAO'); $rawCitationList = $article->getCitations(); $citationDao->importCitations($request, ASSOC_TYPE_ARTICLE, $articleId, $rawCitationList); }
function handleAuthorNode(&$journal, &$authorNode, &$issue, &$section, &$article, &$errors) { $errors = array(); $journalSupportedLocales = array_keys($journal->getSupportedLocaleNames()); // => journal locales must be set up before $journalPrimaryLocale = $journal->getPrimaryLocale(); $author = new Author(); if ($node = $authorNode->getChildByName('firstname')) { $author->setFirstName($node->getValue()); } if ($node = $authorNode->getChildByName('middlename')) { $author->setMiddleName($node->getValue()); } if ($node = $authorNode->getChildByName('lastname')) { $author->setLastName($node->getValue()); } for ($index = 0; $node = $authorNode->getChildByName('affiliation', $index); $index++) { $locale = $node->getAttribute('locale'); if ($locale == '') { $locale = $journalPrimaryLocale; } elseif (!in_array($locale, $journalSupportedLocales)) { $errors[] = array('plugins.importexport.native.import.error.articleAuthorAffiliationLocaleUnsupported', array('authorFullName' => $author->getFullName(), 'articleTitle' => $article->getLocalizedTitle(), 'issueTitle' => $issue->getIssueIdentification(), 'locale' => $locale)); return false; } $author->setAffiliation($node->getValue(), $locale); } if ($node = $authorNode->getChildByName('country')) { $author->setCountry($node->getValue()); } if ($node = $authorNode->getChildByName('email')) { $author->setEmail($node->getValue()); } if ($node = $authorNode->getChildByName('url')) { $author->setUrl($node->getValue()); } for ($index = 0; $node = $authorNode->getChildByName('competing_interests', $index); $index++) { $locale = $node->getAttribute('locale'); if ($locale == '') { $locale = $journalPrimaryLocale; } elseif (!in_array($locale, $journalSupportedLocales)) { $errors[] = array('plugins.importexport.native.import.error.articleAuthorCompetingInterestsLocaleUnsupported', array('authorFullName' => $author->getFullName(), 'articleTitle' => $article->getLocalizedTitle(), 'issueTitle' => $issue->getIssueIdentification(), 'locale' => $locale)); return false; } $author->setCompetingInterests($node->getValue(), $locale); } for ($index = 0; $node = $authorNode->getChildByName('biography', $index); $index++) { $locale = $node->getAttribute('locale'); if ($locale == '') { $locale = $journalPrimaryLocale; } elseif (!in_array($locale, $journalSupportedLocales)) { $errors[] = array('plugins.importexport.native.import.error.articleAuthorBiographyLocaleUnsupported', array('authorFullName' => $author->getFullName(), 'articleTitle' => $article->getLocalizedTitle(), 'issueTitle' => $issue->getIssueIdentification(), 'locale' => $locale)); return false; } $author->setBiography($node->getValue(), $locale); } $author->setPrimaryContact($authorNode->getAttribute('primary_contact') === 'true' ? 1 : 0); $article->addAuthor($author); // instead of $author->setSequence($index+1); return true; }
/** * Internal function to return an Author object from a row. * @param $row array * @return Author */ function &_returnAuthorFromRow(&$row) { $author = new Author(); $author->setId($row['author_id']); $author->setPaperId($row['paper_id']); $author->setFirstName($row['first_name']); $author->setMiddleName($row['middle_name']); $author->setLastName($row['last_name']); $author->setAffiliation($row['affiliation']); $author->setCountry($row['country']); $author->setEmail($row['email']); $author->setUrl($row['url']); $author->setPrimaryContact($row['primary_contact']); $author->setSequence($row['seq']); $this->getDataObjectSettings('paper_author_settings', 'author_id', $row['author_id'], $author); HookRegistry::call('AuthorDAO::_returnAuthorFromRow', array(&$author, &$row)); return $author; }
/** * Save changes to article. * @return int the article ID */ function execute() { $articleDao =& DAORegistry::getDAO('ArticleDAO'); $authorDao =& DAORegistry::getDAO('AuthorDAO'); $sectionDao =& DAORegistry::getDAO('SectionDAO'); // Update article $article =& $this->article; $article->setTitle($this->getData('title'), null); // Localized $section =& $sectionDao->getSection($article->getSectionId()); $article->setAbstract($this->getData('abstract'), null); // Localized import('file.PublicFileManager'); $publicFileManager = new PublicFileManager(); if ($publicFileManager->uploadedFileExists('coverPage')) { $journal = Request::getJournal(); $originalFileName = $publicFileManager->getUploadedFileName('coverPage'); $newFileName = 'cover_article_' . $this->getData('articleId') . '_' . $this->getFormLocale() . '.' . $publicFileManager->getExtension($originalFileName); $publicFileManager->uploadJournalFile($journal->getId(), 'coverPage', $newFileName); $article->setOriginalFileName($publicFileManager->truncateFileName($originalFileName, 127), $this->getFormLocale()); $article->setFileName($newFileName, $this->getFormLocale()); // Store the image dimensions. list($width, $height) = getimagesize($publicFileManager->getJournalFilesPath($journal->getId()) . '/' . $newFileName); $article->setWidth($width, $this->getFormLocale()); $article->setHeight($height, $this->getFormLocale()); } $article->setCoverPageAltText($this->getData('coverPageAltText'), null); // Localized $showCoverPage = array_map(create_function('$arrayElement', 'return (int)$arrayElement;'), (array) $this->getData('showCoverPage')); foreach (array_keys($this->getData('coverPageAltText')) as $locale) { if (!array_key_exists($locale, $showCoverPage)) { $showCoverPage[$locale] = 0; } } $article->setShowCoverPage($showCoverPage, null); // Localized $hideCoverPageToc = array_map(create_function('$arrayElement', 'return (int)$arrayElement;'), (array) $this->getData('hideCoverPageToc')); foreach (array_keys($this->getData('coverPageAltText')) as $locale) { if (!array_key_exists($locale, $hideCoverPageToc)) { $hideCoverPageToc[$locale] = 0; } } $article->setHideCoverPageToc($hideCoverPageToc, null); // Localized $hideCoverPageAbstract = array_map(create_function('$arrayElement', 'return (int)$arrayElement;'), (array) $this->getData('hideCoverPageAbstract')); foreach (array_keys($this->getData('coverPageAltText')) as $locale) { if (!array_key_exists($locale, $hideCoverPageAbstract)) { $hideCoverPageAbstract[$locale] = 0; } } $article->setHideCoverPageAbstract($hideCoverPageAbstract, null); // Localized $article->setDiscipline($this->getData('discipline'), null); // Localized $article->setSubjectClass($this->getData('subjectClass'), null); // Localized $article->setSubject($this->getData('subject'), null); // Localized $article->setCoverageGeo($this->getData('coverageGeo'), null); // Localized $article->setCoverageChron($this->getData('coverageChron'), null); // Localized $article->setCoverageSample($this->getData('coverageSample'), null); // Localized $article->setType($this->getData('type'), null); // Localized $article->setLanguage($this->getData('language')); // Localized $article->setSponsor($this->getData('sponsor'), null); // Localized $article->setCitations($this->getData('citations')); if ($this->isEditor) { $article->setHideAuthor($this->getData('hideAuthor') ? $this->getData('hideAuthor') : 0); } // Update authors $authors = $this->getData('authors'); for ($i = 0, $count = count($authors); $i < $count; $i++) { if ($authors[$i]['authorId'] > 0) { // Update an existing author $author =& $article->getAuthor($authors[$i]['authorId']); $isExistingAuthor = true; } else { // Create a new author $author = new Author(); $isExistingAuthor = false; } if ($author != null) { $author->setFirstName($authors[$i]['firstName']); $author->setMiddleName($authors[$i]['middleName']); $author->setLastName($authors[$i]['lastName']); $author->setAffiliation($authors[$i]['affiliation']); $author->setCountry($authors[$i]['country']); $author->setEmail($authors[$i]['email']); $author->setUrl($authors[$i]['url']); if (array_key_exists('competingInterests', $authors[$i])) { $author->setCompetingInterests($authors[$i]['competingInterests'], null); // Localized } $author->setBiography($authors[$i]['biography'], null); // Localized $author->setPrimaryContact($this->getData('primaryContact') == $i ? 1 : 0); $author->setSequence($authors[$i]['seq']); if ($isExistingAuthor == false) { $article->addAuthor($author); } } } // Remove deleted authors $deletedAuthors = explode(':', $this->getData('deletedAuthors')); for ($i = 0, $count = count($deletedAuthors); $i < $count; $i++) { $article->removeAuthor($deletedAuthors[$i]); } parent::execute(); // Save the article $articleDao->updateArticle($article); // Update search index import('search.ArticleSearchIndex'); ArticleSearchIndex::indexArticleMetadata($article); return $article->getId(); }
/** * Save changes to article. * @return int the article ID */ function execute() { $articleDao =& DAORegistry::getDAO('ArticleDAO'); $authorDao =& DAORegistry::getDAO('AuthorDAO'); // Update article $article =& $this->article; $article->setTitle($this->getData('title'), null); // Localized $article->setAbstract($this->getData('abstract'), null); // Localized $article->setDiscipline($this->getData('discipline'), null); // Localized $article->setSubjectClass($this->getData('subjectClass'), null); // Localized $article->setSubject($this->getData('subject'), null); // Localized $article->setCoverageGeo($this->getData('coverageGeo'), null); // Localized $article->setCoverageChron($this->getData('coverageChron'), null); // Localized $article->setCoverageSample($this->getData('coverageSample'), null); // Localized $article->setType($this->getData('type'), null); // Localized $article->setLanguage($this->getData('language')); $article->setSponsor($this->getData('sponsor'), null); // Localized $article->setCitations($this->getData('citations')); if ($article->getSubmissionProgress() <= $this->step) { $article->stampStatusModified(); $article->setSubmissionProgress($this->step + 1); } // Update authors $authors = $this->getData('authors'); for ($i = 0, $count = count($authors); $i < $count; $i++) { if ($authors[$i]['authorId'] > 0) { // Update an existing author $author =& $article->getAuthor($authors[$i]['authorId']); $isExistingAuthor = true; } else { // Create a new author $author = new Author(); $isExistingAuthor = false; } if ($author != null) { $author->setArticleId($article->getId()); $author->setFirstName($authors[$i]['firstName']); $author->setMiddleName($authors[$i]['middleName']); $author->setLastName($authors[$i]['lastName']); $author->setAffiliation($authors[$i]['affiliation']); $author->setCountry($authors[$i]['country']); $author->setEmail($authors[$i]['email']); $author->setUrl($authors[$i]['url']); if (array_key_exists('competingInterests', $authors[$i])) { $author->setCompetingInterests($authors[$i]['competingInterests'], null); } $author->setBiography($authors[$i]['biography'], null); $author->setPrimaryContact($this->getData('primaryContact') == $i ? 1 : 0); $author->setSequence($authors[$i]['seq']); if ($isExistingAuthor == false) { $article->addAuthor($author); } } unset($author); } // Remove deleted authors $deletedAuthors = explode(':', $this->getData('deletedAuthors')); for ($i = 0, $count = count($deletedAuthors); $i < $count; $i++) { $article->removeAuthor($deletedAuthors[$i]); } parent::execute(); // Save the article $articleDao->updateArticle($article); return $this->articleId; }
/** * Save settings. */ function execute($editArticleId) { $this->editArticleID = $editArticleId; $articleDao =& DAORegistry::getDAO('ArticleDAO'); $signoffDao =& DAORegistry::getDAO('SignoffDAO'); $sectionEditorSubmissionDao =& DAORegistry::getDAO('SectionEditorSubmissionDAO'); $application =& PKPApplication::getApplication(); $request =& $application->getRequest(); $user =& $request->getUser(); $router =& $request->getRouter(); $journal =& $router->getContext($request); $article = new Article(); $article->setLocale($journal->getPrimaryLocale()); // FIXME in bug #5543 $article->setUserId($user->getId()); $article->setJournalId($journal->getId()); $article->setSectionId($this->getData('sectionId')); $article->setLanguage(String::substr($journal->getPrimaryLocale(), 0, 2)); $article->setTitle($this->getData('title'), null); // Localized //add Original Journal to Abstract $orig_journal = $this->getData('originalJournal'); $abstr = $this->getData('abstract'); foreach (array_keys($abstr) as $abs_key) { $abstr[$abs_key] .= ' <p id="originalPub"> ' . $orig_journal . ' </p> '; // $abstr[$abs_key] .= ' <p id="originalPub"> ' . $orig_journal[$abs_key]. ' </p> '; //OriginalJournal in EditPlugin only a string and not an array... $this->setData('abstract', $abstr); } $article->setAbstract($this->getData('abstract'), null); // Localized $article->setDiscipline($this->getData('discipline'), null); // Localized $article->setSubjectClass($this->getData('subjectClass'), null); // Localized $article->setSubject($this->getData('subject'), null); // Localized $article->setCoverageGeo($this->getData('coverageGeo'), null); // Localized $article->setCoverageChron($this->getData('coverageChron'), null); // Localized $article->setCoverageSample($this->getData('coverageSample'), null); // Localized $article->setType($this->getData('type'), null); // Localized $article->setSponsor($this->getData('sponsor'), null); // Localized $article->setCitations($this->getData('citations')); $article->setPages($this->getData('pages')); // Set some default values so the ArticleDAO doesn't complain when adding this article $article->setDateSubmitted(Core::getCurrentDate()); $article->setStatus(STATUS_PUBLISHED); $article->setSubmissionProgress(0); $article->stampStatusModified(); $article->setCurrentRound(1); $article->setFastTracked(1); $article->setHideAuthor(0); $article->setCommentsStatus(0); // As article has an ID already set it $article->setId($this->editArticleID); $articleId = $this->editArticleID; //delete prior Authors to prevent from double saving the same authors $authorDao =& DAORegistry::getDAO('AuthorDAO'); $authorDao->deleteAuthorsByArticle($articleId); // Add authors $authors = $this->getData('authors'); for ($i = 0, $count = count($authors); $i < $count; $i++) { if ($authors[$i]['authorId'] > 0) { // Update an existing author $author =& $article->getAuthor($authors[$i]['authorId']); $isExistingAuthor = true; } else { // Create a new author $author = new Author(); $isExistingAuthor = false; } if ($author != null) { $author->setSubmissionId($articleId); $author->setFirstName($authors[$i]['firstName']); $author->setMiddleName($authors[$i]['middleName']); $author->setLastName($authors[$i]['lastName']); if (array_key_exists('affiliation', $authors[$i])) { $author->setAffiliation($authors[$i]['affiliation'], null); } $author->setCountry($authors[$i]['country']); $author->setEmail($authors[$i]['email']); $author->setUrl($authors[$i]['url']); if (array_key_exists('competingInterests', $authors[$i])) { $author->setCompetingInterests($authors[$i]['competingInterests'], null); } $author->setBiography($authors[$i]['biography'], null); $author->setPrimaryContact($this->getData('primaryContact') == $i ? 1 : 0); $author->setSequence($authors[$i]['seq']); if ($isExistingAuthor == false) { $article->addAuthor($author); } } } // Check whether the user gave a handle and create a handleSubmissionFile in case $submissionHandle = $this->getData('submissionHandle'); $handleSubmissionFileId; $handleCheck = FALSE; //import FileManager before creating files because otherwise naming of the copied files failes import('classes.file.ArticleFileManager'); foreach (array_keys($submissionHandle) as $locale) { if (!empty($submissionHandle[$locale])) { $this->deleteOldFile("submission/original", $articleId); // $this->deleteOldFile("submission/copyedit", $articleId); $handleCheck = TRUE; $handleSubmissionId = $this->createHandleTXTFile($submissionHandle[$locale], $articleId, 'submission'); $handleSubmissionPDFId = $this->createHandlePDF($submissionHandle[$locale], $articleId, 'submission'); //Add the handle submission files as galley $this->setGalley($articleId, $handleSubmissionPDFId, $locale, 'application/pdf'); } if ($handleCheck == TRUE) { if ($locale == $journal->getPrimaryLocale()) { $article->setSubmissionFileId($handleSubmissionPDFId); $article->SetReviewFileId($handleSubmissionPDFId); } // Update file search index import('classes.search.ArticleSearchIndex'); if (isset($galley)) { ArticleSearchIndex::updateFileIndex($galley->getArticleId(), ARTICLE_SEARCH_GALLEY_FILE, $galley->getFileId()); } } } // Add the submission files as galleys import('classes.file.TemporaryFileManager'); import('classes.file.ArticleFileManager'); $tempFileIds = $this->getData('tempFileId'); $temporaryFileManager = new TemporaryFileManager(); $articleFileManager = new ArticleFileManager($articleId); $tempFileCheck = FALSE; foreach (array_keys($tempFileIds) as $locale) { $temporaryFile = $temporaryFileManager->getFile($tempFileIds[$locale], $user->getId()); $fileId = null; if ($temporaryFile) { $this->deleteOldFile("submission/original", $articleId); $this->deleteOldFile("submission/copyedit", $articleId); $tempFileCheck = TRUE; $fileId = $articleFileManager->temporaryFileToArticleFile($temporaryFile, ARTICLE_FILE_SUBMISSION); $fileType = $temporaryFile->getFileType(); $this->setGalley($articleId, $fileId, $locale, $fileType); // $galley =& $this->setGalley($articleId, $fileId, $locale, $fileType); } if ($tempFileCheck == TRUE) { if ($locale == $journal->getPrimaryLocale()) { $article->setSubmissionFileId($fileId); $article->SetReviewFileId($fileId); } // Update file search index import('classes.search.ArticleSearchIndex'); if (isset($galley)) { ArticleSearchIndex::updateFileIndex($galley->getArticleId(), ARTICLE_SEARCH_GALLEY_FILE, $galley->getFileId()); } } } //Check whether the user gave a handle and create handleSupplFile in case $supplHandle = $this->getData('supplHandle'); $handleSuppFileId = null; foreach (array_keys($supplHandle) as $locale) { if (!empty($supplHandle[$locale])) { $this->deleteOldFile("supp", $articleId); $handleSuppFileId = $this->createHandleTXTFile($supplHandle[$locale], $articleId, 'supplementary'); $handleSupplPDFFileID = $this->createHandlePDF($submissionHandle[$locale], $articleId, 'supplementary'); } } //Add uploaded Supplementary file $tempSupplFileIds = $this->getData('tempSupplFileId'); foreach (array_keys($tempSupplFileIds) as $locale) { $temporaryFile = $temporaryFileManager->getFile($tempSupplFileIds[$locale], $user->getId()); $fileId = null; if ($temporaryFile) { $this->deleteOldFile("supp", $articleId); $fileId = $articleFileManager->temporaryFileToArticleFile($temporaryFile, ARTICLE_FILE_SUPP); $fileType = $temporaryFile->getFileType(); } } // Designate this as the review version by default. /*$authorSubmissionDao =& DAORegistry::getDAO('AuthorSubmissionDAO'); $authorSubmission =& $authorSubmissionDao->getAuthorSubmission($articleId); import('classes.submission.author.AuthorAction'); AuthorAction::designateReviewVersion($authorSubmission, true); */ // Accept the submission /*$sectionEditorSubmission =& $sectionEditorSubmissionDao->getSectionEditorSubmission($articleId); $articleFileManager = new ArticleFileManager($articleId); $sectionEditorSubmission->setReviewFile($articleFileManager->getFile($article->getSubmissionFileId())); import('classes.submission.sectionEditor.SectionEditorAction'); SectionEditorAction::recordDecision($sectionEditorSubmission, SUBMISSION_EDITOR_DECISION_ACCEPT); */ // Create signoff infrastructure $copyeditInitialSignoff = $signoffDao->build('SIGNOFF_COPYEDITING_INITIAL', ASSOC_TYPE_ARTICLE, $articleId); $copyeditAuthorSignoff = $signoffDao->build('SIGNOFF_COPYEDITING_AUTHOR', ASSOC_TYPE_ARTICLE, $articleId); $copyeditFinalSignoff = $signoffDao->build('SIGNOFF_COPYEDITING_FINAL', ASSOC_TYPE_ARTICLE, $articleId); $copyeditInitialSignoff->setUserId(0); $copyeditAuthorSignoff->setUserId($user->getId()); $copyeditFinalSignoff->setUserId(0); $signoffDao->updateObject($copyeditInitialSignoff); $signoffDao->updateObject($copyeditAuthorSignoff); $signoffDao->updateObject($copyeditFinalSignoff); $layoutSignoff = $signoffDao->build('SIGNOFF_LAYOUT', ASSOC_TYPE_ARTICLE, $articleId); $layoutSignoff->setUserId(0); $signoffDao->updateObject($layoutSignoff); $proofAuthorSignoff = $signoffDao->build('SIGNOFF_PROOFREADING_AUTHOR', ASSOC_TYPE_ARTICLE, $articleId); $proofProofreaderSignoff = $signoffDao->build('SIGNOFF_PROOFREADING_PROOFREADER', ASSOC_TYPE_ARTICLE, $articleId); $proofLayoutEditorSignoff = $signoffDao->build('SIGNOFF_PROOFREADING_LAYOUT', ASSOC_TYPE_ARTICLE, $articleId); $proofAuthorSignoff->setUserId($user->getId()); $proofProofreaderSignoff->setUserId(0); $proofLayoutEditorSignoff->setUserId(0); $signoffDao->updateObject($proofAuthorSignoff); $signoffDao->updateObject($proofProofreaderSignoff); $signoffDao->updateObject($proofLayoutEditorSignoff); import('classes.author.form.submit.AuthorSubmitForm'); AuthorSubmitForm::assignEditors($article); $articleDao->updateArticle($article); // Add to end of editing queue import('classes.submission.editor.EditorAction'); if (isset($galley)) { EditorAction::expediteSubmission($article); } // As the article already has an issue, just get it from database $issueDao =& DAORegistry::getDAO('IssueDAO'); $issue =& $issueDao->getIssueByArticleId($this->editArticleID); $issueId = $issue->getIssueId(); //$this->scheduleForPublication($articleId, $issueId); // Index article. import('classes.search.ArticleSearchIndex'); ArticleSearchIndex::indexArticleMetadata($article); // Import the references list. $citationDao =& DAORegistry::getDAO('CitationDAO'); $rawCitationList = $article->getCitations(); $citationDao->importCitations($request, ASSOC_TYPE_ARTICLE, $articleId, $rawCitationList); }
/** * Save submissionContributor * @see Form::execute() * @see Form::execute() */ function execute() { $authorDao =& DAORegistry::getDAO('AuthorDAO'); $monograph = $this->getMonograph(); $submissionContributor =& $this->getSubmissionContributor(); if (!$submissionContributor) { // this is a new submission contributor $submissionContributor = new Author(); $submissionContributor->setMonographId($monograph->getId()); $existingSubmissionContributor = false; } else { $existingSubmissionContributor = true; } assert($monograph->getId() == $submissionContributor->getMonographId()); $submissionContributor->setFirstName($this->getData('firstName')); $submissionContributor->setMiddleName($this->getData('middleName')); $submissionContributor->setLastName($this->getData('lastName')); $submissionContributor->setAffiliation($this->getData('affiliation'), Locale::getLocale()); // localized $submissionContributor->setCountry($this->getData('country')); $submissionContributor->setEmail($this->getData('email')); $submissionContributor->setUrl($this->getData('url')); $submissionContributor->setUserGroupId($this->getData('userGroupId')); $submissionContributor->setBiography($this->getData('biography'), Locale::getLocale()); // localized $submissionContributor->setPrimaryContact($this->getData('primaryContact') ? true : false); if ($existingSubmissionContributor) { $authorDao->updateAuthor($submissionContributor); $authorId = $submissionContributor->getId(); } else { $authorId = $authorDao->insertAuthor($submissionContributor); } return $authorId; }
function handleAuthorNode(&$conference, &$schedConf, &$authorNode, &$track, &$paper, &$errors) { $errors = array(); $conferenceSupportedLocales = array_keys($conference->getSupportedLocaleNames()); // => conference locales must be set up before $conferencePrimaryLocale = $conference->getPrimaryLocale(); $author = new Author(); if ($node = $authorNode->getChildByName('firstname')) { $author->setFirstName($node->getValue()); } if ($node = $authorNode->getChildByName('middlename')) { $author->setMiddleName($node->getValue()); } if ($node = $authorNode->getChildByName('lastname')) { $author->setLastName($node->getValue()); } if ($node = $authorNode->getChildByName('affiliation')) { $author->setAffiliation($node->getValue()); } if ($node = $authorNode->getChildByName('country')) { $author->setCountry($node->getValue()); } if ($node = $authorNode->getChildByName('email')) { $author->setEmail($node->getValue()); } if ($node = $authorNode->getChildByName('url')) { $author->setUrl($node->getValue()); } for ($index = 0; $node = $authorNode->getChildByName('biography', $index); $index++) { $locale = $node->getAttribute('locale'); if ($locale == '') { $locale = $conferencePrimaryLocale; } elseif (!in_array($locale, $conferenceSupportedLocales)) { $errors[] = array('plugins.importexport.native.import.error.paperAuthorBiographyLocaleUnsupported', array('authorFullName' => $author->getFullName(), 'paperTitle' => $paper->getLocalizedTitle(), 'locale' => $locale)); return false; } $author->setBiography($node->getValue(), $locale); } $author->setPrimaryContact($authorNode->getAttribute('primary_contact') === 'true' ? 1 : 0); $paper->addAuthor($author); // instead of $author->setSequence($index+1); return true; }
/** * Save changes to paper. * @return int the paper ID */ function execute() { $paperDao = DAORegistry::getDAO('PaperDAO'); if (isset($this->paper)) { $reviewMode = $this->paper->getReviewMode(); // Update existing paper $this->paper->setTrackId($this->getData('trackId')); $this->paper->setLocale($this->getData('locale')); $this->paper->setCommentsToDirector($this->getData('commentsToDirector')); $this->paper->setData('sessionType', $this->getData('sessionType')); if ($this->paper->getSubmissionProgress() <= $this->step) { $this->paper->stampStatusModified(); if ($reviewMode == REVIEW_MODE_ABSTRACTS_ALONE) { $this->paper->setSubmissionProgress($this->step + 2); } else { $this->paper->setSubmissionProgress($this->step + 1); } } $paperDao->updatePaper($this->paper); } else { // Insert new paper $conference =& Request::getConference(); $schedConf =& Request::getSchedConf(); $user =& Request::getUser(); $this->paper = new Paper(); $this->paper->setLocale($this->getData('locale')); $this->paper->setUserId($user->getId()); $this->paper->setSchedConfId($schedConf->getId()); $this->paper->setTrackId($this->getData('trackId')); $this->paper->stampStatusModified(); $reviewMode = $schedConf->getSetting('reviewMode'); $this->paper->setReviewMode($reviewMode); $this->paper->setLanguage(String::substr($this->paper->getLocale(), 0, 2)); $this->paper->setCommentsToDirector($this->getData('commentsToDirector')); switch ($reviewMode) { case REVIEW_MODE_ABSTRACTS_ALONE: case REVIEW_MODE_BOTH_SEQUENTIAL: $this->paper->setSubmissionProgress($this->step + 2); $this->paper->setCurrentRound(REVIEW_ROUND_ABSTRACT); break; case REVIEW_MODE_PRESENTATIONS_ALONE: case REVIEW_MODE_BOTH_SIMULTANEOUS: $this->paper->setSubmissionProgress($this->step + 1); $this->paper->setCurrentRound(REVIEW_ROUND_PRESENTATION); break; } $this->paper->setData('sessionType', $this->getData('sessionType')); $paperDao->insertPaper($this->paper); $this->paperId = $this->paper->getPaperId(); // Set user to initial author $authorDao = DAORegistry::getDAO('AuthorDAO'); /* @var $authorDao AuthorDAO */ $user =& Request::getUser(); $author = new Author(); $author->setSubmissionId($this->paperId); $author->setFirstName($user->getFirstName()); $author->setMiddleName($user->getMiddleName()); $author->setLastName($user->getLastName()); $author->setAffiliation($user->getAffiliation(null), null); $author->setCountry($user->getCountry()); $author->setEmail($user->getEmail()); $author->setUrl($user->getUrl()); $author->setBiography($user->getBiography(null), null); $author->setPrimaryContact(1); $authorDao->insertObject($author); } return $this->paperId; }
/** * Save changes to article. * @param $request PKPRequest * @return int the article ID */ function execute(&$request) { $articleDao =& DAORegistry::getDAO('ArticleDAO'); $authorDao =& DAORegistry::getDAO('AuthorDAO'); $sectionDao =& DAORegistry::getDAO('SectionDAO'); $citationDao =& DAORegistry::getDAO('CitationDAO'); /* @var $citationDao CitationDAO */ $article =& $this->article; // Retrieve the previous citation list for comparison. $previousRawCitationList = $article->getCitations(); // Update article $article->setTitle($this->getData('title'), null); // Localized $section =& $sectionDao->getSection($article->getSectionId()); $article->setAbstract($this->getData('abstract'), null); // Localized import('classes.file.PublicFileManager'); $publicFileManager = new PublicFileManager(); if ($publicFileManager->uploadedFileExists(COVER_PAGE_IMAGE_NAME)) { $journal = Request::getJournal(); $originalFileName = $publicFileManager->getUploadedFileName(COVER_PAGE_IMAGE_NAME); $type = $publicFileManager->getUploadedFileType(COVER_PAGE_IMAGE_NAME); $newFileName = 'cover_article_' . $this->article->getId() . '_' . $this->getFormLocale() . $publicFileManager->getImageExtension($type); $publicFileManager->uploadJournalFile($journal->getId(), COVER_PAGE_IMAGE_NAME, $newFileName); $article->setOriginalFileName($publicFileManager->truncateFileName($originalFileName, 127), $this->getFormLocale()); $article->setFileName($newFileName, $this->getFormLocale()); // Store the image dimensions. list($width, $height) = getimagesize($publicFileManager->getJournalFilesPath($journal->getId()) . '/' . $newFileName); $article->setWidth($width, $this->getFormLocale()); $article->setHeight($height, $this->getFormLocale()); } $article->setCoverPageAltText($this->getData('coverPageAltText'), null); // Localized $showCoverPage = array_map(create_function('$arrayElement', 'return (int)$arrayElement;'), (array) $this->getData('showCoverPage')); foreach (array_keys($this->getData('coverPageAltText')) as $locale) { if (!array_key_exists($locale, $showCoverPage)) { $showCoverPage[$locale] = 0; } } $article->setShowCoverPage($showCoverPage, null); // Localized $hideCoverPageToc = array_map(create_function('$arrayElement', 'return (int)$arrayElement;'), (array) $this->getData('hideCoverPageToc')); foreach (array_keys($this->getData('coverPageAltText')) as $locale) { if (!array_key_exists($locale, $hideCoverPageToc)) { $hideCoverPageToc[$locale] = 0; } } $article->setHideCoverPageToc($hideCoverPageToc, null); // Localized $hideCoverPageAbstract = array_map(create_function('$arrayElement', 'return (int)$arrayElement;'), (array) $this->getData('hideCoverPageAbstract')); foreach (array_keys($this->getData('coverPageAltText')) as $locale) { if (!array_key_exists($locale, $hideCoverPageAbstract)) { $hideCoverPageAbstract[$locale] = 0; } } $article->setHideCoverPageAbstract($hideCoverPageAbstract, null); // Localized $article->setDiscipline($this->getData('discipline'), null); // Localized $article->setSubjectClass($this->getData('subjectClass'), null); // Localized $article->setSubject($this->getData('subject'), null); // Localized $article->setCoverageGeo($this->getData('coverageGeo'), null); // Localized $article->setCoverageChron($this->getData('coverageChron'), null); // Localized $article->setCoverageSample($this->getData('coverageSample'), null); // Localized $article->setType($this->getData('type'), null); // Localized $article->setLanguage($this->getData('language')); // Localized $article->setSponsor($this->getData('sponsor'), null); // Localized $article->setCitations($this->getData('citations')); if ($this->isEditor) { $article->setHideAuthor($this->getData('hideAuthor') ? $this->getData('hideAuthor') : 0); } // consider the additional field names from the public identifer plugins import('classes.plugins.PubIdPluginHelper'); $pubIdPluginHelper = new PubIdPluginHelper(); $pubIdPluginHelper->execute($this, $article); // Update authors $authors = $this->getData('authors'); for ($i = 0, $count = count($authors); $i < $count; $i++) { if ($authors[$i]['authorId'] > 0) { // Update an existing author $author =& $authorDao->getAuthor($authors[$i]['authorId'], $article->getId()); $isExistingAuthor = true; } else { // Create a new author if (checkPhpVersion('5.0.0')) { // *5488* PHP4 Requires explicit instantiation-by-reference $author = new Author(); } else { $author =& new Author(); } $isExistingAuthor = false; } if ($author != null) { $author->setSubmissionId($article->getId()); $author->setFirstName($authors[$i]['firstName']); $author->setMiddleName($authors[$i]['middleName']); $author->setLastName($authors[$i]['lastName']); $author->setAffiliation($authors[$i]['affiliation'], null); // Localized $author->setCountry($authors[$i]['country']); $author->setEmail($authors[$i]['email']); $author->setData('orcid', $authors[$i]['orcid']); $author->setUrl($authors[$i]['url']); if (array_key_exists('competingInterests', $authors[$i])) { $author->setCompetingInterests($authors[$i]['competingInterests'], null); // Localized } $author->setBiography($authors[$i]['biography'], null); // Localized $author->setPrimaryContact($this->getData('primaryContact') == $i ? 1 : 0); $author->setSequence($authors[$i]['seq']); HookRegistry::call('Submission::Form::MetadataForm::Execute', array(&$author, &$authors[$i])); if ($isExistingAuthor) { $authorDao->updateAuthor($author); } else { $authorDao->insertAuthor($author); } unset($author); } } // Remove deleted authors $deletedAuthors = preg_split('/:/', $this->getData('deletedAuthors'), -1, PREG_SPLIT_NO_EMPTY); for ($i = 0, $count = count($deletedAuthors); $i < $count; $i++) { $authorDao->deleteAuthorById($deletedAuthors[$i], $article->getId()); } if ($this->isEditor) { $article->setCopyrightHolder($this->getData('copyrightHolder'), null); $article->setCopyrightYear($this->getData('copyrightYear')); $article->setLicenseURL($this->getData('licenseURL')); } parent::execute(); // Save the article $articleDao->updateArticle($article); // Update search index import('classes.search.ArticleSearchIndex'); $articleSearchIndex = new ArticleSearchIndex(); $articleSearchIndex->articleMetadataChanged($article); $articleSearchIndex->articleChangesFinished(); // Update references list if it changed. $rawCitationList = $article->getCitations(); if ($previousRawCitationList != $rawCitationList) { $citationDao->importCitations($request, ASSOC_TYPE_ARTICLE, $article->getId(), $rawCitationList); } return $article->getId(); }
function importArticles() { assert($this->xml->name == 'articles'); $articleDAO =& DAORegistry::getDAO('ArticleDAO'); $articles = $articleDAO->getArticlesByJournalId($this->journal->getId()); $journalFileManager = new JournalFileManager($this->journal); $publicFileManager =& new PublicFileManager(); $this->nextElement(); while ($this->xml->name == 'article') { $articleXML = $this->getCurrentElementAsDom(); $article = new Article(); $article->setJournalId($this->journal->getId()); $article->setUserId($this->idTranslationTable->resolve(INTERNAL_TRANSFER_OBJECT_USER, (int) $articleXML->userId)); $article->setSectionId($this->idTranslationTable->resolve(INTERNAL_TRANSFER_OBJECT_SECTION, (int) $articleXML->sectionId)); $article->setLocale((string) $articleXML->locale); $article->setLanguage((string) $articleXML->language); $article->setCommentsToEditor((string) $articleXML->commentsToEditor); $article->setCitations((string) $articleXML->citations); $article->setDateSubmitted((string) $articleXML->dateSubmitted); $article->setDateStatusModified((string) $articleXML->dateStatusModified); $article->setLastModified((string) $articleXML->lastModified); $article->setStatus((int) $articleXML->status); $article->setSubmissionProgress((int) $articleXML->submissionProgress); $article->setCurrentRound((int) $articleXML->currentRound); $article->setPages((string) $articleXML->pages); $article->setFastTracked((int) $articleXML->fastTracked); $article->setHideAuthor((int) $articleXML->hideAuthor); $article->setCommentsStatus((int) $articleXML->commentsStatus); $articleDAO->insertArticle($article); $oldArticleId = (int) $articleXML->oldId; $this->restoreDataObjectSettings($articleDAO, $articleXML->settings, 'article_settings', 'article_id', $article->getId()); $article =& $articleDAO->getArticle($article->getId()); // Reload article with restored settings $covers = $article->getFileName(null); if ($covers) { foreach ($covers as $locale => $oldCoverFileName) { $sourceFile = $this->publicFolderPath . '/' . $oldCoverFileName; $extension = $publicFileManager->getExtension($oldCoverFileName); $destFile = 'cover_issue_' . $article->getId() . "_{$locale}.{$extension}"; $publicFileManager->copyJournalFile($this->journal->getId(), $sourceFile, $destFile); unlink($sourceFile); $article->setFileName($destFile, $locale); $articleDAO->updateArticle($article); } } $articleFileManager = new ArticleFileManager($article->getId()); $authorDAO =& DAORegistry::getDAO('AuthorDAO'); foreach ($articleXML->author as $authorXML) { $author = new Author(); $author->setArticleId($article->getId()); $author->setFirstName((string) $authorXML->firstName); $author->setMiddleName((string) $authorXML->middleName); $author->setLastName((string) $authorXML->lastName); $author->setSuffix((string) $authorXML->suffix); $author->setCountry((string) $authorXML->country); $author->setEmail((string) $authorXML->email); $author->setUrl((string) $authorXML->url); $author->setUserGroupId($this->idTranslationTable->resolve(INTERNAL_TRANSFER_OBJECT_GROUP, (int) $authorXML->userGroupId)); $author->setPrimaryContact((int) $authorXML->primaryContact); $author->setSequence((int) $authorXML->sequence); $authorDAO->insertAuthor($author); $this->restoreDataObjectSettings($authorDAO, $authorXML->settings, 'author_settings', 'author_id', $author->getId()); unset($author); } $articleEmailLogDAO =& DAORegistry::getDAO('ArticleEmailLogDAO'); $emailLogsXML = array(); foreach ($articleXML->emailLogs->emailLog as $emailLogXML) { array_unshift($emailLogsXML, $emailLogXML); } foreach ($emailLogsXML as $emailLogXML) { $emailLog = new ArticleEmailLogEntry(); $emailLog->setAssocType(ASSOC_TYPE_ARTICLE); $emailLog->setAssocId($article->getId()); $emailLog->setSenderId($this->idTranslationTable->resolve(INTERNAL_TRANSFER_OBJECT_USER, (int) $emailLogXML->senderId)); $emailLog->setDateSent((string) $emailLogXML->dateSent); $emailLog->setIPAddress((string) $emailLogXML->IPAddress); $emailLog->setEventType((int) $emailLogXML->eventType); $emailLog->setFrom((string) $emailLogXML->from); $emailLog->setRecipients((string) $emailLogXML->recipients); $emailLog->setCcs((string) $emailLogXML->ccs); $emailLog->setBccs((string) $emailLogXML->bccs); $emailLog->setSubject((string) $emailLogXML->subject); $emailLog->setBody((string) $emailLogXML->body); $articleEmailLogDAO->insertObject($emailLog); $this->idTranslationTable->register(INTERNAL_TRANSFER_OBJECT_ARTICLE_EMAIL_LOG, (int) $emailLogXML->oldId, $emailLog->getId()); } $articleFileDAO =& DAORegistry::getDAO('ArticleFileDAO'); foreach ($articleXML->articleFile as $articleFileXML) { try { $articleFile = new ArticleFile(); $articleFile->setArticleId($article->getId()); $articleFile->setSourceFileId((int) $articleFileXML->sourceFileId); $articleFile->setSourceRevision((int) $articleFileXML->sourceRevision); $articleFile->setRevision((int) $articleFileXML->revision); $articleFile->setFileName((string) $articleFileXML->fileName); $articleFile->setFileType((string) $articleFileXML->fileType); $articleFile->setFileSize((string) $articleFileXML->fileSize); $articleFile->setOriginalFileName((string) $articleFileXML->originalFileName); $articleFile->setFileStage((int) $articleFileXML->fileStage); $articleFile->setAssocId($this->idTranslationTable->resolve(INTERNAL_TRANSFER_OBJECT_ARTICLE_EMAIL_LOG, (int) $articleFileXML->assocId)); $articleFile->setDateUploaded((string) $articleFileXML->dateUploaded); $articleFile->setDateModified((string) $articleFileXML->dateModified); $articleFile->setRound((int) $articleFileXML->round); $articleFile->setViewable((int) $articleFileXML->viewable); $articleFileDAO->insertArticleFile($articleFile); $oldArticleFileId = (int) $articleFileXML->oldId; $oldFileName = $articleFile->getFileName(); $stagePath = $articleFileManager->fileStageToPath($articleFile->getFileStage()); $fileInTransferPackage = $this->journalFolderPath . "/articles/{$oldArticleId}/{$stagePath}/{$oldFileName}"; $newFileName = $articleFileManager->generateFilename($articleFile, $articleFile->getFileStage(), $articleFile->getOriginalFileName()); $newFilePath = "/articles/" . $article->getId() . "/{$stagePath}/{$newFileName}"; $journalFileManager->copyFile($fileInTransferPackage, $journalFileManager->filesDir . $newFilePath); unlink($fileInTransferPackage); $articleFileDAO->updateArticleFile($articleFile); $this->idTranslationTable->register(INTERNAL_TRANSFER_OBJECT_ARTICLE_FILE, $oldArticleFileId, $articleFile->getFileId()); } catch (Exception $e) { } } $articleFiles = $articleFileDAO->getArticleFilesByArticle($article->getId()); foreach ($articleFiles as $articleFile) { try { $articleFile->setSourceFileId($this->idTranslationTable->resolve(INTERNAL_TRANSFER_OBJECT_ARTICLE_FILE, $articleFile->getSourceFileId())); $articleFileDAO->updateArticleFile($articleFile); } catch (Exception $e) { } } $suppFileDAO =& DAORegistry::getDAO('SuppFileDAO'); foreach ($articleXML->suppFile as $suppFileXML) { $suppFile =& new SuppFile(); $suppFile->setArticleId($article->getId()); $suppFile->setRemoteURL((string) $suppFileXML->remoteURL); $suppFile->setFileId($this->idTranslationTable->resolve(INTERNAL_TRANSFER_OBJECT_ARTICLE_FILE, (int) $suppFileXML->fileId)); $suppFile->setType((string) $suppFileXML->type); $suppFile->setDateCreated((string) $suppFileXML->dateCreated); $suppFile->setLanguage((string) $suppFileXML->language); $suppFile->setShowReviewers((int) $suppFileXML->showReviewers); $suppFile->setDateSubmitted((string) $suppFileXML->dateSubmitted); $suppFile->setSequence((int) $suppFileXML->sequence); $suppFileDAO->insertSuppFile($suppFile); $this->restoreDataObjectSettings($suppFileDAO, $suppFileXML->settings, 'article_supp_file_settings', 'supp_id', $suppFile->getId()); } $articleCommentDAO =& DAORegistry::getDAO('ArticleCommentDAO'); foreach ($articleXML->articleComment as $articleCommentXML) { $articleComment = new ArticleComment(); $articleComment->setArticleId($article->getId()); $articleComment->setAssocId($article->getId()); $articleComment->setCommentType((int) $articleCommentXML->commentType); $articleComment->setRoleId((int) $articleCommentXML->roleId); $articleComment->setAuthorId($this->idTranslationTable->resolve(INTERNAL_TRANSFER_OBJECT_USER, (int) $articleCommentXML->authorId)); $articleComment->setCommentTitle((string) $articleCommentXML->commentTitle); $articleComment->setComments((string) $articleCommentXML->comments); $articleComment->setDatePosted((string) $articleCommentXML->datePosted); $articleComment->setDateModified((string) $articleCommentXML->dateModified); $articleComment->setViewable((int) $articleCommentXML->viewable); $articleCommentDAO->insertArticleComment($articleComment); } $articleGalleyDAO =& DAORegistry::getDAO('ArticleGalleyDAO'); foreach ($articleXML->articleGalley as $articleGalleyXML) { $articleGalley = null; if ($articleGalleyXML->htmlGalley == "1") { $articleGalley = new ArticleHTMLGalley(); } else { $articleGalley = new ArticleGalley(); } $articleGalley->setArticleId($article->getId()); $articleGalley->setLocale((string) $articleGalleyXML->locale); $articleGalley->setFileId($this->idTranslationTable->resolve(INTERNAL_TRANSFER_OBJECT_ARTICLE_FILE, (int) $articleGalleyXML->fileId)); $articleGalley->setLabel((string) $articleGalleyXML->label); $articleGalley->setSequence((int) $articleGalleyXML->sequence); $articleGalley->setRemoteURL((string) $articleGalleyXML->remoteURL); if ($articleGalley instanceof ArticleHTMLGalley) { $articleGalley->setStyleFileId($this->idTranslationTable->resolve(INTERNAL_TRANSFER_OBJECT_ARTICLE_FILE, (int) $articleGalleyXML->styleFileId)); } $articleGalleyDAO->insertGalley($articleGalley); if ($articleGalley instanceof ArticleHTMLGalley) { foreach ($articleGalleyXML->htmlGalleyImage as $articleGalleyImageXML) { $imageId = $this->idTranslationTable->resolve(INTERNAL_TRANSFER_OBJECT_ARTICLE_FILE, (int) $articleGalleyImageXML); $articleGalleyDAO->insertGalleyImage($articleGalley->getId(), $imageId); } } $this->restoreDataObjectSettings($articleGalleyDAO, $articleGalleyXML->settings, 'article_galley_settings', 'galley_id', $articleGalley->getId()); } $noteDAO =& DAORegistry::getDAO('NoteDAO'); foreach ($articleXML->articleNote as $articleNoteXML) { $articleNote = new Note(); $articleNote->setUserId($this->idTranslationTable->resolve(INTERNAL_TRANSFER_OBJECT_USER, (int) $articleNoteXML->userId)); $articleNote->setFileId($this->idTranslationTable->resolve(INTERNAL_TRANSFER_OBJECT_ARTICLE_FILE, (int) $articleNoteXML->fileId)); $articleNote->setAssocType(ASSOC_TYPE_ARTICLE); $articleNote->setAssocId($article->getId()); $articleNote->setDateCreated((string) $articleNoteXML->dateCreated); $articleNote->setDateModified((string) $articleNoteXML->dateModified); $articleNote->setContents((string) $articleNoteXML->contents); $articleNote->setTitle((string) $articleNoteXML->title); $noteDAO->insertObject($articleNote); } $editAssignmentDAO =& DAORegistry::getDAO('EditAssignmentDAO'); foreach ($articleXML->editAssignment as $editAssignmentXML) { $editAssignment = new EditAssignment(); $editAssignment->setArticleId($article->getId()); $editAssignment->setEditorId($this->idTranslationTable->resolve(INTERNAL_TRANSFER_OBJECT_USER, (int) $editAssignmentXML->editorId)); $editAssignment->setCanReview((int) $editAssignmentXML->canReview); $editAssignment->setCanEdit((int) $editAssignmentXML->canEdit); $editAssignment->setDateUnderway((string) $editAssignmentXML->dateUnderway); $editAssignment->setDateNotified((string) $editAssignmentXML->dateNotified); $editAssignmentDAO->insertEditAssignment($editAssignment); } $reviewAssignmentDAO =& DAORegistry::getDAO('ReviewAssignmentDAO'); $reviewFormResponseDAO =& DAORegistry::getDAO('ReviewFormResponseDAO'); foreach ($articleXML->reviewAssignment as $reviewAssignmentXML) { $reviewAssignment = new ReviewAssignment(); $reviewAssignment->setSubmissionId($article->getId()); $reviewAssignment->setReviewerId($this->idTranslationTable->resolve(INTERNAL_TRANSFER_OBJECT_USER, (int) $reviewAssignmentXML->reviewerId)); try { $reviewAssignment->setReviewerFileId($this->idTranslationTable->resolve(INTERNAL_TRANSFER_OBJECT_ARTICLE_FILE, (int) $reviewAssignmentXML->reviewerFileId)); } catch (Exception $e) { $this->logger->log("Arquivo do artigo {$oldArticleId} não encontrado. ID: " . (int) $reviewAssignmentXML->reviewerFileId . "\n"); } $reviewAssignment->setReviewFormId($this->idTranslationTable->resolve(INTERNAL_TRANSFER_OBJECT_REVIEW_FORM, (int) $reviewAssignmentXML->reviewFormId)); $reviewAssignment->setReviewRoundId((int) $reviewAssignmentXML->reviewRoundId); $reviewAssignment->setStageId((int) $reviewAssignmentXML->stageId); $reviewAssignment->setReviewerFullName((string) $reviewAssignmentXML->reviewerFullName); $reviewAssignment->setCompetingInterests((string) $reviewAssignmentXML->competingInterests); $reviewAssignment->setRegretMessage((string) $reviewAssignmentXML->regretMessage); $reviewAssignment->setRecommendation((string) $reviewAssignmentXML->recommendation); $reviewAssignment->setDateAssigned((string) $reviewAssignmentXML->dateAssigned); $reviewAssignment->setDateNotified((string) $reviewAssignmentXML->dateNotified); $reviewAssignment->setDateConfirmed((string) $reviewAssignmentXML->dateConfirmed); $reviewAssignment->setDateCompleted((string) $reviewAssignmentXML->dateCompleted); $reviewAssignment->setDateAcknowledged((string) $reviewAssignmentXML->dateAcknowledged); $reviewAssignment->setDateDue((string) $reviewAssignmentXML->dateDue); $reviewAssignment->setDateResponseDue((string) $reviewAssignmentXML->dateResponseDue); $reviewAssignment->setLastModified((string) $reviewAssignmentXML->lastModified); $reviewAssignment->setDeclined((int) $reviewAssignmentXML->declined); $reviewAssignment->setReplaced((int) $reviewAssignmentXML->replaced); $reviewAssignment->setCancelled((int) $reviewAssignmentXML->cancelled); $reviewAssignment->setQuality((int) $reviewAssignmentXML->quality); $reviewAssignment->setDateRated((string) $reviewAssignmentXML->dateRated); $reviewAssignment->setDateReminded((string) $reviewAssignmentXML->dateReminded); $reviewAssignment->setReminderWasAutomatic((int) $reviewAssignmentXML->reminderWasAutomatic); $reviewAssignment->setRound((int) $reviewAssignmentXML->round); $reviewAssignment->setReviewRevision((int) $reviewAssignmentXML->reviewRevision); $reviewAssignment->setReviewMethod((int) $reviewAssignmentXML->reviewMethod); $reviewAssignment->setUnconsidered((int) $reviewAssignmentXML->unconsidered); $reviewAssignmentDAO->insertObject($reviewAssignment); foreach ($reviewAssignmentXML->formResponses->formResponse as $formResponseXML) { $reviewFormResponseDAO->update('INSERT INTO review_form_responses (review_form_element_id, review_id, response_type, response_value) VALUES (?, ?, ?, ?)', array($this->idTranslationTable->resolve(INTERNAL_TRANSFER_OBJECT_REVIEW_FORM_ELEMENT, (int) $formResponseXML->reviewFormElementId), $reviewAssignment->getId(), (string) $formResponseXML->responseType, (string) $formResponseXML->responseValue)); } } $signoffDAO =& DAORegistry::getDAO('SignoffDAO'); foreach ($articleXML->signoff as $signoffXML) { $signoff = new Signoff(); $signoff->setAssocType(ASSOC_TYPE_ARTICLE); $signoff->setAssocId($article->getId()); $signoff->setUserId($this->idTranslationTable->resolve(INTERNAL_TRANSFER_OBJECT_USER, (int) $signoffXML->userId)); $signoff->setFileId($this->idTranslationTable->resolve(INTERNAL_TRANSFER_OBJECT_ARTICLE_FILE, (int) $signoffXML->fileId)); $signoff->setUserGroupId($this->idTranslationTable->resolve(INTERNAL_TRANSFER_OBJECT_GROUP, (int) $signoffXML->userGroupId)); $signoff->setSymbolic((string) $signoffXML->symbolic); $signoff->setFileRevision((int) $signoffXML->fileRevision); $signoff->setDateUnderway((string) $signoffXML->dateUnderway); $signoff->setDateNotified((string) $signoffXML->dateNotified); $signoff->setDateCompleted((string) $signoffXML->dateCompleted); $signoff->setDateAcknowledged((string) $signoffXML->dateAcknowledged); $signoffDAO->insertObject($signoff); } $editorSubmissionDAO =& DAORegistry::getDAO('EditorSubmissionDAO'); foreach ($articleXML->editDecisions as $editDecisionXML) { $editDecisions =& $editorSubmissionDAO->update('INSERT INTO edit_decisions (article_id, round, editor_id, decision, date_decided) values (?, ?, ?, ?, ?)', array($article->getId(), (string) $editDecisionXML->round, $this->idTranslationTable->resolve(INTERNAL_TRANSFER_OBJECT_USER, (int) $editDecisionXML->editorId), (string) $editDecisionXML->decision, (string) $editDecisionXML->dateDecided)); } $publishedArticleDAO =& DAORegistry::getDAO('PublishedArticleDAO'); if (isset($articleXML->publishedArticle)) { $publishedArticleXML = $articleXML->publishedArticle; $publishedArticle = new PublishedArticle(); $publishedArticle->setId($article->getId()); $publishedArticle->setIssueId($this->idTranslationTable->resolve(INTERNAL_TRANSFER_OBJECT_ISSUE, (int) $publishedArticleXML->issueId)); $publishedArticle->setDatePublished((string) $publishedArticleXML->datePublished); $publishedArticle->setSeq((int) $publishedArticleXML->seq); $publishedArticle->setAccessStatus((int) $publishedArticleXML->accessStatus); $publishedArticleDAO->insertPublishedArticle($publishedArticle); } $articleEventLogDAO =& DAORegistry::getDAO('ArticleEventLogDAO'); $eventLogsXML =& iterator_to_array($articleXML->eventLogs->eventLog); $eventLogsXML = array(); foreach ($articleXML->eventLogs->eventLog as $eventLogXML) { array_unshift($eventLogsXML, $eventLogXML); } foreach ($eventLogsXML as $eventLogXML) { $eventLog = new ArticleEventLogEntry(); $eventLog->setAssocType(ASSOC_TYPE_ARTICLE); $eventLog->setAssocId($article->getId()); $eventLog->setUserId($this->idTranslationTable->resolve(INTERNAL_TRANSFER_OBJECT_USER, (int) $eventLogXML->userId)); $eventLog->setDateLogged((string) $eventLogXML->dateLogged); $eventLog->setIPAddress((string) $eventLogXML->IPAddress); $eventLog->setEventType((int) $eventLogXML->eventType); $eventLog->setMessage((string) $eventLogXML->message); $eventLog->setIsTranslated((int) $eventLogXML->isTranslated); $articleEventLogDAO->insertObject($eventLog); $this->restoreDataObjectSettings($articleEventLogDAO, $eventLogXML->settings, 'event_log_settings', 'log_id', $eventLog->getId()); } try { $article->setSubmissionFileId($this->idTranslationTable->resolve(INTERNAL_TRANSFER_OBJECT_ARTICLE_FILE, (int) $articleXML->submissionFileId)); } catch (Exception $e) { } try { $article->setRevisedFileId($this->idTranslationTable->resolve(INTERNAL_TRANSFER_OBJECT_ARTICLE_FILE, (int) $articleXML->revisedFileId)); } catch (Exception $e) { } try { $article->setReviewFileId($this->idTranslationTable->resolve(INTERNAL_TRANSFER_OBJECT_ARTICLE_FILE, (int) $articleXML->reviewFileId)); } catch (Exception $e) { } try { $article->setEditorFileId($this->idTranslationTable->resolve(INTERNAL_TRANSFER_OBJECT_ARTICLE_FILE, (int) $articleXML->editorFileId)); } catch (Exception $e) { } $articleDAO->updateArticle($article); $this->nextElement(); } }
/** * Save settings. */ function execute() { $articleDao = DAORegistry::getDAO('ArticleDAO'); $signoffDao = DAORegistry::getDAO('SignoffDAO'); $sectionEditorSubmissionDao = DAORegistry::getDAO('SectionEditorSubmissionDAO'); $application = PKPApplication::getApplication(); $request = $this->request; $user = $request->getUser(); $router = $request->getRouter(); $journal = $router->getContext($request); $article = $articleDao->newDataObject(); $article->setLocale($journal->getPrimaryLocale()); // FIXME in bug #5543 $article->setUserId($user->getId()); $article->setJournalId($journal->getId()); $article->setSectionId($this->getData('sectionId')); $article->setLanguage($this->getData('language')); $article->setTitle($this->getData('title'), null); // Localized $article->setAbstract($this->getData('abstract'), null); // Localized $article->setDiscipline($this->getData('discipline'), null); // Localized $article->setSubjectClass($this->getData('subjectClass'), null); // Localized $article->setSubject($this->getData('subject'), null); // Localized $article->setCoverageGeo($this->getData('coverageGeo'), null); // Localized $article->setCoverageChron($this->getData('coverageChron'), null); // Localized $article->setCoverageSample($this->getData('coverageSample'), null); // Localized $article->setType($this->getData('type'), null); // Localized $article->setSponsor($this->getData('sponsor'), null); // Localized $article->setCitations($this->getData('citations')); $article->setPages($this->getData('pages')); // Set some default values so the ArticleDAO doesn't complain when adding this article $article->setDateSubmitted(Core::getCurrentDate()); $article->setStatus(STATUS_PUBLISHED); $article->setSubmissionProgress(0); $article->stampStatusModified(); $article->setCurrentRound(1); $article->setFastTracked(1); $article->setHideAuthor(0); $article->setCommentsStatus(0); // Insert the article to get it's ID $articleDao->insertObject($article); $articleId = $article->getId(); // Add authors $authors = $this->getData('authors'); for ($i = 0, $count = count($authors); $i < $count; $i++) { if ($authors[$i]['authorId'] > 0) { // Update an existing author $author =& $authorDao->getAuthor($authors[$i]['authorId'], $articleId); $isExistingAuthor = true; } else { // Create a new author $author = new Author(); $isExistingAuthor = false; } if ($author != null) { $author->setSubmissionId($articleId); $author->setFirstName($authors[$i]['firstName']); $author->setMiddleName($authors[$i]['middleName']); $author->setLastName($authors[$i]['lastName']); if (array_key_exists('affiliation', $authors[$i])) { $author->setAffiliation($authors[$i]['affiliation'], null); } $author->setCountry($authors[$i]['country']); $author->setEmail($authors[$i]['email']); $author->setUrl($authors[$i]['url']); if (array_key_exists('competingInterests', $authors[$i])) { $author->setCompetingInterests($authors[$i]['competingInterests'], null); } $author->setBiography($authors[$i]['biography'], null); $author->setPrimaryContact($this->getData('primaryContact') == $i ? 1 : 0); $author->setSequence($authors[$i]['seq']); if ($isExistingAuthor == false) { $authorDao = DAORegistry::getDAO('AuthorDAO'); /* @var $authorDao AuthorDAO */ $authorDao->insertObject($author); } } } // Add the submission files as galleys import('lib.pkp.classes.file.TemporaryFileManager'); import('classes.file.ArticleFileManager'); $tempFileIds = $this->getData('tempFileId'); $temporaryFileManager = new TemporaryFileManager(); $articleFileManager = new ArticleFileManager($articleId); $designatedPrimary = false; foreach (array_keys($tempFileIds) as $locale) { $temporaryFile = $temporaryFileManager->getFile($tempFileIds[$locale], $user->getId()); $fileId = null; if ($temporaryFile) { $fileId = $articleFileManager->temporaryFileToArticleFile($temporaryFile, SUBMISSION_FILE_SUBMISSION); $fileType = $temporaryFile->getFileType(); if (strstr($fileType, 'html')) { import('classes.article.ArticleHTMLGalley'); $galley = new ArticleHTMLGalley(); } else { import('classes.article.ArticleGalley'); $galley = new ArticleGalley(); } $galley->setArticleId($articleId); $galley->setFileId($fileId); $galley->setLocale($locale); if ($galley->isHTMLGalley()) { $galley->setLabel('HTML'); } else { if (strstr($fileType, 'pdf')) { $galley->setLabel('PDF'); } else { if (strstr($fileType, 'postscript')) { $galley->setLabel('Postscript'); } else { if (strstr($fileType, 'xml')) { $galley->setLabel('XML'); } else { $galley->setLabel(__('common.untitled')); } } } } $galleyDao = DAORegistry::getDAO('ArticleGalleyDAO'); $galleyDao->insertGalley($galley); if (!$designatedPrimary) { $article->setSubmissionFileId($fileId); if ($locale == $journal->getPrimaryLocale()) { // Used to make sure that *some* file // is designated Review Version, but // preferrably the primary locale. $designatedPrimary = true; } } } // Update file search index import('classes.search.ArticleSearchIndex'); $articleSearchIndex = new ArticleSearchIndex(); if (isset($galley)) { $articleSearchIndex->articleFileChanged($galley->getArticleId(), SUBMISSION_SEARCH_GALLEY_FILE, $galley->getFileId()); } $articleSearchIndex->articleChangesFinished(); } // Designate this as the review version by default. $authorSubmissionDao = DAORegistry::getDAO('AuthorSubmissionDAO'); $authorSubmission =& $authorSubmissionDao->getAuthorSubmission($articleId); import('classes.submission.author.AuthorAction'); AuthorAction::designateReviewVersion($authorSubmission, true); // Accept the submission $sectionEditorSubmission =& $sectionEditorSubmissionDao->getSectionEditorSubmission($articleId); $articleFileManager = new ArticleFileManager($articleId); import('classes.submission.sectionEditor.SectionEditorAction'); assert(false); // FIXME: $decisionLabels missing from call below. SectionEditorAction::recordDecision($this->request, $sectionEditorSubmission, SUBMISSION_EDITOR_DECISION_ACCEPT); import('classes.author.form.submit.AuthorSubmitForm'); AuthorSubmitForm::assignEditors($article); $articleDao->updateObject($article); // Add to end of editing queue import('classes.submission.editor.EditorAction'); if (isset($galley)) { EditorAction::expediteSubmission($article, $this->request); } if ($this->getData('destination') == "issue") { // Add to an existing issue $issueId = $this->getData('issueId'); $this->scheduleForPublication($articleId, $issueId); } // Import the references list. $citationDao = DAORegistry::getDAO('CitationDAO'); $rawCitationList = $article->getCitations(); $citationDao->importCitations($request, ASSOC_TYPE_ARTICLE, $articleId, $rawCitationList); // Index article. import('classes.search.ArticleSearchIndex'); $articleSearchIndex = new ArticleSearchIndex(); $articleSearchIndex->articleMetadataChanged($article); $articleSearchIndex->articleChangesFinished(); }
/** * Save changes to paper. * @return int the paper ID */ function execute() { $paperDao =& DAORegistry::getDAO('PaperDAO'); $authorDao =& DAORegistry::getDAO('AuthorDAO'); $trackDao =& DAORegistry::getDAO('TrackDAO'); // Update paper $paper =& $this->paper; $paper->setTitle($this->getData('title'), null); // Localized $track =& $trackDao->getTrack($paper->getTrackId()); $paper->setAbstract($this->getData('abstract'), null); // Localized $paper->setDiscipline($this->getData('discipline'), null); // Localized $paper->setSubjectClass($this->getData('subjectClass'), null); // Localized $paper->setSubject($this->getData('subject'), null); // Localized $paper->setCoverageGeo($this->getData('coverageGeo'), null); // Localized $paper->setCoverageChron($this->getData('coverageChron'), null); // Localized $paper->setCoverageSample($this->getData('coverageSample'), null); // Localized $paper->setType($this->getData('type'), null); // Localized $paper->setLanguage($this->getData('language')); $paper->setSponsor($this->getData('sponsor'), null); // Localized $paper->setCitations($this->getData('citations')); // Update authors $authors = $this->getData('authors'); for ($i = 0, $count = count($authors); $i < $count; $i++) { if ($authors[$i]['authorId'] > 0) { // Update an existing author $author =& $paper->getAuthor($authors[$i]['authorId']); $isExistingAuthor = true; } else { // Create a new author $author = new Author(); $isExistingAuthor = false; } if ($author != null) { $author->setFirstName($authors[$i]['firstName']); $author->setMiddleName($authors[$i]['middleName']); $author->setLastName($authors[$i]['lastName']); $author->setAffiliation($authors[$i]['affiliation']); $author->setCountry($authors[$i]['country']); $author->setEmail($authors[$i]['email']); $author->setUrl($authors[$i]['url']); $author->setBiography($authors[$i]['biography'], null); // Localized $author->setPrimaryContact($this->getData('primaryContact') == $i ? 1 : 0); $author->setSequence($authors[$i]['seq']); if ($isExistingAuthor == false) { $paper->addAuthor($author); } } } // Remove deleted authors $deletedAuthors = explode(':', $this->getData('deletedAuthors')); for ($i = 0, $count = count($deletedAuthors); $i < $count; $i++) { $paper->removeAuthor($deletedAuthors[$i]); } // Save the paper $paperDao->updatePaper($paper); // Update search index import('search.PaperSearchIndex'); PaperSearchIndex::indexPaperMetadata($paper); return $paper->getId(); }