/** * Localize article cover images. * @return boolean True indicates success. */ function localizeArticleCoverImages() { $articleDao = DAORegistry::getDAO('ArticleDAO'); $publicFileManager = new PublicFileManager(); // remove strange old cover images with array values in the DB - from 3.alpha or 3.beta? $articleDao->update('DELETE FROM submission_settings WHERE setting_name = \'coverImage\' AND setting_type = \'object\''); // remove empty 3.0 cover images $articleDao->update('DELETE FROM submission_settings WHERE setting_name = \'coverImage\' AND locale = \'\' AND setting_value = \'\''); $articleDao->update('DELETE FROM submission_settings WHERE setting_name = \'coverImageAltText\' AND locale = \'\' AND setting_value = \'\''); // get cover image duplicates, from 2.4.x and 3.0 $result = $articleDao->retrieve('SELECT DISTINCT ss1.submission_id, ss1.setting_value, s.context_id FROM submission_settings ss1 LEFT JOIN submissions s ON (s.submission_id = ss1.submission_id) JOIN submission_settings ss2 ON (ss2.submission_id = ss1.submission_id AND ss2.setting_name = \'coverImage\') WHERE ss1.setting_name = \'fileName\''); // remove the old 2.4.x cover images, for which a new cover image exists while (!$result->EOF) { $row = $result->GetRowAssoc(false); $submissionId = $row['submission_id']; $oldFileName = $row['setting_value']; if ($publicFileManager->fileExists($publicFileManager->getContextFilesPath(ASSOC_TYPE_JOURNAL, $row['context_id']) . '/' . $oldFileName)) { $publicFileManager->removeJournalFile($row['journal_id'], $oldFileName); } $articleDao->update('DELETE FROM submission_settings WHERE submission_id = ? AND setting_name = \'fileName\' AND setting_value = ?', array((int) $submissionId, $oldFileName)); $result->MoveNext(); } $result->Close(); // retrieve names for unlocalized article cover images $result = $articleDao->retrieve('SELECT ss.submission_id, ss.setting_value, j.journal_id, j.primary_locale FROM submission_settings ss, submissions s, journals j WHERE ss.setting_name = \'coverImage\' AND ss.locale = \'\' AND s.submission_id = ss.submission_id AND j.journal_id = s.context_id'); // for all unlocalized article cover images // rename (copy + remove) the cover images files in the public folder, // considereing the locale (using the journal primary locale) while (!$result->EOF) { $row = $result->GetRowAssoc(false); $oldFileName = $row['setting_value']; $newFileName = str_replace('.', '_' . $row['primary_locale'] . '.', $oldFileName); if ($publicFileManager->fileExists($publicFileManager->getContextFilesPath(ASSOC_TYPE_JOURNAL, $row['journal_id']) . '/' . $oldFileName)) { $publicFileManager->copyJournalFile($row['journal_id'], $publicFileManager->getContextFilesPath(ASSOC_TYPE_JOURNAL, $row['journal_id']) . '/' . $oldFileName, $newFileName); $publicFileManager->removeJournalFile($row['journal_id'], $oldFileName); } $result->MoveNext(); } $result->Close(); $driver = $articleDao->getDriver(); switch ($driver) { case 'mysql': case 'mysqli': // Update cover image names in the submission_settings table $articleDao->update('UPDATE submission_settings ss, submissions s, journals j 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)) WHERE ss.setting_name = \'coverImage\' AND ss.locale = \'\' AND s.submission_id = ss.submission_id AND j.journal_id = s.context_id'); // Update cover image alt texts in the submission_settings table $articleDao->update('UPDATE submission_settings ss, submissions s, journals j SET ss.locale = j.primary_locale WHERE ss.setting_name = \'coverImageAltText\' AND ss.locale = \'\' AND s.submission_id = ss.submission_id AND j.journal_id = s.context_id'); break; case 'postgres': // Update cover image names in the submission_settings table $articleDao->update('UPDATE submission_settings SET locale = j.primary_locale, setting_value = REGEXP_REPLACE(submission_settings.setting_value, \'[\\.]\', CONCAT(\'_\', j.primary_locale, \'.\')) FROM submissions s, journals j 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'); // Update cover image alt texts in the submission_settings table $articleDao->update('UPDATE submission_settings SET locale = j.primary_locale FROM submissions s, journals j 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'); break; default: fatalError('Unknown database type!'); } $articleDao->flushCache(); return true; }