• Main Page
  • Modules
  • Classes
  • Files
  • File List

classes/submission/reviewAssignment/ReviewAssignmentDAO.inc.php

00001 <?php
00002 
00016 import('classes.submission.reviewAssignment.ReviewAssignment');
00017 import('lib.pkp.classes.submission.reviewAssignment.PKPReviewAssignmentDAO');
00018 
00019 class ReviewAssignmentDAO extends PKPReviewAssignmentDAO {
00020    var $submissionFileDao;
00021    var $monographCommentsDao;
00022 
00026    function ReviewAssignmentDAO() {
00027       parent::PKPReviewAssignmentDAO();
00028       $this->submissionFileDao =& DAORegistry::getDAO('SubmissionFileDAO');
00029       $this->monographCommentDao =& DAORegistry::getDAO('MonographCommentDAO');
00030    }
00031 
00038    function &getLastReviewRoundReviewAssignmentByReviewer($monographId, $reviewerId) {
00039       $params = array(
00040          (int) $monographId,
00041          (int) $reviewerId
00042       );
00043 
00044       $result =& $this->retrieve(
00045          $this->_getSelectQuery() .
00046          ' WHERE  r.submission_id = ? AND
00047             r.reviewer_id = ? AND
00048             r.cancelled <> 1
00049          ORDER BY r2.stage_id DESC, r2.round DESC LIMIT 1',
00050          $params
00051       );
00052 
00053       $returner = null;
00054       if ($result->RecordCount() != 0) {
00055          $returner =& $this->_fromRow($result->GetRowAssoc(false));
00056       }
00057 
00058       $result->Close();
00059       unset($result);
00060 
00061       return $returner;
00062    }
00063 
00068    function getInsertReviewId() {
00069       return $this->getInsertId('review_assignments', 'review_id');
00070    }
00071 
00076    function getAverageQualityRatings($pressId) {
00077       $averageQualityRatings = array();
00078       $result =& $this->retrieve(
00079          'SELECT  r.reviewer_id, AVG(r.quality) AS average, COUNT(r.quality) AS count
00080          FROM  review_assignments r, monographs a
00081          WHERE r.submission_id = a.monograph_id AND
00082             a.press_id = ?
00083          GROUP BY r.reviewer_id',
00084          (int) $pressId
00085          );
00086 
00087       while (!$result->EOF) {
00088          $row = $result->GetRowAssoc(false);
00089          $averageQualityRatings[$row['reviewer_id']] = array('average' => $row['average'], 'count' => $row['count']);
00090          $result->MoveNext();
00091       }
00092 
00093       $result->Close();
00094       unset($result);
00095 
00096       return $averageQualityRatings;
00097    }
00098 
00103    function newDataObject() {
00104       return new ReviewAssignment();
00105    }
00106 
00107 
00113    function &_fromRow(&$row) {
00114       $reviewAssignment =& parent::_fromRow($row);
00115 
00116       // Comments
00117       $reviewAssignment->setMostRecentPeerReviewComment($this->monographCommentDao->getMostRecentMonographComment($row['submission_id'], COMMENT_TYPE_PEER_REVIEW, $row['review_id']));
00118 
00119       HookRegistry::call('ReviewAssignmentDAO::_fromRow', array(&$reviewAssignment, &$row));
00120       return $reviewAssignment;
00121    }
00122 
00127    function getReviewMethodsTranslationKeys() {
00128       return array(
00129          SUBMISSION_REVIEW_METHOD_DOUBLEBLIND => 'editor.submissionReview.doubleBlind',
00130          SUBMISSION_REVIEW_METHOD_BLIND => 'editor.submissionReview.blind',
00131          SUBMISSION_REVIEW_METHOD_OPEN => 'editor.submissionReview.open',
00132       );
00133    }
00134 
00138    function getReviewRoundJoin() {
00139       return 'r.review_round_id = r2.review_round_id';
00140    }
00141 
00142    //
00143    // Add class to temporarily consolidate PKPReviewAssignmentDAO and ReviewAssignmentDAO
00144    //
00145    function updateObject(&$reviewAssignment) {
00146       parent::updateReviewAssignment($reviewAssignment);
00147    }
00148 
00149 
00150    //
00151    // Override methods from PKPSubmissionFileDAO
00152    // FIXME *6902* Move this code to PKPReviewAssignmentDAO after the review round
00153    // refactoring is ported to other applications.
00160    function &getReviewAssignment($reviewRoundId, $reviewerId) {
00161       $params = array(
00162       (int) $reviewRoundId,
00163       (int) $reviewerId
00164       );
00165 
00166       $result =& $this->retrieve(
00167          $this->_getSelectQuery() .
00168          ' WHERE  r.review_round_id = ? AND
00169             r.reviewer_id = ? AND
00170             r.cancelled <> 1',
00171          $params
00172       );
00173 
00174       $returner = null;
00175       if ($result->RecordCount() != 0) {
00176          $returner =& $this->_fromRow($result->GetRowAssoc(false));
00177       }
00178 
00179       $result->Close();
00180       unset($result);
00181 
00182       return $returner;
00183    }
00184 
00192    function &getByReviewRoundId($reviewRoundId, $excludeCancelled = false) {
00193       $params = array((int)$reviewRoundId);
00194 
00195       $query = $this->_getSelectQuery() .
00196          ' WHERE r.review_round_id = ?';
00197 
00198       if ($excludeCancelled) {
00199          $query .= ' AND (r.cancelled = 0 OR r.cancelled IS NULL)';
00200       }
00201 
00202       $query .= ' ORDER BY review_id';
00203 
00204       return $this->_getReviewAssignmentsArray($query, $params);
00205    }
00206 
00210    function &getBySubmissionId($submissionId, $reviewRoundId = null, $stageId = null) {
00211       $query = $this->_getSelectQuery() .
00212          ' WHERE  r.submission_id = ?';
00213 
00214       $orderBy = ' ORDER BY review_id';
00215 
00216       $queryParams[] = (int) $submissionId;
00217 
00218       if ($reviewRoundId != null) {
00219          $query .= ' AND r2.review_round_id = ?';
00220          $queryParams[] = (int) $reviewRoundId;
00221       } else {
00222          $orderBy .= ', r2.review_round_id';
00223       }
00224 
00225       if ($stageId != null) {
00226          $query .= ' AND r2.stage_id = ?';
00227          $queryParams[] = (int) $stageId;
00228       } else {
00229          $orderBy .= ', r2.stage_id';
00230       }
00231 
00232       $query .= $orderBy;
00233 
00234       return $this->_getReviewAssignmentsArray($query, $queryParams);
00235    }
00236 
00240    function &getReviewerIdsBySubmissionId($submissionId, $stageId = null, $reviewRoundId = null) {
00241       $query = 'SELECT r.reviewer_id
00242          FROM  review_assignments r
00243          WHERE r.submission_id = ?';
00244 
00245       $queryParams[] = (int) $submissionId;
00246 
00247       if ($reviewRoundId != null) {
00248          $query .= ' AND r.review_round_id = ?';
00249          $queryParams[] = (int) $reviewRoundId;
00250       }
00251 
00252       if ($stageId != null) {
00253          $query .= ' AND r.stage_id = ?';
00254          $queryParams[] = (int) $stageId;
00255       }
00256 
00257       $result =& $this->retrieve($query, $queryParams);
00258 
00259       $reviewAssignments = array();
00260       while (!$result->EOF) {
00261          $row = $result->GetRowAssoc(false);
00262          $reviewAssignments[] = $row['reviewer_id'];
00263          $result->MoveNext();
00264       }
00265 
00266       $result->Close();
00267       unset($result);
00268 
00269       return $reviewAssignments;
00270    }
00271 
00275    function &getReviewIndexesForRound($submissionId, $reviewRoundId) {
00276       $result =& $this->retrieve(
00277          'SELECT  review_id
00278          FROM  review_assignments
00279          WHERE submission_id = ? AND
00280             review_round_id = ? AND
00281             (cancelled = 0 OR cancelled IS NULL)
00282          ORDER BY review_id',
00283          array((int) $submissionId, (int) $reviewRoundId)
00284       );
00285 
00286       $index = 0;
00287       $returner = array();
00288       while (!$result->EOF) {
00289          $row = $result->GetRowAssoc(false);
00290          $returner[$row['review_id']] = $index++;
00291          $result->MoveNext();
00292       }
00293 
00294       $result->Close();
00295       unset($result);
00296 
00297       return $returner;
00298    }
00299 
00303    function &getLastModifiedByRound($submissionId) {
00304       $returner = array();
00305 
00306       $result =& $this->retrieve(
00307          'SELECT  review_round_id, MAX(last_modified) as last_modified
00308          FROM  review_assignments
00309          WHERE submission_id = ?
00310          GROUP BY review_round_id',
00311          (int) $submissionId
00312       );
00313 
00314       while (!$result->EOF) {
00315          $row = $result->GetRowAssoc(false);
00316          $returner[$row['review_round_id']] = $this->datetimeFromDB($row['last_modified']);
00317          $result->MoveNext();
00318       }
00319 
00320       $result->Close();
00321       unset($result);
00322 
00323       return $returner;
00324    }
00325 
00329    function &getEarliestNotificationByRound($submissionId) {
00330       $returner = array();
00331 
00332       $result =& $this->retrieve(
00333          'SELECT  review_round_id, MIN(date_notified) as earliest_date
00334          FROM  review_assignments
00335          WHERE submission_id = ?
00336          GROUP BY review_round_id',
00337          (int) $submissionId
00338       );
00339 
00340       while (!$result->EOF) {
00341          $row = $result->GetRowAssoc(false);
00342          $returner[$row['review_round_id']] = $this->datetimeFromDB($row['earliest_date']);
00343          $result->MoveNext();
00344       }
00345 
00346       $result->Close();
00347       unset($result);
00348 
00349       return $returner;
00350    }
00351 
00356    function _getSelectQuery() {
00357       return 'SELECT r.*, r2.review_revision, u.first_name, u.last_name FROM review_assignments r
00358          LEFT JOIN users u ON (r.reviewer_id = u.user_id)
00359          LEFT JOIN review_rounds r2 ON (r.review_round_id = r2.review_round_id)';
00360    }
00361 
00369    function &_getReviewAssignmentsArray($query, $queryParams) {
00370       $reviewAssignments = array();
00371 
00372       $result =& $this->retrieve($query, $queryParams);
00373 
00374       while (!$result->EOF) {
00375          $reviewAssignments[$result->fields['review_id']] =& $this->_fromRow($result->GetRowAssoc(false));
00376          $result->MoveNext();
00377       }
00378 
00379       $result->Close();
00380       unset($result);
00381 
00382       return $reviewAssignments;
00383    }
00384 }
00385 
00386 ?>

Generated on Mon Sep 17 2012 13:58:55 for Open Monograph Press by  doxygen 1.7.1