Open Monograph Press  3.3.0
MonographSearchIndex.inc.php
1 <?php
2 
16 import('lib.pkp.classes.search.SubmissionSearchIndex');
17 
19 
26  public function indexObjectKeywords($objectId, $text, &$position) {
27  $searchDao = DAORegistry::getDAO('MonographSearchDAO'); /* @var $searchDao MonographSearchDAO */
28  $keywords = $this->filterKeywords($text);
29  for ($i = 0, $count = count($keywords); $i < $count; $i++) {
30  if ($searchDao->insertObjectKeyword($objectId, $keywords[$i], $position) !== null) {
31  $position += 1;
32  }
33  }
34  }
35 
43  public function updateTextIndex($monographId, $type, $text, $assocId = null) {
44  $searchDao = DAORegistry::getDAO('MonographSearchDAO'); /* @var $searchDao MonographSearchDAO */
45  $objectId = $searchDao->insertObject($monographId, $type, $assocId);
46  $position = 0;
47  $this->indexObjectKeywords($objectId, $text, $position);
48  }
49 
56  public function updateFileIndex($monographId, $type, $fileId) {
57  $submissionFileDao = DAORegistry::getDAO('SubmissionFileDAO'); /* @var $submissionFileDao SubmissionFileDAO */
58  $file = $submissionFileDao->getLatestRevision($fileId);
59 
60  if (isset($file)) {
61  $parser = SearchFileParser::fromFile($file);
62  }
63 
64  if (isset($parser)) {
65  if ($parser->open()) {
66  $searchDao = DAORegistry::getDAO('MonographSearchDAO'); /* @var $searchDao MonographSearchDAO */
67  $objectId = $searchDao->insertObject($monographId, $type, $fileId);
68 
69  $position = 0;
70  while(($text = $parser->read()) !== false) {
71  $this->indexObjectKeywords($objectId, $text, $position);
72  }
73  $parser->close();
74  } else {
75  // cannot open parser; unsupported format?
76  }
77  }
78  }
79 
86  public function deleteTextIndex($monographId, $type = null, $assocId = null) {
87  $searchDao = DAORegistry::getDAO('MonographSearchDAO'); /* @var $searchDao MonographSearchDAO */
88  return $searchDao->deleteSubmissionKeywords($monographId, $type, $assocId);
89  }
90 
95  public function submissionMetadataChanged($submission) {
96  $publication = $submission->getCurrentPublication();
97 
98  // Build author keywords
99  $authorText = [];
100  foreach ($publication->getData('authors') as $author) {
101  $authorText = array_merge(
102  $authorText,
103  array_values((array) $author->getData('givenName')),
104  array_values((array) $author->getData('familyName')),
105  array_values(array_map('strip_tags', (array) $author->getData('affiliation'))),
106  array_values(array_map('strip_tags', (array) $author->getData('biography')))
107  );
108  }
109 
110  // Update search index
111  import('classes.search.MonographSearch');
112  $submissionId = $submission->getId();
113  $this->updateTextIndex($submissionId, SUBMISSION_SEARCH_AUTHOR, $authorText);
114  $this->updateTextIndex($submissionId, SUBMISSION_SEARCH_TITLE, $publication->getData('title'));
115  $this->updateTextIndex($submissionId, SUBMISSION_SEARCH_ABSTRACT, $publication->getData('abstract'));
116 
117  $this->updateTextIndex($submissionId, SUBMISSION_SEARCH_DISCIPLINE, (array) $publication->getData('disciplines'));
118  $this->updateTextIndex($submissionId, SUBMISSION_SEARCH_TYPE, (array) $publication->getData('type'));
119  $this->updateTextIndex($submissionId, SUBMISSION_SEARCH_COVERAGE, (array) $publication->getData('coverage'));
120  // FIXME Index sponsors too?
121  }
122 
127  public function submissionFilesChanged($monograph) {
128  // Index galley files
129  $submissionFileDao = DAORegistry::getDAO('SubmissionFileDAO'); /* @var $submissionFileDao SubmissionFileDAO */
130  import('lib.pkp.classes.submission.SubmissionFile'); // Constants
131  import('classes.search.MonographSearch'); // Constants
132  $files = $submissionFileDao->getLatestRevisions($monograph->getId(), SUBMISSION_FILE_PROOF);
133 
134  foreach ($files as $file) {
135  if ($file->getFileId()) {
136  $this->updateFileIndex($monograph->getId(), SUBMISSION_SEARCH_GALLEY_FILE, $file->getFileId());
137  }
138  }
139  }
140 
144  public function clearSubmissionFiles($submission) {
145  $searchDao = DAORegistry::getDAO('MonographSearchDAO'); /* @var $searchDao MonographSearchDAO */
146  $searchDao->deleteSubmissionKeywords($submission->getId(), SUBMISSION_SEARCH_GALLEY_FILE);
147  }
148 
152  public function submissionChangesFinished() {
153  // Trigger a hook to let the indexing back-end know that
154  // the index may be updated.
156  'MonographSearchIndex::monographChangesFinished'
157  );
158 
159  // The default indexing back-end works completely synchronously
160  // and will therefore not do anything here.
161  }
162 
166  public function monographChangesFinished() {
167  if (Config::getVar('debug', 'deprecation_warnings')) trigger_error('Deprecated call to monographChangesFinished. Use submissionChangesFinished instead.');
168  $this->submissionChangesFinished();
169  }
170 
171 
176  public function rebuildIndex($log = false) {
177  // Clear index
178  if ($log) echo 'Clearing index ... ';
179  $searchDao = DAORegistry::getDAO('MonographSearchDAO'); /* @var $searchDao MonographSearchDAO */
180  // FIXME Abstract into MonographSearchDAO?
181  $searchDao->update('DELETE FROM submission_search_object_keywords');
182  $searchDao->update('DELETE FROM submission_search_objects');
183  $searchDao->update('DELETE FROM submission_search_keyword_list');
184  $searchDao->setCacheDir(Config::getVar('files', 'files_dir') . '/_db');
185  $searchDao->_dataSource->CacheFlush();
186  if ($log) echo "done\n";
187 
188  // Build index
189  $pressDao = DAORegistry::getDAO('PressDAO'); /* @var $pressDao PressDAO */
190  $submissionDao = DAORegistry::getDAO('SubmissionDAO'); /* @var $submissionDao SubmissionDAO */
191 
192  $presses = $pressDao->getAll();
193  while ($press = $presses->next()) {
194  $numIndexed = 0;
195 
196  if ($log) echo "Indexing \"", $press->getLocalizedName(), "\" ... ";
197 
198  $monographs = $submissionDao->getByContextId($press->getId());
199  while (!$monographs->eof()) {
200  $monograph = $monographs->next();
201  if ($monograph->getDatePublished()) {
202  $this->submissionMetadataChanged($monograph);
203  $this->submissionFilesChanged($monograph);
204  $numIndexed++;
205  }
206  }
207  $this->submissionChangesFinished();
208 
209  if ($log) echo $numIndexed, " monographs indexed\n";
210  }
211  }
212 }
213 
MonographSearchIndex\clearSubmissionFiles
clearSubmissionFiles($submission)
Definition: MonographSearchIndex.inc.php:144
SubmissionSearchIndex\filterKeywords
filterKeywords($text, $allowWildcards=false)
Definition: SubmissionSearchIndex.inc.php:32
MonographSearchIndex\updateTextIndex
updateTextIndex($monographId, $type, $text, $assocId=null)
Definition: MonographSearchIndex.inc.php:43
MonographSearchIndex\updateFileIndex
updateFileIndex($monographId, $type, $fileId)
Definition: MonographSearchIndex.inc.php:56
MonographSearchIndex\submissionFilesChanged
submissionFilesChanged($monograph)
Definition: MonographSearchIndex.inc.php:127
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
MonographSearchIndex\deleteTextIndex
deleteTextIndex($monographId, $type=null, $assocId=null)
Definition: MonographSearchIndex.inc.php:86
MonographSearchIndex\submissionChangesFinished
submissionChangesFinished()
Definition: MonographSearchIndex.inc.php:152
SearchFileParser\fromFile
static fromFile($file)
Definition: SearchFileParser.inc.php:106
MonographSearchIndex\indexObjectKeywords
indexObjectKeywords($objectId, $text, &$position)
Definition: MonographSearchIndex.inc.php:26
Config\getVar
static getVar($section, $key, $default=null)
Definition: Config.inc.php:35
SubmissionSearchIndex
Class to maintain a submission search index.
Definition: SubmissionSearchIndex.inc.php:25
MonographSearchIndex\submissionMetadataChanged
submissionMetadataChanged($submission)
Definition: MonographSearchIndex.inc.php:95
MonographSearchIndex
Class to add content to the monograph search index.
Definition: MonographSearchIndex.inc.php:18
MonographSearchIndex\monographChangesFinished
monographChangesFinished()
Definition: MonographSearchIndex.inc.php:166
HookRegistry\call
static call($hookName, $args=null)
Definition: HookRegistry.inc.php:86
MonographSearchIndex\rebuildIndex
rebuildIndex($log=false)
Definition: MonographSearchIndex.inc.php:176