00001 <?php
00002
00015
00016
00017
00018 import('install.Installer');
00019
00020 class Upgrade extends Installer {
00021
00026 function Upgrade($params) {
00027 parent::Installer('upgrade.xml', $params);
00028 }
00029
00030
00035 function isUpgrade() {
00036 return true;
00037 }
00038
00039
00040
00041
00042
00047 function rebuildSearchIndex() {
00048 import('search.ArticleSearchIndex');
00049 ArticleSearchIndex::rebuildIndex();
00050 return true;
00051 }
00052
00058 function designateReviewVersions() {
00059 $journalDao =& DAORegistry::getDAO('JournalDAO');
00060 $articleDao =& DAORegistry::getDAO('ArticleDAO');
00061 $authorSubmissionDao =& DAORegistry::getDAO('AuthorSubmissionDAO');
00062 import('submission.author.AuthorAction');
00063
00064 $journals =& $journalDao->getJournals();
00065 while ($journal =& $journals->next()) {
00066 $articles =& $articleDao->getArticlesByJournalId($journal->getJournalId());
00067 while ($article =& $articles->next()) {
00068 if (!$article->getReviewFileId() && $article->getSubmissionProgress() == 0) {
00069 $authorSubmission =& $authorSubmissionDao->getAuthorSubmission($article->getArticleId());
00070 AuthorAction::designateReviewVersion($authorSubmission, true);
00071 }
00072 unset($article);
00073 }
00074 unset($journal);
00075 }
00076 return true;
00077 }
00078
00084 function migrateRtSettings() {
00085 $rtDao =& DAORegistry::getDAO('RTDAO');
00086 $journalDao =& DAORegistry::getDAO('JournalDAO');
00087
00088
00089 $commentDao = &DAORegistry::getDao('CommentDAO');
00090
00091 $result =& $rtDao->retrieve('SELECT * FROM rt_settings');
00092 while (!$result->EOF) {
00093 $row = $result->GetRowAssoc(false);
00094 $journalId = $row['journal_id'];
00095 $journal =& $journalDao->getJournal($journalId);
00096 $rt =& new JournalRT($journalId);
00097 $rt->setEnabled(true);
00098 $rt->setVersion($row['version_id']);
00099 $rt->setAbstract(true);
00100 $rt->setCaptureCite($row['capture_cite']);
00101 $rt->setViewMetadata($row['view_metadata']);
00102 $rt->setSupplementaryFiles($row['supplementary_files']);
00103 $rt->setPrinterFriendly($row['printer_friendly']);
00104 $rt->setAuthorBio($row['author_bio']);
00105 $rt->setDefineTerms($row['define_terms']);
00106
00107 $journal->updateSetting('enableComments', $row['add_comment']?COMMENTS_AUTHENTICATED:COMMENTS_DISABLED);
00108
00109 $rt->setEmailAuthor($row['email_author']);
00110 $rt->setEmailOthers($row['email_others']);
00111 $rtDao->updateJournalRT($rt);
00112 unset($rt);
00113 unset($journal);
00114 $result->MoveNext();
00115 }
00116 $result->Close();
00117 unset($result);
00118
00119
00120 $rtDao->update('DROP TABLE rt_settings');
00121 return true;
00122 }
00123
00129 function correctCurrencies() {
00130 $currencyDao =& DAORegistry::getDAO('CurrencyDAO');
00131 $result =& $currencyDao->retrieve('SELECT st.type_id AS type_id, c.code_alpha AS code_alpha FROM subscription_types st LEFT JOIN currencies c ON (c.currency_id = st.currency_id)');
00132 while (!$result->EOF) {
00133 $row = $result->GetRowAssoc(false);
00134 $currencyDao->update('UPDATE subscription_types SET currency_code_alpha = ? WHERE type_id = ?', array($row['code_alpha'], $row['type_id']));
00135 $result->MoveNext();
00136 }
00137 unset($result);
00138 return true;
00139 }
00140
00147 function migrateIssueLabelAndSettings() {
00148
00149 $issueDao =& DAORegistry::getDAO('IssueDAO');
00150 $issueDao->update('UPDATE issues SET show_volume=0, show_number=0, show_year=0, show_title=1 WHERE label_format=4');
00151 $issueDao->update('UPDATE issues SET show_volume=0, show_number=0, show_year=1, show_title=0 WHERE label_format=3');
00152 $issueDao->update('UPDATE issues SET show_volume=1, show_number=0, show_year=1, show_title=0 WHERE label_format=2');
00153 $issueDao->update('UPDATE issues SET show_volume=1, show_number=1, show_year=1, show_title=0 WHERE label_format=1');
00154
00155
00156 $issueDao->update('ALTER TABLE issues DROP COLUMN label_format');
00157
00158
00159 $journalDao =& DAORegistry::getDAO('JournalDAO');
00160 $journalSettingsDao =& DAORegistry::getDAO('JournalSettingsDAO');
00161 $result =& $journalDao->retrieve('SELECT j.journal_id AS journal_id, js.setting_value FROM journals j LEFT JOIN journal_settings js ON (js.journal_id = j.journal_id AND js.setting_name = ?)', 'publicationFormat');
00162 while (!$result->EOF) {
00163 $row = $result->GetRowAssoc(false);
00164 $settings = array(
00165 'publicationFormatVolume' => false,
00166 'publicationFormatNumber' => false,
00167 'publicationFormatYear' => false,
00168 'publicationFormatTitle' => false
00169 );
00170 switch ($row['setting_value']) {
00171 case 4:
00172 $settings['publicationFormatTitle'] = true;
00173 break;
00174 case 3:
00175 $settings['publicationFormatYear'] = true;
00176 break;
00177 case 2:
00178 $settings['publicationFormatVolume'] = true;
00179 $settings['publicationFormatYear'] = true;
00180 break;
00181 case 1:
00182 default:
00183 $settings['publicationFormatVolume'] = true;
00184 $settings['publicationFormatNumber'] = true;
00185 $settings['publicationFormatYear'] = true;
00186 }
00187 foreach ($settings as $name => $value) {
00188 $journalDao->update('INSERT INTO journal_settings (journal_id, setting_name, setting_value, setting_type) VALUES (?, ?, ?, ?)', array($row['journal_id'], $name, $value?1:0, 'bool'));
00189 }
00190 $result->MoveNext();
00191 }
00192 $result->Close();
00193 unset($result);
00194
00195 $journalDao->update('DELETE FROM journal_settings WHERE setting_name = ?', array('publicationFormat'));
00196
00197 return true;
00198 }
00199
00205 function setJournalPrimaryLocales() {
00206 $journalDao =& DAORegistry::getDAO('JournalDAO');
00207 $journalSettingsDao =& DAORegistry::getDAO('JournalSettingsDAO');
00208
00209 $result =& $journalSettingsDao->retrieve('SELECT journal_id, setting_value FROM journal_settings WHERE setting_name = ?', array('primaryLocale'));
00210 while (!$result->EOF) {
00211 $row = $result->GetRowAssoc(false);
00212 $journalDao->update('UPDATE journals SET primary_locale = ? WHERE journal_id = ?', array($row['setting_value'], $row['journal_id']));
00213 $result->MoveNext();
00214 }
00215 $journalDao->update('UPDATE journals SET primary_locale = ? WHERE primary_locale IS NULL OR primary_locale = ?', array(INSTALLER_DEFAULT_LOCALE, ''));
00216 $result->Close();
00217 return true;
00218 }
00219
00224 function installBlockPlugins() {
00225 $pluginSettingsDao =& DAORegistry::getDAO('PluginSettingsDAO');
00226 $journalDao =& DAORegistry::getDAO('JournalDAO');
00227 $journals =& $journalDao->getJournals();
00228
00229
00230 $journalIds = array(0);
00231 while ($journal =& $journals->next()) {
00232 $journalIds[] = $journal->getJournalId();
00233 unset($journal);
00234 }
00235
00236 $pluginNames = array(
00237 'DevelopedByBlockPlugin',
00238 'HelpBlockPlugin',
00239 'UserBlockPlugin',
00240 'RoleBlockPlugin',
00241 'LanguageToggleBlockPlugin',
00242 'NavigationBlockPlugin',
00243 'FontSizeBlockPlugin',
00244 'InformationBlockPlugin'
00245 );
00246 foreach ($journalIds as $journalId) {
00247 $i = 0;
00248 foreach ($pluginNames as $pluginName) {
00249 $pluginSettingsDao->updateSetting($journalId, $pluginName, 'enabled', 'true', 'bool');
00250 $pluginSettingsDao->updateSetting($journalId, $pluginName, 'seq', $i++, 'int');
00251 $pluginSettingsDao->updateSetting($journalId, $pluginName, 'context', BLOCK_CONTEXT_RIGHT_SIDEBAR, 'int');
00252 }
00253 }
00254
00255 return true;
00256 }
00257
00263 function clearDataCache() {
00264 import('cache.CacheManager');
00265 $cacheManager =& CacheManager::getManager();
00266 $cacheManager->flush();
00267 return true;
00268 }
00269
00275 function localizeJournalSettings() {
00276 $journalSettingsDao =& DAORegistry::getDAO('JournalSettingsDAO');
00277 $journalDao =& DAORegistry::getDAO('JournalDAO');
00278
00279 $settingNames = array(
00280
00281 'title' => 'title',
00282 'journalInitials' => 'initials',
00283 'journalAbbreviation' => 'abbreviation',
00284 'sponsorNote' => 'sponsorNote',
00285 'publisherNote' => 'publisherNote',
00286 'contributorNote' => 'contributorNote',
00287 'searchDescription' => 'searchDescription',
00288 'searchKeywords' => 'searchKeywords',
00289 'customHeaders' => 'customHeaders',
00290
00291 'focusScopeDesc' => 'focusScopeDesc',
00292 'reviewPolicy' => 'reviewPolicy',
00293 'reviewGuidelines' => 'reviewGuidelines',
00294 'privacyStatement' => 'privacyStatement',
00295 'customAboutItems' => 'customAboutItems',
00296 'lockssLicense' => 'lockssLicense',
00297
00298 'authorGuidelines' => 'authorGuidelines',
00299 'submissionChecklist' => 'submissionChecklist',
00300 'copyrightNotice' => 'copyrightNotice',
00301 'metaDisciplineExamples' => 'metaDisciplineExamples',
00302 'metaSubjectClassTitle' => 'metaSubjectClassTitle',
00303 'metaSubjectClassUrl' => 'metaSubjectClassUrl',
00304 'metaSubjectExamples' => 'metaSubjectExamples',
00305 'metaCoverageGeoExamples' => 'metaCoverageGeoExamples',
00306 'metaCoverageChronExamples' => 'metaCoverageChronExamples',
00307 'metaCoverageResearchSampleExamples' => 'metaCoverageResearchSampleExamples',
00308 'metaTypeExamples' => 'metaTypeExamples',
00309
00310 'pubFreqPolicy' => 'pubFreqPolicy',
00311 'copyeditInstructions' => 'copyeditInstructions',
00312 'layoutInstructions' => 'layoutInstructions',
00313 'proofInstructions' => 'proofInstructions',
00314 'openAccessPolicy' => 'openAccessPolicy',
00315 'announcementsIntroduction' => 'announcementsIntroduction',
00316
00317 'homeHeaderTitleType' => 'homeHeaderTitleType',
00318 'homeHeaderTitle' => 'homeHeaderTitle',
00319 'homeHeaderTitleImage' => 'homeHeaderTitleImage',
00320 'pageHeaderTitleType' => 'pageHeaderTitleType',
00321 'pageHeaderTitle' => 'pageHeaderTitle',
00322 'pageHeaderTitleImage' => 'pageHeaderTitleImage',
00323 'homepageImage' => 'homepageImage',
00324 'readerInformation' => 'readerInformation',
00325 'authorInformation' => 'authorInformation',
00326 'librarianInformation' => 'librarianInformation',
00327 'journalPageHeader' => 'journalPageHeader',
00328 'journalPageFooter' => 'journalPageFooter',
00329 'additionalHomeContent' => 'additionalHomeContent',
00330 'description' => 'description',
00331 'navItems' => 'navItems'
00332 );
00333
00334 foreach ($settingNames as $oldName => $newName) {
00335 $result =& $journalDao->retrieve('SELECT j.journal_id, j.primary_locale FROM journals j, journal_settings js WHERE j.journal_id = js.journal_id AND js.setting_name = ? AND (js.locale IS NULL OR js.locale = ?)', array($oldName, ''));
00336 while (!$result->EOF) {
00337 $row = $result->GetRowAssoc(false);
00338 $journalSettingsDao->update('UPDATE journal_settings SET locale = ?, setting_name = ? WHERE journal_id = ? AND setting_name = ? AND (locale IS NULL OR locale = ?)', array($row['primary_locale'], $newName, $row['journal_id'], $oldName, ''));
00339 $result->MoveNext();
00340 }
00341 $result->Close();
00342 unset($result);
00343 }
00344
00345 return true;
00346 }
00347
00354 function migratePublisher() {
00355 $journalSettingsDao =& DAORegistry::getDAO('JournalSettingsDAO');
00356
00357 $result =& $journalSettingsDao->retrieve('SELECT j.primary_locale, s.setting_value, j.journal_id FROM journal_settings s, journals j WHERE s.journal_id = j.journal_id AND s.setting_name = ?', array('publisher'));
00358 while (!$result->EOF) {
00359 $row = $result->GetRowAssoc(false);
00360 $publisher = null;
00361 $publisher = @unserialize($row['setting_value']);
00362
00363 foreach (array('note' => 'publisherNote', 'institution' => 'publisherInstitution', 'url' => 'publisherUrl') as $old => $new) {
00364 if (isset($publisher[$old])) $journalSettingsDao->update(
00365 'INSERT INTO journal_settings (journal_id, setting_name, setting_value, setting_type, locale) VALUES (?, ?, ?, ?, ?)',
00366 array(
00367 $row['journal_id'],
00368 $new, $publisher[$old],
00369 'string',
00370 ($new == 'publisherNote'?$row['primary_locale']:'')
00371 )
00372 );
00373 }
00374
00375 $result->MoveNext();
00376 }
00377 $result->Close();
00378 unset($result);
00379
00380 $journalSettingsDao->update('DELETE FROM journal_settings WHERE setting_name = ?', 'publisher');
00381
00382 return true;
00383 }
00384
00389 function setGalleyLocales() {
00390 $articleGalleyDao =& DAORegistry::getDAO('ArticleGalleyDAO');
00391 $journalDao =& DAORegistry::getDAO('JournalDAO');
00392
00393 $result =& $journalDao->retrieve('SELECT g.galley_id, j.primary_locale FROM journals j, articles a, article_galleys g WHERE a.journal_id = j.journal_id AND g.article_id = a.article_id AND (g.locale IS NULL OR g.locale = ?)', '');
00394 while (!$result->EOF) {
00395 $row = $result->GetRowAssoc(false);
00396 $articleGalleyDao->update('UPDATE article_galleys SET locale = ? WHERE galley_id = ?', array($row['primary_locale'], $row['galley_id']));
00397 $result->MoveNext();
00398 }
00399 $result->Close();
00400 unset($result);
00401
00402 return true;
00403 }
00404
00409 function addSubscriptionIPRanges() {
00410 $subscriptionDao =& DAORegistry::getDAO('SubscriptionDAO');
00411 $subscriptions =& $subscriptionDao->getSubscriptions();
00412
00413 while ($subscription =& $subscriptions->next()) {
00414 $subscriptionDao->insertSubscriptionIPRange($subscription->getSubscriptionId(), $subscription->getIPRange());
00415 unset($subscription);
00416 }
00417
00418 return true;
00419 }
00420
00427 function migrateUserSettings() {
00428 $userSettingsDao =& DAORegistry::getDAO('UserSettingsDAO');
00429
00430 $result =& $userSettingsDao->retrieve('SELECT user_id, setting_name, journal_id, setting_value, setting_type FROM user_settings_old');
00431 while (!$result->EOF) {
00432 $row = $result->GetRowAssoc(false);
00433 $userSettingsDao->update('INSERT INTO user_settings (user_id, setting_name, journal_id, setting_value, setting_type, locale) VALUES (?, ?, ?, ?, ?, ?)', array($row['user_id'], $row['setting_name'], (int) $row['journal_id'], $row['setting_value'], $row['setting_type'], ''));
00434 $result->MoveNext();
00435 }
00436 $result->Close();
00437 unset($result);
00438
00439 return true;
00440 }
00441
00451 function dropAllIndexes() {
00452 $siteDao =& DAORegistry::getDAO('SiteDAO');
00453 $dict = NewDataDictionary($siteDao->_dataSource);
00454 $dropIndexSql = array();
00455
00456
00457
00458
00459 $tables = array(
00460 'versions', 'site', 'site_settings', 'scheduled_tasks',
00461 'sessions', 'journal_settings',
00462 'plugin_settings', 'roles', 'notification_status',
00463 'section_settings', 'section_editors', 'issue_settings',
00464 'custom_issue_orders', 'custom_section_orders',
00465 'article_settings', 'article_author_settings',
00466 'article_supp_file_settings', 'review_rounds',
00467 'article_html_galley_images',
00468 'email_templates_default_data', 'email_templates_data',
00469 'article_search_object_keywords',
00470 'oai_resumption_tokens', 'subscription_type_settings',
00471 'announcement_type_settings', 'announcement_settings',
00472 'group_settings', 'group_memberships'
00473 );
00474
00475
00476 foreach ($tables as $tableName) {
00477 $indexes = $dict->MetaIndexes($tableName);
00478 if (is_array($indexes)) foreach ($indexes as $indexName => $indexData) {
00479 $dropIndexSql = array_merge($dropIndexSql, $dict->DropIndexSQL($indexName, $tableName));
00480 }
00481 }
00482
00483
00484 foreach ($dropIndexSql as $sql) {
00485 $siteDao->update($sql);
00486 }
00487
00488
00489
00490 foreach ($tables as $tableName) {
00491 $indexes = $dict->MetaIndexes($tableName, true);
00492 if (!empty($indexes)) switch(Config::getVar('database', 'driver')) {
00493 case 'mysql':
00494 $siteDao->update("ALTER TABLE $tableName DROP PRIMARY KEY");
00495 break;
00496 }
00497 }
00498
00499
00500 return true;
00501 }
00502
00507 function ensureSupportedLocales() {
00508 $journalDao =& DAORegistry::getDAO('JournalDAO');
00509 $journalSettingsDao =& DAORegistry::getDAO('JournalSettingsDAO');
00510 $result =& $journalDao->retrieve(
00511 'SELECT j.journal_id,
00512 j.primary_locale
00513 FROM journals j
00514 LEFT JOIN journal_settings js ON (js.journal_id = j.journal_id AND js.setting_name = ?)
00515 WHERE js.setting_name IS NULL',
00516 array('supportedLocales')
00517 );
00518 while (!$result->EOF) {
00519 $row = $result->GetRowAssoc(false);
00520 $journalSettingsDao->updateSetting(
00521 $row['journal_id'],
00522 'supportedLocales',
00523 array($row['primary_locale']),
00524 'object',
00525 false
00526 );
00527 $result->MoveNext();
00528 }
00529 $result->Close();
00530 unset($result);
00531 return true;
00532 }
00533
00538 function renamePayPerViewSettings() {
00539 $journalSettingsDao =& DAORegistry::getDAO('JournalSettingsDAO');
00540 $journalDao =& DAORegistry::getDAO('JournalDAO');
00541
00542 $settingNames = array(
00543 'payPerViewFeeEnabled' => 'purchaseArticleFeeEnabled',
00544 'payPerViewFee' => 'purchaseArticleFee',
00545 'payPerViewFeeName' => 'purchaseArticleFeeName',
00546 'payPerViewFeeDescription' => 'purchaseArticleFeeDescription'
00547 );
00548
00549 foreach ($settingNames as $oldName => $newName) {
00550 $journalSettingsDao->update('UPDATE journal_settings SET setting_name = ? WHERE setting_name = ?', array($newName, $oldName));
00551 }
00552
00553 return true;
00554 }
00555 }
00556
00557 ?>