Open Monograph Press  3.3.0
DataObjectTombstoneDAO.inc.php
1 <?php
2 
17 import('lib.pkp.classes.tombstone.DataObjectTombstone');
18 
19 class DataObjectTombstoneDAO extends DAO {
20 
25  function newDataObject() {
26  return new DataObjectTombstone();
27  }
28 
36  function getById($tombstoneId, $assocType = null, $assocId = null) {
37  $params = array((int) $tombstoneId);
38  if ($assocId !== null && $assocType !== null) {
39  $params[] = (int) $assocType;
40  $params[] = (int) $assocId;
41  }
42  $result = $this->retrieve(
43  'SELECT DISTINCT * ' . $this->_getSelectTombstoneSql($assocType, $assocId), $params);
44 
45  $returner = null;
46  if ($result->RecordCount() != 0) {
47  $returner = $this->_fromRow($result->GetRowAssoc(false));
48  }
49 
50  $result->Close();
51  return $returner;
52  }
53 
59  function &getByDataObjectId($dataObjectId) {
60  $result = $this->retrieve(
61  'SELECT * FROM data_object_tombstones WHERE data_object_id = ?', (int) $dataObjectId
62  );
63 
64  $dataObjectTombstone = $this->_fromRow($result->GetRowAssoc(false));
65 
66  $result->Close();
67  return $dataObjectTombstone;
68  }
69 
75  function _fromRow($row) {
76  $dataObjectTombstone = $this->newDataObject();
77  $dataObjectTombstone->setId($row['tombstone_id']);
78  $dataObjectTombstone->setDataObjectId($row['data_object_id']);
79  $dataObjectTombstone->setDateDeleted($this->datetimeFromDB($row['date_deleted']));
80  $dataObjectTombstone->setSetSpec($row['set_spec']);
81  $dataObjectTombstone->setSetName($row['set_name']);
82  $dataObjectTombstone->setOAIIdentifier($row['oai_identifier']);
83 
84  $OAISetObjectsIds = $this->getOAISetObjectsIds($dataObjectTombstone->getId());
85  $dataObjectTombstone->setOAISetObjectsIds($OAISetObjectsIds);
86 
87  return $dataObjectTombstone;
88  }
89 
97  function deleteById($tombstoneId, $assocType = null, $assocId = null) {
98  $tombstone = $this->getById($tombstoneId, $assocType, $assocId);
99  if (!$tombstone) return false; // Did not exist
100 
101  assert(is_a($tombstone, 'DataObjectTombstone'));
102 
103  $this->update(
104  'DELETE FROM data_object_tombstones WHERE tombstone_id = ?',
105  (int) $tombstoneId
106  );
107  if ($this->getAffectedRows()) {
108  $dataObjectTombstoneSettingsDao = DAORegistry::getDAO('DataObjectTombstoneSettingsDAO'); /* @var $dataObjectTombstoneSettingsDao DataObjectTombstoneSettingsDAO */
109  $settingsDeleted = $dataObjectTombstoneSettingsDao->deleteSettings($tombstoneId);
110  $setObjectsDeleted = $this->deleteOAISetObjects($tombstoneId);
111  if ($settingsDeleted && $setObjectsDeleted) {
112  return true;
113  }
114  }
115  return false;
116  }
117 
123  function deleteByDataObjectId($dataObjectId) {
124  $dataObjectTombstone =& $this->getByDataObjectId($dataObjectId);
125  return $this->deleteById($dataObjectTombstone->getId());
126  }
127 
133  function insertObject(&$dataObjectTombstone) {
134  $this->update(
135  sprintf('INSERT INTO data_object_tombstones
136  (data_object_id, date_deleted, set_spec, set_name, oai_identifier)
137  VALUES
138  (?, %s, ?, ?, ?)',
139  $this->datetimeToDB(date('Y-m-d H:i:s'))
140  ),
141  array(
142  (int) $dataObjectTombstone->getDataObjectId(),
143  $dataObjectTombstone->getSetSpec(),
144  $dataObjectTombstone->getSetName(),
145  $dataObjectTombstone->getOAIIdentifier()
146  )
147  );
148 
149  $dataObjectTombstone->setId($this->getInsertId());
150  $this->insertOAISetObjects($dataObjectTombstone);
151 
152  return $dataObjectTombstone->getId();
153  }
154 
160  function updateObject(&$dataObjectTombstone) {
161  $returner = $this->update(
162  sprintf('UPDATE data_object_tombstones SET
163  data_object_id = ?,
164  date_deleted = %s,
165  set_spec = ?,
166  set_name = ?,
167  oai_identifier = ?
168  WHERE tombstone_id = ?',
169  $this->datetimeToDB(date('Y-m-d H:i:s'))
170  ),
171  array(
172  (int) $publicationFormatTombstone->getDataObjectId(),
173  $publicationFormatTombstone->getSetSpec(),
174  $publicationFormatTombstone->getSetName(),
175  $publicationFormatTombstone->getOAIIdentifier(),
176  (int) $publicationFormatTombstone->getId()
177  )
178  );
179 
180  $this->updateOAISetObjects($dataObjectTombstone);
181 
182  return $returner;
183  }
184 
189  function getInsertId() {
190  return $this->_getInsertId('data_object_tombstones', 'tombstone_id');
191  }
192 
200  function &getSets($assocType, $assocId) {
201  $result = $this->retrieve(
202  'SELECT DISTINCT dot.set_spec, dot.set_name FROM data_object_tombstones dot
203  LEFT JOIN data_object_tombstone_oai_set_objects oso ON (dot.tombstone_id = oso.tombstone_id)
204  WHERE oso.assoc_type = ? AND oso.assoc_id = ?',
205  array((int) $assocType, (int) $assocId)
206  );
207 
208  $returner = array();
209  while (!$result->EOF) {
210  $returner[$result->fields[0]] = $result->fields[1];
211  $result->MoveNext();
212  }
213 
214  $result->Close();
215  return $returner;
216  }
217 
224  function getOAISetObjectsIds($tombstoneId) {
225  $result = $this->retrieve(
226  'SELECT * FROM data_object_tombstone_oai_set_objects WHERE tombstone_id = ?',
227  (int) $tombstoneId
228  );
229 
230  $oaiSetObjectsIds = array();
231  while ($row = $result->FetchRow()) {
232  $oaiSetObjectsIds[$row['assoc_type']] = $row['assoc_id'];
233  }
234 
235  $result->Close();
236  return $oaiSetObjectsIds;
237  }
238 
243  function deleteOAISetObjects($tombstoneId) {
244  $this->update(
245  'DELETE FROM data_object_tombstone_oai_set_objects WHERE tombstone_id = ?',
246  (int) $tombstoneId
247  );
248 
249  return $this->getAffectedRows();
250  }
251 
256  function insertOAISetObjects($dataObjectTombstone) {
257  foreach ($dataObjectTombstone->getOAISetObjectsIds() as $assocType => $assocId) {
258  $this->update('INSERT INTO data_object_tombstone_oai_set_objects
259  (tombstone_id, assoc_type, assoc_id)
260  VALUES
261  (?, ?, ?)',
262  array(
263  (int) $dataObjectTombstone->getId(),
264  (int) $assocType,
265  (int) $assocId
266  )
267  );
268  }
269  }
270 
276  function updateOAISetObjects($dataObjectTombstone) {
277  foreach ($dataObjectTombstone->getOAISetObjectsIds() as $assocType => $assocId) {
278  $this->update('UPDATE data_object_tombstone_oai_set_objects SET
279  assoc_type = ?,
280  assoc_id = ?
281  WHERE tombstone_id = ?',
282  array(
283  (int) $assocType,
284  (int) $assocId,
285  (int) $dataObjectTombstone->getId()
286  )
287  );
288  }
289  }
290 
291 
292  //
293  // Private helper methods.
294  //
295 
301  function _getSelectTombstoneSql($assocType, $assocId) {
302  return 'FROM data_object_tombstones dot
303  LEFT JOIN data_object_tombstone_oai_set_objects oso ON (dot.tombstone_id = oso.tombstone_id)
304  WHERE dot.tombstone_id = ?' .
305  (isset($assocId) && isset($assocType) ? 'AND oso.assoc_type = ? AND oso.assoc_id = ?' : '');
306  }
307 }
308 
309 
DataObjectTombstoneDAO\_fromRow
_fromRow($row)
Definition: DataObjectTombstoneDAO.inc.php:75
DataObjectTombstoneDAO\getInsertId
getInsertId()
Definition: DataObjectTombstoneDAO.inc.php:189
DataObjectTombstoneDAO\deleteById
deleteById($tombstoneId, $assocType=null, $assocId=null)
Definition: DataObjectTombstoneDAO.inc.php:97
DataObjectTombstoneDAO\insertOAISetObjects
insertOAISetObjects($dataObjectTombstone)
Definition: DataObjectTombstoneDAO.inc.php:256
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
DataObjectTombstoneDAO\updateObject
updateObject(&$dataObjectTombstone)
Definition: DataObjectTombstoneDAO.inc.php:160
DAO\getAffectedRows
getAffectedRows()
Definition: DAO.inc.php:264
DataObjectTombstoneDAO\newDataObject
newDataObject()
Definition: DataObjectTombstoneDAO.inc.php:25
DAO\retrieve
& retrieve($sql, $params=false, $callHooks=true)
Definition: DAO.inc.php:85
DataObjectTombstoneDAO\_getSelectTombstoneSql
_getSelectTombstoneSql($assocType, $assocId)
Definition: DataObjectTombstoneDAO.inc.php:301
DataObjectTombstoneDAO\deleteOAISetObjects
deleteOAISetObjects($tombstoneId)
Definition: DataObjectTombstoneDAO.inc.php:243
DAO\datetimeFromDB
datetimeFromDB($dt)
Definition: DAO.inc.php:319
DataObjectTombstoneDAO\getOAISetObjectsIds
getOAISetObjectsIds($tombstoneId)
Definition: DataObjectTombstoneDAO.inc.php:224
DataObjectTombstoneDAO
Base class for retrieving and modifying DataObjectTombstone objects.
Definition: DataObjectTombstoneDAO.inc.php:19
DataObjectTombstoneDAO\getByDataObjectId
& getByDataObjectId($dataObjectId)
Definition: DataObjectTombstoneDAO.inc.php:59
DataObjectTombstoneDAO\updateOAISetObjects
updateOAISetObjects($dataObjectTombstone)
Definition: DataObjectTombstoneDAO.inc.php:276
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
DataObjectTombstoneDAO\getSets
& getSets($assocType, $assocId)
Definition: DataObjectTombstoneDAO.inc.php:200
DataObjectTombstoneDAO\deleteByDataObjectId
deleteByDataObjectId($dataObjectId)
Definition: DataObjectTombstoneDAO.inc.php:123
DataObjectTombstone
Base class for data object tombstones.
Definition: DataObjectTombstone.inc.php:16
DataObjectTombstoneDAO\getById
getById($tombstoneId, $assocType=null, $assocId=null)
Definition: DataObjectTombstoneDAO.inc.php:36
DAO
Operations for retrieving and modifying objects from a database.
Definition: DAO.inc.php:31
DataObjectTombstoneDAO\insertObject
insertObject(&$dataObjectTombstone)
Definition: DataObjectTombstoneDAO.inc.php:133