Merge branch 'hotspotbilling:Development' into Development

This commit is contained in:
Ahmad Husein 2024-08-15 16:48:38 +07:00 committed by GitHub
commit a4303a4804
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
11 changed files with 101 additions and 22 deletions

View File

@ -131,17 +131,26 @@ if ((!empty($radius_user) && $config['radius_enable']) || _post('radius_enable')
} }
if (empty($config['language'])) { // Check if the user has selected a language
$config['language'] = 'english'; if (!empty($_SESSION['user_language'])) {
$config['language'] = $_SESSION['user_language'];
} }
$lan_file = $root_path . File::pathFixer('system/lan/' . $config['language'] . '.json');
if (file_exists($lan_file)) { if (empty($_SESSION['Lang'])) {
$_L = json_decode(file_get_contents($lan_file), true); if (empty($config['language'])) {
$_SESSION['Lang'] = $_L; $config['language'] = 'english';
}
$lan_file = $root_path . File::pathFixer('system/lan/' . $config['language'] . '.json');
if (file_exists($lan_file)) {
$_L = json_decode(file_get_contents($lan_file), true);
$_SESSION['Lang'] = $_L;
} else {
$_L['author'] = 'Auto Generated by iBNuX Script';
$_SESSION['Lang'] = $_L;
file_put_contents($lan_file, json_encode($_L));
}
} else { } else {
$_L['author'] = 'Auto Generated by iBNuX Script'; $_L = $_SESSION['Lang'];
$_SESSION['Lang'] = $_L;
file_put_contents($lan_file, json_encode($_L));
} }

View File

