Open Journal Systems  3.3.0
SubmissionSubjectDAO.inc.php
1 <?php
2 
17 import('lib.pkp.classes.controlledVocab.ControlledVocabDAO');
18 
19 define('CONTROLLED_VOCAB_SUBMISSION_SUBJECT', 'submissionSubject');
20 
22 
29  function build($publicationId, $assocType = ASSOC_TYPE_PUBLICATION) {
30  // may return an array of ControlledVocabs
31  return parent::_build(CONTROLLED_VOCAB_SUBMISSION_SUBJECT, $assocType, $publicationId);
32  }
33 
38  function getLocaleFieldNames() {
39  return array('submissionSubject');
40  }
41 
49  function getSubjects($publicationId, $locales = [], $assocType = ASSOC_TYPE_PUBLICATION) {
50  $result = [];
51 
52  $subjects = $this->build($publicationId, $assocType);
53  $submissionSubjectEntryDao = DAORegistry::getDAO('SubmissionSubjectEntryDAO'); /* @var $submissionSubjectEntryDao SubmissionSubjectEntryDAO */
54  $submissionSubjects = $submissionSubjectEntryDao->getByControlledVocabId($subjects->getId());
55  while ($subjectEntry = $submissionSubjects->next()) {
56  $subject = $subjectEntry->getSubject();
57  foreach ($subject 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 getAllUniqueSubjects() {
75  $subjects = array();
76 
77  $result = $this->retrieve(
78  'SELECT DISTINCT setting_value FROM controlled_vocab_entry_settings WHERE setting_name = ?', CONTROLLED_VOCAB_SUBMISSION_SUBJECT
79  );
80 
81  while (!$result->EOF) {
82  $subjects[] = $result->fields[0];
83  $result->MoveNext();
84  }
85 
86  $result->Close();
87  return $subjects;
88  }
89 
98  function insertSubjects($subjects, $publicationId, $deleteFirst = true, $assocType = ASSOC_TYPE_PUBLICATION) {
99  $subjectDao = DAORegistry::getDAO('SubmissionSubjectDAO'); /* @var $subjectDao SubmissionSubjectDAO */
100  $submissionSubjectEntryDao = DAORegistry::getDAO('SubmissionSubjectEntryDAO'); /* @var $submissionSubjectEntryDao SubmissionSubjectEntryDAO */
101  $currentSubjects = $this->build($publicationId, $assocType);
102 
103  if ($deleteFirst) {
104  $existingEntries = $subjectDao->enumerate($currentSubjects->getId(), CONTROLLED_VOCAB_SUBMISSION_SUBJECT);
105 
106  foreach ($existingEntries as $id => $entry) {
107  $entry = trim($entry);
108  $submissionSubjectEntryDao->deleteObjectById($id);
109  }
110  }
111  if (is_array($subjects)) { // localized, array of arrays
112 
113  foreach ($subjects as $locale => $list) {
114  if (is_array($list)) {
115  $list = array_unique($list); // Remove any duplicate Subjects
116  $i = 1;
117  foreach ($list as $subject) {
118  $subjectEntry = $submissionSubjectEntryDao->newDataObject();
119  $subjectEntry->setControlledVocabId($currentSubjects->getId());
120  $subjectEntry->setSubject(urldecode($subject), $locale);
121  $subjectEntry->setSequence($i);
122  $i++;
123  $submissionSubjectEntryDao->insertObject($subjectEntry);
124  }
125  }
126  }
127  }
128  }
129 }
130 
131 
SubmissionSubjectDAO
Operations for retrieving and modifying a submission's assigned subjects.
Definition: SubmissionSubjectDAO.inc.php:21
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
DAO\retrieve
& retrieve($sql, $params=false, $callHooks=true)
Definition: DAO.inc.php:85
SubmissionSubjectDAO\insertSubjects
insertSubjects($subjects, $publicationId, $deleteFirst=true, $assocType=ASSOC_TYPE_PUBLICATION)
Definition: SubmissionSubjectDAO.inc.php:98
ControlledVocabDAO
Operations for retrieving and modifying ControlledVocab objects.
Definition: ControlledVocabDAO.inc.php:19
SubmissionSubjectDAO\getLocaleFieldNames
getLocaleFieldNames()
Definition: SubmissionSubjectDAO.inc.php:38
SubmissionSubjectDAO\getAllUniqueSubjects
getAllUniqueSubjects()
Definition: SubmissionSubjectDAO.inc.php:74
SubmissionSubjectDAO\getSubjects
getSubjects($publicationId, $locales=[], $assocType=ASSOC_TYPE_PUBLICATION)
Definition: SubmissionSubjectDAO.inc.php:49
SubmissionSubjectDAO\build
build($publicationId, $assocType=ASSOC_TYPE_PUBLICATION)
Definition: SubmissionSubjectDAO.inc.php:29