Open Journal 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 
29  function build($publicationId, $assocType = ASSOC_TYPE_PUBLICATION) {
30  // may return an array of ControlledVocabs
31  return parent::_build(CONTROLLED_VOCAB_SUBMISSION_KEYWORD, $assocType, $publicationId);
32  }
33 
38  function getLocaleFieldNames() {
39  return array('submissionKeyword');
40  }
41 
49  function getKeywords($publicationId, $locales = [], $assocType = ASSOC_TYPE_PUBLICATION) {
50  $result = [];
51 
52  $keywords = $this->build($publicationId, $assocType);
53  $submissionKeywordEntryDao = DAORegistry::getDAO('SubmissionKeywordEntryDAO'); /* @var $submissionKeywordEntryDao SubmissionKeywordEntryDAO */
54  $submissionKeywords = $submissionKeywordEntryDao->getByControlledVocabId($keywords->getId());
55  while ($keywordEntry = $submissionKeywords->next()) {
56  $keyword = $keywordEntry->getKeyword();
57  foreach ($keyword as $locale => $value) {
58  if (empty($locales) || in_array($locale, $locales)) {
59  if (!array_key_exists($locale, $result)) {
60  $result[$locale] = [];
61  }
62  $result[$locale][] = $value;
63  }
64  }
65  }
66 
67  return $result;
68  }
69 
74  function getAllUniqueKeywords() {
75  $keywords = array();
76 
77  $result = $this->retrieve(
78  'SELECT DISTINCT setting_value FROM controlled_vocab_entry_settings WHERE setting_name = ?', CONTROLLED_VOCAB_SUBMISSION_KEYWORD
79  );
80 
81  while (!$result->EOF) {
82  $keywords[] = $result->fields[0];
83  $result->MoveNext();
84  }
85 
86  $result->Close();
87  return $keywords;
88  }
89 
98  function insertKeywords($keywords, $publicationId, $deleteFirst = true, $assocType = ASSOC_TYPE_PUBLICATION) {
99  $keywordDao = DAORegistry::getDAO('SubmissionKeywordDAO'); /* @var $keywordDao SubmissionKeywordDAO */
100  $submissionKeywordEntryDao = DAORegistry::getDAO('SubmissionKeywordEntryDAO'); /* @var $submissionKeywordEntryDao SubmissionKeywordEntryDAO */
101 
102  if ($deleteFirst) {
103  $currentKeywords = $this->deleteByPublicationId($publicationId);
104  } else {
105  $currentKeywords = $this->build($publicationId, $assocType);
106  }
107  if (is_array($keywords)) { // localized, array of arrays
108 
109  foreach ($keywords as $locale => $list) {
110  if (is_array($list)) {
111  $list = array_unique($list); // Remove any duplicate keywords
112  $i = 1;
113  foreach ($list as $keyword) {
114  $keywordEntry = $submissionKeywordEntryDao->newDataObject();
115  $keywordEntry->setControlledVocabId($currentKeywords->getId());
116  $keywordEntry->setKeyword(urldecode($keyword), $locale);
117  $keywordEntry->setSequence($i);
118  $i++;
119  $submissionKeywordEntryDao->insertObject($keywordEntry);
120  }
121  }
122  }
123  }
124  }
125 
132  public function deleteByPublicationId($publicationId) {
133  $keywordDao = DAORegistry::getDAO('SubmissionKeywordDAO'); /* @var $keywordDao SubmissionKeywordDAO */
134  $submissionKeywordEntryDao = DAORegistry::getDAO('SubmissionKeywordEntryDAO'); /* @var $submissionKeywordEntryDao SubmissionKeywordEntryDAO */
135  $currentKeywords = $this->build($publicationId);
136 
137  $existingEntries = $keywordDao->enumerate($currentKeywords->getId(), CONTROLLED_VOCAB_SUBMISSION_KEYWORD);
138  foreach ($existingEntries as $id => $entry) {
139  $entry = trim($entry);
140  $entryObj = $submissionKeywordEntryDao->getById($id);
141  $submissionKeywordEntryDao->deleteObjectById($id);
142  }
143 
144  return $currentKeywords;
145  }
146 
147 }
148 
149 
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
SubmissionKeywordDAO\getLocaleFieldNames
getLocaleFieldNames()
Definition: SubmissionKeywordDAO.inc.php:38
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:74
SubmissionKeywordDAO\insertKeywords
insertKeywords($keywords, $publicationId, $deleteFirst=true, $assocType=ASSOC_TYPE_PUBLICATION)
Definition: SubmissionKeywordDAO.inc.php:98
SubmissionKeywordDAO\build
build($publicationId, $assocType=ASSOC_TYPE_PUBLICATION)
Definition: SubmissionKeywordDAO.inc.php:29
SubmissionKeywordDAO\deleteByPublicationId
deleteByPublicationId($publicationId)
Definition: SubmissionKeywordDAO.inc.php:132
SubmissionKeywordDAO\getKeywords
getKeywords($publicationId, $locales=[], $assocType=ASSOC_TYPE_PUBLICATION)
Definition: SubmissionKeywordDAO.inc.php:49