/** * Internal function to return a review assignment object from a row. * @param $row array * @return ReviewAssignment */ function &_returnReviewAssignmentFromRow(&$row) { $reviewAssignment = new ReviewAssignment(); $reviewAssignment->setId($row['review_id']); $reviewAssignment->setPaperId($row['paper_id']); $reviewAssignment->setReviewerId($row['reviewer_id']); $reviewAssignment->setReviewerFullName($row['first_name'] . ' ' . $row['last_name']); $reviewAssignment->setRecommendation($row['recommendation']); $reviewAssignment->setDateAssigned($this->datetimeFromDB($row['date_assigned'])); $reviewAssignment->setDateNotified($this->datetimeFromDB($row['date_notified'])); $reviewAssignment->setDateConfirmed($this->datetimeFromDB($row['date_confirmed'])); $reviewAssignment->setDateCompleted($this->datetimeFromDB($row['date_completed'])); $reviewAssignment->setDateAcknowledged($this->datetimeFromDB($row['date_acknowledged'])); $reviewAssignment->setDateDue($this->datetimeFromDB($row['date_due'])); $reviewAssignment->setLastModified($this->datetimeFromDB($row['last_modified'])); $reviewAssignment->setDeclined($row['declined']); $reviewAssignment->setReplaced($row['replaced']); $reviewAssignment->setCancelled($row['cancelled']); $reviewAssignment->setReviewerFileId($row['reviewer_file_id']); $reviewAssignment->setQuality($row['quality']); $reviewAssignment->setDateRated($this->datetimeFromDB($row['date_rated'])); $reviewAssignment->setDateReminded($this->datetimeFromDB($row['date_reminded'])); $reviewAssignment->setReminderWasAutomatic($row['reminder_was_automatic']); $reviewAssignment->setStage($row['stage']); $reviewAssignment->setReviewFileId($row['review_file_id']); $reviewAssignment->setReviewRevision($row['review_revision']); $reviewAssignment->setReviewFormId($row['review_form_id']); // Files $reviewAssignment->setReviewFile($this->paperFileDao->getPaperFile($row['review_file_id'], $row['review_revision'])); $reviewAssignment->setReviewerFile($this->paperFileDao->getPaperFile($row['reviewer_file_id'])); $reviewAssignment->setReviewerFileRevisions($this->paperFileDao->getPaperFileRevisions($row['reviewer_file_id'])); $reviewAssignment->setSuppFiles($this->suppFileDao->getSuppFilesByPaper($row['paper_id'])); // Comments $reviewAssignment->setMostRecentPeerReviewComment($this->paperCommentDao->getMostRecentPaperComment($row['paper_id'], COMMENT_TYPE_PEER_REVIEW, $row['review_id'])); HookRegistry::call('ReviewAssignmentDAO::_returnReviewAssignmentFromRow', array(&$reviewAssignment, &$row)); return $reviewAssignment; }
/** * Import reviews. */ function importReviews() { if ($this->hasOption('verbose')) { printf("Importing reviews\n"); } $userDao =& DAORegistry::getDAO('UserDAO'); $roleDao =& DAORegistry::getDAO('RoleDAO'); $editAssignmentDao =& DAORegistry::getDAO('EditAssignmentDAO'); $reviewAssignmentDao =& DAORegistry::getDAO('ReviewAssignmentDAO'); $paperCommentDao =& DAORegistry::getDAO('PaperCommentDAO'); $unassignedTrackId = null; $result =& $this->importDao->retrieve('SELECT * FROM reviews ORDER by timestamp'); while (!$result->EOF) { $row =& $result->fields; $schedConf =& $this->schedConfMap[$row['cf']]; $paper =& $this->paperMap[$row['paper']]; $reviewer =& $this->reviewerMap[$row['reviewer']]; if (!$schedConf || !$paper || !$reviewer) { // Database inconsistency! Skip this entry. if (!$schedConf) { $errors[] = "Unknown conference referenced in reviews: {$row['cf']}"; } else { unset($schedConf); } if (!$paper) { $errors[] = "Unknown paper referenced in reviews: {$row['paper']}"; } else { unset($paper); } if (!$reviewer) { $errors[] = "Unknown reviewer referenced in reviews: {$row['reviewer']}"; } else { unset($reviewer); } $result->MoveNext(); continue; } $schedConfId = $schedConf->getId(); $paperId = $paper->getId(); $reviewerId = $reviewer->getId(); $reviewAssignment = new ReviewAssignment(); $reviewAssignment->setReviewerId($reviewerId); $reviewAssignment->setPaperId($paperId); $reviewAssignment->setStage(REVIEW_STAGE_ABSTRACT); // Won't always be accurate $reviewAssignment->setDateAssigned($row['timestamp']); $reviewAssignment->setDateNotified($row['timestamp']); $reviewAssignment->setDateConfirmed($row['timestamp']); $reviewAssignment->setDeclined(0); switch (trim(strtolower(array_shift(split("[\n\\.:]", $row['recommendation']))))) { case 'accept': $reviewAssignment->setRecommendation(SUBMISSION_REVIEWER_RECOMMENDATION_ACCEPT); $reviewAssignment->setDateCompleted($row['timestamp']); break; case 'revise': case 'pending revisions': case 'accept with revisions': $reviewAssignment->setRecommendation(SUBMISSION_REVIEWER_RECOMMENDATION_PENDING_REVISIONS); $reviewAssignment->setDateCompleted($row['timestamp']); break; case 'decline': case 'reject': $reviewAssignment->setRecommendation(SUBMISSION_REVIEWER_RECOMMENDATION_DECLINE); $reviewAssignment->setDateCompleted($row['timestamp']); break; default: // WARNING: We're not setting a recommendation here at all! break; } $reviewId = $reviewAssignmentDao->insertReviewAssignment($reviewAssignment); $paperComment = new PaperComment(); $paperComment->setCommentType(COMMENT_TYPE_PEER_REVIEW); $paperComment->setRoleId(ROLE_ID_REVIEWER); $paperComment->setPaperId($paperId); $paperComment->setAssocId($reviewId); $paperComment->setAuthorId($reviewerId); $paperComment->setCommentTitle(''); $paperComment->setComments(Core::cleanVar($row['comments'] . "\n" . $row['recommendation'])); $paperComment->setDatePosted($row['timestamp']); $paperComment->setViewable(0); $paperCommentDao->insertPaperComment($paperComment); unset($schedConf); unset($paper); unset($reviewer); unset($reviewAssignment); unset($paperComment); $result->MoveNext(); } $result->Close(); }