16 import(
'lib.pkp.classes.db.SchemaDAO');
17 import(
'lib.pkp.classes.plugins.PKPPubIdPluginDAO');
18 import(
'classes.publication.Publication');
19 import(
'lib.pkp.classes.services.PKPSchemaService');
35 public $controlledVocabProps = [
'disciplines',
'keywords',
'languages',
'subjects',
'supportingAgencies'];
49 public function _fromRow($primaryRow) {
50 $publication = parent::_fromRow($primaryRow);
53 $publication->setData(
'authors', iterator_to_array(
54 Services::get(
'author')->getMany([
'publicationIds' => $publication->getId()])
59 $publication->setData(
'keywords', $submissionKeywordDao->getKeywords($publication->getId()));
61 $publication->setData(
'subjects', $submissionSubjectDao->getSubjects($publication->getId()));
63 $publication->setData(
'disciplines', $submissionDisciplineDao->getDisciplines($publication->getId()));
65 $publication->setData(
'languages', $submissionLanguageDao->getLanguages($publication->getId()));
67 $publication->setData(
'supportingAgencies', $submissionAgencyDao->getAgencies($publication->getId()));
71 $publication->setData(
'categoryIds', array_map(
73 return (
int) $category->getId();
75 $categoryDao->getByPublicationId($publication->getId())->toArray()
87 $controlledVocabKeyedArray = array_flip($this->controlledVocabProps);
89 $publication->_data = array_diff_key($publication->_data, $controlledVocabKeyedArray);
91 parent::insertObject($publication);
99 $submissionKeywordDao->insertKeywords($value, $publication->getId());
103 $submissionSubjectDao->insertSubjects($value, $publication->getId());
107 $submissionDisciplineDao->insertDisciplines($value, $publication->getId());
111 $submissionLanguageDao->insertLanguages($value, $publication->getId());
113 case 'supportingAgencies':
115 $submissionAgencyDao->insertAgencies($value, $publication->getId());
122 if (!empty($publication->getData(
'categoryIds'))) {
124 foreach ($publication->getData(
'categoryIds') as $categoryId) {
125 $categoryDao->insertPublicationAssignment($categoryId, $publication->getId());
129 return $publication->getId();
138 $controlledVocabKeyedArray = array_flip($this->controlledVocabProps);
140 $publication->_data = array_diff_key($publication->_data, $controlledVocabKeyedArray);
142 parent::updateObject($publication);
150 $submissionKeywordDao->insertKeywords($value, $publication->getId());
154 $submissionSubjectDao->insertSubjects($value, $publication->getId());
158 $submissionDisciplineDao->insertDisciplines($value, $publication->getId());
162 $submissionLanguageDao->insertLanguages($value, $publication->getId());
164 case 'supportingAgencies':
166 $submissionAgencyDao->insertAgencies($value, $publication->getId());
174 $categoryDao->deletePublicationAssignments($publication->getId());
175 if (!empty($publication->getData(
'categoryIds'))) {
176 foreach ($publication->getData(
'categoryIds') as $categoryId) {
177 $categoryDao->insertPublicationAssignment($categoryId, $publication->getId());
186 parent::deleteById($publicationId);
189 $authorsIterator =
Services::get(
'author')->getMany([
'publicationIds' => $publicationId]);
190 foreach ($authorsIterator as $author) {
197 $submissionKeywordDao->insertKeywords([], $publicationId);
199 $submissionSubjectDao->insertSubjects([], $publicationId);
201 $submissionDisciplineDao->insertDisciplines([], $publicationId);
203 $submissionLanguageDao->insertLanguages([], $publicationId);
205 $submissionAgencyDao->insertAgencies([], $publicationId);
209 $categoryDao->deletePublicationAssignments($publicationId);
213 $citationDao->deleteByPublicationId($publicationId);
219 public function pubIdExists($pubIdType, $pubId, $excludePubObjectId, $contextId) {
222 FROM publication_settings ps
223 LEFT JOIN publications p ON p.publication_id = ps.publication_id
224 LEFT JOIN submissions s ON p.submission_id = s.submission_id
225 WHERE ps.setting_name = ? and ps.setting_value = ? and s.submission_id <> ? AND s.context_id = ?',
227 'pub-id::'.$pubIdType,
232 (
int) $excludePubObjectId,
236 $returner = $result->fields[0] ? true :
false;
244 function changePubId($pubObjectId, $pubIdType, $pubId) {
246 'publication_id',
'locale',
'setting_name'
248 $updateArray = array(
249 'publication_id' => (
int) $pubObjectId,
251 'setting_name' =>
'pub-id::'.$pubIdType,
252 'setting_value' => (
string)$pubId
254 $this->
replace(
'publication_settings', $updateArray, $idFields);
261 public function deletePubId($pubObjectId, $pubIdType) {
263 'DELETE FROM publication_settings ps
264 WHERE ps.publication_id = ?
265 AND ps.setting_name= ?',
268 'pubid::' . $pubIdType,
282 'DELETE ps FROM publication_settings ps
283 LEFT JOIN publications p ON p.publication_id = ps.publication_id
284 LEFT JOIN submissions s ON s.submission_id = p.submission_id
285 WHERE ps.setting_name = ?
286 AND s.context_id = ?',
288 'pub-id::' . $pubIdType,
299 'DELETE FROM publication_settings
300 USING publication_settings ps
301 LEFT JOIN publications p ON p.publication_id = ps.publication_id
302 LEFT JOIN submissions s ON s.submission_id = p.submission_id
303 WHERE ps.setting_name = ?
305 AND ps.publication_id = publication_settings.publication_id
306 AND ps.locale = publication_settings.locale
307 AND ps.setting_name = publication_settings.setting_name',
309 'pub-id::' . $pubIdType,
314 default:
fatalError(
"Unknown database type!");