commit
c2611fe025
3
.gitignore
vendored
3
.gitignore
vendored
@ -49,3 +49,6 @@ system/devices/**
|
|||||||
!system/devices/MikrotikHotspot.php
|
!system/devices/MikrotikHotspot.php
|
||||||
/.vs
|
/.vs
|
||||||
docker-compose.yml
|
docker-compose.yml
|
||||||
|
docs/**
|
||||||
|
!docs/*.html
|
||||||
|
!docs/*.md
|
@ -2,6 +2,12 @@
|
|||||||
|
|
||||||
# CHANGELOG
|
# CHANGELOG
|
||||||
|
|
||||||
|
## 2024.7.15
|
||||||
|
|
||||||
|
- Radius Rest API
|
||||||
|
- Getting Started Documentation
|
||||||
|
- Only Show new update just once
|
||||||
|
|
||||||
## 2024.6.21
|
## 2024.6.21
|
||||||
|
|
||||||
- Add filter result in voucher and internet plan
|
- Add filter result in voucher and internet plan
|
||||||
|
3298
docs/index.html
Normal file
3298
docs/index.html
Normal file
File diff suppressed because one or more lines are too long
@ -18,6 +18,14 @@ if(isset($_GET['nux-router']) && !empty($_GET['nux-router'])){
|
|||||||
$_SESSION['nux-router'] = $_GET['nux-router'];
|
$_SESSION['nux-router'] = $_GET['nux-router'];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//get chap id and chap challenge
|
||||||
|
if(isset($_GET['nux-key']) && !empty($_GET['nux-key'])){
|
||||||
|
$_SESSION['nux-key'] = $_GET['nux-key'];
|
||||||
|
}
|
||||||
|
//get mikrotik hostname
|
||||||
|
if(isset($_GET['nux-hostname']) && !empty($_GET['nux-hostname'])){
|
||||||
|
$_SESSION['nux-hostname'] = $_GET['nux-hostname'];
|
||||||
|
}
|
||||||
require_once 'system/vendor/autoload.php';
|
require_once 'system/vendor/autoload.php';
|
||||||
require_once 'system/boot.php';
|
require_once 'system/boot.php';
|
||||||
App::_run();
|
App::_run();
|
||||||
|
@ -205,6 +205,34 @@ CREATE TABLE `tbl_voucher` (
|
|||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||||
|
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS `rad_acct`;
|
||||||
|
CREATE TABLE `rad_acct` (
|
||||||
|
`id` bigint NOT NULL,
|
||||||
|
`acctsessionid` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '',
|
||||||
|
`username` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '',
|
||||||
|
`realm` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '',
|
||||||
|
`nasid` varchar(32) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '',
|
||||||
|
`nasipaddress` varchar(15) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '',
|
||||||
|
`nasportid` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
|
||||||
|
`nasporttype` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
|
||||||
|
`framedipaddress` varchar(15) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '',
|
||||||
|
`acctstatustype` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
|
||||||
|
`macaddr` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
|
||||||
|
`dateAdded` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||||
|
|
||||||
|
|
||||||
|
ALTER TABLE `rad_acct`
|
||||||
|
ADD PRIMARY KEY (`id`),
|
||||||
|
ADD KEY `username` (`username`),
|
||||||
|
ADD KEY `framedipaddress` (`framedipaddress`),
|
||||||
|
ADD KEY `acctsessionid` (`acctsessionid`),
|
||||||
|
ADD KEY `nasipaddress` (`nasipaddress`);
|
||||||
|
|
||||||
|
|
||||||
|
ALTER TABLE `rad_acct`
|
||||||
|
MODIFY `id` bigint NOT NULL AUTO_INCREMENT;
|
||||||
|
|
||||||
ALTER TABLE `tbl_appconfig`
|
ALTER TABLE `tbl_appconfig`
|
||||||
ADD PRIMARY KEY (`id`);
|
ADD PRIMARY KEY (`id`);
|
||||||
|
|
||||||
|
262
radius.php
Normal file
262
radius.php
Normal file
@ -0,0 +1,262 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* PHP Mikrotik Billing (https://github.com/hotspotbilling/phpnuxbill)
|
||||||
|
* by https://t.me/ibnux
|
||||||
|
*
|
||||||
|
* Authorize
|
||||||
|
* - Voucher activation
|
||||||
|
* Authenticate
|
||||||
|
* - is it allow to login
|
||||||
|
* Accounting
|
||||||
|
* - log
|
||||||
|
**/
|
||||||
|
|
||||||
|
header("Content-Type: application/json");
|
||||||
|
|
||||||
|
include "init.php";
|
||||||
|
|
||||||
|
$action = $_SERVER['HTTP_X_FREERADIUS_SECTION'];
|
||||||
|
if (empty($action)) {
|
||||||
|
$action = _get('action');
|
||||||
|
}
|
||||||
|
|
||||||
|
$code = 200;
|
||||||
|
|
||||||
|
//debug
|
||||||
|
// if (!empty($action)) {
|
||||||
|
// file_put_contents("$action.json", json_encode([
|
||||||
|
// 'header' => $_SERVER,
|
||||||
|
// 'get' => $_GET,
|
||||||
|
// 'post' => $_POST,
|
||||||
|
// 'time' => time()
|
||||||
|
// ]));
|
||||||
|
// }
|
||||||
|
|
||||||
|
try {
|
||||||
|
switch ($action) {
|
||||||
|
case 'authenticate':
|
||||||
|
$username = _req('username');
|
||||||
|
$password = _req('password');
|
||||||
|
if (empty($username) || empty($password)) {
|
||||||
|
show_radius_result([
|
||||||
|
"control:Auth-Type" => "Reject",
|
||||||
|
"reply:Reply-Message" => 'Login invalid'
|
||||||
|
], 401);
|
||||||
|
}
|
||||||
|
if ($username == $password) {
|
||||||
|
$d = ORM::for_table('tbl_voucher')->where('code', $username)->find_one();
|
||||||
|
} else {
|
||||||
|
$d = ORM::for_table('tbl_customers')->where('username', $username)->find_one();
|
||||||
|
if ($d['password'] != $password) {
|
||||||
|
if ($d['pppoe_password'] != $password) {
|
||||||
|
unset($d);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ($d) {
|
||||||
|
header("HTTP/1.1 204 No Content");
|
||||||
|
die();
|
||||||
|
} else {
|
||||||
|
show_radius_result([
|
||||||
|
"control:Auth-Type" => "Reject",
|
||||||
|
"reply:Reply-Message" => 'Login invalid......'
|
||||||
|
], 401);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'authorize':
|
||||||
|
$username = _req('username');
|
||||||
|
$password = _req('password');
|
||||||
|
$isVoucher = ($username == $password);
|
||||||
|
if (empty($username) || empty($password)) {
|
||||||
|
show_radius_result([
|
||||||
|
"control:Auth-Type" => "Reject",
|
||||||
|
"reply:Reply-Message" => 'Login invalid......'
|
||||||
|
], 401);
|
||||||
|
}
|
||||||
|
$tur = ORM::for_table('tbl_user_recharges')->where('username', $username)->find_one();
|
||||||
|
if ($tur) {
|
||||||
|
if (!$isVoucher) {
|
||||||
|
$d = ORM::for_table('tbl_customers')->select('password')->where('username', $username)->find_one();
|
||||||
|
if ($d['password'] != $password) {
|
||||||
|
if ($d['pppoe_password'] != $password) {
|
||||||
|
show_radius_result(['Reply-Message' => 'Username or Password is wrong'], 401);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
process_radiust_rest($tur, $code);
|
||||||
|
} else {
|
||||||
|
if ($isVoucher) {
|
||||||
|
$v = ORM::for_table('tbl_voucher')->where('code', $username)->where('routers', 'radius')->find_one();
|
||||||
|
if ($v) {
|
||||||
|
if ($v['status'] == 0) {
|
||||||
|
if (Package::rechargeUser(0, $v['routers'], $v['id_plan'], "Voucher", $username)) {
|
||||||
|
$v->status = "1";
|
||||||
|
$v->save();
|
||||||
|
$tur = ORM::for_table('tbl_user_recharges')->where('username', $username)->find_one();
|
||||||
|
if ($tur) {
|
||||||
|
process_radiust_rest($tur, $code);
|
||||||
|
} else {
|
||||||
|
show_radius_result(['Reply-Message' => 'Voucher activation failed'], 401);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
show_radius_result(['Reply-Message' => 'Voucher activation failed.'], 401);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
show_radius_result(['Reply-Message' => 'Voucher Expired...'], 401);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
show_radius_result(['Reply-Message' => 'Voucher Expired..'], 401);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
show_radius_result(['Reply-Message' => 'Internet Plan Expired..'], 401);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'accounting':
|
||||||
|
$username = _req('username');
|
||||||
|
if (empty($username)) {
|
||||||
|
show_radius_result([
|
||||||
|
"control:Auth-Type" => "Reject",
|
||||||
|
"reply:Reply-Message" => 'Username empty'
|
||||||
|
], 200);
|
||||||
|
die();
|
||||||
|
}
|
||||||
|
header("HTTP/1.1 200 ok");
|
||||||
|
$d = ORM::for_table('rad_acct')
|
||||||
|
->where('username', $username)
|
||||||
|
->where('macaddr', _post('macAddr'))
|
||||||
|
->where('acctstatustype', _post('acctStatusType'))
|
||||||
|
->findOne();
|
||||||
|
if (!$d) {
|
||||||
|
$d = ORM::for_table('rad_acct')->create();
|
||||||
|
}
|
||||||
|
$d->acctsessionid = _post('acctSessionId');
|
||||||
|
$d->username = $username;
|
||||||
|
$d->realm = _post('realm');
|
||||||
|
$d->nasipaddress = _post('nasip');
|
||||||
|
$d->nasid = _post('nasid');
|
||||||
|
$d->nasportid = _post('nasPortId');
|
||||||
|
$d->nasporttype = _post('nasPortType');
|
||||||
|
$d->framedipaddress = _post('framedIPAddress');
|
||||||
|
$d->acctstatustype = _post('acctStatusType');
|
||||||
|
$d->macaddr = _post('macAddr');
|
||||||
|
$d->dateAdded = date('Y-m-d H:i:s');
|
||||||
|
$d->save();
|
||||||
|
show_radius_result([
|
||||||
|
"control:Auth-Type" => "Accept",
|
||||||
|
"reply:Reply-Message" => 'Saved'
|
||||||
|
], 200);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
die();
|
||||||
|
} catch (Throwable $e) {
|
||||||
|
Message::sendTelegram(
|
||||||
|
"Sistem Error.\n" .
|
||||||
|
$e->getMessage() . "\n" .
|
||||||
|
$e->getTraceAsString()
|
||||||
|
);
|
||||||
|
show_radius_result(['Reply-Message' => 'Command Failed : ' . $action], 401);
|
||||||
|
} catch (Exception $e) {
|
||||||
|
Message::sendTelegram(
|
||||||
|
"Sistem Error.\n" .
|
||||||
|
$e->getMessage() . "\n" .
|
||||||
|
$e->getTraceAsString()
|
||||||
|
);
|
||||||
|
show_radius_result(['Reply-Message' => 'Command Failed : ' . $action], 401);
|
||||||
|
}
|
||||||
|
show_radius_result(['Reply-Message' => 'Invalid Command : ' . $action], 401);
|
||||||
|
|
||||||
|
function process_radiust_rest($tur, $code)
|
||||||
|
{
|
||||||
|
global $config;
|
||||||
|
$plan = ORM::for_table('tbl_plans')->where('id', $tur['plan_id'])->find_one();
|
||||||
|
$bw = ORM::for_table("tbl_bandwidth")->find_one($plan['id_bw']);
|
||||||
|
if ($bw['rate_down_unit'] == 'Kbps') {
|
||||||
|
$unitdown = 'K';
|
||||||
|
} else {
|
||||||
|
$unitdown = 'M';
|
||||||
|
}
|
||||||
|
if ($bw['rate_up_unit'] == 'Kbps') {
|
||||||
|
$unitup = 'K';
|
||||||
|
} else {
|
||||||
|
$unitup = 'M';
|
||||||
|
}
|
||||||
|
$rate = $bw['rate_up'] . $unitup . "/" . $bw['rate_down'] . $unitdown;
|
||||||
|
$rates = explode('/', $rate);
|
||||||
|
|
||||||
|
if (!empty(trim($bw['burst']))) {
|
||||||
|
$ratos = $rate . ' ' . $bw['burst'];
|
||||||
|
} else {
|
||||||
|
$ratos = $rates[0] . '/' . $rates[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
$attrs = [];
|
||||||
|
$timeexp = strtotime($tur['expiration'] . ' ' . $tur['time']);
|
||||||
|
$attrs['reply:Reply-Message'] = 'success';
|
||||||
|
$attrs['Simultaneous-Use'] = $plan['shared_users'];
|
||||||
|
$attrs['reply:Mikrotik-Wireless-Comment'] = $plan['name_plan'] . ' | ' . $tur['expiration'] . ' ' . $tur['time'];
|
||||||
|
|
||||||
|
$attrs['reply:Ascend-Data-Rate'] = str_replace('M', '000000', str_replace('K', '000', $rates[1]));
|
||||||
|
$attrs['reply:Ascend-Xmit-Rate'] = str_replace('M', '000000', str_replace('K', '000', $rates[0]));
|
||||||
|
$attrs['reply:Mikrotik-Rate-Limit'] = $ratos;
|
||||||
|
$attrs['reply:WISPr-Bandwidth-Max-Up'] = str_replace('M', '000000', str_replace('K', '000', $rates[0]));
|
||||||
|
$attrs['reply:WISPr-Bandwidth-Max-Down'] = str_replace('M', '000000', str_replace('K', '000', $rates[1]));
|
||||||
|
$attrs['reply:expiration'] = date('d M Y H:i:s', $timeexp);
|
||||||
|
$attrs['reply:WISPr-Session-Terminate-Time'] = date('Y-m-d', $timeexp) . 'T' . date('H:i:sP', $timeexp);
|
||||||
|
|
||||||
|
if ($plan['type'] == 'PPPOE') {
|
||||||
|
$attrs['reply:Framed-Pool'] = $plan['pool'];
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($plan['typebp'] == "Limited") {
|
||||||
|
if ($plan['limit_type'] == "Time_Limit") {
|
||||||
|
if ($plan['time_unit'] == 'Hrs')
|
||||||
|
$timelimit = $plan['time_limit'] * 60 * 60;
|
||||||
|
else
|
||||||
|
$timelimit = $plan['time_limit'] * 60;
|
||||||
|
$attrs['reply:Max-All-Session'] = $timelimit;
|
||||||
|
$attrs['reply:Expire-After'] = $timelimit;
|
||||||
|
} else if ($plan['limit_type'] == "Data_Limit") {
|
||||||
|
if ($plan['data_unit'] == 'GB')
|
||||||
|
$datalimit = $plan['data_limit'] . "000000000";
|
||||||
|
else
|
||||||
|
$datalimit = $plan['data_limit'] . "000000";
|
||||||
|
$attrs['reply:Max-Data'] = $datalimit;
|
||||||
|
$attrs['reply:Mikrotik-Recv-Limit-Gigawords'] = $datalimit;
|
||||||
|
$attrs['reply:Mikrotik-Xmit-Limit-Gigawords'] = $datalimit;
|
||||||
|
} else if ($plan['limit_type'] == "Both_Limit") {
|
||||||
|
if ($plan['time_unit'] == 'Hrs')
|
||||||
|
$timelimit = $plan['time_limit'] * 60 * 60;
|
||||||
|
else
|
||||||
|
$timelimit = $plan['time_limit'] * 60;
|
||||||
|
if ($plan['data_unit'] == 'GB')
|
||||||
|
$datalimit = $plan['data_limit'] . "000000000";
|
||||||
|
else
|
||||||
|
$datalimit = $plan['data_limit'] . "000000";
|
||||||
|
$attrs['reply:Max-All-Session'] = $timelimit;
|
||||||
|
$attrs['reply:Max-Data'] = $datalimit;
|
||||||
|
$attrs['reply:Mikrotik-Recv-Limit-Gigawords'] = $datalimit;
|
||||||
|
$attrs['reply:Mikrotik-Xmit-Limit-Gigawords'] = $datalimit;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$result = array_merge([
|
||||||
|
"control:Auth-Type" => "Accept",
|
||||||
|
"reply" => ["Reply-Message" => ['value' => 'success']]
|
||||||
|
], $attrs);
|
||||||
|
show_radius_result($result, $code);
|
||||||
|
}
|
||||||
|
|
||||||
|
function show_radius_result($array, $code = 200)
|
||||||
|
{
|
||||||
|
if ($code == 401) {
|
||||||
|
header("HTTP/1.1 401 Unauthorized");
|
||||||
|
} else if ($code == 200) {
|
||||||
|
header("HTTP/1.1 200 OK");
|
||||||
|
} else if ($code == 204) {
|
||||||
|
header("HTTP/1.1 204 No Content");
|
||||||
|
die();
|
||||||
|
}
|
||||||
|
die(json_encode($array));
|
||||||
|
die();
|
||||||
|
}
|
@ -26,16 +26,26 @@ class Package
|
|||||||
$time_only = date("H:i:s");
|
$time_only = date("H:i:s");
|
||||||
$time = date("H:i:s");
|
$time = date("H:i:s");
|
||||||
$inv = "";
|
$inv = "";
|
||||||
|
$isVoucher = false;
|
||||||
|
$c = [];
|
||||||
|
|
||||||
if ($id_customer == '' or $router_name == '' or $plan_id == '') {
|
if ($id_customer == '' or $router_name == '' or $plan_id == '') {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
if(trim($gateway) == 'Voucher' && $id_customer == 0){
|
||||||
|
$isVoucher = true;
|
||||||
|
}
|
||||||
|
|
||||||
$c = ORM::for_table('tbl_customers')->where('id', $id_customer)->find_one();
|
|
||||||
$p = ORM::for_table('tbl_plans')->where('id', $plan_id)->find_one();
|
$p = ORM::for_table('tbl_plans')->where('id', $plan_id)->find_one();
|
||||||
|
|
||||||
if ($c['status'] != 'Active') {
|
if(!$isVoucher){
|
||||||
_alert(Lang::T('This account status') . ' : ' . Lang::T($c['status']), 'danger', "");
|
$c = ORM::for_table('tbl_customers')->where('id', $id_customer)->find_one();
|
||||||
|
if ($c['status'] != 'Active') {
|
||||||
|
_alert(Lang::T('This account status') . ' : ' . Lang::T($c['status']), 'danger', "");
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
$c['username'] = $channel;
|
||||||
|
$c['fullname'] = $gateway;
|
||||||
}
|
}
|
||||||
|
|
||||||
$add_cost = 0;
|
$add_cost = 0;
|
||||||
|
1994
system/autoload/Parsedown.php
Normal file
1994
system/autoload/Parsedown.php
Normal file
File diff suppressed because it is too large
Load Diff
@ -210,7 +210,7 @@ if (isset($_GET['recharge']) && !empty($_GET['recharge'])) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($_SESSION['nux-mac']) && !empty($_SESSION['nux-ip'])) {
|
if (!empty($_SESSION['nux-mac']) && !empty($_SESSION['nux-ip'] && $_c['hs_auth_method'] != 'hchap')) {
|
||||||
$ui->assign('nux_mac', $_SESSION['nux-mac']);
|
$ui->assign('nux_mac', $_SESSION['nux-mac']);
|
||||||
$ui->assign('nux_ip', $_SESSION['nux-ip']);
|
$ui->assign('nux_ip', $_SESSION['nux-ip']);
|
||||||
$bill = ORM::for_table('tbl_user_recharges')->where('id', $_GET['id'])->where('username', $user['username'])->findOne();
|
$bill = ORM::for_table('tbl_user_recharges')->where('id', $_GET['id'])->where('username', $user['username'])->findOne();
|
||||||
@ -232,6 +232,60 @@ if (!empty($_SESSION['nux-mac']) && !empty($_SESSION['nux-ip'])) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!empty($_SESSION['nux-mac']) && !empty($_SESSION['nux-ip'] && !empty($_SESSION['nux-hostname']) && $_c['hs_auth_method'] == 'hchap')) {
|
||||||
|
$apkurl = (((!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'onoff')|| $_SERVER['SERVER_PORT'] == 443)?'https':'http').'://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
|
||||||
|
$ui->assign('nux_mac', $_SESSION['nux-mac']);
|
||||||
|
$ui->assign('nux_ip', $_SESSION['nux-ip']);
|
||||||
|
$keys = explode('-', $_SESSION['nux-key']);
|
||||||
|
$ui->assign('hostname', $_SESSION['nux-hostname']);
|
||||||
|
$ui->assign('apkurl', $apkurl);
|
||||||
|
$ui->assign('key1', $keys[0]);
|
||||||
|
$ui->assign('key2', $keys[1]);
|
||||||
|
$ui->assign('hchap', $_GET['hchap']);
|
||||||
|
$ui->assign('logged', $_GET['logged']);
|
||||||
|
if ($_app_stage != 'demo') {
|
||||||
|
if ($_GET['mikrotik'] == 'login') {
|
||||||
|
r2(U . 'home&hchap=true', 's', Lang::T('Login Request successfully'));
|
||||||
|
}
|
||||||
|
$getmsg = $_GET['msg'];
|
||||||
|
///get auth notification from mikrotik
|
||||||
|
if($getmsg == 'Connected') {
|
||||||
|
$msg .= Lang::T($getmsg);
|
||||||
|
r2(U . 'home&logged=1', 's', $msg);
|
||||||
|
} else if($getmsg){
|
||||||
|
$msg .= Lang::T($getmsg);
|
||||||
|
r2(U . 'home', 's', $msg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($_SESSION['nux-mac']) && !empty($_SESSION['nux-ip'] && !empty($_SESSION['nux-hostname']) && $_c['hs_auth_method'] == 'hchap')) {
|
||||||
|
$apkurl = (((!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'onoff')|| $_SERVER['SERVER_PORT'] == 443)?'https':'http').'://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
|
||||||
|
$ui->assign('nux_mac', $_SESSION['nux-mac']);
|
||||||
|
$ui->assign('nux_ip', $_SESSION['nux-ip']);
|
||||||
|
$keys = explode('-', $_SESSION['nux-key']);
|
||||||
|
$ui->assign('hostname', $_SESSION['nux-hostname']);
|
||||||
|
$ui->assign('apkurl', $apkurl);
|
||||||
|
$ui->assign('key1', $keys[0]);
|
||||||
|
$ui->assign('key2', $keys[1]);
|
||||||
|
$ui->assign('hchap', $_GET['hchap']);
|
||||||
|
$ui->assign('logged', $_GET['logged']);
|
||||||
|
if ($_app_stage != 'demo') {
|
||||||
|
if ($_GET['mikrotik'] == 'login') {
|
||||||
|
r2(U . 'home&hchap=true', 's', Lang::T('Login Request successfully'));
|
||||||
|
}
|
||||||
|
$getmsg = $_GET['msg'];
|
||||||
|
///get auth notification from mikrotik
|
||||||
|
if($getmsg == 'Connected') {
|
||||||
|
$msg .= Lang::T($getmsg);
|
||||||
|
r2(U . 'home&logged=1', 's', $msg);
|
||||||
|
} else if($getmsg){
|
||||||
|
$msg .= Lang::T($getmsg);
|
||||||
|
r2(U . 'home', 's', $msg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$ui->assign('unpaid', ORM::for_table('tbl_payment_gateway')
|
$ui->assign('unpaid', ORM::for_table('tbl_payment_gateway')
|
||||||
->where('username', $user['username'])
|
->where('username', $user['username'])
|
||||||
->where('status', 1)
|
->where('status', 1)
|
||||||
|
@ -12,6 +12,19 @@ $action = $routes['1'];
|
|||||||
$ui->assign('_admin', $admin);
|
$ui->assign('_admin', $admin);
|
||||||
|
|
||||||
switch ($action) {
|
switch ($action) {
|
||||||
|
case 'docs':
|
||||||
|
$d = ORM::for_table('tbl_appconfig')->where('setting', 'docs_clicked')->find_one();
|
||||||
|
if ($d) {
|
||||||
|
$d->value = 'yes';
|
||||||
|
$d->save();
|
||||||
|
} else {
|
||||||
|
$d = ORM::for_table('tbl_appconfig')->create();
|
||||||
|
$d->setting = 'docs_clicked';
|
||||||
|
$d->value = 'yes';
|
||||||
|
$d->save();
|
||||||
|
}
|
||||||
|
r2('./docs');
|
||||||
|
break;
|
||||||
case 'devices':
|
case 'devices':
|
||||||
$files = scandir($DEVICE_PATH);
|
$files = scandir($DEVICE_PATH);
|
||||||
$devices = [];
|
$devices = [];
|
||||||
@ -111,9 +124,12 @@ switch ($action) {
|
|||||||
_alert(Lang::T('You do not have permission to access this page'), 'danger', "dashboard");
|
_alert(Lang::T('You do not have permission to access this page'), 'danger', "dashboard");
|
||||||
}
|
}
|
||||||
$company = _post('CompanyName');
|
$company = _post('CompanyName');
|
||||||
|
$custom_tax_rate = filter_var(_post('custom_tax_rate'), FILTER_SANITIZE_SPECIAL_CHARS);
|
||||||
|
if (preg_match('/[^0-9.]/', $custom_tax_rate)) {
|
||||||
|
r2(U . 'settings/app', 'e', 'Special characters are not allowed in tax rate');
|
||||||
|
die();
|
||||||
|
}
|
||||||
run_hook('save_settings'); #HOOK
|
run_hook('save_settings'); #HOOK
|
||||||
|
|
||||||
|
|
||||||
if (!empty($_FILES['logo']['name'])) {
|
if (!empty($_FILES['logo']['name'])) {
|
||||||
if (function_exists('imagecreatetruecolor')) {
|
if (function_exists('imagecreatetruecolor')) {
|
||||||
if (file_exists($UPLOAD_PATH . DIRECTORY_SEPARATOR . 'logo.png')) unlink($UPLOAD_PATH . DIRECTORY_SEPARATOR . 'logo.png');
|
if (file_exists($UPLOAD_PATH . DIRECTORY_SEPARATOR . 'logo.png')) unlink($UPLOAD_PATH . DIRECTORY_SEPARATOR . 'logo.png');
|
||||||
@ -141,6 +157,9 @@ switch ($action) {
|
|||||||
}
|
}
|
||||||
// Save all settings including tax system
|
// Save all settings including tax system
|
||||||
foreach ($_POST as $key => $value) {
|
foreach ($_POST as $key => $value) {
|
||||||
|
$key = filter_var($key, FILTER_SANITIZE_SPECIAL_CHARS);
|
||||||
|
$value = filter_var($value, FILTER_SANITIZE_SPECIAL_CHARS);
|
||||||
|
|
||||||
$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) {
|
||||||
$d->value = $value;
|
$d->value = $value;
|
||||||
|
@ -15,7 +15,7 @@ if (php_sapi_name() !== 'cli') {
|
|||||||
echo "<pre>";
|
echo "<pre>";
|
||||||
}
|
}
|
||||||
|
|
||||||
$d = ORM::for_table('tbl_user_recharges')->where('status', 'on')->find_many();
|
$d = ORM::for_table('tbl_user_recharges')->where('status', 'on')->whereNotEqual('customer_id', '0')->find_many();
|
||||||
|
|
||||||
run_hook('cronjob_reminder'); #HOOK
|
run_hook('cronjob_reminder'); #HOOK
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@ class Dummy {
|
|||||||
'author' => 'ibnu maksum',
|
'author' => 'ibnu maksum',
|
||||||
'url' => [
|
'url' => [
|
||||||
'Github' => 'https://github.com/hotspotbilling/phpnuxbill/',
|
'Github' => 'https://github.com/hotspotbilling/phpnuxbill/',
|
||||||
'Telegram' => 'https://t.me/ibnux',
|
'Telegram' => 'https://t.me/phpnuxbill',
|
||||||
'Donate' => 'https://paypal.me/ibnux'
|
'Donate' => 'https://paypal.me/ibnux'
|
||||||
]
|
]
|
||||||
];
|
];
|
||||||
|
@ -22,7 +22,7 @@ class MikrotikHotspot
|
|||||||
'author' => 'ibnux',
|
'author' => 'ibnux',
|
||||||
'url' => [
|
'url' => [
|
||||||
'Github' => 'https://github.com/hotspotbilling/phpnuxbill/',
|
'Github' => 'https://github.com/hotspotbilling/phpnuxbill/',
|
||||||
'Telegram' => 'https://t.me/ibnux',
|
'Telegram' => 'https://t.me/phpnuxbill',
|
||||||
'Donate' => 'https://paypal.me/ibnux'
|
'Donate' => 'https://paypal.me/ibnux'
|
||||||
]
|
]
|
||||||
];
|
];
|
||||||
|
@ -21,7 +21,7 @@ class MikrotikPppoe
|
|||||||
'author' => 'ibnux',
|
'author' => 'ibnux',
|
||||||
'url' => [
|
'url' => [
|
||||||
'Github' => 'https://github.com/hotspotbilling/phpnuxbill/',
|
'Github' => 'https://github.com/hotspotbilling/phpnuxbill/',
|
||||||
'Telegram' => 'https://t.me/ibnux',
|
'Telegram' => 'https://t.me/phpnuxbill',
|
||||||
'Donate' => 'https://paypal.me/ibnux'
|
'Donate' => 'https://paypal.me/ibnux'
|
||||||
]
|
]
|
||||||
];
|
];
|
||||||
@ -31,9 +31,23 @@ class MikrotikPppoe
|
|||||||
{
|
{
|
||||||
$mikrotik = $this->info($plan['routers']);
|
$mikrotik = $this->info($plan['routers']);
|
||||||
$client = $this->getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']);
|
$client = $this->getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']);
|
||||||
$this->removePpoeUser($client, $customer['username']);
|
//check if customer exists
|
||||||
$this->removePpoeActive($client, $customer['username']);
|
$printRequest = new RouterOS\Request('/ppp/secret/print');
|
||||||
$this->addPpoeUser($client, $plan, $customer);
|
$printRequest->setQuery(RouterOS\Query::where('name', $customer['username']));
|
||||||
|
$cid = $client->sendSync($printRequest)->getProperty('.id');
|
||||||
|
if (empty($cid)) {
|
||||||
|
//customer not exists, add it
|
||||||
|
$this->addPpoeUser($client, $plan, $customer);
|
||||||
|
}else{
|
||||||
|
$setRequest = new RouterOS\Request('/ppp/secret/set');
|
||||||
|
$setRequest->setArgument('numbers', $cid);
|
||||||
|
$setRequest->setArgument('profile', $plan['name_plan']);
|
||||||
|
$setRequest->setArgument('comment', $customer['fullname'] . ' | ' . $customer['email']);
|
||||||
|
$setRequest->setArgument('password', $customer['password']);
|
||||||
|
$client->sendSync($setRequest);
|
||||||
|
//disconnect then
|
||||||
|
$this->removePpoeActive($client, $customer['username']);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function remove_customer($customer, $plan)
|
function remove_customer($customer, $plan)
|
||||||
@ -212,15 +226,6 @@ class MikrotikPppoe
|
|||||||
return $client->sendSync($printRequest)->getProperty('.id');
|
return $client->sendSync($printRequest)->getProperty('.id');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function connect_customer($customer, $ip, $mac_address, $router_name)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
function disconnect_customer($customer, $router_name)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
function info($name)
|
function info($name)
|
||||||
{
|
{
|
||||||
return ORM::for_table('tbl_routers')->where('name', $name)->find_one();
|
return ORM::for_table('tbl_routers')->where('name', $name)->find_one();
|
||||||
|
@ -20,7 +20,7 @@ class Radius
|
|||||||
'author' => 'ibnux',
|
'author' => 'ibnux',
|
||||||
'url' => [
|
'url' => [
|
||||||
'Github' => 'https://github.com/hotspotbilling/phpnuxbill/',
|
'Github' => 'https://github.com/hotspotbilling/phpnuxbill/',
|
||||||
'Telegram' => 'https://t.me/ibnux',
|
'Telegram' => 'https://t.me/phpnuxbill',
|
||||||
'Donate' => 'https://paypal.me/ibnux'
|
'Donate' => 'https://paypal.me/ibnux'
|
||||||
]
|
]
|
||||||
];
|
];
|
||||||
|
60
system/devices/RadiusRest.php
Normal file
60
system/devices/RadiusRest.php
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
class RadiusRest {
|
||||||
|
|
||||||
|
// show Description
|
||||||
|
function description()
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'title' => 'Radius Rest API',
|
||||||
|
'description' => 'This devices will handle Radius Connection using Rest API',
|
||||||
|
'author' => 'ibnu maksum',
|
||||||
|
'url' => [
|
||||||
|
'Wiki Tutorial' => 'https://github.com/hotspotbilling/phpnuxbill/wiki/FreeRadius-Rest',
|
||||||
|
'Telegram' => 'https://t.me/phpnuxbill',
|
||||||
|
'Donate' => 'https://paypal.me/ibnux'
|
||||||
|
]
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add Customer to Mikrotik/Device
|
||||||
|
function add_customer($customer, $plan)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove Customer to Mikrotik/Device
|
||||||
|
function remove_customer($customer, $plan)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add Plan to Mikrotik/Device
|
||||||
|
function add_plan($plan)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update Plan to Mikrotik/Device
|
||||||
|
function update_plan($old_name, $plan)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove Plan from Mikrotik/Device
|
||||||
|
function remove_plan($plan)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
// check if customer is online
|
||||||
|
function online_customer($customer, $router_name)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
// make customer online
|
||||||
|
function connect_customer($customer, $ip, $mac_address, $router_name)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
// make customer disconnect
|
||||||
|
function disconnect_customer($customer, $router_name)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,219 +1,655 @@
|
|||||||
{
|
{
|
||||||
"Recharge_Account": "Recharge Account",
|
"Log_in": "Login",
|
||||||
"Refill_Account": "Refill Account",
|
"Register": "Register",
|
||||||
"SuperAdmin": "SuperAdmin",
|
|
||||||
"Change_Password": "Change Password",
|
|
||||||
"My_Account": "My Account",
|
|
||||||
"Logout": "Logout",
|
|
||||||
"Dashboard": "Dashboard",
|
|
||||||
"Customer": "Customer",
|
|
||||||
"Lists": "Lists",
|
|
||||||
"Location": "Location",
|
|
||||||
"Services": "Services",
|
|
||||||
"Active_Users": "Active Users",
|
|
||||||
"Vouchers": "Vouchers",
|
|
||||||
"Refill_Customer": "Refill Customer",
|
|
||||||
"Recharge_Customer": "Recharge Customer",
|
|
||||||
"Refill_Balance": "Refill Balance",
|
|
||||||
"Internet_Plan": "Internet Plan",
|
|
||||||
"Bandwidth": "Bandwidth",
|
|
||||||
"Customer_Balance": "Customer Balance",
|
|
||||||
"Reports": "Reports",
|
|
||||||
"Daily_Reports": "Daily Reports",
|
|
||||||
"Period_Reports": "Period Reports",
|
|
||||||
"Activation_History": "Activation History",
|
|
||||||
"Send_Message": "Send Message",
|
|
||||||
"Single_Customer": "Single Customer",
|
|
||||||
"Bulk_Customers": "Bulk Customers",
|
|
||||||
"Network": "Network",
|
|
||||||
"Routers": "Routers",
|
|
||||||
"IP_Pool": "IP Pool",
|
|
||||||
"Radius": "Radius",
|
|
||||||
"Radius_NAS": "Radius NAS",
|
|
||||||
"Static_Pages": "Static Pages",
|
|
||||||
"Order_Voucher": "Order Voucher",
|
|
||||||
"Voucher": "Voucher",
|
|
||||||
"Announcement": "Announcement",
|
"Announcement": "Announcement",
|
||||||
"Customer_Announcement": "Customer Announcement",
|
|
||||||
"Registration_Info": "Registration Info",
|
"Registration_Info": "Registration Info",
|
||||||
"Privacy_Policy": "Privacy Policy",
|
"Voucher_not_found__please_buy_voucher_befor_register": "Voucher not found, please buy voucher befor register",
|
||||||
"Terms_and_Conditions": "Terms and Conditions",
|
"Register_Success__You_can_login_now": "Register Success! You can login now",
|
||||||
"Settings": "Settings",
|
"Log_in_to_Member_Panel": "Log in to Member Panel",
|
||||||
"General_Settings": "General Settings",
|
"Register_as_Member": "Register as Member",
|
||||||
"Localisation": "Localisation",
|
"Enter_Admin_Area": "Enter Admin Area",
|
||||||
"Maintenance_Mode": "Maintenance Mode",
|
"PHPNuxBill": "PHPNuxBill",
|
||||||
"User_Notification": "User Notification",
|
"Username": "Username",
|
||||||
"Administrator_Users": "Administrator Users",
|
"Password": "Password",
|
||||||
"Backup_Restore": "Backup\/Restore",
|
"Passwords_does_not_match": "Passwords does not match",
|
||||||
"Payment_Gateway": "Payment Gateway",
|
"Account_already_axist": "Account already axist",
|
||||||
"Plugin_Manager": "Plugin Manager",
|
|
||||||
"Logs": "Logs",
|
|
||||||
"Community": "Community",
|
|
||||||
"Select_Account": "Select Account",
|
|
||||||
"Select_a_customer": "Select a customer",
|
|
||||||
"Code_Voucher": "Code Voucher",
|
|
||||||
"Enter_voucher_code_here": "Enter voucher code here",
|
|
||||||
"Recharge": "Recharge",
|
|
||||||
"Cancel": "Cancel",
|
|
||||||
"Hotspot_Plans": "Hotspot Plans",
|
|
||||||
"Search_by_Name": "Search by Name",
|
|
||||||
"Search": "Search",
|
|
||||||
"New_Service_Plan": "New Service Plan",
|
|
||||||
"Expired": "Expired",
|
|
||||||
"Name": "Name",
|
|
||||||
"Type": "Type",
|
|
||||||
"Category": "Category",
|
|
||||||
"Price": "Price",
|
|
||||||
"Validity": "Validity",
|
|
||||||
"Time": "Time",
|
|
||||||
"Data": "Data",
|
|
||||||
"Device": "Device",
|
|
||||||
"Date": "Date",
|
|
||||||
"ID": "ID",
|
|
||||||
"Manage": "Manage",
|
"Manage": "Manage",
|
||||||
|
"Submit": "Submit",
|
||||||
|
"Save_Changes": "Save Changes",
|
||||||
|
"Cancel": "Cancel",
|
||||||
"Edit": "Edit",
|
"Edit": "Edit",
|
||||||
"Delete": "Delete",
|
"Delete": "Delete",
|
||||||
"Prev": "Prev",
|
"Welcome": "Welcome",
|
||||||
"Next": "Next",
|
"Data_Created_Successfully": "Data Created Successfully",
|
||||||
|
"Data_Updated_Successfully": "Data Updated Successfully",
|
||||||
|
"Data_Deleted_Successfully": "Data Deleted Successfully",
|
||||||
|
"Static_Pages": "Static Pages",
|
||||||
|
"Failed_to_save_page__make_sure_i_can_write_to_folder_pages___i_chmod_664_pages___html_i_": "Failed to save page, make sure i can write to folder pages, <i>chmod 664 pages\/*.html<i>",
|
||||||
|
"Saving_page_success": "Saving page success",
|
||||||
|
"Sometimes_you_need_to_refresh_3_times_until_content_change": "Sometimes you need to refresh 3 times until content change",
|
||||||
|
"Dashboard": "Dashboard",
|
||||||
|
"Search_Customers___": "Search Customers...",
|
||||||
|
"My_Account": "My Account",
|
||||||
|
"My_Profile": "My Profile",
|
||||||
|
"Settings": "Settings",
|
||||||
|
"Edit_Profile": "Edit Profile",
|
||||||
|
"Change_Password": "Change Password",
|
||||||
|
"Logout": "Logout",
|
||||||
|
"Services": "Services",
|
||||||
|
"Bandwidth_Plans": "Bandwidth Plans",
|
||||||
|
"Bandwidth_Name": "Bandwidth Name",
|
||||||
|
"New_Bandwidth": "New Bandwidth",
|
||||||
|
"Edit_Bandwidth": "Edit Bandwidth",
|
||||||
|
"Add_New_Bandwidth": "Add New Bandwidth",
|
||||||
|
"Rate_Download": "Rate Download",
|
||||||
|
"Rate_Upload": "Rate Upload",
|
||||||
|
"Name_Bandwidth_Already_Exist": "Name Bandwidth Already Exist",
|
||||||
|
"Hotspot_Plans": "Hotspot Plans",
|
||||||
"PPPOE_Plans": "PPPOE Plans",
|
"PPPOE_Plans": "PPPOE Plans",
|
||||||
"Plan_Name": "Plan Name",
|
"Plan_Name": "Plan Name",
|
||||||
"Plan_Type": "Plan Type",
|
"New_Service_Plan": "New Service Plan",
|
||||||
"Bandwidth_Plans": "Bandwidth Plans",
|
|
||||||
"Plan_Price": "Plan Price",
|
|
||||||
"Plan_Validity": "Plan Validity",
|
|
||||||
"Status": "Status",
|
|
||||||
"Business": "Business",
|
|
||||||
"Personal": "Personal",
|
|
||||||
"Hap_Lite": "Hap Lite",
|
|
||||||
"": "",
|
|
||||||
"Add_Service_Plan": "Add Service Plan",
|
"Add_Service_Plan": "Add Service Plan",
|
||||||
"Cannot_be_change_after_saved": "Cannot be change after saved",
|
"Edit_Service_Plan": "Edit Service Plan",
|
||||||
|
"Name_Plan_Already_Exist": "Name Plan Already Exist",
|
||||||
|
"Plan_Type": "Plan Type",
|
||||||
|
"Plan_Price": "Plan Price",
|
||||||
|
"Limit_Type": "Limit Type",
|
||||||
"Unlimited": "Unlimited",
|
"Unlimited": "Unlimited",
|
||||||
"Limited": "Limited",
|
"Limited": "Limited",
|
||||||
"Limit_Type": "Limit Type",
|
|
||||||
"Time_Limit": "Time Limit",
|
"Time_Limit": "Time Limit",
|
||||||
"Data_Limit": "Data Limit",
|
"Data_Limit": "Data Limit",
|
||||||
"Both_Limit": "Both Limit",
|
"Both_Limit": "Both Limit",
|
||||||
"Hrs": "Hrs",
|
"Plan_Validity": "Plan Validity",
|
||||||
"Mins": "Mins",
|
|
||||||
"Bandwidth_Name": "Bandwidth Name",
|
|
||||||
"Select_Bandwidth": "Select Bandwidth",
|
"Select_Bandwidth": "Select Bandwidth",
|
||||||
"Shared_Users": "Shared Users",
|
"Shared_Users": "Shared Users",
|
||||||
"1_Period___1_Month__Expires_the_20th_of_each_month": "1 Period = 1 Month, Expires the 20th of each month",
|
"Choose_User_Type_Sales_to_disable_access_to_Settings": "Choose User Type Sales to disable access to Settings",
|
||||||
"Expired_Date": "Expired Date",
|
"Current_Password": "Current Password",
|
||||||
"Router_Name": "Router Name",
|
"New_Password": "New Password",
|
||||||
"Select_Routers": "Select Routers",
|
"Administrator": "Administrator",
|
||||||
"Save_Changes": "Save Changes",
|
"Sales": "Sales",
|
||||||
"Days": "Days",
|
"Member": "Member",
|
||||||
"Months": "Months",
|
"Confirm_New_Password": "Confirm New Password",
|
||||||
"Period": "Period",
|
"Confirm_Password": "Confirm Password",
|
||||||
"New_Bandwidth": "New Bandwidth",
|
"Full_Name": "Full Name",
|
||||||
"Rate": "Rate",
|
"User_Type": "User Type",
|
||||||
"Burst": "Burst",
|
"Address": "Address",
|
||||||
"Balance_Plans": "Balance Plans",
|
|
||||||
"New_Router": "New Router",
|
|
||||||
"IP_Address": "IP Address",
|
|
||||||
"Username": "Username",
|
|
||||||
"Description": "Description",
|
|
||||||
"Edit_Service_Plan": "Edit Service Plan",
|
|
||||||
"Expired_Action": "Expired Action",
|
|
||||||
"Optional": "Optional",
|
|
||||||
"Expired_Internet_Plan": "Expired Internet Plan",
|
|
||||||
"When_Expired__customer_will_be_move_to_selected_internet_plan": "When Expired, customer will be move to selected internet plan",
|
|
||||||
"Data_Updated_Successfully": "Data Updated Successfully",
|
|
||||||
"Plugin_Installer": "Plugin Installer",
|
|
||||||
"Plugin": "Plugin",
|
|
||||||
"Search_by_Username": "Search by Username",
|
|
||||||
"Created_On": "Created On",
|
"Created_On": "Created On",
|
||||||
"Expires_On": "Expires On",
|
"Expires_On": "Expires On",
|
||||||
|
"Phone_Number": "Phone Number",
|
||||||
|
"User_deleted_Successfully": "User deleted Successfully",
|
||||||
|
"Full_Administrator": "Full Administrator",
|
||||||
|
"Keep_Blank_to_do_not_change_Password": "Keep Blank to do not change Password",
|
||||||
|
"Keep_it_blank_if_you_do_not_want_to_show_currency_code": "Keep it blank if you do not want to show currency code",
|
||||||
|
"Theme_Style": "Theme Style",
|
||||||
|
"Theme_Color": "Theme Color",
|
||||||
|
"Default_Language": "Default Language",
|
||||||
|
"Network": "Network",
|
||||||
|
"Routers": "Routers",
|
||||||
|
"IP_Pool": "IP Pool",
|
||||||
|
"New_Router": "New Router",
|
||||||
|
"Add_Router": "Add Router",
|
||||||
|
"Edit_Router": "Edit Router",
|
||||||
|
"Router_Name": "Router Name",
|
||||||
|
"IP_Address": "IP Address",
|
||||||
|
"Router_Secret": "Router Secret",
|
||||||
|
"Description": "Description",
|
||||||
|
"IP_Router_Already_Exist": "IP Router Already Exist",
|
||||||
|
"Name_Pool": "Name Pool",
|
||||||
|
"Range_IP": "Range IP",
|
||||||
|
"New_Pool": "New Pool",
|
||||||
|
"Add_Pool": "Add Pool",
|
||||||
|
"Edit_Pool": "Edit Pool",
|
||||||
|
"Pool_Name_Already_Exist": "Pool Name Already Exist",
|
||||||
|
"Refill_Account": "Refill Account",
|
||||||
|
"Recharge_Account": "Recharge Account",
|
||||||
|
"Select_Account": "Select Account",
|
||||||
|
"Service_Plan": "Service Plan",
|
||||||
|
"Recharge": "Recharge",
|
||||||
"Method": "Method",
|
"Method": "Method",
|
||||||
"Extend": "Extend",
|
"Account_Created_Successfully": "Account Created Successfully",
|
||||||
|
"Database_Status": "Database Status",
|
||||||
|
"Total_Database_Size": "Total Database Size",
|
||||||
|
"Download_Database_Backup": "Download Database Backup",
|
||||||
|
"Table_Name": "Table Name",
|
||||||
|
"Rows": "Rows",
|
||||||
|
"Size": "Size",
|
||||||
|
"Customer": "Customer",
|
||||||
|
"Add_New_Contact": "Add New Contact",
|
||||||
|
"Edit_Contact": "Edit Contact",
|
||||||
|
"List_Contact": "List Contact",
|
||||||
|
"Manage_Contact": "Manage Contact",
|
||||||
|
"Reports": "Reports",
|
||||||
|
"Daily_Reports": "Daily Reports",
|
||||||
|
"Period_Reports": "Period Reports",
|
||||||
|
"All_Transactions": "All Transactions",
|
||||||
|
"Total_Income": "Total Income",
|
||||||
|
"All_Transactions_at_Date": "All Transactions at Date",
|
||||||
|
"Export_for_Print": "Export for Print",
|
||||||
|
"Print": "Print",
|
||||||
|
"Export_to_PDF": "Export to PDF",
|
||||||
|
"Click_Here_to_Print": "Click Here to Print",
|
||||||
|
"You_can_use_html_tag": "You can use html tag",
|
||||||
|
"Date_Format": "Date Format",
|
||||||
|
"Income_Today": "Income Today",
|
||||||
|
"Income_This_Month": "Income This Month",
|
||||||
|
"Users_Active": "Users Active",
|
||||||
|
"Total_Users": "Total Users",
|
||||||
|
"Users": "Users",
|
||||||
|
"Edit_User": "Edit User",
|
||||||
|
"Last_Login": "Last Login",
|
||||||
|
"Administrator_Users": "Administrator Users",
|
||||||
|
"Manage_Administrator": "Manage Administrator",
|
||||||
|
"Add_New_Administrator": "Add New Administrator",
|
||||||
|
"Localisation": "Localisation",
|
||||||
|
"Backup_Restore": "Backup\/Restore",
|
||||||
|
"General_Settings": "General Settings",
|
||||||
|
"Date": "Date",
|
||||||
|
"Login_Successful": "Login Successful",
|
||||||
|
"Failed_Login": "Failed Login",
|
||||||
|
"Settings_Saved_Successfully": "Settings Saved Successfully",
|
||||||
|
"User_Updated_Successfully": "User Updated Successfully",
|
||||||
|
"User_Expired__Today": "User Expired, Today",
|
||||||
|
"Activity_Log": "Activity Log",
|
||||||
|
"View_Reports": "View Reports",
|
||||||
|
"View_All": "View All",
|
||||||
|
"Number_of_Vouchers": "Number of Vouchers",
|
||||||
|
"Length_Code": "Length Code",
|
||||||
|
"Code_Voucher": "Code Voucher",
|
||||||
|
"Voucher": "Voucher",
|
||||||
|
"Hotspot_Voucher": "Hotspot Voucher",
|
||||||
"Status_Voucher": "Status Voucher",
|
"Status_Voucher": "Status Voucher",
|
||||||
"Generated_By": "Generated By",
|
"Add_Vouchers": "Add Vouchers",
|
||||||
"View": "View",
|
"Create_Vouchers_Successfully": "Create Vouchers Successfully",
|
||||||
"Buy_Balance": "Buy Balance",
|
"Generate": "Generate",
|
||||||
"Buy_Package": "Buy Package",
|
"Print_side_by_side__it_will_easy_to_cut": "Print side by side, it will easy to cut",
|
||||||
"Order_History": "Order History",
|
"From_Date": "From Date",
|
||||||
"List_Activated_Voucher": "List Activated Voucher",
|
"To_Date": "To Date",
|
||||||
"Invoice": "Invoice",
|
"New_Service": "New Service",
|
||||||
"Select_Plans": "Select Plans",
|
"Type": "Type",
|
||||||
|
"Finish": "Finish",
|
||||||
"Application_Name__Company_Name": "Application Name\/ Company Name",
|
"Application_Name__Company_Name": "Application Name\/ Company Name",
|
||||||
"This_Name_will_be_shown_on_the_Title": "This Name will be shown on the Title",
|
"This_Name_will_be_shown_on_the_Title": "This Name will be shown on the Title",
|
||||||
"Company_Logo": "Company Logo",
|
"Next": "Next",
|
||||||
|
"Last": "Last",
|
||||||
|
"Timezone": "Timezone",
|
||||||
|
"Decimal_Point": "Decimal Point",
|
||||||
|
"Thousands_Separator": "Thousands Separator",
|
||||||
|
"Currency_Code": "Currency Code",
|
||||||
|
"Order_Voucher": "Order Voucher",
|
||||||
|
"Voucher_Activation": "Voucher Activation",
|
||||||
|
"List_Activated_Voucher": "List Activated Voucher",
|
||||||
|
"Enter_voucher_code_here": "Enter voucher code here",
|
||||||
|
"Private_Message": "Private Message",
|
||||||
|
"Inbox": "Inbox",
|
||||||
|
"Outbox": "Outbox",
|
||||||
|
"Compose": "Compose",
|
||||||
|
"Send_to": "Send to",
|
||||||
|
"Title": "Title",
|
||||||
|
"Message": "Message",
|
||||||
|
"Your_Account_Information": "Your Account Information",
|
||||||
|
"Welcome_to_the_Panel_Members_page__on_this_page_you_can_": "Welcome to the Panel Members page, on this page you can:",
|
||||||
|
"Invalid_Username_or_Password": "Invalid Username or Password",
|
||||||
|
"You_do_not_have_permission_to_access_this_page": "You do not have permission to access this page",
|
||||||
|
"Incorrect_Current_Password": "Incorrect Current Password",
|
||||||
|
"Password_changed_successfully__Please_login_again": "Password changed successfully, Please login again",
|
||||||
|
"All_field_is_required": "All field is required",
|
||||||
|
"Voucher_Not_Valid": "Voucher Not Valid",
|
||||||
|
"Activation_Vouchers_Successfully": "Activation Vouchers Successfully",
|
||||||
|
"Data_Not_Found": "Data Not Found",
|
||||||
|
"Search_by_Username": "Search by Username",
|
||||||
|
"Search_by_Name": "Search by Name",
|
||||||
|
"Search_by_Code_Voucher": "Search by Code Voucher",
|
||||||
|
"Search": "Search",
|
||||||
|
"Select_a_customer": "Select a customer",
|
||||||
|
"Select_Routers": "Select Routers",
|
||||||
|
"Select_Plans": "Select Plans",
|
||||||
|
"Select_Pool": "Select Pool",
|
||||||
|
"Hrs": "Hrs",
|
||||||
|
"Mins": "Mins",
|
||||||
|
"Days": "Days",
|
||||||
|
"Months": "Months",
|
||||||
|
"Add_Language": "Add Language",
|
||||||
|
"Language_Name": "Language Name",
|
||||||
|
"Folder_Name": "Folder Name",
|
||||||
|
"Translator": "Translator",
|
||||||
|
"Language_Name_Already_Exist": "Language Name Already Exist",
|
||||||
|
"Payment_Gateway": "Payment Gateway",
|
||||||
|
"Community": "Community",
|
||||||
|
"1_user_can_be_used_for_many_devices_": "1 user can be used for many devices?",
|
||||||
|
"Cannot_be_change_after_saved": "Cannot be change after saved",
|
||||||
|
"Explain_Coverage_of_router": "Explain Coverage of router",
|
||||||
|
"Name_of_Area_that_router_operated": "Name of Area that router operated",
|
||||||
|
"Payment_Notification_URL__Recurring_Notification_URL__Pay_Account_Notification_URL": "Payment Notification URL, Recurring Notification URL, Pay Account Notification URL",
|
||||||
|
"Finish_Redirect_URL__Unfinish_Redirect_URL__Error_Redirect_URL": "Finish Redirect URL, Unfinish Redirect URL, Error Redirect URL",
|
||||||
|
"Status": "Status",
|
||||||
|
"Plan_Not_found": "Plan Not found",
|
||||||
|
"Failed_to_create_transaction_": "Failed to create transaction.",
|
||||||
|
"Seller_has_not_yet_setup_Xendit_payment_gateway": "Seller has not yet setup Xendit payment gateway",
|
||||||
|
"Admin_has_not_yet_setup_Xendit_payment_gateway__please_tell_admin": "Admin has not yet setup Xendit payment gateway, please tell admin",
|
||||||
|
"You_already_have_unpaid_transaction__cancel_it_or_pay_it_": "You already have unpaid transaction, cancel it or pay it.",
|
||||||
|
"Transaction_Not_found": "Transaction Not found",
|
||||||
|
"Cancel_it_": "Cancel it?",
|
||||||
|
"expired": "expired",
|
||||||
|
"Check_for_Payment": "Check for Payment",
|
||||||
|
"Transaction_still_unpaid_": "Transaction still unpaid.",
|
||||||
|
"Paid_Date": "Paid Date",
|
||||||
|
"Transaction_has_been_paid_": "Transaction has been paid.",
|
||||||
|
"PAID": "PAID",
|
||||||
|
"CANCELED": "CANCELED",
|
||||||
|
"UNPAID": "UNPAID",
|
||||||
|
"PAY_NOW": "PAY NOW",
|
||||||
|
"Buy_Hotspot_Plan": "Buy Hotspot Plan",
|
||||||
|
"Buy_PPOE_Plan": "Buy PPOE Plan",
|
||||||
|
"Package": "Package",
|
||||||
|
"Order_Internet_Package": "Order Internet Package",
|
||||||
|
"Unknown_Command_": "Unknown Command.",
|
||||||
|
"Checking_payment": "Checking payment",
|
||||||
|
"Create_Transaction_Success": "Create Transaction Success",
|
||||||
|
"You_have_unpaid_transaction": "You have unpaid transaction",
|
||||||
|
"TripayPayment_Channel": "TripayPayment Channel",
|
||||||
|
"Payment_Channel": "Payment Channel",
|
||||||
|
"Payment_check_failed_": "Payment check failed.",
|
||||||
|
"Order_Package": "Order Package",
|
||||||
|
"Transactions": "Transactions",
|
||||||
|
"Payments": "Payments",
|
||||||
|
"History": "History",
|
||||||
|
"Order_History": "Order History",
|
||||||
|
"Gateway": "Gateway",
|
||||||
|
"Date_Done": "Date Done",
|
||||||
|
"Unpaid_Order": "Unpaid Order",
|
||||||
|
"Payment_Gateway_Not_Found": "Payment Gateway Not Found",
|
||||||
|
"Payment_Gateway_saved_successfully": "Payment Gateway saved successfully",
|
||||||
|
"ORDER": "ORDER",
|
||||||
|
"Package_History": "Package History",
|
||||||
|
"Buy_History": "Buy History",
|
||||||
|
"Activation_History": "Activation History",
|
||||||
|
"Buy_Package": "Buy Package",
|
||||||
|
"Email": "Email",
|
||||||
"Company_Footer": "Company Footer",
|
"Company_Footer": "Company Footer",
|
||||||
"Will_show_below_user_pages": "Will show below user pages",
|
"Will_show_below_user_pages": "Will show below user pages",
|
||||||
"Address": "Address",
|
"Request_OTP": "Request OTP",
|
||||||
"You_can_use_html_tag": "You can use html tag",
|
"Verification_Code": "Verification Code",
|
||||||
"Phone_Number": "Phone Number",
|
"SMS_Verification_Code": "SMS Verification Code",
|
||||||
"Invoice_Footer": "Invoice Footer",
|
"Please_enter_your_email_address": "Please enter your email address",
|
||||||
"Recharge_Using": "Recharge Using",
|
"Failed_to_create_Paypal_transaction_": "Failed to create Paypal transaction.",
|
||||||
"Cash": "Cash",
|
"Plugin": "Plugin",
|
||||||
"Bank_Transfer": "Bank Transfer",
|
"Plugin_Manager": "Plugin Manager",
|
||||||
"Income_reset_date": "Income reset date",
|
"User_Notification": "User Notification",
|
||||||
"Monthly_Registered_Customers": "Monthly Registered Customers",
|
"Expired_Notification": "Expired Notification",
|
||||||
"Total_Monthly_Sales": "Total Monthly Sales",
|
"User_will_get_notification_when_package_expired": "User will get notification when package expired",
|
||||||
"All_Users_Insights": "All Users Insights",
|
"Expired_Notification_Message": "Expired Notification Message",
|
||||||
"Activity_Log": "Activity Log",
|
"Payment_Notification": "Payment Notification",
|
||||||
"User_Expired__Today": "User Expired, Today",
|
"User_will_get_invoice_notification_when_buy_package_or_package_refilled": "User will get invoice notification when buy package or package refilled",
|
||||||
|
"Current_IP": "Current IP",
|
||||||
|
"Current_MAC": "Current MAC",
|
||||||
|
"Login_Status": "Login Status",
|
||||||
|
"Login_Request_successfully": "Login Request successfully",
|
||||||
|
"Logout_Request_successfully": "Logout Request successfully",
|
||||||
|
"Disconnect_Internet_": "Disconnect Internet?",
|
||||||
|
"Not_Online__Login_now_": "Not Online, Login now?",
|
||||||
|
"You_are_Online__Logout_": "You are Online, Logout?",
|
||||||
|
"Connect_to_Internet_": "Connect to Internet?",
|
||||||
|
"Your_account_not_connected_to_internet": "Your account not connected to internet",
|
||||||
|
"Failed_to_create_transaction__": "Failed to create transaction. ",
|
||||||
|
"Failed_to_check_status_transaction__": "Failed to check status transaction. ",
|
||||||
"Disable_Voucher": "Disable Voucher",
|
"Disable_Voucher": "Disable Voucher",
|
||||||
"Voucher_activation_menu_will_be_hidden": "Voucher activation menu will be hidden",
|
"Balance": "Balance",
|
||||||
"Voucher_Format": "Voucher Format",
|
|
||||||
"Disable_Registration": "Disable Registration",
|
|
||||||
"Customer_just_Login_with_Phone_number_and_Voucher_Code__Voucher_will_be_password": "Customer just Login with Phone number and Voucher Code, Voucher will be password",
|
|
||||||
"After_Customer_activate_voucher_or_login__customer_will_be_redirected_to_this_url": "After Customer activate voucher or login, customer will be redirected to this url",
|
|
||||||
"Extend_Postpaid_Expiration": "Extend Postpaid Expiration",
|
|
||||||
"Allow_Extend": "Allow Extend",
|
|
||||||
"Extend_Days": "Extend Days",
|
|
||||||
"Confirmation_Message": "Confirmation Message",
|
|
||||||
"Balance_System": "Balance System",
|
"Balance_System": "Balance System",
|
||||||
"Enable_System": "Enable System",
|
"Enable_System": "Enable System",
|
||||||
"Customer_can_deposit_money_to_buy_voucher": "Customer can deposit money to buy voucher",
|
|
||||||
"Allow_Transfer": "Allow Transfer",
|
"Allow_Transfer": "Allow Transfer",
|
||||||
"Allow_balance_transfer_between_customers": "Allow balance transfer between customers",
|
|
||||||
"Minimum_Balance_Transfer": "Minimum Balance Transfer",
|
|
||||||
"Telegram_Notification": "Telegram Notification",
|
"Telegram_Notification": "Telegram Notification",
|
||||||
"SMS_OTP_Registration": "SMS OTP Registration",
|
"SMS_OTP_Registration": "SMS OTP Registration",
|
||||||
"Whatsapp_Notification": "Whatsapp Notification",
|
"Whatsapp_Notification": "Whatsapp Notification",
|
||||||
"Email_Notification": "Email Notification",
|
|
||||||
"Expired_Notification": "Expired Notification",
|
|
||||||
"User_will_get_notification_when_package_expired": "User will get notification when package expired",
|
|
||||||
"Payment_Notification": "Payment Notification",
|
|
||||||
"User_will_get_invoice_notification_when_buy_package_or_package_refilled": "User will get invoice notification when buy package or package refilled",
|
|
||||||
"Reminder_Notification": "Reminder Notification",
|
|
||||||
"Tawk_to_Chat_Widget": "Tawk.to Chat Widget",
|
"Tawk_to_Chat_Widget": "Tawk.to Chat Widget",
|
||||||
"This_Token_will_act_as_SuperAdmin_Admin": "This Token will act as SuperAdmin\/Admin",
|
"Invoice": "Invoice",
|
||||||
|
"Country_Code_Phone": "Country Code Phone",
|
||||||
|
"Voucher_activation_menu_will_be_hidden": "Voucher activation menu will be hidden",
|
||||||
|
"Customer_can_deposit_money_to_buy_voucher": "Customer can deposit money to buy voucher",
|
||||||
|
"Allow_balance_transfer_between_customers": "Allow balance transfer between customers",
|
||||||
|
"Reminder_Notification": "Reminder Notification",
|
||||||
|
"Reminder_Notification_Message": "Reminder Notification Message",
|
||||||
|
"Reminder_7_days": "Reminder 7 days",
|
||||||
|
"Reminder_3_days": "Reminder 3 days",
|
||||||
|
"Reminder_1_day": "Reminder 1 day",
|
||||||
|
"PPPOE_Password": "PPPOE Password",
|
||||||
|
"User_Cannot_change_this__only_admin__if_it_Empty_it_will_use_user_password": "User Cannot change this, only admin. if it Empty it will use user password",
|
||||||
|
"Invoice_Balance_Message": "Invoice Balance Message",
|
||||||
|
"Invoice_Notification_Payment": "Invoice Notification Payment",
|
||||||
|
"Balance_Notification_Payment": "Balance Notification Payment",
|
||||||
|
"Balance_Plans": "Balance Plans",
|
||||||
|
"Buy_Balance": "Buy Balance",
|
||||||
|
"Price": "Price",
|
||||||
|
"Validity": "Validity",
|
||||||
|
"Disable_auto_renewal_": "Disable auto renewal?",
|
||||||
|
"Auto_Renewal_On": "Auto Renewal On",
|
||||||
|
"Enable_auto_renewal_": "Enable auto renewal?",
|
||||||
|
"Auto_Renewal_Off": "Auto Renewal Off",
|
||||||
|
"Refill_Balance": "Refill Balance",
|
||||||
|
"Invoice_Footer": "Invoice Footer",
|
||||||
|
"Pay_With_Balance": "Pay With Balance",
|
||||||
|
"Pay_this_with_Balance__your_active_package_will_be_overwrite": "Pay this with Balance? your active package will be overwrite",
|
||||||
|
"Success_to_buy_package": "Success to buy package",
|
||||||
|
"Auto_Renewal": "Auto Renewal",
|
||||||
|
"View": "View",
|
||||||
|
"Back": "Back",
|
||||||
|
"Active": "Active",
|
||||||
|
"Transfer_Balance": "Transfer Balance",
|
||||||
|
"Send_your_balance_": "Send your balance?",
|
||||||
|
"Send": "Send",
|
||||||
|
"Cannot_send_to_yourself": "Cannot send to yourself",
|
||||||
|
"Sending_balance_success": "Sending balance success",
|
||||||
|
"From": "From",
|
||||||
|
"To": "To",
|
||||||
|
"insufficient_balance": "insufficient balance",
|
||||||
|
"Send_Balance": "Send Balance",
|
||||||
|
"Received_Balance": "Received Balance",
|
||||||
|
"Minimum_Balance_Transfer": "Minimum Balance Transfer",
|
||||||
|
"Minimum_Transfer": "Minimum Transfer",
|
||||||
|
"Company_Logo": "Company Logo",
|
||||||
|
"Expired_IP_Pool": "Expired IP Pool",
|
||||||
"Proxy": "Proxy",
|
"Proxy": "Proxy",
|
||||||
"Proxy_Server": "Proxy Server",
|
"Proxy_Server": "Proxy Server",
|
||||||
"Proxy_Server_Login": "Proxy Server Login",
|
"Proxy_Server_Login": "Proxy Server Login",
|
||||||
|
"Hotspot_Plan": "Hotspot Plan",
|
||||||
|
"PPPOE_Plan": "PPPOE Plan",
|
||||||
|
"UNKNOWN": "UNKNOWN",
|
||||||
|
"Are_You_Sure_": "Are You Sure?",
|
||||||
|
"Success_to_send_package": "Success to send package",
|
||||||
|
"Target_has_active_plan__different_with_current_plant_": "Target has active plan, different with current plant.",
|
||||||
|
"Recharge_a_friend": "Recharge a friend",
|
||||||
|
"Buy_for_friend": "Buy for friend",
|
||||||
|
"Buy_this_for_friend_account_": "Buy this for friend account?",
|
||||||
|
"Review_package_before_recharge": "Review package before recharge",
|
||||||
|
"Activate": "Activate",
|
||||||
|
"Deactivate": "Deactivate",
|
||||||
|
"Sync": "Sync",
|
||||||
|
"Failed_to_create_PaymeTrust_transaction_": "Failed to create PaymeTrust transaction.",
|
||||||
|
"Location": "Location",
|
||||||
|
"Radius_Plans": "Radius Plans",
|
||||||
|
"Change_title_in_user_Plan_order": "Change title in user Plan order",
|
||||||
|
"Logs": "Logs",
|
||||||
|
"Voucher_Format": "Voucher Format",
|
||||||
|
"Resend_To_Customer": "Resend To Customer",
|
||||||
|
"Your_friend_do_not_have_active_package": "Your friend do not have active package",
|
||||||
|
"Service_Type": "Service Type",
|
||||||
|
"Others": "Others",
|
||||||
|
"PPPoE": "PPPoE",
|
||||||
|
"Hotspot": "Hotspot",
|
||||||
|
"Disable_Registration": "Disable Registration",
|
||||||
|
"Customer_just_Login_with_Phone_number_and_Voucher_Code__Voucher_will_be_password": "Customer just Login with Phone number and Voucher Code, Voucher will be password",
|
||||||
|
"Login___Activate_Voucher": "Login \/ Activate Voucher",
|
||||||
|
"After_Customer_activate_voucher_or_login__customer_will_be_redirected_to_this_url": "After Customer activate voucher or login, customer will be redirected to this url",
|
||||||
|
"Voucher_Prefix": "Voucher Prefix",
|
||||||
|
"Voucher_activation_success__now_you_can_login": "Voucher activation success, now you can login",
|
||||||
|
"Buy_this__your_active_package_will_be_overwritten": "Buy this? your active package will be overwritten",
|
||||||
|
"Pay_this_with_Balance__your_active_package_will_be_overwritten": "Pay this with Balance? your active package will be overwritten",
|
||||||
|
"Buy_this__your_active_package_will_be_overwrite": "Buy this? your active package will be overwrite",
|
||||||
|
"Monthly_Registered_Customers": "Monthly Registered Customers",
|
||||||
|
"Total_Monthly_Sales": "Total Monthly Sales",
|
||||||
|
"Active_Users": "Active Users",
|
||||||
|
"All_Users_Insights": "All Users Insights",
|
||||||
|
"SuperAdmin": "Super Admin",
|
||||||
|
"Radius": "Radius",
|
||||||
|
"Radius_NAS": "Radius NAS",
|
||||||
|
"Translation": "Translation",
|
||||||
|
"Translation_saved_Successfully": "Translation saved Successfully",
|
||||||
|
"Language_Editor": "Language Editor",
|
||||||
|
"year": "year",
|
||||||
|
"month": "month",
|
||||||
|
"week": "week",
|
||||||
|
"day": "day",
|
||||||
|
"hour": "hour",
|
||||||
|
"minute": "minute",
|
||||||
|
"second": "second",
|
||||||
|
"Attributes": "Attributes",
|
||||||
|
"Profile": "Profile",
|
||||||
|
"Phone": "Phone",
|
||||||
|
"City": "City",
|
||||||
|
"Sub_District": "Sub District",
|
||||||
|
"Ward": "Ward",
|
||||||
|
"Credentials": "Credentials",
|
||||||
|
"Agent": "Agent",
|
||||||
|
"This_Token_will_act_as_SuperAdmin_Admin": "This Token will act as SuperAdmin\/Admin",
|
||||||
|
"Login": "Login",
|
||||||
|
"Expired_Action": "Expired Action",
|
||||||
|
"Expired_Address_List_Name": "Expired Address List Name",
|
||||||
|
"Address_List": "Address List",
|
||||||
|
"Optional": "Optional",
|
||||||
|
"Generated_By": "Generated By",
|
||||||
|
"Admin": "Admin",
|
||||||
|
"Password_should_be_minimum_6_characters": "Password should be minimum 6 characters",
|
||||||
|
"Add_User": "Add User",
|
||||||
|
"Send_Notification": "Send Notification",
|
||||||
|
"Code": "Code",
|
||||||
|
"Send_To_Customer": "Send To Customer",
|
||||||
|
"Prev": "Prev",
|
||||||
|
"Voucher_Not_Found": "Voucher Not Found",
|
||||||
"Miscellaneous": "Miscellaneous",
|
"Miscellaneous": "Miscellaneous",
|
||||||
"OTP_Required": "OTP Required",
|
"OTP_Required": "OTP Required",
|
||||||
|
"Change": "Change",
|
||||||
|
"Change_Phone_Number": "Change Phone Number",
|
||||||
|
"Current_Number": "Current Number",
|
||||||
|
"New_Number": "New Number",
|
||||||
|
"Input_your_phone_number": "Input your phone number",
|
||||||
|
"OTP": "OTP",
|
||||||
|
"Enter_OTP_that_was_sent_to_your_phone": "Enter OTP that was sent to your phone",
|
||||||
|
"Update": "Update",
|
||||||
"OTP_is_required_when_user_want_to_change_phone_number": "OTP is required when user want to change phone number",
|
"OTP_is_required_when_user_want_to_change_phone_number": "OTP is required when user want to change phone number",
|
||||||
|
"Rate": "Rate",
|
||||||
|
"Burst": "Burst",
|
||||||
|
"Editing_Bandwidth_will_not_automatically_update_the_plan__you_need_to_edit_the_plan_then_save_again": "Editing Bandwidth will not automatically update the plan, you need to edit the plan then save again",
|
||||||
"OTP_Method": "OTP Method",
|
"OTP_Method": "OTP Method",
|
||||||
"SMS": "SMS",
|
"SMS": "SMS",
|
||||||
"WhatsApp": "WhatsApp",
|
"WhatsApp": "WhatsApp",
|
||||||
"SMS_and_WhatsApp": "SMS and WhatsApp",
|
"SMS_and_WhatsApp": "SMS and WhatsApp",
|
||||||
"The_method_which_OTP_will_be_sent_to_user": "The method which OTP will be sent to user",
|
"The_method_which_OTP_will_be_sent_to_user": "The method which OTP will be sent to user",
|
||||||
|
"Report_Viewer": "Report Viewer",
|
||||||
|
"Super_Administrator": "Super Administrator",
|
||||||
|
"Send_To": "Send To",
|
||||||
|
"Resend": "Resend",
|
||||||
|
"Alert": "Alert",
|
||||||
|
"success": "success",
|
||||||
|
"Click_Here": "Click Here",
|
||||||
|
"danger": "danger",
|
||||||
|
"Logout_Successful": "Logout Successful",
|
||||||
|
"warning": "warning",
|
||||||
|
"Users_Announcement": "Users Announcement",
|
||||||
|
"Customer_Announcement": "Customer Announcement",
|
||||||
|
"1_Period___1_Month__Expires_the_20th_of_each_month": "1 Period = 1 Month, Expires the 20th of each month",
|
||||||
|
"Period": "Period",
|
||||||
|
"Add": "Add",
|
||||||
|
"Select_Payment_Gateway": "Select Payment Gateway",
|
||||||
|
"Available_Payment_Gateway": "Available Payment Gateway",
|
||||||
|
"Pay_Now": "Pay Now",
|
||||||
|
"Please_select_Payment_Gateway": "Please select Payment Gateway",
|
||||||
|
"Payment_Gateway_Deleted": "Payment Gateway Deleted",
|
||||||
|
"Payment_Gateway_not_set__please_set_it_in_Settings": "Payment Gateway not set, please set it in Settings",
|
||||||
|
"Failed_to_create_Transaction__": "Failed to create Transaction..",
|
||||||
|
"Show_To_Customer": "Type",
|
||||||
|
"Using": "Using",
|
||||||
|
"Default": "Default",
|
||||||
|
"Customer_Balance": "Customer Balance",
|
||||||
|
"Vouchers": "Vouchers",
|
||||||
|
"Refill_Customer": "Refill Customer",
|
||||||
|
"Recharge_Customer": "Recharge Customer",
|
||||||
|
"Plans": "Plans",
|
||||||
|
"PPPOE": "PPPOE",
|
||||||
|
"Bandwidth": "Bandwidth",
|
||||||
|
"Customers": "Customers",
|
||||||
|
"Actives": "Actives",
|
||||||
|
"Name": "Name",
|
||||||
|
"Confirm": "Confirm",
|
||||||
|
"Plan": "Plan",
|
||||||
|
"Total": "Total",
|
||||||
|
"Current_Cycle": "Current Cycle",
|
||||||
|
"Additional_Cost": "Additional Cost",
|
||||||
|
"Remaining": "Remaining",
|
||||||
|
"Not_Found": "Not Found",
|
||||||
|
"Cash": "Cash",
|
||||||
|
"Payment_not_found": "Payment not found",
|
||||||
|
"If_your_friend_have_Additional_Cost__you_will_pay_for_that_too": "If your friend have Additional Cost, you will pay for that too",
|
||||||
|
"Cache_cleared_successfully_": "Cache cleared successfully!",
|
||||||
|
"Paid": "Paid",
|
||||||
|
"Send_Message": "Send Message",
|
||||||
|
"Send_Personal_Message": "Send Personal Message",
|
||||||
|
"Send_Via": "Send Via",
|
||||||
|
"Compose_your_message___": "Compose your message...",
|
||||||
|
"Use_placeholders_": "Use placeholders:",
|
||||||
|
"Customer_Name": "Customer Name",
|
||||||
|
"Customer_Username": "Customer Username",
|
||||||
|
"Customer_Phone": "Customer Phone",
|
||||||
|
"Your_Company_Name": "Your Company Name",
|
||||||
|
"Message_Sent_Successfully": "Message Sent Successfully",
|
||||||
|
"Send_Bulk_Message": "Send Bulk Message",
|
||||||
|
"Group": "Group",
|
||||||
|
"All_Customers": "All Customers",
|
||||||
|
"New_Customers": "New Customers",
|
||||||
|
"Expired_Customers": "Expired Customers",
|
||||||
|
"Active_Customers": "Active Customers",
|
||||||
|
"Map": "Map",
|
||||||
|
"Customer_Location": "Customer Location",
|
||||||
|
"Account_Type": "Account Type",
|
||||||
|
"Coordinates": "Coordinates",
|
||||||
|
"Latitude_and_Longitude_coordinates_for_map_must_be_separate_with_comma____": "Latitude and Longitude coordinates for map must be separate with comma ","",
|
||||||
|
"Customer_Geo_Location_Information": "Customer Geo Location Information",
|
||||||
|
"List": "List",
|
||||||
|
"Lists": "Lists",
|
||||||
|
"Single_Customer": "Single Customer",
|
||||||
|
"Bulk_Customers": "Bulk Customers",
|
||||||
|
"Message_per_time": "Message per time",
|
||||||
|
"5_Messages": "5 Messages",
|
||||||
|
"10_Messages": "10 Messages",
|
||||||
|
"15_Messages": "15 Messages",
|
||||||
|
"20_Messages": "20 Messages",
|
||||||
|
"30_Messages": "30 Messages",
|
||||||
|
"40_Messages": "40 Messages",
|
||||||
|
"50_Messages": "50 Messages",
|
||||||
|
"60_Messages": "60 Messages",
|
||||||
|
"Use_20_and_above_if_you_are_sending_to_all_customers_to_avoid_server_time_out": "Use 20 and above if you are sending to all customers to avoid server time out",
|
||||||
|
"Delay": "Delay",
|
||||||
|
"No_Delay": "No Delay",
|
||||||
|
"5_Seconds": "5 Seconds",
|
||||||
|
"10_Seconds": "10 Seconds",
|
||||||
|
"15_Seconds": "15 Seconds",
|
||||||
|
"20_Seconds": "20 Seconds",
|
||||||
|
"Use_at_least_5_secs_if_you_are_sending_to_all_customers_to_avoid_being_banned_by_your_message_provider": "Use at least 5 secs if you are sending to all customers to avoid being banned by your message provider",
|
||||||
|
"Testing__if_checked_no_real_message_is_sent_": "Testing [if checked no real message is sent]",
|
||||||
|
"All_fields_are_required": "All fields are required",
|
||||||
|
"Personal": "Personal",
|
||||||
|
"Email_Notification": "Email Notification",
|
||||||
|
"Router_Name___Location": "Router Name \/ Location",
|
||||||
|
"Plan_Category": "Plan Category",
|
||||||
|
"ID": "ID",
|
||||||
|
"Internet_Plan": "Internet Plan",
|
||||||
|
"Privacy_Policy": "Privacy Policy",
|
||||||
|
"Terms_and_Conditions": "Terms and Conditions",
|
||||||
|
"Contact": "Contact",
|
||||||
|
"will_be_replaced_with_Customer_Name": "will be replaced with Customer Name",
|
||||||
|
"will_be_replaced_with_Customer_username": "will be replaced with Customer username",
|
||||||
|
"will_be_replaced_with_Package_name": "will be replaced with Package name",
|
||||||
|
"will_be_replaced_with_Package_price": "will be replaced with Package price",
|
||||||
|
"additional_bills_for_customers": "additional bills for customers",
|
||||||
|
"will_be_replaced_with_Expiration_date": "will be replaced with Expiration date",
|
||||||
|
"Your_Company_Name_at_Settings": "Your Company Name at Settings",
|
||||||
|
"Your_Company_Address_at_Settings": "Your Company Address at Settings",
|
||||||
|
"Your_Company_Phone_at_Settings": "Your Company Phone at Settings",
|
||||||
|
"Invoice_number": "Invoice number",
|
||||||
|
"Date_invoice_created": "Date invoice created",
|
||||||
|
"Payment_gateway_user_paid_from": "Payment gateway user paid from",
|
||||||
|
"Payment_channel_user_paid_from": "Payment channel user paid from",
|
||||||
|
"is_Hotspot_or_PPPOE": "is Hotspot or PPPOE",
|
||||||
|
"Internet_Package": "Internet Package",
|
||||||
|
"Internet_Package_Prices": "Internet Package Prices",
|
||||||
|
"Receiver_name": "Receiver name",
|
||||||
|
"Username_internet": "Username internet",
|
||||||
|
"User_password": "User password",
|
||||||
|
"Expired_datetime": "Expired datetime",
|
||||||
|
"For_Notes_by_admin": "For Notes by admin",
|
||||||
|
"Transaction_datetime": "Transaction datetime",
|
||||||
|
"Balance_Before": "Balance Before",
|
||||||
|
"Balance_After": "Balance After",
|
||||||
|
"how_much_balance_have_been_send": "how much balance have been send",
|
||||||
|
"Current_Balance": "Current Balance",
|
||||||
|
"Sender_name": "Sender name",
|
||||||
|
"how_much_balance_have_been_received": "how much balance have been received",
|
||||||
|
"Extend_Postpaid_Expiration": "Extend Postpaid Expiration",
|
||||||
|
"Allow_Extend": "Allow Extend",
|
||||||
|
"Extend_Days": "Extend Days",
|
||||||
|
"Confirmation_Message": "Confirmation Message",
|
||||||
|
"You_are_already_logged_in": "You are already logged in",
|
||||||
|
"Extend": "Extend",
|
||||||
|
"Created___Expired": "Created \/ Expired",
|
||||||
|
"Bank_Transfer": "Bank Transfer",
|
||||||
|
"Recharge_Using": "Recharge Using",
|
||||||
|
"ago": "ago",
|
||||||
|
"Disabled": "Disabled",
|
||||||
|
"Banned": "Banned",
|
||||||
|
"Customer_cannot_login_again": "Customer cannot login again",
|
||||||
|
"Customer_can_login_but_cannot_buy_internet_plan__Admin_cannot_recharge_customer": "Customer can login but cannot buy internet plan, Admin cannot recharge customer",
|
||||||
|
"Don_t_forget_to_deactivate_all_active_plan_too": "Don't forget to deactivate all active plan too",
|
||||||
|
"Ascending": "Ascending",
|
||||||
|
"Descending": "Descending",
|
||||||
|
"Created_Date": "Created Date",
|
||||||
|
"Inactive": "Inactive",
|
||||||
|
"Suspended": "Suspended",
|
||||||
|
"Query": "Query",
|
||||||
|
"Notes": "Notes",
|
||||||
|
"This_account_status": "This account status",
|
||||||
|
"Maintenance_Mode": "Maintenance Mode",
|
||||||
|
"Maintenance_Mode_Settings": "Maintenance Mode Settings",
|
||||||
|
"Status_": "Status:",
|
||||||
|
"End_Date_": "End Date:",
|
||||||
|
"Save": "Save",
|
||||||
|
"Site_is_temporarily_unavailable_": "Site is temporarily unavailable.",
|
||||||
|
"Scheduled_maintenance_is_currently_in_progress__Please_check_back_soon_": "Scheduled maintenance is currently in progress. Please check back soon.",
|
||||||
|
"We_apologize_for_any_inconvenience_": "We apologize for any inconvenience.",
|
||||||
|
"The": "The",
|
||||||
|
"Team": "Team",
|
||||||
"Extend_Package_Expiry": "Extend Package Expiry",
|
"Extend_Package_Expiry": "Extend Package Expiry",
|
||||||
"Yes": "Yes",
|
|
||||||
"No": "No",
|
"No": "No",
|
||||||
|
"Yes": "Yes",
|
||||||
"If_user_buy_same_internet_plan__expiry_date_will_extend": "If user buy same internet plan, expiry date will extend",
|
"If_user_buy_same_internet_plan__expiry_date_will_extend": "If user buy same internet plan, expiry date will extend",
|
||||||
"Tax_System": "Tax System",
|
"Tax_System": "Tax System",
|
||||||
"Enable_Tax_System": "Enable Tax System",
|
"Enable_Tax_System": "Enable Tax System",
|
||||||
"Tax_will_be_calculated_in_Internet_Plan_Price": "Tax will be calculated in Internet Plan Price",
|
"Tax_will_be_calculated_in_Internet_Plan_Price": "Tax will be calculated in Internet Plan Price",
|
||||||
"Tax_Rate": "Tax Rate",
|
"Tax_Rate": "Tax Rate",
|
||||||
|
"0_5_": "0.5%",
|
||||||
|
"1_": "1%",
|
||||||
|
"1_5_": "1.5%",
|
||||||
|
"2_": "2%",
|
||||||
|
"5_": "5%",
|
||||||
|
"10_": "10%",
|
||||||
"Custom": "Custom",
|
"Custom": "Custom",
|
||||||
"Tax_Rates_in_percentage": "Tax Rates in percentage",
|
"Tax_Rates_in_percentage": "Tax Rates in percentage",
|
||||||
"Custom_Tax_Rate": "Custom Tax Rate",
|
"Custom_Tax_Rate": "Custom Tax Rate",
|
||||||
"Enter_Custom_Tax_Rate": "Enter Custom Tax Rate",
|
"Enter_Custom_Tax_Rate": "Enter Custom Tax Rate",
|
||||||
"Enter_the_custom_tax_rate__e_g___3_75_for_3_75__": "Enter the custom tax rate (e.g., 3.75 for 3.75%)",
|
"Enter_the_custom_tax_rate__e_g___3_75_for_3_75__": "Enter the custom tax rate (e.g., 3.75 for 3.75%)",
|
||||||
"Timezone": "Timezone",
|
"Additional_Information": "Additional Information",
|
||||||
"Date_Format": "Date Format",
|
"City_of_Resident": "City of Resident",
|
||||||
"Default_Language": "Default Language",
|
"District": "District",
|
||||||
"Language_Editor": "Language Editor",
|
"State": "State",
|
||||||
"Decimal_Point": "Decimal Point",
|
"State_of_Resident": "State of Resident",
|
||||||
"Thousands_Separator": "Thousands Separator",
|
"Zip": "Zip",
|
||||||
"Currency_Code": "Currency Code",
|
"Zip_Code": "Zip Code",
|
||||||
"Keep_it_blank_if_you_do_not_want_to_show_currency_code": "Keep it blank if you do not want to show currency code",
|
"Local_IP": "Local IP",
|
||||||
"Country_Code_Phone": "Country Code Phone",
|
"Device": "Device",
|
||||||
"Change_title_in_user_Plan_order": "Change title in user Plan order"
|
"Expired_Internet_Plan": "Expired Internet Plan",
|
||||||
|
"When_Expired__customer_will_be_move_to_selected_internet_plan": "When Expired, customer will be move to selected internet plan",
|
||||||
|
"Plugin_Installer": "Plugin Installer",
|
||||||
|
"Expired_Date": "Expired Date",
|
||||||
|
"Expired": "Expired",
|
||||||
|
"Time": "Time",
|
||||||
|
"Data": "Data",
|
||||||
|
"Category": "Category",
|
||||||
|
"later": "later",
|
||||||
|
"Package_Details": "Package Details",
|
||||||
|
"Summary": "Summary",
|
||||||
|
"Devices_Not_Found": "Devices Not Found",
|
||||||
|
"Income_reset_date": "Income reset date",
|
||||||
|
"Devices": "Devices",
|
||||||
|
"Documentation": "Documentation",
|
||||||
|
"Hotspot_Auth_Method": "Hotspot Auth Method",
|
||||||
|
"Api": "Api",
|
||||||
|
"Http_Chap": "Http-Chap",
|
||||||
|
"Hotspot_Authentication_Method__Make_sure_you_have_changed_your_hotspot_login_page_": "Hotspot Authentication Method. Make sure you have changed your hotspot login page."
|
||||||
}
|
}
|
@ -561,5 +561,11 @@
|
|||||||
"Please_wait_1015_seconds_before_sending_another_SMS": "Harap tunggu 1015 detik sebelum mengirim SMS lainnya",
|
"Please_wait_1015_seconds_before_sending_another_SMS": "Harap tunggu 1015 detik sebelum mengirim SMS lainnya",
|
||||||
"Phone_number_updated_successfully": "Nomor telepon berhasil diperbarui",
|
"Phone_number_updated_successfully": "Nomor telepon berhasil diperbarui",
|
||||||
"You_cannot_use_your_current_phone_number": "Anda tidak dapat menggunakan nomor telepon Anda saat ini",
|
"You_cannot_use_your_current_phone_number": "Anda tidak dapat menggunakan nomor telepon Anda saat ini",
|
||||||
"Devices": "Perangkat"
|
"Devices": "Perangkat",
|
||||||
|
"Voucher_Prefix": "Awalan Voucher",
|
||||||
|
"This_account_status": "Status akun ini",
|
||||||
|
"Hotspot_Auth_Method": "Metode Otentikasi Hotspot",
|
||||||
|
"Api": "Api",
|
||||||
|
"Http_Chap": "Http-Bab",
|
||||||
|
"Hotspot_Authentication_Method__Make_sure_you_have_changed_your_hotspot_login_page_": "Metode Otentikasi Hotspot. Pastikan Anda telah mengubah halaman login hotspot Anda."
|
||||||
}
|
}
|
@ -120,5 +120,10 @@
|
|||||||
"2024.6.21" : [
|
"2024.6.21" : [
|
||||||
"ALTER TABLE `tbl_plans` ADD `on_login` TEXT NULL DEFAULT NULL AFTER `device`;",
|
"ALTER TABLE `tbl_plans` ADD `on_login` TEXT NULL DEFAULT NULL AFTER `device`;",
|
||||||
"ALTER TABLE `tbl_plans` ADD `on_logout` TEXT NULL DEFAULT NULL AFTER `on_login`;"
|
"ALTER TABLE `tbl_plans` ADD `on_logout` TEXT NULL DEFAULT NULL AFTER `on_login`;"
|
||||||
|
],
|
||||||
|
"2024.7.6" : [
|
||||||
|
"CREATE TABLE IF NOT EXISTS `rad_acct` ( `id` bigint NOT NULL, `acctsessionid` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '', `username` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '', `realm` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '', `nasid` varchar(32) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '', `nasipaddress` varchar(15) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '', `nasportid` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, `nasporttype` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, `framedipaddress` varchar(15) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '',`acctstatustype` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, `macaddr` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, `dateAdded` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;",
|
||||||
|
"ALTER TABLE `rad_acct` ADD PRIMARY KEY (`id`), ADD KEY `username` (`username`), ADD KEY `framedipaddress` (`framedipaddress`), ADD KEY `acctsessionid` (`acctsessionid`), ADD KEY `nasipaddress` (`nasipaddress`);",
|
||||||
|
"ALTER TABLE `rad_acct` MODIFY `id` bigint NOT NULL AUTO_INCREMENT;"
|
||||||
]
|
]
|
||||||
}
|
}
|
@ -621,6 +621,22 @@
|
|||||||
<p class="help-block col-md-4">
|
<p class="help-block col-md-4">
|
||||||
{Lang::T('If user buy same internet plan, expiry date will extend')}</p>
|
{Lang::T('If user buy same internet plan, expiry date will extend')}</p>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-md-2 control-label">{Lang::T('Hotspot Auth Method')}</label>
|
||||||
|
<div class="col-md-6">
|
||||||
|
<select name="hs_auth_method" id="auth_method" class="form-control">
|
||||||
|
<option value="api" {if $_c['hs_auth_method']=='api' }selected="selected" {/if}>
|
||||||
|
{Lang::T('Api')}
|
||||||
|
</option>
|
||||||
|
<option value="hchap" {if $_c['hs_auth_method']=='hchap' }selected="selected" {/if}>
|
||||||
|
{Lang::T('Http-Chap')}
|
||||||
|
</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<p class="help-block col-md-4">
|
||||||
|
{Lang::T('Hotspot Authentication Method. Make sure you have changed your hotspot login page.')}<br><a href="https://github.com/agstrxyz/phpnuxbill-login-hotspot" target="_blank">Download phpnuxbill-login-hotspot</a>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="panel-heading">
|
<div class="panel-heading">
|
||||||
|
@ -248,20 +248,24 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-6">
|
{if !$d['is_radius']}
|
||||||
<div class="panel panel-primary panel-hovered panel-stacked mb30">
|
<div class="col-md-6">
|
||||||
<div class="panel-heading">on-login / on-up</div>
|
<div class="panel panel-primary panel-hovered panel-stacked mb30">
|
||||||
<div class="panel-body">
|
<div class="panel-heading">on-login / on-up</div>
|
||||||
<textarea class="form-control" id="code" name="on_login" style="font-family: 'Courier New', Courier, monospace;" rows="15">{$d['on_login']}</textarea>
|
<div class="panel-body">
|
||||||
|
<textarea class="form-control" id="code" name="on_login"
|
||||||
|
style="font-family: 'Courier New', Courier, monospace;" rows="15">{$d['on_login']}</textarea>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="panel panel-primary panel-hovered panel-stacked mb30">
|
||||||
|
<div class="panel-heading">on-logout / on-down</div>
|
||||||
|
<div class="panel-body">
|
||||||
|
<textarea class="form-control" id="code2" name="on_logout"
|
||||||
|
style="font-family: 'Courier New', Courier, monospace;" rows="15">{$d['on_logout']}</textarea>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="panel panel-primary panel-hovered panel-stacked mb30">
|
{/if}
|
||||||
<div class="panel-heading">on-logout / on-down</div>
|
|
||||||
<div class="panel-body">
|
|
||||||
<textarea class="form-control" id="code2" name="on_logout" style="font-family: 'Courier New', Courier, monospace;" rows="15">{$d['on_logout']}</textarea>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<div class="col-md-offset-2 col-md-9">
|
<div class="col-md-offset-2 col-md-9">
|
||||||
@ -306,11 +310,17 @@
|
|||||||
{/literal}
|
{/literal}
|
||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
<script language="javascript" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/6.65.7/codemirror.min.js"></script>
|
<script language="javascript" type="text/javascript"
|
||||||
<script language="javascript" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/6.65.7/mode/perl/perl.min.js"></script>
|
src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/6.65.7/codemirror.min.js"></script>
|
||||||
|
<script language="javascript" type="text/javascript"
|
||||||
|
src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/6.65.7/mode/perl/perl.min.js"></script>
|
||||||
|
|
||||||
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/codemirror/6.65.7/codemirror.min.css"></link>
|
<link rel="stylesheet" type="text/css"
|
||||||
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/codemirror/6.65.7/theme/abbott.min.css"></link>
|
href="https://cdnjs.cloudflare.com/ajax/libs/codemirror/6.65.7/codemirror.min.css">
|
||||||
|
</link>
|
||||||
|
<link rel="stylesheet" type="text/css"
|
||||||
|
href="https://cdnjs.cloudflare.com/ajax/libs/codemirror/6.65.7/theme/abbott.min.css">
|
||||||
|
</link>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
CodeMirror.fromTextArea(document.getElementById('code'), {
|
CodeMirror.fromTextArea(document.getElementById('code'), {
|
||||||
|
@ -184,22 +184,24 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-6">
|
{if !$d['is_radius']}
|
||||||
<div class="panel panel-primary panel-hovered panel-stacked mb30">
|
<div class="col-md-6">
|
||||||
<div class="panel-heading">on-login / on-up</div>
|
<div class="panel panel-primary panel-hovered panel-stacked mb30">
|
||||||
<div class="panel-body">
|
<div class="panel-heading">on-login / on-up</div>
|
||||||
<textarea class="form-control" id="code" name="on_login"
|
<div class="panel-body">
|
||||||
style="font-family: 'Courier New', Courier, monospace;" rows="15">{$d['on_login']}</textarea>
|
<textarea class="form-control" id="code" name="on_login"
|
||||||
|
style="font-family: 'Courier New', Courier, monospace;" rows="15">{$d['on_login']}</textarea>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="panel panel-primary panel-hovered panel-stacked mb30">
|
||||||
|
<div class="panel-heading">on-logout / on-down</div>
|
||||||
|
<div class="panel-body">
|
||||||
|
<textarea class="form-control" id="code2" name="on_logout"
|
||||||
|
style="font-family: 'Courier New', Courier, monospace;" rows="15">{$d['on_logout']}</textarea>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="panel panel-primary panel-hovered panel-stacked mb30">
|
{/if}
|
||||||
<div class="panel-heading">on-logout / on-down</div>
|
|
||||||
<div class="panel-body">
|
|
||||||
<textarea class="form-control" id="code2" name="on_logout"
|
|
||||||
style="font-family: 'Courier New', Courier, monospace;" rows="15">{$d['on_logout']}</textarea>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<div class="col-lg-offset-2 col-lg-10">
|
<div class="col-lg-offset-2 col-lg-10">
|
||||||
|
@ -65,6 +65,10 @@
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
{include file="pagination.tpl"}
|
{include file="pagination.tpl"}
|
||||||
|
<div class="bs-callout bs-callout-info" id="callout-navbar-role">
|
||||||
|
<h4>RADIUS REST</h4>
|
||||||
|
<p>For Radius REST, you don't need to add NAS, NAS need to add to client.conf manually</p>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
217
ui/ui/scripts/md5.js
Normal file
217
ui/ui/scripts/md5.js
Normal file
@ -0,0 +1,217 @@
|
|||||||
|
/*
|
||||||
|
* A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
|
||||||
|
* Digest Algorithm, as defined in RFC 1321.
|
||||||
|
* Version 1.1 Copyright (C) Paul Johnston 1999 - 2002.
|
||||||
|
* Code also contributed by Greg Holt
|
||||||
|
* See http://pajhome.org.uk/site/legal.html for details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Add integers, wrapping at 2^32. This uses 16-bit operations internally
|
||||||
|
* to work around bugs in some JS interpreters.
|
||||||
|
*/
|
||||||
|
function safe_add(x, y)
|
||||||
|
{
|
||||||
|
var lsw = (x & 0xFFFF) + (y & 0xFFFF)
|
||||||
|
var msw = (x >> 16) + (y >> 16) + (lsw >> 16)
|
||||||
|
return (msw << 16) | (lsw & 0xFFFF)
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Bitwise rotate a 32-bit number to the left.
|
||||||
|
*/
|
||||||
|
function rol(num, cnt)
|
||||||
|
{
|
||||||
|
return (num << cnt) | (num >>> (32 - cnt))
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* These functions implement the four basic operations the algorithm uses.
|
||||||
|
*/
|
||||||
|
function cmn(q, a, b, x, s, t)
|
||||||
|
{
|
||||||
|
return safe_add(rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b)
|
||||||
|
}
|
||||||
|
function ff(a, b, c, d, x, s, t)
|
||||||
|
{
|
||||||
|
return cmn((b & c) | ((~b) & d), a, b, x, s, t)
|
||||||
|
}
|
||||||
|
function gg(a, b, c, d, x, s, t)
|
||||||
|
{
|
||||||
|
return cmn((b & d) | (c & (~d)), a, b, x, s, t)
|
||||||
|
}
|
||||||
|
function hh(a, b, c, d, x, s, t)
|
||||||
|
{
|
||||||
|
return cmn(b ^ c ^ d, a, b, x, s, t)
|
||||||
|
}
|
||||||
|
function ii(a, b, c, d, x, s, t)
|
||||||
|
{
|
||||||
|
return cmn(c ^ (b | (~d)), a, b, x, s, t)
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Calculate the MD5 of an array of little-endian words, producing an array
|
||||||
|
* of little-endian words.
|
||||||
|
*/
|
||||||
|
function coreMD5(x)
|
||||||
|
{
|
||||||
|
var a = 1732584193
|
||||||
|
var b = -271733879
|
||||||
|
var c = -1732584194
|
||||||
|
var d = 271733878
|
||||||
|
|
||||||
|
for(i = 0; i < x.length; i += 16)
|
||||||
|
{
|
||||||
|
var olda = a
|
||||||
|
var oldb = b
|
||||||
|
var oldc = c
|
||||||
|
var oldd = d
|
||||||
|
|
||||||
|
a = ff(a, b, c, d, x[i+ 0], 7 , -680876936)
|
||||||
|
d = ff(d, a, b, c, x[i+ 1], 12, -389564586)
|
||||||
|
c = ff(c, d, a, b, x[i+ 2], 17, 606105819)
|
||||||
|
b = ff(b, c, d, a, x[i+ 3], 22, -1044525330)
|
||||||
|
a = ff(a, b, c, d, x[i+ 4], 7 , -176418897)
|
||||||
|
d = ff(d, a, b, c, x[i+ 5], 12, 1200080426)
|
||||||
|
c = ff(c, d, a, b, x[i+ 6], 17, -1473231341)
|
||||||
|
b = ff(b, c, d, a, x[i+ 7], 22, -45705983)
|
||||||
|
a = ff(a, b, c, d, x[i+ 8], 7 , 1770035416)
|
||||||
|
d = ff(d, a, b, c, x[i+ 9], 12, -1958414417)
|
||||||
|
c = ff(c, d, a, b, x[i+10], 17, -42063)
|
||||||
|
b = ff(b, c, d, a, x[i+11], 22, -1990404162)
|
||||||
|
a = ff(a, b, c, d, x[i+12], 7 , 1804603682)
|
||||||
|
d = ff(d, a, b, c, x[i+13], 12, -40341101)
|
||||||
|
c = ff(c, d, a, b, x[i+14], 17, -1502002290)
|
||||||
|
b = ff(b, c, d, a, x[i+15], 22, 1236535329)
|
||||||
|
|
||||||
|
a = gg(a, b, c, d, x[i+ 1], 5 , -165796510)
|
||||||
|
d = gg(d, a, b, c, x[i+ 6], 9 , -1069501632)
|
||||||
|
c = gg(c, d, a, b, x[i+11], 14, 643717713)
|
||||||
|
b = gg(b, c, d, a, x[i+ 0], 20, -373897302)
|
||||||
|
a = gg(a, b, c, d, x[i+ 5], 5 , -701558691)
|
||||||
|
d = gg(d, a, b, c, x[i+10], 9 , 38016083)
|
||||||
|
c = gg(c, d, a, b, x[i+15], 14, -660478335)
|
||||||
|
b = gg(b, c, d, a, x[i+ 4], 20, -405537848)
|
||||||
|
a = gg(a, b, c, d, x[i+ 9], 5 , 568446438)
|
||||||
|
d = gg(d, a, b, c, x[i+14], 9 , -1019803690)
|
||||||
|
c = gg(c, d, a, b, x[i+ 3], 14, -187363961)
|
||||||
|
b = gg(b, c, d, a, x[i+ 8], 20, 1163531501)
|
||||||
|
a = gg(a, b, c, d, x[i+13], 5 , -1444681467)
|
||||||
|
d = gg(d, a, b, c, x[i+ 2], 9 , -51403784)
|
||||||
|
c = gg(c, d, a, b, x[i+ 7], 14, 1735328473)
|
||||||
|
b = gg(b, c, d, a, x[i+12], 20, -1926607734)
|
||||||
|
|
||||||
|
a = hh(a, b, c, d, x[i+ 5], 4 , -378558)
|
||||||
|
d = hh(d, a, b, c, x[i+ 8], 11, -2022574463)
|
||||||
|
c = hh(c, d, a, b, x[i+11], 16, 1839030562)
|
||||||
|
b = hh(b, c, d, a, x[i+14], 23, -35309556)
|
||||||
|
a = hh(a, b, c, d, x[i+ 1], 4 , -1530992060)
|
||||||
|
d = hh(d, a, b, c, x[i+ 4], 11, 1272893353)
|
||||||
|
c = hh(c, d, a, b, x[i+ 7], 16, -155497632)
|
||||||
|
b = hh(b, c, d, a, x[i+10], 23, -1094730640)
|
||||||
|
a = hh(a, b, c, d, x[i+13], 4 , 681279174)
|
||||||
|
d = hh(d, a, b, c, x[i+ 0], 11, -358537222)
|
||||||
|
c = hh(c, d, a, b, x[i+ 3], 16, -722521979)
|
||||||
|
b = hh(b, c, d, a, x[i+ 6], 23, 76029189)
|
||||||
|
a = hh(a, b, c, d, x[i+ 9], 4 , -640364487)
|
||||||
|
d = hh(d, a, b, c, x[i+12], 11, -421815835)
|
||||||
|
c = hh(c, d, a, b, x[i+15], 16, 530742520)
|
||||||
|
b = hh(b, c, d, a, x[i+ 2], 23, -995338651)
|
||||||
|
|
||||||
|
a = ii(a, b, c, d, x[i+ 0], 6 , -198630844)
|
||||||
|
d = ii(d, a, b, c, x[i+ 7], 10, 1126891415)
|
||||||
|
c = ii(c, d, a, b, x[i+14], 15, -1416354905)
|
||||||
|
b = ii(b, c, d, a, x[i+ 5], 21, -57434055)
|
||||||
|
a = ii(a, b, c, d, x[i+12], 6 , 1700485571)
|
||||||
|
d = ii(d, a, b, c, x[i+ 3], 10, -1894986606)
|
||||||
|
c = ii(c, d, a, b, x[i+10], 15, -1051523)
|
||||||
|
b = ii(b, c, d, a, x[i+ 1], 21, -2054922799)
|
||||||
|
a = ii(a, b, c, d, x[i+ 8], 6 , 1873313359)
|
||||||
|
d = ii(d, a, b, c, x[i+15], 10, -30611744)
|
||||||
|
c = ii(c, d, a, b, x[i+ 6], 15, -1560198380)
|
||||||
|
b = ii(b, c, d, a, x[i+13], 21, 1309151649)
|
||||||
|
a = ii(a, b, c, d, x[i+ 4], 6 , -145523070)
|
||||||
|
d = ii(d, a, b, c, x[i+11], 10, -1120210379)
|
||||||
|
c = ii(c, d, a, b, x[i+ 2], 15, 718787259)
|
||||||
|
b = ii(b, c, d, a, x[i+ 9], 21, -343485551)
|
||||||
|
|
||||||
|
a = safe_add(a, olda)
|
||||||
|
b = safe_add(b, oldb)
|
||||||
|
c = safe_add(c, oldc)
|
||||||
|
d = safe_add(d, oldd)
|
||||||
|
}
|
||||||
|
return [a, b, c, d]
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Convert an array of little-endian words to a hex string.
|
||||||
|
*/
|
||||||
|
function binl2hex(binarray)
|
||||||
|
{
|
||||||
|
var hex_tab = "0123456789abcdef"
|
||||||
|
var str = ""
|
||||||
|
for(var i = 0; i < binarray.length * 4; i++)
|
||||||
|
{
|
||||||
|
str += hex_tab.charAt((binarray[i>>2] >> ((i%4)*8+4)) & 0xF) +
|
||||||
|
hex_tab.charAt((binarray[i>>2] >> ((i%4)*8)) & 0xF)
|
||||||
|
}
|
||||||
|
return str
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Convert an array of little-endian words to a base64 encoded string.
|
||||||
|
*/
|
||||||
|
function binl2b64(binarray)
|
||||||
|
{
|
||||||
|
var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
|
||||||
|
var str = ""
|
||||||
|
for(var i = 0; i < binarray.length * 32; i += 6)
|
||||||
|
{
|
||||||
|
str += tab.charAt(((binarray[i>>5] << (i%32)) & 0x3F) |
|
||||||
|
((binarray[i>>5+1] >> (32-i%32)) & 0x3F))
|
||||||
|
}
|
||||||
|
return str
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Convert an 8-bit character string to a sequence of 16-word blocks, stored
|
||||||
|
* as an array, and append appropriate padding for MD4/5 calculation.
|
||||||
|
* If any of the characters are >255, the high byte is silently ignored.
|
||||||
|
*/
|
||||||
|
function str2binl(str)
|
||||||
|
{
|
||||||
|
var nblk = ((str.length + 8) >> 6) + 1 // number of 16-word blocks
|
||||||
|
var blks = new Array(nblk * 16)
|
||||||
|
for(var i = 0; i < nblk * 16; i++) blks[i] = 0
|
||||||
|
for(var i = 0; i < str.length; i++)
|
||||||
|
blks[i>>2] |= (str.charCodeAt(i) & 0xFF) << ((i%4) * 8)
|
||||||
|
blks[i>>2] |= 0x80 << ((i%4) * 8)
|
||||||
|
blks[nblk*16-2] = str.length * 8
|
||||||
|
return blks
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Convert a wide-character string to a sequence of 16-word blocks, stored as
|
||||||
|
* an array, and append appropriate padding for MD4/5 calculation.
|
||||||
|
*/
|
||||||
|
function strw2binl(str)
|
||||||
|
{
|
||||||
|
var nblk = ((str.length + 4) >> 5) + 1 // number of 16-word blocks
|
||||||
|
var blks = new Array(nblk * 16)
|
||||||
|
for(var i = 0; i < nblk * 16; i++) blks[i] = 0
|
||||||
|
for(var i = 0; i < str.length; i++)
|
||||||
|
blks[i>>1] |= str.charCodeAt(i) << ((i%2) * 16)
|
||||||
|
blks[i>>1] |= 0x80 << ((i%2) * 16)
|
||||||
|
blks[nblk*16-2] = str.length * 16
|
||||||
|
return blks
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* External interface
|
||||||
|
*/
|
||||||
|
function hexMD5 (str) { return binl2hex(coreMD5( str2binl(str))) }
|
||||||
|
function hexMD5w(str) { return binl2hex(coreMD5(strw2binl(str))) }
|
||||||
|
function b64MD5 (str) { return binl2b64(coreMD5( str2binl(str))) }
|
||||||
|
function b64MD5w(str) { return binl2b64(coreMD5(strw2binl(str))) }
|
||||||
|
/* Backward compatibility */
|
||||||
|
function calcMD5(str) { return binl2hex(coreMD5( str2binl(str))) }
|
@ -154,32 +154,40 @@
|
|||||||
margin-bottom: 5px
|
margin-bottom: 5px
|
||||||
}
|
}
|
||||||
|
|
||||||
.bs-callout p:last-child{
|
.bs-callout p:last-child {
|
||||||
margin-bottom:0
|
margin-bottom: 0
|
||||||
}
|
}
|
||||||
.bs-callout code{
|
|
||||||
border-radius:3px
|
.bs-callout code {
|
||||||
|
border-radius: 3px
|
||||||
}
|
}
|
||||||
.bs-callout+.bs-callout{
|
|
||||||
margin-top:-5px
|
.bs-callout+.bs-callout {
|
||||||
|
margin-top: -5px
|
||||||
}
|
}
|
||||||
.bs-callout-danger{
|
|
||||||
border-left-color:#ce4844
|
.bs-callout-danger {
|
||||||
|
border-left-color: #ce4844
|
||||||
}
|
}
|
||||||
.bs-callout-danger h4{
|
|
||||||
color:#ce4844
|
.bs-callout-danger h4 {
|
||||||
|
color: #ce4844
|
||||||
}
|
}
|
||||||
.bs-callout-warning{
|
|
||||||
border-left-color:#aa6708
|
.bs-callout-warning {
|
||||||
|
border-left-color: #aa6708
|
||||||
}
|
}
|
||||||
.bs-callout-warning h4{
|
|
||||||
color:#aa6708
|
.bs-callout-warning h4 {
|
||||||
|
color: #aa6708
|
||||||
}
|
}
|
||||||
.bs-callout-info{
|
|
||||||
border-left-color:#1b809e
|
.bs-callout-info {
|
||||||
|
border-left-color: #1b809e
|
||||||
}
|
}
|
||||||
.bs-callout-info h4{
|
|
||||||
color:#1b809e
|
.bs-callout-info h4 {
|
||||||
|
color: #1b809e
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
{if isset($xheader)}
|
{if isset($xheader)}
|
||||||
@ -434,7 +442,7 @@
|
|||||||
<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
|
||||||
@ -478,12 +486,23 @@
|
|||||||
</li>
|
</li>
|
||||||
{/if}
|
{/if}
|
||||||
{$_MENU_AFTER_LOGS}
|
{$_MENU_AFTER_LOGS}
|
||||||
<li {if $_system_menu eq 'community' }class="active" {/if}>
|
{if in_array($_admin['user_type'],['SuperAdmin','Admin'])}
|
||||||
<a href="{$_url}community">
|
<li {if $_system_menu eq 'community' }class="active" {/if}>
|
||||||
<i class="ion ion-chatboxes"></i>
|
<a href="{if $_c['docs_clicked'] != 'yes'}{$_url}settings/docs{else}./docs/{/if}">
|
||||||
<span class="text">{Lang::T('Community')}</span>
|
<i class="ion ion-ios-bookmarks"></i>
|
||||||
</a>
|
<span class="text">{Lang::T('Documentation')}</span>
|
||||||
</li>
|
{if $_c['docs_clicked'] != 'yes'}
|
||||||
|
<span class="pull-right-container"><small class="label pull-right bg-green">New</small></span>
|
||||||
|
{/if}
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li {if $_system_menu eq 'community' }class="active" {/if}>
|
||||||
|
<a href="{$_url}community">
|
||||||
|
<i class="ion ion-chatboxes"></i>
|
||||||
|
<span class="text">{Lang::T('Community')}</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
{/if}
|
||||||
{$_MENU_AFTER_COMMUNITY}
|
{$_MENU_AFTER_COMMUNITY}
|
||||||
</ul>
|
</ul>
|
||||||
</section>
|
</section>
|
||||||
|
@ -167,7 +167,7 @@
|
|||||||
<td class="small mb15">{$nux_mac}</td>
|
<td class="small mb15">{$nux_mac}</td>
|
||||||
</tr>
|
</tr>
|
||||||
{/if}
|
{/if}
|
||||||
{if $_bill['type'] == 'Hotspot' && $_bill['status'] == 'on' && $_bill['routers'] != 'radius'}
|
{if $_bill['type'] == 'Hotspot' && $_bill['status'] == 'on' && $_bill['routers'] != 'radius' && $_c['hs_auth_method'] != 'hchap'}
|
||||||
<tr>
|
<tr>
|
||||||
<td class="small text-primary text-uppercase text-normal">{Lang::T('Login Status')}</td>
|
<td class="small text-primary text-uppercase text-normal">{Lang::T('Login Status')}</td>
|
||||||
<td class="small mb15" id="login_status_{$_bill['id']}">
|
<td class="small mb15" id="login_status_{$_bill['id']}">
|
||||||
@ -175,6 +175,19 @@
|
|||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{/if}
|
{/if}
|
||||||
|
{if $_bill['type'] == 'Hotspot' && $_bill['status'] == 'on' && $_c['hs_auth_method'] == 'hchap'}
|
||||||
|
<tr>
|
||||||
|
<td class="small text-primary text-uppercase text-normal">{Lang::T('Login Status')}</td>
|
||||||
|
<td class="small mb15">
|
||||||
|
{if $logged == '1'}
|
||||||
|
<a href="http://{$hostname}/status" class="btn btn-success btn-xs btn-block">{Lang::T('You are Online, Check Status')}</a>
|
||||||
|
{else}
|
||||||
|
<a href="{$_url}home&mikrotik=login"
|
||||||
|
onclick="return confirm('{Lang::T('Connect to Internet')}')" class="btn btn-danger btn-xs btn-block">{Lang::T('Not Online, Login now?')}</a>
|
||||||
|
{/if}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{/if}
|
||||||
<tr>
|
<tr>
|
||||||
<td class="small text-primary text-uppercase text-normal">
|
<td class="small text-primary text-uppercase text-normal">
|
||||||
{if $_bill['status'] == 'on'}
|
{if $_bill['status'] == 'on'}
|
||||||
@ -210,7 +223,7 @@
|
|||||||
{/if}
|
{/if}
|
||||||
{if $_bills}
|
{if $_bills}
|
||||||
{foreach $_bills as $_bill}
|
{foreach $_bills as $_bill}
|
||||||
{if $_bill['type'] == 'Hotspot' && $_bill['status'] == 'on'}
|
{if $_bill['type'] == 'Hotspot' && $_bill['status'] == 'on' && $_c['hs_auth_method'] != 'hchap'}
|
||||||
<script>
|
<script>
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
$.ajax({
|
$.ajax({
|
||||||
@ -320,4 +333,17 @@
|
|||||||
{/if}
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
{if isset($hostname) && $hchap == 'true' && $_c['hs_auth_method'] == 'hchap'}
|
||||||
|
<script type="text/javascript" src="/ui/ui/scripts/md5.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
var hostname = "http://{$hostname}/login";
|
||||||
|
var user = "{$_user['username']}";
|
||||||
|
var pass = "{$_user['password']}";
|
||||||
|
var dst = "{$apkurl}";
|
||||||
|
var authdly = "2";
|
||||||
|
var key = hexMD5('{$key1}' + pass + '{$key2}');
|
||||||
|
var auth = hostname + '?username=' + user + '&dst=' + dst + '&password=' + key;
|
||||||
|
document.write('<meta http-equiv="refresh" target="_blank" content="'+authdly+'; url='+auth+'">');
|
||||||
|
</script>
|
||||||
|
{/if}
|
||||||
{include file="sections/user-footer.tpl"}
|
{include file="sections/user-footer.tpl"}
|
@ -1,3 +1,3 @@
|
|||||||
{
|
{
|
||||||
"version": "2024.6.25"
|
"version": "2024.7.15"
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user