first commit
This commit is contained in:
@@ -0,0 +1,106 @@
|
||||
<?php
|
||||
/**
|
||||
* @file classes/submission/DAO.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 DAO
|
||||
*
|
||||
* @brief Read and write submissions to the database.
|
||||
*/
|
||||
|
||||
namespace APP\submission;
|
||||
|
||||
use PKP\db\DAOResultFactory;
|
||||
use PKP\db\DBResultRange;
|
||||
use PKP\identity\Identity;
|
||||
use PKP\observers\events\SubmissionDeleted;
|
||||
|
||||
class DAO extends \PKP\submission\DAO
|
||||
{
|
||||
/**
|
||||
* @copydoc \PKP\core\EntityDAO::deleteById()
|
||||
*/
|
||||
public function deleteById(int $id)
|
||||
{
|
||||
event(new SubmissionDeleted($id));
|
||||
parent::deleteById($id);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all published submissions (eventually with a pubId assigned and) matching the specified settings.
|
||||
*
|
||||
* @param null|mixed $pubIdType
|
||||
* @param null|mixed $title
|
||||
* @param null|mixed $author
|
||||
* @param null|mixed $issueId
|
||||
* @param null|mixed $pubIdSettingName
|
||||
* @param null|mixed $pubIdSettingValue
|
||||
* @param ?DBResultRange $rangeInfo
|
||||
*
|
||||
* @return DAOResultFactory<Submission>
|
||||
*/
|
||||
public function getExportable(
|
||||
$contextId,
|
||||
$pubIdType = null,
|
||||
$title = null,
|
||||
$author = null,
|
||||
$issueId = null,
|
||||
$pubIdSettingName = null,
|
||||
$pubIdSettingValue = null,
|
||||
$rangeInfo = null
|
||||
) {
|
||||
$params = [];
|
||||
if ($pubIdSettingName) {
|
||||
$params[] = $pubIdSettingName;
|
||||
}
|
||||
$params[] = Submission::STATUS_PUBLISHED;
|
||||
$params[] = $contextId;
|
||||
if ($pubIdType) {
|
||||
$params[] = 'pub-id::' . $pubIdType;
|
||||
}
|
||||
if ($title) {
|
||||
$params[] = 'title';
|
||||
$params[] = '%' . $title . '%';
|
||||
}
|
||||
if ($author) {
|
||||
$params[] = $author;
|
||||
$params[] = $author;
|
||||
}
|
||||
if ($issueId) {
|
||||
$params[] = $issueId;
|
||||
}
|
||||
if ($pubIdSettingName && $pubIdSettingValue && $pubIdSettingValue != EXPORT_STATUS_NOT_DEPOSITED) {
|
||||
$params[] = $pubIdSettingValue;
|
||||
}
|
||||
|
||||
$sql = 'SELECT s.*
|
||||
FROM submissions s
|
||||
LEFT JOIN publications p ON s.current_publication_id = p.publication_id
|
||||
LEFT JOIN publication_settings ps ON p.publication_id = ps.publication_id'
|
||||
. ($issueId ? ' LEFT JOIN publication_settings psi ON p.publication_id = psi.publication_id AND psi.setting_name = \'issueId\' AND psi.locale = \'\'' : '')
|
||||
. ($pubIdType != null ? ' LEFT JOIN publication_settings pspidt ON (p.publication_id = pspidt.publication_id)' : '')
|
||||
. ($title != null ? ' LEFT JOIN publication_settings pst ON (p.publication_id = pst.publication_id)' : '')
|
||||
. ($author != null ? ' LEFT JOIN authors au ON (p.publication_id = au.publication_id)
|
||||
LEFT JOIN author_settings asgs ON (asgs.author_id = au.author_id AND asgs.setting_name = \'' . Identity::IDENTITY_SETTING_GIVENNAME . '\')
|
||||
LEFT JOIN author_settings asfs ON (asfs.author_id = au.author_id AND asfs.setting_name = \'' . Identity::IDENTITY_SETTING_FAMILYNAME . '\')
|
||||
' : '')
|
||||
. ($pubIdSettingName != null ? ' LEFT JOIN submission_settings pss ON (s.submission_id = pss.submission_id AND pss.setting_name = ?)' : '')
|
||||
. ' WHERE s.status = ?
|
||||
AND s.context_id = ?'
|
||||
. ($pubIdType != null ? ' AND pspidt.setting_name = ? AND pspidt.setting_value IS NOT NULL' : '')
|
||||
. ($title != null ? ' AND (pst.setting_name = ? AND pst.setting_value LIKE ?)' : '')
|
||||
. ($author != null ? ' AND (asgs.setting_value LIKE ? OR asfs.setting_value LIKE ?)' : '')
|
||||
. ($issueId != null ? ' AND psi.setting_value = ?' : '')
|
||||
. (($pubIdSettingName != null && $pubIdSettingValue != null && $pubIdSettingValue == EXPORT_STATUS_NOT_DEPOSITED) ? ' AND pss.setting_value IS NULL' : '')
|
||||
. (($pubIdSettingName != null && $pubIdSettingValue != null && $pubIdSettingValue != EXPORT_STATUS_NOT_DEPOSITED) ? ' AND pss.setting_value = ?' : '')
|
||||
. (($pubIdSettingName != null && is_null($pubIdSettingValue)) ? ' AND (pss.setting_value IS NULL OR pss.setting_value = \'\')' : '')
|
||||
. ' GROUP BY s.submission_id
|
||||
ORDER BY MAX(p.date_published) DESC, s.submission_id DESC';
|
||||
|
||||
$rows = $this->deprecatedDao->retrieveRange($sql, $params, $rangeInfo);
|
||||
return new DAOResultFactory($rows, $this, 'fromRow', [], $sql, $params, $rangeInfo);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user