first commit
This commit is contained in:
@@ -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');
|
||||
}
|
||||
Reference in New Issue
Block a user