diff --git a/src/main.js b/src/main.js index 17db8d9..475caed 100755 --- a/src/main.js +++ b/src/main.js @@ -1,6 +1,5 @@ -var Conf = -{ +var Conf = { appName: 'Verdnatura' ,dsName: 'verdnatura' ,dsPath: 'HKCU\\Software\\ODBC\\ODBC.INI\\verdnatura' @@ -11,7 +10,7 @@ var Conf = ,defaultLocale: 'es' }; -var Locale ={ +var Locale = { es: { "Enter a user name": "Introduce un nombre de usuario" @@ -34,61 +33,56 @@ var Locale ={ } }; -var App = -{ - - shell: new ActiveXObject ('WScript.Shell'), - fso: new ActiveXObject ('scripting.filesystemobject'), +var App = { + shell: new ActiveXObject('WScript.Shell'), + fso: new ActiveXObject('scripting.filesystemobject'), - init: function () - { + init: function() { var width = 420; var height = 360; - window.resizeTo (width, height); - window.moveTo ((screen.width - width) / 2, (screen.height - height) / 2); + window.resizeTo(width, height); + window.moveTo((screen.width - width) / 2, (screen.height - height) / 2); }, - _onLoad: function () - { + _onLoad: function() { // Initializes the global variables var split = Verdnatura.commandLine.match(/(?:[^\s"]+|"[^"]*")+/g); if (split.length > 1) - this.module = split[1].replace (/^"+|"+$/g, ''); + this.module = split[1].replace(/^"+|"+$/g, ''); if (!this.module) this.module = Conf.defaultModule; - this.appDir = this.getEnv ('ProgramFiles') +'\\'+ Conf.appName; - this.moduleDir = this.shell.SpecialFolders ('AppData') +'\\'+ Conf.appName; + this.appDir = this.getEnv('ProgramFiles') +'\\'+ Conf.appName; + this.moduleDir = this.shell.SpecialFolders('AppData') +'\\'+ Conf.appName; this.remoteFile = Conf.remoteUrl +'/'+ this.module +'.7z'; - this.compressFile = this.getEnv ('TEMP') +'\\'+ this.module +'.7z'; + this.compressFile = this.getEnv('TEMP') +'\\'+ this.module +'.7z'; this.mdbFile = this.moduleDir +'\\'+ this.module +'.mdb'; // Creates the necessary registry entries - var configured = this.regRead (Conf.regPath, 'configured'); + var configured = this.regRead(Conf.regPath, 'configured'); - if (!configured) - { + if (!configured) { var path; // Creates the Access configuration entries path = 'HKCU\\Software\\Microsoft\\Office\\11.0\\Access\\Settings'; - this.regWrites (path, 'REG_DWORD', { + this.regWrites(path, 'REG_DWORD', { 'Confirm Document Deletions' : 0, 'Confirm Action Queries' : 0, 'Confirm Record Changes' : 0 }); path = 'HKCU\\Software\\Microsoft\\Office\\11.0\\Access\\Security'; - this.regWrite (path, 'Level', 1, 'REG_DWORD'); + this.regWrite(path, 'Level', 1, 'REG_DWORD'); // Creates the MySQL ODBC connection - var driverPath = this.getEnv ('ProgramFiles') + var driverPath = this.getEnv('ProgramFiles') +'\\MySQL\\Connector ODBC 5.1\\myodbc5.dll'; var params = { @@ -101,7 +95,7 @@ var App = 'AUTO_RECONNECT' : 1 }; - this.createOdbc ( + this.createOdbc( Conf.dsName, 'Mysql ODBC 5.1 Driver', params @@ -109,7 +103,7 @@ var App = // Creates the PosgreSQL ODBC connection - var driverPath = this.getEnv ('ProgramFiles') + var driverPath = this.getEnv('ProgramFiles') +'\\psqlODBC\\0804\\bin\\psqlodbc35w.dll'; var params = { @@ -122,7 +116,7 @@ var App = 'PASSWORD' : '' }; - this.createOdbc ( + this.createOdbc( 'verdnaturapg', 'PostgreSQL Unicode', params @@ -130,48 +124,45 @@ var App = // Marks the application as configured - this.regWrite (Conf.regPath, 'configured', 1, 'REG_DWORD'); + this.regWrite(Conf.regPath, 'configured', 1, 'REG_DWORD'); } // Loads the form data - var user = this.regRead (Conf.dsPath, 'UID'); - var password = this.regRead (Conf.dsPath, 'PWD'); - var remember = this.regRead (Conf.regPath, 'remember'); + var user = this.regRead(Conf.dsPath, 'UID'); + var password = this.regRead(Conf.dsPath, 'PWD'); + var remember = this.regRead(Conf.regPath, 'remember'); if (user) this.$('user').value = user; - if (remember && password) - { + if (remember && password) { this.$('password').value = password; this.$('remember').checked = true; - this._onEnterClick (); - } - else - this.resetForm (); + this._onEnterClick(); + } else + this.resetForm(true); }, - createOdbc: function (dsName, driverName, params) - { + resetForm: function(clearPassword) { + if (clearPassword) + this.$('password').value = ''; + + this.$('user').focus(); + this.$('user').select(); + }, + + createOdbc: function(dsName, driverName, params) { var odbcPath = 'HKCU\\Software\\ODBC\\ODBC.INI\\'; - this.regWrites (odbcPath + dsName, 'REG_SZ', params); - this.regWrite (odbcPath + 'ODBC Data Sources', + this.regWrites(odbcPath + dsName, 'REG_SZ', params); + this.regWrite(odbcPath + 'ODBC Data Sources', dsName, driverName, 'REG_SZ'); }, - resetForm: function () - { - this.$('user').focus (); - this.$('user').select (); - this.$('password').value = ''; - }, - - _disableUi: function (disabled, loadMessage) - { + _disableUi: function(disabled, loadMessage) { if (disabled) - this._hideMessage (); + this._hideMessage(); else loadMessage = ''; @@ -187,72 +178,63 @@ var App = this.$('spinner').style.display = display; }, - _onKeyPress: function (e) - { - switch (e.keyCode) - { + _onKeyPress: function(e) { + switch (e.keyCode) { case 13: // Enter - this._onEnterPress (e); + this._onEnterPress(e); break; case 27: // Esc - window.close (); + window.close(); break; } }, - _onEnterPress: function (event) - { + _onEnterPress: function(event) { var target = event.target || event.srcElement; - if (target && target.id == 'user' && this.$('password').value == '') - { - this.$('password').focus (); + if (target && target.id == 'user' && this.$('password').value == '') { + this.$('password').focus(); return; } - this._onEnterClick (); + this._onEnterClick(); }, - _onEnterClick: function () - { - this._disableUi (true, _('Loading')); - setTimeout (function () {App.login ();}, 0); + _onEnterClick: function() { + setTimeout(function() {App.login();}, 0); }, - login: function () - { + login: function() { var clearPassword; + + this._disableUi(true, _('Loading')); try { var user = this.$('user').value; var password = this.$('password').value; if (!user || user === '') - throw new Error (_('Enter a user name')); + throw new Error(_('Enter a user name')); if (!password || password === '') - throw new Error (_('Enter a password')); + throw new Error(_('Enter a password')); - this.regWrite (Conf.dsPath, 'UID', user, 'REG_SZ'); - this.regWrite (Conf.dsPath, 'PWD', password, 'REG_SZ'); + this.regWrite(Conf.dsPath, 'UID', user, 'REG_SZ'); + this.regWrite(Conf.dsPath, 'PWD', password, 'REG_SZ'); // Gets the last version number using the MySQL ODBC connection - var mysqlConn = new ActiveXObject ('ADODB.Connection'); + var mysqlConn = new ActiveXObject('ADODB.Connection'); try { - mysqlConn.open (Conf.dsName); - } - catch (e) - { + mysqlConn.open(Conf.dsName); + } catch (e) { var dbErrors = mysqlConn.errors; - if (dbErrors.count > 0) - { + if (dbErrors.count > 0) { var errorMsg; var dbError = dbErrors.item(0); - switch (dbError.NativeError) - { + switch (dbError.NativeError) { case 1045: // Access denied clearPassword = true; errorMsg = _('Bad login'); @@ -265,208 +247,178 @@ var App = } dbErrors.clear(); - throw new Error (errorMsg); - } - else + throw new Error(errorMsg); + } else throw e; } var sql = 'SELECT version FROM versiones WHERE programa = \''+ this.module +'\''; - var rs = mysqlConn.execute (sql); - var lastVersion = parseInt (rs.fields(0).value); + var rs = mysqlConn.execute(sql); + var lastVersion = parseInt(rs.fields(0).value); - rs.close (); - mysqlConn.close (); + rs.close(); + mysqlConn.close(); // Obtains the local version number from the MDB file var localVersion = -1; - if (this.fso.fileExists (this.mdbFile)) + if (this.fso.fileExists(this.mdbFile)) try { - var mdbConn = new ActiveXObject ('ADODB.Connection'); - mdbConn.open ('Provider=Microsoft.Jet.OLEDB.4.0; Data Source='+ this.mdbFile +';'); + var mdbConn = new ActiveXObject('ADODB.Connection'); + mdbConn.open('Provider=Microsoft.Jet.OLEDB.4.0; Data Source='+ this.mdbFile +';'); - var oRs = new ActiveXObject ('ADODB.Recordset'); - oRs.Open ('SELECT Version FROM tblVariables', mdbConn); - localVersion = oRs.EOF ? -1 : parseInt (oRs('Version')); + var oRs = new ActiveXObject('ADODB.Recordset'); + oRs.Open('SELECT Version FROM tblVariables', mdbConn); + localVersion = oRs.EOF ? -1 : parseInt(oRs('Version')); - oRs.close (); - mdbConn.close (); - } - catch (e) {} + oRs.close(); + mdbConn.close(); + } catch (e) {} // Compares the local version with the las version - if (localVersion < lastVersion) - { - this._disableUi (true, _('Updating')); - var request = new ActiveXObject ('MSXML2.XMLHTTP'); - request.open ('GET', this.remoteFile +'?'+ new Date().getTime(), true); - request.onreadystatechange = function () { - App._onRequestReady (request); + if (localVersion < lastVersion) { + this._disableUi(true, _('Updating')); + var request = new ActiveXObject('MSXML2.XMLHTTP'); + request.open('GET', this.remoteFile +'?'+ new Date().getTime(), true); + request.onreadystatechange = function() { + App._onRequestReady(request); }; - request.send (); - } - else - this.openMdb (); - } - catch (e) - { - this._catchError (e, clearPassword); + request.send(); + } else + this.openMdb(); + } catch (e) { + this._catchError(e, clearPassword); } }, - _onRequestReady: function (request) + _onRequestReady: function(request) { if (request.readyState !== 4) return; try { if (request.status !== 200) - throw new Error ('HTTP: '+ request.statusText); + throw new Error('HTTP: '+ request.statusText); - if (this.fso.fileExists (this.compressFile)) - this.fso.deleteFile (this.compressFile); + if (this.fso.fileExists(this.compressFile)) + this.fso.deleteFile(this.compressFile); - var stream = new ActiveXObject ('ADODB.Stream'); - stream.open (); + var stream = new ActiveXObject('ADODB.Stream'); + stream.open(); stream.Type = 1; //adTypeBinary - stream.write (request.responseBody); + stream.write(request.responseBody); stream.Position = 0; - stream.saveToFile (this.compressFile, 2); - stream.close (); + stream.saveToFile(this.compressFile, 2); + stream.close(); - if (this.fso.fileExists (this.mdbFile)) - this.fso.deleteFile (this.mdbFile); + if (this.fso.fileExists(this.mdbFile)) + this.fso.deleteFile(this.mdbFile); - this.run ('7za e "'+ this.compressFile +'" -o"'+ this.moduleDir +'"', true); - this.fso.deleteFile (this.compressFile); - } - catch (e) - { - alert (_('Error while updating') +': '+ e.message); + this.run('7za e "'+ this.compressFile +'" -o"'+ this.moduleDir +'"', true); + this.fso.deleteFile(this.compressFile); + } catch (e) { + alert(_('Error while updating') +': '+ e.message); } try { - if (!this.fso.fileExists (this.mdbFile)) - throw new Error (_('MDB file not found')); + if (!this.fso.fileExists(this.mdbFile)) + throw new Error(_('MDB file not found')); - this.openMdb (); - } - catch (e) - { - this._catchError (e); + this.openMdb(); + } catch (e) { + this._catchError(e); } }, - _catchError: function (error, clearPassword) - { - if (error) - { - if (!this.$('remember').checked || clearPassword) - this.regWrite (Conf.dsPath, 'PWD', '', 'REG_SZ'); - - this.showMessage (error.message); - } - - this._disableUi (false); - this.$('user').focus (); - this.$('user').select (); - }, - - openMdb: function () - { + openMdb: function() { var remember = this.$('remember').checked ? 1 : 0; - this.regWrite (Conf.regPath, 'remember', remember, 'REG_DWORD'); + this.regWrite(Conf.regPath, 'remember', remember, 'REG_DWORD'); - var programFiles = this.getEnv ('ProgramFiles'); + var programFiles = this.getEnv('ProgramFiles'); var accessBin = programFiles +'\\Microsoft Office\\OFFICE11\\MSACCESS.EXE'; - if (!this.fso.fileExists (accessBin)) - throw new Error (_('Microsoft Access 2003 is not installed')); + if (!this.fso.fileExists(accessBin)) + throw new Error(_('Microsoft Access 2003 is not installed')); - this.shell.exec ('"'+ accessBin +'" "'+ this.mdbFile +'"'); - window.close (); + this.shell.exec('"'+ accessBin +'" "'+ this.mdbFile +'"'); + window.close(); }, - showMessage: function (message) - { + _catchError: function(error, clearPassword) { + if (!this.$('remember').checked || clearPassword) + this.regWrite(Conf.dsPath, 'PWD', '', 'REG_SZ'); + + this._disableUi(false); + this.showMessage(error.message); + this.resetForm(clearPassword); + }, + + showMessage: function(message) { if (this.messageTimeout) - clearTimeout (this.messageTimeout); + clearTimeout(this.messageTimeout); var messageDiv = this.$('message'); messageDiv.innerHTML = message; messageDiv.style.display = 'block'; - this.messageTimeout = setTimeout (function () {App._hideMessage();}, 10000); + this.messageTimeout = setTimeout(function() {App._hideMessage();}, 10000); }, - _onBodyClick: function () - { - this._hideMessage (); + _onBodyClick: function() { + this._hideMessage(); }, - _hideMessage: function () - { - if (this.messageTimeout) - { + _hideMessage: function() { + if (this.messageTimeout) { this.$('message').style.display = 'none'; - clearTimeout (this.messageTimeout); + clearTimeout(this.messageTimeout); this.messageTimeout = null; } }, - _onUnload: function () - { - this._disableUi (false); + _onUnload: function() { + this._disableUi(false); }, - $: function (id) - { - return document.getElementById (id); + $: function(id) { + return document.getElementById(id); }, - run: function (command, wait) - { + run: function(command, wait) { if (!wait) wait = false; - this.shell.run (command, 0, wait); + this.shell.run(command, 0, wait); }, - getEnv: function (varName) - { - return this.shell.expandEnvironmentStrings ('%'+ varName +'%'); + getEnv: function(varName) { + return this.shell.expandEnvironmentStrings('%'+ varName +'%'); }, - regRead: function (path, key) - { + regRead: function(path, key) { try { - var value = this.shell.regRead (path +'\\'+ key); - } - catch (e) { + var value = this.shell.regRead(path +'\\'+ key); + } catch (e) { var value = null; } return value; }, - regWrite: function (path, key, value, type) - { - this.shell.regWrite (path +'\\'+ key, value, type); + regWrite: function(path, key, value, type) { + this.shell.regWrite(path +'\\'+ key, value, type); }, - regWrites: function (path, type, values) - { - for (var key in values) - this.regWrite (path, key, values[key], type); + regWrites: function(path, type, values) { + for(var key in values) + this.regWrite(path, key, values[key], type); } }; -App.init (); +App.init(); -function _(string) -{ +function _(string) { var translation = Locale[Conf.defaultLocale][string]; return translation ? translation : string; }