build($publicationId, $assocType); $submissionDisciplineEntryDao = DAORegistry::getDAO('SubmissionDisciplineEntryDAO'); /** @var SubmissionDisciplineEntryDAO $submissionDisciplineEntryDao */ $submissionDisciplines = $submissionDisciplineEntryDao->getByControlledVocabId($disciplines->getId()); while ($disciplineEntry = $submissionDisciplines->next()) { $discipline = $disciplineEntry->getDiscipline(); foreach ($discipline as $locale => $value) { if (empty($locales) || in_array($locale, $locales)) { $result[$locale][] = $value; } } } return $result; } /** * Get an array of all of the submission's disciplines * * @return array */ public function getAllUniqueDisciplines() { $result = $this->retrieve('SELECT DISTINCT setting_value FROM controlled_vocab_entry_settings WHERE setting_name = ?', [self::CONTROLLED_VOCAB_SUBMISSION_DISCIPLINE]); $disciplines = []; foreach ($result as $row) { $disciplines[] = $row->setting_value; } return $disciplines; } /** * Add an array of disciplines * * @param array $disciplines * @param int $publicationId * @param bool $deleteFirst * @param int $assocType DO NOT USE: For <3.1 to 3.x migration pkp/pkp-lib#3572 pkp/pkp-lib#6213 */ public function insertDisciplines($disciplines, $publicationId, $deleteFirst = true, $assocType = PKPApplication::ASSOC_TYPE_PUBLICATION) { $disciplineDao = DAORegistry::getDAO('SubmissionDisciplineDAO'); /** @var SubmissionDisciplineDAO $disciplineDao */ $submissionDisciplineEntryDao = DAORegistry::getDAO('SubmissionDisciplineEntryDAO'); /** @var SubmissionDisciplineEntryDAO $submissionDisciplineEntryDao */ $currentDisciplines = $this->build($publicationId, $assocType); if ($deleteFirst) { $existingEntries = $disciplineDao->enumerate($currentDisciplines->getId(), self::CONTROLLED_VOCAB_SUBMISSION_DISCIPLINE); foreach ($existingEntries as $id => $entry) { $entry = trim($entry); $submissionDisciplineEntryDao->deleteObjectById($id); } } if (is_array($disciplines)) { // localized, array of arrays foreach ($disciplines as $locale => $list) { if (is_array($list)) { $list = array_unique($list); // Remove any duplicate keywords $i = 1; foreach ($list as $discipline) { $disciplineEntry = $submissionDisciplineEntryDao->newDataObject(); $disciplineEntry->setControlledVocabId($currentDisciplines->getId()); $disciplineEntry->setDiscipline($discipline, $locale); $disciplineEntry->setSequence($i); $i++; $submissionDisciplineEntryDao->insertObject($disciplineEntry); } } } } } } if (!PKP_STRICT_MODE) { class_alias('\PKP\submission\SubmissionDisciplineDAO', '\SubmissionDisciplineDAO'); define('CONTROLLED_VOCAB_SUBMISSION_DISCIPLINE', SubmissionDisciplineDAO::CONTROLLED_VOCAB_SUBMISSION_DISCIPLINE); }