first commit
This commit is contained in:
@@ -0,0 +1,223 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @defgroup reviewForm Review Form
|
||||
* Implements review forms, which are forms that can be created and customized
|
||||
* by the manager and presented to the reviewer in order to assess submissions.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file classes/reviewForm/ReviewForm.php
|
||||
*
|
||||
* Copyright (c) 2014-2021 Simon Fraser University
|
||||
* Copyright (c) 2000-2021 John Willinsky
|
||||
* Distributed under the GNU GPL v3. For full terms see the file docs/COPYING.
|
||||
*
|
||||
* @class ReviewForm
|
||||
*
|
||||
* @ingroup reviewForm
|
||||
*
|
||||
* @see ReviewerFormDAO
|
||||
*
|
||||
* @brief Basic class describing a review form.
|
||||
*
|
||||
*/
|
||||
|
||||
namespace PKP\reviewForm;
|
||||
|
||||
class ReviewForm extends \PKP\core\DataObject
|
||||
{
|
||||
/**
|
||||
* Get localized title.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getLocalizedTitle()
|
||||
{
|
||||
return $this->getLocalizedData('title');
|
||||
}
|
||||
|
||||
/**
|
||||
* Get localized description.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getLocalizedDescription()
|
||||
{
|
||||
return $this->getLocalizedData('description');
|
||||
}
|
||||
|
||||
//
|
||||
// Get/set methods
|
||||
//
|
||||
|
||||
/**
|
||||
* Get the number of completed reviews for this review form.
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function getCompleteCount()
|
||||
{
|
||||
return $this->getData('completeCount');
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the number of complete reviews for this review form.
|
||||
*
|
||||
* @param int $completeCount
|
||||
*/
|
||||
public function setCompleteCount($completeCount)
|
||||
{
|
||||
$this->setData('completeCount', $completeCount);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the number of incomplete reviews for this review form.
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function getIncompleteCount()
|
||||
{
|
||||
return $this->getData('incompleteCount');
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the number of incomplete reviews for this review form.
|
||||
*
|
||||
* @param int $incompleteCount
|
||||
*/
|
||||
public function setIncompleteCount($incompleteCount)
|
||||
{
|
||||
$this->setData('incompleteCount', $incompleteCount);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the associated type.
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function getAssocType()
|
||||
{
|
||||
return $this->getData('assocType');
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the associated type.
|
||||
*
|
||||
* @param int $assocType
|
||||
*/
|
||||
public function setAssocType($assocType)
|
||||
{
|
||||
$this->setData('assocType', $assocType);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the Id of the associated type.
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function getAssocId()
|
||||
{
|
||||
return $this->getData('assocId');
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the Id of the associated type.
|
||||
*
|
||||
* @param int $assocId
|
||||
*/
|
||||
public function setAssocId($assocId)
|
||||
{
|
||||
$this->setData('assocId', $assocId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get sequence of review form.
|
||||
*
|
||||
* @return float
|
||||
*/
|
||||
public function getSequence()
|
||||
{
|
||||
return $this->getData('sequence');
|
||||
}
|
||||
|
||||
/**
|
||||
* Set sequence of review form.
|
||||
*
|
||||
* @param float $sequence
|
||||
*/
|
||||
public function setSequence($sequence)
|
||||
{
|
||||
$this->setData('sequence', $sequence);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get active flag
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function getActive()
|
||||
{
|
||||
return $this->getData('active');
|
||||
}
|
||||
|
||||
/**
|
||||
* Set active flag
|
||||
*
|
||||
* @param int $active
|
||||
*/
|
||||
public function setActive($active)
|
||||
{
|
||||
$this->setData('active', $active);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get title.
|
||||
*
|
||||
* @param string $locale
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getTitle($locale)
|
||||
{
|
||||
return $this->getData('title', $locale);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set title.
|
||||
*
|
||||
* @param string $title
|
||||
* @param string $locale
|
||||
*/
|
||||
public function setTitle($title, $locale)
|
||||
{
|
||||
$this->setData('title', $title, $locale);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get description.
|
||||
*
|
||||
* @param string $locale
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getDescription($locale)
|
||||
{
|
||||
return $this->getData('description', $locale);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set description.
|
||||
*
|
||||
* @param string $description
|
||||
* @param string $locale
|
||||
*/
|
||||
public function setDescription($description, $locale)
|
||||
{
|
||||
$this->setData('description', $description, $locale);
|
||||
}
|
||||
}
|
||||
|
||||
if (!PKP_STRICT_MODE) {
|
||||
class_alias('\PKP\reviewForm\ReviewForm', '\ReviewForm');
|
||||
}
|
||||
@@ -0,0 +1,318 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @file classes/reviewForm/ReviewFormDAO.php
|
||||
*
|
||||
* Copyright (c) 2014-2021 Simon Fraser University
|
||||
* Copyright (c) 2000-2021 John Willinsky
|
||||
* Distributed under the GNU GPL v3. For full terms see the file docs/COPYING.
|
||||
*
|
||||
* @class ReviewFormDAO
|
||||
*
|
||||
* @ingroup reviewForm
|
||||
*
|
||||
* @see ReviewerForm
|
||||
*
|
||||
* @brief Operations for retrieving and modifying ReviewForm objects.
|
||||
*
|
||||
*/
|
||||
|
||||
namespace PKP\reviewForm;
|
||||
|
||||
use PKP\db\DAORegistry;
|
||||
use PKP\db\DAOResultFactory;
|
||||
use PKP\db\DBResultRange;
|
||||
use PKP\plugins\Hook;
|
||||
|
||||
class ReviewFormDAO extends \PKP\db\DAO
|
||||
{
|
||||
/**
|
||||
* Retrieve a review form by ID.
|
||||
*
|
||||
* @param int $reviewFormId
|
||||
* @param int $assocType optional
|
||||
* @param int $assocId optional
|
||||
*
|
||||
* @return ReviewForm
|
||||
*/
|
||||
public function getById($reviewFormId, $assocType = null, $assocId = null)
|
||||
{
|
||||
$params = [(int) $reviewFormId];
|
||||
if ($assocType) {
|
||||
$params[] = (int) $assocType;
|
||||
$params[] = (int) $assocId;
|
||||
}
|
||||
|
||||
$result = $this->retrieve(
|
||||
'SELECT rf.*,
|
||||
(SELECT COUNT(*) FROM review_assignments ra WHERE ra.date_completed IS NOT NULL AND ra.declined <> 1 AND ra.review_form_id = rf.review_form_id) AS complete_count,
|
||||
(SELECT COUNT(*) FROM review_assignments ra WHERE ra.date_completed IS NULL AND ra.declined <> 1 AND ra.review_form_id = rf.review_form_id) AS incomplete_count
|
||||
FROM review_forms rf
|
||||
WHERE rf.review_form_id = ? AND rf.assoc_type = ? AND rf.assoc_id = ?',
|
||||
$params
|
||||
);
|
||||
$row = $result->current();
|
||||
return $row ? $this->_fromRow((array) $row) : null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Construct a new data object corresponding to this DAO.
|
||||
*
|
||||
* @return ReviewForm
|
||||
*/
|
||||
public function newDataObject()
|
||||
{
|
||||
return new ReviewForm();
|
||||
}
|
||||
|
||||
/**
|
||||
* Internal function to return a ReviewForm object from a row.
|
||||
*
|
||||
* @param array $row
|
||||
*
|
||||
* @return ReviewForm
|
||||
*/
|
||||
public function _fromRow($row)
|
||||
{
|
||||
$reviewForm = $this->newDataObject();
|
||||
$reviewForm->setId($row['review_form_id']);
|
||||
$reviewForm->setAssocType($row['assoc_type']);
|
||||
$reviewForm->setAssocId($row['assoc_id']);
|
||||
$reviewForm->setSequence($row['seq']);
|
||||
$reviewForm->setActive($row['is_active']);
|
||||
$reviewForm->setCompleteCount($row['complete_count']);
|
||||
$reviewForm->setIncompleteCount($row['incomplete_count']);
|
||||
|
||||
$this->getDataObjectSettings('review_form_settings', 'review_form_id', $row['review_form_id'], $reviewForm);
|
||||
|
||||
Hook::call('ReviewFormDAO::_fromRow', [&$reviewForm, &$row]);
|
||||
|
||||
return $reviewForm;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a review form exists with the specified ID.
|
||||
*
|
||||
* @param int $reviewFormId
|
||||
* @param int $assocType
|
||||
* @param int $assocId
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function reviewFormExists($reviewFormId, $assocType, $assocId)
|
||||
{
|
||||
$result = $this->retrieve(
|
||||
'SELECT COUNT(*) AS row_count FROM review_forms WHERE review_form_id = ? AND assoc_type = ? AND assoc_id = ?',
|
||||
[(int) $reviewFormId, (int) $assocType, (int) $assocId]
|
||||
);
|
||||
$row = $result->current();
|
||||
return $row ? $row->row_count == 1 : false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the list of fields for which data can be localized.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getLocaleFieldNames()
|
||||
{
|
||||
return ['title', 'description'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the localized fields for this table
|
||||
*
|
||||
* @param object $reviewForm
|
||||
*/
|
||||
public function updateLocaleFields(&$reviewForm)
|
||||
{
|
||||
$this->updateDataObjectSettings('review_form_settings', $reviewForm, [
|
||||
'review_form_id' => $reviewForm->getId()
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Insert a new review form.
|
||||
*
|
||||
* @param ReviewForm $reviewForm
|
||||
*/
|
||||
public function insertObject($reviewForm)
|
||||
{
|
||||
$this->update(
|
||||
'INSERT INTO review_forms
|
||||
(assoc_type, assoc_id, seq, is_active)
|
||||
VALUES
|
||||
(?, ?, ?, ?)',
|
||||
[
|
||||
(int) $reviewForm->getAssocType(),
|
||||
(int) $reviewForm->getAssocId(),
|
||||
$reviewForm->getSequence() == null ? 0 : (float) $reviewForm->getSequence(),
|
||||
$reviewForm->getActive() ? 1 : 0
|
||||
]
|
||||
);
|
||||
|
||||
$reviewForm->setId($this->getInsertId());
|
||||
$this->updateLocaleFields($reviewForm);
|
||||
|
||||
return $reviewForm->getId();
|
||||
}
|
||||
|
||||
/**
|
||||
* Update an existing review form.
|
||||
*
|
||||
* @param ReviewForm $reviewForm
|
||||
*/
|
||||
public function updateObject($reviewForm)
|
||||
{
|
||||
$returner = $this->update(
|
||||
'UPDATE review_forms
|
||||
SET
|
||||
assoc_type = ?,
|
||||
assoc_id = ?,
|
||||
seq = ?,
|
||||
is_active = ?
|
||||
WHERE review_form_id = ?',
|
||||
[
|
||||
(int) $reviewForm->getAssocType(),
|
||||
(int) $reviewForm->getAssocId(),
|
||||
(float) $reviewForm->getSequence(),
|
||||
$reviewForm->getActive() ? 1 : 0,
|
||||
(int) $reviewForm->getId()
|
||||
]
|
||||
);
|
||||
|
||||
$this->updateLocaleFields($reviewForm);
|
||||
|
||||
return $returner;
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a review form.
|
||||
*
|
||||
* @param ReviewForm $reviewForm
|
||||
*/
|
||||
public function deleteObject($reviewForm)
|
||||
{
|
||||
return $this->deleteById($reviewForm->getId());
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a review form by Id.
|
||||
*
|
||||
* @param int $reviewFormId
|
||||
*/
|
||||
public function deleteById($reviewFormId)
|
||||
{
|
||||
$reviewFormElementDao = DAORegistry::getDAO('ReviewFormElementDAO'); /** @var ReviewFormElementDAO $reviewFormElementDao */
|
||||
$reviewFormElementDao->deleteByReviewFormId($reviewFormId);
|
||||
|
||||
$this->update('DELETE FROM review_form_settings WHERE review_form_id = ?', [(int) $reviewFormId]);
|
||||
$this->update('DELETE FROM review_forms WHERE review_form_id = ?', [(int) $reviewFormId]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete all review forms by assoc Id.
|
||||
*
|
||||
* @param int $assocType
|
||||
* @param int $assocId
|
||||
*/
|
||||
public function deleteByAssoc($assocType, $assocId)
|
||||
{
|
||||
$reviewForms = $this->getByAssocId($assocType, $assocId);
|
||||
|
||||
while ($reviewForm = $reviewForms->next()) {
|
||||
$this->deleteById($reviewForm->getId());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all review forms by assoc id.
|
||||
*
|
||||
* @param int $assocType
|
||||
* @param int $assocId
|
||||
* @param ?DBResultRange $rangeInfo (optional)
|
||||
*
|
||||
* @return DAOResultFactory<ReviewForm> Object containing matching ReviewForms
|
||||
*/
|
||||
public function getByAssocId($assocType, $assocId, $rangeInfo = null)
|
||||
{
|
||||
$result = $this->retrieveRange(
|
||||
'SELECT rf.*,
|
||||
(SELECT COUNT(*) FROM review_assignments ra WHERE ra.date_completed IS NOT NULL AND ra.declined <> 1 AND ra.review_form_id = rf.review_form_id) AS complete_count,
|
||||
(SELECT COUNT(*) FROM review_assignments ra WHERE ra.date_completed IS NULL AND ra.declined <> 1 AND ra.review_form_id = rf.review_form_id) AS incomplete_count
|
||||
FROM review_forms rf
|
||||
WHERE rf.assoc_type = ? AND rf.assoc_id = ?
|
||||
ORDER BY rf.seq',
|
||||
[(int) $assocType, (int) $assocId],
|
||||
$rangeInfo
|
||||
);
|
||||
|
||||
return new DAOResultFactory($result, $this, '_fromRow');
|
||||
}
|
||||
|
||||
/**
|
||||
* Get active review forms for an associated object.
|
||||
*
|
||||
* @param int $assocType
|
||||
* @param int $assocId
|
||||
* @param ?DBResultRange $rangeInfo (optional)
|
||||
*
|
||||
* @return DAOResultFactory<ReviewForm> containing matching ReviewForms
|
||||
*/
|
||||
public function getActiveByAssocId($assocType, $assocId, $rangeInfo = null)
|
||||
{
|
||||
$result = $this->retrieveRange(
|
||||
'SELECT rf.*,
|
||||
(SELECT COUNT(*) FROM review_assignments ra WHERE ra.date_completed IS NOT NULL AND ra.declined <> 1 AND ra.review_form_id = rf.review_form_id) AS complete_count,
|
||||
(SELECT COUNT(*) FROM review_assignments ra WHERE ra.date_completed IS NULL AND ra.declined <> 1 AND ra.review_form_id = rf.review_form_id) AS incomplete_count
|
||||
FROM review_forms rf
|
||||
WHERE rf.assoc_type = ? AND rf.assoc_id = ? AND rf.is_active = 1
|
||||
ORDER BY rf.seq',
|
||||
[(int) $assocType, (int) $assocId],
|
||||
$rangeInfo
|
||||
);
|
||||
|
||||
return new DAOResultFactory($result, $this, '_fromRow');
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a review form exists with the specified ID.
|
||||
*
|
||||
* @param int $reviewFormId
|
||||
* @param int $assocType optional
|
||||
* @param int $assocId optional
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function unusedReviewFormExists($reviewFormId, $assocType = null, $assocId = null)
|
||||
{
|
||||
$reviewForm = $this->getById($reviewFormId, $assocType, $assocId);
|
||||
if (!$reviewForm) {
|
||||
return false;
|
||||
}
|
||||
if ($reviewForm->getCompleteCount() != 0 || $reviewForm->getIncompleteCount() != 0) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sequentially renumber review form in their sequence order.
|
||||
*
|
||||
* @param int $assocType
|
||||
* @param int $assocId
|
||||
*/
|
||||
public function resequenceReviewForms($assocType, $assocId)
|
||||
{
|
||||
$result = $this->retrieve('SELECT review_form_id FROM review_forms WHERE assoc_type = ? AND assoc_id = ? ORDER BY seq', [(int) $assocType, (int) $assocId]);
|
||||
|
||||
for ($i = 1; $row = $result->current(); $i++) {
|
||||
$this->update('UPDATE review_forms SET seq = ? WHERE review_form_id = ?', [$i, $row->review_form_id]);
|
||||
$result->next();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!PKP_STRICT_MODE) {
|
||||
class_alias('\PKP\reviewForm\ReviewFormDAO', '\ReviewFormDAO');
|
||||
}
|
||||
@@ -0,0 +1,277 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @file classes/reviewForm/ReviewFormElement.php
|
||||
*
|
||||
* Copyright (c) 2014-2021 Simon Fraser University
|
||||
* Copyright (c) 2000-2021 John Willinsky
|
||||
* Distributed under the GNU GPL v3. For full terms see the file docs/COPYING.
|
||||
*
|
||||
* @class ReviewFormElement
|
||||
*
|
||||
* @ingroup reviewForm
|
||||
*
|
||||
* @see ReviewFormElementDAO
|
||||
*
|
||||
* @brief Basic class describing a review form element.
|
||||
*
|
||||
*/
|
||||
|
||||
namespace PKP\reviewForm;
|
||||
|
||||
class ReviewFormElement extends \PKP\core\DataObject
|
||||
{
|
||||
public const REVIEW_FORM_ELEMENT_TYPE_SMALL_TEXT_FIELD = 1;
|
||||
public const REVIEW_FORM_ELEMENT_TYPE_TEXT_FIELD = 2;
|
||||
public const REVIEW_FORM_ELEMENT_TYPE_TEXTAREA = 3;
|
||||
public const REVIEW_FORM_ELEMENT_TYPE_CHECKBOXES = 4;
|
||||
public const REVIEW_FORM_ELEMENT_TYPE_RADIO_BUTTONS = 5;
|
||||
public const REVIEW_FORM_ELEMENT_TYPE_DROP_DOWN_BOX = 6;
|
||||
|
||||
/**
|
||||
* Get localized question.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getLocalizedQuestion()
|
||||
{
|
||||
return $this->getLocalizedData('question');
|
||||
}
|
||||
|
||||
/**
|
||||
* Get localized description.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getLocalizedDescription()
|
||||
{
|
||||
return $this->getLocalizedData('description');
|
||||
}
|
||||
|
||||
/**
|
||||
* Get localized list of possible responses.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getLocalizedPossibleResponses()
|
||||
{
|
||||
return $this->getLocalizedData('possibleResponses');
|
||||
}
|
||||
|
||||
//
|
||||
// Get/set methods
|
||||
//
|
||||
|
||||
/**
|
||||
* Get the review form ID of the review form element.
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function getReviewFormId()
|
||||
{
|
||||
return $this->getData('reviewFormId');
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the review form ID of the review form element.
|
||||
*
|
||||
* @param int $reviewFormId
|
||||
*/
|
||||
public function setReviewFormId($reviewFormId)
|
||||
{
|
||||
$this->setData('reviewFormId', $reviewFormId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get sequence of review form element.
|
||||
*
|
||||
* @return float
|
||||
*/
|
||||
public function getSequence()
|
||||
{
|
||||
return $this->getData('sequence');
|
||||
}
|
||||
|
||||
/**
|
||||
* Set sequence of review form element.
|
||||
*
|
||||
* @param float $sequence
|
||||
*/
|
||||
public function setSequence($sequence)
|
||||
{
|
||||
$this->setData('sequence', $sequence);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the type of the review form element.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getElementType()
|
||||
{
|
||||
return $this->getData('reviewFormElementType');
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the type of the review form element.
|
||||
*
|
||||
* @param string $reviewFormElementType
|
||||
*/
|
||||
public function setElementType($reviewFormElementType)
|
||||
{
|
||||
$this->setData('reviewFormElementType', $reviewFormElementType);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get required flag
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function getRequired()
|
||||
{
|
||||
return $this->getData('required');
|
||||
}
|
||||
|
||||
/**
|
||||
* Set required flag
|
||||
*/
|
||||
public function setRequired($required)
|
||||
{
|
||||
$this->setData('required', $required);
|
||||
}
|
||||
|
||||
/**
|
||||
* get included
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function getIncluded()
|
||||
{
|
||||
return $this->getData('included');
|
||||
}
|
||||
|
||||
/**
|
||||
* set included
|
||||
*
|
||||
* @param bool $included
|
||||
*/
|
||||
public function setIncluded($included)
|
||||
{
|
||||
$this->setData('included', $included);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get question.
|
||||
*
|
||||
* @param string $locale
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getQuestion($locale)
|
||||
{
|
||||
return $this->getData('question', $locale);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set question.
|
||||
*
|
||||
* @param string $question
|
||||
* @param string $locale
|
||||
*/
|
||||
public function setQuestion($question, $locale)
|
||||
{
|
||||
$this->setData('question', $question, $locale);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get description.
|
||||
*
|
||||
* @param string $locale
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getDescription($locale)
|
||||
{
|
||||
return $this->getData('description', $locale);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set description.
|
||||
*
|
||||
* @param string $description
|
||||
* @param string $locale
|
||||
*/
|
||||
public function setDescription($description, $locale)
|
||||
{
|
||||
$this->setData('description', $description, $locale);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get possible response.
|
||||
*
|
||||
* @param string $locale
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getPossibleResponses($locale)
|
||||
{
|
||||
return $this->getData('possibleResponses', $locale);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set possibleResponse.
|
||||
*
|
||||
* @param string $locale
|
||||
*/
|
||||
public function setPossibleResponses($possibleResponses, $locale)
|
||||
{
|
||||
$this->setData('possibleResponses', $possibleResponses, $locale);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get an associative array matching review form element type codes with locale strings.
|
||||
* (Includes default '' => "Choose One" string.)
|
||||
*
|
||||
* @return array reviewFormElementType => localeString
|
||||
*/
|
||||
public function getReviewFormElementTypeOptions()
|
||||
{
|
||||
return [
|
||||
'' => 'manager.reviewFormElements.chooseType',
|
||||
self::REVIEW_FORM_ELEMENT_TYPE_SMALL_TEXT_FIELD => 'manager.reviewFormElements.smalltextfield',
|
||||
self::REVIEW_FORM_ELEMENT_TYPE_TEXT_FIELD => 'manager.reviewFormElements.textfield',
|
||||
self::REVIEW_FORM_ELEMENT_TYPE_TEXTAREA => 'manager.reviewFormElements.textarea',
|
||||
self::REVIEW_FORM_ELEMENT_TYPE_CHECKBOXES => 'manager.reviewFormElements.checkboxes',
|
||||
self::REVIEW_FORM_ELEMENT_TYPE_RADIO_BUTTONS => 'manager.reviewFormElements.radiobuttons',
|
||||
self::REVIEW_FORM_ELEMENT_TYPE_DROP_DOWN_BOX => 'manager.reviewFormElements.dropdownbox',
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get an array of all multiple responses element types.
|
||||
*
|
||||
* @return array reviewFormElementTypes
|
||||
*/
|
||||
public function getMultipleResponsesElementTypes()
|
||||
{
|
||||
return [
|
||||
self::REVIEW_FORM_ELEMENT_TYPE_CHECKBOXES,
|
||||
self::REVIEW_FORM_ELEMENT_TYPE_RADIO_BUTTONS,
|
||||
self::REVIEW_FORM_ELEMENT_TYPE_DROP_DOWN_BOX,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
if (!PKP_STRICT_MODE) {
|
||||
class_alias('\PKP\reviewForm\ReviewFormElement', '\ReviewFormElement');
|
||||
foreach ([
|
||||
'REVIEW_FORM_ELEMENT_TYPE_SMALL_TEXT_FIELD',
|
||||
'REVIEW_FORM_ELEMENT_TYPE_TEXT_FIELD',
|
||||
'REVIEW_FORM_ELEMENT_TYPE_TEXTAREA',
|
||||
'REVIEW_FORM_ELEMENT_TYPE_CHECKBOXES',
|
||||
'REVIEW_FORM_ELEMENT_TYPE_RADIO_BUTTONS',
|
||||
'REVIEW_FORM_ELEMENT_TYPE_DROP_DOWN_BOX',
|
||||
] as $constantName) {
|
||||
define($constantName, constant('\ReviewFormElement::' . $constantName));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,317 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @file classes/reviewForm/ReviewFormElementDAO.php
|
||||
*
|
||||
* Copyright (c) 2014-2021 Simon Fraser University
|
||||
* Copyright (c) 2000-2021 John Willinsky
|
||||
* Distributed under the GNU GPL v3. For full terms see the file docs/COPYING.
|
||||
*
|
||||
* @class ReviewFormElementDAO
|
||||
*
|
||||
* @ingroup reviewForm
|
||||
*
|
||||
* @see ReviewFormElement
|
||||
*
|
||||
* @brief Operations for retrieving and modifying ReviewFormElement objects.
|
||||
*
|
||||
*/
|
||||
|
||||
namespace PKP\reviewForm;
|
||||
|
||||
use PKP\db\DAORegistry;
|
||||
use PKP\db\DAOResultFactory;
|
||||
use PKP\db\DBResultRange;
|
||||
use PKP\plugins\Hook;
|
||||
|
||||
class ReviewFormElementDAO extends \PKP\db\DAO
|
||||
{
|
||||
/**
|
||||
* Retrieve a review form element by ID.
|
||||
*
|
||||
* @param int $reviewFormElementId Review form element ID
|
||||
* @param int $reviewFormId optional
|
||||
*
|
||||
* @return ReviewFormElement
|
||||
*/
|
||||
public function getById($reviewFormElementId, $reviewFormId = null)
|
||||
{
|
||||
$params = [(int) $reviewFormElementId];
|
||||
if ($reviewFormId) {
|
||||
$params[] = (int) $reviewFormId;
|
||||
}
|
||||
$result = $this->retrieve(
|
||||
'SELECT *
|
||||
FROM review_form_elements
|
||||
WHERE review_form_element_id = ?
|
||||
' . ($reviewFormId ? ' AND review_form_id = ?' : ''),
|
||||
$params
|
||||
);
|
||||
$row = $result->current();
|
||||
return $row ? $this->_fromRow((array) $row) : null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Construct a new data object corresponding to this DAO.
|
||||
*
|
||||
* @return ReviewFormElement
|
||||
*/
|
||||
public function newDataObject()
|
||||
{
|
||||
return new ReviewFormElement();
|
||||
}
|
||||
|
||||
/**
|
||||
* Internal function to return a ReviewFormElement object from a row.
|
||||
*
|
||||
* @param array $row
|
||||
*
|
||||
* @return ReviewFormElement
|
||||
*/
|
||||
public function _fromRow($row)
|
||||
{
|
||||
$reviewFormElement = $this->newDataObject();
|
||||
$reviewFormElement->setId($row['review_form_element_id']);
|
||||
$reviewFormElement->setReviewFormId($row['review_form_id']);
|
||||
$reviewFormElement->setSequence($row['seq']);
|
||||
$reviewFormElement->setElementType($row['element_type']);
|
||||
$reviewFormElement->setRequired($row['required']);
|
||||
$reviewFormElement->setIncluded($row['included']);
|
||||
|
||||
$this->getDataObjectSettings('review_form_element_settings', 'review_form_element_id', $row['review_form_element_id'], $reviewFormElement);
|
||||
|
||||
Hook::call('ReviewFormElementDAO::_fromRow', [&$reviewFormElement, &$row]);
|
||||
|
||||
return $reviewFormElement;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the list of fields for which data can be localized.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getLocaleFieldNames()
|
||||
{
|
||||
return ['question', 'description', 'possibleResponses'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the localized fields for this table
|
||||
*
|
||||
* @param object $reviewFormElement
|
||||
*/
|
||||
public function updateLocaleFields($reviewFormElement)
|
||||
{
|
||||
$this->updateDataObjectSettings('review_form_element_settings', $reviewFormElement, [
|
||||
'review_form_element_id' => (int) $reviewFormElement->getId()
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Insert a new review form element.
|
||||
*
|
||||
* @param ReviewFormElement $reviewFormElement
|
||||
*
|
||||
* @return int Review form element ID
|
||||
*/
|
||||
public function insertObject($reviewFormElement)
|
||||
{
|
||||
$this->update(
|
||||
'INSERT INTO review_form_elements
|
||||
(review_form_id, seq, element_type, required, included)
|
||||
VALUES
|
||||
(?, ?, ?, ?, ?)',
|
||||
[
|
||||
(int) $reviewFormElement->getReviewFormId(),
|
||||
$reviewFormElement->getSequence() == null ? 0 : (float) $reviewFormElement->getSequence(),
|
||||
(int) $reviewFormElement->getElementType(),
|
||||
(int) $reviewFormElement->getRequired(),
|
||||
(int) $reviewFormElement->getIncluded(),
|
||||
]
|
||||
);
|
||||
|
||||
$reviewFormElement->setId($this->getInsertId());
|
||||
$this->updateLocaleFields($reviewFormElement);
|
||||
return $reviewFormElement->getId();
|
||||
}
|
||||
|
||||
/**
|
||||
* Update an existing review form element.
|
||||
*
|
||||
* @param ReviewFormElement $reviewFormElement
|
||||
*/
|
||||
public function updateObject($reviewFormElement)
|
||||
{
|
||||
$returner = $this->update(
|
||||
'UPDATE review_form_elements
|
||||
SET review_form_id = ?,
|
||||
seq = ?,
|
||||
element_type = ?,
|
||||
required = ?,
|
||||
included = ?
|
||||
WHERE review_form_element_id = ?',
|
||||
[
|
||||
(int) $reviewFormElement->getReviewFormId(),
|
||||
(float) $reviewFormElement->getSequence(),
|
||||
(int) $reviewFormElement->getElementType(),
|
||||
(int) $reviewFormElement->getRequired(),
|
||||
(int) $reviewFormElement->getIncluded(),
|
||||
(int) $reviewFormElement->getId()
|
||||
]
|
||||
);
|
||||
$this->updateLocaleFields($reviewFormElement);
|
||||
return $returner;
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a review form element.
|
||||
*
|
||||
* @param reviewFormElement $reviewFormElement
|
||||
*/
|
||||
public function deleteObject($reviewFormElement)
|
||||
{
|
||||
return $this->deleteById($reviewFormElement->getId());
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a review form element by ID.
|
||||
*
|
||||
* @param int $reviewFormElementId
|
||||
*/
|
||||
public function deleteById($reviewFormElementId)
|
||||
{
|
||||
$reviewFormResponseDao = DAORegistry::getDAO('ReviewFormResponseDAO'); /** @var ReviewFormResponseDAO $reviewFormResponseDao */
|
||||
$reviewFormResponseDao->deleteByReviewFormElementId($reviewFormElementId);
|
||||
|
||||
$this->update('DELETE FROM review_form_element_settings WHERE review_form_element_id = ?', [(int) $reviewFormElementId]);
|
||||
return $this->update('DELETE FROM review_form_elements WHERE review_form_element_id = ?', [(int) $reviewFormElementId]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete review form elements by review form ID
|
||||
* to be called only when deleting a review form.
|
||||
*
|
||||
* @param int $reviewFormId
|
||||
*/
|
||||
public function deleteByReviewFormId($reviewFormId)
|
||||
{
|
||||
$reviewFormElements = $this->getByReviewFormId($reviewFormId);
|
||||
while ($reviewFormElement = $reviewFormElements->next()) {
|
||||
$this->deleteById($reviewFormElement->getId());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a review form element setting
|
||||
*
|
||||
* @param int $reviewFormElementId
|
||||
* @param string $locale
|
||||
*/
|
||||
public function deleteSetting($reviewFormElementId, $name, $locale = null)
|
||||
{
|
||||
$params = [(int) $reviewFormElementId, $name];
|
||||
if ($locale) {
|
||||
$params[] = $locale;
|
||||
}
|
||||
|
||||
$this->update(
|
||||
'DELETE FROM review_form_element_settings
|
||||
WHERE review_form_element_id = ? AND setting_name = ?
|
||||
' . ($locale ? ' AND locale = ?' : ''),
|
||||
$params
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve all elements for a review form.
|
||||
*
|
||||
* @param int $reviewFormId
|
||||
* @param ?DBResultRange $rangeInfo (optional)
|
||||
* @param bool $included True for only included comments; false for non-included; null for both
|
||||
*
|
||||
* @return DAOResultFactory<ReviewFormElement> containing ReviewFormElements ordered by sequence
|
||||
*/
|
||||
public function getByReviewFormId($reviewFormId, $rangeInfo = null, $included = null)
|
||||
{
|
||||
$result = $this->retrieveRange(
|
||||
$sql = 'SELECT *
|
||||
FROM review_form_elements
|
||||
WHERE review_form_id = ?
|
||||
' . ($included === true ? ' AND included = 1' : '') . '
|
||||
' . ($included === false ? ' AND included = 0' : '') . '
|
||||
ORDER BY seq',
|
||||
$params = [(int) $reviewFormId],
|
||||
$rangeInfo
|
||||
);
|
||||
|
||||
return new DAOResultFactory($result, $this, '_fromRow', [], $sql, $params);
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve ids of all required elements for a review form.
|
||||
*
|
||||
* @param int $reviewFormId
|
||||
* return array
|
||||
*/
|
||||
public function getRequiredReviewFormElementIds($reviewFormId)
|
||||
{
|
||||
$result = $this->retrieve(
|
||||
'SELECT review_form_element_id FROM review_form_elements WHERE review_form_id = ? AND required = 1 ORDER BY seq',
|
||||
[(int) $reviewFormId]
|
||||
);
|
||||
|
||||
$requiredReviewFormElementIds = [];
|
||||
foreach ($result as $row) {
|
||||
$requiredReviewFormElementIds[] = $row->review_form_element_id;
|
||||
}
|
||||
return $requiredReviewFormElementIds;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a review form element exists with the specified ID.
|
||||
*
|
||||
* @param int $reviewFormElementId
|
||||
* @param int $reviewFormId optional
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function reviewFormElementExists($reviewFormElementId, $reviewFormId = null)
|
||||
{
|
||||
$params = [(int) $reviewFormElementId];
|
||||
if ($reviewFormId) {
|
||||
$params[] = (int) $reviewFormId;
|
||||
}
|
||||
|
||||
$result = $this->retrieve(
|
||||
'SELECT COUNT(*) AS row_count
|
||||
FROM review_form_elements
|
||||
WHERE review_form_element_id = ?
|
||||
' . ($reviewFormId ? ' AND review_form_id = ?' : ''),
|
||||
$params
|
||||
);
|
||||
$row = $result->current();
|
||||
return $row ? $row->row_count == 1 : false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sequentially renumber a review form elements in their sequence order.
|
||||
*
|
||||
* @param int $reviewFormId
|
||||
*/
|
||||
public function resequenceReviewFormElements($reviewFormId)
|
||||
{
|
||||
$result = $this->retrieve(
|
||||
'SELECT review_form_element_id FROM review_form_elements WHERE review_form_id = ? ORDER BY seq',
|
||||
[(int) $reviewFormId]
|
||||
);
|
||||
|
||||
for ($i = 1; $row = $result->current(); $i++) {
|
||||
$this->update('UPDATE review_form_elements SET seq = ? WHERE review_form_element_id = ?', [$i, $row->review_form_element_id]);
|
||||
$result->next();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!PKP_STRICT_MODE) {
|
||||
class_alias('\PKP\reviewForm\ReviewFormElementDAO', '\ReviewFormElementDAO');
|
||||
}
|
||||
@@ -0,0 +1,109 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @file classes/reviewForm/ReviewFormResponse.php
|
||||
*
|
||||
* Copyright (c) 2014-2021 Simon Fraser University
|
||||
* Copyright (c) 2000-2021 John Willinsky
|
||||
* Distributed under the GNU GPL v3. For full terms see the file docs/COPYING.
|
||||
*
|
||||
* @class ReviewFormResponse
|
||||
*
|
||||
* @ingroup reviewForm
|
||||
*
|
||||
* @see ReviewFormResponseDAO
|
||||
*
|
||||
* @brief Basic class describing a review form response.
|
||||
*
|
||||
*/
|
||||
|
||||
namespace PKP\reviewForm;
|
||||
|
||||
class ReviewFormResponse extends \PKP\core\DataObject
|
||||
{
|
||||
//
|
||||
// Get/set methods
|
||||
//
|
||||
|
||||
/**
|
||||
* Get the review ID.
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function getReviewId()
|
||||
{
|
||||
return $this->getData('reviewId');
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the review ID.
|
||||
*
|
||||
* @param int $reviewId
|
||||
*/
|
||||
public function setReviewId($reviewId)
|
||||
{
|
||||
$this->setData('reviewId', $reviewId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get ID of review form element.
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function getReviewFormElementId()
|
||||
{
|
||||
return $this->getData('reviewFormElementId');
|
||||
}
|
||||
|
||||
/**
|
||||
* Set ID of review form element.
|
||||
*
|
||||
* @param int $reviewFormElementId
|
||||
*/
|
||||
public function setReviewFormElementId($reviewFormElementId)
|
||||
{
|
||||
$this->setData('reviewFormElementId', $reviewFormElementId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get response value.
|
||||
*
|
||||
*/
|
||||
public function getValue()
|
||||
{
|
||||
return $this->getData('value');
|
||||
}
|
||||
|
||||
/**
|
||||
* Set response value.
|
||||
*
|
||||
*/
|
||||
public function setValue($value)
|
||||
{
|
||||
$this->setData('value', $value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get response type.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getResponseType()
|
||||
{
|
||||
return $this->getData('type');
|
||||
}
|
||||
|
||||
/**
|
||||
* Set response type.
|
||||
*
|
||||
* @param string $type
|
||||
*/
|
||||
public function setResponseType($type)
|
||||
{
|
||||
$this->setData('type', $type);
|
||||
}
|
||||
}
|
||||
|
||||
if (!PKP_STRICT_MODE) {
|
||||
class_alias('\PKP\reviewForm\ReviewFormResponse', '\ReviewFormResponse');
|
||||
}
|
||||
@@ -0,0 +1,209 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @file classes/reviewForm/ReviewFormResponseDAO.php
|
||||
*
|
||||
* Copyright (c) 2014-2021 Simon Fraser University
|
||||
* Copyright (c) 2000-2021 John Willinsky
|
||||
* Distributed under the GNU GPL v3. For full terms see the file docs/COPYING.
|
||||
*
|
||||
* @class ReviewFormResponseDAO
|
||||
*
|
||||
* @ingroup reviewForm
|
||||
*
|
||||
* @see ReviewFormResponse
|
||||
*
|
||||
* @brief Operations for retrieving and modifying ReviewFormResponse objects.
|
||||
*
|
||||
*/
|
||||
|
||||
namespace PKP\reviewForm;
|
||||
|
||||
use PKP\plugins\Hook;
|
||||
|
||||
class ReviewFormResponseDAO extends \PKP\db\DAO
|
||||
{
|
||||
/**
|
||||
* Retrieve a review form response.
|
||||
*
|
||||
* @param int $reviewId
|
||||
* @param int $reviewFormElementId
|
||||
*
|
||||
* @return ReviewFormResponse
|
||||
*/
|
||||
public function getReviewFormResponse($reviewId, $reviewFormElementId)
|
||||
{
|
||||
$result = $this->retrieve(
|
||||
'SELECT * FROM review_form_responses WHERE review_id = ? AND review_form_element_id = ?',
|
||||
[(int) $reviewId, (int) $reviewFormElementId]
|
||||
);
|
||||
$row = $result->current();
|
||||
return $row ? $this->_returnReviewFormResponseFromRow((array) $row) : null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Construct a new data object corresponding to this DAO.
|
||||
*
|
||||
* @return ReviewFormResponse
|
||||
*/
|
||||
public function newDataObject()
|
||||
{
|
||||
return new ReviewFormResponse();
|
||||
}
|
||||
|
||||
/**
|
||||
* Internal function to return a ReviewFormResponse object from a row.
|
||||
*
|
||||
* @param array $row
|
||||
*
|
||||
* @return ReviewFormResponse
|
||||
*/
|
||||
public function &_returnReviewFormResponseFromRow($row)
|
||||
{
|
||||
$responseValue = $this->convertFromDB($row['response_value'], $row['response_type']);
|
||||
$reviewFormResponse = $this->newDataObject();
|
||||
|
||||
$reviewFormResponse->setReviewId($row['review_id']);
|
||||
$reviewFormResponse->setReviewFormElementId($row['review_form_element_id']);
|
||||
$reviewFormResponse->setValue($responseValue);
|
||||
$reviewFormResponse->setResponseType($row['response_type']);
|
||||
|
||||
Hook::call('ReviewFormResponseDAO::_returnReviewFormResponseFromRow', [&$reviewFormResponse, &$row]);
|
||||
|
||||
return $reviewFormResponse;
|
||||
}
|
||||
|
||||
/**
|
||||
* Insert a new review form response.
|
||||
*
|
||||
* @param ReviewFormResponse $reviewFormResponse
|
||||
*/
|
||||
public function insertObject($reviewFormResponse)
|
||||
{
|
||||
$type = $reviewFormResponse->getResponseType();
|
||||
$this->update(
|
||||
'INSERT INTO review_form_responses
|
||||
(review_form_element_id, review_id, response_type, response_value)
|
||||
VALUES
|
||||
(?, ?, ?, ?)',
|
||||
[
|
||||
$reviewFormResponse->getReviewFormElementId(),
|
||||
$reviewFormResponse->getReviewId(),
|
||||
$type,
|
||||
$this->convertToDB($reviewFormResponse->getValue(), $type)
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update an existing review form response.
|
||||
*
|
||||
* @param ReviewFormResponse $reviewFormResponse
|
||||
*/
|
||||
public function updateObject($reviewFormResponse)
|
||||
{
|
||||
$type = $reviewFormResponse->getResponseType();
|
||||
$this->update(
|
||||
'UPDATE review_form_responses
|
||||
SET
|
||||
response_type = ?,
|
||||
response_value = ?
|
||||
WHERE review_form_element_id = ? AND review_id = ?',
|
||||
[
|
||||
$reviewFormResponse->getResponseType(),
|
||||
$this->convertToDB($reviewFormResponse->getValue(), $type),
|
||||
$reviewFormResponse->getReviewFormElementId(),
|
||||
$reviewFormResponse->getReviewId()
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a review form response.
|
||||
*
|
||||
* @param ReviewFormResponse $reviewFormResponse
|
||||
*/
|
||||
public function deleteObject($reviewFormResponse)
|
||||
{
|
||||
return $this->deleteById($reviewFormResponse->getReviewId(), $reviewFormResponse->getReviewFormElementId());
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a review form response by ID.
|
||||
*
|
||||
* @param int $reviewId
|
||||
* @param int $reviewFormElementId
|
||||
*/
|
||||
public function deleteById($reviewId, $reviewFormElementId)
|
||||
{
|
||||
$this->update(
|
||||
'DELETE FROM review_form_responses WHERE review_id = ? AND review_form_element_id = ?',
|
||||
[$reviewId, $reviewFormElementId]
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete review form responses by review ID
|
||||
*
|
||||
* @param int $reviewId
|
||||
*/
|
||||
public function deleteByReviewId($reviewId)
|
||||
{
|
||||
$this->update('DELETE FROM review_form_responses WHERE review_id = ?', [$reviewId]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete group membership by user ID
|
||||
*
|
||||
* @param int $reviewFormElementId
|
||||
*/
|
||||
public function deleteByReviewFormElementId($reviewFormElementId)
|
||||
{
|
||||
$this->update('DELETE FROM review_form_responses WHERE review_form_element_id = ?', [$reviewFormElementId]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve all review form responses for a review in an associative array.
|
||||
*
|
||||
* @param int $reviewId
|
||||
*
|
||||
* @return array review_form_element_id => array(review form response for this element)
|
||||
*/
|
||||
public function getReviewReviewFormResponseValues($reviewId)
|
||||
{
|
||||
$result = $this->retrieveRange('SELECT * FROM review_form_responses WHERE review_id = ?', [(int) $reviewId]);
|
||||
$returner = [];
|
||||
foreach ($result as $row) {
|
||||
$reviewFormResponse = $this->_returnReviewFormResponseFromRow((array) $row);
|
||||
$returner[$reviewFormResponse->getReviewFormElementId()] = $reviewFormResponse->getValue();
|
||||
}
|
||||
return $returner;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a review form response for the review.
|
||||
*
|
||||
* @param int $reviewId
|
||||
* @param int $reviewFormElementId optional
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function reviewFormResponseExists($reviewId, $reviewFormElementId = null)
|
||||
{
|
||||
$params = [(int) $reviewId];
|
||||
if ($reviewFormElementId !== null) {
|
||||
$params[] = $reviewFormElementId;
|
||||
}
|
||||
$result = $this->retrieve(
|
||||
'SELECT COUNT(*) AS row_count FROM review_form_responses WHERE review_id = ?'
|
||||
. ($reviewFormElementId !== null ? ' AND review_form_element_id = ?' : ''),
|
||||
$params
|
||||
);
|
||||
$row = $result->current();
|
||||
return $row && $row->row_count > 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (!PKP_STRICT_MODE) {
|
||||
class_alias('\PKP\reviewForm\ReviewFormResponseDAO', '\ReviewFormResponseDAO');
|
||||
}
|
||||
Reference in New Issue
Block a user