Open Monograph Press  3.3.0
PublicationFormatDAO.inc.php
1 <?php
16 import('classes.publicationFormat.PublicationFormat');
17 import('lib.pkp.classes.submission.RepresentationDAO');
18 import('lib.pkp.classes.plugins.PKPPubIdPluginDAO');
19 
24  function getById($representationId, $publicationId = null, $contextId = null) {
25  $params = array((int) $representationId);
26  if ($publicationId) $params[] = (int) $publicationId;
27  if ($contextId) $params[] = (int) $contextId;
28 
29  $result = $this->retrieve(
30  'SELECT pf.*
31  FROM publication_formats pf
32  ' . ($contextId?'
33  JOIN publications p ON (p.publication_id = pf.publicationId)
34  JOIN submissions s ON (s.submission_id=p.submission_id)':'') . '
35  WHERE pf.publication_format_id=?' .
36  ($publicationId?' AND pf.publication_id = ?':'') .
37  ($contextId?' AND s.context_id = ?':''),
38  $params
39  );
40 
41  $returner = null;
42  if ($result->RecordCount() != 0) {
43  $returner = $this->_fromRow($result->GetRowAssoc(false));
44  }
45 
46  $result->Close();
47  return $returner;
48  }
49 
58  function getBySetting($settingName, $settingValue, $publicationId = null, $pressId = null) {
59  $params = array($settingName);
60 
61 
62  $sql = 'SELECT pf.*
63  FROM publication_formats pf ';
64  if ($pressId) {
65  $sql .= 'INNER JOIN publications p ON p.publication_id = pf.publication_id
66  INNER JOIN submissions s ON s.submission_id = p.submission_id ';
67  }
68  if (is_null($settingValue)) {
69  $sql .= 'LEFT JOIN publication_format_settings pfs ON pf.publication_format_id = pfs.publication_format_id AND pfs.setting_name = ?
70  WHERE (pfs.setting_value IS NULL OR pfs.setting_value = \'\')';
71  } else {
72  $params[] = (string) $settingValue;
73  $sql .= 'INNER JOIN publication_format_settings pfs ON pf.publication_format_id = pfs.publication_format_id
74  WHERE pfs.setting_name = ? AND pfs.setting_value = ?';
75  }
76 
77  if ($publicationId) {
78  $params[] = (int) $publicationId;
79  $sql .= ' AND pf.publication_id = ?';
80  }
81 
82  if ($pressId) {
83  $params[] = (int) $pressId;
84  $sql .= ' AND s.context_id = ?';
85  }
86 
87  $orderByContextId = $pressId ? 's.context_id, ' : '';
88  $sql .= ' ORDER BY ' . $orderByContextId . 'pf.seq, pf.publication_format_id';
89  $result = $this->retrieve($sql, $params);
90 
91  $publicationFormats = array();
92  while (!$result->EOF) {
93  $publicationFormats[] = $this->_fromRow($result->GetRowAssoc(false));
94  $result->MoveNext();
95  }
96  $result->Close();
97 
98  return $publicationFormats;
99  }
100 
111  function getByPubId($pubIdType, $pubId, $publicationId = null, $pressId = null) {
112  $publicationFormat = null;
113  if (!empty($pubId)) {
114  $publicationFormats = $this->getBySetting('pub-id::'.$pubIdType, $pubId, $publicationId, $pressId);
115  if (!empty($publicationFormats)) {
116  assert(count($publicationFormats) == 1);
117  $publicationFormat = $publicationFormats[0];
118  }
119  }
120  return $publicationFormat;
121  }
122 
130  function getByBestId($representationId, $publicationId) {
131 
132  $result = $this->retrieve(
133  'SELECT pf.*
134  FROM publication_formats pf
135  WHERE pf.url_path = ?
136  AND pf.publication_id = ?',
137  [
138  $representationId,
139  $publicationId,
140  ]
141  );
142 
143  if ($result->RecordCount() != 0) {
144  $publicationFormat = $this->_fromRow($result->GetRowAssoc(false));
145  } elseif (is_int($representationId) || ctype_digit($representationId)) {
146  $publicationFormat = $this->getById($representationId);
147  }
148  $result->Close();
149 
150  return $publicationFormat ?? null;
151  }
152 
156  function getByPublicationId($publicationId, $contextId = null) {
157  $params = array((int) $publicationId);
158  if ($contextId) $params[] = (int) $contextId;
159 
160  return new DAOResultFactory(
161  $this->retrieve(
162  'SELECT pf.*
163  FROM publication_formats pf ' .
164  ($contextId ?
165  'INNER JOIN publications p ON (pf.publication_id=p.publication_id)
166  INNER JOIN submissions s ON (s.submission_id = p.submission_id) '
167  : '') .
168  'WHERE pf.publication_id=? '
169  . ($contextId?' AND s.context_id = ? ':'')
170  . 'ORDER BY pf.seq',
171  $params
172  ),
173  $this,
174  '_fromRow'
175  );
176  }
177 
183  function getByContextId($pressId) {
184  $params = array((int) $pressId);
185  $result = $this->retrieve(
186  'SELECT pf.*
187  FROM publication_formats pf
188  JOIN publications p ON (p.publication_id = pf.publication_id)
189  JOIN submissions s ON (s.submission_id = p.submission_id)
190  WHERE s.context_id = ?
191  ORDER BY pf.seq',
192  $params
193  );
194 
195  return new DAOResultFactory($result, $this, '_fromRow');
196  }
197 
203  function getApprovedByPublicationId($publicationId) {
204  $params = array((int) $publicationId);
205 
206  $result = $this->retrieve(
207  'SELECT *
208  FROM publication_formats
209  WHERE publication_id = ? AND is_approved=1
210  ORDER BY seq',
211  $params
212  );
213 
214  return new DAOResultFactory($result, $this, '_fromRow');
215  }
216 
221  function deleteById($representationId) {
222  // remove settings, then the association itself.
223  $this->update('DELETE FROM publication_format_settings WHERE publication_format_id = ?', (int) $representationId);
224  return $this->update('DELETE FROM publication_formats WHERE publication_format_id = ?', (int) $representationId);
225  }
226 
231  function updateLocaleFields($publicationFormat) {
233  'publication_format_settings',
234  $publicationFormat,
235  array('publication_format_id' => $publicationFormat->getId())
236  );
237  }
238 
243  function newDataObject() {
244  return new PublicationFormat();
245  }
246 
253  function _fromRow($row, $params = array(), $callHooks = true) {
254  $publicationFormat = $this->newDataObject();
255 
256  // Add the additional Publication Format data
257  $publicationFormat->setIsApproved($row['is_approved']);
258  $publicationFormat->setEntryKey($row['entry_key']);
259  $publicationFormat->setPhysicalFormat($row['physical_format']);
260  $publicationFormat->setSequence((int) $row['seq']);
261  $publicationFormat->setId((int) $row['publication_format_id']);
262  $publicationFormat->setData('publicationId', (int) $row['publication_id']);
263  $publicationFormat->setFileSize($row['file_size']);
264  $publicationFormat->setFrontMatter($row['front_matter']);
265  $publicationFormat->setBackMatter($row['back_matter']);
266  $publicationFormat->setHeight($row['height']);
267  $publicationFormat->setHeightUnitCode($row['height_unit_code']);
268  $publicationFormat->setWidth($row['width']);
269  $publicationFormat->setWidthUnitCode($row['width_unit_code']);
270  $publicationFormat->setThickness($row['thickness']);
271  $publicationFormat->setThicknessUnitCode($row['thickness_unit_code']);
272  $publicationFormat->setWeight($row['weight']);
273  $publicationFormat->setWeightUnitCode($row['weight_unit_code']);
274  $publicationFormat->setProductCompositionCode($row['product_composition_code']);
275  $publicationFormat->setProductFormDetailCode($row['product_form_detail_code']);
276  $publicationFormat->setCountryManufactureCode($row['country_manufacture_code']);
277  $publicationFormat->setImprint($row['imprint']);
278  $publicationFormat->setProductAvailabilityCode($row['product_availability_code']);
279  $publicationFormat->setTechnicalProtectionCode($row['technical_protection_code']);
280  $publicationFormat->setReturnableIndicatorCode($row['returnable_indicator_code']);
281  $publicationFormat->setRemoteURL($row['remote_url']);
282  $publicationFormat->setData('urlPath', $row['url_path']);
283  $publicationFormat->setIsAvailable($row['is_available']);
284 
285  $this->getDataObjectSettings(
286  'publication_format_settings',
287  'publication_format_id',
288  $row['publication_format_id'],
289  $publicationFormat
290  );
291 
292  if ($callHooks) HookRegistry::call('PublicationFormatDAO::_fromRow', array(&$publicationFormat, &$row));
293 
294  return $publicationFormat;
295  }
296 
302  function insertObject($publicationFormat) {
303  $this->update(
304  'INSERT INTO publication_formats
305  (is_approved, entry_key, physical_format, publication_id, seq, file_size, front_matter, back_matter, height, height_unit_code, width, width_unit_code, thickness, thickness_unit_code, weight, weight_unit_code, product_composition_code, product_form_detail_code, country_manufacture_code, imprint, product_availability_code, technical_protection_code, returnable_indicator_code, remote_url, url_path, is_available)
306  VALUES
307  (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)',
308  array(
309  (int) $publicationFormat->getIsApproved(),
310  $publicationFormat->getEntryKey(),
311  (int) $publicationFormat->getPhysicalFormat(),
312  (int) $publicationFormat->getData('publicationId'),
313  (int) $publicationFormat->getSequence(),
314  $publicationFormat->getFileSize(),
315  $publicationFormat->getFrontMatter(),
316  $publicationFormat->getBackMatter(),
317  $publicationFormat->getHeight(),
318  $publicationFormat->getHeightUnitCode(),
319  $publicationFormat->getWidth(),
320  $publicationFormat->getWidthUnitCode(),
321  $publicationFormat->getThickness(),
322  $publicationFormat->getThicknessUnitCode(),
323  $publicationFormat->getWeight(),
324  $publicationFormat->getWeightUnitCode(),
325  $publicationFormat->getProductCompositionCode(),
326  $publicationFormat->getProductFormDetailCode(),
327  $publicationFormat->getCountryManufactureCode(),
328  $publicationFormat->getImprint(),
329  $publicationFormat->getProductAvailabilityCode(),
330  $publicationFormat->getTechnicalProtectionCode(),
331  $publicationFormat->getReturnableIndicatorCode(),
332  $publicationFormat->getRemoteURL(),
333  $publicationFormat->getData('urlPath'),
334  (int) $publicationFormat->getIsAvailable(),
335  )
336  );
337 
338  $publicationFormat->setId($this->_getInsertId('publication_formats', 'publication_format_id'));
339  $this->updateLocaleFields($publicationFormat);
340 
341  return $publicationFormat->getId();
342  }
343 
348  function updateObject($publicationFormat) {
349  $this->update(
350  'UPDATE publication_formats
351  SET is_approved = ?,
352  entry_key = ?,
353  physical_format = ?,
354  seq = ?,
355  file_size = ?,
356  front_matter = ?,
357  back_matter = ?,
358  height = ?,
359  height_unit_code = ?,
360  width = ?,
361  width_unit_code = ?,
362  thickness = ?,
363  thickness_unit_code = ?,
364  weight = ?,
365  weight_unit_code = ?,
366  product_composition_code = ?,
367  product_form_detail_code = ?,
368  country_manufacture_code = ?,
369  imprint = ?,
370  product_availability_code = ?,
371  technical_protection_code = ?,
372  returnable_indicator_code = ?,
373  remote_url = ?,
374  url_path = ?,
375  is_available = ?
376  WHERE publication_format_id = ?',
377  array(
378  (int) $publicationFormat->getIsApproved(),
379  $publicationFormat->getEntryKey(),
380  (int) $publicationFormat->getPhysicalFormat(),
381  (int) $publicationFormat->getSequence(),
382  $publicationFormat->getFileSize(),
383  $publicationFormat->getFrontMatter(),
384  $publicationFormat->getBackMatter(),
385  $publicationFormat->getHeight(),
386  $publicationFormat->getHeightUnitCode(),
387  $publicationFormat->getWidth(),
388  $publicationFormat->getWidthUnitCode(),
389  $publicationFormat->getThickness(),
390  $publicationFormat->getThicknessUnitCode(),
391  $publicationFormat->getWeight(),
392  $publicationFormat->getWeightUnitCode(),
393  $publicationFormat->getProductCompositionCode(),
394  $publicationFormat->getProductFormDetailCode(),
395  $publicationFormat->getCountryManufactureCode(),
396  $publicationFormat->getImprint(),
397  $publicationFormat->getProductAvailabilityCode(),
398  $publicationFormat->getTechnicalProtectionCode(),
399  $publicationFormat->getReturnableIndicatorCode(),
400  $publicationFormat->getRemoteURL(),
401  $publicationFormat->getData('urlPath'),
402  (int) $publicationFormat->getIsAvailable(),
403  (int) $publicationFormat->getId()
404  )
405  );
406 
407  $this->updateLocaleFields($publicationFormat);
408  }
409 
414  function getLocaleFieldNames() {
415  return array('name');
416  }
417 
422  $additionalFields = parent::getAdditionalFieldNames();
423  $additionalFields[] = 'pub-id::publisher-id';
424  return $additionalFields;
425  }
426 
430  function pubIdExists($pubIdType, $pubId, $excludePubObjectId, $contextId) {
431  $result = $this->retrieve(
432  'SELECT COUNT(*)
433  FROM publication_format_settings pft
434  INNER JOIN publication_formats pf ON pft.publication_format_id = pf.publication_format_id
435  INNER JOIN publications p ON p.publication_id = pf.publication_id
436  INNER JOIN submissions s ON p.submission_id = s.submission_id
437  WHERE pft.setting_name = ?
438  AND pft.setting_value = ?
439  AND pf.publication_format_id <> ?
440  AND s.context_id = ?',
441  array(
442  'pub-id::'.$pubIdType,
443  $pubId,
444  (int) $excludePubObjectId,
445  (int) $contextId
446  )
447  );
448  $returner = $result->fields[0] ? true : false;
449  $result->Close();
450  return $returner;
451  }
452 
456  function changePubId($pubObjectId, $pubIdType, $pubId) {
457  $idFields = array(
458  'publication_format_id', 'locale', 'setting_name'
459  );
460  $updateArray = array(
461  'publication_format_id' => (int) $pubObjectId,
462  'locale' => '',
463  'setting_name' => 'pub-id::'.$pubIdType,
464  'setting_type' => 'string',
465  'setting_value' => (string)$pubId
466  );
467  $this->replace('publication_format_settings', $updateArray, $idFields);
468  }
469 
473  function deletePubId($pubObjectId, $pubIdType) {
474  $settingName = 'pub-id::'.$pubIdType;
475  $this->update(
476  'DELETE FROM publication_format_settings WHERE setting_name = ? AND publication_format_id = ?',
477  array(
478  $settingName,
479  (int)$pubObjectId
480  )
481  );
482  $this->flushCache();
483  }
484 
488  function deleteAllPubIds($contextId, $pubIdType) {
489  $settingName = 'pub-id::'.$pubIdType;
490 
491  $formats = $this->getByContextId($contextId);
492  while ($format = $formats->next()) {
493  $this->update(
494  'DELETE FROM publication_format_settings WHERE setting_name = ? AND publication_format_id = ?',
495  array(
496  $settingName,
497  (int)$format->getId()
498  )
499  );
500  }
501  $this->flushCache();
502  }
503 }
504 
505 
PKPPubIdPluginDAO
Interface that DAOs would need to implement in order for pub ID support to be added.
Definition: PKPPubIdPluginDAO.inc.php:16
DAOResultFactory
Wrapper around ADORecordSet providing "factory" features for generating objects from DAOs.
Definition: DAOResultFactory.inc.php:21
PublicationFormatDAO\deleteById
deleteById($representationId)
Definition: PublicationFormatDAO.inc.php:221
PublicationFormatDAO\pubIdExists
pubIdExists($pubIdType, $pubId, $excludePubObjectId, $contextId)
Definition: PublicationFormatDAO.inc.php:430
PublicationFormatDAO\updateObject
updateObject($publicationFormat)
Definition: PublicationFormatDAO.inc.php:348
DAO\retrieve
& retrieve($sql, $params=false, $callHooks=true)
Definition: DAO.inc.php:85
PublicationFormatDAO\getByPublicationId
getByPublicationId($publicationId, $contextId=null)
Definition: PublicationFormatDAO.inc.php:156
PublicationFormatDAO\deleteAllPubIds
deleteAllPubIds($contextId, $pubIdType)
Definition: PublicationFormatDAO.inc.php:488
PublicationFormatDAO\getApprovedByPublicationId
getApprovedByPublicationId($publicationId)
Definition: PublicationFormatDAO.inc.php:203
RepresentationDAO
Abstract DAO for fetching/working with DB storage of Representation objects.
Definition: RepresentationDAO.inc.php:16
PublicationFormatDAO\newDataObject
newDataObject()
Definition: PublicationFormatDAO.inc.php:243
PublicationFormatDAO
Operations for retrieving and modifying PublicationFormat objects.
Definition: PublicationFormatDAO.inc.php:20
PublicationFormatDAO\changePubId
changePubId($pubObjectId, $pubIdType, $pubId)
Definition: PublicationFormatDAO.inc.php:456
PublicationFormatDAO\updateLocaleFields
updateLocaleFields($publicationFormat)
Definition: PublicationFormatDAO.inc.php:231
PublicationFormatDAO\_fromRow
_fromRow($row, $params=array(), $callHooks=true)
Definition: PublicationFormatDAO.inc.php:253
PublicationFormatDAO\getAdditionalFieldNames
getAdditionalFieldNames()
Definition: PublicationFormatDAO.inc.php:421
DAO\update
update($sql, $params=false, $callHooks=true, $dieOnError=true)
Definition: DAO.inc.php:214
DAO\_getInsertId
_getInsertId($table='', $id='')
Definition: DAO.inc.php:255
PublicationFormatDAO\getByContextId
getByContextId($pressId)
Definition: PublicationFormatDAO.inc.php:183
DAO\getDataObjectSettings
getDataObjectSettings($tableName, $idFieldName, $idFieldValue, $dataObject)
Definition: DAO.inc.php:582
PublicationFormatDAO\getByBestId
getByBestId($representationId, $publicationId)
Definition: PublicationFormatDAO.inc.php:130
DAO\replace
replace($table, $arrFields, $keyCols)
Definition: DAO.inc.php:243
DAO\flushCache
flushCache()
Definition: DAO.inc.php:288
DAO\updateDataObjectSettings
updateDataObjectSettings($tableName, $dataObject, $idArray)
Definition: DAO.inc.php:488
HookRegistry\call
static call($hookName, $args=null)
Definition: HookRegistry.inc.php:86
PublicationFormatDAO\getByPubId
getByPubId($pubIdType, $pubId, $publicationId=null, $pressId=null)
Definition: PublicationFormatDAO.inc.php:111
PublicationFormat
A publication format for a monograph.
Definition: PublicationFormat.inc.php:19
PublicationFormatDAO\getLocaleFieldNames
getLocaleFieldNames()
Definition: PublicationFormatDAO.inc.php:414
PublicationFormatDAO\insertObject
insertObject($publicationFormat)
Definition: PublicationFormatDAO.inc.php:302
PublicationFormatDAO\deletePubId
deletePubId($pubObjectId, $pubIdType)
Definition: PublicationFormatDAO.inc.php:473
PublicationFormatDAO\getById
getById($representationId, $publicationId=null, $contextId=null)
Definition: PublicationFormatDAO.inc.php:24
PublicationFormatDAO\getBySetting
getBySetting($settingName, $settingValue, $publicationId=null, $pressId=null)
Definition: PublicationFormatDAO.inc.php:58