Add session expiration settings
You can now set session expiration in settings -> General Settings -> Miscellaneous if admin is Idles for more than minutes set, he will required to login again, just for account security concerns. you can enable or disable
This commit is contained in:
parent
282bf6190c
commit
5a47da013b
@ -11,35 +11,54 @@ class Admin
|
|||||||
|
|
||||||
public static function getID()
|
public static function getID()
|
||||||
{
|
{
|
||||||
global $db_password;
|
global $db_password, $config;
|
||||||
if (isset($_SESSION['aid'])) {
|
$enable_session_timeout = $config['enable_session_timeout'];
|
||||||
|
$session_timeout_duration = $config['session_timeout_duration'] * 60; // Convert minutes to seconds
|
||||||
|
|
||||||
|
if (isset($_SESSION['aid']) && isset($_SESSION['aid_expiration']) && $_SESSION['aid_expiration'] > time()) {
|
||||||
return $_SESSION['aid'];
|
return $_SESSION['aid'];
|
||||||
} else if (isset($_COOKIE['aid'])) {
|
} elseif ($enable_session_timeout && isset($_SESSION['aid']) && isset($_SESSION['aid_expiration']) && $_SESSION['aid_expiration'] <= time()) {
|
||||||
|
self::removeCookie();
|
||||||
|
session_destroy();
|
||||||
|
_alert(Lang::T('Session has expired. Please log in again.'), 'danger', "admin");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
// Check if cookie is set and valid
|
||||||
|
elseif (isset($_COOKIE['aid'])) {
|
||||||
// id.time.sha1
|
// id.time.sha1
|
||||||
$tmp = explode('.', $_COOKIE['aid']);
|
$tmp = explode('.', $_COOKIE['aid']);
|
||||||
if (sha1($tmp[0] . '.' . $tmp[1] . '.' . $db_password) == $tmp[2]) {
|
if (sha1($tmp[0] . '.' . $tmp[1] . '.' . $db_password) == $tmp[2]) {
|
||||||
if (time() - $tmp[1] < 86400 * 7) {
|
if (time() - $tmp[1] < 86400 * 7) {
|
||||||
$_SESSION['aid'] = $tmp[0];
|
$_SESSION['aid'] = $tmp[0];
|
||||||
|
if ($enable_session_timeout) {
|
||||||
|
$_SESSION['aid_expiration'] = time() + $session_timeout_duration;
|
||||||
|
}
|
||||||
return $tmp[0];
|
return $tmp[0];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function setCookie($aid)
|
public static function setCookie($aid)
|
||||||
{
|
{
|
||||||
global $db_password;
|
global $db_password, $config;
|
||||||
|
$enable_session_timeout = $config['enable_session_timeout'];
|
||||||
|
$session_timeout_duration = $config['session_timeout_duration'] * 60; // Convert minutes to seconds
|
||||||
if (isset($aid)) {
|
if (isset($aid)) {
|
||||||
$time = time();
|
$time = time();
|
||||||
$token = $aid . '.' . $time . '.' . sha1($aid . '.' . $time . '.' . $db_password);
|
$token = $aid . '.' . $time . '.' . sha1($aid . '.' . $time . '.' . $db_password);
|
||||||
setcookie('aid', $token, time() + 86400 * 7);
|
setcookie('aid', $token, time() + 86400 * 7);
|
||||||
|
$_SESSION['aid'] = $aid;
|
||||||
|
if ($enable_session_timeout) {
|
||||||
|
$_SESSION['aid_expiration'] = $time + $session_timeout_duration;
|
||||||
|
}
|
||||||
return $token;
|
return $token;
|
||||||
}
|
}
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static function removeCookie()
|
public static function removeCookie()
|
||||||
{
|
{
|
||||||
if (isset($_COOKIE['aid'])) {
|
if (isset($_COOKIE['aid'])) {
|
||||||
|
@ -155,7 +155,9 @@ switch ($action) {
|
|||||||
die();
|
die();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Save all settings including tax system
|
// Save all settings including tax system
|
||||||
|
$enable_session_timeout = isset($_POST['enable_session_timeout']) ? 1 : 0;
|
||||||
|
$_POST['enable_session_timeout'] = $enable_session_timeout;
|
||||||
foreach ($_POST as $key => $value) {
|
foreach ($_POST as $key => $value) {
|
||||||
$d = ORM::for_table('tbl_appconfig')->where('setting', $key)->find_one();
|
$d = ORM::for_table('tbl_appconfig')->where('setting', $key)->find_one();
|
||||||
if ($d) {
|
if ($d) {
|
||||||
|
@ -586,6 +586,24 @@
|
|||||||
{Lang::T('Miscellaneous')}
|
{Lang::T('Miscellaneous')}
|
||||||
</div>
|
</div>
|
||||||
<div class="panel-body">
|
<div class="panel-body">
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-md-2 control-label">{Lang::T('Enable Session Timeout')}</label>
|
||||||
|
<div class="col-md-6">
|
||||||
|
<label class="switch">
|
||||||
|
<input type="checkbox" id="enable_session_timeout" value="1" name="enable_session_timeout" {if $_c['enable_session_timeout']==1}checked{/if}>
|
||||||
|
<span class="slider"></span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<p class="help-block col-md-4">{Lang::T('Logout Admin if not Available/Online a period of time')}</p>
|
||||||
|
</div>
|
||||||
|
<div class="form-group" id="timeout_duration_input" style="display: none;">
|
||||||
|
<label class="col-md-2 control-label">{Lang::T('Timeout Duration')}</label>
|
||||||
|
<div class="col-md-6">
|
||||||
|
<input type="number" value="{$_c['session_timeout_duration']}" class="form-control" name="session_timeout_duration" id="session_timeout_duration"
|
||||||
|
placeholder="{Lang::T('Enter the session timeout duration (minutes)')}" min="1">
|
||||||
|
</div>
|
||||||
|
<p class="help-block col-md-4">{Lang::T('Idle Timeout, Logout Admin if Idle for xx minutes')}</p>
|
||||||
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="col-md-2 control-label">{Lang::T('New Version Notification')}</label>
|
<label class="col-md-2 control-label">{Lang::T('New Version Notification')}</label>
|
||||||
<div class="col-md-6">
|
<div class="col-md-6">
|
||||||
@ -786,6 +804,38 @@ add dst-host=*.{$_domain}</pre>
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
|
|
||||||
|
<script>
|
||||||
|
document.addEventListener('DOMContentLoaded', function() {
|
||||||
|
var sectionTimeoutCheckbox = document.getElementById('enable_session_timeout');
|
||||||
|
var timeoutDurationInput = document.getElementById('timeout_duration_input');
|
||||||
|
var timeoutDurationField = document.getElementById('session_timeout_duration');
|
||||||
|
|
||||||
|
if (sectionTimeoutCheckbox.checked) {
|
||||||
|
timeoutDurationInput.style.display = 'block';
|
||||||
|
timeoutDurationField.required = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
sectionTimeoutCheckbox.addEventListener('change', function() {
|
||||||
|
if (this.checked) {
|
||||||
|
timeoutDurationInput.style.display = 'block';
|
||||||
|
timeoutDurationField.required = true;
|
||||||
|
} else {
|
||||||
|
timeoutDurationInput.style.display = 'none';
|
||||||
|
timeoutDurationField.required = false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
document.querySelector('form').addEventListener('submit', function(event) {
|
||||||
|
if (sectionTimeoutCheckbox.checked && (!timeoutDurationField.value || isNaN(timeoutDurationField.value))) {
|
||||||
|
event.preventDefault();
|
||||||
|
alert('Please enter a valid session timeout duration.');
|
||||||
|
timeoutDurationField.focus();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
<script>
|
<script>
|
||||||
function testWa() {
|
function testWa() {
|
||||||
var target = prompt("Phone number\nSave First before Test", "");
|
var target = prompt("Phone number\nSave First before Test", "");
|
||||||
|
@ -189,9 +189,65 @@
|
|||||||
.bs-callout-info h4 {
|
.bs-callout-info h4 {
|
||||||
color: #1b809e
|
color: #1b809e
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Checkbox container */
|
||||||
|
.switch {
|
||||||
|
position: relative;
|
||||||
|
display: inline-block;
|
||||||
|
width: 50px;
|
||||||
|
height: 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Hidden checkbox */
|
||||||
|
.switch input {
|
||||||
|
opacity: 0;
|
||||||
|
width: 0;
|
||||||
|
height: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Slider */
|
||||||
|
.slider {
|
||||||
|
position: absolute;
|
||||||
|
cursor: pointer;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
bottom: 0;
|
||||||
|
background-color: #ccc;
|
||||||
|
-webkit-transition: .4s;
|
||||||
|
transition: .4s;
|
||||||
|
border-radius: 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.slider:before {
|
||||||
|
position: absolute;
|
||||||
|
content: "";
|
||||||
|
height: 18px;
|
||||||
|
width: 18px;
|
||||||
|
left: 3px;
|
||||||
|
bottom: 3px;
|
||||||
|
background-color: white;
|
||||||
|
-webkit-transition: .4s;
|
||||||
|
transition: .4s;
|
||||||
|
border-radius: 50%;
|
||||||
|
}
|
||||||
|
|
||||||
|
input:checked+.slider {
|
||||||
|
background-color: #2196F3;
|
||||||
|
}
|
||||||
|
|
||||||
|
input:focus+.slider {
|
||||||
|
box-shadow: 0 0 1px #2196F3;
|
||||||
|
}
|
||||||
|
|
||||||
|
input:checked+.slider:before {
|
||||||
|
-webkit-transform: translateX(26px);
|
||||||
|
-ms-transform: translateX(26px);
|
||||||
|
transform: translateX(26px);
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
{if isset($xheader)}
|
{if isset($xheader)}
|
||||||
{$xheader}
|
{$xheader}
|
||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
@ -261,81 +317,81 @@
|
|||||||
</li>
|
</li>
|
||||||
{$_MENU_AFTER_DASHBOARD}
|
{$_MENU_AFTER_DASHBOARD}
|
||||||
{if !in_array($_admin['user_type'],['Report'])}
|
{if !in_array($_admin['user_type'],['Report'])}
|
||||||
<li class="{if in_array($_system_menu, ['customers', 'map'])}active{/if} treeview">
|
<li class="{if in_array($_system_menu, ['customers', 'map'])}active{/if} treeview">
|
||||||
<a href="#">
|
<a href="#">
|
||||||
<i class="fa fa-users"></i> <span>{Lang::T('Customer')}</span>
|
<i class="fa fa-users"></i> <span>{Lang::T('Customer')}</span>
|
||||||
<span class="pull-right-container">
|
<span class="pull-right-container">
|
||||||
<i class="fa fa-angle-left pull-right"></i>
|
<i class="fa fa-angle-left pull-right"></i>
|
||||||
</span>
|
</span>
|
||||||
</a>
|
</a>
|
||||||
<ul class="treeview-menu">
|
<ul class="treeview-menu">
|
||||||
<li {if $_system_menu eq 'customers' }class="active" {/if}><a
|
<li {if $_system_menu eq 'customers' }class="active" {/if}><a
|
||||||
href="{$_url}customers">{Lang::T('Lists')}</a></li>
|
href="{$_url}customers">{Lang::T('Lists')}</a></li>
|
||||||
<li {if $_system_menu eq 'map' }class="active" {/if}><a
|
<li {if $_system_menu eq 'map' }class="active" {/if}><a
|
||||||
href="{$_url}map/customer">{Lang::T('Location')}</a></li>
|
href="{$_url}map/customer">{Lang::T('Location')}</a></li>
|
||||||
{$_MENU_CUSTOMERS}
|
{$_MENU_CUSTOMERS}
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
{$_MENU_AFTER_CUSTOMERS}
|
{$_MENU_AFTER_CUSTOMERS}
|
||||||
<li class="{if $_system_menu eq 'plan'}active{/if} treeview">
|
<li class="{if $_system_menu eq 'plan'}active{/if} treeview">
|
||||||
<a href="#">
|
<a href="#">
|
||||||
<i class="fa fa-ticket"></i> <span>{Lang::T('Services')}</span>
|
<i class="fa fa-ticket"></i> <span>{Lang::T('Services')}</span>
|
||||||
<span class="pull-right-container">
|
<span class="pull-right-container">
|
||||||
<i class="fa fa-angle-left pull-right"></i>
|
<i class="fa fa-angle-left pull-right"></i>
|
||||||
</span>
|
</span>
|
||||||
</a>
|
</a>
|
||||||
<ul class="treeview-menu">
|
<ul class="treeview-menu">
|
||||||
<li {if $_routes[1] eq 'list' }class="active" {/if}><a
|
<li {if $_routes[1] eq 'list' }class="active" {/if}><a
|
||||||
href="{$_url}plan/list">{Lang::T('Active Users')}</a></li>
|
href="{$_url}plan/list">{Lang::T('Active Users')}</a></li>
|
||||||
{if $_c['disable_voucher'] != 'yes'}
|
{if $_c['disable_voucher'] != 'yes'}
|
||||||
<li {if $_routes[1] eq 'voucher' }class="active" {/if}><a
|
<li {if $_routes[1] eq 'voucher' }class="active" {/if}><a
|
||||||
href="{$_url}plan/voucher">{Lang::T('Vouchers')}</a></li>
|
href="{$_url}plan/voucher">{Lang::T('Vouchers')}</a></li>
|
||||||
<li {if $_routes[1] eq 'refill' }class="active" {/if}><a
|
<li {if $_routes[1] eq 'refill' }class="active" {/if}><a
|
||||||
href="{$_url}plan/refill">{Lang::T('Refill Customer')}</a></li>
|
href="{$_url}plan/refill">{Lang::T('Refill Customer')}</a></li>
|
||||||
{/if}
|
{/if}
|
||||||
<li {if $_routes[1] eq 'recharge' }class="active" {/if}><a
|
<li {if $_routes[1] eq 'recharge' }class="active" {/if}><a
|
||||||
href="{$_url}plan/recharge">{Lang::T('Recharge Customer')}</a></li>
|
href="{$_url}plan/recharge">{Lang::T('Recharge Customer')}</a></li>
|
||||||
{if $_c['enable_balance'] == 'yes'}
|
{if $_c['enable_balance'] == 'yes'}
|
||||||
<li {if $_routes[1] eq 'deposit' }class="active" {/if}><a
|
<li {if $_routes[1] eq 'deposit' }class="active" {/if}><a
|
||||||
href="{$_url}plan/deposit">{Lang::T('Refill Balance')}</a></li>
|
href="{$_url}plan/deposit">{Lang::T('Refill Balance')}</a></li>
|
||||||
{/if}
|
{/if}
|
||||||
{$_MENU_SERVICES}
|
{$_MENU_SERVICES}
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
{/if}
|
{/if}
|
||||||
{$_MENU_AFTER_SERVICES}
|
{$_MENU_AFTER_SERVICES}
|
||||||
{if in_array($_admin['user_type'],['SuperAdmin','Admin'])}
|
{if in_array($_admin['user_type'],['SuperAdmin','Admin'])}
|
||||||
<li class="{if $_system_menu eq 'services'}active{/if} treeview">
|
<li class="{if $_system_menu eq 'services'}active{/if} treeview">
|
||||||
<a href="#">
|
<a href="#">
|
||||||
<i class="ion ion-cube"></i> <span>{Lang::T('Internet Plan')}</span>
|
<i class="ion ion-cube"></i> <span>{Lang::T('Internet Plan')}</span>
|
||||||
<span class="pull-right-container">
|
<span class="pull-right-container">
|
||||||
<i class="fa fa-angle-left pull-right"></i>
|
<i class="fa fa-angle-left pull-right"></i>
|
||||||
</span>
|
</span>
|
||||||
</a>
|
</a>
|
||||||
<ul class="treeview-menu">
|
<ul class="treeview-menu">
|
||||||
<li {if $_routes[1] eq 'hotspot' }class="active" {/if}><a
|
<li {if $_routes[1] eq 'hotspot' }class="active" {/if}><a
|
||||||
href="{$_url}services/hotspot">Hotspot</a></li>
|
href="{$_url}services/hotspot">Hotspot</a></li>
|
||||||
<li {if $_routes[1] eq 'pppoe' }class="active" {/if}><a
|
<li {if $_routes[1] eq 'pppoe' }class="active" {/if}><a
|
||||||
href="{$_url}services/pppoe">PPPOE</a></li>
|
href="{$_url}services/pppoe">PPPOE</a></li>
|
||||||
<li {if $_routes[1] eq 'list' }class="active" {/if}><a
|
<li {if $_routes[1] eq 'list' }class="active" {/if}><a
|
||||||
href="{$_url}bandwidth/list">{Lang::T('Bandwidth')}</a></li>
|
href="{$_url}bandwidth/list">{Lang::T('Bandwidth')}</a></li>
|
||||||
{if $_c['enable_balance'] == 'yes'}
|
{if $_c['enable_balance'] == 'yes'}
|
||||||
<li {if $_routes[1] eq 'balance' }class="active" {/if}><a
|
<li {if $_routes[1] eq 'balance' }class="active" {/if}><a
|
||||||
href="{$_url}services/balance">{Lang::T('Customer Balance')}</a></li>
|
href="{$_url}services/balance">{Lang::T('Customer Balance')}</a></li>
|
||||||
{/if}
|
{/if}
|
||||||
{$_MENU_PLANS}
|
{$_MENU_PLANS}
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
{/if}
|
{/if}
|
||||||
{$_MENU_AFTER_PLANS}
|
{$_MENU_AFTER_PLANS}
|
||||||
<li class="{if $_system_menu eq 'reports'}active{/if} treeview">
|
<li class="{if $_system_menu eq 'reports'}active{/if} treeview">
|
||||||
{if in_array($_admin['user_type'],['SuperAdmin','Admin', 'Report'])}
|
{if in_array($_admin['user_type'],['SuperAdmin','Admin', 'Report'])}
|
||||||
<a href="#">
|
<a href="#">
|
||||||
<i class="ion ion-clipboard"></i> <span>{Lang::T('Reports')}</span>
|
<i class="ion ion-clipboard"></i> <span>{Lang::T('Reports')}</span>
|
||||||
<span class="pull-right-container">
|
<span class="pull-right-container">
|
||||||
<i class="fa fa-angle-left pull-right"></i>
|
<i class="fa fa-angle-left pull-right"></i>
|
||||||
</span>
|
</span>
|
||||||
</a>
|
</a>
|
||||||
{/if}
|
{/if}
|
||||||
<ul class="treeview-menu">
|
<ul class="treeview-menu">
|
||||||
<li {if $_system_menu eq 'reports' }class="active" {/if}><a
|
<li {if $_system_menu eq 'reports' }class="active" {/if}><a
|
||||||
@ -363,64 +419,64 @@
|
|||||||
</li>
|
</li>
|
||||||
{$_MENU_AFTER_MESSAGE}
|
{$_MENU_AFTER_MESSAGE}
|
||||||
{if in_array($_admin['user_type'],['SuperAdmin','Admin'])}
|
{if in_array($_admin['user_type'],['SuperAdmin','Admin'])}
|
||||||
<li class="{if $_system_menu eq 'network'}active{/if} treeview">
|
<li class="{if $_system_menu eq 'network'}active{/if} treeview">
|
||||||
<a href="#">
|
<a href="#">
|
||||||
<i class="ion ion-network"></i> <span>{Lang::T('Network')}</span>
|
<i class="ion ion-network"></i> <span>{Lang::T('Network')}</span>
|
||||||
<span class="pull-right-container">
|
<span class="pull-right-container">
|
||||||
<i class="fa fa-angle-left pull-right"></i>
|
<i class="fa fa-angle-left pull-right"></i>
|
||||||
</span>
|
</span>
|
||||||
</a>
|
</a>
|
||||||
<ul class="treeview-menu">
|
<ul class="treeview-menu">
|
||||||
<li {if $_routes[0] eq 'routers' and $_routes[1] eq 'list' }class="active" {/if}><a
|
<li {if $_routes[0] eq 'routers' and $_routes[1] eq 'list' }class="active" {/if}><a
|
||||||
href="{$_url}routers/list">{Lang::T('Routers')}</a></li>
|
href="{$_url}routers/list">{Lang::T('Routers')}</a></li>
|
||||||
<li {if $_routes[0] eq 'pool' and $_routes[1] eq 'list' }class="active" {/if}><a
|
<li {if $_routes[0] eq 'pool' and $_routes[1] eq 'list' }class="active" {/if}><a
|
||||||
href="{$_url}pool/list">{Lang::T('IP Pool')}</a></li>
|
href="{$_url}pool/list">{Lang::T('IP Pool')}</a></li>
|
||||||
{$_MENU_NETWORK}
|
{$_MENU_NETWORK}
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
{$_MENU_AFTER_NETWORKS}
|
{$_MENU_AFTER_NETWORKS}
|
||||||
{if $_c['radius_enable']}
|
{if $_c['radius_enable']}
|
||||||
<li class="{if $_system_menu eq 'radius'}active{/if} treeview">
|
<li class="{if $_system_menu eq 'radius'}active{/if} treeview">
|
||||||
<a href="#">
|
<a href="#">
|
||||||
<i class="fa fa-database"></i> <span>{Lang::T('Radius')}</span>
|
<i class="fa fa-database"></i> <span>{Lang::T('Radius')}</span>
|
||||||
<span class="pull-right-container">
|
<span class="pull-right-container">
|
||||||
<i class="fa fa-angle-left pull-right"></i>
|
<i class="fa fa-angle-left pull-right"></i>
|
||||||
</span>
|
</span>
|
||||||
</a>
|
</a>
|
||||||
<ul class="treeview-menu">
|
<ul class="treeview-menu">
|
||||||
<li {if $_routes[0] eq 'radius' and $_routes[1] eq 'nas-list' }class="active" {/if}><a
|
<li {if $_routes[0] eq 'radius' and $_routes[1] eq 'nas-list' }class="active" {/if}><a
|
||||||
href="{$_url}radius/nas-list">{Lang::T('Radius NAS')}</a></li>
|
href="{$_url}radius/nas-list">{Lang::T('Radius NAS')}</a></li>
|
||||||
{$_MENU_RADIUS}
|
{$_MENU_RADIUS}
|
||||||
</ul>
|
</ul>
|
||||||
|
</li>
|
||||||
|
{/if}
|
||||||
|
{$_MENU_AFTER_RADIUS}
|
||||||
|
<li class="{if $_system_menu eq 'pages'}active{/if} treeview">
|
||||||
|
<a href="#">
|
||||||
|
<i class="ion ion-document"></i> <span>{Lang::T("Static Pages")}</span>
|
||||||
|
<span class="pull-right-container">
|
||||||
|
<i class="fa fa-angle-left pull-right"></i>
|
||||||
|
</span>
|
||||||
|
</a>
|
||||||
|
<ul class="treeview-menu">
|
||||||
|
<li {if $_routes[1] eq 'Order_Voucher' }class="active" {/if}><a
|
||||||
|
href="{$_url}pages/Order_Voucher">{Lang::T('Order Voucher')}</a></li>
|
||||||
|
<li {if $_routes[1] eq 'Voucher' }class="active" {/if}><a
|
||||||
|
href="{$_url}pages/Voucher">{Lang::T('Voucher')} Template</a></li>
|
||||||
|
<li {if $_routes[1] eq 'Announcement' }class="active" {/if}><a
|
||||||
|
href="{$_url}pages/Announcement">{Lang::T('Announcement')}</a></li>
|
||||||
|
<li {if $_routes[1] eq 'Announcement_Customer' }class="active" {/if}><a
|
||||||
|
href="{$_url}pages/Announcement_Customer">{Lang::T('Customer Announcement')}</a>
|
||||||
</li>
|
</li>
|
||||||
{/if}
|
<li {if $_routes[1] eq 'Registration_Info' }class="active" {/if}><a
|
||||||
{$_MENU_AFTER_RADIUS}
|
href="{$_url}pages/Registration_Info">{Lang::T('Registration Info')}</a></li>
|
||||||
<li class="{if $_system_menu eq 'pages'}active{/if} treeview">
|
<li {if $_routes[1] eq 'Privacy_Policy' }class="active" {/if}><a
|
||||||
<a href="#">
|
href="{$_url}pages/Privacy_Policy">{Lang::T('Privacy Policy')}</a></li>
|
||||||
<i class="ion ion-document"></i> <span>{Lang::T("Static Pages")}</span>
|
<li {if $_routes[1] eq 'Terms_and_Conditions' }class="active" {/if}><a
|
||||||
<span class="pull-right-container">
|
href="{$_url}pages/Terms_and_Conditions">{Lang::T('Terms and Conditions')}</a></li>
|
||||||
<i class="fa fa-angle-left pull-right"></i>
|
{$_MENU_PAGES}
|
||||||
</span>
|
</ul>
|
||||||
</a>
|
</li>
|
||||||
<ul class="treeview-menu">
|
|
||||||
<li {if $_routes[1] eq 'Order_Voucher' }class="active" {/if}><a
|
|
||||||
href="{$_url}pages/Order_Voucher">{Lang::T('Order Voucher')}</a></li>
|
|
||||||
<li {if $_routes[1] eq 'Voucher' }class="active" {/if}><a
|
|
||||||
href="{$_url}pages/Voucher">{Lang::T('Voucher')} Template</a></li>
|
|
||||||
<li {if $_routes[1] eq 'Announcement' }class="active" {/if}><a
|
|
||||||
href="{$_url}pages/Announcement">{Lang::T('Announcement')}</a></li>
|
|
||||||
<li {if $_routes[1] eq 'Announcement_Customer' }class="active" {/if}><a
|
|
||||||
href="{$_url}pages/Announcement_Customer">{Lang::T('Customer Announcement')}</a>
|
|
||||||
</li>
|
|
||||||
<li {if $_routes[1] eq 'Registration_Info' }class="active" {/if}><a
|
|
||||||
href="{$_url}pages/Registration_Info">{Lang::T('Registration Info')}</a></li>
|
|
||||||
<li {if $_routes[1] eq 'Privacy_Policy' }class="active" {/if}><a
|
|
||||||
href="{$_url}pages/Privacy_Policy">{Lang::T('Privacy Policy')}</a></li>
|
|
||||||
<li {if $_routes[1] eq 'Terms_and_Conditions' }class="active" {/if}><a
|
|
||||||
href="{$_url}pages/Terms_and_Conditions">{Lang::T('Terms and Conditions')}</a></li>
|
|
||||||
{$_MENU_PAGES}
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
{/if}
|
{/if}
|
||||||
{$_MENU_AFTER_PAGES}
|
{$_MENU_AFTER_PAGES}
|
||||||
<li
|
<li
|
||||||
@ -433,76 +489,76 @@
|
|||||||
</a>
|
</a>
|
||||||
<ul class="treeview-menu">
|
<ul class="treeview-menu">
|
||||||
{if in_array($_admin['user_type'],['SuperAdmin','Admin'])}
|
{if in_array($_admin['user_type'],['SuperAdmin','Admin'])}
|
||||||
<li {if $_routes[1] eq 'app' }class="active" {/if}><a
|
<li {if $_routes[1] eq 'app' }class="active" {/if}><a
|
||||||
href="{$_url}settings/app">{Lang::T('General Settings')}</a></li>
|
href="{$_url}settings/app">{Lang::T('General Settings')}</a></li>
|
||||||
<li {if $_routes[1] eq 'localisation' }class="active" {/if}><a
|
<li {if $_routes[1] eq 'localisation' }class="active" {/if}><a
|
||||||
href="{$_url}settings/localisation">{Lang::T('Localisation')}</a></li>
|
href="{$_url}settings/localisation">{Lang::T('Localisation')}</a></li>
|
||||||
<li {if $_routes[1] eq 'maintenance' }class="active" {/if}><a
|
<li {if $_routes[1] eq 'maintenance' }class="active" {/if}><a
|
||||||
href="{$_url}settings/maintenance">{Lang::T('Maintenance Mode')}</a></li>
|
href="{$_url}settings/maintenance">{Lang::T('Maintenance Mode')}</a></li>
|
||||||
<li {if $_routes[1] eq 'notifications' }class="active" {/if}><a
|
<li {if $_routes[1] eq 'notifications' }class="active" {/if}><a
|
||||||
href="{$_url}settings/notifications">{Lang::T('User Notification')}</a></li>
|
href="{$_url}settings/notifications">{Lang::T('User Notification')}</a></li>
|
||||||
<li {if $_routes[1] eq 'devices' }class="active" {/if}><a
|
<li {if $_routes[1] eq 'devices' }class="active" {/if}><a
|
||||||
href="{$_url}settings/devices">{Lang::T('Devices')}</a></li>
|
href="{$_url}settings/devices">{Lang::T('Devices')}</a></li>
|
||||||
{/if}
|
{/if}
|
||||||
{if in_array($_admin['user_type'],['SuperAdmin','Admin','Agent'])}
|
{if in_array($_admin['user_type'],['SuperAdmin','Admin','Agent'])}
|
||||||
<li {if $_routes[1] eq 'users' }class="active" {/if}><a
|
<li {if $_routes[1] eq 'users' }class="active" {/if}><a
|
||||||
href="{$_url}settings/users">{Lang::T('Administrator Users')}</a></li>
|
href="{$_url}settings/users">{Lang::T('Administrator Users')}</a></li>
|
||||||
{/if}
|
{/if}
|
||||||
{if in_array($_admin['user_type'],['SuperAdmin','Admin'])}
|
{if in_array($_admin['user_type'],['SuperAdmin','Admin'])}
|
||||||
<li {if $_routes[1] eq 'dbstatus' }class="active" {/if}><a
|
<li {if $_routes[1] eq 'dbstatus' }class="active" {/if}><a
|
||||||
href="{$_url}settings/dbstatus">{Lang::T('Backup/Restore')}</a></li>
|
href="{$_url}settings/dbstatus">{Lang::T('Backup/Restore')}</a></li>
|
||||||
<li {if $_system_menu eq 'paymentgateway' }class="active" {/if}>
|
<li {if $_system_menu eq 'paymentgateway' }class="active" {/if}>
|
||||||
<a href="{$_url}paymentgateway">
|
<a href="{$_url}paymentgateway">
|
||||||
<span class="text">{Lang::T('Payment Gateway')}</span>
|
<span class="text">{Lang::T('Payment Gateway')}</span>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
{$_MENU_SETTINGS}
|
{$_MENU_SETTINGS}
|
||||||
<li {if $_routes[0] eq 'pluginmanager' }class="active" {/if}>
|
<li {if $_routes[0] eq 'pluginmanager' }class="active" {/if}>
|
||||||
<a href="{$_url}pluginmanager"><i class="glyphicon glyphicon-tasks"></i>
|
<a href="{$_url}pluginmanager"><i class="glyphicon glyphicon-tasks"></i>
|
||||||
{Lang::T('Plugin Manager')}</a>
|
{Lang::T('Plugin Manager')}</a>
|
||||||
</li>
|
</li>
|
||||||
{/if}
|
{/if}
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
{$_MENU_AFTER_SETTINGS}
|
{$_MENU_AFTER_SETTINGS}
|
||||||
{if in_array($_admin['user_type'],['SuperAdmin','Admin'])}
|
{if in_array($_admin['user_type'],['SuperAdmin','Admin'])}
|
||||||
<li class="{if $_system_menu eq 'logs' }active{/if} treeview">
|
<li class="{if $_system_menu eq 'logs' }active{/if} treeview">
|
||||||
<a href="#">
|
<a href="#">
|
||||||
<i class="ion ion-clock"></i> <span>{Lang::T('Logs')}</span>
|
<i class="ion ion-clock"></i> <span>{Lang::T('Logs')}</span>
|
||||||
<span class="pull-right-container">
|
<span class="pull-right-container">
|
||||||
<i class="fa fa-angle-left pull-right"></i>
|
<i class="fa fa-angle-left pull-right"></i>
|
||||||
</span>
|
</span>
|
||||||
</a>
|
</a>
|
||||||
<ul class="treeview-menu">
|
<ul class="treeview-menu">
|
||||||
<li {if $_routes[1] eq 'list' }class="active" {/if}><a
|
<li {if $_routes[1] eq 'list' }class="active" {/if}><a
|
||||||
href="{$_url}logs/phpnuxbill">PhpNuxBill</a></li>
|
href="{$_url}logs/phpnuxbill">PhpNuxBill</a></li>
|
||||||
{if $_c['radius_enable']}
|
{if $_c['radius_enable']}
|
||||||
<li {if $_routes[1] eq 'radius' }class="active" {/if}><a
|
<li {if $_routes[1] eq 'radius' }class="active" {/if}><a
|
||||||
href="{$_url}logs/radius">Radius</a>
|
href="{$_url}logs/radius">Radius</a>
|
||||||
</li>
|
</li>
|
||||||
{/if}
|
{/if}
|
||||||
{$_MENU_LOGS}
|
{$_MENU_LOGS}
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
{/if}
|
{/if}
|
||||||
{$_MENU_AFTER_LOGS}
|
{$_MENU_AFTER_LOGS}
|
||||||
{if in_array($_admin['user_type'],['SuperAdmin','Admin'])}
|
{if in_array($_admin['user_type'],['SuperAdmin','Admin'])}
|
||||||
<li {if $_system_menu eq 'community' }class="active" {/if}>
|
<li {if $_system_menu eq 'community' }class="active" {/if}>
|
||||||
<a href="{if $_c['docs_clicked'] != 'yes'}{$_url}settings/docs{else}./docs/{/if}">
|
<a href="{if $_c['docs_clicked'] != 'yes'}{$_url}settings/docs{else}./docs/{/if}">
|
||||||
<i class="ion ion-ios-bookmarks"></i>
|
<i class="ion ion-ios-bookmarks"></i>
|
||||||
<span class="text">{Lang::T('Documentation')}</span>
|
<span class="text">{Lang::T('Documentation')}</span>
|
||||||
{if $_c['docs_clicked'] != 'yes'}
|
{if $_c['docs_clicked'] != 'yes'}
|
||||||
<span class="pull-right-container"><small
|
<span class="pull-right-container"><small
|
||||||
class="label pull-right bg-green">New</small></span>
|
class="label pull-right bg-green">New</small></span>
|
||||||
{/if}
|
{/if}
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li {if $_system_menu eq 'community' }class="active" {/if}>
|
<li {if $_system_menu eq 'community' }class="active" {/if}>
|
||||||
<a href="{$_url}community">
|
<a href="{$_url}community">
|
||||||
<i class="ion ion-chatboxes"></i>
|
<i class="ion ion-chatboxes"></i>
|
||||||
<span class="text">{Lang::T('Community')}</span>
|
<span class="text">{Lang::T('Community')}</span>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
{/if}
|
{/if}
|
||||||
{$_MENU_AFTER_COMMUNITY}
|
{$_MENU_AFTER_COMMUNITY}
|
||||||
</ul>
|
</ul>
|
||||||
@ -510,11 +566,11 @@
|
|||||||
</aside>
|
</aside>
|
||||||
|
|
||||||
{if $_c['maintenance_mode'] == 1}
|
{if $_c['maintenance_mode'] == 1}
|
||||||
<div class="notification-top-bar">
|
<div class="notification-top-bar">
|
||||||
<p>{Lang::T('The website is currently in maintenance mode, this means that some or all functionality may be
|
<p>{Lang::T('The website is currently in maintenance mode, this means that some or all functionality may be
|
||||||
unavailable to regular users during this time.')}<small> <a
|
unavailable to regular users during this time.')}<small> <a
|
||||||
href="{$_url}settings/maintenance">{Lang::T('Turn Off')}</a></small></p>
|
href="{$_url}settings/maintenance">{Lang::T('Turn Off')}</a></small></p>
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
<div class="content-wrapper">
|
<div class="content-wrapper">
|
||||||
@ -526,19 +582,19 @@
|
|||||||
|
|
||||||
<section class="content">
|
<section class="content">
|
||||||
{if isset($notify)}
|
{if isset($notify)}
|
||||||
<script>
|
<script>
|
||||||
// Display SweetAlert toast notification
|
// Display SweetAlert toast notification
|
||||||
Swal.fire({
|
Swal.fire({
|
||||||
icon: '{if $notify_t == "s"}success{else}error{/if}',
|
icon: '{if $notify_t == "s"}success{else}error{/if}',
|
||||||
title: '{$notify}',
|
title: '{$notify}',
|
||||||
position: 'top-end',
|
position: 'top-end',
|
||||||
showConfirmButton: false,
|
showConfirmButton: false,
|
||||||
timer: 5000,
|
timer: 5000,
|
||||||
timerProgressBar: true,
|
timerProgressBar: true,
|
||||||
didOpen: (toast) => {
|
didOpen: (toast) => {
|
||||||
toast.addEventListener('mouseenter', Swal.stopTimer)
|
toast.addEventListener('mouseenter', Swal.stopTimer)
|
||||||
toast.addEventListener('mouseleave', Swal.resumeTimer)
|
toast.addEventListener('mouseleave', Swal.resumeTimer)
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
{/if}
|
{/if}
|
Loading…
x
Reference in New Issue
Block a user