public function testNativeDoiImport()
 {
     $testfile = 'tests/functional/plugins/importexport/native/testissue.xml';
     $args = array('import', $testfile, 'test', 'admin');
     $result = $this->executeCli('NativeImportExportPlugin', $args);
     self::assertRegExp('/##plugins.importexport.native.import.success.description##/', $result);
     $daos = array('Issue' => 'IssueDAO', 'PublishedArticle' => 'PublishedArticleDAO', 'Galley' => 'ArticleGalleyDAO');
     $articleId = null;
     foreach ($daos as $objectType => $daoName) {
         $dao = DAORegistry::getDAO($daoName);
         $pubObject = call_user_func(array($dao, "get{$objectType}ByPubId"), 'doi', $this->expectedDois[$objectType]);
         self::assertNotNull($pubObject, "Error while testing {$objectType}: object or DOI has not been imported.");
         $pubObjectByURN = call_user_func(array($dao, "get{$objectType}ByPubId"), 'other::urn', $this->expectedURNs[$objectType]);
         self::assertNotNull($pubObjectByURN, "Error while testing {$objectType}: object or URN has not been imported.");
         if ($objectType == 'PublishedArticle') {
             $articleId = $pubObject->getId();
         }
     }
     // Trying to import the same file again should lead to an error.
     $args = array('import', $testfile, 'test', 'admin');
     $result = $this->executeCli('NativeImportExportPlugin', $args);
     self::assertRegExp('/##plugins.importexport.native.import.error.duplicatePubId##/', $result);
     // Delete inserted article files from the filesystem.
     $request = $application->getRequest();
     $context = $request->getContext();
     import('lib.pkp.classes.file.SubmissionFileManager');
     $submissionFileManager = new SubmissionFileManager($context->getId(), $articleId);
     $submissionFileManager->rmtree($submissionFileManager->getBasePath());
 }
 /**
  * Fix broken submission filenames (bug #8461)
  * @param $upgrade Upgrade
  * @param $params array
  * @param $dryrun boolean True iff only a dry run (displaying rather than executing changes) should be done.
  * @return boolean
  */
 function fixFilenames($upgrade, $params, $dryrun = false)
 {
     $pressDao = DAORegistry::getDAO('PressDAO');
     $submissionDao = DAORegistry::getDAO('MonographDAO');
     $submissionFileDao = DAORegistry::getDAO('SubmissionFileDAO');
     DAORegistry::getDAO('GenreDAO');
     // Load constants
     $siteDao = DAORegistry::getDAO('SiteDAO');
     /* @var $siteDao SiteDAO */
     $site = $siteDao->getSite();
     $adminEmail = $site->getLocalizedContactEmail();
     import('lib.pkp.classes.file.SubmissionFileManager');
     $contexts = $pressDao->getAll();
     while ($context = $contexts->next()) {
         $submissions = $submissionDao->getByPressId($context->getId());
         while ($submission = $submissions->next()) {
             $submissionFileManager = new SubmissionFileManager($context->getId(), $submission->getId());
             $submissionFiles = $submissionFileDao->getBySubmissionId($submission->getId());
             foreach ($submissionFiles as $submissionFile) {
                 $generatedFilename = $submissionFile->getServerFileName();
                 $basePath = $submissionFileManager->getBasePath() . $submissionFile->_fileStageToPath($submissionFile->getFileStage()) . '/';
                 $globPattern = $submissionFile->getSubmissionId() . '-' . '*' . '-' . $submissionFile->getFileId() . '-' . $submissionFile->getRevision() . '-' . $submissionFile->getFileStage() . '-' . date('Ymd', strtotime($submissionFile->getDateUploaded())) . '.' . strtolower_codesafe($submissionFile->getExtension());
                 $matchedResults = glob($basePath . $globPattern);
                 if (count($matchedResults) > 1) {
                     error_log("Duplicate potential files for \"{$globPattern}\"!", 1, $adminEmail);
                     continue;
                 }
                 if (count($matchedResults) == 1) {
                     // 1 result matched.
                     $discoveredFilename = array_shift($matchedResults);
                     if ($dryrun) {
                         echo "Need to rename \"{$discoveredFilename}\" to \"{$generatedFilename}\".\n";
                     } else {
                         rename($discoveredFilename, $basePath . $generatedFilename);
                     }
                 } else {
                     // 0 results matched.
                     error_log("Unable to find a match for \"{$globPattern}\".\n", 1, $adminEmail);
                     continue;
                 }
             }
         }
     }
     return true;
 }
 /**
  * Delete a submission by ID.
  * @param $submissionId int
  */
 function deleteById($submissionId)
 {
     // Delete submission files.
     $submission = $this->getById($submissionId);
     assert(is_a($submission, 'Submission'));
     import('lib.pkp.classes.file.SubmissionFileManager');
     $submissionFileManager = new SubmissionFileManager($submission->getContextId(), $submission->getId());
     $submissionFileManager->rmtree($submissionFileManager->getBasePath());
     $this->authorDao->deleteBySubmissionId($submissionId);
     $reviewRoundDao = DAORegistry::getDAO('ReviewRoundDAO');
     $reviewRoundDao->deleteBySubmissionId($submissionId);
     $editDecisionDao = DAORegistry::getDAO('EditDecisionDAO');
     $editDecisionDao->deleteDecisionsBySubmissionId($submissionId);
     $reviewAssignmentDao = DAORegistry::getDAO('ReviewAssignmentDAO');
     $reviewAssignmentDao->deleteBySubmissionId($submissionId);
     // Signoff DAOs
     $signoffDao = DAORegistry::getDAO('SignoffDAO');
     $submissionFileSignoffDao = DAORegistry::getDAO('SubmissionFileSignoffDAO');
     // Delete Signoffs associated with a submission file of this submission.
     $submissionFileSignoffs = $submissionFileSignoffDao->getAllBySubmission($submissionId);
     while ($signoff = $submissionFileSignoffs->next()) {
         $signoffDao->deleteObject($signoff);
     }
     // Delete the Signoffs associated with the submission itself.
     $submissionSignoffs = $signoffDao->getAllByAssocType(ASSOC_TYPE_SUBMISSION, $submissionId);
     while ($signoff = $submissionSignoffs->next()) {
         $signoffDao->deleteObject($signoff);
     }
     // Delete the stage assignments.
     $stageAssignmentDao = DAORegistry::getDAO('StageAssignmentDAO');
     $stageAssignments = $stageAssignmentDao->getBySubmissionAndStageId($submissionId);
     while ($stageAssignment = $stageAssignments->next()) {
         $stageAssignmentDao->deleteObject($stageAssignment);
     }
     // N.B. Files must be deleted after signoffs to identify submission file signoffs.
     // Delete submission files.
     $submissionFileDao = DAORegistry::getDAO('SubmissionFileDAO');
     /* @var $submissionFileDao SubmissionFileDAO */
     $submissionFileDao->deleteAllRevisionsBySubmissionId($submissionId);
     $noteDao = DAORegistry::getDAO('NoteDAO');
     $noteDao->deleteByAssoc(ASSOC_TYPE_SUBMISSION, $submissionId);
     $submissionCommentDao = DAORegistry::getDAO('SubmissionCommentDAO');
     $submissionCommentDao->deleteBySubmissionId($submissionId);
     // Delete any outstanding notifications for this submission
     $notificationDao = DAORegistry::getDAO('NotificationDAO');
     $notificationDao->deleteByAssoc(ASSOC_TYPE_SUBMISSION, $submissionId);
     $submissionEventLogDao = DAORegistry::getDAO('SubmissionEventLogDAO');
     $submissionEventLogDao->deleteByAssoc(ASSOC_TYPE_SUBMISSION, $submissionId);
     $submissionEmailLogDao = DAORegistry::getDAO('SubmissionEmailLogDAO');
     $submissionEmailLogDao->deleteByAssoc(ASSOC_TYPE_SUBMISSION, $submissionId);
     // Delete controlled vocab lists assigned to this submission
     $submissionKeywordDao = DAORegistry::getDAO('SubmissionKeywordDAO');
     $submissionKeywordVocab = $submissionKeywordDao->getBySymbolic(CONTROLLED_VOCAB_SUBMISSION_KEYWORD, ASSOC_TYPE_SUBMISSION, $submissionId);
     if (isset($submissionKeywordVocab)) {
         $submissionKeywordDao->deleteObject($submissionKeywordVocab);
     }
     $submissionDisciplineDao = DAORegistry::getDAO('SubmissionDisciplineDAO');
     $submissionDisciplineVocab = $submissionDisciplineDao->getBySymbolic(CONTROLLED_VOCAB_SUBMISSION_DISCIPLINE, ASSOC_TYPE_SUBMISSION, $submissionId);
     if (isset($submissionDisciplineVocab)) {
         $submissionDisciplineDao->deleteObject($submissionDisciplineVocab);
     }
     $submissionAgencyDao = DAORegistry::getDAO('SubmissionAgencyDAO');
     $submissionAgencyVocab = $submissionAgencyDao->getBySymbolic(CONTROLLED_VOCAB_SUBMISSION_AGENCY, ASSOC_TYPE_SUBMISSION, $submissionId);
     if (isset($submissionAgencyVocab)) {
         $submissionAgencyDao->deleteObject($submissionAgencyVocab);
     }
     $submissionLanguageDao = DAORegistry::getDAO('SubmissionLanguageDAO');
     $submissionLanguageVocab = $submissionLanguageDao->getBySymbolic(CONTROLLED_VOCAB_SUBMISSION_LANGUAGE, ASSOC_TYPE_SUBMISSION, $submissionId);
     if (isset($submissionLanguageVocab)) {
         $submissionLanguageDao->deleteObject($submissionLanguageVocab);
     }
     $submissionSubjectDao = DAORegistry::getDAO('SubmissionSubjectDAO');
     $submissionSubjectVocab = $submissionSubjectDao->getBySymbolic(CONTROLLED_VOCAB_SUBMISSION_SUBJECT, ASSOC_TYPE_SUBMISSION, $submissionId);
     if (isset($submissionSubjectVocab)) {
         $submissionSubjectDao->deleteObject($submissionSubjectVocab);
     }
     $this->update('DELETE FROM submission_settings WHERE submission_id = ?', (int) $submissionId);
     $this->update('DELETE FROM submissions WHERE submission_id = ?', (int) $submissionId);
 }
