<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE data SYSTEM "../../../lib/pkp/dtd/xmlData.dtd">

<!--
  * dbscripts/xml/upgrade/3.2.0_versioning.xml
  *
  * Copyright (c) 2013-2021 Simon Fraser University
  * Copyright (c) 2003-2021 John Willinsky
  * Distributed under the GNU GPL v3. For full terms see the file docs/COPYING.
  *
  * Split some submission data into publications and migrate associated data
  * so that it points to the correct publication instead of the submission.
  *
  -->

<data>
	<sql>
		<!-- change date_published from datetime to date before migrating -->
		<query driver="mysql,mysqli">ALTER TABLE temp_published_submissions MODIFY COLUMN date_published DATE NULL</query>
		<query driver="postgres,postgres64,postgres7,postgres8,postgres9">ALTER TABLE temp_published_submissions ALTER COLUMN date_published TYPE DATE</query>

		<!-- migrate data to new publications table -->
		<query>
			INSERT INTO publications (date_published, last_modified, locale, seq, series_id, series_position, submission_id, status, version)
				SELECT COALESCE(ps.date_published, NULL), s.last_modified, s.locale, COALESCE(ps.seq, 0), s.series_id, s.series_position, s.submission_id, s.status, 1
				FROM temp_submissions as s
				LEFT JOIN temp_published_submissions as ps
					ON (s.submission_id = ps.submission_id)
				GROUP BY s.submission_id, ps.date_published, s.last_modified, ps.seq, s.series_id, s.series_position, s.locale, s.status;
		</query>
		<query>
			UPDATE publications as p
			SET primary_contact_id = (
				SELECT a.author_id
				FROM temp_authors as a
				WHERE a.submission_id = p.submission_id
					AND a.primary_contact = 1
				LIMIT 1
			)
		</query>

		<!-- set the current_publication_id column in submissions -->
		<query>
			UPDATE submissions as s
			SET current_publication_id = (
				SELECT p.publication_id
				FROM publications as p
				WHERE s.submission_id = p.submission_id
			)
		</query>

		<!-- migrate the edited_volume column to work_type -->
		<query>
			UPDATE submissions as s
			SET work_type = (
				SELECT ts.edited_volume
				FROM temp_submissions as ts
				WHERE s.submission_id = ts.submission_id
			)
		</query>

		<!-- set the publication_id in chapters -->
		<query>
			UPDATE submission_chapters as sc
			SET publication_id = (
				SELECT s.current_publication_id
				FROM temp_submission_chapters as tsc
				LEFT JOIN submissions as s
					ON (tsc.submission_id = s.submission_id)
				WHERE sc.chapter_id = tsc.chapter_id
			)
		</query>

		<!-- set the publication_id in publication formats -->
		<query>
			UPDATE publication_formats as pf
			SET publication_id = (
				SELECT s.current_publication_id
				FROM temp_publication_formats as tpf
				LEFT JOIN submissions as s
					ON (tpf.submission_id = s.submission_id)
				WHERE pf.publication_format_id = tpf.publication_format_id
			)
		</query>

		<!-- migrate submission_settings to publication_settings -->
		<query>
			INSERT INTO publication_settings(publication_id, locale, setting_name, setting_value)
				SELECT s.current_publication_id, ss.locale, ss.setting_name, ss.setting_value
				FROM submissions as s
				LEFT JOIN submission_settings as ss
					ON (ss.submission_id = s.submission_id)
				WHERE (
					setting_name IN ('abstract', 'cleanTitle', 'copyrightHolder', 'copyrightYear', 'coverage', 'coverImage', 'licenseUrl', 'locale', 'prefix', 'rights', 'source', 'subtitle', 'title', 'type')
					OR setting_name LIKE '%pub-id%'
				)
		</query>
		<query>
			DELETE FROM submission_settings
			WHERE (
				setting_name IN ('abstract', 'cleanTitle', 'copyrightHolder', 'copyrightYear', 'coverage', 'coverImage', 'licenseUrl', 'locale', 'prefix', 'rights', 'source', 'subtitle', 'title', 'type')
				OR setting_name LIKE '%pub-id%'
			)
		</query>

		<!-- migrate some data from submissions to publication_settings -->
		<query>
			INSERT INTO publication_settings(publication_id, setting_name, setting_value)
				SELECT s.current_publication_id, 'language', ts.language
				FROM submissions as s
				LEFT JOIN temp_submissions as ts
					ON s.submission_id = ts.submission_id
				WHERE ts.language != ''
		</query>
		<query>
			INSERT INTO publication_settings(publication_id, setting_name, setting_value)
				SELECT s.current_publication_id, 'citationsRaw', ts.citations
				FROM submissions as s
				LEFT JOIN temp_submissions as ts
					ON s.submission_id = ts.submission_id
				WHERE ts.citations IS NOT NULL
		</query>
		<query>
			INSERT INTO publication_settings(publication_id, setting_name, setting_value)
				SELECT s.current_publication_id, 'pages', ts.pages
				FROM submissions as s
				LEFT JOIN temp_submissions as ts
					ON s.submission_id = ts.submission_id
				WHERE ts.pages IS NOT NULL
		</query>
		<query>
			INSERT INTO publication_settings(publication_id, setting_name, setting_value)
				SELECT s.current_publication_id, 'hide_author', ts.hide_author
				FROM submissions as s
				LEFT JOIN temp_submissions as ts
					ON s.submission_id = ts.submission_id
				WHERE ts.hide_author != 0
		</query>

		<!-- migrate audience details from published_submissions to submission_settings -->
		<query>
			INSERT INTO submission_settings(submission_id, setting_name, setting_value)
				SELECT ps.submission_id, 'audience', ps.audience
				FROM temp_published_submissions as ps
				WHERE ps.audience IS NOT NULL
		</query>
		<query>
			INSERT INTO submission_settings(submission_id, setting_name, setting_value)
				SELECT ps.submission_id, 'audience_range_qualifier', ps.audience_range_qualifier
				FROM temp_published_submissions as ps
				WHERE ps.audience_range_qualifier IS NOT NULL
		</query>
		<query>
			INSERT INTO submission_settings(submission_id, setting_name, setting_value)
				SELECT ps.submission_id, 'audience_range_from', ps.audience_range_from
				FROM temp_published_submissions as ps
				WHERE ps.audience_range_from IS NOT NULL
		</query>
		<query>
			INSERT INTO submission_settings(submission_id, setting_name, setting_value)
				SELECT ps.submission_id, 'audience_range_to', ps.audience_range_to
				FROM temp_published_submissions as ps
				WHERE ps.audience_range_to IS NOT NULL
		</query>
		<query>
			INSERT INTO submission_settings(submission_id, setting_name, setting_value)
				SELECT ps.submission_id, 'audience_range_exact', ps.audience_range_exact
				FROM temp_published_submissions as ps
				WHERE ps.audience_range_exact IS NOT NULL
		</query>

		<!-- move some author data to settings table -->
		<query driver="postgres,postgres64,postgres7,postgres8,postgres9">ALTER TABLE author_settings ALTER COLUMN setting_type DROP NOT NULL</query>
		<query>
			INSERT INTO author_settings(author_id, setting_name, setting_value)
			SELECT ta.author_id, 'country', ta.country
			FROM temp_authors as ta
			WHERE ta.country IS NOT NULL
		</query>
		<query>
			INSERT INTO author_settings(author_id, setting_name, setting_value)
			SELECT ta.author_id, 'url', ta.url
			FROM temp_authors as ta
			WHERE ta.url IS NOT NULL
		</query>
		<!-- connect authors to publications -->
		<query driver="postgres,postgres64,postgres7,postgres8,postgres9">
			UPDATE authors
			SET publication_id = s.current_publication_id
			FROM submissions s, temp_authors ta
			WHERE authors.author_id = ta.author_id AND s.submission_id = ta.submission_id
		</query>
		<query driver="mysql,mysqli">
			UPDATE authors as a
			SET a.publication_id = (
				SELECT s.current_publication_id
				FROM submissions as s
				LEFT JOIN temp_authors as ta
					ON s.submission_id = ta.submission_id
				WHERE a.author_id = ta.author_id
			)
		</query>

		<!-- connect categories to publications -->
		<query>
			INSERT INTO publication_categories(publication_id, category_id)
				SELECT s.current_publication_id, tsc.category_id
				FROM temp_submission_categories as tsc
				LEFT JOIN submissions as s
					ON s.submission_id = tsc.submission_id
				WHERE s.current_publication_id IS NOT NULL
		</query>

		<!-- connect controlled vocab metadata to publications, 1048585 = ASSOC_TYPE_SUBMISSION, 1048588 = ASSOC_TYPE_PUBLICATION -->
		<query driver="postgres,postgres64,postgres7,postgres8,postgres9">
			UPDATE controlled_vocabs
			SET assoc_type = 1048588, assoc_id = s.current_publication_id
			FROM submissions s
			WHERE assoc_type = 1048585 AND assoc_id = s.submission_id
		</query>
		<query driver="mysql,mysqli">
			UPDATE controlled_vocabs AS cv,
				submissions AS s
			SET cv.assoc_type = 1048588, cv.assoc_id = s.current_publication_id
			WHERE cv.assoc_type = 1048585 AND s.submission_id = cv.assoc_id
		</query>

		<!-- connect citations to publications -->
		<query driver="postgres,postgres64,postgres7,postgres8,postgres9">
			UPDATE citations
			SET publication_id = s.current_publication_id
			FROM submissions s
			LEFT JOIN temp_citations as tc ON (s.submission_id = tc.submission_id)
			WHERE citations.citation_id = tc.citation_id
		</query>
		<query driver="mysql,mysqli">
			UPDATE citations as c
			SET c.publication_id = (
				SELECT s.current_publication_id
				FROM submissions as s
				LEFT JOIN temp_citations as tc
					ON s.submission_id = tc.submission_id
				WHERE c.citation_id = tc.citation_id
			)
		</query>

		<!-- update the DOI setting names -->
		<query>
			UPDATE plugin_settings
			SET setting_name='doiPublicationSuffixPattern'
			WHERE setting_name='doiSubmissionSuffixPattern'
				AND plugin_name='doipubidplugin'
		</query>
		<query>
			UPDATE plugin_settings
			SET setting_name='enablePublicationDoi'
			WHERE setting_name='enableSubmissionDoi'
				AND plugin_name='doipubidplugin'
		</query>


		<!-- update the URN setting names -->
		<query>
			UPDATE plugin_settings
			SET setting_name='urnPublicationSuffixPattern'
			WHERE setting_name='urnSubmissionSuffixPattern'
				AND plugin_name='urnpubidplugin'
		</query>
		<query>
			UPDATE plugin_settings
			SET setting_name='enablePublicationURN'
			WHERE setting_name='enableSubmissionURN'
				AND plugin_name='urnpubidplugin'
		</query>

		<!-- remove deprecated and temporary tables. should be last commands -->
		<query>DROP TABLE submission_categories</query>
		<query>DROP TABLE published_submissions</query>
		<query>DROP TABLE temp_authors</query>
		<query>DROP TABLE temp_submissions</query>
		<query>DROP TABLE temp_submission_categories</query>
		<query>DROP TABLE temp_publication_formats</query>
		<query>DROP TABLE temp_submission_chapters</query>
		<query>DROP TABLE temp_published_submissions</query>
		<query>DROP TABLE temp_citations</query>
	</sql>
</data>
