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);
}