tao-test/app/taoEventLog/views/js/controller/TaoEventLog/show.js

215 lines
8.0 KiB
JavaScript

/**
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; under version 2
* of the License (non-upgradable).
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* Copyright (c) 2016-2019 (original work) Open Assessment Technologies SA;
*
* @author Alexander Zagovorichev <zagovorichev@1pt.com>
*/
define([
'jquery',
'lodash',
'i18n',
'util/url',
'ui/datatable',
'tpl!taoEventLog/controller/TaoEventLog/show/layout',
'taoEventLog/components/export/modalExporter',
'ui/dateRange/dateRange'
], function ($, _, __, url, datatable, layoutTpl, exporter, dateRangeFactory) {
'use strict';
//the endpoints
var listUrl = url.route('search', 'TaoEventLog', 'taoEventLog');
return {
/**
* Controller entry point
*/
start: function start() {
var data = {
dataTypes: [
{key: 'event_name', title: __('Event Name')},
{key: 'action', title: __('Action')},
{key: 'user_id', title: __('User ID')},
{key: 'user_roles', title: __('User Roles')},
{key: 'occurred', title: __('Occurred')},
{key: 'properties', title: __('Properties')}
]
};
var $layout = $(layoutTpl(data));
var $eventFilter = $('.log-browser .log-table-filters', $layout);
var $eventList = $('.log-browser .log-table', $layout);
var $eventViewer = $('.event-viewer', $layout);
var $exportLink = $('.js-export', $layout);
var filterRange = dateRangeFactory($eventFilter);
var currentFilter = {
filtercolumns: {}
};
var updateEventDetails = function updateEventDetails(event) {
var key, json, str;
for (key in event) {
if (event.hasOwnProperty(key)) {
if (key === 'properties') {
json = JSON.parse(event[key]);
if (json !== null && typeof json !== 'object') {
json = JSON.parse(json);
}
str = JSON.stringify(json, null, 2);
$('.' + key, $eventViewer).html(
'<pre>' + str + '</pre>'
);
} else if (key === 'user_roles') {
$('.' + key, $eventViewer).html(event['user_roles'].split(',').join('<br>'));
} else {
$('.' + key, $eventViewer).html(event[key]);
}
}
}
};
filterRange.on('submit reset', function() {
$eventList.datatable('options', {
params : {
periodStart : this.getStart(),
periodEnd : this.getEnd()
}
});
$eventList.datatable('refresh');
});
$exportLink.on('click', function () {
currentFilter.filtercolumns = _.merge(currentFilter.filtercolumns, {
from : filterRange.getStart(),
to : filterRange.getEnd()
});
exporter({
title: __('Export Log Entries'),
exportUrl: url.route('export', 'TaoEventLog', 'taoEventLog', currentFilter)
});
});
//append the layout to the current view container
$('.content').append($layout);
//set up the student list
$eventList.datatable({
url: listUrl,
sortby: 'occurred',
sortorder: 'desc',
filter: true,
rowSelection: true,
filterStrategy: 'multiple',
model: [{
id: 'identifier',
label: __('ID'),
transform: function (id, row) {
return row.raw.id;
}
}, {
id: 'event_name',
label: __('Event Name'),
sortable: true,
filterable: true
}, {
id: 'action',
label: __('Action'),
sortable: true,
filterable: true
}, {
id: 'user_id',
label: __('User ID'),
sortable: true,
filterable: true
}, {
id: 'user_roles',
label: __('User Roles'),
sortable: true,
filterable: true,
transform: function (roles) {
var rolesArray = roles.split(', ');
var rolesCount = rolesArray.length;
var roleFiltered;
var result;
if(rolesCount > 1) {
if(currentFilter.filtercolumns.user_roles) {
roleFiltered = _.find(rolesArray, function (item) {
return item.toLowerCase().indexOf(currentFilter.filtercolumns.user_roles.toLowerCase()) > -1;
});
if(roleFiltered) {
result = __('%s and %s roles', roleFiltered, (rolesCount - 1));
} else {
result = __('%s roles', rolesCount);
}
} else {
result = __('%s roles', rolesCount);
}
} else if(rolesCount === 1){
result = roles;
}
return result;
}
}, {
id: 'occurred',
label: __('Occurred'),
sortable: true
}],
listeners: {
/**
* When a row is selected, we update the student viewer
*/
selected: function selectRow(e, event) {
updateEventDetails(event.raw);
//the 1st time it comes hidden
if($eventViewer.is(".hidden")) {
$layout.find(".col-12").removeClass("col-12").addClass("col-7");
$eventViewer.removeClass('hidden');
}
},
/**
* Set pagination to start position when using filtering
* @param e
* @param options
*/
filter: function filtered(e, options) {
options.page = 1;
},
/**
* Grab context of current query (filter, sort, ...)
* @param e
* @param ajaxConfig
*/
query: function onQuery(e, ajaxConfig) {
currentFilter = _.pick(ajaxConfig && ajaxConfig.data, ['filterquery', 'filtercolumns', 'sortby', 'sortorder', 'sorttype']);
}
}
});
}
};
});