diff --git a/application/helpers/hlp_header_helper.php b/application/helpers/hlp_header_helper.php index 203834ebb..5d197e3be 100644 --- a/application/helpers/hlp_header_helper.php +++ b/application/helpers/hlp_header_helper.php @@ -149,6 +149,31 @@ function generateJSsInclude($JSs) } } +/** + * Generates tags for the javascript modules you want to include, the parameter could by a string or an array of strings + */ +function generateJSModulesInclude($JSModules) +{ + $jsInclude = ''; + + $ci =& get_instance(); + $cachetoken = '?'.$ci->config->item('fhcomplete_build_version'); + + if (isset($JSModules)) + { + $tmpJSs = is_array($JSModules) ? $JSModules : array($JSModules); + + for ($tmpJSsCounter = 0; $tmpJSsCounter < count($tmpJSs); $tmpJSsCounter++) + { + $toPrint = sprintf($jsInclude, base_url($tmpJSs[$tmpJSsCounter].$cachetoken)).PHP_EOL; + + if ($tmpJSsCounter > 0) $toPrint = "\t\t".$toPrint; + + echo $toPrint; + } + } +} + /** * Generates all the includes needed by the Addons */ @@ -180,3 +205,4 @@ function generateBackwardCompatibleJSMsIe($js) echo ' '."\n"; echo "\n"; } + diff --git a/application/views/system/logs/logsViewer.php b/application/views/system/logs/logsViewer.php index 9f3e0a75b..4accde521 100644 --- a/application/views/system/logs/logsViewer.php +++ b/application/views/system/logs/logsViewer.php @@ -14,7 +14,7 @@ 'global' => array('mailAnXversandt'), 'ui' => array('bitteEintragWaehlen') ), - 'customJSs' => array('public/js/apps/LogsViewer.js') + 'customJSModules' => array('public/js/apps/LogsViewer.js') ); $this->load->view('templates/FHC-Header', $includesArray); @@ -36,6 +36,50 @@
+
diff --git a/application/views/templates/FHC-Footer.php b/application/views/templates/FHC-Footer.php index e2948d77b..2cbaf5753 100644 --- a/application/views/templates/FHC-Footer.php +++ b/application/views/templates/FHC-Footer.php @@ -15,6 +15,7 @@ // By default set the parameters to null $customJSs = isset($customJSs) ? $customJSs : null; + $customJSModules = isset($customJSModules) ? $customJSModules : null; // -------------------------------------------------------------------------------------------------------- // Javascripts @@ -118,24 +119,15 @@ // NOTE: to be used only if you know what you are doing! if ($bootstrapper === true) generateJSsInclude('public/js/bootstrapper.js'); - // VUE Navigation Component JS - if ($navigationcomponent === true) generateJSsInclude('public/js/components/Navigation.js'); - // NavigationWidget JS if ($navigationwidget === true) generateJSsInclude('public/js/NavigationWidget.js'); - // VUE Filter Component JS - if ($filtercomponent === true) generateJSsInclude('public/js/components/Filter.js'); - // FilterWidget JS if ($filterwidget === true) generateJSsInclude('public/js/FilterWidget.js'); // PhrasesLib JS if ($phrases != null) generateJSsInclude('public/js/PhrasesLib.js'); - // VUE Table Component JS - if ($tablecomponent === true) generateJSsInclude('public/js/components/Table.js'); - // TableWidget JS if ($tablewidget === true) generateJSsInclude('public/js/TableWidget.js'); @@ -149,6 +141,7 @@ // Eventually required JS // NOTE: keep it as the latest generateJSsInclude($customJSs); + generateJSModulesInclude($customJSModules); ?> diff --git a/public/js/apps/LogsViewer.js b/public/js/apps/LogsViewer.js index 21b63b1db..97ab3eac8 100644 --- a/public/js/apps/LogsViewer.js +++ b/public/js/apps/LogsViewer.js @@ -1,3 +1,6 @@ +import {CoreFilterCmpt} from '../components/Filter.js'; +import {CoreNavigationCmpt} from '../components/Navigation.js'; + const logsViewerApp = Vue.createApp({ data() { return { diff --git a/public/js/components/Filter.js b/public/js/components/Filter.js index 352eae553..9fb3015ec 100644 --- a/public/js/components/Filter.js +++ b/public/js/components/Filter.js @@ -1,15 +1,18 @@ -const CoreFilterCmpt = { +export const CoreFilterCmpt = { emits: ['nwNewEntry'], data() { return { + fields: null, fieldsToDisplay: null, dataset: null, - selectedFields: null + selectedFields: null, + notSelectedFields: null, + filterFields: null, + notFilterFields: null }; }, created() { - this.fetchFilterData(); - this.fetchFilterMenuData(); + this._fetchFilterData(); }, updated() { let filterCmptTablesorter = $("#filterTableDataset"); @@ -36,72 +39,179 @@ const CoreFilterCmpt = { } }, methods: { - fetchFilterData() { + saveCustomFilter(el) { + FHC_AjaxClient.ajaxCallPost( + "components/Filter/saveCustomFilter", + { + filterUniqueId: this._getCurrentPage(), + filterType: this.filterType, + customFilterName: document.getElementById('customFilterName').value + }, + { + successCallback: function(data) {console.log(data)} + } + ); + }, + applyFilterFields(el) { + let filterFields = []; + let filterFieldDivs = document.getElementById('filterFields').getElementsByTagName('div'); + + for (let i = 0; i < filterFieldDivs.length; i++) + { + let filterField = {}; + + for (let j = 0; j < filterFieldDivs[i].children.length; j++) + { + if (filterFieldDivs[i].children[j].name != null) + { + // Name + if (filterFieldDivs[i].children[j].name == 'fieldName') + { + filterField.name = filterFieldDivs[i].children[j].value; + } + // Operation + if (filterFieldDivs[i].children[j].name == 'operation') + { + filterField.operation = filterFieldDivs[i].children[j].value; + } + // Condition + if (filterFieldDivs[i].children[j].name == 'condition') + { + filterField.condition = filterFieldDivs[i].children[j].value; + } + // Option + if (filterFieldDivs[i].children[j].name == 'option') + { + filterField.option = filterFieldDivs[i].children[j].value; + } + } + } + + filterFields.push(filterField); + } + + FHC_AjaxClient.ajaxCallPost( + "components/Filter/applyFilterFields", + { + filterUniqueId: this._getCurrentPage(), + filterType: this.filterType, + filterFields: filterFields + }, + { + successCallback: this._fetchFilterData + } + ); + }, + addFilterField(el) { + FHC_AjaxClient.ajaxCallPost( + "components/Filter/addFilterField", + { + filterUniqueId: this._getCurrentPage(), + filterType: this.filterType, + filterField: el.currentTarget.value + }, + { + successCallback: this._fetchFilterData + } + ); + }, + addSelectedField(el) { + FHC_AjaxClient.ajaxCallPost( + "components/Filter/addSelectedField", + { + filterUniqueId: this._getCurrentPage(), + filterType: this.filterType, + selectedField: el.currentTarget.value + }, + { + successCallback: this._fetchFilterData + } + ); + }, + removeSelectedField(el) { + FHC_AjaxClient.ajaxCallPost( + "components/Filter/removeSelectedField", + { + filterUniqueId: this._getCurrentPage(), + filterType: this.filterType, + selectedField: el.currentTarget.getAttribute('field-to-remove') + }, + { + successCallback: this._fetchFilterData + } + ); + }, + removeFilterField(el) { + FHC_AjaxClient.ajaxCallPost( + "components/Filter/removeFilterField", + { + filterUniqueId: this._getCurrentPage(), + filterType: this.filterType, + filterField: el.currentTarget.getAttribute('field-to-remove') + }, + { + successCallback: this._fetchFilterData + } + ); + }, + fetchFilterDataById(el) { FHC_AjaxClient.ajaxCallGet( "components/Filter/getFilter", { - filterUniqueId: this.getFilterUniqueIdPrefix(), - filterType: this.filterType, // props!! - filterId: 170 + filterUniqueId: this._getCurrentPage(), + filterType: this.filterType, + filter_id: el.currentTarget.getAttribute("href").substring(1) }, { - successCallback: this.renderTableSorter + successCallback: this._render } ); }, - fetchFilterMenuData() { + _fetchFilterData() { FHC_AjaxClient.ajaxCallGet( - "components/Filter/generateFilterMenu", + "components/Filter/getFilter", { - filterUniqueId: this.getFilterUniqueIdPrefix(), - navigation_page: this.getNavigationPage() + filterUniqueId: this._getCurrentPage(), + filterType: this.filterType // props!! }, { - successCallback: this.setSideMenu + successCallback: this._render } ); }, - setSideMenu(data) { - // Set the menu - if (FHC_AjaxClient.hasData(data)) - { - let filters = FHC_AjaxClient.getData(data).filters; - let personalFilters = FHC_AjaxClient.getData(data).personalFilters; - let filtersArray = []; - - for (let filtersCount = 0; filtersCount < filters.length; filtersCount++) - { - filtersArray[filtersArray.length] = { - link: filters[filtersCount].link, - description: filters[filtersCount].desc, - sort: filtersCount - }; - } - - this.$emit( - 'nwNewEntry', - [{ - link: "#", - description: "Filters", - icon: "filter", - children: filtersArray - }] - ); - } - }, - getFilterUniqueIdPrefix() { + _getCurrentPage: function() { return FHC_JS_DATA_STORAGE_OBJECT.called_path + "/" + FHC_JS_DATA_STORAGE_OBJECT.called_method; }, - getNavigationPage: function() { - return FHC_JS_DATA_STORAGE_OBJECT.called_path + "/" + FHC_JS_DATA_STORAGE_OBJECT.called_method; - }, - renderTableSorter(data) { + _render(data) { if (FHC_AjaxClient.hasData(data)) { - this._setFieldsToDisplay(FHC_AjaxClient.getData(data)); this.dataset = FHC_AjaxClient.getData(data).dataset; + this.fields = FHC_AjaxClient.getData(data).fields; this.selectedFields = FHC_AjaxClient.getData(data).selectedFields; + this.notSelectedFields = this.fields.filter(x => this.selectedFields.indexOf(x) === -1); + + this.filterFields = []; + let tmpFilterFields = []; + for (let i = 0; i < FHC_AjaxClient.getData(data).datasetMetadata.length; i++) + { + for (let j = 0; j < FHC_AjaxClient.getData(data).filters.length; j++) + { + if (FHC_AjaxClient.getData(data).datasetMetadata[i].name == FHC_AjaxClient.getData(data).filters[j].name) + { + let filter = FHC_AjaxClient.getData(data).filters[j]; + filter.type = FHC_AjaxClient.getData(data).datasetMetadata[i].type; + + this.filterFields.push(filter); + tmpFilterFields.push(filter.name); + break; + } + } + } + + this.notFilterFields = this.fields.filter(x => tmpFilterFields.indexOf(x) === -1); + this._setFieldsToDisplay(FHC_AjaxClient.getData(data)); + this._setSideMenu(FHC_AjaxClient.getData(data)); } else { @@ -134,9 +244,165 @@ const CoreFilterCmpt = { } this.fieldsToDisplay = arrayFieldsToDisplay; + }, + _setSideMenu(data) { + // Set the menu + let filters = data.sideMenu.filters; + let personalFilters = data.sideMenu.personalFilters; + let filtersArray = []; + + for (let filtersCount = 0; filtersCount < filters.length; filtersCount++) + { + let link = filters[filtersCount].link; + + if (link == null) link = '#'; + + filtersArray[filtersArray.length] = { + link: link + filters[filtersCount].filter_id, + description: filters[filtersCount].desc, + sort: filtersCount, + onClickCall: this.fetchFilterDataById + }; + } + + this.$emit( + 'nwNewEntry', + [{ + link: "#", + description: "Filters", + icon: "filter", + children: filtersArray + }] + ); } }, template: ` +
+
+ Filter options +
+
+ +
+
+ +
+ +
+ + +
+
+ +
+
+ +
+
+ +
+
+ + +
+ + +
+
+
+ diff --git a/public/js/components/Navigation.js b/public/js/components/Navigation.js index 9c554217b..538268de8 100644 --- a/public/js/components/Navigation.js +++ b/public/js/components/Navigation.js @@ -1,4 +1,4 @@ -const CoreNavigationCmpt = { +export const CoreNavigationCmpt = { data() { return { headerMenu: {}, @@ -76,7 +76,7 @@ const CoreNavigationCmpt = {