00001 <?php
00002
00016
00017
00018
00019 import('article.SuppFile');
00020
00021 class SuppFileDAO extends DAO {
00028 function &getSuppFile($suppFileId, $articleId = null) {
00029 $params = array($suppFileId);
00030 if ($articleId) $params[] = $articleId;
00031
00032 $result = &$this->retrieve(
00033 'SELECT s.*, a.file_name, a.original_file_name, a.file_type, a.file_size, a.status, a.date_uploaded, a.date_modified FROM article_supplementary_files s LEFT JOIN article_files a ON (s.file_id = a.file_id) WHERE s.supp_id = ?' . ($articleId?' AND s.article_id = ?':''),
00034 $params
00035 );
00036
00037 $returner = null;
00038 if ($result->RecordCount() != 0) {
00039 $returner = &$this->_returnSuppFileFromRow($result->GetRowAssoc(false));
00040 }
00041
00042 $result->Close();
00043 unset($result);
00044
00045 return $returner;
00046 }
00047
00054 function &getSuppFileByPublicSuppFileId($publicSuppId, $articleId) {
00055 $result = &$this->retrieve(
00056 'SELECT s.*, a.file_name, a.original_file_name, a.file_type, a.file_size, a.status, a.date_uploaded, a.date_modified FROM article_supplementary_files s LEFT JOIN article_files a ON (s.file_id = a.file_id) WHERE s.public_supp_file_id = ? AND s.article_id = ?',
00057 array($publicSuppId, $articleId)
00058 );
00059
00060 $returner = null;
00061 if ($result->RecordCount() != 0) {
00062 $returner = &$this->_returnSuppFileFromRow($result->GetRowAssoc(false));
00063 }
00064
00065 $result->Close();
00066 unset($result);
00067
00068 return $returner;
00069 }
00070
00076 function &getSuppFilesByArticle($articleId) {
00077 $suppFiles = array();
00078
00079 $result = &$this->retrieve(
00080 'SELECT s.*, a.file_name, a.original_file_name, a.file_type, a.file_size, a.status, a.date_uploaded, a.date_modified FROM article_supplementary_files s LEFT JOIN article_files a ON (s.file_id = a.file_id) WHERE s.article_id = ? ORDER BY s.seq',
00081 $articleId
00082 );
00083
00084 while (!$result->EOF) {
00085 $suppFiles[] = &$this->_returnSuppFileFromRow($result->GetRowAssoc(false));
00086 $result->moveNext();
00087 }
00088
00089 $result->Close();
00090 unset($result);
00091
00092 return $suppFiles;
00093 }
00094
00099 function getLocaleFieldNames() {
00100 return array('title', 'creator', 'subject', 'typeOther', 'description', 'publisher', 'sponsor', 'source');
00101 }
00102
00107 function updateLocaleFields(&$suppFile) {
00108 $this->updateDataObjectSettings('article_supp_file_settings', $suppFile, array(
00109 'supp_id' => $suppFile->getSuppFileId()
00110 ));
00111 }
00112
00118 function &_returnSuppFileFromRow(&$row) {
00119 $suppFile = &new SuppFile();
00120 $suppFile->setSuppFileID($row['supp_id']);
00121 $suppFile->setPublicSuppFileID($row['public_supp_file_id']);
00122 $suppFile->setFileId($row['file_id']);
00123 $suppFile->setArticleId($row['article_id']);
00124 $suppFile->setType($row['type']);
00125 $suppFile->setDateCreated($this->dateFromDB($row['date_created']));
00126 $suppFile->setLanguage($row['language']);
00127 $suppFile->setShowReviewers($row['show_reviewers']);
00128 $suppFile->setDateSubmitted($this->datetimeFromDB($row['date_submitted']));
00129 $suppFile->setSequence($row['seq']);
00130
00131
00132 $suppFile->setFileName($row['file_name']);
00133 $suppFile->setOriginalFileName($row['original_file_name']);
00134 $suppFile->setFileType($row['file_type']);
00135 $suppFile->setFileSize($row['file_size']);
00136 $suppFile->setStatus($row['status']);
00137 $suppFile->setDateModified($this->datetimeFromDB($row['date_modified']));
00138 $suppFile->setDateUploaded($this->datetimeFromDB($row['date_uploaded']));
00139
00140 $this->getDataObjectSettings('article_supp_file_settings', 'supp_id', $row['supp_id'], $suppFile);
00141
00142 HookRegistry::call('SuppFileDAO::_returnSuppFileFromRow', array(&$suppFile, &$row));
00143
00144 return $suppFile;
00145 }
00146
00151 function insertSuppFile(&$suppFile) {
00152 if ($suppFile->getDateSubmitted() == null) {
00153 $suppFile->setDateSubmitted(Core::getCurrentDate());
00154 }
00155 if ($suppFile->getSequence() == null) {
00156 $suppFile->setSequence($this->getNextSuppFileSequence($suppFile->getArticleID()));
00157 }
00158 $this->update(
00159 sprintf('INSERT INTO article_supplementary_files
00160 (public_supp_file_id, file_id, article_id, type, date_created, language, show_reviewers, date_submitted, seq)
00161 VALUES
00162 (?, ?, ?, ?, %s, ?, ?, %s, ?)',
00163 $this->dateToDB($suppFile->getDateCreated()), $this->datetimeToDB($suppFile->getDateSubmitted())),
00164 array(
00165 $suppFile->getPublicSuppFileId(),
00166 $suppFile->getFileId(),
00167 $suppFile->getArticleId(),
00168 $suppFile->getType(),
00169 $suppFile->getLanguage(),
00170 $suppFile->getShowReviewers(),
00171 $suppFile->getSequence()
00172 )
00173 );
00174 $suppFile->setSuppFileId($this->getInsertSuppFileId());
00175 $this->updateLocaleFields($suppFile);
00176 return $suppFile->getSuppFileId();
00177 }
00178
00183 function updateSuppFile(&$suppFile) {
00184 $returner = $this->update(
00185 sprintf('UPDATE article_supplementary_files
00186 SET
00187 public_supp_file_id = ?,
00188 file_id = ?,
00189 type = ?,
00190 date_created = %s,
00191 language = ?,
00192 show_reviewers = ?,
00193 seq = ?
00194 WHERE supp_id = ?',
00195 $this->dateToDB($suppFile->getDateCreated())),
00196 array(
00197 $suppFile->getPublicSuppFileId(),
00198 $suppFile->getFileId(),
00199 $suppFile->getType(),
00200 $suppFile->getLanguage(),
00201 $suppFile->getShowReviewers(),
00202 $suppFile->getSequence(),
00203 $suppFile->getSuppFileId()
00204 )
00205 );
00206 $this->updateLocaleFields($suppFile);
00207 return $returner;
00208 }
00209
00214 function deleteSuppFile(&$suppFile) {
00215 return $this->deleteSuppFileById($suppFile->getSuppFileId());
00216 }
00217
00223 function deleteSuppFileById($suppFileId, $articleId = null) {
00224 if (isset($articleId)) {
00225 $returner = $this->update('DELETE FROM article_supplementary_files WHERE supp_id = ? AND article_id = ?', array($suppFileId, $articleId));
00226 if ($returner) $this->update('DELETE FROM article_supp_file_settings WHERE supp_id = ?', $suppFileId);
00227 return $returner;
00228
00229 } else {
00230 $this->update('DELETE FROM article_supp_file_settings WHERE supp_id = ?', $suppFileId);
00231 return $this->update(
00232 'DELETE FROM article_supplementary_files WHERE supp_id = ?', $suppFileId
00233 );
00234 }
00235 }
00236
00241 function deleteSuppFilesByArticle($articleId) {
00242 $suppFiles =& $this->getSuppFilesByArticle($articleId);
00243 foreach ($suppFiles as $suppFile) {
00244 $this->deleteSuppFile($suppFile);
00245 }
00246 }
00247
00254 function suppFileExistsByFileId($articleId, $fileId) {
00255 $result = &$this->retrieve(
00256 'SELECT COUNT(*) FROM article_supplementary_files
00257 WHERE article_id = ? AND file_id = ?',
00258 array($articleId, $fileId)
00259 );
00260
00261 $returner = isset($result->fields[0]) && $result->fields[0] == 1 ? true : false;
00262
00263 $result->Close();
00264 unset($result);
00265
00266 return $returner;
00267 }
00268
00273 function resequenceSuppFiles($articleId) {
00274 $result = &$this->retrieve(
00275 'SELECT supp_id FROM article_supplementary_files WHERE article_id = ? ORDER BY seq',
00276 $articleId
00277 );
00278
00279 for ($i=1; !$result->EOF; $i++) {
00280 list($suppId) = $result->fields;
00281 $this->update(
00282 'UPDATE article_supplementary_files SET seq = ? WHERE supp_id = ?',
00283 array($i, $suppId)
00284 );
00285 $result->moveNext();
00286 }
00287
00288 $result->close();
00289 unset($result);
00290 }
00291
00297 function getNextSuppFileSequence($articleId) {
00298 $result = &$this->retrieve(
00299 'SELECT MAX(seq) + 1 FROM article_supplementary_files WHERE article_id = ?',
00300 $articleId
00301 );
00302 $returner = floor($result->fields[0]);
00303
00304 $result->Close();
00305 unset($result);
00306
00307 return $returner;
00308 }
00309
00314 function getInsertSuppFileId() {
00315 return $this->getInsertId('article_supplementary_files', 'supp_id');
00316 }
00317
00325 function &getSuppFileByBestSuppFileId($articleId, $suppId) {
00326 $suppFile = &$this->getSuppFileByPublicSuppFileId($suppId, $articleId);
00327 if (!isset($suppFile)) $suppFile = &$this->getSuppFile((int) $suppId, $articleId);
00328 return $suppFile;
00329 }
00330
00338 function suppFileExistsByPublicId($publicSuppFileId, $suppId, $journalId) {
00339 $result = &$this->retrieve(
00340 'SELECT COUNT(*) FROM article_supplementary_files f, articles a WHERE f.article_id = a.article_id AND f.public_supp_file_id = ? AND f.supp_id <> ? AND a.journal_id = ?', array($publicSuppFileId, $suppId, $journalId)
00341 );
00342 $returner = $result->fields[0] ? true : false;
00343
00344 $result->Close();
00345 unset($result);
00346
00347 return $returner;
00348 }
00349 }
00350
00351 ?>