Open Preprint Systems  3.3.0
ArticleSearchDAO.inc.php
1 <?php
2 
17 import('classes.search.ArticleSearch');
18 import('lib.pkp.classes.search.SubmissionSearchDAO');
19 
27  function getPhraseResults($journal, $phrase, $publishedFrom = null, $publishedTo = null, $type = null, $limit = 500, $cacheHours = 24) {
28  import('lib.pkp.classes.db.DBRowIterator');
29  if (empty($phrase)) {
30  $results = false;
31  return new DBRowIterator($results);
32  }
33 
34  $sqlFrom = '';
35  $sqlWhere = '';
36  $params = array();
37 
38  for ($i = 0, $count = count($phrase); $i < $count; $i++) {
39  if (!empty($sqlFrom)) {
40  $sqlFrom .= ', ';
41  $sqlWhere .= ' AND ';
42  }
43  $sqlFrom .= 'submission_search_object_keywords o'.$i.' NATURAL JOIN submission_search_keyword_list k'.$i;
44  if (strstr($phrase[$i], '%') === false) $sqlWhere .= 'k'.$i.'.keyword_text = ?';
45  else $sqlWhere .= 'k'.$i.'.keyword_text LIKE ?';
46  if ($i > 0) $sqlWhere .= ' AND o0.object_id = o'.$i.'.object_id AND o0.pos+'.$i.' = o'.$i.'.pos';
47 
48  $params[] = $phrase[$i];
49  }
50 
51  if (!empty($type)) {
52  $sqlWhere .= ' AND (o.type & ?) != 0';
53  $params[] = $type;
54  }
55 
56  if (!empty($publishedFrom)) {
57  $sqlWhere .= ' AND p.date_published >= ' . $this->datetimeToDB($publishedFrom);
58  }
59 
60  if (!empty($publishedTo)) {
61  $sqlWhere .= ' AND p.date_published <= ' . $this->datetimeToDB($publishedTo);
62  }
63 
64  if (!empty($journal)) {
65  $sqlWhere .= ' AND s.context_id = ?';
66  $params[] = $journal->getId();
67  }
68 
69  import('lib.pkp.classes.submission.PKPSubmission'); // STATUS_PUBLISHED
70  $result = $this->retrieveCached(
71  'SELECT
72  o.submission_id,
73  MAX(s.context_id) AS journal_id,
74  MAX(p.date_published) AS s_pub,
75  COUNT(*) AS count
76  FROM
77  submissions s
78  JOIN publications p ON (p.publication_id = s.current_publication_id),
79  submission_search_objects o NATURAL JOIN ' . $sqlFrom . '
80  WHERE
81  s.submission_id = o.submission_id AND
82  s.status = ' . STATUS_PUBLISHED . ' AND
83  ' . $sqlWhere . '
84  GROUP BY o.submission_id
85  ORDER BY count DESC
86  LIMIT ' . $limit,
87  $params,
88  3600 * $cacheHours // Cache for 24 hours
89  );
90 
91  $returner = array();
92  while (!$result->EOF) {
93  $row = $result->getRowAssoc(false);
94  $returner[$row['submission_id']] = array(
95  'count' => $row['count'],
96  'journal_id' => $row['journal_id'],
97  'publicationDate' => $this->datetimeFromDB($row['s_pub'])
98  );
99  $result->MoveNext();
100  }
101  $result->Close();
102 
103  return $returner;
104  }
105 }
106 
107 
SubmissionSearchDAO
DAO class for submission search index.
Definition: SubmissionSearchDAO.inc.php:17
ArticleSearchDAO
DAO class for article search index.
Definition: ArticleSearchDAO.inc.php:20
DAO\datetimeFromDB
datetimeFromDB($dt)
Definition: DAO.inc.php:319
DAO\datetimeToDB
datetimeToDB($dt)
Definition: DAO.inc.php:299
DBRowIterator
Wrapper around ADORecordSet providing "factory" features for generating objects from DAOs.
Definition: DBRowIterator.inc.php:20
ArticleSearchDAO\getPhraseResults
getPhraseResults($journal, $phrase, $publishedFrom=null, $publishedTo=null, $type=null, $limit=500, $cacheHours=24)
Definition: ArticleSearchDAO.inc.php:27
DAO\retrieveCached
& retrieveCached($sql, $params=false, $secsToCache=3600, $callHooks=true)
Definition: DAO.inc.php:115