/** * Routine to instantiate and pre-populate a new monograph file. * @param $monographId integer * @param $fileStage integer * @param $revisedFileId integer * @param $genreId integer * @param $assocId integer * @param $assocType integer * @return MonographFile returns the instantiated monograph file or null if an error occurs. */ function &_instantiateMonographFile($monographId, $fileStage, $revisedFileId, $genreId, $assocId, $assocType) { // Instantiate a new monograph file. $monographFile = new MonographFile(); $monographFile->setMonographId($monographId); // Do we create a new file or a new revision of an existing file? if ($revisedFileId) { // Retrieve the revised file. $submissionFileDao =& DAORegistry::getDAO('SubmissionFileDAO'); /* @var $submissionFileDao SubmissionFileDAO */ $revisedFile =& $submissionFileDao->getLatestRevision($revisedFileId, $fileStage, $monographId); if (!is_a($revisedFile, 'MonographFile')) { return false; } // Create a new revision of the file with the existing file id. $monographFile->setFileId($revisedFileId); $monographFile->setRevision($revisedFile->getRevision() + 1); // Make sure that the monograph of the revised file is // the same as that of the uploaded file. assert($revisedFile->getMonographId() == $monographId); $nullVar = null; if ($revisedFile->getMonographId() != $monographId) { return $nullVar; } // Copy the file workflow stage. assert(is_null($fileStage) || $fileStage == $revisedFile->getFileStage()); $fileStage = (int) $revisedFile->getFileStage(); // Copy the file genre. assert(is_null($genreId) || $genreId == $revisedFile->getGenreId()); $genreId = (int) $revisedFile->getGenreId(); // Copy the assoc type. assert(is_null($assocType) || $assocType == $revisedFile->getAssocType()); $assocType = (int) $revisedFile->getAssocType(); // Copy the assoc id. assert(is_null($assocId) || $assocId == $revisedFile->getAssocId()); $assocId = (int) $revisedFile->getAssocId(); } else { // Create the first revision of a new file. $monographFile->setRevision(1); } // Set a preliminary file name and file size. $monographFile->setFileName('unknown'); $monographFile->setFileSize(0); // Set the file file stage. $monographFile->setFileStage($fileStage); // Set the file genre (if given). if (isset($genreId)) { $monographFile->setGenreId($genreId); } // Set modification dates to the current system date. $monographFile->setDateUploaded(Core::getCurrentDate()); $monographFile->setDateModified(Core::getCurrentDate()); // Is the monograph file associated to another entity? if (isset($assocId)) { assert(isset($assocType)); $monographFile->setAssocType($assocType); $monographFile->setAssocId($assocId); } // Return the pre-populated monograph file. return $monographFile; }
/** * @covers SubmissionFileDAO * @covers PKPSubmissionFileDAO * @covers MonographFileDAODelegate * @covers ArtworkFileDAODelegate * @covers SubmissionFileDAODelegate */ public function testCitationCrud() { // Create two test files, one monograph file one artwork file. $artworkFile1 = new ArtworkFile(); $artworkFile1->setName('test-artwork', 'en_US'); $artworkFile1->setFileName('test-artwork.jpg'); $artworkFile1->setCaption('test-caption'); $artworkFile1->setFileStage(MONOGRAPH_FILE_PRODUCTION); $artworkFile1->setSubmissionId(SUBMISSION_FILE_DAO_TEST_SUBMISSION_ID); $artworkFile1->setFileType('image/jpeg'); $artworkFile1->setFileSize(512); $artworkFile1->setDateUploaded('2011-12-04 00:00:00'); $artworkFile1->setDateModified('2011-12-04 00:00:00'); $artworkFile1->setGenreId(2); $artworkFile1->setAssocType(ASSOC_TYPE_REVIEW_ASSIGNMENT); $artworkFile1->setAssocId(5); $monographFile = new MonographFile(); $monographFile->setName('test-document', 'en_US'); $monographFile->setFileName('test-file.doc'); $monographFile->setFileStage(MONOGRAPH_FILE_PRODUCTION); $monographFile->setSubmissionId(SUBMISSION_FILE_DAO_TEST_SUBMISSION_ID); $monographFile->setFileType('application/pdf'); $monographFile->setFileSize(256); $monographFile->setDateUploaded('2011-12-05 00:00:00'); $monographFile->setDateModified('2011-12-05 00:00:00'); $monographFile->setGenreId(1); // Test the isInlineable method. $submissionFileDao = DAORegistry::getDAO('SubmissionFileDAO'); /* @var $submissionFileDao SubmissionFileDAO */ self::assertFalse($submissionFileDao->isInlineable($monographFile)); self::assertTrue($submissionFileDao->isInlineable($artworkFile1)); // Persist the two test files. $artworkFile1 =& $submissionFileDao->insertObject($artworkFile1); /* @var $artworkFile1 ArtworkFile */ $monographFile =& $submissionFileDao->insertObject($monographFile); // Persist a second revision of the artwork file. $artworkFile2 =& cloneObject($artworkFile1); /* @var $artworkFile2 ArtworkFile */ $artworkFile2->setRevision(2); $artworkFile2->setDateUploaded('2011-12-05 00:00:00'); $artworkFile2->setDateModified('2011-12-05 00:00:00'); $artworkFile2 =& $submissionFileDao->insertObject($artworkFile2); // Retrieve the first revision of the artwork file. self::assertNull($submissionFileDao->getRevision(null, $artworkFile1->getRevision())); self::assertNull($submissionFileDao->getRevision($artworkFile1->getFileId(), null)); self::assertEquals($artworkFile1, $submissionFileDao->getRevision($artworkFile1->getFileId(), $artworkFile1->getRevision())); self::assertEquals($artworkFile1, $submissionFileDao->getRevision($artworkFile1->getFileId(), $artworkFile1->getRevision(), $artworkFile1->getFileStage())); self::assertEquals($artworkFile1, $submissionFileDao->getRevision($artworkFile1->getFileId(), $artworkFile1->getRevision(), $artworkFile1->getFileStage(), SUBMISSION_FILE_DAO_TEST_SUBMISSION_ID)); self::assertNull($submissionFileDao->getRevision($artworkFile1->getFileId(), $artworkFile1->getRevision(), MONOGRAPH_FILE_PRODUCTION + 1)); self::assertNull($submissionFileDao->getRevision($artworkFile1->getFileId(), $artworkFile1->getRevision(), null, SUBMISSION_FILE_DAO_TEST_SUBMISSION_ID + 1)); // Update the latest revision of the artwork file. $artworkFile2->setOriginalFileName('updated-file-name'); $artworkFile2->setCaption('test-caption'); self::assertTrue($submissionFileDao->updateObject($artworkFile2)); // Retrieve the latest revision of the artwork file. self::assertNull($submissionFileDao->getLatestRevision(null)); self::assertEquals($artworkFile2, $submissionFileDao->getLatestRevision($artworkFile2->getFileId())); self::assertEquals($artworkFile2, $submissionFileDao->getLatestRevision($artworkFile2->getFileId(), $artworkFile2->getFileStage())); self::assertEquals($artworkFile2, $submissionFileDao->getLatestRevision($artworkFile2->getFileId(), $artworkFile2->getFileStage(), SUBMISSION_FILE_DAO_TEST_SUBMISSION_ID)); self::assertNull($submissionFileDao->getLatestRevision($artworkFile2->getFileId(), MONOGRAPH_FILE_PRODUCTION + 1)); self::assertNull($submissionFileDao->getLatestRevision($artworkFile2->getFileId(), null, SUBMISSION_FILE_DAO_TEST_SUBMISSION_ID + 1)); // Retrieve the latest revisions of both files. self::assertNull($submissionFileDao->getLatestRevisions(null)); self::assertEquals(array($artworkFile2, $monographFile), $submissionFileDao->getLatestRevisions(SUBMISSION_FILE_DAO_TEST_SUBMISSION_ID)); self::assertEquals(array($artworkFile2, $monographFile), $submissionFileDao->getLatestRevisions(SUBMISSION_FILE_DAO_TEST_SUBMISSION_ID, MONOGRAPH_FILE_PRODUCTION)); self::assertEquals(array(), $submissionFileDao->getLatestRevisions(SUBMISSION_FILE_DAO_TEST_SUBMISSION_ID + 1)); self::assertEquals(array(), $submissionFileDao->getLatestRevisions(SUBMISSION_FILE_DAO_TEST_SUBMISSION_ID, MONOGRAPH_FILE_PRODUCTION + 1)); // Test paging. $rangeInfo = new DBResultRange(2, 1); self::assertEquals(array($artworkFile2, $monographFile), $submissionFileDao->getLatestRevisions(SUBMISSION_FILE_DAO_TEST_SUBMISSION_ID, null, $rangeInfo)); $rangeInfo = new DBResultRange(1, 1); self::assertEquals(array($artworkFile2), $submissionFileDao->getLatestRevisions(SUBMISSION_FILE_DAO_TEST_SUBMISSION_ID, null, $rangeInfo)); $rangeInfo = new DBResultRange(1, 2); self::assertEquals(array($monographFile), $submissionFileDao->getLatestRevisions(SUBMISSION_FILE_DAO_TEST_SUBMISSION_ID, null, $rangeInfo)); // Retrieve all revisions of the artwork file. self::assertNull($submissionFileDao->getAllRevisions(null)); self::assertEquals(array($artworkFile2, $artworkFile1), $submissionFileDao->getAllRevisions($artworkFile1->getFileId(), MONOGRAPH_FILE_PRODUCTION)); self::assertEquals(array($artworkFile2, $artworkFile1), $submissionFileDao->getAllRevisions($artworkFile1->getFileId(), MONOGRAPH_FILE_PRODUCTION, SUBMISSION_FILE_DAO_TEST_SUBMISSION_ID)); self::assertEquals(array(), $submissionFileDao->getAllRevisions($artworkFile1->getFileId(), null, SUBMISSION_FILE_DAO_TEST_SUBMISSION_ID + 1)); self::assertEquals(array(), $submissionFileDao->getAllRevisions($artworkFile1->getFileId(), MONOGRAPH_FILE_PRODUCTION + 1, null)); // Retrieve the latest revisions by association. self::assertNull($submissionFileDao->getLatestRevisionsByAssocId(ASSOC_TYPE_REVIEW_ASSIGNMENT, null)); self::assertNull($submissionFileDao->getLatestRevisionsByAssocId(null, 5)); self::assertEquals(array($artworkFile2), $submissionFileDao->getLatestRevisionsByAssocId(ASSOC_TYPE_REVIEW_ASSIGNMENT, 5)); self::assertEquals(array($artworkFile2), $submissionFileDao->getLatestRevisionsByAssocId(ASSOC_TYPE_REVIEW_ASSIGNMENT, 5, MONOGRAPH_FILE_PRODUCTION)); self::assertEquals(array(), $submissionFileDao->getLatestRevisionsByAssocId(ASSOC_TYPE_REVIEW_ASSIGNMENT, 5, MONOGRAPH_FILE_PRODUCTION + 1)); // Retrieve all revisions by association. self::assertNull($submissionFileDao->getAllRevisionsByAssocId(ASSOC_TYPE_REVIEW_ASSIGNMENT, null)); self::assertNull($submissionFileDao->getAllRevisionsByAssocId(null, 5)); self::assertEquals(array($artworkFile2, $artworkFile1), $submissionFileDao->getAllRevisionsByAssocId(ASSOC_TYPE_REVIEW_ASSIGNMENT, 5)); self::assertEquals(array($artworkFile2, $artworkFile1), $submissionFileDao->getAllRevisionsByAssocId(ASSOC_TYPE_REVIEW_ASSIGNMENT, 5, MONOGRAPH_FILE_PRODUCTION)); self::assertEquals(array(), $submissionFileDao->getAllRevisionsByAssocId(ASSOC_TYPE_REVIEW_ASSIGNMENT, 5, MONOGRAPH_FILE_PRODUCTION + 1)); // Delete the first revision of the artwork file. // NB: This implicitly tests deletion by ID. self::assertEquals(1, $submissionFileDao->deleteRevision($artworkFile1)); self::assertNull($submissionFileDao->getRevision($artworkFile1->getFileId(), $artworkFile1->getRevision())); // Re-insert the file for the next test. self::assertEquals($artworkFile1, $submissionFileDao->insertObject($artworkFile1)); // Delete the latest revision of the artwork file. self::assertEquals(1, $submissionFileDao->deleteLatestRevisionById($artworkFile1->getFileId())); self::assertType('ArtworkFile', $submissionFileDao->getRevision($artworkFile1->getFileId(), $artworkFile1->getRevision())); self::assertNull($submissionFileDao->getRevision($artworkFile2->getFileId(), $artworkFile2->getRevision())); // Re-insert the file for the next test. self::assertEquals($artworkFile2, $submissionFileDao->insertObject($artworkFile2)); // Delete all revisions of the artwork file. self::assertEquals(2, $submissionFileDao->deleteAllRevisionsById($artworkFile1->getFileId())); self::assertType('MonographFile', $submissionFileDao->getRevision($monographFile->getFileId(), $monographFile->getRevision())); self::assertNull($submissionFileDao->getRevision($artworkFile1->getFileId(), $artworkFile1->getRevision())); self::assertNull($submissionFileDao->getRevision($artworkFile2->getFileId(), $artworkFile2->getRevision())); // Re-insert the files for the next test. self::assertEquals($artworkFile1, $submissionFileDao->insertObject($artworkFile1)); self::assertEquals($artworkFile2, $submissionFileDao->insertObject($artworkFile2)); // Delete all revisions by assoc id. self::assertEquals(2, $submissionFileDao->deleteAllRevisionsByAssocId(ASSOC_TYPE_REVIEW_ASSIGNMENT, 5)); self::assertType('MonographFile', $submissionFileDao->getRevision($monographFile->getFileId(), $monographFile->getRevision())); self::assertNull($submissionFileDao->getRevision($artworkFile1->getFileId(), $artworkFile1->getRevision())); self::assertNull($submissionFileDao->getRevision($artworkFile2->getFileId(), $artworkFile2->getRevision())); // Re-insert the files for the next test. self::assertEquals($artworkFile1, $submissionFileDao->insertObject($artworkFile1)); self::assertEquals($artworkFile2, $submissionFileDao->insertObject($artworkFile2)); // Delete all revisions by submission id. self::assertEquals(3, $submissionFileDao->deleteAllRevisionsBySubmissionId(SUBMISSION_FILE_DAO_TEST_SUBMISSION_ID)); self::assertNull($submissionFileDao->getRevision($monographFile->getFileId(), $monographFile->getRevision())); self::assertNull($submissionFileDao->getRevision($artworkFile1->getFileId(), $artworkFile1->getRevision())); self::assertNull($submissionFileDao->getRevision($artworkFile2->getFileId(), $artworkFile2->getRevision())); // Test inserting of new revisions. // Create two artwork files with different file ids. $artworkFile1->setFileId(null); $artworkFile1->setRevision(null); $artworkFile1 =& $submissionFileDao->insertObject($artworkFile1); $artworkFile2->setFileId(null); $artworkFile2->setRevision(null); $artworkFile2->setGenreId($artworkFile1->getGenreId() + 1); $artworkFile2 =& $submissionFileDao->insertObject($artworkFile2); // Test the file ids, revisions and identifying fields. self::assertNotEquals($artworkFile1->getFileId(), $artworkFile2->getFileId()); self::assertNotEquals($artworkFile1->getGenreId(), $artworkFile2->getGenreId()); self::assertEquals(1, $submissionFileDao->getLatestRevisionNumber($artworkFile1->getFileId())); self::assertEquals(1, $submissionFileDao->getLatestRevisionNumber($artworkFile2->getFileId())); // Now make the second file a revision of the first. $artworkFile2 =& $submissionFileDao->setAsLatestRevision($artworkFile1->getFileId(), $artworkFile2->getFileId(), $artworkFile1->getSubmissionId(), $artworkFile1->getFileStage()); // And test the file ids, revisions and identifying fields again. self::assertEquals($artworkFile1->getFileId(), $artworkFile2->getFileId()); self::assertEquals($artworkFile1->getGenreId(), $artworkFile2->getGenreId()); self::assertEquals(1, $artworkFile1->getRevision()); self::assertEquals(2, $submissionFileDao->getLatestRevisionNumber($artworkFile1->getFileId())); }