%PDF- %PDF-
Direktori : /backups/router/usr/local/opnsense/mvc/app/views/OPNsense/CaptivePortal/ |
Current File : //backups/router/usr/local/opnsense/mvc/app/views/OPNsense/CaptivePortal/clients.volt |
{# # Copyright (c) 2014-2024 Deciso B.V. # All rights reserved. # # Redistribution and use in source and binary forms, with or without modification, # are permitted provided that the following conditions are met: # # 1. Redistributions of source code must retain the above copyright notice, # this list of conditions and the following disclaimer. # # 2. Redistributions in binary form must reproduce the above copyright notice, # this list of conditions and the following disclaimer in the documentation # and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY # AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE # AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, # OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. #} <script src="{{ cache_safe('/ui/js/moment-with-locales.min.js') }}"></script> <script> $( document ).ready(function() { ajaxGet("/api/captiveportal/session/zones/", {}, function(data, status) { if (status == "success") { $('#zone-selection').empty(); $.each(data, function(key, value) { $('#zone-selection').append($("<option></option>").attr("value", key).text(value)); }); $('.selectpicker').selectpicker('refresh'); } }); $("#zone-selection").on("changed.bs.select", function (e) { $("#grid-clients").bootgrid('reload'); }); $("#grid-clients").UIBootgrid({ search:'/api/captiveportal/session/search/', datakey: 'sessionId', commands: { disconnect: { title: "{{ lang._('Disconnect') }}", method: function() { let sessid = $(this).data("row-id") !== undefined ? $(this).data("row-id") : ''; stdDialogConfirm( "{{ lang._('Confirm disconnect') }}", "{{ lang._('Do you want to disconnect the selected client?') }}", "{{ lang._('Yes') }}", "{{ lang._('Cancel') }}", function () { ajaxCall("/api/captiveportal/session/disconnect",{'sessionId': sessid}, function(data,status){ $("#grid-clients").bootgrid('reload'); }); }); }, classname: 'fa fa-trash-o fa-fw', sequence: 1, } }, options: { selection: false, multiSelect: false, useRequestHandlerOnGet: true, requestHandler: function(request) { request['selected_zones'] = $("#zone-selection").val(); return request; } } }); $("#zone-selection-wrapper").detach().prependTo('#grid-clients-header > .row > .actionBar > .actions'); }); </script> <ul class="nav nav-tabs" data-tabs="tabs" id="maintabs"></ul> <div class="tab-content content-box col-xs-12 __mb"> <div class="btn-group" id="zone-selection-wrapper"> <select class="selectpicker" multiple="multiple" data-live-search="true" id="zone-selection" data-width="auto" title="{{ lang._('All Zones') }}"> </select> </div> <table id="grid-clients" class="table table-condensed table-hover table-striped table-responsive"> <thead> <tr> <th data-column-id="sessionId" data-type="string" data-identifier="true" data-visible="false">{{ lang._('Session') }}</th> <th data-column-id="zoneid" data-width="7em" data-type="string" data-visible="false">{{ lang._('Zoneid') }}</th> <th data-column-id="userName" data-type="string">{{ lang._('Username') }}</th> <th data-column-id="macAddress" data-type="string" data-width="12em" data-css-class="hidden-xs hidden-sm" data-header-css-class="hidden-xs hidden-sm">{{ lang._('MAC address') }}</th> <th data-column-id="ipAddress" data-type="string" data-width="12em" data-css-class="hidden-xs hidden-sm" data-header-css-class="hidden-xs hidden-sm">{{ lang._('IP address') }}</th> <th data-column-id="bytes_in" data-type="string" data-width="8em" data-formatter="bytes" data-css-class="hidden-xs hidden-sm" data-header-css-class="hidden-xs hidden-sm">{{ lang._('Bytes (in)') }}</th> <th data-column-id="bytes_out" data-type="string" data-width="8em" data-formatter="bytes" data-css-class="hidden-xs hidden-sm" data-header-css-class="hidden-xs hidden-sm">{{ lang._('Bytes (out)') }}</th> <th data-column-id="startTime" data-type="datetime">{{ lang._('Connected since') }}</th> <th data-column-id="last_accessed" data-type="datetime" data-css-class="hidden-xs hidden-sm" data-header-css-class="hidden-xs hidden-sm">{{ lang._('Last accessed') }}</th> <th data-column-id="commands" data-searchable="false" data-width="7em" data-formatter="commands" data-sortable="false">{{ lang._('Commands') }}</th> </tr> </thead> <tbody> </tbody> </table> </div>