Open Monograph Press  3.3.0
SeriesDAO.inc.php
1 <?php
2 
17 import ('classes.press.Series');
18 import ('lib.pkp.classes.context.PKPSectionDAO');
19 
20 class SeriesDAO extends PKPSectionDAO {
27  function getById($seriesId, $pressId = null) {
28  $params = array((int) $seriesId);
29  if ($pressId) $params[] = (int) $pressId;
30 
31  $result = $this->retrieve(
32  'SELECT *
33  FROM series
34  WHERE series_id = ?
35  ' . ($pressId?' AND press_id = ?':''),
36  $params
37  );
38 
39  $returner = null;
40  if ($result->RecordCount() != 0) {
41  $returner = $this->_fromRow($result->GetRowAssoc(false));
42  }
43 
44  $result->Close();
45  return $returner;
46  }
47 
54  function getByPath($path, $pressId) {
55  $result = $this->retrieve(
56  'SELECT * FROM series WHERE path = ? AND press_id = ?',
57  array((string) $path, (int) $pressId)
58  );
59 
60  $returner = null;
61  if ($result->RecordCount() != 0) {
62  $returner = $this->_fromRow($result->GetRowAssoc(false));
63  }
64 
65  $result->Close();
66  return $returner;
67  }
68 
73  function newDataObject() {
74  return new Series();
75  }
76 
82  function _fromRow($row) {
83  $series = parent::_fromRow($row);
84 
85  $series->setId($row['series_id']);
86  $series->setPressId($row['press_id']);
87  $series->setFeatured($row['featured']);
88  $series->setImage(unserialize($row['image']));
89  $series->setPath($row['path']);
90  $series->setIsInactive($row['is_inactive']);
91 
92  $this->getDataObjectSettings('series_settings', 'series_id', $row['series_id'], $series);
93 
94  HookRegistry::call('SeriesDAO::_fromRow', array(&$series, &$row));
95 
96  return $series;
97  }
98 
103  function getLocaleFieldNames() {
104  return array_merge(
105  parent::getLocaleFieldNames(),
106  array('description', 'prefix', 'subtitle')
107  );
108  }
109 
115  return array_merge(
116  parent::getAdditionalFieldNames(),
117  array(
118  'onlineIssn', 'printIssn', 'sortOption',
119  )
120  );
121  }
122 
127  function updateLocaleFields($series) {
129  'series_settings',
130  $series,
131  array('series_id' => (int) $series->getId())
132  );
133  }
134 
139  function insertObject($series) {
140  $this->update(
141  'INSERT INTO series
142  (press_id, seq, featured, path, image, editor_restricted, is_inactive)
143  VALUES
144  (?, ?, ?, ?, ?, ?, ?)',
145  array(
146  (int) $series->getPressId(),
147  (float) $series->getSequence(),
148  (int) $series->getFeatured(),
149  (string) $series->getPath(),
150  serialize($series->getImage() ? $series->getImage() : array()),
151  (int) $series->getEditorRestricted(),
152  (int) $series->getIsInactive() ? 1 : 0,
153  )
154  );
155 
156  $series->setId($this->getInsertId());
157  $this->updateLocaleFields($series);
158  return $series->getId();
159  }
160 
165  function updateObject($series) {
166  $this->update(
167  'UPDATE series
168  SET press_id = ?,
169  seq = ?,
170  featured = ?,
171  path = ?,
172  image = ?,
173  editor_restricted = ?,
174  is_inactive = ?
175  WHERE series_id = ?',
176  array(
177  (int) $series->getPressId(),
178  (float) $series->getSequence(),
179  (int) $series->getFeatured(),
180  (string) $series->getPath(),
181  serialize($series->getImage() ? $series->getImage() : array()),
182  (int) $series->getEditorRestricted(),
183  (int) $series->getIsInactive(),
184  (int) $series->getId(),
185  )
186  );
187  $this->updateLocaleFields($series);
188  }
189 
195  function deleteById($seriesId, $contextId = null) {
196  // Validate the $contextId, if supplied.
197  if (!$this->seriesExists($seriesId, $contextId)) return false;
198 
199  $subEditorsDao = DAORegistry::getDAO('SubEditorsDAO'); /* @var $subEditorsDao SubEditorsDAO */
200  $subEditorsDao->deleteBySubmissionGroupId($seriesId, ASSOC_TYPE_SECTION, $contextId);
201 
202  // Remove monographs from this series
203  $submissionsIterator = Services::get('submission')->getMany(['seriesIds' => $seriesId, 'count' => 1000]);
204  foreach ($submissionsIterator as $submission) {
205  foreach ((array) $submission->getData('publications') as $publication) {
206  Services::get('publication')->edit($publication, ['seriesId' => 0]);
207  }
208  }
209 
210  // Delete the series and settings.
211  $this->update('DELETE FROM series WHERE series_id = ?', (int) $seriesId);
212  $this->update('DELETE FROM series_settings WHERE series_id = ?', (int) $seriesId);
213  }
214 
221  function deleteByPressId($pressId) {
222  $this->deleteByContextId($pressId);
223  }
224 
229  function getByPressId($pressId, $rangeInfo = null) {
230  return $this->getByContextId($pressId, $rangeInfo);
231  }
232 
236  function getByContextId($pressId, $rangeInfo = null, $submittableOnly = false) {
237  $params = array(
238  'title', AppLocale::getPrimaryLocale(),
239  'title', AppLocale::getLocale(),
240  (int) $pressId
241  );
242 
243  $result = $this->retrieveRange(
244  'SELECT s.*, COALESCE(stpl.setting_value, stl.setting_value) AS series_title FROM series s
245  LEFT JOIN series_settings stpl ON (s.series_id = stpl.series_id AND stpl.setting_name = ? AND stpl.locale = ?)
246  LEFT JOIN series_settings stl ON (s.series_id = stl.series_id AND stl.setting_name = ? AND stl.locale = ?)
247  WHERE press_id = ?
248  ORDER BY seq',
249  $params,
250  $rangeInfo
251  );
252 
253  return new DAOResultFactory($result, $this, '_fromRow');
254  }
255 
260  function getTitlesByPressId($pressId, $submittableOnly = false) {
261  $seriesTitles = array();
262 
263  $seriesIterator = $this->getByPressId($pressId, null);
264  while ($series = $seriesIterator->next()) {
265  if ($submittableOnly) {
266  if (!$series->getEditorRestricted()) {
267  $seriesTitles[$series->getId()] = $series->getLocalizedTitle();
268  }
269  } else {
270  $seriesTitles[$series->getId()] = $series->getLocalizedTitle();
271  }
272  }
273 
274  return $seriesTitles;
275  }
276 
283  function seriesExists($seriesId, $pressId) {
284  $result = $this->retrieve(
285  'SELECT COUNT(*) FROM series WHERE series_id = ? AND press_id = ?',
286  array((int) $seriesId, (int) $pressId)
287  );
288  $returner = isset($result->fields[0]) && $result->fields[0] == 1 ? true : false;
289 
290  $result->Close();
291  return $returner;
292  }
293 
298  function getInsertId() {
299  return $this->_getInsertId('series', 'series_id');
300  }
301 
307  function addCategory($seriesId, $categoryId) {
308  $this->update(
309  'INSERT INTO series_categories
310  (series_id, category_id)
311  VALUES
312  (?, ?)',
313  array(
314  (int) $seriesId,
315  (int) $categoryId
316  )
317  );
318  }
319 
325  public function removeCategories($seriesId) {
326  $this->update(
327  'DELETE FROM series_categories WHERE series_id = ?',
328  array((int) $seriesId)
329  );
330  }
331 
337  function getCategories($seriesId, $pressId = null) {
338  $params = array((int) $seriesId);
339  if ($pressId) $params[] = (int) $pressId;
340 
341  $categoryDao = DAORegistry::getDAO('CategoryDAO'); /* @var $categoryDao CategoryDAO */
342  $result = $this->retrieve(
343  'SELECT c.*
344  FROM categories c,
345  series_categories sc,
346  series s
347  WHERE c.category_id = sc.category_id AND
348  s.series_id = ? AND
349  ' . ($pressId?' c.context_id = s.press_id AND s.press_id = ? AND':'') . '
350  s.series_id = sc.series_id',
351  $params
352  );
353 
354  // Delegate category creation to the category DAO.
355  return new DAOResultFactory($result, $categoryDao, '_fromRow');
356  }
357 
363  function getUnassignedCategories($seriesId, $pressId = null) {
364  $params = array((int) $seriesId);
365  if ($pressId) $params[] = (int) $pressId;
366 
367  $categoryDao = DAORegistry::getDAO('CategoryDAO'); /* @var $categoryDao CategoryDAO */
368  $result = $this->retrieve(
369  'SELECT c.*
370  FROM series s
371  JOIN categories c ON (c.context_id = s.press_id)
372  LEFT JOIN series_categories sc ON (s.series_id = sc.series_id AND sc.category_id = c.category_id)
373  WHERE s.series_id = ? AND
374  ' . ($pressId?' s.press_id = ? AND':'') . '
375  sc.series_id IS NULL',
376  $params
377  );
378 
379  // Delegate category creation to the category DAO.
380  return new DAOResultFactory($result, $categoryDao, '_fromRow');
381  }
382 
389  function categoryAssociationExists($seriesId, $categoryId) {
390  $result = $this->retrieve(
391  'SELECT COUNT(*) FROM series_categories WHERE series_id = ? AND category_id = ?',
392  array((int) $seriesId, (int) $categoryId)
393  );
394  $returner = isset($result->fields[0]) && $result->fields[0] == 1 ? true : false;
395 
396  $result->Close();
397  return $returner;
398  }
399 }
400 
401 
DAOResultFactory
Wrapper around ADORecordSet providing "factory" features for generating objects from DAOs.
Definition: DAOResultFactory.inc.php:21
SeriesDAO\getByContextId
getByContextId($pressId, $rangeInfo=null, $submittableOnly=false)
Definition: SeriesDAO.inc.php:236
SeriesDAO\getTitlesByPressId
getTitlesByPressId($pressId, $submittableOnly=false)
Definition: SeriesDAO.inc.php:260
DAO\retrieveRange
& retrieveRange($sql, $params=false, $dbResultRange=null, $callHooks=true)
Definition: DAO.inc.php:176
SeriesDAO\getCategories
getCategories($seriesId, $pressId=null)
Definition: SeriesDAO.inc.php:337
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
SeriesDAO\_fromRow
_fromRow($row)
Definition: SeriesDAO.inc.php:82
DAO\retrieve
& retrieve($sql, $params=false, $callHooks=true)
Definition: DAO.inc.php:85
SeriesDAO\updateObject
updateObject($series)
Definition: SeriesDAO.inc.php:165
SeriesDAO\getAdditionalFieldNames
getAdditionalFieldNames()
Definition: SeriesDAO.inc.php:114
AppLocale\getPrimaryLocale
static getPrimaryLocale()
Definition: env1/MockAppLocale.inc.php:95
SeriesDAO\deleteByPressId
deleteByPressId($pressId)
Definition: SeriesDAO.inc.php:221
SeriesDAO\getByPath
getByPath($path, $pressId)
Definition: SeriesDAO.inc.php:54
SeriesDAO\getLocaleFieldNames
getLocaleFieldNames()
Definition: SeriesDAO.inc.php:103
SeriesDAO\removeCategories
removeCategories($seriesId)
Definition: SeriesDAO.inc.php:325
SeriesDAO\updateLocaleFields
updateLocaleFields($series)
Definition: SeriesDAO.inc.php:127
SeriesDAO\getByPressId
getByPressId($pressId, $rangeInfo=null)
Definition: SeriesDAO.inc.php:229
Series
Describes basic series properties.
Definition: Series.inc.php:19
SeriesDAO\getInsertId
getInsertId()
Definition: SeriesDAO.inc.php:298
SeriesDAO\getById
getById($seriesId, $pressId=null)
Definition: SeriesDAO.inc.php:27
PKPSectionDAO
Operations for retrieving and modifying Section objects.
Definition: PKPSectionDAO.inc.php:17
SeriesDAO\seriesExists
seriesExists($seriesId, $pressId)
Definition: SeriesDAO.inc.php:283
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
SeriesDAO\insertObject
insertObject($series)
Definition: SeriesDAO.inc.php:139
SeriesDAO\getUnassignedCategories
getUnassignedCategories($seriesId, $pressId=null)
Definition: SeriesDAO.inc.php:363
SeriesDAO\categoryAssociationExists
categoryAssociationExists($seriesId, $categoryId)
Definition: SeriesDAO.inc.php:389
DAO\getDataObjectSettings
getDataObjectSettings($tableName, $idFieldName, $idFieldValue, $dataObject)
Definition: DAO.inc.php:582
PKPSectionDAO\deleteByContextId
deleteByContextId($contextId)
Definition: PKPSectionDAO.inc.php:77
SeriesDAO\addCategory
addCategory($seriesId, $categoryId)
Definition: SeriesDAO.inc.php:307
SeriesDAO
Operations for retrieving and modifying Series objects.
Definition: SeriesDAO.inc.php:20
SeriesDAO\newDataObject
newDataObject()
Definition: SeriesDAO.inc.php:73
DAO\updateDataObjectSettings
updateDataObjectSettings($tableName, $dataObject, $idArray)
Definition: DAO.inc.php:488
HookRegistry\call
static call($hookName, $args=null)
Definition: HookRegistry.inc.php:86
AppLocale\getLocale
static getLocale()
Definition: env1/MockAppLocale.inc.php:40
SeriesDAO\deleteById
deleteById($seriesId, $contextId=null)
Definition: SeriesDAO.inc.php:195
PKPServices\get
static get($service)
Definition: PKPServices.inc.php:49