BackupTab.js 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. "use strict";
  2. /**
  3. * Licensed Materials - Property of IBM
  4. * IBM Cognos Products: admin
  5. * Copyright IBM Corp. 2015, 2018
  6. * US Government Users Restricted Rights - Use, duplication or
  7. * disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
  8. */
  9. define(['jquery', 'underscore', 'doT', 'bi/commons/utils/BidiUtil', 'bi/commons/i18n/Formatter', 'bi/glass/app/ContentView', 'bi/admin/system/services/ApiSvc', 'bi/admin/nls/StringResource', 'text!bi/admin/system/templates/BackupTabTemplate.html'], function ($, _, dot, BidiUtil, Formatter, View, Api, StringResource, template) {
  10. 'use strict'; //NOSONAR: meant to be strict
  11. var BackupTab = View.extend({
  12. init: function init(options) {
  13. BackupTab.inherited('init', this, arguments);
  14. _.extend(this, options);
  15. },
  16. _getNewDate: function _getNewDate(sDate) {
  17. return new Date(sDate);
  18. },
  19. render: function render() {
  20. return Promise.try(function () {
  21. var backupItem = _.max(this.items, function (item) {
  22. var date = new Date(item.lastModified);
  23. return date;
  24. });
  25. var lastModified = backupItem.lastModified ? this._formatDate(backupItem.lastModified) : StringResource.get('invalidDate');
  26. var templateData = {
  27. existingLastBackup: !_.isEmpty(this.items),
  28. strings: {
  29. lastModified: lastModified,
  30. name: backupItem.name || '',
  31. typeNameToBackup: StringResource.get('typeNameToBackup'),
  32. typePassToEncry: StringResource.get('typePassToEncry'),
  33. confirmPass: StringResource.get('confirmPass'),
  34. success: StringResource.get('success'),
  35. lastBackup: StringResource.get('lastBackup'),
  36. backupBtn: StringResource.get('backupBtn'),
  37. backupNameLabel: StringResource.get('backupNameLabel'),
  38. newBackupLabel: StringResource.get('newBackupLabel')
  39. }
  40. };
  41. this.$el.html(dot.template(template)(templateData));
  42. BidiUtil.initElementForBidi(this.$el.find('#backupName')[0]);
  43. this._bindEvents();
  44. }.bind(this));
  45. },
  46. _bindEvents: function _bindEvents() {
  47. this.$el.find('#backupBtn').on('primaryaction', this._backupAction.bind(this));
  48. this.$el.find('[required]').on({
  49. keyup: function keyup(e) {
  50. $(e.target.parentNode).find('.invalid').remove();
  51. }
  52. });
  53. },
  54. _formatDate: function _formatDate(date) {
  55. return Formatter.format(this._getNewDate(date), {
  56. type: 'datetime',
  57. formatLength: 'short',
  58. locale: this.glassContext.services.userProfile.preferences.contentLocale,
  59. timezone: this.glassContext.services.userProfile.preferences.timeZoneID
  60. });
  61. },
  62. _backupAction: function _backupAction() {
  63. this.$el.find('.invalid').remove();
  64. if (this.validate()) {
  65. this.glassContext.appController.showToast(StringResource.get('backupInprogress'), {
  66. 'type': 'info',
  67. 'timeOut': 3000
  68. });
  69. this.parentView.hide();
  70. var backupData = {
  71. password: this.$el.find('#backupPwd').val(),
  72. type: 'exports',
  73. packageName: this.$el.find('#backupName').val().replace(/\\/g, '').replace(/\//g, '')
  74. };
  75. return Api.generateExportImportDefinition('exports', backupData).then(function (response) {
  76. backupData = response;
  77. return Api.executeExportImportDefinition('exports', backupData.id);
  78. }.bind(this)).then(function () {
  79. var dfd = $.Deferred();
  80. var int;
  81. var func = function () {
  82. Api.queryStatus('exports', backupData.id).then(function (data) {
  83. clearInterval(int);
  84. this.glassContext.appController.showToast(StringResource.get('backedupSucceeded', {
  85. 'name': data.packageName
  86. }), {
  87. 'type': 'success',
  88. 'timeOut': 3000
  89. });
  90. dfd.resolve();
  91. }.bind(this)).fail(function (failDfd, jqXHR) {
  92. clearInterval(int);
  93. dfd.reject(failDfd, jqXHR);
  94. }.bind(this));
  95. }.bind(this);
  96. int = setInterval(func, 10000);
  97. return dfd.promise();
  98. }.bind(this)).fail(function (dfd, jqXHR) {
  99. this.logger.error(jqXHR);
  100. this.glassContext.appController.showErrorMessage(jqXHR.responseJSON.messages, StringResource.get('error'));
  101. this.glassContext.appController.showToast(StringResource.get('backedupFailed', {
  102. 'name': backupData.packageName
  103. }), {
  104. 'type': 'fail',
  105. 'timeOut': 3000
  106. });
  107. }.bind(this));
  108. }
  109. },
  110. _checkSpace: function _checkSpace(el) {
  111. var reg = /^\s*$/;
  112. $(el.parentNode).find('.invalid').remove();
  113. var value = $(el).val();
  114. return !(value && reg.test(value));
  115. },
  116. _checkPassword: function _checkPassword() {
  117. this.$el.find('.invalid').remove();
  118. var passWords = this.$el.find(':password');
  119. $(passWords[1].parentNode).find('.invalid').remove();
  120. var returnValue = true;
  121. if (passWords[0].value !== passWords[1].value && passWords[0].value !== '' && passWords[1].value !== '') {
  122. $(passWords[1].parentNode).append($("<label class='invalid'/>").text(StringResource.get('passwordNotMatchError')));
  123. $(passWords[1].parentNode).children('label.invalid').prepend($('<svg class="svgIcon bi-admin-warning-svgIcon invalid"><use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#common-warning"></use></svg>'));
  124. returnValue = false;
  125. } else if (passWords[0].value.length < 8) {
  126. $(passWords[1].parentNode).append($("<label class='invalid'/>").text(StringResource.get('passwordLessThanEight')));
  127. $(passWords[1].parentNode).children('label.invalid').prepend($('<svg class="svgIcon bi-admin-warning-svgIcon invalid"><use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#common-warning"></use></svg>'));
  128. returnValue = false;
  129. }
  130. return returnValue;
  131. },
  132. validate: function validate() {
  133. var valid = true;
  134. var resetFocus;
  135. var temp = true;
  136. this.$el.find('[required]').each(function (index, anInput) {
  137. if (anInput.checkValidity()) {
  138. if (!this._checkSpace(anInput)) {
  139. $(anInput.parentNode).append($("<label class='invalid'/>").text(StringResource.get('SpaceInputError')));
  140. $(anInput.parentNode).children('label.invalid').prepend($('<svg class="svgIcon bi-admin-warning-svgIcon invalid"><use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#common-warning"></use></svg>'));
  141. valid = false;
  142. }
  143. } else {
  144. $(anInput.parentNode).append($("<label class='invalid'/>").text(StringResource.get('requiredError')));
  145. $(anInput.parentNode).children('label.invalid').prepend($('<svg class="svgIcon bi-admin-warning-svgIcon invalid"><use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#common-warning"></use></svg>'));
  146. valid = false;
  147. }
  148. if (!valid && temp) {
  149. resetFocus = $(anInput.parentNode).find('input');
  150. temp = false;
  151. }
  152. }.bind(this));
  153. valid = valid ? this._checkPassword() : false;
  154. if (!valid) {
  155. if (!resetFocus) {
  156. resetFocus = this.$el.find('.bi-admin-content-inputLine #backupPwd');
  157. }
  158. resetFocus.focus();
  159. }
  160. return valid;
  161. }
  162. });
  163. return BackupTab;
  164. });