Open Journal Systems  3.3.0
IssueGalleyDAO.inc.php
1 <?php
2 
17 import('classes.issue.IssueGalley');
18 
19 class IssueGalleyDAO extends DAO {
20 
27  function getById($galleyId, $issueId = null) {
28  $params = array((int) $galleyId);
29  if ($issueId !== null) $params[] = (int) $issueId;
30  $result = $this->retrieve(
31  'SELECT
32  g.*,
33  f.file_name,
34  f.original_file_name,
35  f.file_type,
36  f.file_size,
37  f.content_type,
38  f.date_uploaded,
39  f.date_modified
40  FROM issue_galleys g
41  LEFT JOIN issue_files f ON (g.file_id = f.file_id)
42  WHERE g.galley_id = ?' .
43  ($issueId !== null?' AND g.issue_id = ?':''),
44  $params
45  );
46 
47  $returner = null;
48  if ($result->RecordCount() != 0) {
49  $returner = $this->_fromRow($result->GetRowAssoc(false));
50  } else {
51  HookRegistry::call('IssueGalleyDAO::getById', array(&$galleyId, &$issueId, &$returner));
52  }
53  $result->Close();
54  return $returner;
55  }
56 
68  function pubIdExists($pubIdType, $pubId, $galleyId, $journalId) {
69  $result = $this->retrieve(
70  'SELECT COUNT(*)
71  FROM issue_galley_settings igs
72  INNER JOIN issue_galleys ig ON igs.galley_id = ig.galley_id
73  INNER JOIN issues i ON ig.issue_id = i.issue_id
74  WHERE igs.setting_name = ? AND igs.setting_value = ? AND igs.galley_id <> ? AND i.journal_id = ?',
75  array(
76  'pub-id::'.$pubIdType,
77  $pubId,
78  (int) $galleyId,
79  (int) $journalId
80  )
81  );
82  $returner = $result->fields[0] ? true : false;
83  $result->Close();
84  return $returner;
85  }
86 
96  function getByPubId($pubIdType, $pubId, $issueId) {
97  $result = $this->retrieve(
98  'SELECT
99  g.*,
100  f.file_name,
101  f.original_file_name,
102  f.file_type,
103  f.file_size,
104  f.content_type,
105  f.date_uploaded,
106  f.date_modified
107  FROM issue_galleys g
108  INNER JOIN issue_galley_settings gs ON g.galley_id = gs.galley_id
109  LEFT JOIN issue_files f ON (g.file_id = f.file_id)
110  WHERE gs.setting_name = ? AND
111  gs.setting_value = ? AND
112  g.issue_id = ?',
113  array('pub-id::'.$pubIdType, (string) $pubId, (int) $issueId)
114  );
115 
116  $returner = null;
117  if ($result->RecordCount() != 0) {
118  $returner = $this->_fromRow($result->GetRowAssoc(false));
119  } else {
120  HookRegistry::call('IssueGalleyDAO::getByPubId', array(&$pubIdType, &$pubId, &$issueId, &$returner));
121  }
122  $result->Close();
123  return $returner;
124  }
125 
131  function getByIssueId($issueId) {
132  $galleys = array();
133 
134  $result = $this->retrieve(
135  'SELECT
136  g.*,
137  f.file_name,
138  f.original_file_name,
139  f.file_type,
140  f.file_size,
141  f.content_type,
142  f.date_uploaded,
143  f.date_modified
144  FROM issue_galleys g
145  LEFT JOIN issue_files f ON (g.file_id = f.file_id)
146  WHERE g.issue_id = ? ORDER BY g.seq',
147  (int) $issueId
148  );
149 
150  while (!$result->EOF) {
151  $issueGalley = $this->_fromRow($result->GetRowAssoc(false));
152  $galleys[$issueGalley->getId()] = $issueGalley;
153  $result->MoveNext();
154  }
155 
156  $result->Close();
157  HookRegistry::call('IssueGalleyDAO::getGalleysByIssue', array(&$galleys, &$issueId));
158  return $galleys;
159  }
160 
168  function getByBestId($galleyId, $issueId) {
169  $result = $this->retrieve(
170  'SELECT
171  g.*,
172  f.file_name,
173  f.original_file_name,
174  f.file_type,
175  f.file_size,
176  f.content_type,
177  f.date_uploaded,
178  f.date_modified
179  FROM issue_galleys g
180  LEFT JOIN issue_files f ON (g.file_id = f.file_id)
181  WHERE g.url_path = ? AND
182  g.issue_id = ?',
183  [
184  $galleyId,
185  (int) $issueId,
186  ]
187  );
188 
189  if ($result->RecordCount() != 0) {
190  $issueGalley = $this->_fromRow($result->GetRowAssoc(false));
191  } else {
192  $issueGalley = $this->getById($galleyId, $issueId);
193  }
194  $result->Close();
195 
196  return $issueGalley;
197  }
198 
203  function getLocaleFieldNames() {
204  return array();
205  }
206 
213  $additionalFields = parent::getAdditionalFieldNames();
214  // FIXME: Move this to a PID plug-in.
215  $additionalFields[] = 'pub-id::publisher-id';
216  return $additionalFields;
217  }
218 
223  function updateLocaleFields($galley) {
224  $this->updateDataObjectSettings('issue_galley_settings', $galley, array(
225  'galley_id' => $galley->getId()
226  ));
227  }
228 
233  function newDataObject() {
234  return new IssueGalley();
235  }
236 
242  function _fromRow($row) {
243  $galley = $this->newDataObject();
244 
245  $galley->setId($row['galley_id']);
246  $galley->setIssueId($row['issue_id']);
247  $galley->setLocale($row['locale']);
248  $galley->setFileId($row['file_id']);
249  $galley->setLabel($row['label']);
250  $galley->setSequence($row['seq']);
251  $galley->setData('urlPath', $row['url_path']);
252 
253  // IssueFile set methods
254  $galley->setServerFileName($row['file_name']);
255  $galley->setOriginalFileName($row['original_file_name']);
256  $galley->setFileType($row['file_type']);
257  $galley->setFileSize($row['file_size']);
258  $galley->setContentType($row['content_type']);
259  $galley->setDateModified($this->datetimeFromDB($row['date_modified']));
260  $galley->setDateUploaded($this->datetimeFromDB($row['date_uploaded']));
261 
262  $this->getDataObjectSettings('issue_galley_settings', 'galley_id', $row['galley_id'], $galley);
263 
264  HookRegistry::call('IssueGalleyDAO::_fromRow', array(&$galley, &$row));
265 
266  return $galley;
267  }
268 
273  function insertObject($galley) {
274  $this->update(
275  'INSERT INTO issue_galleys
276  (issue_id,
277  file_id,
278  label,
279  locale,
280  seq,
281  url_path)
282  VALUES
283  (?, ?, ?, ?, ?, ?)',
284  array(
285  (int) $galley->getIssueId(),
286  (int) $galley->getFileId(),
287  $galley->getLabel(),
288  $galley->getLocale(),
289  $galley->getSequence() == null ? $this->getNextGalleySequence($galley->getIssueId()) : $galley->getSequence(),
290  $galley->getData('urlPath'),
291  )
292  );
293  $galley->setId($this->getInsertId());
294  $this->updateLocaleFields($galley);
295 
296  HookRegistry::call('IssueGalleyDAO::insertObject', array(&$galley, $galley->getId()));
297 
298  return $galley->getId();
299  }
300 
305  function updateObject($galley) {
306  $this->update(
307  'UPDATE issue_galleys
308  SET
309  file_id = ?,
310  label = ?,
311  locale = ?,
312  seq = ?,
313  url_path = ?
314  WHERE galley_id = ?',
315  array(
316  (int) $galley->getFileId(),
317  $galley->getLabel(),
318  $galley->getLocale(),
319  $galley->getSequence(),
320  $galley->getData('urlPath'),
321  (int) $galley->getId()
322  )
323  );
324  $this->updateLocaleFields($galley);
325  }
326 
331  function deleteObject($galley) {
332  return $this->deleteById($galley->getId(), $galley->getIssueId());
333  }
334 
340  function deleteById($galleyId, $issueId = null) {
341  HookRegistry::call('IssueGalleyDAO::deleteById', array(&$galleyId, &$issueId));
342 
343  if (isset($issueId)) {
344  $this->update(
345  'DELETE FROM issue_galleys WHERE galley_id = ? AND issue_id = ?',
346  array((int) $galleyId, (int) $issueId)
347  );
348  } else {
349  $this->update(
350  'DELETE FROM issue_galleys WHERE galley_id = ?', (int) $galleyId
351  );
352  }
353  if ($this->getAffectedRows()) {
354  $this->update('DELETE FROM issue_galley_settings WHERE galley_id = ?', array((int) $galleyId));
355  }
356  }
357 
363  function deleteByIssueId($issueId) {
364  $galleys = $this->getByIssueId($issueId);
365  foreach ($galleys as $galley) {
366  $this->deleteById($galley->getId(), $issueId);
367  }
368  }
369 
374  function resequence($issueId) {
375  $result = $this->retrieve(
376  'SELECT galley_id FROM issue_galleys WHERE issue_id = ? ORDER BY seq',
377  (int) $issueId
378  );
379 
380  for ($i=1; !$result->EOF; $i++) {
381  list($galleyId) = $result->fields;
382  $this->update(
383  'UPDATE issue_galleys SET seq = ? WHERE galley_id = ?',
384  array($i, $galleyId)
385  );
386  $result->MoveNext();
387  }
388 
389  $result->Close();
390  }
391 
397  function getNextGalleySequence($issueId) {
398  $result = $this->retrieve(
399  'SELECT MAX(seq) + 1 FROM issue_galleys WHERE issue_id = ?',
400  (int) $issueId
401  );
402  $returner = floor($result->fields[0]);
403  $result->Close();
404  return $returner;
405  }
406 
411  function getInsertId() {
412  return $this->_getInsertId('issue_galleys', 'galley_id');
413  }
414 }
415 
416 
IssueGalleyDAO\getNextGalleySequence
getNextGalleySequence($issueId)
Definition: IssueGalleyDAO.inc.php:397
IssueGalleyDAO\getByIssueId
getByIssueId($issueId)
Definition: IssueGalleyDAO.inc.php:131
IssueGalleyDAO\resequence
resequence($issueId)
Definition: IssueGalleyDAO.inc.php:374
DAO\getAffectedRows
getAffectedRows()
Definition: DAO.inc.php:264
DAO\retrieve
& retrieve($sql, $params=false, $callHooks=true)
Definition: DAO.inc.php:85
IssueGalleyDAO\deleteObject
deleteObject($galley)
Definition: IssueGalleyDAO.inc.php:331
IssueGalleyDAO\updateLocaleFields
updateLocaleFields($galley)
Definition: IssueGalleyDAO.inc.php:223
IssueGalleyDAO\getById
getById($galleyId, $issueId=null)
Definition: IssueGalleyDAO.inc.php:27
IssueGalleyDAO
Operations for retrieving and modifying IssueGalley objects.
Definition: IssueGalleyDAO.inc.php:19
IssueGalleyDAO\pubIdExists
pubIdExists($pubIdType, $pubId, $galleyId, $journalId)
Definition: IssueGalleyDAO.inc.php:68
DAO\datetimeFromDB
datetimeFromDB($dt)
Definition: DAO.inc.php:319
IssueGalleyDAO\newDataObject
newDataObject()
Definition: IssueGalleyDAO.inc.php:233
DAO\update
update($sql, $params=false, $callHooks=true, $dieOnError=true)
Definition: DAO.inc.php:214
DAO\_getInsertId
_getInsertId($table='', $id='')
Definition: DAO.inc.php:255
IssueGalleyDAO\getLocaleFieldNames
getLocaleFieldNames()
Definition: IssueGalleyDAO.inc.php:203
DAO\getDataObjectSettings
getDataObjectSettings($tableName, $idFieldName, $idFieldValue, $dataObject)
Definition: DAO.inc.php:582
IssueGalleyDAO\insertObject
insertObject($galley)
Definition: IssueGalleyDAO.inc.php:273
IssueGalley
A galley is a final presentation version of the full-text of an issue.
Definition: IssueGalley.inc.php:24
IssueGalleyDAO\deleteById
deleteById($galleyId, $issueId=null)
Definition: IssueGalleyDAO.inc.php:340
IssueGalleyDAO\deleteByIssueId
deleteByIssueId($issueId)
Definition: IssueGalleyDAO.inc.php:363
IssueGalleyDAO\updateObject
updateObject($galley)
Definition: IssueGalleyDAO.inc.php:305
IssueGalleyDAO\getByPubId
getByPubId($pubIdType, $pubId, $issueId)
Definition: IssueGalleyDAO.inc.php:96
DAO\updateDataObjectSettings
updateDataObjectSettings($tableName, $dataObject, $idArray)
Definition: DAO.inc.php:488
HookRegistry\call
static call($hookName, $args=null)
Definition: HookRegistry.inc.php:86
IssueGalleyDAO\getByBestId
getByBestId($galleyId, $issueId)
Definition: IssueGalleyDAO.inc.php:168
DAO
Operations for retrieving and modifying objects from a database.
Definition: DAO.inc.php:31
IssueGalleyDAO\_fromRow
_fromRow($row)
Definition: IssueGalleyDAO.inc.php:242
IssueGalleyDAO\getInsertId
getInsertId()
Definition: IssueGalleyDAO.inc.php:411
IssueGalleyDAO\getAdditionalFieldNames
getAdditionalFieldNames()
Definition: IssueGalleyDAO.inc.php:212