Open Journal Systems  2.4.3
 All Classes Namespaces Functions Variables Groups Pages
IssueDAO.inc.php
1 <?php
2 
17 import ('classes.issue.Issue');
18 
19 class IssueDAO extends DAO {
20  var $caches;
21 
22  function _cacheMiss(&$cache, $id) {
23  if ($cache->getCacheId() === 'current') {
24  $issue =& $this->getCurrentIssue($id, false);
25  } else {
26  $issue =& $this->getIssueById($id, null, false);
27  }
28  $cache->setCache($id, $issue);
29  return $issue;
30  }
31 
32  function &_getCache($cacheId) {
33  if (!isset($this->caches)) $this->caches = array();
34  if (!isset($this->caches[$cacheId])) {
35  $cacheManager =& CacheManager::getManager();
36  $this->caches[$cacheId] =& $cacheManager->getObjectCache('issues', $cacheId, array(&$this, '_cacheMiss'));
37  }
38  return $this->caches[$cacheId];
39  }
40 
48  function &getIssueById($issueId, $journalId = null, $useCache = false) {
49  if ($useCache) {
50  $cache =& $this->_getCache('issues');
51  $returner = $cache->get($issueId);
52  if ($returner && $journalId != null && $journalId != $returner->getJournalId()) $returner = null;
53  return $returner;
54  }
55 
56  if (isset($journalId)) {
57  $result =& $this->retrieve(
58  'SELECT i.* FROM issues i WHERE issue_id = ? AND journal_id = ?',
59  array($issueId, $journalId)
60  );
61  } else {
62  $result =& $this->retrieve(
63  'SELECT i.* FROM issues i WHERE issue_id = ?', $issueId
64  );
65  }
66 
67  $issue = null;
68  if ($result->RecordCount() != 0) {
69  $issue =& $this->_returnIssueFromRow($result->GetRowAssoc(false));
70  }
71 
72  $result->Close();
73  unset($result);
74 
75  return $issue;
76  }
77 
88  function &getIssueByPubId($pubIdType, $pubId, $journalId = null, $useCache = false) {
89  if ($useCache && $pubIdType == 'publisher-id') {
90  $cache =& $this->_getCache('issues');
91  $returner = $cache->get($pubId);
92  if ($returner && $journalId != null && $journalId != $returner->getJournalId()) $returner = null;
93  return $returner;
94  }
95 
96  $issues =& $this->getIssuesBySetting('pub-id::'.$pubIdType, $pubId, $journalId);
97  if (empty($issues)) {
98  $issue = null;
99  } else {
100  assert(count($issues) == 1);
101  $issue =& $issues[0];
102  }
103 
104  return $issue;
105  }
106 
114  function &getIssuesBySetting($settingName, $settingValue, $journalId = null) {
115  $params = array($settingName);
116  $sql = 'SELECT i.*
117  FROM issues i ';
118  if (is_null($settingValue)) {
119  $sql .= 'LEFT JOIN issue_settings ist ON i.issue_id = ist.issue_id AND ist.setting_name = ?
120  WHERE (ist.setting_value IS NULL OR ist.setting_value = "")';
121  } else {
122  $params[] = $settingValue;
123  $sql .= 'INNER JOIN issue_settings ist ON i.issue_id = ist.issue_id
124  WHERE ist.setting_name = ? AND ist.setting_value = ?';
125  }
126  if ($journalId) {
127  $params[] = (int) $journalId;
128  $sql .= ' AND i.journal_id = ?';
129  }
130  $sql .= ' ORDER BY i.issue_id';
131  $result =& $this->retrieve($sql, $params);
132 
133  $issues = array();
134  while (!$result->EOF) {
135  $issues[] =& $this->_returnIssueFromRow($result->GetRowAssoc(false));
136  $result->moveNext();
137  }
138  $result->Close();
139 
140  return $issues;
141  }
142 
151  function &getPublishedIssuesByNumber($journalId, $volume = null, $number = null, $year = null) {
152  $sql = 'SELECT i.* FROM issues i WHERE i.published = 1 AND i.journal_id = ?';
153  $params = array($journalId);
154 
155  if ($volume !== null) {
156  $sql .= ' AND i.volume = ?';
157  $params[] = $volume;
158  }
159  if ($number !== null) {
160  $sql .= ' AND i.number = ?';
161  $params[] = $number;
162  }
163  if ($year !== null) {
164  $sql .= ' AND i.year = ?';
165  $params[] = $year;
166  }
167 
168  $result =& $this->retrieve($sql, $params);
169  $returner = new DAOResultFactory($result, $this, '_returnIssueFromRow');
170  return $returner;
171  }
172 
181  function &getIssueByBestIssueId($issueId, $journalId = null, $useCache = false) {
182  $issue =& $this->getIssueByPubId('publisher-id', $issueId, $journalId, $useCache);
183  if (!isset($issue) && ctype_digit("$issueId")) $issue =& $this->getIssueById((int) $issueId, $journalId, $useCache);
184  return $issue;
185  }
186 
192  function &getLastCreatedIssue($journalId) {
193  $result =& $this->retrieveLimit(
194  'SELECT i.* FROM issues i WHERE journal_id = ? ORDER BY year DESC, volume DESC, number DESC', $journalId, 1
195  );
196 
197  $issue = null;
198  if ($result->RecordCount() != 0) {
199  $issue =& $this->_returnIssueFromRow($result->GetRowAssoc(false));
200  }
201 
202  $result->Close();
203  unset($result);
204 
205  return $issue;
206  }
207 
214  function &getCurrentIssue($journalId, $useCache = false) {
215  if ($useCache) {
216  $cache =& $this->_getCache('current');
217  $returner = $cache->get($journalId);
218  return $returner;
219  }
220 
221  $result =& $this->retrieve(
222  'SELECT i.* FROM issues i WHERE journal_id = ? AND current = 1', $journalId
223  );
224 
225  $issue = null;
226  if ($result->RecordCount() != 0) {
227  $issue =& $this->_returnIssueFromRow($result->GetRowAssoc(false));
228  }
229 
230  $result->Close();
231  unset($result);
232 
233  return $issue;
234  }
235 
240  function updateCurrentIssue($journalId, $issue = null) {
241  $this->update(
242  'UPDATE issues SET current = 0 WHERE journal_id = ? AND current = 1', $journalId
243  );
244  if ($issue) $this->updateIssue($issue);
245 
246  $this->flushCache();
247  }
248 
249 
258  function changePubId($issueId, $pubIdType, $pubId) {
259  $idFields = array(
260  'issue_id', 'locale', 'setting_name'
261  );
262  $updateArray = array(
263  'issue_id' => $issueId,
264  'locale' => '',
265  'setting_name' => 'pub-id::'.$pubIdType,
266  'setting_type' => 'string',
267  'setting_value' => (string)$pubId
268  );
269  $this->replace('issue_settings', $updateArray, $idFields);
270  $this->flushCache();
271  }
272 
278  function &_returnIssueFromRow($row) {
279  $issue = new Issue();
280  $issue->setId($row['issue_id']);
281  $issue->setJournalId($row['journal_id']);
282  $issue->setVolume($row['volume']);
283  $issue->setNumber($row['number']);
284  $issue->setYear($row['year']);
285  $issue->setPublished($row['published']);
286  $issue->setCurrent($row['current']);
287  $issue->setDatePublished($this->datetimeFromDB($row['date_published']));
288  $issue->setDateNotified($this->datetimeFromDB($row['date_notified']));
289  $issue->setLastModified($this->datetimeFromDB($row['last_modified']));
290  $issue->setAccessStatus($row['access_status']);
291  $issue->setOpenAccessDate($this->datetimeFromDB($row['open_access_date']));
292  $issue->setShowVolume($row['show_volume']);
293  $issue->setShowNumber($row['show_number']);
294  $issue->setShowYear($row['show_year']);
295  $issue->setShowTitle($row['show_title']);
296  $issue->setStyleFileName($row['style_file_name']);
297  $issue->setOriginalStyleFileName($row['original_style_file_name']);
298 
299  $this->getDataObjectSettings('issue_settings', 'issue_id', $row['issue_id'], $issue);
300 
301  HookRegistry::call('IssueDAO::_returnIssueFromRow', array(&$issue, &$row));
302 
303  return $issue;
304  }
305 
310  function getLocaleFieldNames() {
311  return array('title', 'coverPageDescription', 'coverPageAltText', 'showCoverPage', 'hideCoverPageArchives', 'hideCoverPageCover', 'originalFileName', 'fileName', 'width', 'height', 'description');
312  }
313 
320  $additionalFields = parent::getAdditionalFieldNames();
321  // FIXME: Move this to a PID plug-in.
322  $additionalFields[] = 'pub-id::publisher-id';
323  return $additionalFields;
324  }
325 
330  function updateLocaleFields(&$issue) {
331  $this->updateDataObjectSettings('issue_settings', $issue, array(
332  'issue_id' => $issue->getId()
333  ));
334  }
335 
341  function insertIssue(&$issue) {
342  $this->update(
343  sprintf('INSERT INTO issues
344  (journal_id, volume, number, year, published, current, date_published, date_notified, last_modified, access_status, open_access_date, show_volume, show_number, show_year, show_title, style_file_name, original_style_file_name)
345  VALUES
346  (?, ?, ?, ?, ?, ?, %s, %s, %s, ?, %s, ?, ?, ?, ?, ?, ?)',
347  $this->datetimeToDB($issue->getDatePublished()), $this->datetimeToDB($issue->getDateNotified()), $this->datetimeToDB($issue->getLastModified()), $this->datetimeToDB($issue->getOpenAccessDate())),
348  array(
349  (int) $issue->getJournalId(),
350  $issue->getVolume(),
351  $issue->getNumber(),
352  $issue->getYear(),
353  $issue->getPublished(),
354  $issue->getCurrent(),
355  (int) $issue->getAccessStatus(),
356  (int) $issue->getShowVolume(),
357  (int) $issue->getShowNumber(),
358  (int) $issue->getShowYear(),
359  (int) $issue->getShowTitle(),
360  $issue->getStyleFileName(),
361  $issue->getOriginalStyleFileName()
362  )
363  );
364 
365  $issue->setId($this->getInsertIssueId());
366 
367  $this->updateLocaleFields($issue);
368 
369  if ($this->customIssueOrderingExists($issue->getJournalId())) {
370  $this->resequenceCustomIssueOrders($issue->getJournalId());
371  }
372 
373  return $issue->getId();
374  }
375 
380  function getInsertIssueId() {
381  return $this->getInsertId('issues', 'issue_id');
382  }
383 
392  function issueExists($journalId, $volume, $number, $year, $issueId) {
393  $result =& $this->retrieve(
394  'SELECT i.* FROM issues i WHERE journal_id = ? AND volume = ? AND number = ? AND year = ? AND issue_id <> ?',
395  array($journalId, $volume, $number, $year, $issueId)
396  );
397  $returner = $result->RecordCount() != 0 ? true : false;
398 
399  $result->Close();
400  unset($result);
401 
402  return $returner;
403  }
404 
409  function updateIssue($issue) {
410  $issue->stampModified();
411  $this->update(
412  sprintf('UPDATE issues
413  SET
414  journal_id = ?,
415  volume = ?,
416  number = ?,
417  year = ?,
418  published = ?,
419  current = ?,
420  date_published = %s,
421  date_notified = %s,
422  last_modified = %s,
423  open_access_date = %s,
424  access_status = ?,
425  show_volume = ?,
426  show_number = ?,
427  show_year = ?,
428  show_title = ?,
429  style_file_name = ?,
430  original_style_file_name = ?
431  WHERE issue_id = ?',
432  $this->datetimeToDB($issue->getDatePublished()), $this->datetimeToDB($issue->getDateNotified()), $this->datetimeToDB($issue->getLastModified()), $this->datetimeToDB($issue->getOpenAccessDate())),
433  array(
434  (int) $issue->getJournalId(),
435  $issue->getVolume(),
436  $issue->getNumber(),
437  $issue->getYear(),
438  (int) $issue->getPublished(),
439  (int) $issue->getCurrent(),
440  (int) $issue->getAccessStatus(),
441  (int) $issue->getShowVolume(),
442  (int) $issue->getShowNumber(),
443  (int) $issue->getShowYear(),
444  (int) $issue->getShowTitle(),
445  $issue->getStyleFileName(),
446  $issue->getOriginalStyleFileName(),
447  (int) $issue->getId()
448  )
449  );
450 
451  $this->updateLocaleFields($issue);
452 
453  if ($this->customIssueOrderingExists($issue->getJournalId())) {
454  $this->resequenceCustomIssueOrders($issue->getJournalId());
455  }
456 
457  $this->flushCache();
458  }
459 
464  function deleteIssue(&$issue) {
465  import('classes.file.PublicFileManager');
466  $publicFileManager = new PublicFileManager();
467 
468  if (is_array($issue->getFileName(null))) foreach ($issue->getFileName(null) as $fileName) {
469  if ($fileName != '') {
470  $publicFileManager->removeJournalFile($issue->getJournalId(), $fileName);
471  }
472  }
473  if (($fileName = $issue->getStyleFileName()) != '') {
474  $publicFileManager->removeJournalFile($issue->getJournalId(), $fileName);
475  }
476 
477  $issueId = $issue->getId();
478 
479  // Delete issue-specific ordering if it exists.
480  $sectionDao =& DAORegistry::getDAO('SectionDAO');
481  $sectionDao->deleteCustomSectionOrdering($issueId);
482 
483  // Delete published issue galleys and issue files
484  $issueGalleyDao =& DAORegistry::getDAO('IssueGalleyDAO');
485  $issueGalleyDao->deleteGalleysByIssue($issueId);
486 
487  $issueFileDao =& DAORegistry::getDAO('IssueFileDAO');
488  $issueFileDao->deleteIssueFiles($issueId);
489 
490  import('classes.file.IssueFileManager');
491  $issueFileManager = new IssueFileManager($issueId);
492  $issueFileManager->deleteIssueTree();
493 
494  // Delete published articles
495  $publishedArticleDao =& DAORegistry::getDAO('PublishedArticleDAO');
496  $publishedArticleDao->deletePublishedArticlesByIssueId($issueId);
497 
498  // Delete issue settings and issue
499  $this->update('DELETE FROM issue_settings WHERE issue_id = ?', $issueId);
500  $this->update('DELETE FROM issues WHERE issue_id = ?', $issueId);
501  $this->resequenceCustomIssueOrders($issue->getJournalId());
502 
503  $this->flushCache();
504  }
505 
510  function deleteIssuesByJournal($journalId) {
511  $issues =& $this->getIssues($journalId);
512  while (($issue =& $issues->next())) {
513  $this->deleteIssue($issue);
514  unset($issue);
515  }
516  }
517 
524  function issueIdExists($issueId, $journalId) {
525  $result =& $this->retrieve(
526  'SELECT COUNT(*) FROM issues WHERE issue_id = ? AND journal_id = ?',
527  array($issueId, $journalId)
528  );
529  return $result->fields[0] ? true : false;
530  }
531 
543  function pubIdExists($pubIdType, $pubId, $issueId, $journalId) {
544  $result =& $this->retrieve(
545  'SELECT COUNT(*)
546  FROM issue_settings ist
547  INNER JOIN issues i ON ist.issue_id = i.issue_id
548  WHERE ist.setting_name = ? AND ist.setting_value = ? AND i.issue_id <> ? AND i.journal_id = ?',
549  array(
550  'pub-id::'.$pubIdType,
551  $pubId,
552  (int) $issueId,
553  (int) $journalId
554  )
555  );
556  $returner = $result->fields[0] ? true : false;
557  $result->Close();
558  return $returner;
559  }
560 
567  function &getIssueByArticleId($articleId, $journalId = null) {
568  $params = array($articleId);
569  $sql = 'SELECT i.*
570  FROM issues i,
571  published_articles pa,
572  articles a
573  WHERE i.issue_id = pa.issue_id AND
574  pa.article_id = ? AND
575  pa.article_id = a.article_id';
576  if ($journalId !== null) {
577  $sql .= ' AND i.journal_id = ? AND a.journal_id = i.journal_id';
578  $params[] = $journalId;
579  }
580 
581  $result =& $this->retrieve($sql, $params);
582 
583  $issue = null;
584  if ($result->RecordCount() != 0) {
585  $publishedArticleDao =& DAORegistry::getDAO('PublishedArticleDAO');
586  $issue =& $this->_returnIssueFromRow($result->GetRowAssoc(false));
587  }
588 
589  $result->Close();
590  unset($result);
591 
592  return $issue;
593  }
594 
601  function &getIssues($journalId, $rangeInfo = null) {
602  $issues = array();
603 
604  $sql = 'SELECT i.* FROM issues i WHERE journal_id = ? ORDER BY current DESC, date_published DESC';
605  $result =& $this->retrieveRange($sql, $journalId, $rangeInfo);
606 
607  $returner = new DAOResultFactory($result, $this, '_returnIssueFromRow');
608  return $returner;
609  }
610 
617  function &getPublishedIssues($journalId, $rangeInfo = null) {
618  $result =& $this->retrieveRange(
619  'SELECT i.* FROM issues i LEFT JOIN custom_issue_orders o ON (o.issue_id = i.issue_id) WHERE i.journal_id = ? AND i.published = 1 ORDER BY o.seq ASC, i.current DESC, i.date_published DESC',
620  $journalId, $rangeInfo
621  );
622 
623  $returner = new DAOResultFactory($result, $this, '_returnIssueFromRow');
624  return $returner;
625  }
626 
633  function &getUnpublishedIssues($journalId, $rangeInfo = null) {
634  $result =& $this->retrieveRange(
635  'SELECT i.* FROM issues i WHERE journal_id = ? AND published = 0 ORDER BY year ASC, volume ASC, number ASC',
636  $journalId, $rangeInfo
637  );
638 
639  $returner = new DAOResultFactory($result, $this, '_returnIssueFromRow');
640  return $returner;
641  }
642 
648  function getNumArticles($issueId) {
649  $result =& $this->retrieve('SELECT COUNT(*) FROM published_articles WHERE issue_id = ?', $issueId);
650  $returner = isset($result->fields[0]) ? $result->fields[0] : 0;
651 
652  $result->Close();
653  unset($result);
654 
655  return $returner;
656  }
657 
662  function deleteCustomIssueOrdering($journalId) {
663  return $this->update(
664  'DELETE FROM custom_issue_orders WHERE journal_id = ?', $journalId
665  );
666  }
667 
672  function resequenceCustomIssueOrders($journalId) {
673  $result =& $this->retrieve(
674  'SELECT i.issue_id FROM issues i LEFT JOIN custom_issue_orders o ON (o.issue_id = i.issue_id) WHERE i.journal_id = ? ORDER BY o.seq',
675  $journalId
676  );
677 
678  for ($i=1; !$result->EOF; $i++) {
679  list($issueId) = $result->fields;
680  $resultB =& $this->retrieve('SELECT issue_id FROM custom_issue_orders WHERE journal_id=? AND issue_id=?', array($journalId, $issueId));
681  if (!$resultB->EOF) {
682  $this->update(
683  'UPDATE custom_issue_orders SET seq = ? WHERE issue_id = ? AND journal_id = ?',
684  array($i, $issueId, $journalId)
685  );
686  } else {
687  // This entry is missing. Create it.
688  $this->insertCustomIssueOrder($journalId, $issueId, $i);
689  }
690  $resultB->Close();
691  unset($resultB);
692  $result->moveNext();
693  }
694 
695  $result->close();
696  unset($result);
697  }
698 
704  function customIssueOrderingExists($journalId) {
705  $result =& $this->retrieve(
706  'SELECT COUNT(*) FROM custom_issue_orders WHERE journal_id = ?',
707  $journalId
708  );
709  $returner = isset($result->fields[0]) && $result->fields[0] == 0 ? false : true;
710 
711  $result->Close();
712  unset($result);
713 
714  return $returner;
715  }
716 
723  function getCustomIssueOrder($journalId, $issueId) {
724  $result =& $this->retrieve(
725  'SELECT seq FROM custom_issue_orders WHERE journal_id = ? AND issue_id = ?',
726  array($journalId, $issueId)
727  );
728 
729  $returner = null;
730  if (!$result->EOF) {
731  list($returner) = $result->fields;
732  }
733  $result->Close();
734  unset($result);
735 
736  return $returner;
737  }
738 
744  function setDefaultCustomIssueOrders($journalId) {
745  $publishedIssues =& $this->getPublishedIssues($journalId);
746  $i=1;
747  while ($issue =& $publishedIssues->next()) {
748  $this->insertCustomIssueOrder($journalId, $issue->getId(), $i);
749  unset($issue);
750  $i++;
751  }
752  }
753 
760  function insertCustomIssueOrder($journalId, $issueId, $seq) {
761  $this->update(
762  'INSERT INTO custom_issue_orders (issue_id, journal_id, seq) VALUES (?, ?, ?)',
763  array(
764  $issueId,
765  $journalId,
766  $seq
767  )
768  );
769  }
770 
777  function moveCustomIssueOrder($journalId, $issueId, $newPos) {
778  $result =& $this->retrieve('SELECT issue_id FROM custom_issue_orders WHERE journal_id=? AND issue_id=?', array($journalId, $issueId));
779  if (!$result->EOF) {
780  $this->update(
781  'UPDATE custom_issue_orders SET seq = ? WHERE journal_id = ? AND issue_id = ?',
782  array($newPos, $journalId, $issueId)
783  );
784  } else {
785  // This entry is missing. Create it.
786  $this->insertCustomIssueOrder($journalId, $issueId, $newPos);
787  }
788  $result->Close();
789  unset($result);
790  $this->resequenceCustomIssueOrders($journalId);
791  }
792 
800  function deleteAllPubIds($journalId, $pubIdType) {
801  $journalId = (int) $journalId;
802  $settingName = 'pub-id::'.$pubIdType;
803 
804  // issues
805  $issues =& $this->getIssues($journalId);
806  while ($issue =& $issues->next()) {
807  $this->update(
808  'DELETE FROM issue_settings WHERE setting_name = ? AND issue_id = ?',
809  array(
810  $settingName,
811  (int)$issue->getId()
812  )
813  );
814  unset($issue);
815  }
816  $this->flushCache();
817  }
818 
822  function flushCache() {
823  $cache =& $this->_getCache('issues');
824  $cache->flush();
825  unset($cache);
826  $cache =& $this->_getCache('current');
827  $cache->flush();
828  }
829 }
830 
831 ?>
& getUnpublishedIssues($journalId, $rangeInfo=null)
& _returnIssueFromRow($row)
Operations for retrieving and modifying objects from a database.
Definition: DAO.inc.php:29
deleteAllPubIds($journalId, $pubIdType)
& retrieveLimit($sql, $params=false, $numRows=false, $offset=false, $callHooks=true)
Definition: DAO.inc.php:147
Wrapper class for uploading files to a site/journal&#39;s public directory.
& retrieve($sql, $params=false, $callHooks=true)
Definition: DAO.inc.php:83
updateCurrentIssue($journalId, $issue=null)
insertCustomIssueOrder($journalId, $issueId, $seq)
getNumArticles($issueId)
& getLastCreatedIssue($journalId)
getInsertId($table= '', $id= '', $callHooks=true)
Definition: DAO.inc.php:252
resequenceCustomIssueOrders($journalId)
updateIssue($issue)
& getIssuesBySetting($settingName, $settingValue, $journalId=null)
& getPublishedIssues($journalId, $rangeInfo=null)
getAdditionalFieldNames()
updateDataObjectSettings($tableName, &$dataObject, $idArray)
Definition: DAO.inc.php:460
& getPublishedIssuesByNumber($journalId, $volume=null, $number=null, $year=null)
Class defining operations for issue file management.
& retrieveRange($sql, $params=false, $dbResultRange=null, $callHooks=true)
Definition: DAO.inc.php:176
& getIssueById($issueId, $journalId=null, $useCache=false)
getCustomIssueOrder($journalId, $issueId)
Operations for retrieving and modifying Issue objects.
deleteCustomIssueOrdering($journalId)
& getIssueByPubId($pubIdType, $pubId, $journalId=null, $useCache=false)
datetimeFromDB($dt)
Definition: DAO.inc.php:316
setDefaultCustomIssueOrders($journalId)
deleteIssue(&$issue)
insertIssue(&$issue)
Wrapper around ADORecordSet providing &quot;factory&quot; features for generating objects from DAOs...
issueIdExists($issueId, $journalId)
Class for Issue.
Definition: Issue.inc.php:24
& getIssues($journalId, $rangeInfo=null)
& getCurrentIssue($journalId, $useCache=false)
& getDAO($name, $dbconn=null)
issueExists($journalId, $volume, $number, $year, $issueId)
getInsertIssueId()
pubIdExists($pubIdType, $pubId, $issueId, $journalId)
& getIssueByArticleId($articleId, $journalId=null)
updateLocaleFields(&$issue)
customIssueOrderingExists($journalId)
moveCustomIssueOrder($journalId, $issueId, $newPos)
& getIssueByBestIssueId($issueId, $journalId=null, $useCache=false)
call($hookName, $args=null)
getLocaleFieldNames()
replace($table, $arrFields, $keyCols)
Definition: DAO.inc.php:240
datetimeToDB($dt)
Definition: DAO.inc.php:296
update($sql, $params=false, $callHooks=true, $dieOnError=true)
Definition: DAO.inc.php:211
deleteIssuesByJournal($journalId)
changePubId($issueId, $pubIdType, $pubId)