@ -10,7 +10,12 @@ class Lang
{ {
public static function T($key) public static function T($key)
{ {
global $_L, $lan_file, $config; global $_L, $lan_file, $root_path, $config;
if (empty($lan_file)) {
$lan_file = $root_path . File::pathFixer('system/lan/' . $config['language'] . '.json');
}
if (is_array($_SESSION['Lang'])) { if (is_array($_SESSION['Lang'])) {
$_L = array_merge($_L, $_SESSION['Lang']); $_L = array_merge($_L, $_SESSION['Lang']);
} }

View File

@ -325,6 +325,6 @@ class Validator
public static function containsKeyword($string, $keywords = ['mikrotik', 'hotspot', 'pppoe', 'radius', 'dummy']) public static function containsKeyword($string, $keywords = ['mikrotik', 'hotspot', 'pppoe', 'radius', 'dummy'])
{ {
$regex = '/' . implode('|', $keywords) . '/i'; $regex = '/' . implode('|', $keywords) . '/i';
return preg_match($regex, $string); return preg_match($regex, strtolower($string));
} }
} }

View File

@ -46,6 +46,7 @@ $ui->assign('_domain', str_replace('www.', '', parse_url(APP_URL, PHP_URL_HOST))
$ui->assign('_url', APP_URL . '/?_route='); $ui->assign('_url', APP_URL . '/?_route=');
$ui->assign('_path', __DIR__); $ui->assign('_path', __DIR__);
$ui->assign('_c', $config); $ui->assign('_c', $config);
$ui->assign('user_language', $_SESSION['user_language']);
$ui->assign('UPLOAD_PATH', str_replace($root_path, '', $UPLOAD_PATH)); $ui->assign('UPLOAD_PATH', str_replace($root_path, '', $UPLOAD_PATH));
$ui->assign('CACHE_PATH', str_replace($root_path, '', $CACHE_PATH)); $ui->assign('CACHE_PATH', str_replace($root_path, '', $CACHE_PATH));
$ui->assign('PAGES_PATH', str_replace($root_path, '', $PAGES_PATH)); $ui->assign('PAGES_PATH', str_replace($root_path, '', $PAGES_PATH));

View File

@ -37,7 +37,7 @@ switch ($action) {
} }
$user->password = $npass; $user->password = $npass;
$turs = ORM::for_table('tbl_user_recharges')->where('customer_id', $user['id'])->find_many(); $turs = ORM::for_table('tbl_user_recharges')->where('customer_id', $user['id'])->find_many();
foreach($turs as $tur) { foreach ($turs as $tur) {
// if has active plan, change the password to devices // if has active plan, change the password to devices
if ($tur['status'] == 'on') { if ($tur['status'] == 'on') {
$p = ORM::for_table('tbl_plans')->where('id', $tur['plan_id'])->find_one(); $p = ORM::for_table('tbl_plans')->where('id', $tur['plan_id'])->find_one();
@ -239,6 +239,28 @@ switch ($action) {
r2(U . 'accounts/profile', 's', Lang::T('Phone number updated successfully')); r2(U . 'accounts/profile', 's', Lang::T('Phone number updated successfully'));
break; break;
case 'language-update-post':
global $root_path;
$selected_language = _req('lang', 'english');
$_SESSION['user_language'] = $selected_language;
$lan_file = $root_path . File::pathFixer('system/lan/' . $selected_language . '.json');
if (file_exists($lan_file)) {
$_L = json_decode(file_get_contents($lan_file), true);
$_SESSION['Lang'] = $_L;
} else {
$_L['author'] = 'Auto Generated by iBNuX Script';
$_SESSION['Lang'] = $_L;
file_put_contents($lan_file, json_encode($_L));
}
r2($_SERVER['HTTP_REFERER'], 's', ucwords($selected_language));
break;
default: default:
$ui->display('a404.tpl'); $ui->display('a404.tpl');
} }

View File

@ -21,7 +21,7 @@ switch ($action) {
$p = ORM::for_table('tbl_plans')->find_one($bill['plan_id']); $p = ORM::for_table('tbl_plans')->find_one($bill['plan_id']);
$dvc = Package::getDevice($p); $dvc = Package::getDevice($p);
if ($_app_stage != 'demo') { if ($_app_stage != 'demo') {
try{ try {
if (file_exists($dvc)) { if (file_exists($dvc)) {
require_once $dvc; require_once $dvc;
if ((new $p['device'])->online_customer($user, $bill['routers'])) { if ((new $p['device'])->online_customer($user, $bill['routers'])) {
@ -36,7 +36,7 @@ switch ($action) {
} else { } else {
die(Lang::T('-')); die(Lang::T('-'));
} }
}catch (Exception $e) { } catch (Exception $e) {
die(Lang::T('Failed to connect to device')); die(Lang::T('Failed to connect to device'));
} }
} }
@ -47,14 +47,31 @@ switch ($action) {
break; break;
case 'inbox_unread': case 'inbox_unread':
$count = ORM::for_table('tbl_customers_inbox')->where('customer_id', $user['id'])->whereRaw('date_read is null')->count('id'); $count = ORM::for_table('tbl_customers_inbox')->where('customer_id', $user['id'])->whereRaw('date_read is null')->count('id');
if($count>0){ if ($count > 0) {
echo $count; echo $count;
} }
die(); die();
case 'inbox': case 'inbox':
$inboxs = ORM::for_table('tbl_customers_inbox')->selects(['id', 'subject', 'date_created'])->where('customer_id', $user['id'])->whereRaw('date_read is null')->order_by_desc('date_created')->limit(10)->find_many(); $inboxs = ORM::for_table('tbl_customers_inbox')->selects(['id', 'subject', 'date_created'])->where('customer_id', $user['id'])->whereRaw('date_read is null')->order_by_desc('date_created')->limit(10)->find_many();
foreach($inboxs as $inbox){ foreach ($inboxs as $inbox) {
echo '<li><a href="'.U.'mail/view/'.$inbox['id'].'">'.$inbox['subject'].'<br><sub class="text-muted">'.Lang::dateTimeFormat($inbox['date_created']).'</sub></a></li>'; echo '<li><a href="' . U . 'mail/view/' . $inbox['id'] . '">' . $inbox['subject'] . '<br><sub class="text-muted">' . Lang::dateTimeFormat($inbox['date_created']) . '</sub></a></li>';
}
die();
case 'language':
$select = _get('select');
$folders = [];
$files = scandir('system/lan/');
foreach ($files as $file) {
if (is_file('system/lan/' . $file) && !in_array($file, ['index.html', 'country.json', '.DS_Store'])) {
$file = str_replace(".json", "", $file);
if(!empty($file)){
echo '<li><a href="' . U . 'accounts/language-update-post&lang=' . $file. '">';
if($select == $file){
echo '<span class="glyphicon glyphicon-ok"></span> ';
}
echo ucwords($file) . '</a></li>';
}
}
} }
die(); die();
default: default:

View File

@ -722,5 +722,7 @@
"in_here_too_": "in here too.", "in_here_too_": "in here too.",
"Empty_this_to_use_internal_mail___PHP": "Empty this to use internal mail() PHP", "Empty_this_to_use_internal_mail___PHP": "Empty this to use internal mail() PHP",
"Mail_Reply_To": "Mail Reply To", "Mail_Reply_To": "Mail Reply To",
"Customer_will_reply_email_to_this_address__empty_if_you_want_to_use_From_Address": "Customer will reply email to this address, empty if you want to use From Address" "Customer_will_reply_email_to_this_address__empty_if_you_want_to_use_From_Address": "Customer will reply email to this address, empty if you want to use From Address",
"You_will_get_Payment_and_Error_notification": "You will get Payment and Error notification",
"Languge_set_to_english": "Bahasa diatur ke bahasa Inggris"
} }

View File

@ -567,5 +567,6 @@
"Hotspot_Auth_Method": "Metode Otentikasi Hotspot", "Hotspot_Auth_Method": "Metode Otentikasi Hotspot",
"Api": "Api", "Api": "Api",
"Http_Chap": "Http-Bab", "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." "Hotspot_Authentication_Method__Make_sure_you_have_changed_your_hotspot_login_page_": "Metode Otentikasi Hotspot. Pastikan Anda telah mengubah halaman login hotspot Anda.",
"Languge_set_to_indonesia": "Language set to indonesia"
} }

View File

@ -373,5 +373,6 @@
"Hotspot": "Hotspot", "Hotspot": "Hotspot",
"Monthly_Registered_Customers": "Monthly Registered Customers", "Monthly_Registered_Customers": "Monthly Registered Customers",
"Total_Monthly_Sales": "Total Monthly Sales", "Total_Monthly_Sales": "Total Monthly Sales",
"Active_Users": "Active Users" "Active_Users": "Active Users",
"Languge_set_to_spanish": "Bahasa disetel ke bahasa Spanyol"
} }

View File

@ -895,4 +895,4 @@ add dst-host=*.{$_domain}</pre>
document.getElementById("tax_rate").addEventListener("change", toggleCustomTaxRate); document.getElementById("tax_rate").addEventListener("change", toggleCustomTaxRate);
}); });
</script> </script>
{include file="sections/footer.tpl"} {include file="sections/footer.tpl"}

