Open Journal Systems  3.3.0
CitationDAO.inc.php
1 <?php
2 
17 import('lib.pkp.classes.citation.Citation');
18 
19 class CitationDAO extends DAO {
20 
26  function insertObject($citation) {
27  $seq = $citation->getSequence();
28  if (!(is_numeric($seq) && $seq > 0)) {
29  // Find the latest sequence number
30  $result = $this->retrieve(
31  'SELECT MAX(seq) AS lastseq FROM citations
32  WHERE publication_id = ?',
33  array(
34  (integer)$citation->getData('publicationId'),
35  )
36  );
37 
38  if ($result->RecordCount() != 0) {
39  $row = $result->GetRowAssoc(false);
40  $seq = $row['lastseq'] + 1;
41  } else {
42  $seq = 1;
43  }
44  $citation->setSequence($seq);
45  }
46 
47  $this->update(
48  sprintf('INSERT INTO citations
49  (publication_id, raw_citation, seq)
50  VALUES
51  (?, ?, ?)'),
52  array(
53  (integer)$citation->getData('publicationId'),
54  $citation->getRawCitation(),
55  (integer)$seq
56  )
57  );
58  $citation->setId($this->getInsertId());
59  $this->_updateObjectMetadata($citation, false);
60  return $citation->getId();
61  }
62 
68  function getById($citationId) {
69  $result = $this->retrieve(
70  'SELECT * FROM citations WHERE citation_id = ?', $citationId
71  );
72 
73  $citation = null;
74  if ($result->RecordCount() != 0) {
75  $citation = $this->_fromRow($result->GetRowAssoc(false));
76  }
77  $result->Close();
78 
79  return $citation;
80  }
81 
87  function importCitations($publicationId, $rawCitationList) {
88  assert(is_numeric($publicationId));
89  $publicationId = (int) $publicationId;
90 
91  // Remove existing citations.
92  $this->deleteByPublicationId($publicationId);
93 
94  // Tokenize raw citations
95  import('lib.pkp.classes.citation.CitationListTokenizerFilter');
96  $citationTokenizer = new CitationListTokenizerFilter();
97  $citationStrings = $citationTokenizer->execute($rawCitationList);
98 
99  // Instantiate and persist citations
100  if (is_array($citationStrings)) foreach($citationStrings as $seq => $citationString) {
101  if (!empty(trim($citationString))) {
102  $citation = new Citation($citationString);
103  // Set the publication
104  $citation->setData('publicationId', $publicationId);
105  // Set the counter
106  $citation->setSequence($seq+1);
107  $this->insertObject($citation);
108  }
109  }
110  }
111 
118  function getByPublicationId($publicationId, $rangeInfo = null) {
119  $result = $this->retrieveRange(
120  'SELECT *
121  FROM citations
122  WHERE publication_id = ?
123  ORDER BY seq, citation_id',
124  array((int)$publicationId),
125  $rangeInfo
126  );
127  return new DAOResultFactory($result, $this, '_fromRow', array('id'));
128  }
129 
136  $additionalFields = parent::getAdditionalFieldNames();
137  return $additionalFields;
138  }
139 
144  function updateObject($citation) {
145  $returner = $this->update(
146  'UPDATE citations
147  SET publication_id = ?,
148  raw_citation = ?,
149  seq = ?
150  WHERE citation_id = ?',
151  array(
152  (integer)$citation->getData('publicationId'),
153  $citation->getRawCitation(),
154  (integer)$citation->getSequence(),
155  (integer)$citation->getId()
156  )
157  );
158  $this->_updateObjectMetadata($citation);
159  }
160 
166  function deleteObject($citation) {
167  return $this->deleteById($citation->getId());
168  }
169 
175  function deleteById($citationId) {
176  assert(!empty($citationId));
177 
178  // Delete citation
179  $params = array((int)$citationId);
180  $this->update('DELETE FROM citation_settings WHERE citation_id = ?', $params);
181  return $this->update('DELETE FROM citations WHERE citation_id = ?', $params);
182  }
183 
189  function deleteByPublicationId($publicationId) {
190  $citations = $this->getByPublicationId($publicationId);
191  while ($citation = $citations->next()) {
192  $this->deleteById($citation->getId());
193  }
194  return true;
195  }
196 
197  //
198  // Protected helper methods
199  //
204  function getInsertId() {
205  return parent::_getInsertId('citations', 'citation_id');
206  }
207 
208 
209  //
210  // Private helper methods
211  //
216  function _newDataObject() {
217  return new Citation();
218  }
219 
226  function _fromRow($row) {
227  $citation = $this->_newDataObject();
228  $citation->setId((integer)$row['citation_id']);
229  $citation->setData('publicationId', (integer)$row['publication_id']);
230  $citation->setRawCitation($row['raw_citation']);
231  $citation->setSequence((integer)$row['seq']);
232 
233  $this->getDataObjectSettings('citation_settings', 'citation_id', $row['citation_id'], $citation);
234 
235  return $citation;
236  }
237 
242  function _updateObjectMetadata($citation) {
243  // Persist citation meta-data
244  $this->updateDataObjectSettings('citation_settings', $citation,
245  array('citation_id' => $citation->getId()));
246  }
247 
248 }
249 
250 
CitationDAO\deleteById
deleteById($citationId)
Definition: CitationDAO.inc.php:175
CitationDAO\insertObject
insertObject($citation)
Definition: CitationDAO.inc.php:26
DAOResultFactory
Wrapper around ADORecordSet providing "factory" features for generating objects from DAOs.
Definition: DAOResultFactory.inc.php:21
DAO\retrieveRange
& retrieveRange($sql, $params=false, $dbResultRange=null, $callHooks=true)
Definition: DAO.inc.php:176
CitationDAO\_fromRow
_fromRow($row)
Definition: CitationDAO.inc.php:226
DAO\retrieve
& retrieve($sql, $params=false, $callHooks=true)
Definition: DAO.inc.php:85
CitationDAO\importCitations
importCitations($publicationId, $rawCitationList)
Definition: CitationDAO.inc.php:87
CitationListTokenizerFilter
Class that takes an unformatted list of citations and returns an array of raw citation strings.
Definition: CitationListTokenizerFilter.inc.php:19
CitationDAO
Operations for retrieving and modifying Citation objects.
Definition: CitationDAO.inc.php:19
Citation
Class representing a citation (bibliographic reference)
Definition: Citation.inc.php:22
CitationDAO\_updateObjectMetadata
_updateObjectMetadata($citation)
Definition: CitationDAO.inc.php:242
DAO\update
update($sql, $params=false, $callHooks=true, $dieOnError=true)
Definition: DAO.inc.php:214
CitationDAO\getByPublicationId
getByPublicationId($publicationId, $rangeInfo=null)
Definition: CitationDAO.inc.php:118
DAO\getDataObjectSettings
getDataObjectSettings($tableName, $idFieldName, $idFieldValue, $dataObject)
Definition: DAO.inc.php:582
CitationDAO\getAdditionalFieldNames
getAdditionalFieldNames()
Definition: CitationDAO.inc.php:135
CitationDAO\updateObject
updateObject($citation)
Definition: CitationDAO.inc.php:144
CitationDAO\getInsertId
getInsertId()
Definition: CitationDAO.inc.php:204
CitationDAO\deleteByPublicationId
deleteByPublicationId($publicationId)
Definition: CitationDAO.inc.php:189
CitationDAO\getById
getById($citationId)
Definition: CitationDAO.inc.php:68
DAO\updateDataObjectSettings
updateDataObjectSettings($tableName, $dataObject, $idArray)
Definition: DAO.inc.php:488
DAO
Operations for retrieving and modifying objects from a database.
Definition: DAO.inc.php:31
CitationDAO\deleteObject
deleteObject($citation)
Definition: CitationDAO.inc.php:166
CitationDAO\_newDataObject
_newDataObject()
Definition: CitationDAO.inc.php:216