diff --git a/install/core/Installer.php b/install/core/Installer.php index 05ff7e593c..7becb17241 100644 --- a/install/core/Installer.php +++ b/install/core/Installer.php @@ -78,12 +78,6 @@ class Installer 'language', 'thousandSeparator', 'decimalMark', - 'smtpServer', - 'smtpPort', - 'smtpAuth', - 'smtpSecurity', - 'smtpUsername', - 'smtpPassword', 'outboundEmailFromName', 'outboundEmailFromAddress', 'outboundEmailIsShared', diff --git a/install/core/actions/saveEmailSettings.php b/install/core/actions/saveEmailSettings.php index 0578c811e2..ec1ad29638 100644 --- a/install/core/actions/saveEmailSettings.php +++ b/install/core/actions/saveEmailSettings.php @@ -28,17 +28,11 @@ ************************************************************************/ ob_start(); -$result = array('success' => false, 'errorMsg' => ''); +$result = ['success' => false, 'errorMsg' => '']; if (!empty($_SESSION['install'])) { $paramList = [ - 'smtpServer', - 'smtpPort', - 'smtpAuth', - 'smtpSecurity', - 'smtpUsername', - 'smtpPassword', 'outboundEmailFromName', 'outboundEmailFromAddress', 'outboundEmailIsShared', diff --git a/install/core/actions/step5.php b/install/core/actions/step5.php index 9c10a842ea..36a1b83c9d 100644 --- a/install/core/actions/step5.php +++ b/install/core/actions/step5.php @@ -29,35 +29,17 @@ $config = $installer->getConfig(); -$fields = array( - 'smtpServer' => array( - 'default' => $config->get('smtpServer'), - ), - 'smtpPort' => array( - 'default' => $config->get('smtpPort', 25), - ), - 'smtpAuth' => array( - 'default' => false, - ), - 'smtpSecurity' => array( - 'default' => $config->get('smtpSecurity'), - ), - 'smtpUsername' => array( - 'default' => $config->get('smtpUsername'), - ), - 'smtpPassword' => array( - 'default' => $config->get('smtpPassword'), - ), - 'outboundEmailFromName' => array( +$fields = [ + 'outboundEmailFromName' => [ 'default' => $config->get('outboundEmailFromName'), - ), - 'outboundEmailFromAddress' => array( + ], + 'outboundEmailFromAddress' => [ 'default' => $config->get('outboundEmailFromAddress'), - ), - 'outboundEmailIsShared' => array( + ], + 'outboundEmailIsShared' => [ 'default' => $config->get('outboundEmailIsShared', false), - ), -); + ], +]; foreach ($fields as $fieldName => $field) { if (isset($_SESSION['install'][$fieldName])) { diff --git a/public/install/js/install.js b/public/install/js/install.js index c3bfbe9ec5..df1a32610a 100644 --- a/public/install/js/install.js +++ b/public/install/js/install.js @@ -25,6 +25,7 @@ * In accordance with Section 7(b) of the GNU Affero General Public License version 3, * these Appropriate Legal Notices must retain the display of the "EspoCRM" word. ************************************************************************/ + var InstallScript = function(opt) { this.reChecking = false; @@ -169,18 +170,16 @@ InstallScript.prototype.step2 = function() { } InstallScript.prototype.setupConfirmation = function() { - var self = this; - var backAction = 'step2'; - var nextAction = 'step3'; + const self = this; + const backAction = 'step2'; - $('#back').click(function(){ + $('#back').click(function(){ $(this).attr('disabled', 'disabled'); self.goTo(backAction); }) $("#next").click(function(){ - $(this).attr('disabled', 'disabled'); self.showLoading(); self.actionsChecking(); @@ -188,13 +187,13 @@ InstallScript.prototype.setupConfirmation = function() { } InstallScript.prototype.step3 = function() { - var self = this; - var backAction = ''; - var nextAction = 'step4'; + const self = this; + const backAction = ''; + const nextAction = 'step4'; - $('input[name="user-name"]').blur(function(){ - var value = $(this).val(); - value = value.replace(/[^a-z0-9_\s]/gi, '').replace(/[\s]/g, '_').toLowerCase(); + $('input[name="user-name"]').blur(function(){ + let value = $(this).val(); + value = value.replace(/[^a-z0-9_\s]/gi, '').replace(/[\s]/g, '_').toLowerCase(); $(this).val(value); }) @@ -213,8 +212,9 @@ InstallScript.prototype.step3 = function() { self.checkPass({ success: function(){ - var data = self.userSett; - data['user-name'] = self.userSett.name; + const data = self.userSett; + + data['user-name'] = self.userSett.name; data['user-pass'] = self.userSett.pass; data.action = 'createUser'; @@ -242,122 +242,59 @@ InstallScript.prototype.step3 = function() { } InstallScript.prototype.step4 = function() { - var self = this; - var backAction = 'step3'; - var nextAction = 'step5'; + const self = this; + const backAction = 'step3'; + const nextAction = 'finish'; - $('#back').click(function(){ + $('#back').click(function(){ $(this).attr('disabled', 'disabled'); self.goTo(backAction); }) $("#next").click(function(){ $(this).attr('disabled', 'disabled'); + self.setSystemSett(); if (!self.validate()) { $(this).removeAttr('disabled'); return; } - var data = self.systemSettings; - data.action = 'savePreferences'; + const data = self.systemSettings; + + data.action = 'savePreferences'; + $.ajax({ url: "index.php", type: "POST", data: data, dataType: 'json', }) - .done(function(ajaxData){ + .done(ajaxData => { if (typeof(ajaxData) != 'undefined' && ajaxData.success) { self.goTo(nextAction); } - }) - .fail(function(ajaxData){ - - }) - - }) -} - -InstallScript.prototype.step5 = function() { - var self = this; - var backAction = 'step4'; - var nextAction = 'finish'; - - $('#back').click(function(){ - $(this).attr('disabled', 'disabled'); - self.goTo(backAction); - }) - - $("#next").click(function(){ - $(this).attr('disabled', 'disabled'); - self.saveEmailSettings(); - if (!self.validate()) { - $(this).removeAttr('disabled'); - return; - } - var data = self.emailSettings; - - data.action = 'saveEmailSettings'; - $.ajax({ - url: "index.php", - type: "POST", - data: data, - dataType: 'json', - }) - .done(function(ajaxData){ - if (typeof(ajaxData) != 'undefined' && ajaxData.success) { - self.goTo(nextAction); - } - }) - .fail(function(ajaxData){ - }); }) - - $('.field-smtpAuth').find('input[type="checkbox"]').change( function(e){ - if ($(this).is(':checked')) { - $('.cell-smtpPassword').removeClass('hide'); - $('.cell-smtpUsername').removeClass('hide'); - } - else { - $('.cell-smtpPassword').addClass('hide'); - $('.cell-smtpUsername').addClass('hide'); - $('.cell-smtpUsername').find('input').val(''); - $('.cell-smtpPassword').find('input').val(''); - } - }); - $('[name="smtpSecurity"]').change( function(e){ - - var smtpPorts = { - "": "25", - "SSL": "465", - "TLS": "587" - } - - var portVal = $(this).val(); - - $('[name="smtpPort"]').val(smtpPorts[portVal]); - }); } InstallScript.prototype.errors = function() { - var self = this; + const self = this; - this.reChecking = true; - var nextAction = ''; - $("#re-check").click(function(){ + this.reChecking = true; + + $("#re-check").click(function () { $(this).attr('disabled', 'disabled'); + self.showLoading(); self.actionsChecking(); }) } InstallScript.prototype.finish = function() { - var self = this; + const self = this; - var nextAction = ''; - $("#start").click(function(){ + $("#start").click(() => { self.goToEspo(); }) } @@ -388,66 +325,67 @@ InstallScript.prototype.setSystemSett = function() { this.systemSettings.language = $('[name="language"]').val(); } -InstallScript.prototype.saveEmailSettings = function() { - this.emailSettings.smtpServer = $('[name="smtpServer"]').val(); - this.emailSettings.smtpPort = $('[name="smtpPort"]').val(); - this.emailSettings.smtpAuth = $('[name="smtpAuth"]').is(':checked'); - this.emailSettings.smtpSecurity = $('[name="smtpSecurity"]').val(); - this.emailSettings.smtpUsername = $('[name="smtpUsername"]').val(); - this.emailSettings.smtpPassword = $('[name="smtpPassword"]').val(); - this.emailSettings.outboundEmailFromName = $('[name="outboundEmailFromName"]').val(); - this.emailSettings.outboundEmailFromAddress = $('[name="outboundEmailFromAddress"]').val(); - this.emailSettings.outboundEmailIsShared = $('[name="outboundEmailIsShared"]').is(':checked'); -} - InstallScript.prototype.checkSett = function(opt) { - var self = this; - this.hideMsg(); + const self = this; + this.hideMsg(); + + const data = this.connSett; + data.action = 'settingsTest'; - var data = this.connSett; - data.action = 'settingsTest'; $.ajax({ url: "index.php", data: data, type: "POST", dataType: 'json', }) - .done(function(data){ + .done(data => { if (typeof(data.success) !== 'undefined' && data.success) { data.success = true; - } - else { - var msg = ''; - var rowDelim = '
'; - if (typeof(data.errors)) { - var errors = data.errors; + } else { + let msg = ''; + const rowDelim = '
'; - Object.keys(errors).forEach(function (errorName) { - let errorData = errors[errorName]; + if (typeof(data.errors)) { + const errors = data.errors; - switch(errorName) { + Object.keys(errors).forEach(function (errorName) { + const errorData = errors[errorName]; + + switch(errorName) { case 'phpRequires': - var len = errorData.length; - for (var index = 0; index < len; index++) { - var temp = self.getLang('The PHP extension was not found...', 'messages'); + const len = errorData.length; + + for (let index = 0; index < len; index++) { + let temp = self.getLang('The PHP extension was not found...', 'messages'); + temp = temp.replace('{extName}', errorData[index]); - msg += temp+rowDelim; + + msg += temp + rowDelim; } + break; case 'modRewrite': msg += errorData + rowDelim; + break; case 'dbConnect': + let temp; + if (typeof(errorData.errorCode) !== 'undefined') { - var temp = self.getLang(errorData.errorCode, 'messages'); - if (temp == errorData.errorCode && typeof(errorData.errorMsg) !== 'undefined') temp = errorData.errorMsg; + temp = self.getLang(errorData.errorCode, 'messages'); + + if (temp == errorData.errorCode && typeof(errorData.errorMsg) !== 'undefined') { + temp = errorData.errorMsg; + } } else if (typeof(errorData.errorMsg) !== 'undefined') { temp = errorData.errorMsg; } - msg += temp+rowDelim; + + msg += temp + rowDelim; + break; default: @@ -466,9 +404,9 @@ InstallScript.prototype.checkSett = function(opt) { opt.success(data); }) - .fail(function(){ - let msg = self.getLang('Ajax failed', 'messages'); - self.showMsg({msg: msg, error: true}); + .fail(() => { + const msg = self.getLang('Ajax failed', 'messages'); + self.showMsg({msg: msg, error: true}); opt.error(); }) } @@ -476,27 +414,27 @@ InstallScript.prototype.checkSett = function(opt) { InstallScript.prototype.validate = function() { this.hideMsg(); - var valid = true; - var elem = null; - var fieldRequired = []; - switch (this.action) { + let valid = true; + let elem = null; + let fieldRequired = []; + + switch (this.action) { case 'step2': fieldRequired = ['db-name', 'host-name', 'db-user-name', 'db-driver']; break; + case 'step3': fieldRequired = ['user-name', 'user-pass', 'user-confirm-pass']; break; + case 'step4': fieldRequired = ['decimalMark']; break; - break; - case 'step5': - fieldRequired = ['smtpUsername']; - break; } - var len = fieldRequired.length; - for (var index = 0; index < len; index++) { + const len = fieldRequired.length; + + for (let index = 0; index < len; index++) { elem = $('[name="'+fieldRequired[index]+'"]').filter(':visible'); if (elem.length > 0) { if (elem.val() == '') { @@ -511,6 +449,7 @@ InstallScript.prototype.validate = function() { // decimal and group sep $('[name="thousandSeparator"]').parent().parent().removeClass('has-error'); + if (typeof(this.systemSettings.thousandSeparator) !== 'undefined' && typeof(this.systemSettings.decimalMark) !== 'undefined' && this.systemSettings.thousandSeparator == this.systemSettings.decimalMark @@ -518,8 +457,9 @@ InstallScript.prototype.validate = function() { $('[name="thousandSeparator"]').parent().parent().addClass('has-error'); $('[name="decimalMark"]').parent().parent().addClass('has-error'); - let msg = this.getLang('Thousand Separator and Decimal Mark equal', 'messages'); - this.showMsg({msg: msg, error: true}); + + const msg = this.getLang('Thousand Separator and Decimal Mark equal', 'messages'); + this.showMsg({msg: msg, error: true}); valid = false; } @@ -527,12 +467,12 @@ InstallScript.prototype.validate = function() { } InstallScript.prototype.setForm = function(opt) { - var formId = opt.formId || 'nav'; - var action = opt.action || 'main'; + const formId = opt.formId || 'nav'; + const action = opt.action || 'main'; - var actionField = $('', {'name': 'action', 'value': action, 'type': 'hidden'}); - $('#'+formId).append(actionField); + const actionField = $('', {'name': 'action', 'value': action, 'type': 'hidden'}); + $('#'+formId).append(actionField); $('#'+formId).attr('method', 'POST'); } @@ -542,14 +482,18 @@ InstallScript.prototype.goTo = function(action) { } InstallScript.prototype.getLang = function(key, type) { - return (typeof(this.langs) !== 'undefined' && typeof(this.langs[type]) !== 'undefined' && typeof(this.langs[type][key]) !== 'undefined')? this.langs[type][key] : key; + return ( + typeof(this.langs) !== 'undefined' && + typeof(this.langs[type]) !== 'undefined' && + typeof(this.langs[type][key]) !== 'undefined' + ) ? this.langs[type][key] : key; } InstallScript.prototype.showMsg = function(opt) { this.hideMsg(); - var message = opt.msg || ''; - var error = opt.error || false; + let message = opt.msg || ''; + const error = opt.error || false; if (message) { message = this.sanitizeHtml(message); @@ -593,21 +537,22 @@ InstallScript.prototype.hideLoading = function() { } InstallScript.prototype.checkPass = function(opt) { - var succesHand = opt.success || function(){}; - var errorHand = opt.error || function(msg){}; + const successHand = opt.success || (() => {}); + const errorHand = opt.error || (() => {}); - if (this.userSett.pass != this.userSett.confPass) { + if (this.userSett.pass !== this.userSett.confPass) { errorHand('Passwords do not match'); + return; } - succesHand(); + successHand(); } InstallScript.prototype.actionsChecking = function() { - var self = this; this.checkIndex = 0; this.checkErrors = []; + this.checkAction({ 'success': true, }); @@ -617,7 +562,7 @@ InstallScript.prototype.checkAction = function(dataMain) { var self = this; var data = {}; - if (this.checkIndex == this.checkActions.length) { + if (this.checkIndex === this.checkActions.length) { self.callbackChecking(dataMain); return; } @@ -626,11 +571,11 @@ InstallScript.prototype.checkAction = function(dataMain) { var checkAction = this.checkActions[currIndex].action; this.checkIndex++; - if (checkAction == 'checkModRewrite') { + if (checkAction === 'checkModRewrite') { this.checkModRewrite(); return; } - if (checkAction == 'saveSettings') { + if (checkAction === 'saveSettings') { data['user-name'] = this.userSett.name; data['user-pass'] = this.userSett.pass; } @@ -643,12 +588,11 @@ InstallScript.prototype.checkAction = function(dataMain) { data: data, dataType: 'json', }) - .done(function(ajaxData){ + .done(ajaxData => { if (typeof(ajaxData) != 'undefined' && ajaxData.success) { self.checkAction(ajaxData); - } - else { + } else { if (typeof(self.checkActions[currIndex]) != 'undefined' && typeof(self.checkActions[currIndex].break) != 'undefined' && self.checkActions[currIndex].break) { @@ -657,12 +601,14 @@ InstallScript.prototype.checkAction = function(dataMain) { } } }) - .fail(function(ajaxData){ - if (typeof(self.checkActions[currIndex]) != 'undefined' + .fail(ajaxData => { + if ( + typeof(self.checkActions[currIndex]) != 'undefined' && typeof(self.checkActions[currIndex].break) != 'undefined' && self.checkActions[currIndex].break) { // break next checking - var ajaxData = { + + ajaxData = { 'success': false, 'errorMsg': [self.getLang('Ajax failed', 'messages')] } @@ -678,15 +624,17 @@ InstallScript.prototype.checkModRewrite = function() { var self = this; this.modRewriteUrl; - var urlAjax = '..'+this.modRewriteUrl; - var realJqXHR = $.ajax({ + const urlAjax = '..' + this.modRewriteUrl; + var realJqXHR = $.ajax({ url: urlAjax, type: "GET", }) .always(function(data, textStatus, jqXHR){ - var status = jqXHR.status || realJqXHR.status || 404; - status += ''; + let status = jqXHR.status || realJqXHR.status || 404; + status += ''; + var data = {'success': 0}; + if (status == '200' || status == '401') { var data = {'success': 1}; } @@ -706,16 +654,18 @@ InstallScript.prototype.callbackModRewrite = function(data) { } ajaxData.success = false; - ajaxData.errorMsg = this.getModRewriteErrorMesssage(); + ajaxData.errorMsg = this.getModRewriteErrorMessage(); - var realCheckIndex = this.checkIndex - 1; - if (typeof(this.checkActions[realCheckIndex]) != 'undefined' - && typeof(this.checkActions[realCheckIndex].break) != 'undefined') { + const realCheckIndex = this.checkIndex - 1; + + if ( + typeof(this.checkActions[realCheckIndex]) != 'undefined' && + typeof(this.checkActions[realCheckIndex].break) != 'undefined' + ) { if (this.checkActions[realCheckIndex].break) { // break next checking this.callbackChecking(ajaxData); - } - else { + } else { this.checkAction(ajaxData); } } @@ -723,17 +673,18 @@ InstallScript.prototype.callbackModRewrite = function(data) { InstallScript.prototype.callbackChecking = function(data) { this.hideLoading(); + if (typeof(data) != 'undefined' && data.success) { this.goTo('step3'); - } - else { - var errorMsg = (typeof(data.errorMsg))? data.errorMsg : ''; - errorMsg += (typeof(data.errorFixInstruction) != 'undefined')? data.errorFixInstruction : ''; + } else { + let errorMsg = (typeof (data.errorMsg)) ? data.errorMsg : ''; + + errorMsg += (typeof(data.errorFixInstruction) != 'undefined')? data.errorFixInstruction : ''; + if (this.reChecking) { this.showMsg({msg: errorMsg, error: true}); $("#re-check").removeAttr('disabled'); - } - else { + } else { this.setForm({action: 'errors'}); $('#nav').submit(); } @@ -741,11 +692,11 @@ InstallScript.prototype.callbackChecking = function(data) { } InstallScript.prototype.getEspoPath = function(onlyPath) { - onlyPath = typeof onlyPath !== 'undefined' ? onlyPath : false; - var location = window.location.href; - if (onlyPath) { + let location = window.location.href; + + if (onlyPath) { location = window.location.pathname; } @@ -754,22 +705,31 @@ InstallScript.prototype.getEspoPath = function(onlyPath) { return location; } -InstallScript.prototype.getModRewriteErrorMesssage = function() { +InstallScript.prototype.getModRewriteErrorMessage = function() { + let message = ''; - var message = ''; - if (typeof(this.langs) !== 'undefined') { - message = (typeof(this.langs['options']['modRewriteTitle'][this.serverType]) !== 'undefined')? this.langs['options']['modRewriteTitle'][this.serverType] : this.langs['options']['modRewriteTitle']['default']; - message += (typeof(this.langs['options']['modRewriteInstruction'][this.serverType]) !== 'undefined' && typeof(this.langs['options']['modRewriteInstruction'][this.serverType][this.OS]) !== 'undefined') ? this.langs['options']['modRewriteInstruction'][this.serverType][this.OS] : ''; - message = message.replace("{ESPO_PATH}", this.getEspoPath(true)).replace("{API_PATH}", this.apiPath).replace("{API_PATH}", this.apiPath); + if (typeof(this.langs) !== 'undefined') { + message = (typeof(this.langs['options']['modRewriteTitle'][this.serverType]) !== 'undefined') ? + this.langs['options']['modRewriteTitle'][this.serverType] : + this.langs['options']['modRewriteTitle']['default']; + + message += ( + typeof(this.langs['options']['modRewriteInstruction'][this.serverType]) !== 'undefined' && + typeof(this.langs['options']['modRewriteInstruction'][this.serverType][this.OS]) !== 'undefined' + ) ? this.langs['options']['modRewriteInstruction'][this.serverType][this.OS] : ''; + + message = message + .replace("{ESPO_PATH}", this.getEspoPath(true)) + .replace("{API_PATH}", this.apiPath).replace("{API_PATH}", this.apiPath); } return message; } InstallScript.prototype.goToEspo = function() { + const location = this.getEspoPath(); - var location = this.getEspoPath(); - window.location.replace(location); + window.location.replace(location); } window.InstallScript = InstallScript;