00001 <?php
00002
00016
00017
00018 import('paper.PaperGalley');
00019 import('paper.PaperHTMLGalley');
00020
00021 class PaperGalleyDAO extends DAO {
00023 var $paperFileDao;
00024
00028 function PaperGalleyDAO() {
00029 parent::DAO();
00030 $this->paperFileDao =& DAORegistry::getDAO('PaperFileDAO');
00031 }
00032
00039 function &getGalley($galleyId, $paperId = null) {
00040 if (isset($paperId)) {
00041 $result =& $this->retrieve(
00042 'SELECT g.*,
00043 a.file_name, a.original_file_name, a.file_type, a.file_size, a.date_uploaded, a.date_modified
00044 FROM paper_galleys g
00045 LEFT JOIN paper_files a ON (g.file_id = a.file_id)
00046 WHERE g.galley_id = ? AND g.paper_id = ?',
00047 array($galleyId, $paperId)
00048 );
00049
00050 } else {
00051 $result =& $this->retrieve(
00052 'SELECT g.*,
00053 a.file_name, a.original_file_name, a.file_type, a.file_size, a.date_uploaded, a.date_modified
00054 FROM paper_galleys g
00055 LEFT JOIN paper_files a ON (g.file_id = a.file_id)
00056 WHERE g.galley_id = ?',
00057 $galleyId
00058 );
00059 }
00060
00061 $returner = null;
00062 if ($result->RecordCount() != 0) {
00063 $returner =& $this->_returnGalleyFromRow($result->GetRowAssoc(false));
00064 }
00065
00066 $result->Close();
00067 unset($result);
00068
00069 return $returner;
00070 }
00071
00077 function &getGalleysByPaper($paperId) {
00078 $galleys = array();
00079
00080 $result =& $this->retrieve(
00081 'SELECT g.*,
00082 a.file_name, a.original_file_name, a.file_type, a.file_size, a.date_uploaded, a.date_modified
00083 FROM paper_galleys g
00084 LEFT JOIN paper_files a ON (g.file_id = a.file_id)
00085 WHERE g.paper_id = ? ORDER BY g.seq',
00086 $paperId
00087 );
00088
00089 while (!$result->EOF) {
00090 $galleys[] =& $this->_returnGalleyFromRow($result->GetRowAssoc(false));
00091 $result->moveNext();
00092 }
00093
00094 $result->Close();
00095 unset($result);
00096
00097 HookRegistry::call('PaperGalleyDAO::getGalleysByPaper', array(&$galleys, &$paperId));
00098
00099 return $galleys;
00100 }
00101
00107 function &_returnGalleyFromRow(&$row) {
00108 if ($row['html_galley']) {
00109 $galley = new PaperHTMLGalley();
00110
00111
00112 $galley->setStyleFileId($row['style_file_id']);
00113 if ($row['style_file_id']) {
00114 $galley->setStyleFile($this->paperFileDao->getPaperFile($row['style_file_id']));
00115 }
00116
00117
00118 $images =& $this->getGalleyImages($row['galley_id']);
00119 $galley->setImageFiles($images);
00120
00121 } else {
00122 $galley = new PaperGalley();
00123 }
00124 $galley->setId($row['galley_id']);
00125 $galley->setPaperId($row['paper_id']);
00126 $galley->setLocale($row['locale']);
00127 $galley->setFileId($row['file_id']);
00128 $galley->setLabel($row['label']);
00129 $galley->setSequence($row['seq']);
00130 $galley->setViews($row['views']);
00131
00132
00133 $galley->setFileName($row['file_name']);
00134 $galley->setOriginalFileName($row['original_file_name']);
00135 $galley->setFileType($row['file_type']);
00136 $galley->setFileSize($row['file_size']);
00137 $galley->setDateModified($this->datetimeFromDB($row['date_modified']));
00138 $galley->setDateUploaded($this->datetimeFromDB($row['date_uploaded']));
00139
00140 HookRegistry::call('PaperGalleyDAO::_returnGalleyFromRow', array(&$galley, &$row));
00141
00142 return $galley;
00143 }
00144
00149 function insertGalley(&$galley) {
00150 $this->update(
00151 'INSERT INTO paper_galleys
00152 (paper_id, file_id, label, locale, html_galley, style_file_id, seq)
00153 VALUES
00154 (?, ?, ?, ?, ?, ?, ?)',
00155 array(
00156 $galley->getPaperId(),
00157 $galley->getFileId(),
00158 $galley->getLabel(),
00159 $galley->getLocale(),
00160 (int)$galley->isHTMLGalley(),
00161 $galley->isHTMLGalley() ? $galley->getStyleFileId() : null,
00162 $galley->getSequence() == null ? $this->getNextGalleySequence($galley->getPaperId()) : $galley->getSequence()
00163 )
00164 );
00165 $galley->setId($this->getInsertGalleyId());
00166 return $galley->getId();
00167 }
00168
00173 function updateGalley(&$galley) {
00174 return $this->update(
00175 'UPDATE paper_galleys
00176 SET
00177 file_id = ?,
00178 label = ?,
00179 locale = ?,
00180 html_galley = ?,
00181 style_file_id = ?,
00182 seq = ?
00183 WHERE galley_id = ?',
00184 array(
00185 $galley->getFileId(),
00186 $galley->getLabel(),
00187 $galley->getLocale(),
00188 (int)$galley->isHTMLGalley(),
00189 $galley->isHTMLGalley() ? $galley->getStyleFileId() : null,
00190 $galley->getSequence(),
00191 $galley->getId()
00192 )
00193 );
00194 }
00195
00200 function deleteGalley(&$galley) {
00201 return $this->deleteGalleyById($galley->getId());
00202 }
00203
00209 function deleteGalleyById($galleyId, $paperId = null) {
00210 $this->deleteImagesByGalley($galleyId);
00211 if (isset($paperId)) {
00212 return $this->update(
00213 'DELETE FROM paper_galleys WHERE galley_id = ? AND paper_id = ?',
00214 array($galleyId, $paperId)
00215 );
00216
00217 } else {
00218 return $this->update(
00219 'DELETE FROM paper_galleys WHERE galley_id = ?', $galleyId
00220 );
00221 }
00222 }
00223
00229 function deleteGalleysByPaper($paperId) {
00230 $galleys =& $this->getGalleysByPaper($paperId);
00231 foreach ($galleys as $galley) {
00232 $this->deleteGalleyById($galley->getId(), $paperId);
00233 }
00234 }
00235
00242 function galleyExistsByFileId($paperId, $fileId) {
00243 $result =& $this->retrieve(
00244 'SELECT COUNT(*) FROM paper_galleys
00245 WHERE paper_id = ? AND file_id = ?',
00246 array($paperId, $fileId)
00247 );
00248
00249 $returner = isset($result->fields[0]) && $result->fields[0] == 1 ? true : false;
00250
00251 $result->Close();
00252 unset($result);
00253
00254 return $returner;
00255 }
00256
00261 function incrementViews($galleyId) {
00262 return $this->update(
00263 'UPDATE paper_galleys SET views = views + 1 WHERE galley_id = ?',
00264 $galleyId
00265 );
00266 }
00267
00272 function resequenceGalleys($paperId) {
00273 $result =& $this->retrieve(
00274 'SELECT galley_id FROM paper_galleys WHERE paper_id = ? ORDER BY seq',
00275 $paperId
00276 );
00277
00278 for ($i=1; !$result->EOF; $i++) {
00279 list($galleyId) = $result->fields;
00280 $this->update(
00281 'UPDATE paper_galleys SET seq = ? WHERE galley_id = ?',
00282 array($i, $galleyId)
00283 );
00284 $result->moveNext();
00285 }
00286
00287 $result->close();
00288 unset($result);
00289 }
00290
00296 function getNextGalleySequence($paperId) {
00297 $result =& $this->retrieve(
00298 'SELECT MAX(seq) + 1 FROM paper_galleys WHERE paper_id = ?',
00299 $paperId
00300 );
00301 $returner = floor($result->fields[0]);
00302
00303 $result->Close();
00304 unset($result);
00305
00306 return $returner;
00307 }
00308
00313 function getInsertGalleyId() {
00314 return $this->getInsertId('paper_galleys', 'galley_id');
00315 }
00316
00317
00318
00319
00320
00321
00327 function &getGalleyImages($galleyId) {
00328 $images = array();
00329
00330 $result =& $this->retrieve(
00331 'SELECT a.* FROM paper_html_galley_images i, paper_files a
00332 WHERE i.file_id = a.file_id AND i.galley_id = ?',
00333 $galleyId
00334 );
00335
00336 while (!$result->EOF) {
00337 $images[] =& $this->paperFileDao->_returnPaperFileFromRow($result->GetRowAssoc(false));
00338 $result->MoveNext();
00339 }
00340
00341 $result->Close();
00342 unset($result);
00343
00344 return $images;
00345 }
00346
00352 function insertGalleyImage($galleyId, $fileId) {
00353 return $this->update(
00354 'INSERT INTO paper_html_galley_images
00355 (galley_id, file_id)
00356 VALUES
00357 (?, ?)',
00358 array($galleyId, $fileId)
00359 );
00360 }
00361
00367 function deleteGalleyImage($galleyId, $fileId) {
00368 return $this->update(
00369 'DELETE FROM paper_html_galley_images
00370 WHERE galley_id = ? AND file_id = ?',
00371 array($galleyId, $fileId)
00372 );
00373 }
00374
00379 function deleteImagesByGalley($galleyId) {
00380 return $this->update(
00381 'DELETE FROM paper_html_galley_images WHERE galley_id = ?',
00382 $galleyId
00383 );
00384 }
00385 }
00386
00387 ?>