示例#4
0
 /**
  * Return a context-aware file path.
  */
 function getFilePath()
 {
     // Get the context ID
     $submissionDao = Application::getSubmissionDAO();
     $submission = $submissionDao->getById($this->getSubmissionId());
     if (!$submission) {
         return null;
     }
     $contextId = $submission->getContextId();
     unset($submission);
     // Construct the file path
     import('lib.pkp.classes.file.SubmissionFileManager');
     $submissionFileManager = new SubmissionFileManager($contextId, $this->getSubmissionId());
     return $submissionFileManager->getBasePath() . $this->_fileStageToPath($this->getFileStage()) . '/' . $this->getServerFileName();
 }
示例#5
0
 /**
  * Delete a submission by ID.
  * @param $submissionId int
  */
 function deleteById($submissionId)
 {
     // Delete submission files.
     $submission = $this->getById($submissionId);
     assert(is_a($submission, 'Submission'));
     // 'deleteAllRevisionsBySubmissionId' has to be called before 'rmtree'
     // because SubmissionFileDaoDelegate::deleteObjects checks the file
     // and returns false if the file is not there, which makes the foreach loop in
     // PKPSubmissionFileDAO::_deleteInternally not run till the end.
     $submissionFileDao = DAORegistry::getDAO('SubmissionFileDAO');
     /* @var $submissionFileDao SubmissionFileDAO */
     $submissionFileDao->deleteAllRevisionsBySubmissionId($submissionId);
     import('lib.pkp.classes.file.SubmissionFileManager');
     $submissionFileManager = new SubmissionFileManager($submission->getContextId(), $submission->getId());
     $submissionFileManager->rmtree($submissionFileManager->getBasePath());
     $this->authorDao->deleteBySubmissionId($submissionId);
     $reviewRoundDao = DAORegistry::getDAO('ReviewRoundDAO');
     $reviewRoundDao->deleteBySubmissionId($submissionId);
     $editDecisionDao = DAORegistry::getDAO('EditDecisionDAO');
     $editDecisionDao->deleteDecisionsBySubmissionId($submissionId);
     $reviewAssignmentDao = DAORegistry::getDAO('ReviewAssignmentDAO');
     $reviewAssignmentDao->deleteBySubmissionId($submissionId);
     // Delete the queries associated with a submission
     $queryDao = DAORegistry::getDAO('QueryDAO');
     $queryDao->deleteByAssoc(ASSOC_TYPE_SUBMISSION, $submissionId);
     // Delete the stage assignments.
     $stageAssignmentDao = DAORegistry::getDAO('StageAssignmentDAO');
     $stageAssignments = $stageAssignmentDao->getBySubmissionAndStageId($submissionId);
     while ($stageAssignment = $stageAssignments->next()) {
         $stageAssignmentDao->deleteObject($stageAssignment);
     }
     $noteDao = DAORegistry::getDAO('NoteDAO');
     $noteDao->deleteByAssoc(ASSOC_TYPE_SUBMISSION, $submissionId);
     $submissionCommentDao = DAORegistry::getDAO('SubmissionCommentDAO');
     $submissionCommentDao->deleteBySubmissionId($submissionId);
     // Delete any outstanding notifications for this submission
     $notificationDao = DAORegistry::getDAO('NotificationDAO');
     $notificationDao->deleteByAssoc(ASSOC_TYPE_SUBMISSION, $submissionId);
     $submissionEventLogDao = DAORegistry::getDAO('SubmissionEventLogDAO');
     $submissionEventLogDao->deleteByAssoc(ASSOC_TYPE_SUBMISSION, $submissionId);
     $submissionEmailLogDao = DAORegistry::getDAO('SubmissionEmailLogDAO');
     $submissionEmailLogDao->deleteByAssoc(ASSOC_TYPE_SUBMISSION, $submissionId);
     // Delete controlled vocab lists assigned to this submission
     $submissionKeywordDao = DAORegistry::getDAO('SubmissionKeywordDAO');
     $submissionKeywordVocab = $submissionKeywordDao->getBySymbolic(CONTROLLED_VOCAB_SUBMISSION_KEYWORD, ASSOC_TYPE_SUBMISSION, $submissionId);
     if (isset($submissionKeywordVocab)) {
         $submissionKeywordDao->deleteObject($submissionKeywordVocab);
     }
     $submissionDisciplineDao = DAORegistry::getDAO('SubmissionDisciplineDAO');
     $submissionDisciplineVocab = $submissionDisciplineDao->getBySymbolic(CONTROLLED_VOCAB_SUBMISSION_DISCIPLINE, ASSOC_TYPE_SUBMISSION, $submissionId);
     if (isset($submissionDisciplineVocab)) {
         $submissionDisciplineDao->deleteObject($submissionDisciplineVocab);
     }
     $submissionAgencyDao = DAORegistry::getDAO('SubmissionAgencyDAO');
     $submissionAgencyVocab = $submissionAgencyDao->getBySymbolic(CONTROLLED_VOCAB_SUBMISSION_AGENCY, ASSOC_TYPE_SUBMISSION, $submissionId);
     if (isset($submissionAgencyVocab)) {
         $submissionAgencyDao->deleteObject($submissionAgencyVocab);
     }
     $submissionLanguageDao = DAORegistry::getDAO('SubmissionLanguageDAO');
     $submissionLanguageVocab = $submissionLanguageDao->getBySymbolic(CONTROLLED_VOCAB_SUBMISSION_LANGUAGE, ASSOC_TYPE_SUBMISSION, $submissionId);
     if (isset($submissionLanguageVocab)) {
         $submissionLanguageDao->deleteObject($submissionLanguageVocab);
     }
     $submissionSubjectDao = DAORegistry::getDAO('SubmissionSubjectDAO');
     $submissionSubjectVocab = $submissionSubjectDao->getBySymbolic(CONTROLLED_VOCAB_SUBMISSION_SUBJECT, ASSOC_TYPE_SUBMISSION, $submissionId);
     if (isset($submissionSubjectVocab)) {
         $submissionSubjectDao->deleteObject($submissionSubjectVocab);
     }
     $this->update('DELETE FROM submission_settings WHERE submission_id = ?', (int) $submissionId);
     $this->update('DELETE FROM submissions WHERE submission_id = ?', (int) $submissionId);
 }
