build($publicationId, $assocType); $submissionAgencyEntryDao = DAORegistry::getDAO('SubmissionAgencyEntryDAO'); /** @var SubmissionAgencyEntryDAO $submissionAgencyEntryDao */ $submissionAgencies = $submissionAgencyEntryDao->getByControlledVocabId($agencies->getId()); while ($agencyEntry = $submissionAgencies->next()) { $agency = $agencyEntry->getAgency(); foreach ($agency as $locale => $value) { if (empty($locales) || in_array($locale, $locales)) { $result[$locale][] = $value; } } } return $result; } /** * Get an array of all of the submission's agencies * * @return array */ public function getAllUniqueAgencies() { $result = $this->retrieve('SELECT DISTINCT setting_value FROM controlled_vocab_entry_settings WHERE setting_name = ?', [self::CONTROLLED_VOCAB_SUBMISSION_AGENCY]); $agencies = []; foreach ($result as $row) { $agencies[] = $row->setting_value; } return $agencies; } /** * Add an array of agencies * * @param array $agencies List of agencies. * @param int $publicationId Submission ID. * @param bool $deleteFirst True iff existing agencies should be removed first. * @param int $assocType DO NOT USE: For <3.1 to 3.x migration pkp/pkp-lib#3572 pkp/pkp-lib#6213 */ public function insertAgencies($agencies, $publicationId, $deleteFirst = true, $assocType = PKPApplication::ASSOC_TYPE_PUBLICATION) { $agencyDao = DAORegistry::getDAO('SubmissionAgencyDAO'); /** @var SubmissionAgencyDAO $agencyDao */ $submissionAgencyEntryDao = DAORegistry::getDAO('SubmissionAgencyEntryDAO'); /** @var SubmissionAgencyEntryDAO $submissionAgencyEntryDao */ $currentAgencies = $this->build($publicationId, $assocType); if ($deleteFirst) { $existingEntries = $agencyDao->enumerate($currentAgencies->getId(), self::CONTROLLED_VOCAB_SUBMISSION_AGENCY); foreach ($existingEntries as $id => $entry) { $entry = trim($entry); $submissionAgencyEntryDao->deleteObjectById($id); } } if (is_array($agencies)) { // localized, array of arrays foreach ($agencies as $locale => $list) { if (is_array($list)) { $list = array_unique($list); // Remove any duplicate keywords $i = 1; foreach ($list as $agency) { $agencyEntry = $submissionAgencyEntryDao->newDataObject(); $agencyEntry->setControlledVocabId($currentAgencies->getId()); $agencyEntry->setAgency($agency, $locale); $agencyEntry->setSequence($i); $i++; $submissionAgencyEntryDao->insertObject($agencyEntry); } } } } } } if (!PKP_STRICT_MODE) { class_alias('\PKP\submission\SubmissionAgencyDAO', '\SubmissionAgencyDAO'); define('CONTROLLED_VOCAB_SUBMISSION_AGENCY', SubmissionAgencyDAO::CONTROLLED_VOCAB_SUBMISSION_AGENCY); }