/**
  * Internal function to return a ReviewerSubmission object from a row.
  * @param $row array
  * @return ReviewerSubmission
  */
 function &_returnReviewerSubmissionFromRow(&$row)
 {
     $reviewerSubmission = new ReviewerSubmission();
     // Director Assignment
     $editAssignments =& $this->editAssignmentDao->getEditAssignmentsByPaperId($row['paper_id']);
     $reviewerSubmission->setEditAssignments($editAssignments->toArray());
     // Files
     $reviewerSubmission->setSubmissionFile($this->paperFileDao->getPaperFile($row['submission_file_id']));
     $reviewerSubmission->setRevisedFile($this->paperFileDao->getPaperFile($row['revised_file_id']));
     $reviewerSubmission->setSuppFiles($this->suppFileDao->getSuppFilesByPaper($row['paper_id']));
     $reviewerSubmission->setReviewFile($this->paperFileDao->getPaperFile($row['review_file_id']));
     $reviewerSubmission->setReviewerFile($this->paperFileDao->getPaperFile($row['reviewer_file_id']));
     $reviewerSubmission->setReviewerFileRevisions($this->paperFileDao->getPaperFileRevisions($row['reviewer_file_id']));
     // Comments
     $reviewerSubmission->setMostRecentPeerReviewComment($this->paperCommentDao->getMostRecentPaperComment($row['paper_id'], COMMENT_TYPE_PEER_REVIEW, $row['review_id']));
     // Director Decisions
     for ($i = 1; $i <= $row['current_stage']; $i++) {
         $reviewerSubmission->setDecisions($this->getDirectorDecisions($row['paper_id'], $i), $i);
     }
     // Review Assignment
     $reviewerSubmission->setReviewId($row['review_id']);
     $reviewerSubmission->setReviewerId($row['reviewer_id']);
     $reviewerSubmission->setReviewerFullName($row['first_name'] . ' ' . $row['last_name']);
     $reviewerSubmission->setRecommendation($row['recommendation']);
     $reviewerSubmission->setDateAssigned($this->datetimeFromDB($row['date_assigned']));
     $reviewerSubmission->setDateNotified($this->datetimeFromDB($row['date_notified']));
     $reviewerSubmission->setDateConfirmed($this->datetimeFromDB($row['date_confirmed']));
     $reviewerSubmission->setDateCompleted($this->datetimeFromDB($row['date_completed']));
     $reviewerSubmission->setDateAcknowledged($this->datetimeFromDB($row['date_acknowledged']));
     $reviewerSubmission->setDateDue($this->datetimeFromDB($row['date_due']));
     $reviewerSubmission->setDeclined($row['declined']);
     $reviewerSubmission->setReplaced($row['replaced']);
     $reviewerSubmission->setCancelled($row['cancelled'] == 1 ? 1 : 0);
     $reviewerSubmission->setReviewerFileId($row['reviewer_file_id']);
     $reviewerSubmission->setQuality($row['quality']);
     $reviewerSubmission->setStage($row['stage']);
     $reviewerSubmission->setReviewFileId($row['review_file_id']);
     $reviewerSubmission->setReviewRevision($row['review_revision']);
     // Paper attributes
     $this->paperDao->_paperFromRow($reviewerSubmission, $row);
     HookRegistry::call('ReviewerSubmissionDAO::_returnReviewerSubmissionFromRow', array(&$reviewerSubmission, &$row));
     return $reviewerSubmission;
 }