This is an automated email from the ASF dual-hosted git repository. kbhatt pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/atlas.git
The following commit(s) were added to refs/heads/master by this push: new 813bab6 ATLAS-3822:- UI changes: Audit entries for TypeDefs CREATE, UPDATE and DELETE 813bab6 is described below commit 813bab6439d5e6be135cb178ac846056c446fd9b Author: kevalbhatt <kbh...@apache.org> AuthorDate: Tue Jun 16 16:58:40 2020 +0530 ATLAS-3822:- UI changes: Audit entries for TypeDefs CREATE, UPDATE and DELETE --- dashboardv2/public/css/scss/business-metadata.scss | 23 ++- dashboardv2/public/css/scss/common.scss | 10 ++ dashboardv2/public/css/scss/override.scss | 12 +- .../audit/AdminAuditTableLayoutView_tmpl.html | 3 - dashboardv2/public/js/utils/Enums.js | 19 ++- .../js/views/audit/AdminAuditTableLayoutView.js | 162 +++++++++++++-------- dashboardv3/public/css/scss/business-metadata.scss | 23 ++- dashboardv3/public/css/scss/common.scss | 10 ++ dashboardv3/public/css/scss/override.scss | 12 +- .../audit/AdminAuditTableLayoutView_tmpl.html | 3 - dashboardv3/public/js/utils/Enums.js | 19 ++- .../js/views/audit/AdminAuditTableLayoutView.js | 162 +++++++++++++-------- 12 files changed, 320 insertions(+), 138 deletions(-) diff --git a/dashboardv2/public/css/scss/business-metadata.scss b/dashboardv2/public/css/scss/business-metadata.scss index 148810a..1d4d737 100644 --- a/dashboardv2/public/css/scss/business-metadata.scss +++ b/dashboardv2/public/css/scss/business-metadata.scss @@ -90,6 +90,10 @@ .business-metadata-details, .admin-details { + .tableOverlay { + background-color: transparent; + } + .expandable .attr-details { max-height: 300px; overflow: auto; @@ -97,8 +101,18 @@ width: calc(100% - 30px); } - .admin-type-dropdown { - width: 100px; + .expandable .admin-audit-details { + display: flex; + flex-wrap: wrap; + margin-left: 20px; + + .attr-type-container { + border: 1px solid #ddd; + border-radius: 4px; + padding: 5px 10px; + margin: 5px; + width: 32%; + } } .expandable .admin-attr-details { @@ -108,6 +122,11 @@ } } +.admin-details .expandable .admin-audit-details .attr-type-container { + max-height: 200px; + overflow: auto; +} + .tab-pane { .business-metadata-attr-page { position: absolute; diff --git a/dashboardv2/public/css/scss/common.scss b/dashboardv2/public/css/scss/common.scss index 9e3c904..b51a6f2 100644 --- a/dashboardv2/public/css/scss/common.scss +++ b/dashboardv2/public/css/scss/common.scss @@ -318,4 +318,14 @@ pre { font-size: 11px; animation: spin 1000ms infinite linear; } +} + +.attr-details { + ul { + list-style: disc; + + li { + cursor: pointer; + } + } } \ No newline at end of file diff --git a/dashboardv2/public/css/scss/override.scss b/dashboardv2/public/css/scss/override.scss index de5462c..a2f83ca 100644 --- a/dashboardv2/public/css/scss/override.scss +++ b/dashboardv2/public/css/scss/override.scss @@ -63,13 +63,22 @@ .modal-body { position: relative; padding: 15px; - max-height: calc(100vh - 200px); + max-height: calc(100vh - 215px); min-height: 70px; overflow: auto; .btn+.btn { margin-bottom: 2px; } + + .admin-audit-details { + border: 1px solid #ddd; + border-radius: 4px; + + tr>td:nth-child(2) { + text-align: right; + } + } } .modal-full-screen { @@ -77,7 +86,6 @@ height: 80vh; .modal-content { - height: inherit; width: 100%; } diff --git a/dashboardv2/public/js/templates/audit/AdminAuditTableLayoutView_tmpl.html b/dashboardv2/public/js/templates/audit/AdminAuditTableLayoutView_tmpl.html index f1dc256..62bef23 100644 --- a/dashboardv2/public/js/templates/audit/AdminAuditTableLayoutView_tmpl.html +++ b/dashboardv2/public/js/templates/audit/AdminAuditTableLayoutView_tmpl.html @@ -51,9 +51,6 @@ <div type="ok" class="btn btn-atlas ok" data-id='attrClose'>Close</div> </div> </div> - <div class="pull-right admin-type-dropdown"> - <select class="pull-right form-controlrow-margin-bottom" data-id="adminType"></select> - </div> </div> <div class="auditTable" style="display: none"> <div class='attr-filter-overlay hide'></div> diff --git a/dashboardv2/public/js/utils/Enums.js b/dashboardv2/public/js/utils/Enums.js index 131a08f..5db6396 100644 --- a/dashboardv2/public/js/utils/Enums.js +++ b/dashboardv2/public/js/utils/Enums.js @@ -41,7 +41,24 @@ define(["require", "backbone"], function(require) { ENTITY_PURGE: "Entity Purged", BUSINESS_ATTRIBUTE_ADD: "Business Attribute(s) Added", BUSINESS_ATTRIBUTE_UPDATE: "Business Attribute(s) Updated", - BUSINESS_ATTRIBUTE_DELETE: "Business Attribute(s) Deleted" + BUSINESS_ATTRIBUTE_DELETE: "Business Attribute(s) Deleted", + TYPE_DEF_UPDATE: "Type Updated", + TYPE_DEF_CREATE: "Type Created", + TYPE_DEF_DELETE: "Type Deleted" + } + + Enums.category = { + PRIMITIVE: "Primitive", + OBJECT_ID_TYPE: "Object Id type", + ENUM: "Enum", + STRUCT: "Struct", + CLASSIFICATION: "Classification", + ENTITY: "Entity", + ARRAY: "Array", + MAP: "Map", + RELATIONSHIP: "Relationship", + BUSINESS_METADATA: "Business Metadata", + PURGE: "Purge Entities" } Enums.entityStateReadOnly = { diff --git a/dashboardv2/public/js/views/audit/AdminAuditTableLayoutView.js b/dashboardv2/public/js/views/audit/AdminAuditTableLayoutView.js index bc0990f..b50a5e8 100644 --- a/dashboardv2/public/js/views/audit/AdminAuditTableLayoutView.js +++ b/dashboardv2/public/js/views/audit/AdminAuditTableLayoutView.js @@ -22,8 +22,9 @@ define(['require', 'collection/VEntityList', 'utils/Utils', 'utils/UrlLinks', - 'utils/CommonViewFunction' -], function(require, Backbone, AdminAuditTableLayoutView_tmpl, VEntityList, Utils, UrlLinks, CommonViewFunction) { + 'utils/CommonViewFunction', + 'utils/Enums' +], function(require, Backbone, AdminAuditTableLayoutView_tmpl, VEntityList, Utils, UrlLinks, CommonViewFunction, Enums) { 'use strict'; var AdminAuditTableLayoutView = Backbone.Marionette.LayoutView.extend( @@ -41,20 +42,21 @@ define(['require', /** ui selector cache */ ui: { - adminEntityClick: "[data-id='adminEntity']", - adminType: "[data-id='adminType']", + adminPurgedEntityClick: "[data-id='adminPurgedEntity']", + adminAuditEntityDetails: "[data-id='adminAuditEntityDetails']", attrFilter: "[data-id='adminAttrFilter']", adminRegion: "[data-id='adminRegion']", attrApply: "[data-id='attrApply']", showDefault: "[data-id='showDefault']", attrClose: "[data-id='attrClose']" + }, /** ui events hash */ events: function() { var events = {}, that = this; - events["click " + this.ui.adminEntityClick] = "onClickAdminEntity"; - events["change " + this.ui.adminType] = "onClickAdminType"; + events["click " + this.ui.adminPurgedEntityClick] = "onClickAdminPurgedEntity"; + events["click " + this.ui.adminAuditEntityDetails] = "showAdminAuditEntity"; events["click " + this.ui.attrFilter] = function(e) { this.ui.attrFilter.find('.fa-angle-right').toggleClass('fa-angle-down'); this.$('.attributeResultContainer').addClass("overlay"); @@ -104,11 +106,9 @@ define(['require', paginatorOpts: {} }; this.isFilters = null; + this.adminAuditEntityData = {}; }, onRender: function() { - var str = '<option>All</option><option>Purged</option>'; - this.ui.adminType.html(str); - this.ui.adminType.select2({}); this.ui.adminRegion.hide(); this.getAdminCollection(); this.entityCollection.comparator = function(model) { @@ -116,6 +116,10 @@ define(['require', } this.renderTableLayoutView(); }, + onShow: function() { + this.$('.fontLoader').show(); + this.$('.tableOverlay').show(); + }, bindEvents: function() {}, closeAttributeModel: function() { var that = this; @@ -133,19 +137,6 @@ define(['require', "attributeValue": (adminFilter.type == "date" && options.isDateParsed) ? Date.parse(adminFilter.value).toString() : adminFilter.value }) }) - } else { - adminAttributes = [{ - "attributeName": "userName", - "operator": "=", - "attributeValue": "admin" - }]; - if (this.onlyPurged === true) { - adminAttributes.push({ - "attributeName": "operation", - "operator": "=", - "attributeValue": "PURGE" - }) - } } return adminAttributes; }, @@ -163,7 +154,7 @@ define(['require', if (queryBuilderRef.data("queryBuilder")) { var queryBuilder = queryBuilderRef.queryBuilder("getRules"); if (queryBuilder) { - that.isFilters = queryBuilder.rules; + that.isFilters = queryBuilder.rules.length ? queryBuilder.rules : null; } else { isFilterValidate = false } @@ -185,24 +176,27 @@ define(['require', criterion: that.getAttributes(options) }; options.isDateParsed = false; - var auditQueryParam = { - condition: "AND", - criterion: that.getAttributes(options) - }; - that.searchTableFilters["adminAttrFilters"] = CommonViewFunction.attributeFilter.generateUrl({ value: auditQueryParam, formatedDateToLong: true }); - this.$('.fontLoader').show(); - this.$('.tableOverlay').show(); - $.extend(that.entityCollection.queryParams, { auditFilters: adminParam }); + if (this.isFilters) { + var auditQueryParam = { + condition: "AND", + criterion: that.getAttributes(options) + }; + that.searchTableFilters["adminAttrFilters"] = CommonViewFunction.attributeFilter.generateUrl({ value: auditQueryParam, formatedDateToLong: true }); + } + + $.extend(that.entityCollection.queryParams, { auditFilters: that.isFilters ? adminParam : null }); var apiObj = { sort: false, data: that.entityCollection.queryParams, success: function(dataOrCollection, response) { + that.entityCollection.state.pageSize = that.entityCollection.queryParams.limit || 25; that.entityCollection.fullCollection.reset(dataOrCollection, option); + }, + complete: function() { that.$('.fontLoader').hide(); that.$('.tableOverlay').hide(); that.$('.auditTable').show(); }, - silent: true, reset: true } this.entityCollection.getAdminData(apiObj); @@ -217,6 +211,14 @@ define(['require', }))); }); }, + createTableWithValues: function(tableDetails, isAdminAudit) { + var attrTable = CommonViewFunction.propertyTable({ + scope: this, + valueObject: tableDetails, + fromAdminAudit: isAdminAudit + }); + return attrTable; + }, getAuditTableColumns: function() { var that = this; return this.entityCollection.constructor.getTableCols({ @@ -230,25 +232,50 @@ define(['require', accordion: false, alwaysVisible: true, expand: function(el, model) { - var adminValues = '<div class="col-sm-6">', - newColumn = ''; + var operation = model.get('operation'), + results = model.get('result') || null, + adminText = 'No records found', + adminTypDetails = null; el.attr('colspan', '7'); - if (model.attributes.params) { - var guids = model.attributes.result.replace('[', '').replace(']', '').split(','); - _.each(guids, function(adminGuid, index) { - if (index % 5 == 0 && index != 0) { - adminValues += '</div><div class="col-sm-6">'; - } - adminValues += '<a class="blue-link" data-id="adminEntity" >' + adminGuid.trim() + '</a></br>'; - }) - adminValues += '</div>'; - - } else { - adminValues = ''; + if (results) { + var adminValues = null; + if (operation == "PURGE") { + adminValues = '<ul class="col-sm-6">'; + var guids = results.replace('[', '').replace(']', '').split(','); + adminTypDetails = Enums.category[operation]; + _.each(guids, function(adminGuid, index) { + if (index % 5 == 0 && index != 0) { + adminValues += '</ul><ul class="col-sm-6">'; + } + adminValues += '<li class="blue-link" data-id="adminPurgedEntity" >' + adminGuid.trim() + '</li>'; + }) + adminValues += '</ul>'; + adminText = '<div class="row"><div class="attr-details"><h4 style="word-break: break-word;">' + adminTypDetails + '</h4>' + adminValues + '</div></div>'; + } else { + var resultData = JSON.parse(results), + typeName = model.get('params').split(','), + typeContainer = ''; + _.each(typeName, function(name) { + var typeData = resultData[name], + adminValues = (typeName.length == 1) ? '<ul class="col-sm-4">' : '<ul>'; + adminTypDetails = Enums.category[name] + " " + Enums.auditAction[operation]; + typeContainer += '<div class="attr-type-container"><h4 style="word-break: break-word;">' + adminTypDetails + '</h4>'; + _.each(typeData, function(typeDefObj, index) { + if (index % 5 == 0 && index != 0 && typeName.length == 1) { + adminValues += '</ul><ul class="col-sm-4">'; + } + var panelId = typeDefObj.name.split(" ").join("") + model.get('startTime'); + that.adminAuditEntityData[panelId] = typeDefObj; + adminValues += '<li class="blue-link" data-id="adminAuditEntityDetails" data-auditEntityId=' + panelId + '>' + typeDefObj.name + '</li>'; + }); + adminValues += '</ul>'; + typeContainer += adminValues + '</div>'; + }) + var typeClass = (typeName.length == 1) ? null : "admin-audit-details"; + adminText = '<div class="row"><div class="attr-details ' + typeClass + '">' + typeContainer + '</div></div>'; + } } - var adminText = '<div class="row"><div class="col-sm-12 attr-details admin-attr-details"><div class="col-sm-2">Purged Entities: </div><div class="col-sm-10">' + adminValues + '</div></div></div>'; $(el).append($('<div>').html(adminText)); - } }, userName: { @@ -292,34 +319,47 @@ define(['require', }) } }, this.entityCollection); - }, defaultPagination: function() { $.extend(this.entityCollection.queryParams, { limit: this.limit, offset: this.offset }); this.renderTableLayoutView(); }, - onClickAdminType: function(e, value) { - this.onlyPurged = e.currentTarget.value === "Purged"; - this.isFilters = null; - this.defaultPagination(); - this.getAdminCollection(); + showAdminAuditEntity: function(e) { + var typeDefObj = this.adminAuditEntityData[e.target.dataset.auditentityid], + typeDetails = this.createTableWithValues(typeDefObj, true), + view = '<table class="table admin-audit-details bold-key" ><tbody >' + typeDetails + '</tbody></table>', + modalData = { + title: Enums.category[typeDefObj.category] + " Type Details: " + typeDefObj.name, + htmlContent: view, + mainClass: "modal-full-screen", + okCloses: true, + showFooter: false, + width: "40%" + }; + this.showModal(modalData); }, - onClickAdminEntity: function(e) { + onClickAdminPurgedEntity: function(e) { var that = this; - require([ - 'modules/Modal', 'views/audit/AuditTableLayoutView' - ], function(Modal, AuditTableLayoutView) { + require(['views/audit/AuditTableLayoutView'], function(AuditTableLayoutView) { var obj = { guid: $(e.target).text(), }, - modal = new Modal({ + modalData = { title: "Purged Entity Details: " + obj.guid, content: new AuditTableLayoutView(obj), mainClass: "modal-full-screen", okCloses: true, showFooter: false, - }).open(); - + }; + that.showModal(modalData); + }); + }, + showModal: function(modalObj, title) { + var that = this; + require([ + 'modules/Modal' + ], function(Modal) { + var modal = new Modal(modalObj).open(); modal.on('closeModal', function() { $('.modal').css({ 'padding-right': '0px !important' }); modal.trigger('cancel'); diff --git a/dashboardv3/public/css/scss/business-metadata.scss b/dashboardv3/public/css/scss/business-metadata.scss index 369f6a2..444541b 100644 --- a/dashboardv3/public/css/scss/business-metadata.scss +++ b/dashboardv3/public/css/scss/business-metadata.scss @@ -90,6 +90,10 @@ .business-metadata-details, .admin-details { + .tableOverlay { + background-color: transparent; + } + .expandable .attr-details { max-height: 300px; overflow: auto; @@ -97,8 +101,18 @@ width: calc(100% - 30px); } - .admin-type-dropdown { - width: 100px; + .expandable .admin-audit-details { + display: flex; + flex-wrap: wrap; + margin-left: 20px; + + .attr-type-container { + border: 1px solid #ddd; + border-radius: 4px; + padding: 5px 10px; + margin: 5px; + width: 32%; + } } .expandable .admin-attr-details { @@ -108,6 +122,11 @@ } } +.admin-details .expandable .admin-audit-details .attr-type-container { + max-height: 200px; + overflow: auto; +} + .tab-pane { .business-metadata-attr-page { position: absolute; diff --git a/dashboardv3/public/css/scss/common.scss b/dashboardv3/public/css/scss/common.scss index 59f9bcc..008dca0 100644 --- a/dashboardv3/public/css/scss/common.scss +++ b/dashboardv3/public/css/scss/common.scss @@ -317,4 +317,14 @@ pre { font-size: 11px; animation: spin 1000ms infinite linear; } +} + +.attr-details { + ul { + list-style: disc; + + li { + cursor: pointer; + } + } } \ No newline at end of file diff --git a/dashboardv3/public/css/scss/override.scss b/dashboardv3/public/css/scss/override.scss index 1c8fcfc..73e87e5 100644 --- a/dashboardv3/public/css/scss/override.scss +++ b/dashboardv3/public/css/scss/override.scss @@ -67,13 +67,22 @@ .modal-body { position: relative; padding: 15px; - max-height: calc(100vh - 200px); + max-height: calc(100vh - 215px); min-height: 70px; overflow: auto; .btn+.btn { margin-bottom: 2px; } + + .admin-audit-details { + border: 1px solid #ddd; + border-radius: 4px; + + tr>td:nth-child(2) { + text-align: right; + } + } } .modal-full-screen { @@ -81,7 +90,6 @@ height: 80vh; .modal-content { - height: inherit; width: 100%; } diff --git a/dashboardv3/public/js/templates/audit/AdminAuditTableLayoutView_tmpl.html b/dashboardv3/public/js/templates/audit/AdminAuditTableLayoutView_tmpl.html index f1dc256..62bef23 100644 --- a/dashboardv3/public/js/templates/audit/AdminAuditTableLayoutView_tmpl.html +++ b/dashboardv3/public/js/templates/audit/AdminAuditTableLayoutView_tmpl.html @@ -51,9 +51,6 @@ <div type="ok" class="btn btn-atlas ok" data-id='attrClose'>Close</div> </div> </div> - <div class="pull-right admin-type-dropdown"> - <select class="pull-right form-controlrow-margin-bottom" data-id="adminType"></select> - </div> </div> <div class="auditTable" style="display: none"> <div class='attr-filter-overlay hide'></div> diff --git a/dashboardv3/public/js/utils/Enums.js b/dashboardv3/public/js/utils/Enums.js index 131a08f..5db6396 100644 --- a/dashboardv3/public/js/utils/Enums.js +++ b/dashboardv3/public/js/utils/Enums.js @@ -41,7 +41,24 @@ define(["require", "backbone"], function(require) { ENTITY_PURGE: "Entity Purged", BUSINESS_ATTRIBUTE_ADD: "Business Attribute(s) Added", BUSINESS_ATTRIBUTE_UPDATE: "Business Attribute(s) Updated", - BUSINESS_ATTRIBUTE_DELETE: "Business Attribute(s) Deleted" + BUSINESS_ATTRIBUTE_DELETE: "Business Attribute(s) Deleted", + TYPE_DEF_UPDATE: "Type Updated", + TYPE_DEF_CREATE: "Type Created", + TYPE_DEF_DELETE: "Type Deleted" + } + + Enums.category = { + PRIMITIVE: "Primitive", + OBJECT_ID_TYPE: "Object Id type", + ENUM: "Enum", + STRUCT: "Struct", + CLASSIFICATION: "Classification", + ENTITY: "Entity", + ARRAY: "Array", + MAP: "Map", + RELATIONSHIP: "Relationship", + BUSINESS_METADATA: "Business Metadata", + PURGE: "Purge Entities" } Enums.entityStateReadOnly = { diff --git a/dashboardv3/public/js/views/audit/AdminAuditTableLayoutView.js b/dashboardv3/public/js/views/audit/AdminAuditTableLayoutView.js index bc0990f..b50a5e8 100644 --- a/dashboardv3/public/js/views/audit/AdminAuditTableLayoutView.js +++ b/dashboardv3/public/js/views/audit/AdminAuditTableLayoutView.js @@ -22,8 +22,9 @@ define(['require', 'collection/VEntityList', 'utils/Utils', 'utils/UrlLinks', - 'utils/CommonViewFunction' -], function(require, Backbone, AdminAuditTableLayoutView_tmpl, VEntityList, Utils, UrlLinks, CommonViewFunction) { + 'utils/CommonViewFunction', + 'utils/Enums' +], function(require, Backbone, AdminAuditTableLayoutView_tmpl, VEntityList, Utils, UrlLinks, CommonViewFunction, Enums) { 'use strict'; var AdminAuditTableLayoutView = Backbone.Marionette.LayoutView.extend( @@ -41,20 +42,21 @@ define(['require', /** ui selector cache */ ui: { - adminEntityClick: "[data-id='adminEntity']", - adminType: "[data-id='adminType']", + adminPurgedEntityClick: "[data-id='adminPurgedEntity']", + adminAuditEntityDetails: "[data-id='adminAuditEntityDetails']", attrFilter: "[data-id='adminAttrFilter']", adminRegion: "[data-id='adminRegion']", attrApply: "[data-id='attrApply']", showDefault: "[data-id='showDefault']", attrClose: "[data-id='attrClose']" + }, /** ui events hash */ events: function() { var events = {}, that = this; - events["click " + this.ui.adminEntityClick] = "onClickAdminEntity"; - events["change " + this.ui.adminType] = "onClickAdminType"; + events["click " + this.ui.adminPurgedEntityClick] = "onClickAdminPurgedEntity"; + events["click " + this.ui.adminAuditEntityDetails] = "showAdminAuditEntity"; events["click " + this.ui.attrFilter] = function(e) { this.ui.attrFilter.find('.fa-angle-right').toggleClass('fa-angle-down'); this.$('.attributeResultContainer').addClass("overlay"); @@ -104,11 +106,9 @@ define(['require', paginatorOpts: {} }; this.isFilters = null; + this.adminAuditEntityData = {}; }, onRender: function() { - var str = '<option>All</option><option>Purged</option>'; - this.ui.adminType.html(str); - this.ui.adminType.select2({}); this.ui.adminRegion.hide(); this.getAdminCollection(); this.entityCollection.comparator = function(model) { @@ -116,6 +116,10 @@ define(['require', } this.renderTableLayoutView(); }, + onShow: function() { + this.$('.fontLoader').show(); + this.$('.tableOverlay').show(); + }, bindEvents: function() {}, closeAttributeModel: function() { var that = this; @@ -133,19 +137,6 @@ define(['require', "attributeValue": (adminFilter.type == "date" && options.isDateParsed) ? Date.parse(adminFilter.value).toString() : adminFilter.value }) }) - } else { - adminAttributes = [{ - "attributeName": "userName", - "operator": "=", - "attributeValue": "admin" - }]; - if (this.onlyPurged === true) { - adminAttributes.push({ - "attributeName": "operation", - "operator": "=", - "attributeValue": "PURGE" - }) - } } return adminAttributes; }, @@ -163,7 +154,7 @@ define(['require', if (queryBuilderRef.data("queryBuilder")) { var queryBuilder = queryBuilderRef.queryBuilder("getRules"); if (queryBuilder) { - that.isFilters = queryBuilder.rules; + that.isFilters = queryBuilder.rules.length ? queryBuilder.rules : null; } else { isFilterValidate = false } @@ -185,24 +176,27 @@ define(['require', criterion: that.getAttributes(options) }; options.isDateParsed = false; - var auditQueryParam = { - condition: "AND", - criterion: that.getAttributes(options) - }; - that.searchTableFilters["adminAttrFilters"] = CommonViewFunction.attributeFilter.generateUrl({ value: auditQueryParam, formatedDateToLong: true }); - this.$('.fontLoader').show(); - this.$('.tableOverlay').show(); - $.extend(that.entityCollection.queryParams, { auditFilters: adminParam }); + if (this.isFilters) { + var auditQueryParam = { + condition: "AND", + criterion: that.getAttributes(options) + }; + that.searchTableFilters["adminAttrFilters"] = CommonViewFunction.attributeFilter.generateUrl({ value: auditQueryParam, formatedDateToLong: true }); + } + + $.extend(that.entityCollection.queryParams, { auditFilters: that.isFilters ? adminParam : null }); var apiObj = { sort: false, data: that.entityCollection.queryParams, success: function(dataOrCollection, response) { + that.entityCollection.state.pageSize = that.entityCollection.queryParams.limit || 25; that.entityCollection.fullCollection.reset(dataOrCollection, option); + }, + complete: function() { that.$('.fontLoader').hide(); that.$('.tableOverlay').hide(); that.$('.auditTable').show(); }, - silent: true, reset: true } this.entityCollection.getAdminData(apiObj); @@ -217,6 +211,14 @@ define(['require', }))); }); }, + createTableWithValues: function(tableDetails, isAdminAudit) { + var attrTable = CommonViewFunction.propertyTable({ + scope: this, + valueObject: tableDetails, + fromAdminAudit: isAdminAudit + }); + return attrTable; + }, getAuditTableColumns: function() { var that = this; return this.entityCollection.constructor.getTableCols({ @@ -230,25 +232,50 @@ define(['require', accordion: false, alwaysVisible: true, expand: function(el, model) { - var adminValues = '<div class="col-sm-6">', - newColumn = ''; + var operation = model.get('operation'), + results = model.get('result') || null, + adminText = 'No records found', + adminTypDetails = null; el.attr('colspan', '7'); - if (model.attributes.params) { - var guids = model.attributes.result.replace('[', '').replace(']', '').split(','); - _.each(guids, function(adminGuid, index) { - if (index % 5 == 0 && index != 0) { - adminValues += '</div><div class="col-sm-6">'; - } - adminValues += '<a class="blue-link" data-id="adminEntity" >' + adminGuid.trim() + '</a></br>'; - }) - adminValues += '</div>'; - - } else { - adminValues = ''; + if (results) { + var adminValues = null; + if (operation == "PURGE") { + adminValues = '<ul class="col-sm-6">'; + var guids = results.replace('[', '').replace(']', '').split(','); + adminTypDetails = Enums.category[operation]; + _.each(guids, function(adminGuid, index) { + if (index % 5 == 0 && index != 0) { + adminValues += '</ul><ul class="col-sm-6">'; + } + adminValues += '<li class="blue-link" data-id="adminPurgedEntity" >' + adminGuid.trim() + '</li>'; + }) + adminValues += '</ul>'; + adminText = '<div class="row"><div class="attr-details"><h4 style="word-break: break-word;">' + adminTypDetails + '</h4>' + adminValues + '</div></div>'; + } else { + var resultData = JSON.parse(results), + typeName = model.get('params').split(','), + typeContainer = ''; + _.each(typeName, function(name) { + var typeData = resultData[name], + adminValues = (typeName.length == 1) ? '<ul class="col-sm-4">' : '<ul>'; + adminTypDetails = Enums.category[name] + " " + Enums.auditAction[operation]; + typeContainer += '<div class="attr-type-container"><h4 style="word-break: break-word;">' + adminTypDetails + '</h4>'; + _.each(typeData, function(typeDefObj, index) { + if (index % 5 == 0 && index != 0 && typeName.length == 1) { + adminValues += '</ul><ul class="col-sm-4">'; + } + var panelId = typeDefObj.name.split(" ").join("") + model.get('startTime'); + that.adminAuditEntityData[panelId] = typeDefObj; + adminValues += '<li class="blue-link" data-id="adminAuditEntityDetails" data-auditEntityId=' + panelId + '>' + typeDefObj.name + '</li>'; + }); + adminValues += '</ul>'; + typeContainer += adminValues + '</div>'; + }) + var typeClass = (typeName.length == 1) ? null : "admin-audit-details"; + adminText = '<div class="row"><div class="attr-details ' + typeClass + '">' + typeContainer + '</div></div>'; + } } - var adminText = '<div class="row"><div class="col-sm-12 attr-details admin-attr-details"><div class="col-sm-2">Purged Entities: </div><div class="col-sm-10">' + adminValues + '</div></div></div>'; $(el).append($('<div>').html(adminText)); - } }, userName: { @@ -292,34 +319,47 @@ define(['require', }) } }, this.entityCollection); - }, defaultPagination: function() { $.extend(this.entityCollection.queryParams, { limit: this.limit, offset: this.offset }); this.renderTableLayoutView(); }, - onClickAdminType: function(e, value) { - this.onlyPurged = e.currentTarget.value === "Purged"; - this.isFilters = null; - this.defaultPagination(); - this.getAdminCollection(); + showAdminAuditEntity: function(e) { + var typeDefObj = this.adminAuditEntityData[e.target.dataset.auditentityid], + typeDetails = this.createTableWithValues(typeDefObj, true), + view = '<table class="table admin-audit-details bold-key" ><tbody >' + typeDetails + '</tbody></table>', + modalData = { + title: Enums.category[typeDefObj.category] + " Type Details: " + typeDefObj.name, + htmlContent: view, + mainClass: "modal-full-screen", + okCloses: true, + showFooter: false, + width: "40%" + }; + this.showModal(modalData); }, - onClickAdminEntity: function(e) { + onClickAdminPurgedEntity: function(e) { var that = this; - require([ - 'modules/Modal', 'views/audit/AuditTableLayoutView' - ], function(Modal, AuditTableLayoutView) { + require(['views/audit/AuditTableLayoutView'], function(AuditTableLayoutView) { var obj = { guid: $(e.target).text(), }, - modal = new Modal({ + modalData = { title: "Purged Entity Details: " + obj.guid, content: new AuditTableLayoutView(obj), mainClass: "modal-full-screen", okCloses: true, showFooter: false, - }).open(); - + }; + that.showModal(modalData); + }); + }, + showModal: function(modalObj, title) { + var that = this; + require([ + 'modules/Modal' + ], function(Modal) { + var modal = new Modal(modalObj).open(); modal.on('closeModal', function() { $('.modal').css({ 'padding-right': '0px !important' }); modal.trigger('cancel');