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