Open Journal Systems  3.3.0
ArticleGalleyDAO.inc.php
1 <?php
2 
17 import('classes.article.ArticleGalley');
18 import('lib.pkp.classes.db.SchemaDAO');
19 import('lib.pkp.classes.plugins.PKPPubIdPluginDAO');
20 
21 class ArticleGalleyDAO extends SchemaDAO implements PKPPubIdPluginDAO {
23  public $schemaName = SCHEMA_GALLEY;
24 
26  public $tableName = 'publication_galleys';
27 
29  public $settingsTableName = 'publication_galley_settings';
30 
32  public $primaryKeyColumn = 'galley_id';
33 
36  'fileId' => 'file_id',
37  'id' => 'galley_id',
38  'isApproved' => 'is_approved',
39  'locale' => 'locale',
40  'label' => 'label',
41  'publicationId' => 'publication_id',
42  'seq' => 'seq',
43  'urlPath' => 'url_path',
44  'urlRemote' => 'remote_url',
45  ];
46 
51  function newDataObject() {
52  return new ArticleGalley();
53  }
54 
64  function getGalleyByPubId($pubIdType, $pubId, $publicationId = null) {
65  $galleyFactory = $this->getGalleysBySetting('pub-id::'.$pubIdType, $pubId, $publicationId);
66  if ($galleyFactory->wasEmpty()) return null;
67 
68  assert($galleyFactory->getCount() == 1);
69  return $galleyFactory->next();
70  }
71 
80  function getGalleysBySetting($settingName, $settingValue, $publicationId = null, $journalId = null) {
81  $params = array($settingName);
82 
83  $sql = 'SELECT g.*
84  FROM publication_galleys g
85  INNER JOIN publications p ON p.publication_id = g.publication_id
86  INNER JOIN submissions s ON s.current_publication_id = g.publication_id ';
87  if (is_null($settingValue)) {
88  $sql .= 'LEFT JOIN publication_galley_settings gs ON g.galley_id = gs.galley_id AND gs.setting_name = ?
89  WHERE (gs.setting_value IS NULL OR gs.setting_value = \'\')';
90  } else {
91  $params[] = (string) $settingValue;
92  $sql .= 'INNER JOIN publication_galley_settings gs ON g.galley_id = gs.galley_id
93  WHERE gs.setting_name = ? AND gs.setting_value = ?';
94  }
95  if ($publicationId) {
96  $params[] = (int) $publicationId;
97  $sql .= ' AND g.publication_id = ?';
98  }
99  if ($journalId) {
100  $params[] = (int) $journalId;
101  $sql .= ' AND s.context_id = ?';
102  }
103  $sql .= ' ORDER BY s.context_id, g.galley_id';
104  $result = $this->retrieve($sql, $params);
105 
106  return new DAOResultFactory($result, $this, '_fromRow');
107  }
108 
112  function getByPublicationId($publicationId, $contextId = null) {
113  $params = array((int) $publicationId);
114  if ($contextId) $params[] = (int) $contextId;
115 
116  return new DAOResultFactory(
117  $this->retrieve(
118  'SELECT sf.*, g.*
119  FROM publication_galleys g
120  INNER JOIN publications p ON (g.publication_id = p.publication_id)
121  LEFT JOIN submission_files sf ON (g.file_id = sf.file_id)
122  LEFT JOIN submission_files nsf ON (nsf.file_id = g.file_id AND nsf.revision > sf.revision)
123  ' . ($contextId ? 'LEFT JOIN submissions s ON (s.submission_id = p.submission_id)' : '') .
124  'WHERE g.publication_id = ?
125  AND nsf.file_id IS NULL ' .
126  ($contextId?' AND s.context_id = ? ':'') .
127  'ORDER BY g.seq',
128  $params
129  ),
130  $this, '_fromRow'
131  );
132  }
133 
139  function getByContextId($journalId) {
140  $result = $this->retrieve(
141  'SELECT sf.*, g.*
142  FROM publication_galleys g
143  INNER JOIN publications p ON (p.publication_id = g.publication_id)
144  LEFT JOIN submissions s ON (s.submission_id = p.submission_id)
145  LEFT JOIN submission_files sf ON (g.file_id = sf.file_id)
146  LEFT JOIN submission_files nsf ON (nsf.file_id = g.file_id AND nsf.revision > sf.revision)
147  WHERE s.context_id = ?
148  AND nsf.file_id IS NULL',
149  (int) $journalId
150  );
151 
152  return new DAOResultFactory($result, $this, '_fromRow');
153  }
154 
160  function getByFileId($fileId) {
161  $result = $this->retrieve(
162  'SELECT *
163  FROM publication_galleys g
164  WHERE g.file_id = ?',
165  (int) $fileId
166  );
167 
168  return new DAOResultFactory($result, $this, '_fromRow');
169  }
170 
178  function getByBestGalleyId($galleyId, $publicationId) {
179  $params = [
180  (int) $publicationId,
181  $galleyId,
182  ];
183 
184  $result = $this->retrieve(
185  'SELECT sf.*, g.*
186  FROM publication_galleys g
187  INNER JOIN publications p ON (g.publication_id = p.publication_id)
188  LEFT JOIN submission_files sf ON (g.file_id = sf.file_id)
189  LEFT JOIN submission_files nsf ON (nsf.file_id = g.file_id AND nsf.revision > sf.revision)
190  WHERE g.publication_id = ?
191  AND g.url_path = ?
192  AND nsf.file_id IS NULL
193  ORDER BY g.seq',
194  $params
195  );
196 
197  if ($result->RecordCount() != 0) {
198  $galley = $this->_fromRow($result->GetRowAssoc(false));
199  } elseif (is_int($galleyId) || ctype_digit($galleyId)) {
200  $galley = $this->getById($galleyId);
201  }
202  $result->Close();
203 
204  return $galley ?? null;
205  }
206 
210  function pubIdExists($pubIdType, $pubId, $excludePubObjectId, $contextId) {
211  $result = $this->retrieve(
212  'SELECT COUNT(*)
213  FROM publication_galley_settings pgs
214  INNER JOIN publication_galleys pg ON pgs.galley_id = pg.galley_id
215  INNER JOIN publications p ON pg.publication_id = p.publication_id
216  INNER JOIN submissions s ON p.submission_id = s.submission_id
217  WHERE pgs.setting_name = ? AND pgs.setting_value = ? AND pgs.galley_id <> ? AND s.context_id = ?',
218  array(
219  'pub-id::'.$pubIdType,
220  $pubId,
221  (int) $excludePubObjectId,
222  (int) $contextId
223  )
224  );
225  $returner = $result->fields[0] ? true : false;
226  $result->Close();
227  return $returner;
228  }
229 
233  function changePubId($pubObjectId, $pubIdType, $pubId) {
234  $idFields = array(
235  'galley_id', 'locale', 'setting_name'
236  );
237  $updateArray = array(
238  'galley_id' => (int) $pubObjectId,
239  'locale' => '',
240  'setting_name' => 'pub-id::'.$pubIdType,
241  'setting_type' => 'string',
242  'setting_value' => (string)$pubId
243  );
244  $this->replace('publication_galley_settings', $updateArray, $idFields);
245  }
246 
250  function deletePubId($pubObjectId, $pubIdType) {
251  $settingName = 'pub-id::'.$pubIdType;
252  $this->update(
253  'DELETE FROM publication_galley_settings WHERE setting_name = ? AND galley_id = ?',
254  array(
255  $settingName,
256  (int)$pubObjectId
257  )
258  );
259  $this->flushCache();
260  }
261 
265  function deleteAllPubIds($contextId, $pubIdType) {
266  $settingName = 'pub-id::'.$pubIdType;
267 
268  $galleys = $this->getByContextId($contextId);
269  while ($galley = $galleys->next()) {
270  $this->update(
271  'DELETE FROM publication_galley_settings WHERE setting_name = ? AND galley_id = ?',
272  array(
273  $settingName,
274  (int)$galley->getId()
275  )
276  );
277  }
278  $this->flushCache();
279  }
280 
294  function getExportable($contextId, $pubIdType = null, $title = null, $author = null, $issueId = null, $pubIdSettingName = null, $pubIdSettingValue = null, $rangeInfo = null) {
295  $params = array();
296  if ($pubIdSettingName) {
297  $params[] = $pubIdSettingName;
298  }
299  import('classes.submission.Submission'); // STATUS_PUBLISHED constant
300  $params[] = STATUS_PUBLISHED;
301  $params[] = (int) $contextId;
302  if ($pubIdType) {
303  $params[] = 'pub-id::'.$pubIdType;
304  }
305  if ($title) {
306  $params[] = 'title';
307  $params[] = '%' . $title . '%';
308  }
309  if ($author) array_push($params, $authorQuery = '%' . $author . '%', $authorQuery);
310  if ($issueId) {
311  $params[] = (int) $issueId;
312  }
313  import('classes.plugins.PubObjectsExportPlugin');
314  if ($pubIdSettingName && $pubIdSettingValue && $pubIdSettingValue != EXPORT_STATUS_NOT_DEPOSITED) {
315  $params[] = $pubIdSettingValue;
316  }
317 
318  $result = $this->retrieveRange(
319  'SELECT g.*
320  FROM publication_galleys g
321  LEFT JOIN publications p ON (p.publication_id = g.publication_id)
322  LEFT JOIN publication_settings ps ON (ps.publication_id = p.publication_id)
323  LEFT JOIN submissions s ON (s.submission_id = p.submission_id)
324  LEFT JOIN submission_files sf ON (g.file_id = sf.file_id)
325  LEFT JOIN submission_files nsf ON (nsf.file_id = g.file_id AND nsf.revision > sf.revision AND nsf.file_id IS NULL )
326  ' . ($pubIdType != null?' LEFT JOIN publication_galley_settings gs ON (g.galley_id = gs.galley_id)':'')
327  . ($title != null?' LEFT JOIN publication_settings pst ON (p.publication_id = pst.publication_id)':'')
328  . ($author != null?' LEFT JOIN authors au ON (p.publication_id = au.publication_id)
329  LEFT JOIN author_settings asgs ON (asgs.author_id = au.author_id AND asgs.setting_name = \''.IDENTITY_SETTING_GIVENNAME.'\')
330  LEFT JOIN author_settings asfs ON (asfs.author_id = au.author_id AND asfs.setting_name = \''.IDENTITY_SETTING_FAMILYNAME.'\')
331  ':'')
332  . ($pubIdSettingName != null?' LEFT JOIN publication_galley_settings gss ON (g.galley_id = gss.galley_id AND gss.setting_name = ?)':'') .'
333  WHERE
334  s.status = ? AND s.context_id = ?
335  ' . ($pubIdType != null?' AND gs.setting_name = ? AND gs.setting_value IS NOT NULL':'')
336  . ($title != null?' AND (pst.setting_name = ? AND pst.setting_value LIKE ?)':'')
337  . ($author != null?' AND (asgs.setting_value LIKE ? OR asfs.setting_value LIKE ?)':'')
338  . ($issueId != null?' AND (ps.setting_name = \'issueId\' AND ps.setting_value = ?':'')
339  . (($pubIdSettingName != null && $pubIdSettingValue != null && $pubIdSettingValue == EXPORT_STATUS_NOT_DEPOSITED)?' AND gss.setting_value IS NULL':'')
340  . (($pubIdSettingName != null && $pubIdSettingValue != null && $pubIdSettingValue != EXPORT_STATUS_NOT_DEPOSITED)?' AND gss.setting_value = ?':'')
341  . (($pubIdSettingName != null && is_null($pubIdSettingValue))?' AND (gss.setting_value IS NULL OR gss.setting_value = \'\')':'') .'
342  GROUP BY g.galley_id
343  ORDER BY p.date_published DESC, p.publication_id DESC, g.galley_id DESC',
344  $params,
345  $rangeInfo
346  );
347 
348  return new DAOResultFactory($result, $this, '_fromRow');
349  }
350 }
ArticleGalleyDAO\newDataObject
newDataObject()
Definition: ArticleGalleyDAO.inc.php:51
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
DAO\retrieveRange
& retrieveRange($sql, $params=false, $dbResultRange=null, $callHooks=true)
Definition: DAO.inc.php:176
ArticleGalleyDAO\getByPublicationId
getByPublicationId($publicationId, $contextId=null)
Definition: ArticleGalleyDAO.inc.php:112
ArticleGalley
A galley is a final presentation version of the full-text of an article.
Definition: ArticleGalley.inc.php:19
ArticleGalleyDAO\$tableName
$tableName
Definition: ArticleGalleyDAO.inc.php:26
ArticleGalleyDAO\changePubId
changePubId($pubObjectId, $pubIdType, $pubId)
Definition: ArticleGalleyDAO.inc.php:233
DAO\retrieve
& retrieve($sql, $params=false, $callHooks=true)
Definition: DAO.inc.php:85
ArticleGalleyDAO\getExportable
getExportable($contextId, $pubIdType=null, $title=null, $author=null, $issueId=null, $pubIdSettingName=null, $pubIdSettingValue=null, $rangeInfo=null)
Definition: ArticleGalleyDAO.inc.php:294
ArticleGalleyDAO
Operations for retrieving and modifying ArticleGalley objects.
Definition: ArticleGalleyDAO.inc.php:21
ArticleGalleyDAO\getByBestGalleyId
getByBestGalleyId($galleyId, $publicationId)
Definition: ArticleGalleyDAO.inc.php:178
SchemaDAO\getById
getById($objectId)
Definition: SchemaDAO.inc.php:61
ArticleGalleyDAO\$settingsTableName
$settingsTableName
Definition: ArticleGalleyDAO.inc.php:29
ArticleGalleyDAO\getGalleyByPubId
getGalleyByPubId($pubIdType, $pubId, $publicationId=null)
Definition: ArticleGalleyDAO.inc.php:64
ArticleGalleyDAO\pubIdExists
pubIdExists($pubIdType, $pubId, $excludePubObjectId, $contextId)
Definition: ArticleGalleyDAO.inc.php:210
ArticleGalleyDAO\getByContextId
getByContextId($journalId)
Definition: ArticleGalleyDAO.inc.php:139
DAO\update
update($sql, $params=false, $callHooks=true, $dieOnError=true)
Definition: DAO.inc.php:214
SchemaDAO\_fromRow
_fromRow($primaryRow)
Definition: SchemaDAO.inc.php:240
ArticleGalleyDAO\deletePubId
deletePubId($pubObjectId, $pubIdType)
Definition: ArticleGalleyDAO.inc.php:250
ArticleGalleyDAO\getGalleysBySetting
getGalleysBySetting($settingName, $settingValue, $publicationId=null, $journalId=null)
Definition: ArticleGalleyDAO.inc.php:80
ArticleGalleyDAO\$primaryKeyColumn
$primaryKeyColumn
Definition: ArticleGalleyDAO.inc.php:32
ArticleGalleyDAO\getByFileId
getByFileId($fileId)
Definition: ArticleGalleyDAO.inc.php:160
DAO\replace
replace($table, $arrFields, $keyCols)
Definition: DAO.inc.php:243
ArticleGalleyDAO\$primaryTableColumns
$primaryTableColumns
Definition: ArticleGalleyDAO.inc.php:35
DAO\flushCache
flushCache()
Definition: DAO.inc.php:288
ArticleGalleyDAO\$schemaName
$schemaName
Definition: ArticleGalleyDAO.inc.php:23
ArticleGalleyDAO\deleteAllPubIds
deleteAllPubIds($contextId, $pubIdType)
Definition: ArticleGalleyDAO.inc.php:265
SchemaDAO
A base class for DAOs which rely on a json-schema file to define the data object.
Definition: SchemaDAO.inc.php:18