示例#6
0
文件: Upgrade.inc.php 项目: pkp/ojs
 /**
  * Migrate submission filenames from OJS 2.x
  * @param $upgrade Upgrade
  * @param $params array
  * @return boolean
  */
 function migrateFiles($upgrade, $params)
 {
     $journalDao = DAORegistry::getDAO('JournalDAO');
     $submissionDao = DAORegistry::getDAO('ArticleDAO');
     $submissionFileDao = DAORegistry::getDAO('SubmissionFileDAO');
     DAORegistry::getDAO('GenreDAO');
     // Load constants
     $siteDao = DAORegistry::getDAO('SiteDAO');
     /* @var $siteDao SiteDAO */
     $site = $siteDao->getSite();
     $adminEmail = $site->getLocalizedContactEmail();
     import('lib.pkp.classes.file.SubmissionFileManager');
     $contexts = $journalDao->getAll();
     while ($context = $contexts->next()) {
         $submissions = $submissionDao->getByContextId($context->getId());
         while ($submission = $submissions->next()) {
             $submissionFileManager = new SubmissionFileManager($context->getId(), $submission->getId());
             $submissionFiles = $submissionFileDao->getBySubmissionId($submission->getId());
             foreach ($submissionFiles as $submissionFile) {
                 $generatedFilename = $submissionFile->getServerFileName();
                 $basePath = $submissionFileManager->getBasePath() . '/';
                 $globPattern = $submissionFile->getSubmissionId() . '-' . $submissionFile->getFileId() . '-' . $submissionFile->getRevision() . '-' . '??' . '.' . strtolower_codesafe($submissionFile->getExtension());
                 $matchedResults = array_merge(glob($basePath . '*/*/' . $globPattern), glob($basePath . '*/' . $globPattern));
                 if (count($matchedResults) > 1) {
                     // Too many filenames matched. Continue with the first; this is just a warning.
                     error_log("WARNING: Duplicate potential files for \"{$globPattern}\" in \"" . $submissionFileManager->getBasePath() . "\". Taking the first.");
                 } elseif (count($matchedResults) == 0) {
                     // No filenames matched. Skip migrating.
                     error_log("WARNING: Unable to find a match for \"{$globPattern}\" in \"" . $submissionFileManager->getBasePath() . "\". Skipping this file.");
                     continue;
                 }
                 $discoveredFilename = array_shift($matchedResults);
                 $targetFilename = $basePath . $submissionFile->_fileStageToPath($submissionFile->getFileStage()) . '/' . $generatedFilename;
                 if (file_exists($targetFilename)) {
                     continue;
                 }
                 // Skip existing files/links
                 if (!file_exists($path = dirname($targetFilename)) && !$submissionFileManager->mkdirtree($path)) {
                     error_log("Unable to make directory \"{$path}\"");
                 }
                 if (!rename($discoveredFilename, $targetFilename)) {
                     error_log("Unable to move \"{$discoveredFilename}\" to \"{$targetFilename}\".");
                 }
             }
         }
     }
     return true;
 }