Open Journal Systems  3.3.0
DepositObjectDAO.inc.php
1 <?php
2 
14 import('lib.pkp.classes.db.DAO');
15 import('lib.pkp.classes.submission.PKPSubmission'); // STATUS_PUBLISHED constant
16 
17 class DepositObjectDAO extends DAO {
24  public function getById($journalId, $depositObjectId) {
25  $result = $this->retrieve(
26  'SELECT * FROM pln_deposit_objects WHERE journal_id = ? and deposit_object_id = ?',
27  array(
28  (int) $journalId,
29  (int) $depositObjectId
30  )
31  );
32 
33  $returner = null;
34  if ($result->RecordCount() != 0) {
35  $returner = $this->_fromRow($result->GetRowAssoc(false));
36  }
37 
38  $result->Close();
39 
40  return $returner;
41  }
42 
49  public function getByDepositId($journalId, $depositId) {
50  $result = $this->retrieve(
51  'SELECT * FROM pln_deposit_objects WHERE journal_id = ? AND deposit_id = ?',
52  array (
53  (int) $journalId,
54  (int) $depositId
55  )
56  );
57 
58  return new DAOResultFactory($result, $this, '_fromRow');
59  }
60 
66  public function getNew($journalId) {
67  $result = $this->retrieve(
68  'SELECT * FROM pln_deposit_objects WHERE journal_id = ? AND deposit_id = 0',
69  (int) $journalId
70  );
71 
72  return new DAOResultFactory($result, $this, '_fromRow');
73  }
74 
80  public function markHavingUpdatedContent($journalId, $objectType) {
81  $depositDao = DAORegistry::getDAO('DepositDAO');
82 
83  switch ($objectType) {
84  case 'PublishedArticle': // Legacy (OJS pre-3.2)
85  case PLN_PLUGIN_DEPOSIT_OBJECT_SUBMISSION:
86  $result = $this->retrieve(
87  'SELECT pdo.deposit_object_id, a.last_modified FROM pln_deposit_objects pdo
88  JOIN submissions s ON pdo.object_id = s.submission_id
89  JOIN publications p ON p.publication_id = s.current_publication_id
90  WHERE s.context_id = ? AND pdo.journal_id = ? AND pdo.date_modified < p.last_modified',
91  array (
92  (int) $journalId,
93  (int) $journalId
94  )
95  );
96  while (!$result->EOF) {
97  $row = $result->GetRowAssoc(false);
98  $depositObject = $this->getById($journalId, $row['deposit_object_id']);
99  $deposit = $depositDao->getById($depositObject->getDepositId());
100  if($deposit->getSentStatus() || !$deposit->getTransferredStatus()) {
101  // only update a deposit after it has been synced in LOCKSS.
102  $depositObject->setDateModified($row['last_modified']);
103  $this->updateObject($depositObject);
104  $deposit->setNewStatus();
105  $deposit->setLockssAgreementStatus(true); // this is an update.
106  $depositDao->updateObject($deposit);
107  }
108  $result->MoveNext();
109  }
110  $result->Close();
111  break;
112  case PLN_PLUGIN_DEPOSIT_OBJECT_ISSUE:
113  $result = $this->retrieve(
114  'SELECT pdo.deposit_object_id, MAX(i.last_modified) as issue_modified, MAX(p.last_modified) as article_modified
115  FROM issues i
116  JOIN pln_deposit_objects pdo ON pdo.object_id = i.issue_id
117  JOIN publication_settings ps ON (CAST(i.issue_id AS CHAR) = ps.setting_value AND ps.setting_name = ?)
118  JOIN publications p ON (p.publication_id = ps.publication_id AND p.status = ?)
119  JOIN submissions s ON s.current_publication_id = p.publication_id
120  WHERE (pdo.date_modified < p.last_modified OR pdo.date_modified < i.last_modified)
121  AND (pdo.journal_id = ?)
122  GROUP BY pdo.deposit_object_id',
123  array(
124  'issueId',
125  STATUS_PUBLISHED,
126  (int) $journalId,
127  )
128  );
129  while (!$result->EOF) {
130  $row = $result->GetRowAssoc(false);
131  $depositObject = $this->getById($journalId, $row['deposit_object_id']);
132  $deposit = $depositDao->getById($depositObject->getDepositId());
133  if($deposit->getSentStatus() || !$deposit->getTransferredStatus()) {
134  // only update a deposit after it has been synced in LOCKSS.
135  if ($row['issue_modified'] > $row['article_modified']) {
136  $depositObject->setDateModified($row['issue_modified']);
137  } else {
138  $depositObject->setDateModified($row['article_modified']);
139  }
140 
141  $this->updateObject($depositObject);
142  $deposit->setNewStatus();
143  $deposit->setLockssAgreementStatus(true); // this is an update.
144  $depositDao->updateObject($deposit);
145  }
146  $result->MoveNext();
147  }
148  $result->Close();
149  break;
150  default: assert(false);
151  }
152  }
153 
161  public function createNew($journalId, $objectType) {
162  $objects = array();
163 
164  switch ($objectType) {
165  case 'PublishedArticle': // Legacy (OJS pre-3.2)
166  case PLN_PLUGIN_DEPOSIT_OBJECT_SUBMISSION:
167  $submissionDao = DAORegistry::getDAO('SubmissionDAO'); // Constants
168  $result = $this->retrieve(
169  'SELECT p.submission_id FROM publications p
170  JOIN submissions s ON s.current_publication_id = p.publication_id
171  LEFT JOIN pln_deposit_objects pdo ON s.submission_id = pdo.object_id
172  WHERE s.journal_id = ? AND pdo.object_id is null AND p.status = ?',
173  array(
174  (int) $journalId,
175  STATUS_PUBLISHED,
176  )
177  );
178  while (!$result->EOF) {
179  $row = $result->GetRowAssoc(false);
180  $objects[] = $submissionDao->getById($row['submission_id']);
181  $result->MoveNext();
182  }
183  $result->Close();
184  break;
185  case PLN_PLUGIN_DEPOSIT_OBJECT_ISSUE:
186  $issueDao = DAORegistry::getDAO('IssueDAO');
187  $result = $this->retrieve(
188  'SELECT i.issue_id
189  FROM issues i
190  LEFT JOIN pln_deposit_objects pdo ON pdo.object_id = i.issue_id
191  WHERE i.journal_id = ?
192  AND i.published = 1
193  AND pdo.object_id is null',
194  (int) $journalId
195  );
196  while (!$result->EOF) {
197  $row = $result->GetRowAssoc(false);
198  $objects[] = $issueDao->getById($row['issue_id']);
199  $result->MoveNext();
200  }
201  $result->Close();
202  break;
203  default: assert(false);
204  }
205 
206  $depositObjects = array();
207  foreach($objects as $object) {
208  $depositObject = $this->newDataObject();
209  $depositObject->setContent($object);
210  $depositObject->setJournalId($journalId);
211  $this->insertObject($depositObject);
212  $depositObjects[] = $depositObject;
213  }
214 
215  return $depositObjects;
216  }
217 
223  public function insertObject($depositObject) {
224  $this->update(
225  sprintf('
226  INSERT INTO pln_deposit_objects
227  (journal_id,
228  object_id,
229  object_type,
230  deposit_id,
231  date_created,
232  date_modified)
233  VALUES
234  (?, ?, ?, ?, NOW(), %s)',
235  $this->datetimeToDB($depositObject->getDateModified())
236  ),
237  array(
238  (int) $depositObject->getJournalId(),
239  (int) $depositObject->getObjectId(),
240  $depositObject->getObjectType(),
241  (int)$depositObject->getDepositId()
242  )
243  );
244 
245  $depositObject->setId($this->getInsertId());
246  return $depositObject->getId();
247  }
248 
253  public function updateObject($depositObject) {
254  $this->update(
255  sprintf('
256  UPDATE pln_deposit_objects SET
257  journal_id = ?,
258  object_type = ?,
259  object_id = ?,
260  deposit_id = ?,
261  date_created = %s,
262  date_modified = NOW()
263  WHERE deposit_object_id = ?',
264  $this->datetimeToDB($depositObject->getDateCreated())
265  ),
266  array(
267  (int) $depositObject->getJournalId(),
268  $depositObject->getObjectType(),
269  (int) $depositObject->getObjectId(),
270  (int) $depositObject->getDepositId(),
271  (int) $depositObject->getId()
272  )
273  );
274  }
275 
280  public function deleteObject($depositObject) {
281  $this->update(
282  'DELETE from pln_deposit_objects WHERE deposit_object_id = ?',
283  (int) $depositObject->getId()
284  );
285  }
286 
291  public function getInsertId() {
292  return $this->_getInsertId('pln_deposit_objects', 'object_id');
293  }
294 
299  public function newDataObject() {
300  return new DepositObject();
301  }
302 
308  public function _fromRow($row) {
309  $depositObject = $this->newDataObject();
310  $depositObject->setId($row['deposit_object_id']);
311  $depositObject->setJournalId($row['journal_id']);
312  $depositObject->setObjectType($row['object_type']);
313  $depositObject->setObjectId($row['object_id']);
314  $depositObject->setDepositId($row['deposit_id']);
315  $depositObject->setDateCreated($this->datetimeFromDB($row['date_created']));
316  $depositObject->setDateModified($this->datetimeFromDB($row['date_modified']));
317 
318  HookRegistry::call('DepositObjectDAO::_fromRow', array(&$depositObject, &$row));
319 
320  return $depositObject;
321  }
322 }
DepositObjectDAO\_fromRow
_fromRow($row)
Definition: DepositObjectDAO.inc.php:308
DAOResultFactory
Wrapper around ADORecordSet providing "factory" features for generating objects from DAOs.
Definition: DAOResultFactory.inc.php:21
DepositObjectDAO\deleteObject
deleteObject($depositObject)
Definition: DepositObjectDAO.inc.php:280
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
DepositObjectDAO\updateObject
updateObject($depositObject)
Definition: DepositObjectDAO.inc.php:253
DepositObjectDAO\createNew
createNew($journalId, $objectType)
Definition: DepositObjectDAO.inc.php:161
DepositObjectDAO\insertObject
insertObject($depositObject)
Definition: DepositObjectDAO.inc.php:223
DAO\retrieve
& retrieve($sql, $params=false, $callHooks=true)
Definition: DAO.inc.php:85
DepositObjectDAO\markHavingUpdatedContent
markHavingUpdatedContent($journalId, $objectType)
Definition: DepositObjectDAO.inc.php:80
DAO\datetimeFromDB
datetimeFromDB($dt)
Definition: DAO.inc.php:319
DepositObject
Basic class describing a deposit stored in the PLN.
Definition: DepositObject.inc.php:14
DepositObjectDAO
Operations for adding a PLN deposit object.
Definition: DepositObjectDAO.inc.php:17
DAO\update
update($sql, $params=false, $callHooks=true, $dieOnError=true)
Definition: DAO.inc.php:214
DAO\datetimeToDB
datetimeToDB($dt)
Definition: DAO.inc.php:299
DAO\_getInsertId
_getInsertId($table='', $id='')
Definition: DAO.inc.php:255
DepositObjectDAO\getById
getById($journalId, $depositObjectId)
Definition: DepositObjectDAO.inc.php:24
DepositObjectDAO\newDataObject
newDataObject()
Definition: DepositObjectDAO.inc.php:299
DepositObjectDAO\getNew
getNew($journalId)
Definition: DepositObjectDAO.inc.php:66
DepositObjectDAO\getByDepositId
getByDepositId($journalId, $depositId)
Definition: DepositObjectDAO.inc.php:49
HookRegistry\call
static call($hookName, $args=null)
Definition: HookRegistry.inc.php:86
DAO
Operations for retrieving and modifying objects from a database.
Definition: DAO.inc.php:31
DepositObjectDAO\getInsertId
getInsertId()
Definition: DepositObjectDAO.inc.php:291