AutorÃa | Ultima modificación | Ver Log |
/*** A tool for displaying and filtering system events.** @module moodle-report_eventlist-eventfilter*//*** A tool for displaying and filtering system events.** @class M.report_eventlist.EventFilter* @extends Base* @constructor*/function EventFilter() {EventFilter.superclass.constructor.apply(this, arguments);}var SELECTORS = {EVENTNAME: '#id_eventname',EVENTCOMPONENT: '#id_eventcomponent',EVENTEDULEVEL: '#id_eventedulevel',EVENTCRUD: '#id_eventcrud',FILTERBUTTON: '#id_filterbutton',CLEARBUTTON: '#id_clearbutton'};Y.extend(EventFilter, Y.Base, {/*** A reference to the datatable.** @property _table* @type DataTable* @private*/_table: null,/*** A reference to the eventname text element.** @property _eventName* @type node* @private*/_eventName: null,/*** A reference to the component select box element.** @property _component* @type node* @private*/_component: null,/*** A reference to the education level select box element.** @property _eduLevel* @type node* @private*/_eduLevel: null,/*** A reference to the CRUD select box element.** @property _crud* @type node* @private*/_crud: null,/*** Initializer.* Basic setup and delegations.** @method initializer*/initializer: function() {var filterButton = Y.one(SELECTORS.FILTERBUTTON),clearButton = Y.one(SELECTORS.CLEARBUTTON);this._createTable(this.get('tabledata'));this._eventName = Y.one(SELECTORS.EVENTNAME);this._component = Y.one(SELECTORS.EVENTCOMPONENT);this._eduLevel = Y.one(SELECTORS.EVENTEDULEVEL);this._crud = Y.one(SELECTORS.EVENTCRUD);this._eventName.on('valuechange', this._totalFilter, this);filterButton.on('click', this._totalFilter, this);clearButton.on('click', this._clearFilter, this);},/*** Create the table for displaying all of the event information.** @param {array} tableData Event data for populating the table.* @method _createTable* @private* @chainable*/_createTable: function(tableData) {var table = new Y.DataTable({columns: [{key: "fulleventname",label: M.util.get_string('eventname', 'report_eventlist'),allowHTML: true,sortable: true,/*** Custom sort of the fulleventname column.* This will sort via the event name rather than the event path.** @param {object} eventDataListA Event data record module A.* @param {object} eventDataListB Event data record module B.* @param {boolean} desc True sorts list in descending order and false sorts in Ascending order.* @return {number} order for which the column should be sorted.* @method sortFn*/sortFn: function(eventDataListA, eventDataListB, desc) {var rawEventDataA = eventDataListA.getAttrs().raweventname,rawEventDataB = eventDataListB.getAttrs().raweventname,order = (rawEventDataA > rawEventDataB ? 1 : -1);return desc ? -order : order;},title: M.util.get_string('eventname', 'report_eventlist')}, {key: "component",label: M.util.get_string('component', 'report_eventlist'),allowHTML: true,sortable: true,title: M.util.get_string('component', 'report_eventlist')}, {key: "edulevel",label: M.util.get_string('edulevel', 'report_eventlist'),sortable: true,title: M.util.get_string('edulevel', 'report_eventlist')}, {key: "crud",label: M.util.get_string('crud', 'report_eventlist'),sortable: true,title: M.util.get_string('crud', 'report_eventlist')}, {key: "objecttable",label: M.util.get_string('affectedtable', 'report_eventlist'),sortable: true,title: M.util.get_string('affectedtable', 'report_eventlist')}, {key: "since",label: M.util.get_string('since', 'report_eventlist'),sortable: true,title: M.util.get_string('since', 'report_eventlist')}, {key: "legacyevent",label: M.util.get_string('legacyevent', 'report_eventlist'),sortable: true,title: M.util.get_string('legacyevent', 'report_eventlist')}],data: tableData,strings: {sortBy: '{title}',reverseSortBy: '{title}'}});// Display the table.table.render("#report-eventlist-table");table.get('boundingBox').addClass('report-eventlist-datatable-table');this._table = table;return this;},/*** Filters the entries being displayed in the table.** @method totalFilter* @private*/_totalFilter: function() {// Get all of the details of the filter elementsvar eventNameFilter = this._eventName.get('value').toLowerCase(),// Component selected value.componentValue = this._component.get('value'),// Education level selected text.eduLevelFilter = this._eduLevel.get('options').item(this._eduLevel.get('selectedIndex')).get('text').toLowerCase(),// Education level selected value.eduLevelValue = this._eduLevel.get('value'),// CRUD selected text.crudFilter = this._crud.get('options').item(this._crud.get('selectedIndex')).get('text').toLowerCase(),// CRUD selected value.crudValue = this._crud.get('value'),i,filtered = [];// Loop through the rows and put the ones we want into the filter.for (i = 0; i < this.get('tabledata').length; i++) {// These variables will either be false or true depending on the statement outcome.var fullEventText = Y.Node.create(this.get('tabledata')[i].fulleventname).get('text'),eventNameValue = fullEventText.toLowerCase().indexOf(eventNameFilter) >= 0,componentFilterValue = this.get('tabledata')[i].eventname.indexOf('\\' + componentValue + '\\event\\') >= 0,eduLevelFilterValue = this.get('tabledata')[i].edulevel.toLowerCase().indexOf(eduLevelFilter) >= 0,crudFilterValue = this.get('tabledata')[i].crud.toLowerCase().indexOf(crudFilter) >= 0;// If the name field is empty then add to the filter.if (eventNameFilter === '') {eventNameValue = true;}// If the component is set to 'all' then add to the filter.if (componentValue === '0') {componentFilterValue = true;}// If the education level is set to 'all' then add to the filter.if (eduLevelValue === '0') {eduLevelFilterValue = true;}// If the CRUD field is set to 'all' then add to the filter.if (crudValue === '0') {crudFilterValue = true;}// If any of the Values here is false then don't add to the filter (all must be true).if (eventNameValue && componentFilterValue && eduLevelFilterValue && crudFilterValue) {filtered.push(this.get('tabledata')[i]);}}// Display the table again with the new data.this._table.set('data', filtered);},/*** Clears the filtered table data and changes the filter form to default.** @method _clearFilter* @private*/_clearFilter: function() {// Reset filter form elementsthis._eventName.set('value', '');this._component.set('value', '0');this._eduLevel.set('value', '0');this._crud.set('value', '0');// Reset the table data back to the original.this._table.set('data', this.get('tabledata'));}}, {NAME: 'eventFilter',ATTRS: {/*** Data for the table.** @attribute tabledata.* @type Array* @writeOnce*/tabledata: {value: null}}});Y.namespace('M.report_eventlist.EventFilter').init = function(config) {return new EventFilter(config);};