212 lines
5.2 KiB
PHP
212 lines
5.2 KiB
PHP
<?php
|
|
|
|
/**
|
|
* @file classes/issue/IssueFileDAO.php
|
|
*
|
|
* Copyright (c) 2014-2021 Simon Fraser University
|
|
* Copyright (c) 2003-2021 John Willinsky
|
|
* Distributed under the GNU GPL v3. For full terms see the file docs/COPYING.
|
|
*
|
|
* @class IssueFileDAO
|
|
*
|
|
* @ingroup issue
|
|
*
|
|
* @see IssueFile
|
|
*
|
|
* @brief Operations for retrieving and modifying IssueFile objects.
|
|
*/
|
|
|
|
namespace APP\issue;
|
|
|
|
use PKP\db\DAO;
|
|
use PKP\plugins\Hook;
|
|
|
|
class IssueFileDAO extends DAO
|
|
{
|
|
/** @var array MIME types that can be displayed inline in a browser */
|
|
public $_inlineableTypes = null;
|
|
|
|
|
|
/**
|
|
* Get inlineable file types.
|
|
*
|
|
* @return array
|
|
*/
|
|
public function getInlineableTypes()
|
|
{
|
|
return $this->_inlineableTypes;
|
|
}
|
|
|
|
/**
|
|
* Set inlineable file types.
|
|
*
|
|
* @param array $inlineableTypes
|
|
*/
|
|
public function setInlineableTypes($inlineableTypes)
|
|
{
|
|
$this->_inlineableTypes = $inlineableTypes;
|
|
}
|
|
|
|
/**
|
|
* Retrieve an issue file by ID.
|
|
*
|
|
* @param int $fileId
|
|
* @param int $issueId optional
|
|
*
|
|
* @return IssueFile
|
|
*/
|
|
public function getById($fileId, $issueId = null)
|
|
{
|
|
$params = [(int) $fileId];
|
|
if ($issueId) {
|
|
$params[] = (int) $issueId;
|
|
}
|
|
$result = $this->retrieve(
|
|
'SELECT f.*
|
|
FROM issue_files f
|
|
WHERE f.file_id = ?
|
|
' . ($issueId ? ' AND f.issue_id = ?' : ''),
|
|
$params
|
|
);
|
|
$row = $result->current();
|
|
return $row ? $this->_fromRow((array) $row) : null;
|
|
}
|
|
|
|
/**
|
|
* Construct a new IssueFile data object.
|
|
*
|
|
* @return IssueFile
|
|
*/
|
|
public function newDataObject()
|
|
{
|
|
return new IssueFile();
|
|
}
|
|
|
|
/**
|
|
* Internal function to return an IssueFile object from a row.
|
|
*
|
|
* @param array $row
|
|
*
|
|
* @return IssueFile
|
|
*/
|
|
public function _fromRow($row)
|
|
{
|
|
$issueFile = $this->newDataObject();
|
|
$issueFile->setId($row['file_id']);
|
|
$issueFile->setIssueId($row['issue_id']);
|
|
$issueFile->setServerFileName($row['file_name']);
|
|
$issueFile->setFileType($row['file_type']);
|
|
$issueFile->setFileSize($row['file_size']);
|
|
$issueFile->setContentType($row['content_type']);
|
|
$issueFile->setOriginalFileName($row['original_file_name']);
|
|
$issueFile->setDateUploaded($this->datetimeFromDB($row['date_uploaded']));
|
|
$issueFile->setDateModified($this->datetimeFromDB($row['date_modified']));
|
|
Hook::call('IssueFileDAO::_returnIssueFileFromRow', [&$issueFile, &$row]);
|
|
return $issueFile;
|
|
}
|
|
|
|
/**
|
|
* Insert a new IssueFile.
|
|
*
|
|
* @param IssueFile $issueFile
|
|
*
|
|
* @return int
|
|
*/
|
|
public function insertObject($issueFile)
|
|
{
|
|
$this->update(
|
|
sprintf(
|
|
'INSERT INTO issue_files
|
|
(issue_id,
|
|
file_name,
|
|
file_type,
|
|
file_size,
|
|
content_type,
|
|
original_file_name,
|
|
date_uploaded,
|
|
date_modified)
|
|
VALUES
|
|
(?, ?, ?, ?, ?, ?, %s, %s)',
|
|
$this->datetimeToDB($issueFile->getDateUploaded()),
|
|
$this->datetimeToDB($issueFile->getDateModified())
|
|
),
|
|
[
|
|
(int) $issueFile->getIssueId(),
|
|
$issueFile->getServerFileName(),
|
|
$issueFile->getFileType(),
|
|
$issueFile->getFileSize(),
|
|
$issueFile->getContentType(),
|
|
$issueFile->getOriginalFileName()
|
|
]
|
|
);
|
|
|
|
$issueFile->setId($this->getInsertId());
|
|
return $issueFile->getId();
|
|
}
|
|
|
|
/**
|
|
* Update an existing issue file.
|
|
*/
|
|
public function updateObject($issueFile)
|
|
{
|
|
$this->update(
|
|
sprintf(
|
|
'UPDATE issue_files
|
|
SET
|
|
issue_id = ?,
|
|
file_name = ?,
|
|
file_type = ?,
|
|
file_size = ?,
|
|
content_type = ?,
|
|
original_file_name = ?,
|
|
date_uploaded = %s,
|
|
date_modified = %s
|
|
WHERE file_id = ?',
|
|
$this->datetimeToDB($issueFile->getDateUploaded()),
|
|
$this->datetimeToDB($issueFile->getDateModified())
|
|
),
|
|
[
|
|
(int) $issueFile->getIssueId(),
|
|
$issueFile->getServerFileName(),
|
|
$issueFile->getFileType(),
|
|
$issueFile->getFileSize(),
|
|
$issueFile->getContentType(),
|
|
$issueFile->getOriginalFileName(),
|
|
(int) $issueFile->getId()
|
|
]
|
|
);
|
|
|
|
return $issueFile->getId();
|
|
}
|
|
|
|
/**
|
|
* Delete an issue file.
|
|
*/
|
|
public function deleteObject($issueFile)
|
|
{
|
|
$this->deleteById($issueFile->getId());
|
|
}
|
|
|
|
/**
|
|
* Delete an issue file by ID.
|
|
*/
|
|
public function deleteById($fileId)
|
|
{
|
|
$this->update('DELETE FROM issue_files WHERE file_id = ?', [(int) $fileId]);
|
|
}
|
|
|
|
/**
|
|
* Delete all issue files for an issue.
|
|
*
|
|
* @param int $issueId
|
|
*/
|
|
public function deleteByIssueId($issueId)
|
|
{
|
|
$this->update('DELETE FROM issue_files WHERE issue_id = ?', [(int) $issueId]);
|
|
}
|
|
}
|
|
|
|
if (!PKP_STRICT_MODE) {
|
|
class_alias('\APP\issue\IssueFileDAO', '\IssueFileDAO');
|
|
}
|