Open Journal Systems  3.3.0
IssueDAO.inc.php
1 <?php
2 
17 import('classes.issue.Issue');
18 import('lib.pkp.classes.submission.PKPSubmission'); // STATUS_... constants
19 import('lib.pkp.classes.plugins.PKPPubIdPluginDAO');
20 
21 class IssueDAO extends DAO implements PKPPubIdPluginDAO {
22  var $caches;
23 
30  function _cacheMiss($cache, $id) {
31  if ($cache->getCacheId() === 'current') {
32  $issue = $this->getCurrent($id, false);
33  } else {
34  $issue = $this->getByBestId($id, null, false);
35  }
36  $cache->setCache($id, $issue);
37  return $issue;
38  }
39 
45  function _getCache($cacheId) {
46  if (!isset($this->caches)) $this->caches = array();
47  if (!isset($this->caches[$cacheId])) {
48  $cacheManager = CacheManager::getManager();
49  $this->caches[$cacheId] = $cacheManager->getObjectCache('issues', $cacheId, array($this, '_cacheMiss'));
50  }
51  return $this->caches[$cacheId];
52  }
53 
61  function getById($issueId, $journalId = null, $useCache = false) {
62  if ($useCache) {
63  $cache = $this->_getCache('issues');
64  $returner = $cache->get($issueId);
65  if ($returner && $journalId != null && $journalId != $returner->getJournalId()) $returner = null;
66  return $returner;
67  }
68 
69  $params = array((int) $issueId);
70  if ($journalId) $params[] = (int) $journalId;
71  $result = $this->retrieve(
72  'SELECT i.* FROM issues i WHERE issue_id = ?'
73  . ($journalId?' AND journal_id = ?':''),
74  $params
75  );
76 
77  $issue = null;
78  if ($result->RecordCount() != 0) {
79  $issue = $this->_returnIssueFromRow($result->GetRowAssoc(false));
80  }
81  $result->Close();
82  return $issue;
83  }
84 
95  function getByPubId($pubIdType, $pubId, $journalId = null, $useCache = false) {
96  if ($useCache && $pubIdType == 'publisher-id') {
97  $cache = $this->_getCache('issues');
98  $returner = $cache->get($pubId);
99  if ($returner && $journalId != null && $journalId != $returner->getJournalId()) $returner = null;
100  return $returner;
101  }
102 
103  $issues = $this->getBySetting('pub-id::'.$pubIdType, $pubId, $journalId);
104  if (empty($issues)) {
105  return null;
106  } else {
107  assert(count($issues) == 1);
108  return $issues[0];
109  }
110  }
111 
119  function getBySetting($settingName, $settingValue, $journalId = null) {
120  $params = array($settingName);
121  $sql = 'SELECT i.*
122  FROM issues i ';
123  if (is_null($settingValue)) {
124  $sql .= 'LEFT JOIN issue_settings ist ON i.issue_id = ist.issue_id AND ist.setting_name = ?
125  WHERE (ist.setting_value IS NULL OR ist.setting_value = \'\')';
126  } else {
127  $params[] = (string) $settingValue;
128  $sql .= 'INNER JOIN issue_settings ist ON i.issue_id = ist.issue_id
129  WHERE ist.setting_name = ? AND ist.setting_value = ?';
130  }
131  if ($journalId) {
132  $params[] = (int) $journalId;
133  $sql .= ' AND i.journal_id = ?';
134  }
135  $sql .= ' ORDER BY i.issue_id';
136  $result = $this->retrieve($sql, $params);
137 
138  $issues = array();
139  while (!$result->EOF) {
140  $issues[] = $this->_returnIssueFromRow($result->GetRowAssoc(false));
141  $result->MoveNext();
142  }
143  $result->Close();
144  return $issues;
145  }
146 
155  function getPublishedIssuesByNumber($journalId, $volume = null, $number = null, $year = null) {
156  $sql = 'SELECT i.* FROM issues i WHERE i.published = 1 AND i.journal_id = ?';
157  $params = array((int) $journalId);
158 
159  if ($volume !== null) {
160  $sql .= ' AND i.volume = ?';
161  $params[] = (int) $volume;
162  }
163  if ($number !== null) {
164  $sql .= ' AND i.number = ?';
165  $params[] = $number;
166  }
167  if ($year !== null) {
168  $sql .= ' AND i.year = ?';
169  $params[] = $year;
170  }
171 
172  $result = $this->retrieve($sql, $params);
173  return new DAOResultFactory($result, $this, '_returnIssueFromRow');
174  }
175 
185  function getIssuesByIdentification($journalId, $volume = null, $number = null, $year = null, $titles = array()) {
186  $params = array();
187 
188  $i = 1;
189  $sqlTitleJoin = '';
190  foreach ($titles as $title) {
191  $sqlTitleJoin .= ' JOIN issue_settings iss' .$i .' ON (i.issue_id = iss' .$i .'.issue_id AND iss' .$i .'.setting_name = \'title\' AND iss' .$i .'.setting_value = ?)';
192  $params[] = $title;
193  $i++;
194  }
195  $params[] = (int) $journalId;
196  if ($volume !== null) {
197  $params[] = (int) $volume;
198  }
199  if ($number !== null) {
200  $params[] = $number;
201  }
202  if ($year !== null) {
203  $params[] = (int) $year;
204  }
205 
206  $result = $this->retrieve(
207  'SELECT i.*
208  FROM issues i'
209  .$sqlTitleJoin
210  .' WHERE i.journal_id = ?'
211  .(($volume !== null)?' AND i.volume = ?':'')
212  .(($number !== null)?' AND i.number = ?':'')
213  .(($year !== null)?' AND i.year = ?':''),
214  $params
215  );
216  return new DAOResultFactory($result, $this, '_returnIssueFromRow');
217  }
218 
227  function getByBestId($issueId, $contextId = null, $useCache = false) {
228  $params = [
229  $issueId
230  ];
231  if ($contextId) $params[] = (int) $contextId;
232 
233  $result = $this->retrieve(
234  'SELECT i.* FROM issues i WHERE url_path = ?'
235  . ($contextId?' AND journal_id = ?':''),
236  $params
237  );
238 
239  if ($result->RecordCount() != 0) {
240  $issue = $this->_returnIssueFromRow($result->GetRowAssoc(false));
241  } elseif (is_int($issueId) || ctype_digit($issueId)) {
242  $issue = $this->getById($issueId);
243  }
244  $result->Close();
245 
246  return $issue ?? null;
247  }
248 
255  function getCurrent($journalId, $useCache = false) {
256  if ($useCache) {
257  $cache = $this->_getCache('current');
258  return $cache->get($journalId);
259  }
260 
261  $result = $this->retrieve(
262  'SELECT i.* FROM issues i WHERE journal_id = ? AND current = 1', (int) $journalId
263  );
264 
265  $issue = null;
266  if ($result->RecordCount() != 0) {
267  $issue = $this->_returnIssueFromRow($result->GetRowAssoc(false));
268  }
269  $result->Close();
270  return $issue;
271  }
272 
277  function updateCurrent($journalId, $issue = null) {
278  $this->update(
279  'UPDATE issues SET current = 0 WHERE journal_id = ? AND current = 1', (int) $journalId
280  );
281  if ($issue) $this->updateObject($issue);
282 
283  $this->flushCache();
284  }
285 
286 
291  function newDataObject() {
292  return new Issue();
293  }
294 
300  function _fromRow($row) {
301  $issue = $this->newDataObject();
302  $issue->setId($row['issue_id']);
303  $issue->setJournalId($row['journal_id']);
304  $issue->setVolume($row['volume']);
305  $issue->setNumber($row['number']);
306  $issue->setYear($row['year']);
307  $issue->setPublished($row['published']);
308  $issue->setCurrent($row['current']);
309  $issue->setDatePublished($this->datetimeFromDB($row['date_published']));
310  $issue->setDateNotified($this->datetimeFromDB($row['date_notified']));
311  $issue->setLastModified($this->datetimeFromDB($row['last_modified']));
312  $issue->setAccessStatus($row['access_status']);
313  $issue->setOpenAccessDate($this->datetimeFromDB($row['open_access_date']));
314  $issue->setShowVolume($row['show_volume']);
315  $issue->setShowNumber($row['show_number']);
316  $issue->setShowYear($row['show_year']);
317  $issue->setShowTitle($row['show_title']);
318  $issue->setData('urlPath', $row['url_path']);
319 
320  $this->getDataObjectSettings('issue_settings', 'issue_id', $row['issue_id'], $issue);
321 
322  HookRegistry::call('IssueDAO::_fromRow', array(&$issue, &$row));
323 
324  return $issue;
325  }
326 
331  function _returnIssueFromRow($row) {
332  $issue = self::_fromRow($row);
333  HookRegistry::call('IssueDAO::_returnIssueFromRow', array(&$issue, &$row));
334  return $issue;
335  }
336 
341  function getLocaleFieldNames() {
342  return array('title', 'description', 'coverImageAltText', 'coverImage');
343  }
344 
351  $additionalFields = parent::getAdditionalFieldNames();
352  // FIXME: Move this to a PID plug-in.
353  $additionalFields[] = 'pub-id::publisher-id';
354  return $additionalFields;
355  }
356 
361  function updateLocaleFields(&$issue) {
362  $this->updateDataObjectSettings('issue_settings', $issue, array(
363  'issue_id' => $issue->getId()
364  ));
365  }
366 
372  function insertObject($issue) {
373  $this->update(
374  sprintf('INSERT INTO issues
375  (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, url_path)
376  VALUES
377  (?, ?, ?, ?, ?, ?, %s, %s, %s, ?, %s, ?, ?, ?, ?, ?)',
378  $this->datetimeToDB($issue->getDatePublished()), $this->datetimeToDB($issue->getDateNotified()), $this->datetimeToDB($issue->getLastModified()), $this->datetimeToDB($issue->getOpenAccessDate())),
379  array(
380  (int) $issue->getJournalId(),
381  $this->nullOrInt($issue->getVolume()),
382  $issue->getNumber(),
383  $this->nullOrInt($issue->getYear()),
384  (int) $issue->getPublished(),
385  (int) $issue->getCurrent(),
386  (int) $issue->getAccessStatus(),
387  (int) $issue->getShowVolume(),
388  (int) $issue->getShowNumber(),
389  (int) $issue->getShowYear(),
390  (int) $issue->getShowTitle(),
391  $issue->getData('urlPath'),
392  )
393  );
394 
395  $issue->setId($this->getInsertId());
396 
397  $this->updateLocaleFields($issue);
398 
399  $this->resequenceCustomIssueOrders($issue->getJournalId());
400 
401  return $issue->getId();
402  }
403 
408  function getInsertId() {
409  return $this->_getInsertId('issues', 'issue_id');
410  }
411 
421  function issueExists($journalId, $volume, $number, $year, $issueId) {
422  $result = $this->retrieve(
423  'SELECT i.* FROM issues i WHERE journal_id = ? AND volume = ? AND number = ? AND year = ? AND issue_id <> ?',
424  array((int) $journalId, $this->nullOrInt($volume), $number, $year, (int) $issueId)
425  );
426  $returner = $result->RecordCount() != 0 ? true : false;
427  $result->Close();
428  return $returner;
429  }
430 
435  function updateObject($issue) {
436  $issue->stampModified();
437  $this->update(
438  sprintf('UPDATE issues
439  SET
440  journal_id = ?,
441  volume = ?,
442  number = ?,
443  year = ?,
444  published = ?,
445  current = ?,
446  date_published = %s,
447  date_notified = %s,
448  last_modified = %s,
449  open_access_date = %s,
450  access_status = ?,
451  show_volume = ?,
452  show_number = ?,
453  show_year = ?,
454  show_title = ?,
455  url_path = ?
456  WHERE issue_id = ?',
457  $this->datetimeToDB($issue->getDatePublished()), $this->datetimeToDB($issue->getDateNotified()), $this->datetimeToDB($issue->getLastModified()), $this->datetimeToDB($issue->getOpenAccessDate())),
458  array(
459  (int) $issue->getJournalId(),
460  $this->nullOrInt($issue->getVolume()),
461  $issue->getNumber(),
462  $this->nullOrInt($issue->getYear()),
463  (int) $issue->getPublished(),
464  (int) $issue->getCurrent(),
465  (int) $issue->getAccessStatus(),
466  (int) $issue->getShowVolume(),
467  (int) $issue->getShowNumber(),
468  (int) $issue->getShowYear(),
469  (int) $issue->getShowTitle(),
470  $issue->getData('urlPath'),
471  (int) $issue->getId(),
472  )
473  );
474 
475  $this->updateLocaleFields($issue);
476 
477  $this->resequenceCustomIssueOrders($issue->getJournalId());
478 
479  $this->flushCache();
480  }
481 
486  function deleteObject($issue) {
487  import('classes.file.PublicFileManager');
488  $publicFileManager = new PublicFileManager();
489 
490  if (is_array($issue->getCoverImage(null))) {
491  foreach ($issue->getCoverImage(null) as $coverImage) {
492  if ($coverImage != '') {
493  $publicFileManager->removeContextFile($issue->getJournalId(), $coverImage);
494  }
495  }
496  }
497 
498  $issueId = $issue->getId();
499 
500  // Delete issue-specific ordering if it exists.
501  $sectionDao = DAORegistry::getDAO('SectionDAO'); /* @var $sectionDao SectionDAO */
502  $sectionDao->deleteCustomSectionOrdering($issueId);
503 
504  // Delete published issue galleys and issue files
505  $issueGalleyDao = DAORegistry::getDAO('IssueGalleyDAO'); /* @var $issueGalleyDao IssueGalleyDAO */
506  $issueGalleyDao->deleteByIssueId($issueId);
507 
508  $issueFileDao = DAORegistry::getDAO('IssueFileDAO'); /* @var $issueFileDao IssueFileDAO */
509  $issueFileDao->deleteByIssueId($issueId);
510 
511  import('classes.file.IssueFileManager');
512  $issueFileManager = new IssueFileManager($issueId);
513  $issueFileManager->deleteIssueTree();
514 
515  // Delete issue settings and issue
516  $this->update('DELETE FROM issue_settings WHERE issue_id = ?', (int) $issueId);
517  $this->update('DELETE FROM issues WHERE issue_id = ?', (int) $issueId);
518  $this->update('DELETE FROM custom_issue_orders WHERE issue_id = ?', (int) $issueId);
519  $this->resequenceCustomIssueOrders($issue->getJournalId());
520 
521  $this->flushCache();
522  }
523 
528  function deleteByJournalId($journalId) {
529  $issues = $this->getIssues($journalId);
530  while ($issue = $issues->next()) {
531  $this->deleteObject($issue);
532  }
533  }
534 
541  function issueIdExists($issueId, $journalId) {
542  $result = $this->retrieve(
543  'SELECT COUNT(*) FROM issues WHERE issue_id = ? AND journal_id = ?',
544  array((int) $issueId, (int) $journalId)
545  );
546  return $result->fields[0] ? true : false;
547  }
548 
555  function getBySubmissionId($articleId, $journalId = null) {
556  $params = ['issueId', (int) $articleId];
557  if ($journalId) $params[] = (int) $journalId;
558 
559  $result = $this->retrieve(
560  'SELECT i.*
561  FROM issues i,
562  submissions a
563  LEFT JOIN publications p ON (p.publication_id = a.current_publication_id)
564  LEFT JOIN publication_settings ps ON (ps.publication_id = p.publication_id)
565  WHERE ps.setting_name = ? AND ps.setting_value = CAST(i.issue_id as CHAR) AND
566  a.submission_id = ? AND
567  a.context_id = i.journal_id' .
568  ($journalId?' AND i.journal_id = ?':''),
569  $params
570  );
571 
572  $issue = null;
573  if ($result->RecordCount() != 0) {
574  $issue = $this->_returnIssueFromRow($result->GetRowAssoc(false));
575  }
576 
577  $result->Close();
578  return $issue;
579  }
580 
587  function getIssues($journalId, $rangeInfo = null) {
588  $result = $this->retrieveRange(
589  'SELECT i.* FROM issues i WHERE journal_id = ? ORDER BY current DESC, date_published DESC',
590  (int) $journalId, $rangeInfo
591  );
592 
593  return new DAOResultFactory($result, $this, '_returnIssueFromRow');
594  }
595 
602  function getPublishedIssues($journalId, $rangeInfo = null) {
603  $result = $this->retrieveRange(
604  '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',
605  (int) $journalId, $rangeInfo
606  );
607 
608  return new DAOResultFactory($result, $this, '_returnIssueFromRow');
609  }
610 
617  function getUnpublishedIssues($journalId, $rangeInfo = null) {
618  $result = $this->retrieveRange(
619  'SELECT i.* FROM issues i WHERE journal_id = ? AND published = 0 ORDER BY year ASC, volume ASC, number ASC',
620  (int) $journalId, $rangeInfo
621  );
622 
623  return new DAOResultFactory($result, $this, '_returnIssueFromRow');
624  }
625 
636  function getExportable($contextId, $pubIdType = null, $pubIdSettingName = null, $pubIdSettingValue = null, $rangeInfo = null) {
637  $params = array();
638  if ($pubIdSettingName) {
639  $params[] = $pubIdSettingName;
640  }
641  $params[] = (int) $contextId;
642  if ($pubIdType) {
643  $params[] = 'pub-id::'.$pubIdType;
644  }
645  import('classes.plugins.PubObjectsExportPlugin');
646  if ($pubIdSettingName && $pubIdSettingValue && $pubIdSettingValue != EXPORT_STATUS_NOT_DEPOSITED) {
647  $params[] = $pubIdSettingValue;
648  }
649 
650  $result = $this->retrieveRange(
651  'SELECT i.*
652  FROM issues i
653  LEFT JOIN custom_issue_orders o ON (o.issue_id = i.issue_id)
654  ' . ($pubIdType != null?' LEFT JOIN issue_settings ist ON (i.issue_id = ist.issue_id)':'')
655  . ($pubIdSettingName != null?' LEFT JOIN issue_settings iss ON (i.issue_id = iss.issue_id AND iss.setting_name = ?)':'') .'
656  WHERE
657  i.published = 1 AND i.journal_id = ?
658  ' . ($pubIdType != null?' AND ist.setting_name = ? AND ist.setting_value IS NOT NULL':'')
659  . (($pubIdSettingName != null && $pubIdSettingValue != null && $pubIdSettingValue == EXPORT_STATUS_NOT_DEPOSITED)?' AND iss.setting_value IS NULL':'')
660  . (($pubIdSettingName != null && $pubIdSettingValue != null && $pubIdSettingValue != EXPORT_STATUS_NOT_DEPOSITED)?' AND iss.setting_value = ?':'')
661  . (($pubIdSettingName != null && is_null($pubIdSettingValue))?' AND (iss.setting_value IS NULL OR iss.setting_value = \'\')':'')
662  .' ORDER BY i.date_published DESC',
663  $params,
664  $rangeInfo
665  );
666 
667  return new DAOResultFactory($result, $this, '_returnIssueFromRow');
668  }
669 
675  function getNumArticles($issueId) {
676  $result = $this->retrieve(
677  'SELECT COUNT(*)
678  FROM submissions s
679  LEFT JOIN publications p ON (p.publication_id = s.current_publication_id)
680  LEFT JOIN publication_settings ps ON (ps.publication_id = p.publication_id)
681  WHERE ps.setting_name = ? AND ps.setting_value = ? AND (s.status = ? or s.status = ?) ',
682  ['issueId', (int) $issueId, (int) STATUS_SCHEDULED, (int) STATUS_PUBLISHED]
683  );
684  $returner = isset($result->fields[0]) ? $result->fields[0] : 0;
685  $result->Close();
686  return $returner;
687  }
688 
693  function deleteCustomIssueOrdering($journalId) {
694  $this->update(
695  'DELETE FROM custom_issue_orders WHERE journal_id = ?', (int) $journalId
696  );
697  }
698 
703  function resequenceCustomIssueOrders($journalId) {
704  // If no custom issue ordering already exists, there is nothing to do
705  if (!$this->customIssueOrderingExists($journalId)) {
706  return;
707  }
708  $result = $this->retrieve(
709  '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',
710  (int) $journalId
711  );
712 
713  for ($i=1; !$result->EOF; $i++) {
714  list($issueId) = $result->fields;
715  $resultB = $this->retrieve('SELECT issue_id FROM custom_issue_orders WHERE journal_id=? AND issue_id=?', array($journalId, $issueId));
716  if (!$resultB->EOF) {
717  $this->update(
718  'UPDATE custom_issue_orders SET seq = ? WHERE issue_id = ? AND journal_id = ?',
719  array($i, $issueId, $journalId)
720  );
721  } else {
722  // This entry is missing. Create it.
723  $this->insertCustomIssueOrder($journalId, $issueId, $i);
724  }
725  $resultB->Close();
726  $result->MoveNext();
727  }
728  $result->Close();
729  }
730 
736  function customIssueOrderingExists($journalId) {
737  $result = $this->retrieve(
738  'SELECT COUNT(*) FROM custom_issue_orders WHERE journal_id = ?',
739  (int) $journalId
740  );
741  $returner = isset($result->fields[0]) && $result->fields[0] == 0 ? false : true;
742  $result->Close();
743  return $returner;
744  }
745 
752  function getCustomIssueOrder($journalId, $issueId) {
753  $result = $this->retrieve(
754  'SELECT seq FROM custom_issue_orders WHERE journal_id = ? AND issue_id = ?',
755  array((int) $journalId, (int) $issueId)
756  );
757 
758  $returner = null;
759  if (!$result->EOF) {
760  list($returner) = $result->fields;
761  }
762  $result->Close();
763  return $returner;
764  }
765 
771  function setDefaultCustomIssueOrders($journalId) {
772  $publishedIssues = $this->getPublishedIssues($journalId);
773  for ($i=1; $issue = $publishedIssues->next(); $i++) {
774  $this->insertCustomIssueOrder($journalId, $issue->getId(), $i);
775  }
776  }
777 
784  function insertCustomIssueOrder($journalId, $issueId, $seq) {
785  $this->update(
786  'INSERT INTO custom_issue_orders (issue_id, journal_id, seq) VALUES (?, ?, ?)',
787  array(
788  (int) $issueId,
789  (int) $journalId,
790  $seq
791  )
792  );
793  }
794 
801  function moveCustomIssueOrder($journalId, $issueId, $newPos) {
802  $result = $this->retrieve('SELECT issue_id FROM custom_issue_orders WHERE journal_id=? AND issue_id=?', array((int) $journalId, (int) $issueId));
803  if (!$result->EOF) {
804  $this->update(
805  'UPDATE custom_issue_orders SET seq = ? WHERE journal_id = ? AND issue_id = ?',
806  array($newPos, (int) $journalId, (int) $issueId)
807  );
808  } else {
809  // This entry is missing. Create it.
810  $this->insertCustomIssueOrder($journalId, $issueId, $newPos);
811  }
812  $result->Close();
813  }
814 
818  function pubIdExists($pubIdType, $pubId, $excludePubObjectId, $contextId) {
819  $result = $this->retrieve(
820  'SELECT COUNT(*)
821  FROM issue_settings ist
822  INNER JOIN issues i ON ist.issue_id = i.issue_id
823  WHERE ist.setting_name = ? AND ist.setting_value = ? AND i.issue_id <> ? AND i.journal_id = ?',
824  array(
825  'pub-id::'.$pubIdType,
826  $pubId,
827  (int) $excludePubObjectId,
828  (int) $contextId
829  )
830  );
831  $returner = $result->fields[0] ? true : false;
832  $result->Close();
833  return $returner;
834  }
835 
839  function changePubId($pubObjectId, $pubIdType, $pubId) {
840  $idFields = array(
841  'issue_id', 'locale', 'setting_name'
842  );
843  $updateArray = array(
844  'issue_id' => (int) $pubObjectId,
845  'locale' => '',
846  'setting_name' => 'pub-id::'.$pubIdType,
847  'setting_type' => 'string',
848  'setting_value' => (string)$pubId
849  );
850  $this->replace('issue_settings', $updateArray, $idFields);
851  $this->flushCache();
852  }
853 
857  function deletePubId($pubObjectId, $pubIdType) {
858  $settingName = 'pub-id::'.$pubIdType;
859  $this->update(
860  'DELETE FROM issue_settings WHERE setting_name = ? AND issue_id = ?',
861  array(
862  $settingName,
863  (int)$pubObjectId
864  )
865  );
866  $this->flushCache();
867  }
868 
872  function deleteAllPubIds($contextId, $pubIdType) {
873  $settingName = 'pub-id::'.$pubIdType;
874 
875  // issues
876  $issues = $this->getIssues($contextId);
877  while ($issue = $issues->next()) {
878  $this->update(
879  'DELETE FROM issue_settings WHERE setting_name = ? AND issue_id = ?',
880  array(
881  $settingName,
882  (int)$issue->getId()
883  )
884  );
885  }
886  $this->flushCache();
887  }
888 
892  function flushCache() {
893  $this->_getCache('issues')->flush();
894  $this->_getCache('current')->flush();
895  }
896 }
897 
898 
IssueDAO\changePubId
changePubId($pubObjectId, $pubIdType, $pubId)
Definition: IssueDAO.inc.php:839
PKPPubIdPluginDAO
Interface that DAOs would need to implement in order for pub ID support to be added.
Definition: PKPPubIdPluginDAO.inc.php:16
IssueDAO\_getCache
_getCache($cacheId)
Definition: IssueDAO.inc.php:45
DAOResultFactory
Wrapper around ADORecordSet providing "factory" features for generating objects from DAOs.
Definition: DAOResultFactory.inc.php:21
IssueDAO\getByPubId
getByPubId($pubIdType, $pubId, $journalId=null, $useCache=false)
Definition: IssueDAO.inc.php:95
IssueDAO\insertCustomIssueOrder
insertCustomIssueOrder($journalId, $issueId, $seq)
Definition: IssueDAO.inc.php:784
IssueDAO\getLocaleFieldNames
getLocaleFieldNames()
Definition: IssueDAO.inc.php:341
IssueDAO\getIssues
getIssues($journalId, $rangeInfo=null)
Definition: IssueDAO.inc.php:587
IssueFileManager
Class defining operations for issue file management.
Definition: IssueFileManager.inc.php:22
IssueDAO\getCustomIssueOrder
getCustomIssueOrder($journalId, $issueId)
Definition: IssueDAO.inc.php:752
DAO\retrieveRange
& retrieveRange($sql, $params=false, $dbResultRange=null, $callHooks=true)
Definition: DAO.inc.php:176
IssueDAO\updateCurrent
updateCurrent($journalId, $issue=null)
Definition: IssueDAO.inc.php:277
IssueDAO\getPublishedIssues
getPublishedIssues($journalId, $rangeInfo=null)
Definition: IssueDAO.inc.php:602
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
IssueDAO\pubIdExists
pubIdExists($pubIdType, $pubId, $excludePubObjectId, $contextId)
Definition: IssueDAO.inc.php:818
IssueDAO\_returnIssueFromRow
_returnIssueFromRow($row)
Definition: IssueDAO.inc.php:331
IssueDAO\newDataObject
newDataObject()
Definition: IssueDAO.inc.php:291
IssueDAO\getBySetting
getBySetting($settingName, $settingValue, $journalId=null)
Definition: IssueDAO.inc.php:119
DAO\retrieve
& retrieve($sql, $params=false, $callHooks=true)
Definition: DAO.inc.php:85
IssueDAO\getPublishedIssuesByNumber
getPublishedIssuesByNumber($journalId, $volume=null, $number=null, $year=null)
Definition: IssueDAO.inc.php:155
IssueDAO\getById
getById($issueId, $journalId=null, $useCache=false)
Definition: IssueDAO.inc.php:61
IssueDAO\_cacheMiss
_cacheMiss($cache, $id)
Definition: IssueDAO.inc.php:30
IssueDAO\getNumArticles
getNumArticles($issueId)
Definition: IssueDAO.inc.php:675
IssueDAO\customIssueOrderingExists
customIssueOrderingExists($journalId)
Definition: IssueDAO.inc.php:736
IssueDAO\issueIdExists
issueIdExists($issueId, $journalId)
Definition: IssueDAO.inc.php:541
IssueDAO\issueExists
issueExists($journalId, $volume, $number, $year, $issueId)
Definition: IssueDAO.inc.php:421
PublicFileManager
Wrapper class for uploading files to a site/journal's public directory.
Definition: PublicFileManager.inc.php:18
DAO\datetimeFromDB
datetimeFromDB($dt)
Definition: DAO.inc.php:319
CacheManager\getManager
static getManager()
Definition: CacheManager.inc.php:27
IssueDAO\moveCustomIssueOrder
moveCustomIssueOrder($journalId, $issueId, $newPos)
Definition: IssueDAO.inc.php:801
IssueDAO\getExportable
getExportable($contextId, $pubIdType=null, $pubIdSettingName=null, $pubIdSettingValue=null, $rangeInfo=null)
Definition: IssueDAO.inc.php:636
IssueDAO\getInsertId
getInsertId()
Definition: IssueDAO.inc.php:408
IssueDAO\_fromRow
_fromRow($row)
Definition: IssueDAO.inc.php:300
DAO\update
update($sql, $params=false, $callHooks=true, $dieOnError=true)
Definition: DAO.inc.php:214
IssueDAO\getAdditionalFieldNames
getAdditionalFieldNames()
Definition: IssueDAO.inc.php:350
DAO\datetimeToDB
datetimeToDB($dt)
Definition: DAO.inc.php:299
IssueDAO\deleteByJournalId
deleteByJournalId($journalId)
Definition: IssueDAO.inc.php:528
DAO\_getInsertId
_getInsertId($table='', $id='')
Definition: DAO.inc.php:255
IssueDAO\resequenceCustomIssueOrders
resequenceCustomIssueOrders($journalId)
Definition: IssueDAO.inc.php:703
IssueDAO\updateLocaleFields
updateLocaleFields(&$issue)
Definition: IssueDAO.inc.php:361
IssueDAO\deleteObject
deleteObject($issue)
Definition: IssueDAO.inc.php:486
DAO\nullOrInt
nullOrInt($value)
Definition: DAO.inc.php:444
IssueDAO\insertObject
insertObject($issue)
Definition: IssueDAO.inc.php:372
IssueDAO\setDefaultCustomIssueOrders
setDefaultCustomIssueOrders($journalId)
Definition: IssueDAO.inc.php:771
DAO\getDataObjectSettings
getDataObjectSettings($tableName, $idFieldName, $idFieldValue, $dataObject)
Definition: DAO.inc.php:582
IssueDAO\getBySubmissionId
getBySubmissionId($articleId, $journalId=null)
Definition: IssueDAO.inc.php:555
IssueDAO\deletePubId
deletePubId($pubObjectId, $pubIdType)
Definition: IssueDAO.inc.php:857
IssueDAO\getByBestId
getByBestId($issueId, $contextId=null, $useCache=false)
Definition: IssueDAO.inc.php:227
DAO\replace
replace($table, $arrFields, $keyCols)
Definition: DAO.inc.php:243
IssueDAO\$caches
$caches
Definition: IssueDAO.inc.php:22
IssueDAO\getUnpublishedIssues
getUnpublishedIssues($journalId, $rangeInfo=null)
Definition: IssueDAO.inc.php:617
Issue
Class for Issue.
Definition: Issue.inc.php:25
IssueDAO\deleteCustomIssueOrdering
deleteCustomIssueOrdering($journalId)
Definition: IssueDAO.inc.php:693
DAO\updateDataObjectSettings
updateDataObjectSettings($tableName, $dataObject, $idArray)
Definition: DAO.inc.php:488
IssueDAO\getCurrent
getCurrent($journalId, $useCache=false)
Definition: IssueDAO.inc.php:255
IssueDAO\deleteAllPubIds
deleteAllPubIds($contextId, $pubIdType)
Definition: IssueDAO.inc.php:872
HookRegistry\call
static call($hookName, $args=null)
Definition: HookRegistry.inc.php:86
IssueDAO
Operations for retrieving and modifying Issue objects.
Definition: IssueDAO.inc.php:21
IssueDAO\getIssuesByIdentification
getIssuesByIdentification($journalId, $volume=null, $number=null, $year=null, $titles=array())
Definition: IssueDAO.inc.php:185
DAO
Operations for retrieving and modifying objects from a database.
Definition: DAO.inc.php:31
IssueDAO\flushCache
flushCache()
Definition: IssueDAO.inc.php:892
IssueDAO\updateObject
updateObject($issue)
Definition: IssueDAO.inc.php:435