/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ define(['require', 'backbone', 'hbs!tmpl/audit/AdminAuditTableLayoutView_tmpl', 'collection/VEntityList', 'utils/Utils', 'utils/UrlLinks', 'utils/CommonViewFunction' ], function(require, Backbone, AdminAuditTableLayoutView_tmpl, VEntityList, Utils, UrlLinks, CommonViewFunction) { 'use strict'; var AdminAuditTableLayoutView = Backbone.Marionette.LayoutView.extend( /** @lends AuditTableLayoutView */ { _viewName: 'AdminAuditTableLayoutView', template: AdminAuditTableLayoutView_tmpl, /** Layout sub regions */ regions: { RAuditTableLayoutView: "#r_adminAuditTableLayoutView", RQueryBuilderAdmin: "#r_attributeQueryBuilderAdmin" }, /** ui selector cache */ ui: { adminEntityClick: "[data-id='adminEntity']", adminType: "[data-id='adminType']", 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.attrFilter] = function(e) { this.$('.fa-angle-right').toggleClass('fa-angle-down'); this.$('.attributeResultContainer').addClass("overlay"); this.$('.attribute-filter-container, .attr-filter-overlay').toggleClass('hide'); this.onClickAttrFilter(); }; events["click " + this.ui.attrClose] = function(e) { that.closeAttributeModel(); }; events["click " + this.ui.attrApply] = function(e) { that.okAttrFilterButton(e); }; return events; }, /** * intialize a new AdminTableLayoutView Layout * @constructs */ initialize: function(options) { _.extend(this, _.pick(options, 'searchTableFilters', 'entityDefCollection', 'enumDefCollection')); this.entityCollection = new VEntityList(); this.limit = 25; this.offset = 0; this.entityCollection.url = UrlLinks.adminApiUrl(); this.entityCollection.modelAttrName = "events"; this.commonTableOptions = { collection: this.entityCollection, includePagination: false, includeAtlasPagination: true, includeFooterRecords: false, includeColumnManager: false, includeOrderAbleColumns: false, includeSizeAbleColumns: false, includeTableLoader: true, includeAtlasPageSize: true, includeAtlasTableSorting: true, atlasPaginationOpts: { limit: this.limit, offset: this.offset, fetchCollection: this.getAdminCollection.bind(this), }, gridOpts: { emptyText: 'No Record found!', className: 'table table-hover backgrid table-quickMenu colSort' }, filterOpts: {}, paginatorOpts: {} }; this.isFilters = null; }, 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) { return -model.get('timestamp'); } this.renderTableLayoutView(); }, bindEvents: function() {}, closeAttributeModel: function() { var that = this; that.$('.attributeResultContainer').removeClass("overlay"); that.$('.fa-angle-right').toggleClass('fa-angle-down'); that.$('.attribute-filter-container, .attr-filter-overlay').toggleClass('hide'); }, getAttributes: function(options) { var adminAttributes = []; if (options.isFilter) { _.each(options.isFilter, function(adminFilter) { adminAttributes.push({ "attributeName": adminFilter.id, "operator": adminFilter.operator, "attributeValue": (adminFilter.type == "date" && options.isDateParsed) ? Date.parse(adminFilter.value).toString() : adminFilter.value }) }) this.isFilters = null; } else { adminAttributes = [{ "attributeName": "userName", "operator": "=", "attributeValue": "admin" }]; if (this.onlyPurged === true) { adminAttributes.push({ "attributeName": "operation", "operator": "=", "attributeValue": "PURGE" }) } } return adminAttributes; }, onClickAttrFilter: function() { var that = this; this.ui.adminRegion.show(); require(['views/search/QueryBuilderView'], function(QueryBuilderView) { that.RQueryBuilderAdmin.show(new QueryBuilderView({ adminAttrFilters: true, searchTableFilters: that.searchTableFilters, entityDefCollection: that.entityDefCollection, enumDefCollection: that.enumDefCollection })); }); }, okAttrFilterButton: function(options) { var that = this, isFilterValidate = true, queryBuilderRef = that.RQueryBuilderAdmin.currentView.ui.builder; if (queryBuilderRef.data("queryBuilder")) { var queryBuilder = queryBuilderRef.queryBuilder("getRules"); if (queryBuilder) { that.isFilters = queryBuilder.rules; } else { isFilterValidate = false } } if (isFilterValidate) { that.closeAttributeModel(); that.defaultPagination(); that.getAdminCollection(); } }, getAdminCollection: function(option) { var that = this, options = { isDateParsed: true, isFilter: this.isFilters }, adminParam = { condition: "AND", 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 }); var apiObj = { sort: false, data: that.entityCollection.queryParams, success: function(dataOrCollection, response) { that.entityCollection.fullCollection.reset(dataOrCollection, option); that.$('.fontLoader').hide(); that.$('.tableOverlay').hide(); that.$('.auditTable').show(); }, silent: true, reset: true } this.entityCollection.getAdminData(apiObj); }, renderTableLayoutView: function() { var that = this; this.ui.showDefault.hide(); require(['utils/TableLayout'], function(TableLayout) { var cols = new Backgrid.Columns(that.getAuditTableColumns()); that.RAuditTableLayoutView.show(new TableLayout(_.extend({}, that.commonTableOptions, { columns: cols }))); }); }, getAuditTableColumns: function() { var that = this; return this.entityCollection.constructor.getTableCols({ result: { label: "", cell: "html", editable: false, sortable: false, cell: Backgrid.ExpandableCell, fixWidth: "20", accordion: false, alwaysVisible: true, expand: function(el, model) { var adminValues = '<div class="col-sm-6">', newColumn = ''; 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 = ''; } 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: { label: "Users", cell: "html", editable: false }, operation: { label: "Operation", cell: "String", editable: false }, clientId: { label: "Client ID", cell: "String", editable: false }, resultCount: { label: "Result Count", cell: "String", editable: false }, startTime: { label: "Start Time", cell: "html", editable: false, formatter: _.extend({}, Backgrid.CellFormatter.prototype, { fromRaw: function(rawValue, model) { return new Date(rawValue); } }) }, endTime: { label: "End Time", cell: "html", editable: false, formatter: _.extend({}, Backgrid.CellFormatter.prototype, { fromRaw: function(rawValue, model) { return new Date(rawValue); } }) } }, 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.defaultPagination(); this.getAdminCollection(); }, onClickAdminEntity: function(e) { var that = this; require([ 'modules/Modal', 'views/audit/AuditTableLayoutView' ], function(Modal, AuditTableLayoutView) { var obj = { guid: $(e.target).text(), }, modal = new Modal({ title: "Purged Entity Details: " + obj.guid, content: new AuditTableLayoutView(obj), mainClass: "modal-full-screen", okCloses: true, showFooter: false, }).open(); modal.on('closeModal', function() { $('.modal').css({ 'padding-right': '0px !important' }); modal.trigger('cancel'); }); modal.$el.on('click', 'td a', function() { modal.trigger('cancel'); }); }); } }); return AdminAuditTableLayoutView; });