17 import(
'lib.pkp.classes.install.Installer');
26 function __construct($params, $installFile =
'upgrade.xml', $isPlugin =
false) {
27 parent::__construct($installFile, $params, $isPlugin);
49 $submissionSearchIndex->rebuildIndex();
57 function clearCssCache() {
60 $templateMgr->clearCssCache();
68 function setFileUploader() {
72 $journalIterator = $journalDao->getAll();
73 $driver = $submissionFileDao->getDriver();
74 while ($journal = $journalIterator->next()) {
75 $managerUserGroup = $userGroupDao->getDefaultByRoleId($journal->getId(), ROLE_ID_MANAGER);
76 $managerUsers = $userGroupDao->getUsersById($managerUserGroup->getId(), $journal->getId());
77 $creatorUserId = $managerUsers->next()->getId();
81 $submissionFileDao->update(
'UPDATE submission_files sf, submissions s SET sf.uploader_user_id = ? WHERE sf.uploader_user_id IS NULL AND sf.submission_id = s.submission_id AND s.context_id = ?', array($creatorUserId, $journal->getId()));
88 $submissionFileDao->update(
'UPDATE submission_files SET uploader_user_id = ? FROM submissions s WHERE submission_files.uploader_user_id IS NULL AND submission_files.submission_id = s.submission_id AND s.context_id = ?', array($creatorUserId, $journal->getId()));
92 unset($managerUsers, $managerUserGroup);
101 function setFileName() {
106 $contexts = $journalDao->getAll();
107 while ($context = $contexts->next()) {
108 $submissions = $submissionDao->getByContextId($context->getId());
109 while ($submission = $submissions->next()) {
110 $submissionFiles = $submissionFileDao->getBySubmissionId($submission->getId());
111 foreach ($submissionFiles as $submissionFile) {
112 $reviewStage = $submissionFile->getFileStage() == SUBMISSION_FILE_REVIEW_FILE ||
113 $submissionFile->getFileStage() == SUBMISSION_FILE_REVIEW_ATTACHMENT ||
114 $submissionFile->getFileStage() == SUBMISSION_FILE_REVIEW_REVISION;
122 $submissionFileDao->updateObject($submissionFile);
133 function convertCommentsToEditor() {
140 import(
'lib.pkp.classes.security.Role');
142 $commentsResult = $submissionDao->retrieve(
143 'SELECT s.submission_id, s.context_id, s.comments_to_ed, s.date_submitted
144 FROM submissions_tmp s
145 WHERE s.comments_to_ed IS NOT NULL AND s.comments_to_ed != \'\''
147 while (!$commentsResult->EOF) {
148 $row = $commentsResult->getRowAssoc(
false);
150 if ($comments_to_ed !=
""){
152 $authorAssignmentsResult = $stageAssignmetDao->getBySubmissionAndRoleId($row[
'submission_id'], ROLE_ID_AUTHOR);
153 if ($authorAssignmentsResult->getCount() != 0) {
155 $userId = $authorAssignmentsResult->next()->getUserId();
157 $managerUserGroup = $userGroupDao->getDefaultByRoleId($row[
'context_id'], ROLE_ID_MANAGER);
158 $managerUsers = $userGroupDao->getUsersById($managerUserGroup->getId(), $row[
'context_id']);
159 $userId = $managerUsers->next()->getId();
163 $query = $queryDao->newDataObject();
164 $query->setAssocType(ASSOC_TYPE_SUBMISSION);
165 $query->setAssocId($row[
'submission_id']);
166 $query->setStageId(WORKFLOW_STAGE_ID_SUBMISSION);
167 $query->setSequence(REALLY_BIG_NUMBER);
169 $queryDao->insertObject($query);
170 $queryDao->resequence(ASSOC_TYPE_SUBMISSION, $row[
'submission_id']);
171 $queryDao->insertParticipant($query->getId(), $userId);
173 $queryId = $query->getId();
175 $note = $noteDao->newDataObject();
176 $note->setUserId($userId);
177 $note->setAssocType(ASSOC_TYPE_QUERY);
178 $note->setTitle(
'Comments for the Editor');
179 $note->setContents($comments_to_ed);
180 $note->setDateCreated(strtotime($row[
'date_submitted']));
181 $note->setDateModified(strtotime($row[
'date_submitted']));
182 $note->setAssocId($queryId);
183 $noteDao->insertObject($note);
185 $commentsResult->MoveNext();
187 $commentsResult->Close();
190 $submissionDao->update(
'DROP TABLE submissions_tmp');
200 function localizeIssueCoverImages() {
204 $issueDao->update(
'DELETE FROM issue_settings WHERE setting_name = \'coverImage\' AND setting_type = \'object\'');
207 $issueDao->update(
'DELETE FROM issue_settings WHERE setting_name = \'coverImage\' AND locale = \'\' AND setting_value = \'\'');
208 $issueDao->update(
'DELETE FROM issue_settings WHERE setting_name = \'coverImageAltText\' AND locale = \'\' AND setting_value = \'\'');
211 $result = $issueDao->retrieve(
212 'SELECT DISTINCT iss1.issue_id, iss1.setting_value, i.journal_id
213 FROM issue_settings iss1
214 LEFT JOIN issues i ON (i.issue_id = iss1.issue_id)
215 JOIN issue_settings iss2 ON (iss2.issue_id = iss1.issue_id AND iss2.setting_name = \'coverImage\')
216 WHERE iss1.setting_name = \'fileName\''
219 while (!$result->EOF) {
220 $row = $result->GetRowAssoc(
false);
221 $oldFileName = $row[
'setting_value'];
222 if ($publicFileManager->fileExists($publicFileManager->getContextFilesPath($row[
'journal_id']) .
'/' . $oldFileName)) {
223 $publicFileManager->removeContextFile($row[
'journal_id'], $oldFileName);
225 $issueDao->update(
'DELETE FROM issue_settings WHERE issue_id = ? AND setting_name = \'fileName\' AND setting_value = ?', array((
int) $row[
'issue_id'], $oldFileName));
231 $result = $issueDao->retrieve(
232 'SELECT iss.issue_id, iss.setting_value, j.journal_id, j.primary_locale
233 FROM issue_settings iss, issues i, journals j
234 WHERE iss.setting_name = \'coverImage\' AND iss.locale = \'\'
235 AND i.issue_id = iss.issue_id AND j.journal_id = i.journal_id'
240 while (!$result->EOF) {
241 $row = $result->GetRowAssoc(
false);
242 $oldFileName = $row[
'setting_value'];
243 $newFileName = str_replace(
'.',
'_' . $row[
'primary_locale'] .
'.', $oldFileName);
244 if ($publicFileManager->fileExists($publicFileManager->getContextFilesPath($row[
'journal_id']) .
'/' . $oldFileName)) {
245 $publicFileManager->copyContextFile($row[
'journal_id'], $publicFileManager->getContextFilesPath($row[
'journal_id']) .
'/' . $oldFileName, $newFileName);
246 $publicFileManager->removeContextFile($row[
'journal_id'], $oldFileName);
251 $driver = $issueDao->getDriver();
257 'UPDATE issue_settings iss, issues i, journals j
258 SET iss.locale = j.primary_locale, iss.setting_value = CONCAT(LEFT( iss.setting_value, LOCATE(\'.\', iss.setting_value) - 1 ), \'_\', j.primary_locale, \'.\', SUBSTRING_INDEX(iss.setting_value,\'.\',-1))
259 WHERE iss.setting_name = \'coverImage\' AND iss.locale = \'\' AND i.issue_id = iss.issue_id AND j.journal_id = i.journal_id'
263 'UPDATE issue_settings iss, issues i, journals j SET iss.locale = j.primary_locale WHERE iss.setting_name = \'coverImageAltText\' AND iss.locale = \'\' AND i.issue_id = iss.issue_id AND j.journal_id = i.journal_id'
273 'UPDATE issue_settings
274 SET locale = j.primary_locale, setting_value = REGEXP_REPLACE(issue_settings.setting_value, \'[\.]\', CONCAT(\'_\', j.primary_locale, \'.\'))
275 FROM issues i, journals j
276 WHERE issue_settings.setting_name = \'coverImage\' AND issue_settings.locale = \'\' AND i.issue_id = issue_settings.issue_id AND j.journal_id = i.journal_id'
280 'UPDATE issue_settings
281 SET locale = j.primary_locale
282 FROM issues i, journals j
283 WHERE issue_settings.setting_name = \'coverImageAltText\' AND issue_settings.locale = \'\' AND i.issue_id = issue_settings.issue_id AND j.journal_id = i.journal_id'
286 default:
fatalError(
'Unknown database type!');
288 $issueDao->flushCache();
296 function localizeArticleCoverImages() {
300 $submissionDao->update(
'DELETE FROM submission_settings WHERE setting_name = \'coverImage\' AND setting_type = \'object\'');
303 $submissionDao->update(
'DELETE FROM submission_settings WHERE setting_name = \'coverImage\' AND locale = \'\' AND setting_value = \'\'');
304 $submissionDao->update(
'DELETE FROM submission_settings WHERE setting_name = \'coverImageAltText\' AND locale = \'\' AND setting_value = \'\'');
307 $result = $submissionDao->retrieve(
308 'SELECT DISTINCT ss1.submission_id, ss1.setting_value, s.context_id
309 FROM submission_settings ss1
310 LEFT JOIN submissions s ON (s.submission_id = ss1.submission_id)
311 JOIN submission_settings ss2 ON (ss2.submission_id = ss1.submission_id AND ss2.setting_name = \'coverImage\')
312 WHERE ss1.setting_name = \'fileName\''
315 while (!$result->EOF) {
316 $row = $result->GetRowAssoc(
false);
317 $submissionId = $row[
'submission_id'];
318 $oldFileName = $row[
'setting_value'];
319 if ($publicFileManager->fileExists($publicFileManager->getContextFilesPath($row[
'context_id']) .
'/' . $oldFileName)) {
320 $publicFileManager->removeContextFile($row[
'journal_id'], $oldFileName);
322 $submissionDao->update(
'DELETE FROM submission_settings WHERE submission_id = ? AND setting_name = \'fileName\' AND setting_value = ?', array((
int) $submissionId, $oldFileName));
328 $result = $submissionDao->retrieve(
329 'SELECT ss.submission_id, ss.setting_value, j.journal_id, j.primary_locale
330 FROM submission_settings ss, submissions s, journals j
331 WHERE ss.setting_name = \'coverImage\' AND ss.locale = \'\'
332 AND s.submission_id = ss.submission_id AND j.journal_id = s.context_id'
337 while (!$result->EOF) {
338 $row = $result->GetRowAssoc(
false);
339 $oldFileName = $row[
'setting_value'];
340 $newFileName = str_replace(
'.',
'_' . $row[
'primary_locale'] .
'.', $oldFileName);
341 if ($publicFileManager->fileExists($publicFileManager->getContextFilesPath($row[
'journal_id']) .
'/' . $oldFileName)) {
342 $publicFileManager->copyContextFile($row[
'journal_id'], $publicFileManager->getContextFilesPath($row[
'journal_id']) .
'/' . $oldFileName, $newFileName);
343 $publicFileManager->removeContextFile($row[
'journal_id'], $oldFileName);
348 $driver = $submissionDao->getDriver();
353 $submissionDao->update(
354 'UPDATE submission_settings ss, submissions s, journals j
355 SET ss.locale = j.primary_locale, ss.setting_value = CONCAT(LEFT( ss.setting_value, LOCATE(\'.\', ss.setting_value) - 1 ), \'_\', j.primary_locale, \'.\', SUBSTRING_INDEX(ss.setting_value,\'.\',-1))
356 WHERE ss.setting_name = \'coverImage\' AND ss.locale = \'\' AND s.submission_id = ss.submission_id AND j.journal_id = s.context_id'
359 $submissionDao->update(
360 'UPDATE submission_settings ss, submissions s, journals j
361 SET ss.locale = j.primary_locale
362 WHERE ss.setting_name = \'coverImageAltText\' AND ss.locale = \'\' AND s.submission_id = ss.submission_id AND j.journal_id = s.context_id'
371 $submissionDao->update(
372 'UPDATE submission_settings
373 SET locale = j.primary_locale, setting_value = REGEXP_REPLACE(submission_settings.setting_value, \'[\.]\', CONCAT(\'_\', j.primary_locale, \'.\'))
374 FROM submissions s, journals j
375 WHERE submission_settings.setting_name = \'coverImage\' AND submission_settings.locale = \'\' AND s.submission_id = submission_settings.submission_id AND j.journal_id = s.context_id'
378 $submissionDao->update(
379 'UPDATE submission_settings
380 SET locale = j.primary_locale
381 FROM submissions s, journals j
382 WHERE submission_settings.setting_name = \'coverImageAltText\' AND submission_settings.locale = \'\' AND s.submission_id = submission_settings.submission_id AND j.journal_id = s.context_id'
385 default:
fatalError(
'Unknown database type!');
387 $submissionDao->flushCache();
397 function fixAuthorGroup() {
399 $result = $userGroupDao->retrieve(
400 'SELECT a.author_id, s.context_id FROM authors a JOIN submissions s ON (a.submission_id = s.submission_id) JOIN user_groups g ON (a.user_group_id = g.user_group_id) WHERE g.context_id <> s.context_id'
402 while (!$result->EOF) {
403 $row = $result->GetRowAssoc(
false);
404 $authorGroup = $userGroupDao->getDefaultByRoleId($row[
'context_id'], ROLE_ID_AUTHOR);
405 if ($authorGroup) $userGroupDao->update(
'UPDATE authors SET user_group_id = ? WHERE author_id = ?', array((
int) $authorGroup->getId(), $row[
'author_id']));
417 function moveReviewerFiles() {
420 import(
'lib.pkp.classes.file.SubmissionFileManager');
423 $result = $submissionFileDao->retrieve(
424 'SELECT ra.review_id, ra.submission_id, ra.review_round_id, ra.review_id, ra.reviewer_file_id, s.context_id
425 FROM review_assignments ra, submissions s
426 WHERE ra.reviewer_file_id IS NOT NULL AND s.submission_id = ra.submission_id'
428 while (!$result->EOF) {
429 $row = $result->GetRowAssoc(
false);
432 $revisions = $submissionFileDao->getAllRevisions($row[
'reviewer_file_id']);
433 if (!empty($revisions)) {
434 foreach ($revisions as $revision) {
435 $wrongFilePath = $revision->getFilePath();
436 $revision->setFileStage(SUBMISSION_FILE_REVIEW_ATTACHMENT);
437 $newFilePath = $revision->getFilePath();
438 if (!file_exists($newFilePath)) {
439 if (!file_exists($path = dirname($newFilePath)) && !$submissionFileManager->mkdirtree($path)) {
440 error_log(
"ERROR: Unable to make directory \"$path\"");
442 if (!rename($wrongFilePath, $newFilePath)) {
443 error_log(
"ERROR: Unable to move \"$wrongFilePath\" to \"$newFilePath\".");
448 error_log(
'ERROR: Reviewer files with ID ' . $row[
'reviewer_file_id'] .
' from review assignment ' .$row[
'review_id'] .
' could not be found in the database table submission_files');
461 function removeCancelledReviewAssignments() {
464 $result = $reviewAssignmentDao->retrieve(
'SELECT review_id FROM review_assignments_tmp');
465 while (!$result->EOF) {
466 $row = $result->GetRowAssoc(
false);
467 $reviewAssignmentDao->deleteById($row[
'review_id']);
472 $reviewAssignmentDao->update(
'DROP TABLE review_assignments_tmp');
475 $eventLogDao->update(
'UPDATE event_log SET message = \'log.review.reviewCleared\' WHERE message = \'log.review.reviewCancelled\'');
483 function repairImageAssociations() {
487 $result = $submissionFileDao->retrieve(
'SELECT df.file_id AS dependent_file_id, gf.file_id AS galley_file_id FROM submission_files df, submission_files gf, submission_html_galley_images i, submission_galleys g WHERE i.galley_id = g.galley_id AND g.file_id = gf.file_id AND i.file_id = df.file_id');
488 while (!$result->EOF) {
489 $row = $result->GetRowAssoc(
false);
490 $submissionFiles = $submissionFileDao->getAllRevisions($row[
'dependent_file_id']);
491 foreach ((array) $submissionFiles as $submissionFile) {
492 if ($submissionFile->getFileStage() != 1)
continue;
494 $submission = $submissionDao->getById($submissionFile->getSubmissionId());
495 $imageGenre = $genreDao->getByKey(
'IMAGE', $submission->getContextId());
497 $submissionFile->setFileStage(SUBMISSION_FILE_DEPENDENT);
498 $submissionFile->setAssocType(ASSOC_TYPE_SUBMISSION_FILE);
499 $submissionFile->setAssocId($row[
'galley_file_id']);
500 $submissionFile->setGenreId($imageGenre->getId());
501 $submissionFileDao->updateObject($submissionFile);
505 $submissionDao->update(
'DROP TABLE submission_html_galley_images');
513 function repairKeywordsAndSubjects() {
515 $site = $request->getSite();
516 $installedLocales = $site->getInstalledLocales();
523 $subjectsToKeep = array();
524 $oldKeywordsFound =
false;
525 $result = $submissionKeywordDao->retrieve(
'SELECT * FROM submission_settings WHERE setting_name = \'subject\' AND setting_value <> \'\'');
526 if ($result->RecordCount() > 0) $oldKeywordsFound =
true;
527 while (!$result->EOF) {
528 $row = $result->GetRowAssoc(
false);
529 $submissionId = $row[
'submission_id'];
530 $locale = $row[
'locale'];
531 $oldKeywordsArray = preg_split(
'/[,;:]/', $row[
'setting_value']);
532 $oldKeywords = array_map(
'trim', $oldKeywordsArray);
534 $newKeywords = array();
535 $newKeywordsArray = $submissionKeywordDao->getKeywords($submissionId, [$locale], ASSOC_TYPE_SUBMISSION);
536 if (array_key_exists($locale, $newKeywordsArray)) {
537 $newKeywords = array_map(
'trim', $newKeywordsArray[$locale]);
540 $keywordsToAdd = array_diff($oldKeywords, $newKeywords);
541 if (!empty($keywordsToAdd)) {
542 $submissionKeywordDao->insertKeywords(array($locale => $keywordsToAdd), $submissionId,
false, ASSOC_TYPE_SUBMISSION);
550 if (!array_key_exists($submissionId, $subjectsToKeep)) {
551 $newSubjectsArray = $submissionSubjectDao->getSubjects($submissionId, $installedLocales, ASSOC_TYPE_SUBMISSION);
552 $subjectsToKeep[$submissionId] = $newSubjectsArray;
555 if (array_key_exists($locale, $subjectsToKeep[$submissionId])) {
557 $newSubjects = array_map(
'trim', $subjectsToKeep[$submissionId][$locale]);
559 $subjectsToKeep[$submissionId][
$locale] = array_diff($newSubjects, $oldKeywords);
565 unset($newSubjectsArray);
569 if ($oldKeywordsFound) {
572 foreach ($subjectsToKeep as $submissionId => $submissionSubjects) {
573 $submissionSubjectDao->insertSubjects($submissionSubjects, $submissionId,
true, ASSOC_TYPE_SUBMISSION);
578 $result = $submissionKeywordDao->retrieve(
'SELECT * FROM submission_settings WHERE setting_name = \'subjectClass\' AND setting_value <> \'\'');
579 while (!$result->EOF) {
580 $row = $result->GetRowAssoc(
false);
581 $submissionId = $row[
'submission_id'];
582 $locale = $row[
'locale'];
583 $oldSubjectsArray = preg_split(
'/[,;:]/', $row[
'setting_value']);
584 $oldSubjects = array_map(
'trim', $oldSubjectsArray);
586 $newSubjects = array();
587 $newSubjectsArray = $submissionSubjectDao->getSubjects($submissionId, array($locale), ASSOC_TYPE_SUBMISSION);
588 if (array_key_exists($locale, $newSubjectsArray)) {
589 $newSubjects = array_map(
'trim', $newSubjectsArray[$locale]);
592 $subjectsToAdd = array_diff($oldSubjects, $newSubjects);
593 if (!empty($subjectsToAdd)) {
594 $submissionSubjectDao->insertSubjects(array($locale => $subjectsToAdd), $submissionId,
false, ASSOC_TYPE_SUBMISSION);
601 $submissionKeywordDao->update(
'DELETE FROM submission_settings WHERE setting_name = \'discipline\' OR setting_name = \'subject\' OR setting_name = \'subjectClass\' OR setting_name = \'sponsor\'');
610 function enabledSitePlugins() {
613 foreach ($allPlugins as $plugin) {
614 if ($plugin->isSitePlugin()) {
616 if ($pluginName !=
'customblockmanagerplugin') {
617 $result = $pluginSettings->update(
'DELETE FROM plugin_settings WHERE plugin_name = ? AND setting_name = \'enabled\' AND context_id <> 0', array($pluginName));
632 function fixGenreIdInFileNames() {
638 import(
'lib.pkp.classes.file.SubmissionFileManager');
640 $contexts = $journalDao->getAll();
641 while ($context = $contexts->next()) {
642 $styleGenre = $genreDao->getByKey(
'STYLE', $context->getId());
643 $submissions = $submissionDao->getByContextId($context->getId());
644 while ($submission = $submissions->next()) {
646 $basePath = $submissionFileManager->getBasePath();
647 $submissionFiles = $submissionFileDao->getBySubmissionId($submission->getId());
648 foreach ($submissionFiles as $submissionFile) {
651 if ($submissionFile->getGenreId() != $styleGenre->getId()) {
652 $generatedNewFilename = $submissionFile->getServerFileName();
653 $targetFilename = $basePath . $submissionFile->_fileStageToPath($submissionFile->getFileStage()) .
'/' . $generatedNewFilename;
654 $timestamp = date(
'Ymd', strtotime($submissionFile->getDateUploaded()));
655 $wrongFileName = $submission->getId() .
'-' .
'1' .
'-' . $submissionFile->getFileId() .
'-' . $submissionFile->getRevision() .
'-' . $submissionFile->getFileStage() .
'-' . $timestamp .
'.' .
strtolower_codesafe($submissionFile->getExtension());
656 $sourceFilename = $basePath . $submissionFile->_fileStageToPath($submissionFile->getFileStage()) .
'/' . $wrongFileName;
657 if (file_exists($targetFilename))
continue;
658 if (!file_exists($path = dirname($targetFilename)) && !$submissionFileManager->mkdirtree($path)) {
659 error_log(
"Unable to make directory \"$path\"");
661 if (!rename($sourceFilename, $targetFilename)) {
662 error_log(
"Unable to move \"$sourceFilename\" to \"$targetFilename\".");
678 function moveCSSFiles() {
683 import(
'lib.pkp.classes.file.FileManager');
684 import(
'lib.pkp.classes.file.SubmissionFileManager');
685 import(
'lib.pkp.classes.submission.SubmissionFile');
687 $journals = $journalDao->getAll();
688 while ($journal = $journals->next()) {
690 $genre = $genreDao->getByKey(
'STYLE', $journal->getId());
693 $result = $submissionFileDao->retrieve(
'SELECT file_id, revision, original_file_name, date_uploaded, submission_id FROM submission_files WHERE file_stage = ? AND genre_id = ? AND assoc_type = ?',
694 array((
int) SUBMISSION_FILE_DEPENDENT, (int) $genre->getId(), (int) ASSOC_TYPE_SUBMISSION_FILE));
695 while (!$result->EOF) {
696 $row = $result->GetRowAssoc(
false);
699 $timestamp = date(
'Ymd', strtotime($row[
'date_uploaded']));
701 $extension = $fileManager->parseFileExtension($row[
'original_file_name']);
702 $wrongServerName = $row[
'submission_id'] .
'-' .
'1' .
'-' . $row[
'file_id'] .
'-' . $row[
'revision'] .
'-' .
'1' .
'-' . $timestamp .
'.' .
strtolower_codesafe($extension);
703 $newServerName = $row[
'submission_id'] .
'-' . $genre->getId() .
'-' . $row[
'file_id'] .
'-' . $row[
'revision'] .
'-' . SUBMISSION_FILE_DEPENDENT .
'-' . $timestamp .
'.' .
strtolower_codesafe($extension);
707 $basePath = $submissionFileManager->getBasePath();
708 $sourceFilename = $basePath .
'public' .
'/' . $wrongServerName;
709 $targetFilename = $basePath .
'submission/proof' .
'/' . $newServerName;
711 if (!file_exists($targetFilename) && file_exists($sourceFilename)) {
712 if (!file_exists($path = dirname($targetFilename)) && !$submissionFileManager->mkdirtree($path)) {
713 error_log(
"Unable to make directory \"$path\"");
715 if (!rename($sourceFilename, $targetFilename)) {
716 error_log(
"Unable to move \"$sourceFilename\" to \"$targetFilename\".");
731 function repairSuppFilesFilestage() {
734 import(
'lib.pkp.classes.submission.SubmissionFile');
735 import(
'lib.pkp.classes.file.SubmissionFileManager');
738 $result = $submissionFileDao->retrieve(
739 'SELECT ssf.*, s.context_id
740 FROM submission_supplementary_files ssf, submission_files sf, submissions s
741 WHERE sf.file_id = ssf.file_id AND sf.file_stage = ? AND sf.assoc_type = ? AND sf.revision = ssf.revision AND s.submission_id = sf.submission_id',
742 array((
int)SUBMISSION_FILE_SUBMISSION, (int)ASSOC_TYPE_REPRESENTATION)
744 while (!$result->EOF) {
745 $row = $result->GetRowAssoc(
false);
746 $submissionFileRevision = $submissionFileDao->getRevision($row[
'file_id'], $row[
'revision']);
747 $submissionFileManager =
new SubmissionFileManager($row[
'context_id'], $submissionFileRevision->getSubmissionId());
748 $basePath = $submissionFileManager->getBasePath();
749 $generatedOldFilename = $submissionFileRevision->getServerFileName();
750 $oldFileName = $basePath . $submissionFileRevision->_fileStageToPath($submissionFileRevision->getFileStage()) .
'/' . $generatedOldFilename;
751 $submissionFileRevision->setFileStage(SUBMISSION_FILE_PROOF);
752 $generatedNewFilename = $submissionFileRevision->getServerFileName();
753 $newFileName = $basePath . $submissionFileRevision->_fileStageToPath($submissionFileRevision->getFileStage()) .
'/' . $generatedNewFilename;
754 if (!file_exists($newFileName)) {
755 if (!file_exists($path = dirname($newFileName)) && !$submissionFileManager->mkdirtree($path)) {
756 error_log(
"Unable to make directory \"$path\"");
758 if (!rename($oldFileName, $newFileName)) {
759 error_log(
"Unable to move \"$oldFileName\" to \"$newFileName\".");
761 $submissionFileDao->updateObject($submissionFileRevision);
774 function migrateStaticPagesToNavigationMenuItems() {
779 import(
'plugins.generic.staticPages.classes.StaticPagesDAO');
783 $contexts = $contextDao->getAll();
784 while ($context = $contexts->next()) {
785 $contextStaticPages = $staticPagesDao->getByContextId($context->getId())->toAssociativeArray();
786 foreach($contextStaticPages as $staticPage) {
787 $retNMIId = $navigationMenuItemDao->portStaticPage($staticPage);
789 $staticPagesDao->deleteById($staticPage->getId());
791 error_log(
'WARNING: The StaticPage "' . $staticPage->getLocalizedTitle() .
'" uses a path (' . $staticPage->getPath() .
') that conflicts with an existing Custom Navigation Menu Item path. Skipping this StaticPage.');
804 function migrateSRLocale() {
805 $oldLocale =
'sr_SR';
806 $newLocale =
'sr_RS@latin';
808 $oldLocaleStringLength =
's:5';
813 $srExistResult = $journalSettingsDao->retrieve(
'SELECT COUNT(*) FROM site WHERE installed_locales LIKE ?', array(
'%'.$oldLocale.
'%'));
814 $srExist = $srExistResult->fields[0] ? true :
false;
815 $srExistResult->Close();
816 if (!$srExist)
return true;
820 'announcement_settings',
'announcement_type_settings',
'author_settings',
'books_for_review_settings',
'citation_settings',
'controlled_vocab_entry_settings',
821 'data_object_tombstone_settings',
'email_templates_data',
'email_templates_default_data',
'external_feed_settings',
'filter_settings',
'genre_settings',
'group_settings',
822 'issue_galleys',
'issue_galley_settings',
'issue_settings',
'journal_settings',
'library_file_settings',
'metadata_description_settings',
823 'navigation_menu_item_assignment_settings',
'navigation_menu_item_settings',
'notification_settings',
'referral_settings',
824 'review_form_element_settings',
'review_form_settings',
'review_object_metadata_settings',
'review_object_type_settings',
'section_settings',
'site_settings',
825 'static_page_settings',
'submissions',
'submission_file_settings',
'submission_galleys',
'submission_galley_settings',
'submission_settings',
'subscription_type_settings',
826 'user_group_settings',
'user_settings',
828 foreach ($dbTables as $dbTable) {
830 $journalSettingsDao->update(
'UPDATE '.$dbTable.
' SET locale = ? WHERE locale = ?', array($newLocale, $oldLocale));
834 $journalSettingsDao->update(
'UPDATE journals SET primary_locale = ? WHERE primary_locale = ?', array($newLocale, $oldLocale));
835 $journalSettingsDao->update(
'UPDATE site SET primary_locale = ? WHERE primary_locale = ?', array($newLocale, $oldLocale));
836 $journalSettingsDao->update(
'UPDATE site SET installed_locales = REPLACE(installed_locales, ?, ?)', array($oldLocale, $newLocale));
837 $journalSettingsDao->update(
'UPDATE site SET supported_locales = REPLACE(supported_locales, ?, ?)', array($oldLocale, $newLocale));
838 $journalSettingsDao->update(
'UPDATE users SET locales = REPLACE(locales, ?, ?)', array($oldLocale, $newLocale));
843 $settingNames =
"('supportedFormLocales', 'supportedLocales', 'supportedSubmissionLocales')";
845 $settingValueResult = $journalSettingsDao->retrieve(
'SELECT * FROM journal_settings WHERE setting_name IN ' .$settingNames .
' AND setting_value LIKE ? AND setting_type = \'object\'', array(
'%' .$oldLocaleStringLength .
':"' .$oldLocale .
'%'));
846 while (!$settingValueResult->EOF) {
847 $row = $settingValueResult->getRowAssoc(
false);
848 $arraySettingValue = $journalSettingsDao->getSetting($row[
'journal_id'], $row[
'setting_name']);
849 for($i = 0; $i <
count($arraySettingValue); $i++) {
850 if ($arraySettingValue[$i] == $oldLocale) {
851 $arraySettingValue[$i] = $newLocale;
854 $journalSettingsDao->updateSetting($row[
'journal_id'], $row[
'setting_name'], $arraySettingValue);
855 $settingValueResult->MoveNext();
857 $settingValueResult->Close();
862 $settingNames =
"('homeHeaderLogoImage', 'homeHeaderTitleImage', 'homepageImage', 'journalFavicon', 'journalThumbnail', 'pageHeaderLogoImage', 'pageHeaderTitleImage')";
863 $settingValueResult = $journalSettingsDao->retrieve(
'SELECT * FROM journal_settings WHERE setting_name IN ' .$settingNames .
' AND locale = ? AND setting_value LIKE ? AND setting_type = \'object\'', array($newLocale,
'%' .$oldLocale .
'%'));
864 while (!$settingValueResult->EOF) {
865 $row = $settingValueResult->getRowAssoc(
false);
866 $arraySettingValue = $journalSettingsDao->getSetting($row[
'journal_id'], $row[
'setting_name'], $newLocale);
867 $oldUploadName = $arraySettingValue[
'uploadName'];
868 $newUploadName = str_replace(
'_'.$oldLocale.
'.',
'_'.$newLocale.
'.', $oldUploadName);
869 if ($publicFileManager->fileExists($publicFileManager->getContextFilesPath($row[
'journal_id']) .
'/' . $oldUploadName)) {
870 $publicFileManager->copyContextFile($row[
'journal_id'], $publicFileManager->getContextFilesPath($row[
'journal_id']) .
'/' . $oldUploadName, $newUploadName);
871 $publicFileManager->removeContextFile($row[
'journal_id'], $oldUploadName);
873 $arraySettingValue[
'uploadName'] = $newUploadName;
874 $newArraySettingValue[$newLocale] = $arraySettingValue;
875 $journalSettingsDao->updateSetting($row[
'journal_id'], $row[
'setting_name'], $newArraySettingValue,
'object',
true);
876 $settingValueResult->MoveNext();
878 $settingValueResult->Close();
882 $settingValueResult = $journalSettingsDao->retrieve(
'SELECT a.*, b.journal_id FROM issue_settings a, issues b WHERE a.setting_name = \'fileName\' AND a.locale = ? AND a.setting_value LIKE ? AND a.setting_type = \'string\' AND b.issue_id = a.issue_id', array($newLocale,
'%' .$oldLocale .
'%'));
883 while (!$settingValueResult->EOF) {
884 $row = $settingValueResult->getRowAssoc(
false);
885 $oldCoverImage = $row[
'setting_value'];
886 $newCoverImage = str_replace(
'_'.$oldLocale.
'.',
'_'.$newLocale.
'.', $oldCoverImage);
887 if ($publicFileManager->fileExists($publicFileManager->getContextFilesPath($row[
'journal_id']) .
'/' . $oldCoverImage)) {
888 $publicFileManager->copyContextFile($row[
'journal_id'], $publicFileManager->getContextFilesPath($row[
'journal_id']) .
'/' . $oldCoverImage, $newCoverImage);
889 $publicFileManager->removeContextFile($row[
'journal_id'], $oldCoverImage);
891 $journalSettingsDao->update(
'UPDATE issue_settings SET setting_value = ? WHERE issue_id = ? AND setting_name = \'fileName\' AND locale = ?', array($newCoverImage, (
int) $row[
'issue_id'], $newLocale));
892 $settingValueResult->MoveNext();
894 $settingValueResult->Close();
898 $settingValueResult = $journalSettingsDao->retrieve(
'SELECT a.*, b.context_id FROM submission_settings a, submissions b WHERE a.setting_name = \'fileName\' AND a.locale = ? AND a.setting_value LIKE ? AND b.submission_id = a.submission_id', array($newLocale,
'%' .$oldLocale .
'%'));
899 while (!$settingValueResult->EOF) {
900 $row = $settingValueResult->getRowAssoc(
false);
901 $oldCoverImage = $row[
'setting_value'];
902 $newCoverImage = str_replace(
'_'.$oldLocale.
'.',
'_'.$newLocale.
'.', $oldCoverImage);
903 if ($publicFileManager->fileExists($publicFileManager->getContextFilesPath($row[
'context_id']) .
'/' . $oldCoverImage)) {
904 $publicFileManager->copyContextFile($row[
'context_id'], $publicFileManager->getContextFilesPath($row[
'context_id']) .
'/' . $oldCoverImage, $newCoverImage);
905 $publicFileManager->removeContextFile($row[
'context_id'], $oldCoverImage);
907 $journalSettingsDao->update(
'UPDATE submission_settings SET setting_value = ? WHERE submission_id = ? AND setting_name = \'fileName\' AND locale = ?', array($newCoverImage, (
int) $row[
'submission_id'], $newLocale));
908 $settingValueResult->MoveNext();
910 $settingValueResult->Close();
916 $settingNames =
"('blockContent', 'additionalInformation')";
917 $settingValueResult = $pluginSettingsDao->retrieve(
'SELECT * FROM plugin_settings WHERE setting_name IN ' .$settingNames .
' AND setting_value LIKE ?', array(
'%' .$oldLocaleStringLength .
':"' .$oldLocale .
'%'));
918 while (!$settingValueResult->EOF) {
919 $row = $settingValueResult->getRowAssoc(
false);
920 $arraySettingValue = $pluginSettingsDao->getSetting($row[
'context_id'], $row[
'plugin_name'], $row[
'setting_name']);
921 $arraySettingValue[$newLocale] = $arraySettingValue[$oldLocale];
922 unset($arraySettingValue[$oldLocale]);
923 $pluginSettingsDao->updateSetting($row[
'context_id'], $row[
'plugin_name'], $row[
'setting_name'], $arraySettingValue);
924 $settingValueResult->MoveNext();
926 $settingValueResult->Close();
935 function migrateUserAndAuthorNames() {
937 import(
'lib.pkp.classes.identity.Identity');
939 $userDao->update(
"INSERT INTO user_settings (user_id, locale, setting_name, setting_value, setting_type) SELECT DISTINCT u.user_id, s.primary_locale, ?, u.first_name, 'string' FROM users_tmp u, site s", array(IDENTITY_SETTING_GIVENNAME));
940 $userDao->update(
"INSERT INTO user_settings (user_id, locale, setting_name, setting_value, setting_type) SELECT DISTINCT u.user_id, s.primary_locale, ?, u.last_name, 'string' FROM users_tmp u, site s", array(IDENTITY_SETTING_FAMILYNAME));
942 $userDao->update(
"INSERT INTO author_settings (author_id, locale, setting_name, setting_value, setting_type) SELECT DISTINCT a.author_id, s.locale, ?, a.first_name, 'string' FROM authors_tmp a, submissions s WHERE s.submission_id = a.submission_id", array(IDENTITY_SETTING_GIVENNAME));
943 $userDao->update(
"INSERT INTO author_settings (author_id, locale, setting_name, setting_value, setting_type) SELECT DISTINCT a.author_id, s.locale, ?, a.last_name, 'string' FROM authors_tmp a, submissions s WHERE s.submission_id = a.submission_id", array(IDENTITY_SETTING_FAMILYNAME));
947 $driver = $userDao->getDriver();
952 $userDao->update(
"UPDATE user_settings, users_tmp u SET user_settings.setting_value = CONCAT(user_settings.setting_value, ' ', u.middle_name) WHERE user_settings.setting_name = ? AND u.user_id = user_settings.user_id AND u.middle_name IS NOT NULL AND u.middle_name <> ''", array(IDENTITY_SETTING_GIVENNAME));
953 $userDao->update(
"UPDATE author_settings, authors_tmp a SET author_settings.setting_value = CONCAT(author_settings.setting_value, ' ', a.middle_name) WHERE author_settings.setting_name = ? AND a.author_id = author_settings.author_id AND a.middle_name IS NOT NULL AND a.middle_name <> ''", array(IDENTITY_SETTING_GIVENNAME));
960 $userDao->update(
"UPDATE user_settings SET setting_value = CONCAT(setting_value, ' ', u.middle_name) FROM users_tmp u WHERE user_settings.setting_name = ? AND u.user_id = user_settings.user_id AND u.middle_name IS NOT NULL AND u.middle_name <> ''", array(IDENTITY_SETTING_GIVENNAME));
961 $userDao->update(
"UPDATE author_settings SET setting_value = CONCAT(setting_value, ' ', a.middle_name) FROM authors_tmp a WHERE author_settings.setting_name = ? AND a.author_id = author_settings.author_id AND a.middle_name IS NOT NULL AND a.middle_name <> ''", array(IDENTITY_SETTING_GIVENNAME));
963 default:
fatalError(
'Unknown database type!');
969 $site = $siteDao->getSite();
970 $supportedLocales = $site->getSupportedLocales();
971 $userResult = $userDao->retrieve(
"
972 SELECT user_id, first_name, last_name, middle_name, salutation, suffix FROM users_tmp
973 WHERE (salutation IS NOT NULL AND salutation <> '') OR
974 (suffix IS NOT NULL AND suffix <> '')
976 while (!$userResult->EOF) {
977 $row = $userResult->GetRowAssoc(
false);
978 $userId = $row[
'user_id'];
979 $firstName = $row[
'first_name'];
980 $lastName = $row[
'last_name'];
981 $middleName = $row[
'middle_name'];
982 $salutation = $row[
'salutation'];
983 $suffix = $row[
'suffix'];
984 foreach ($supportedLocales as $siteLocale) {
985 $preferredPublicName = ($salutation !=
'' ?
"$salutation " :
'') .
"$firstName " . ($middleName !=
'' ?
"$middleName " :
'') . $lastName . ($suffix !=
'' ?
", $suffix" :
'');
987 $preferredPublicName =
"$lastName, " . ($salutation !=
'' ?
"$salutation " :
'') . $firstName . ($middleName !=
'' ?
" $middleName" :
'');
989 $params = array((
int) $userId, $siteLocale, $preferredPublicName);
990 $userDao->update(
"INSERT INTO user_settings (user_id, locale, setting_name, setting_value, setting_type) VALUES (?, ?, 'preferredPublicName', ?, 'string')", $params);
992 $userResult->MoveNext();
994 $userResult->Close();
1000 $journals = $journalDao->getAll();
1001 $journalsSupportedLocales = array();
1002 while ($journal = $journals->next()) {
1003 $journalsSupportedLocales[$journal->getId()] = $journal->getSupportedLocales();
1006 $authorResult = $userDao->retrieve(
"
1007 SELECT a.author_id, a.first_name, a.last_name, a.middle_name, a.suffix, j.journal_id FROM authors_tmp a
1008 LEFT JOIN submissions s ON (s.submission_id = a.submission_id)
1009 LEFT JOIN journals j ON (j.journal_id = s.context_id)
1010 WHERE suffix IS NOT NULL AND suffix <> ''
1012 while (!$authorResult->EOF) {
1013 $row = $authorResult->GetRowAssoc(
false);
1014 $authorId = $row[
'author_id'];
1015 $firstName = $row[
'first_name'];
1016 $lastName = $row[
'last_name'];
1017 $middleName = $row[
'middle_name'];
1018 $suffix = $row[
'suffix'];
1019 $journalId = $row[
'journal_id'];
1020 $supportedLocales = $journalsSupportedLocales[$journalId];
1021 foreach ($supportedLocales as $locale) {
1022 $preferredPublicName =
"$firstName " . ($middleName !=
'' ?
"$middleName " :
'') . $lastName . ($suffix !=
'' ?
", $suffix" :
'');
1024 $preferredPublicName =
"$lastName, " . $firstName . ($middleName !=
'' ?
" $middleName" :
'');
1026 $params = array((
int) $authorId, $locale, $preferredPublicName);
1027 $userDao->update(
"INSERT INTO author_settings (author_id, locale, setting_name, setting_value, setting_type) VALUES (?, ?, 'preferredPublicName', ?, 'string')", $params);
1029 $authorResult->MoveNext();
1031 $authorResult->Close();
1034 $siteDao->update(
'DROP TABLE users_tmp');
1035 $siteDao->update(
'DROP TABLE authors_tmp');
1043 function updateSuppFileMetrics() {
1046 # Copy 531 assoc_type data to temp table
1047 $result = $metricsDao->update(
1048 'CREATE TABLE metrics_supp AS (SELECT * FROM metrics WHERE assoc_type = 531)'
1050 # Fetch submission_file data with old-supp-id
1051 $result = $submissionFileDao->retrieve(
1052 'SELECT * FROM submission_file_settings WHERE setting_name = ?',
1055 # Loop through the data and save to temp table
1056 while (!$result->EOF) {
1057 $row = $result->GetRowAssoc(
false);
1058 # Use assoc_type 2531 to prevent collisions between old assoc_id and new assoc_id
1059 $metricsDao->update(
1060 'UPDATE metrics_supp SET assoc_id = ?, assoc_type = ? WHERE assoc_type = ? AND assoc_id = ?',
1061 array((
int) $row[
'file_id'], 2531, 531, (
int) $row[
'setting_value'])
1063 $result->MoveNext();
1066 # update temprorary 2531 values to 531 values
1067 $metricsDao->update(
1068 'UPDATE metrics_supp SET assoc_type = ? WHERE assoc_type = ?',
1071 # delete all existing 531 values from the actual metrics table
1072 $metricsDao->update(
'DELETE FROM metrics WHERE assoc_type = 531');
1073 # copy updated 531 values from metrics_supp to metrics table
1074 $metricsDao->update(
'INSERT INTO metrics SELECT * FROM metrics_supp');
1075 # Drop metrics_supp table
1076 $metricsDao->update(
'DROP TABLE metrics_supp');
1084 function migrateSiteStylesheet() {
1087 import(
'classes.file.PublicFileManager');
1090 if (!file_exists($publicFileManager->getSiteFilesPath() .
'/sitestyle.css')) {
1094 $site = $siteDao->getSite();
1095 $site->setData(
'styleSheet',
'sitestyle.css');
1096 $siteDao->updateObject($site);
1105 function createLicenseTerms() {
1106 $contextDao = Application::getContextDao();
1108 $result = $contextDao->retrieve(
'SELECT * from ' . $contextDao->settingsTableName .
" WHERE setting_name='copyrightNotice'");
1109 while (!$result->EOF) {
1110 $row = $result->getRowAssoc(
false);
1111 $contextDao->update(
'
1112 INSERT INTO ' . $contextDao->settingsTableName .
' (
1113 ' . $contextDao->primaryKeyColumn .
',
1117 ) VALUES (?, ?, ?, ?)',
1119 $row[$contextDao->primaryKeyColumn],
1122 $row[
'setting_value'],
1125 $result->MoveNext();
1137 function changeUserRolesAndStageAssignmentsForStagePermitSubmissionEdit() {
1142 $roleString =
'(' . implode(
",", $roles) .
')';
1144 $userGroupDao->update(
'UPDATE user_groups SET permit_metadata_edit = 1 WHERE role_id IN ' . $roleString);
1145 switch ($userGroupDao->getDriver()) {
1148 $stageAssignmentDao->update(
'UPDATE stage_assignments sa JOIN user_groups ug on sa.user_group_id = ug.user_group_id SET sa.can_change_metadata = 1 WHERE ug.role_id IN ' . $roleString);
1155 $stageAssignmentDao->update(
'UPDATE stage_assignments SET can_change_metadata=1 FROM stage_assignments sa JOIN user_groups ug ON (sa.user_group_id = ug.user_group_id) WHERE ug.role_id IN ' . $roleString);
1157 default:
fatalError(
"Unknown database type!");
1173 function migrateSubmissionCoverImages() {
1174 $coverImagesBySubmission = [];
1177 $result = $submissionDao->retrieve(
1178 'SELECT * from submission_settings WHERE setting_name=\'coverImage\' OR setting_name=\'coverImageAltText\''
1180 while (!$result->EOF) {
1181 $row = $result->getRowAssoc(
false);
1182 $submissionId = $row[
'submission_id'];
1183 if (empty($coverImagesBySubmission[$submissionId])) {
1184 $coverImagesBySubmission[$submissionId] = [];
1186 if ($row[
'setting_name'] ===
'coverImage') {
1187 $coverImagesBySubmission[$submissionId][
'uploadName'] = $row[
'setting_value'];
1189 } elseif ($row[
'setting_name'] ===
'coverImageAltText') {
1190 $coverImagesBySubmission[$submissionId][
'altText'] = $row[
'setting_value'];
1192 $result->MoveNext();
1196 foreach ($coverImagesBySubmission as $submissionId => $coverImagesBySubmission) {
1197 $submissionDao->update(
1198 'UPDATE submission_settings
1199 SET setting_value = ?
1200 WHERE submission_id = ? AND setting_name = ?',
1202 serialize($coverImagesBySubmission),