Open Journal Systems  3.3.0
ArticleSearchDAO.inc.php
1 <?php
2 
17 import('classes.search.ArticleSearch');
18 import('lib.pkp.classes.search.SubmissionSearchDAO');
19 
27  public 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 i.journal_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(i.date_published) AS i_pub,
75  MAX(p.date_published) AS s_pub,
76  COUNT(*) AS count
77  FROM
78  submissions s
79  JOIN publications p ON (p.publication_id = s.current_publication_id)
80  JOIN publication_settings ps ON (ps.publication_id = p.publication_id AND ps.setting_name=\'issueId\')
81  JOIN issues i ON (CAST(i.issue_id AS CHAR) = ps.setting_value)
82  JOIN submission_search_objects o ON (s.submission_id = o.submission_id)
83  NATURAL JOIN ' . $sqlFrom . '
84  WHERE
85  s.status = ' . STATUS_PUBLISHED . ' AND
86  i.published = 1 AND ' . $sqlWhere . '
87  GROUP BY o.submission_id
88  ORDER BY count DESC
89  LIMIT ' . $limit,
90  $params,
91  3600 * $cacheHours // Cache for 24 hours
92  );
93 
94  $returner = array();
95  while (!$result->EOF) {
96  $row = $result->getRowAssoc(false);
97  $returner[$row['submission_id']] = array(
98  'count' => $row['count'],
99  'journal_id' => $row['journal_id'],
100  'issuePublicationDate' => $this->datetimeFromDB($row['i_pub']),
101  'publicationDate' => $this->datetimeFromDB($row['s_pub'])
102  );
103  $result->MoveNext();
104  }
105  $result->Close();
106 
107  return $returner;
108  }
109 }
110 
111 
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