Open Preprint Systems  3.3.0
SubmissionKeywordDAO.inc.php
1 <?php
2 
17 import('lib.pkp.classes.controlledVocab.ControlledVocabDAO');
18 
19 define('CONTROLLED_VOCAB_SUBMISSION_KEYWORD', 'submissionKeyword');
20 
22 
28  function build($publicationId) {
29  // may return an array of ControlledVocabs
30  return parent::_build(CONTROLLED_VOCAB_SUBMISSION_KEYWORD, ASSOC_TYPE_PUBLICATION, $publicationId);
31  }
32 
37  function getLocaleFieldNames() {
38  return array('submissionKeyword');
39  }
40 
47  function getKeywords($publicationId, $locales = []) {
48  $result = [];
49 
50  $keywords = $this->build($publicationId);
51  $submissionKeywordEntryDao = DAORegistry::getDAO('SubmissionKeywordEntryDAO'); /* @var $submissionKeywordEntryDao SubmissionKeywordEntryDAO */
52  $submissionKeywords = $submissionKeywordEntryDao->getByControlledVocabId($keywords->getId());
53  while ($keywordEntry = $submissionKeywords->next()) {
54  $keyword = $keywordEntry->getKeyword();
55  foreach ($keyword as $locale => $value) {
56  if (empty($locales) || in_array($locale, $locales)) {
57  if (!array_key_exists($locale, $result)) {
58  $result[$locale] = [];
59  }
60  $result[$locale][] = $value;
61  }
62  }
63  }
64 
65  return $result;
66  }
67 
72  function getAllUniqueKeywords() {
73  $keywords = array();
74 
75  $result = $this->retrieve(
76  'SELECT DISTINCT setting_value FROM controlled_vocab_entry_settings WHERE setting_name = ?', CONTROLLED_VOCAB_SUBMISSION_KEYWORD
77  );
78 
79  while (!$result->EOF) {
80  $keywords[] = $result->fields[0];
81  $result->MoveNext();
82  }
83 
84  $result->Close();
85  return $keywords;
86  }
87 
95  function insertKeywords($keywords, $publicationId, $deleteFirst = true) {
96  $keywordDao = DAORegistry::getDAO('SubmissionKeywordDAO'); /* @var $keywordDao SubmissionKeywordDAO */
97  $submissionKeywordEntryDao = DAORegistry::getDAO('SubmissionKeywordEntryDAO'); /* @var $submissionKeywordEntryDao SubmissionKeywordEntryDAO */
98 
99  if ($deleteFirst) {
100  $currentKeywords = $this->deleteByPublicationId($publicationId);
101  } else {
102  $currentKeywords = $this->build($publicationId);
103  }
104  if (is_array($keywords)) { // localized, array of arrays
105 
106  foreach ($keywords as $locale => $list) {
107  if (is_array($list)) {
108  $list = array_unique($list); // Remove any duplicate keywords
109  $i = 1;
110  foreach ($list as $keyword) {
111  $keywordEntry = $submissionKeywordEntryDao->newDataObject();
112  $keywordEntry->setControlledVocabId($currentKeywords->getId());
113  $keywordEntry->setKeyword(urldecode($keyword), $locale);
114  $keywordEntry->setSequence($i);
115  $i++;
116  $submissionKeywordEntryDao->insertObject($keywordEntry);
117  }
118  }
119  }
120  }
121  }
122 
129  public function deleteByPublicationId($publicationId) {
130  $keywordDao = DAORegistry::getDAO('SubmissionKeywordDAO'); /* @var $keywordDao SubmissionKeywordDAO */
131  $submissionKeywordEntryDao = DAORegistry::getDAO('SubmissionKeywordEntryDAO'); /* @var $submissionKeywordEntryDao SubmissionKeywordEntryDAO */
132  $currentKeywords = $this->build($publicationId);
133 
134  $existingEntries = $keywordDao->enumerate($currentKeywords->getId(), CONTROLLED_VOCAB_SUBMISSION_KEYWORD);
135  foreach ($existingEntries as $id => $entry) {
136  $entry = trim($entry);
137  $entryObj = $submissionKeywordEntryDao->getById($id);
138  $submissionKeywordEntryDao->deleteObjectById($id);
139  }
140 
141  return $currentKeywords;
142  }
143 
144 }
145 
146 
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
SubmissionKeywordDAO\getKeywords
getKeywords($publicationId, $locales=[])
Definition: SubmissionKeywordDAO.inc.php:47
SubmissionKeywordDAO\getLocaleFieldNames
getLocaleFieldNames()
Definition: SubmissionKeywordDAO.inc.php:37
DAO\retrieve
& retrieve($sql, $params=false, $callHooks=true)
Definition: DAO.inc.php:85
ControlledVocabDAO
Operations for retrieving and modifying ControlledVocab objects.
Definition: ControlledVocabDAO.inc.php:19
SubmissionKeywordDAO
Operations for retrieving and modifying a submission's assigned keywords.
Definition: SubmissionKeywordDAO.inc.php:21
SubmissionKeywordDAO\getAllUniqueKeywords
getAllUniqueKeywords()
Definition: SubmissionKeywordDAO.inc.php:72
SubmissionKeywordDAO\insertKeywords
insertKeywords($keywords, $publicationId, $deleteFirst=true)
Definition: SubmissionKeywordDAO.inc.php:95
SubmissionKeywordDAO\build
build($publicationId)
Definition: SubmissionKeywordDAO.inc.php:28
SubmissionKeywordDAO\deleteByPublicationId
deleteByPublicationId($publicationId)
Definition: SubmissionKeywordDAO.inc.php:129