var steps = []; Ext.onReady(function () { PMExt.notify_time_out = 2; var selectDbEngine = function (value) { var port, username; switch (value) { case 'mysql': port = 3306; username = 'root'; break; default: port = 1433; username = 'sa'; break; } Ext.getCmp('db_port').setValue(port); Ext.getCmp('db_username').setValue(username); }; var storeDatabase = new Ext.data.Store({ proxy: new Ext.data.HttpProxy({url: 'getEngines', method: 'POST'}), reader: new Ext.data.JsonReader({ fields: [{name: 'id'}, {name: 'label'}] }), listeners: { load: function () { var value = Ext.getCmp('db_engine').store.getAt(0).id; Ext.getCmp('db_engine').setValue(value); selectDbEngine(value); testConnection(); } } }); var store = new Ext.data.ArrayStore({ fields: ['id', 'label'], data: [['en', 'English'], ['es', 'Spanish']] }); var cmbLanguages = new Ext.form.ComboBox({ fieldLabel: _('ID_LANGUAGES'), store: store, labelWidth: 200, displayField: 'label', typeAhead: true, mode: 'local', forceSelection: true, triggerAction: 'all', emptyText: _('ID_EMPTY_LANGUAGE'), selectOnFocus: true }); // getting the system info function getSystemInfo() { wizard.showLoadMask(true); Ext.Ajax.request({ url: 'getSystemInfo', success: function (response) { var response = Ext.util.JSON.decode(response.responseText); Ext.getCmp('php').setValue(getFieldOutput(response.php.version, response.php.result)); Ext.getCmp('mysql').setValue(getFieldOutput(response.mysql.version, response.mysql.result)); Ext.getCmp('curl').setValue(getFieldOutput(response.curl.version, response.curl.result)); Ext.getCmp('openssl').setValue(getFieldOutput(response.openssl.version, response.openssl.result)); Ext.getCmp('dom').setValue(getFieldOutput(response.dom.version, response.dom.result)); Ext.getCmp('gd').setValue(getFieldOutput(response.gd.version, response.gd.result)); Ext.getCmp('multibyte').setValue(getFieldOutput(response.multibyte.version, response.multibyte.result)); Ext.getCmp('soap').setValue(getFieldOutput(response.soap.version, response.soap.result)); Ext.getCmp('ldap').setValue(getFieldOutput(response.ldap.version, response.ldap.result)); Ext.getCmp('memory').setValue(getFieldOutput(response.memory.version, response.memory.result)); dbReq = response.mysql.result; phpReq = response.php.result && response.curl.result && response.dom.result && response.gd.result && response.multibyte.result && response.soap.result && response.memory.result; wizard.onClientValidation(0, dbReq && phpReq); wizard.showLoadMask(false); }, failure: function () { }, params: {'clientBrowser': PMExt.getBrowser().name} }); } // getting the system info function getPermissionInfo() { wizard.showLoadMask(true); Ext.Ajax.request({ url: 'getPermissionInfo', success: function (response) { var okImage = ''; var badImage = ''; var response = Ext.util.JSON.decode(response.responseText); Ext.get('pathConfigSpan').dom.innerHTML = (response.pathConfig.result ? okImage : badImage); Ext.get('pathLanguagesSpan').dom.innerHTML = (response.pathLanguages.result ? okImage : badImage); Ext.get('pathPluginsSpan').dom.innerHTML = (response.pathPlugins.result ? okImage : badImage); Ext.get('pathXmlformsSpan').dom.innerHTML = (response.pathXmlforms.result ? okImage : badImage); Ext.get('pathPublicSpan').dom.innerHTML = (response.pathPublic.result ? okImage : badImage); Ext.get('pathSharedSpan').dom.innerHTML = (response.pathShared.result ? okImage : badImage); Ext.get('pathLogFileSpan').dom.innerHTML = (response.pathLogFile.result ? okImage : badImage); Ext.get('pathTranslationsSpan').dom.innerHTML = (response.pathTranslations.result ? okImage : badImage); Ext.get('pathTranslationsMafeSpan').dom.innerHTML = (response.pathTranslationsMafe.result ? okImage : badImage); wizard.onClientValidation(1, response.pathConfig.result && response.pathLanguages.result && response.pathPlugins.result && response.pathXmlforms.result && response.pathPublic.result && response.pathShared.result && response.pathLogFile.result && response.pathTranslations.result && response.pathTranslationsMafe.result ); wizard.showLoadMask(false); permissionInfo.error1 = response.noWritableFiles //type = response.success ? 'success' : _('ID_WARNING'); if (!response.success) PMExt.error(_('ID_WARNING'), response.notify + ' Show non-writable files.'); }, failure: function () { }, params: { 'pathConfig': Ext.getCmp('pathConfig').getValue(), 'pathLanguages': Ext.getCmp('pathLanguages').getValue(), 'pathPlugins': Ext.getCmp('pathPlugins').getValue(), 'pathXmlforms': Ext.getCmp('pathXmlforms').getValue(), 'pathShared': Ext.getCmp('pathShared').getValue(), 'pathLogFile': Ext.getCmp('pathLogFile').getValue(), 'pathPublic': Ext.getCmp('pathPublic').getValue(), 'pathTranslations': Ext.getCmp('pathTranslations').getValue(), 'pathTranslationsMafe': Ext.getCmp('pathTranslationsMafe').getValue() } }); } function checkLicenseAgree() { //wizard.onClientValidation(2, Ext.getCmp('agreeCheckbox').checked); wizard.onClientValidation(2, false); } function ckeckDBEnginesValuesLoaded() { wizard.showLoadMask(true); if (Ext.getCmp('db_engine').store.getCount() == 0) { Ext.getCmp('db_engine').store.load(); } else { testConnection(); } } // test database Connection function testConnection() { wizard.showLoadMask(true); if ((Ext.getCmp('db_engine').getValue() == '') || !Ext.getCmp('db_hostname').isValid() || !Ext.getCmp('db_username').isValid()) { wizard.onClientValidation(3, false); wizard.showLoadMask(false); return false; } Ext.Ajax.request({ url: 'testConnection', success: function (response) { var response = Ext.util.JSON.decode(response.responseText); Ext.getCmp('db_message').setValue(getFieldOutput(response.message, response.result)); if (!response.result) PMExt.notify(_('ID_WARNING'), response.message, _('ID_WARNING')); wizard.onClientValidation(3, response.result); wizard.showLoadMask(false); }, failure: function () { }, params: { 'db_engine': Ext.getCmp('db_engine').getValue(), 'db_hostname': Ext.getCmp('db_hostname').getValue(), 'db_username': Ext.getCmp('db_username').getValue(), 'db_password': Ext.getCmp('db_password').getValue(), 'db_port': Ext.getCmp('db_port').getValue() } }); } function checkWorkspaceConfiguration() { var canInstall = false; if (!Ext.getCmp('workspace').isValid()) { Ext.getCmp('finish_message').setValue(getFieldOutput(_('ID_VALID_WORKSPACE'), false)); wizard.onClientValidation(4, false); return; } if (!Ext.getCmp('adminUsername').isValid()) { Ext.getCmp('finish_message').setValue(getFieldOutput(_('ID_VALID_ADMIN_NAME'), false)); wizard.onClientValidation(4, false); return; } if (Ext.getCmp('adminPassword').getValue() == '') { Ext.getCmp('finish_message').setValue(getFieldOutput(_('ID_VALID_ADMIN_PASSWORD'), false)); wizard.onClientValidation(4, false); return; } if (Ext.getCmp('adminPassword').getValue() != Ext.getCmp('confirmPassword').getValue()) { Ext.getCmp('finish_message').setValue(getFieldOutput(_('ID_PASSWORD_CONFIRMATION_INCORRECT'), false)); wizard.onClientValidation(4, false); return; } if (!Ext.getCmp('wfDatabase').isValid()) { Ext.getCmp('finish_message').setValue(getFieldOutput(_('ID_WORKFLOW_DATABASE_NAME'), false)); wizard.onClientValidation(4, false); return; } checkDatabases(); } function checkDatabases() { wizard.showLoadMask(true); Ext.Ajax.request({ url: 'checkDatabases', success: function (response) { var existMsg = '' + _('ID_NOT_AVAILABLE_DATABASE') + ''; var noExistsMsg = '' + _('ID_AVAILABLE_DATABASE') + ''; var response = Ext.util.JSON.decode(response.responseText); Ext.get('database_message').dom.innerHTML = (response.wfDatabaseExists ? existMsg : noExistsMsg); var dbFlag = ((!response.wfDatabaseExists) || Ext.getCmp('deleteDB').getValue()); wizard.onClientValidation(4, dbFlag); if (dbFlag) { Ext.getCmp('finish_message').setValue(getFieldOutput(_('ID_DATA_CORRECT'), true)); } else { Ext.getCmp('finish_message').setValue(getFieldOutput(_('ID_NOT_PASSED'), false)); PMExt.notify(_('ID_WARNING'), response.errMessage, _('ID_WARNING'), 4) } wizard.showLoadMask(false); }, failure: function () { }, params: { 'db_engine': Ext.getCmp('db_engine').getValue(), 'db_hostname': Ext.getCmp('db_hostname').getValue(), 'db_username': Ext.getCmp('db_username').getValue(), 'db_password': Ext.getCmp('db_password').getValue(), 'db_port': Ext.getCmp('db_port').getValue(), 'wfDatabase': Ext.getCmp('wfDatabase').getValue() } }); } var setIndex = 0; steps[setIndex++] = new Ext.ux.Wiz.Card({ title: _('ID_PREINSTALLATION'), monitorValid: false, labelAlign: 'left', labelWidth: 200, defaults: {}, items: [ { border: false, html: _('ID_PREINSTALLATION'), bodyStyle: 'background:none;padding-top:0px;padding-bottom:5px;font-weight:bold;font-size:1.3em;' }, { xtype: 'panel', layout: 'border', height: 380, items: [ { region: 'west', width: 250, bodyStyle: 'padding:10px;font-size:1.2em;', html: _('ID_PROCESSMAKER_REQUIREMENTS_DESCRIPTION') }, { region: 'center', xtype: 'fieldset', labelWidth: 200, autoScroll: true, items: [ { xtype: 'displayfield', fieldLabel: _('ID_PROCESSMAKER_REQUIREMENTS_PHP'), id: 'php' }, { xtype: 'displayfield', fieldLabel: _('ID_PROCESSMAKER_REQUIREMENTS_MYSQL'), id: 'mysql' }, { xtype: 'displayfield', fieldLabel: _('ID_PROCESSMAKER_REQUIREMENTS_CURL'), id: 'curl' }, { xtype: 'displayfield', fieldLabel: _('ID_PROCESSMAKER_REQUIREMENTS_OPENSSL'), id: 'openssl' }, { xtype: 'displayfield', fieldLabel: _('ID_PROCESSMAKER_REQUIREMENTS_DOMXML'), id: 'dom' }, { xtype: 'displayfield', fieldLabel: _('ID_PROCESSMAKER_REQUIREMENTS_GD'), id: 'gd' }, { xtype: 'displayfield', fieldLabel: _('ID_PROCESSMAKER_REQUIREMENTS_MULTIBYTESTRING'), id: 'multibyte' }, { xtype: 'displayfield', fieldLabel: _('ID_PROCESSMAKER_REQUIREMENTS_SOAP'), id: 'soap' }, { xtype: 'displayfield', fieldLabel: _('ID_PROCESSMAKER_REQUIREMENTS_LDAP'), id: 'ldap' }, { xtype: 'displayfield', fieldLabel: _('ID_PROCESSMAKER_REQUIREMENTS_MEMORYLIMIT'), id: 'memory', value: '5.0 or greater' }, new Ext.Button({ text: _('ID_CHECK_AGAIN'), handler: getSystemInfo, scope: this }) ] } ] } ], listeners: { show: getSystemInfo } }); // third card with Directory File Permission steps[setIndex++] = new Ext.ux.Wiz.Card({ title: _('ID_DIRECTORY_FILE_PERMISSION'), monitorValid: false, labelAlign: 'left', labelWidth: 200, defaults: { //labelStyle : 'font-size:11px' }, items: [ { border: false, html: _('ID_DIRECTORY_FILE_PERMISSION'), bodyStyle: 'background:none;padding-top:0px;padding-bottom:5px;font-weight:bold;font-size:1.3em;' }, { xtype: 'panel', layout: 'border', height: 380, items: [ { region: 'north', height: 55, bodyStyle: 'padding:10px;font-size:1.2em;', html: _('ID_PROCESSMAKER_REQUIREMENTS_DESCRIPTION_STEP3_1') }, { region: 'center', xtype: 'fieldset', alignField: 'left', bodyStyle: 'padding-left:40px;font-size:12;', labelWidth: 180, items: [ { xtype: 'textfield', fieldLabel: ' ' + _('ID_CONFIG_DIRECTORY'), id: 'pathConfig', width: 430, value: path_config, disabled: true }, { xtype: 'textfield', fieldLabel: ' ' + _('ID_LANGUAJE_DIRECTORY'), id: 'pathLanguages', width: 430, value: path_languages, disabled: true }, { xtype: 'textfield', fieldLabel: ' ' + _('ID_PLUGINS_DIRECTORY'), id: 'pathPlugins', width: 430, value: path_plugins, disabled: true }, { xtype: 'textfield', fieldLabel: ' ' + _('ID_XMLFROM_DIRECTORY'), id: 'pathXmlforms', width: 430, value: path_xmlforms, disabled: true }, { xtype: 'textfield', fieldLabel: ' ' + _('ID_PUBLIC_INDEX_FILE'), id: 'pathPublic', width: 430, value: path_public, disabled: true }, { xtype: 'textfield', fieldLabel: ' ' + _('ID_TRANSLATIONS_DIRECTORY'), id: 'pathTranslations', width: 430, value: path_translations, disabled: true }, { xtype: 'textfield', fieldLabel: ' ' + _('ID_MAFE_TRANSLATION_DIRECTORY'), id: 'pathTranslationsMafe', width: 430, value: path_translationsMafe, disabled: true }, { xtype: 'textfield', fieldLabel: ' ' + _('ID_WORFLOW_DATA_DIRECTORY'), id: 'pathShared', width: 430, disabled: true, value: path_shared, enableKeyEvents: true, allowBlank: false, blankText: _('ID_WORKFLOW_DATA_DIRECTORY_REQUIRED'), selectOnFocus: true, msgTarget: 'side', listeners: { keyup: function () { wizard.onClientValidation(2, false); if (Ext.getCmp('pathShared').getValue().substr(-1, 1) != path_sep) { Ext.getCmp('pathLogFile').setValue(Ext.getCmp('pathShared').getValue() + path_sep + 'logs' + path_sep + 'install.log'); } else { Ext.getCmp('pathLogFile').setValue(Ext.getCmp('pathShared').getValue() + 'logs' + path_sep + 'install.log'); } } } }, { xtype: 'textfield', fieldLabel: ' ' + _('ID_INSTALLATION_FILE_LOG'), id: 'pathLogFile', width: 430, value: path_shared + 'logs' + path_sep + 'install.log', disabled: true }, new Ext.Button({ text: _('ID_CHECK_AGAIN'), handler: getPermissionInfo, scope: this }) ] } ] } ], listeners: { show: getPermissionInfo } }); // third card with input field email-address steps[setIndex++] = new Ext.ux.Wiz.Card({ title: _('ID_PROCESSMAKER_LICENSE'), //monitorValid : false, defaults: { labelStyle: 'font-size:12px' }, items: [ { border: false, html: _('ID_PROCESSMAKER_LICENSE'), bodyStyle: 'background:none;padding-top:0px;padding-bottom:5px;font-weight:bold;font-size:1.3em;' }, { xtype: 'panel', layout: 'border', height: 380, items: [ { region: 'center', xtype: 'fieldset', items: [ new Ext.form.TextArea({ name: 'license', readOnly: true, width: 600, height: 330, style: 'font-size:13px', value: licenseTxt }), new Ext.form.Checkbox({ boxLabel: 'I agree', id: 'agreeCheckbox', handler: function () { wizard.onClientValidation(2, this.getValue()); } }) ] } ] } ], listeners: { show: function () { setTimeout(function () { var iAgree = Ext.getCmp('agreeCheckbox').getValue(); wizard.onClientValidation(2, iAgree); }, 100); } } }); // fourth card Database Configuration steps[setIndex++] = new Ext.ux.Wiz.Card({ title: _('ID_DATABASE_CONFIGURATION'), monitorValid: false, items: [ { border: false, html: _('ID_DATABASE_CONFIGURATION'), bodyStyle: 'background:none;padding-top:0px;padding-bottom:5px;font-weight:bold;font-size:1.3em;' }, { xtype: 'panel', layout: 'border', height: 380, items: [ { region: 'west', width: 200, bodyStyle: 'padding:10px;font-size:1.2em;', html: _('ID_PROCESSMAKER_REQUIREMENTS_DESCRIPTION_STEP4_1') }, { region: 'center', xtype: 'panel', bodyStyle: 'background:none;padding-left:20px;padding-right:20px;padding-top:20px;padding-bottom:20px;font-size:1.2em;', items: [ { xtype: 'fieldset', labelAlign: 'left', labelWidth: 160, items: [ new Ext.form.ComboBox({ fieldLabel: _('ID_DATABASE_ENGINE'), width: 200, store: storeDatabase, displayField: 'label', valueField: 'id', mode: 'local', editable: false, forceSelection: true, allowBlank: false, triggerAction: 'all', id: 'db_engine', selectOnFocus: true, listeners: { select: function () { selectDbEngine(this.value); wizard.onClientValidation(3, false); } } }), { xtype: 'textfield', fieldLabel: _('ID_HOST_NAME_LABEL'), width: 180, id: 'db_hostname', value: 'localhost', allowBlank: false, validator: function (v) { var t = /^[0-9\.a-zA-Z_\-]+$/; return t.test(v); }, listeners: { change: function () { wizard.onClientValidation(3, false); } } }, { xtype: 'textfield', fieldLabel: _('ID_PORT'), width: 180, id: 'db_port', value: '', allowBlank: false, validator: function (v) { var t = /^[0-9]+$/; return t.test(v); }, listeners: { change: function () { wizard.onClientValidation(3, false); } } }, { xtype: 'textfield', fieldLabel: _('ID_USERNAME'), width: 180, id: 'db_username', value: 'root', allowBlank: false, validator: function (v) { var t = /^[0-9\.a-zA-Z_\-]+$/; return t.test(v); }, listeners: { change: function () { wizard.onClientValidation(3, false); } } }, { xtype: 'textfield', fieldLabel: _('ID_PASSWORD'), inputType: 'password', value: '', width: 180, id: 'db_password', allowBlank: true, listeners: { change: function () { wizard.onClientValidation(3, false); } } }, { xtype: 'displayfield', //fieldLabel: ', id: 'db_message' }, new Ext.Button({ text: _('ID_TEST_CONNECTION'), handler: testConnection, scope: this }) ] } ] } ] } ], listeners: { show: ckeckDBEnginesValuesLoaded } }); steps[setIndex++] = new Ext.ux.Wiz.Card({ title: _('ID_WORKSPACE_CONFIGURATION'), monitorValid: false, defaults: { labelStyle: 'font-size:11px' }, items: [ { border: false, html: _('ID_WORKSPACE_CONFIGURATION'), bodyStyle: 'background:none;padding-top:0px;padding-bottom:5px;font-weight:bold;font-size:1.3em;' }, { xtype: 'panel', layout: 'border', height: 380, items: [ { region: 'west', width: 200, bodyStyle: 'padding:10px;font-size:1.2em;', html: _('ID_PROCESSMAKER_REQUIREMENTS_DESCRIPTION_STEP5') }, { region: 'center', xtype: 'panel', bodyStyle: 'background:none;padding-left:20px;padding-right:20px;padding-top:20px;padding-bottom:20px;font-size:1.2em;', autoScroll: true, items: [ { xtype: 'fieldset', //labelAlign: 'right', labelWidth: 210, items: [ { xtype: 'textfield', fieldLabel: _('ID_WORKSPACE_NAME'), value: 'workflow', maxLength: 29, validator: function (v) { var t = /^[a-zA-Z_0-9]+$/; return t.test(v); }, id: 'workspace', enableKeyEvents: true, listeners: { keyup: function () { wizard.onClientValidation(4, false); if (!Ext.getCmp('changeDBNames').getValue()) { Ext.getCmp('wfDatabase').setValue('wf_' + this.getValue()); } } } }, { xtype: 'textfield', fieldLabel: _('ID_ADMIN_USERNAME'), value: 'admin', validator: function (v) { var t = /^[a-zA-Z_0-9.@-]+$/; return t.test(v); }, id: 'adminUsername', enableKeyEvents: true, listeners: { keyup: function () { wizard.onClientValidation(4, false); } } }, { xtype: 'textfield', fieldLabel: _('ID_ADMIN_PASSWORD_LABEL'), inputType: 'password', id: 'adminPassword', enableKeyEvents: true, allowBlank: false, validator: function (v) { v = v.trim(); return !/^\s+$/.test(v); }, listeners: { keyup: function () { wizard.onClientValidation(4, false); } } }, { xtype: 'textfield', fieldLabel: _('ID_ADMIN_PASSWORD'), inputType: 'password', id: 'confirmPassword', enableKeyEvents: true, allowBlank: false, validator: function (v) { v = v.trim(); return !/^\s+$/.test(v.trim()); }, listeners: { keyup: function () { wizard.onClientValidation(4, false); } } } ] }, { xtype: 'fieldset', labelAlign: 'left', labelWidth: 210, //labelWidth: 200, //title: 'ProcessMaker Databases', items: [ new Ext.form.Checkbox({ boxLabel: _('ID_CHANGE_DATABASE_NAME'), id: 'changeDBNames', handler: function () { if (this.getValue()) { Ext.getCmp('wfDatabase').enable(); Ext.getCmp('wfDatabase').validate(); } else { Ext.getCmp('wfDatabase').setValue('wf_' + Ext.getCmp('workspace').getValue()); Ext.getCmp('wfDatabase').disable(); } wizard.onClientValidation(4, false); } }), { xtype: 'textfield', fieldLabel: _('ID_WF_DATABASE_NAME'), id: 'wfDatabase', value: 'wf_workflow', allowBlank: false, maxLength: 32, validator: function (v) { var t = /^[a-zA-Z_0-9]+$/; return t.test(v); }, disabled: true, enableKeyEvents: true, listeners: { keyup: function () { wizard.onClientValidation(4, false); } } }, { xtype: 'displayfield', id: 'database_message' }, new Ext.form.Checkbox({ boxLabel: _('ID_DELETE_DATABASES'), id: 'deleteDB', handler: function () { wizard.onClientValidation(4, false); } }), new Ext.form.Checkbox({ boxLabel: _('ID_INSTALL_USE_CURRENT_USER'), id: 'createUserLogged', handler: function () { wizard.onClientValidation(4, false); } }), { xtype: 'displayfield', id: 'finish_message' }, new Ext.Button({ id: 'checkWSConfiguration', text: _('ID_CHECK_WORKSPACE_CONFIGURATION'), handler: checkWorkspaceConfiguration, scope: this }) ] } ] } ] } ], listeners: { show: function () { setTimeout(function () { wizard.onClientValidation(4, false); checkWorkspaceConfiguration(); }, 100); } } }); }); permissionInfo = {}; function showPermissionInfo() { var text = ''; for (i = 0; i < permissionInfo.error1.length; i++) { text += (i + 1) + '. ' + permissionInfo.error1[i] + "\n"; } w = new Ext.Window({ layout: 'fit', title: _('ID_NON_WRITABLE_FILES'), width: 550, height: 180, closable: true, resizable: true, //html: text, plain: true, items: [{ xtype: 'textarea', id: 'permissionInfoText', fieldLabel: '', anchor: "100%", value: text, readOnly: true }], bbar: new Ext.ux.StatusBar({ defaultText: '', id: 'login-statusbar2', statusAlign: 'right' }) }); w.show(); }