Open Monograph Press  3.3.0
MonographSearchDAO.inc.php
1 <?php
2 
17 import('classes.search.MonographSearch');
18 import('lib.pkp.classes.search.SubmissionSearchDAO');
19 
27  function getPhraseResults($press, $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($press)) {
57  $sqlWhere .= ' AND s.context_id = ?';
58  $params[] = $press->getId();
59  }
60 
61  import('classes.submission.Submission'); // import STATUS_PUBLISHED constant
62  $params[] = STATUS_PUBLISHED;
63 
64  $result = $this->retrieveCached(
65  $sql = 'SELECT
66  o.submission_id,
67  s.context_id as press_id,
68  p.date_published as s_pub,
69  COUNT(*) AS count
70  FROM
71  submissions s,
72  publications p,
73  submission_search_objects o NATURAL JOIN ' . $sqlFrom . '
74  WHERE o.submission_id = s.submission_id
75  AND s.current_publication_id = p.publication_id
76  AND ' . $sqlWhere . '
77  AND s.status = ?
78  GROUP BY o.submission_id, s.context_id, p.date_published
79  ORDER BY count DESC
80  LIMIT ' . $limit,
81  $params,
82  3600 * $cacheHours // Cache for 24 hours
83  );
84 
85  $returner = array();
86  while (!$result->EOF) {
87  $row = $result->getRowAssoc(false);
88  $returner[$row['submission_id']] = array(
89  'count' => $row['count'],
90  'press_id' => $row['press_id'],
91  'publicationDate' => $this->datetimeFromDB($row['s_pub'])
92  );
93  $result->MoveNext();
94  }
95  $result->Close();
96 
97  return $returner;
98  }
99 }
100 
101 
SubmissionSearchDAO
DAO class for submission search index.
Definition: SubmissionSearchDAO.inc.php:17
MonographSearchDAO\getPhraseResults
getPhraseResults($press, $phrase, $publishedFrom=null, $publishedTo=null, $type=null, $limit=500, $cacheHours=24)
Definition: MonographSearchDAO.inc.php:27
DAO\datetimeFromDB
datetimeFromDB($dt)
Definition: DAO.inc.php:319
MonographSearchDAO
DAO class for monograph search index.
Definition: MonographSearchDAO.inc.php:20
DBRowIterator
Wrapper around ADORecordSet providing "factory" features for generating objects from DAOs.
Definition: DBRowIterator.inc.php:20
DAO\retrieveCached
& retrieveCached($sql, $params=false, $secsToCache=3600, $callHooks=true)
Definition: DAO.inc.php:115