View File

@ -66,6 +66,15 @@
transform: rotate(360deg); transform: rotate(360deg);
} }
} }
.dropdown-menu .dropdown-item {
margin-bottom: 5px;
}
.dropdown-menu .dropdown-item button {
margin: 0;
padding: 10px;
}
</style> </style>
{if isset($xheader)} {if isset($xheader)}
@ -87,10 +96,22 @@
</a> </a>
<div class="navbar-custom-menu"> <div class="navbar-custom-menu">
<ul class="nav navbar-nav"> <ul class="nav navbar-nav">
<li class="dropdown tasks-menu">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" aria-expanded="true">
<i class="fa fa-flag-o"></i> <span class="d-none d-sm-inline">{ucwords($user_language)}</span>
</a>
<ul class="dropdown-menu">
<li>
<!-- inner menu: contains the actual data -->
<ul class="menu" api-get-text="{$_url}autoload_user/language&select={$user_language}"></ul>
</li>
</ul>
</li>
<li class="dropdown notifications-menu"> <li class="dropdown notifications-menu">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" aria-expanded="false"> <a href="#" class="dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
<i class="fa fa-envelope-o"></i> <i class="fa fa-envelope-o"></i>
<span class="label label-warning" api-get-text="{$_url}autoload_user/inbox_unread"></span> <span class="label label-warning"
api-get-text="{$_url}autoload_user/inbox_unread"></span>
</a> </a>
<ul class="dropdown-menu"> <ul class="dropdown-menu">
<li> <li>