<?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');
}
|