diff --git a/chrome/content/zotero/upgrade.xul b/chrome/content/zotero/upgrade.xul
index a97336148..5a214291b 100644
--- a/chrome/content/zotero/upgrade.xul
+++ b/chrome/content/zotero/upgrade.xul
@@ -14,7 +14,6 @@
this.init = init;
this.onAdvance = onAdvance;
this.doUpgrade = doUpgrade;
- this.onChangeLogLinkClick = onChangeLogLinkClick;
var obj = window.arguments[0].wrappedJSObject;
var Zotero = obj.Zotero;
@@ -23,9 +22,18 @@
function init() {
var wizard = document.getElementById('zotero-schema-upgrade');
- var continueButtonName = wizard.getButton('next').getAttribute('label');
+ var continueButton = wizard.getButton('next');
+ continueButton.focus(); // prevent focusing upgrade instructions link
+
+ // Use proper button name in text
+ var continueButtonName = continueButton.getAttribute('label');
var str = Zotero.getString('upgrade.advanceMessage', continueButtonName);
document.getElementById('zotero-advance-message').setAttribute('value', str);
+
+ if (data.majorUpgrade) {
+ document.getElementById('zotero-major-upgrade').hidden = false;
+ document.getElementById('zotero-upgrade-required').hidden = true;
+ }
}
@@ -45,6 +53,28 @@
onAdvance();
try {
+ if (data.integrityCheck) {
+ if (!Zotero.DB.integrityCheck()) {
+ var pr = Components.classes["@mozilla.org/network/default-prompt;1"]
+ .createInstance(Components.interfaces.nsIPrompt);
+ var buttonFlags = (pr.BUTTON_POS_0) * (pr.BUTTON_TITLE_IS_STRING)
+ + (pr.BUTTON_POS_1) * (pr.BUTTON_TITLE_CANCEL);
+ var index = pr.confirmEx(
+ Zotero.getString('general.error'),
+ Zotero.getString('upgrade.integrityCheckFailed'),
+ buttonFlags, Zotero.getString('upgrade.loadDBRepairTool'),
+ null, null, null, {});
+
+ if (index == 0) {
+ Zotero.initialURL = 'https://www.zotero.org/utils/dbfix/';
+ }
+
+ _setStartupError();
+ _clickCancel();
+ return;
+ }
+ }
+
Zotero.Schema.updateSchema();
}
catch (e) {
@@ -53,9 +83,7 @@
Components.utils.reportError(e);
- var cancelButton = wizard.getButton('cancel');
- cancelButton.setAttribute('disabled', false);
- cancelButton.click();
+ _clickCancel();
return;
}
@@ -65,17 +93,45 @@
}
- function onChangeLogLinkClick() {
+ this.onUpgradeInstructionsLinkClick = function () {
+ _setStartupError();
+ Zotero.initialURL = 'http://zotero.org/support/upgrade';
+ _clickCancel();
+ }
+
+
+ this.onChangeLogLinkClick = function () {
Zotero.initialURL = 'http://zotero.org/support/changelog';
document.getElementById('zotero-schema-upgrade').getButton('finish').click();
}
+
+
+ function _setStartupError() {
+ Zotero.startupError = Zotero.localeJoin([
+ Zotero.getString('upgrade.dbUpdateRequired'), Zotero.getString('general.restartFirefox')
+ ]);
+ }
+
+
+ function _clickCancel() {
+ var cancelButton = document.getElementById('zotero-schema-upgrade').getButton('cancel');
+ cancelButton.setAttribute('disabled', false);
+ cancelButton.click();
+ }
}
]]>
&zotero.upgrade.newVersionInstalled;
- &zotero.upgrade.upgradeRequired; &zotero.upgrade.autoBackup;
+ &zotero.upgrade.upgradeRequired; &zotero.upgrade.autoBackup;
+
+
+ &zotero.upgrade.majorUpgradeBeforeLink;
+
+ &zotero.upgrade.majorUpgradeAfterLink;
+
@@ -88,7 +144,7 @@
&zotero.upgrade.upgradeSucceeded;
&zotero.upgrade.changeLogBeforeLink;
-
&zotero.upgrade.changeLogAfterLink;
diff --git a/chrome/content/zotero/xpcom/schema.js b/chrome/content/zotero/xpcom/schema.js
index ccc68aa22..79499021a 100644
--- a/chrome/content/zotero/xpcom/schema.js
+++ b/chrome/content/zotero/xpcom/schema.js
@@ -52,9 +52,24 @@ Zotero.Schema = new function(){
var dbVersion = _getDBVersion('userdata');
var schemaVersion = _getSchemaSQLVersion('userdata');
+ // Upgrading from 1.0 or earlier
+ if (dbVersion <= 36) {
+ var integrityCheck = true;
+ var majorUpgrade = true;
+ }
+ else {
+ var integrityCheck = false;
+ var majorUpgrade = false;
+ }
+
var ww = Components.classes["@mozilla.org/embedcomp/window-watcher;1"]
- .getService(Components.interfaces.nsIWindowWatcher);
- var obj = { Zotero: Zotero, data: { success: false } };
+ .getService(Components.interfaces.nsIWindowWatcher);
+ var data = {
+ success: false,
+ majorUpgrade: majorUpgrade,
+ integrityCheck: integrityCheck
+ };
+ var obj = { Zotero: Zotero, data: data };
var io = { wrappedJSObject: obj };
var win = ww.openWindow(null, "chrome://zotero/content/upgrade.xul",
"zotero-schema-upgrade", "chrome,centerscreen,modal", io);
diff --git a/chrome/content/zotero/xpcom/zotero.js b/chrome/content/zotero/xpcom/zotero.js
index fb5c03212..43459c2fa 100644
--- a/chrome/content/zotero/xpcom/zotero.js
+++ b/chrome/content/zotero/xpcom/zotero.js
@@ -71,7 +71,7 @@ var Zotero = new function(){
// Public properties
this.initialized = false;
this.skipLoading = false;
- this.__defineGetter__("startupError", function() { return _startupError; });
+ this.startupError;
this.__defineGetter__("startupErrorHandler", function() { return _startupErrorHandler; });
this.version;
this.platform;
@@ -146,7 +146,6 @@ var Zotero = new function(){
*/
this.__defineGetter__('locked', function () _locked);
- var _startupError;
var _startupErrorHandler;
var _zoteroDirectory = false;
var _localizedStringBundle;
@@ -255,7 +254,7 @@ var Zotero = new function(){
catch (e) {
// Zotero dir not found
if (e.name == 'NS_ERROR_FILE_NOT_FOUND') {
- _startupError = Zotero.getString('dataDir.notFound');
+ this.startupError = Zotero.getString('dataDir.notFound');
_startupErrorHandler = function() {
var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]
.getService(Components.interfaces.nsIWindowMediator);
@@ -268,7 +267,7 @@ var Zotero = new function(){
+ (ps.BUTTON_POS_2) * (ps.BUTTON_TITLE_IS_STRING);
var index = ps.confirmEx(win,
Zotero.getString('general.error'),
- _startupError + '\n\n' +
+ this.startupError + '\n\n' +
Zotero.getString('dataDir.previousDir') + ' '
+ Zotero.Prefs.get('lastDataDir'),
buttonFlags, null,
@@ -332,7 +331,7 @@ var Zotero = new function(){
Zotero.getString('startupError.databaseCannotBeOpened'),
Zotero.getString('startupError.checkPermissions')
]);
- _startupError = msg;
+ this.startupError = msg;
}
Components.utils.reportError(e);
@@ -371,10 +370,10 @@ var Zotero = new function(){
var kbURL = "http://zotero.org/support/kb/newer_db_version";
var seeKB = "See " + kbURL + " for more information.";
var msg = Zotero.localeJoin([zoteroVersionIsOlder, upgradeToLatestVersion]) + "\n\n" + currentVersion + "\n\n" + seeKB;
- _startupError = msg;
+ this.startupError = msg;
}
else {
- _startupError = "Database upgrade error";
+ this.startupError = "Database upgrade error";
}
Components.utils.reportError(e);
return false;
diff --git a/chrome/locale/en-US/zotero/zotero.dtd b/chrome/locale/en-US/zotero/zotero.dtd
index a179b5dfb..267ff1771 100644
--- a/chrome/locale/en-US/zotero/zotero.dtd
+++ b/chrome/locale/en-US/zotero/zotero.dtd
@@ -11,6 +11,10 @@
+
+
+
+
diff --git a/chrome/locale/en-US/zotero/zotero.properties b/chrome/locale/en-US/zotero/zotero.properties
index 006d7d9c9..a2a08d1d8 100644
--- a/chrome/locale/en-US/zotero/zotero.properties
+++ b/chrome/locale/en-US/zotero/zotero.properties
@@ -31,8 +31,12 @@ install.quickStartGuide.message.welcome = Welcome to Zotero!
install.quickStartGuide.message.clickViewPage = Click the "View Page" button above to visit our Quick Start Guide and learn how to get started collecting, managing, and citing your research.
install.quickStartGuide.message.thanks = Thanks for installing Zotero.
+upgrade.failed.title = Upgrade Failed
upgrade.failed = Upgrading of the Zotero database failed:
upgrade.advanceMessage = Press %S to upgrade now.
+upgrade.dbUpdateRequired = The Zotero database must be updated.
+upgrade.integrityCheckFailed = Your Zotero database must be repaired before the upgrade can continue.
+upgrade.loadDBRepairTool = Load Database Repair Tool
errorReport.reportErrors = Report Errors...
errorReport.reportInstructions = You can report this error by selecting "%S" from the Actions (gear) menu.
diff --git a/chrome/skin/default/zotero/upgrade.css b/chrome/skin/default/zotero/upgrade.css
index 8ea22a6cf..6b85fdf83 100644
--- a/chrome/skin/default/zotero/upgrade.css
+++ b/chrome/skin/default/zotero/upgrade.css
@@ -2,6 +2,6 @@ description {
margin-bottom: 1.5em;
}
-#zotero-change-log-link {
+description > label {
margin: 0;
}