diff --git a/CHANGELOG.md b/CHANGELOG.md index 1be54699..ca4727e6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,17 @@ # CHANGELOG +## 2024.1.16 + +- Add yellow color to table for plan not allowed to purchase +- Fix Radius pool select +- add price to reminder notification +- Support thermal printer for invoice + +## 2024.1.15 + +- Fix cron job for Plan only for admin by @Focuslinkstech + ## 2024.1.11 - Add Plan only for admin by @Focuslinkstech diff --git a/system/autoload/Lang.php b/system/autoload/Lang.php index 6736c700..eafcc870 100644 --- a/system/autoload/Lang.php +++ b/system/autoload/Lang.php @@ -99,4 +99,38 @@ class Lang } return $result; } + + /** + * $pad_type + * 0 Left + * 1 right + * 2 center + * */ + public static function pad($text, $pad_string = ' ', $pad_type = 0){ + global $config; + $cols = 37; + if($config['printer_cols']){ + $cols = $config['printer_cols']; + } + $text = trim($text); + $texts = explode("\n", $text); + if(count($texts)>1){ + $text = ''; + foreach($texts as $t){ + $text.= self::pad(trim($t), $pad_string, $pad_type)."\n"; + } + return $text; + }else{ + return str_pad(trim($text), $cols, $pad_string, $pad_type); + } + } + + public static function pads($textLeft, $textRight, $pad_string = ' '){ + global $config; + $cols = 37; + if($config['printer_cols']){ + $cols = $config['printer_cols']; + } + return $textLeft.str_pad($textRight, $cols-strlen($textLeft), $pad_string, 0); + } } diff --git a/system/autoload/Message.php b/system/autoload/Message.php index 3ee749d8..df17aec1 100644 --- a/system/autoload/Message.php +++ b/system/autoload/Message.php @@ -62,14 +62,15 @@ class Message if (!empty($config['wa_url'])) { $waurl = str_replace('[number]', urlencode($phone), $config['wa_url']); $waurl = str_replace('[text]', urlencode($txt), $waurl); - Http::getData($waurl); + return Http::getData($waurl); } } - public static function sendPackageNotification($phone, $name, $package, $message, $via) + public static function sendPackageNotification($phone, $name, $package, $price, $message, $via) { - $msg = str_replace('[[name]]', "*$name*", $message); - $msg = str_replace('[[package]]', "*$package*", $msg); + $msg = str_replace('[[name]]', $name, $message); + $msg = str_replace('[[package]]', $package, $msg); + $msg = str_replace('[[price]]', $price, $msg); if ( !empty($phone) && strlen($phone) > 5 && !empty($message) && in_array($via, ['sms', 'wa']) @@ -85,9 +86,9 @@ class Message public static function sendBalanceNotification($phone, $name, $balance, $balance_now, $message, $via) { - $msg = str_replace('[[name]]', "*$name*", $message); + $msg = str_replace('[[name]]', $name, $message); $msg = str_replace('[[current_balance]]', Lang::moneyFormat($balance_now), $msg); - $msg = str_replace('[[balance]]', "*" . Lang::moneyFormat($balance) . "*", $msg); + $msg = str_replace('[[balance]]', Lang::moneyFormat($balance), $msg); if ( !empty($phone) && strlen($phone) > 5 && !empty($message) && in_array($via, ['sms', 'wa']) diff --git a/system/boot.php b/system/boot.php index f4e88701..d0312bac 100644 --- a/system/boot.php +++ b/system/boot.php @@ -118,7 +118,7 @@ try { $ui->assign("error_title", "PHPNuxBill Crash"); if (isset($_SESSION['uid'])) { $ui->assign("error_message", $e->getMessage() . '<br>'); - }else{ + } else { $ui->assign("error_message", $e->getMessage() . '<br><pre>' . $e->getTraceAsString() . '</pre>'); } $ui->display('router-error.tpl'); @@ -130,13 +130,13 @@ function _notify($msg, $type = 'e') $_SESSION['ntype'] = $type; $_SESSION['notify'] = $msg; } -if(empty($config['language'])){ +if (empty($config['language'])) { $config['language'] = 'english'; } $lan_file = File::pathFixer('system/lan/' . $config['language'] . '/common.lan.php'); -if(file_exists($lan_file)){ +if (file_exists($lan_file)) { require $lan_file; -}else{ +} else { die("$lan_file not found"); } @@ -190,7 +190,11 @@ $_notifmsg_default = json_decode(file_get_contents(File::pathFixer('system/uploa //register all plugin foreach (glob(File::pathFixer("system/plugin/*.php")) as $filename) { - include $filename; + try { + include $filename; + } catch (Throwable $e) { + } catch (Exception $e) { + } } @@ -299,7 +303,8 @@ function time_elapsed_string($datetime, $full = false) } } - if (!$full) $string = array_slice($string, 0, 1); + if (!$full) + $string = array_slice($string, 0, 1); return $string ? implode(', ', $string) . ' ago' : 'just now'; } @@ -356,7 +361,7 @@ try { } } catch (Exception $e) { if (!isset($_SESSION['aid']) || empty($_SESSION['aid'])) { - r2(U . 'home' , 'e', $e->getMessage()); + r2(U . 'home', 'e', $e->getMessage()); } $ui->assign("error_message", $e->getMessage() . '<br><pre>' . $e->getTraceAsString() . '</pre>'); $ui->assign("error_title", "PHPNuxBill Crash"); diff --git a/system/controllers/home.php b/system/controllers/home.php index e480b92a..265c8e89 100644 --- a/system/controllers/home.php +++ b/system/controllers/home.php @@ -96,6 +96,12 @@ if (isset($_GET['recharge']) && !empty($_GET['recharge'])) { $router = ORM::for_table('tbl_routers')->where('name', $bill['routers'])->find_one(); if ($config['enable_balance'] == 'yes') { $plan = ORM::for_table('tbl_plans')->find_one($bill['plan_id']); + if(!$plan['enabled']){ + r2(U . "home", 'e', 'Plan is not exists'); + } + if($plan['allow_purchase'] != 'yes'){ + r2(U . "home", 'e', 'Cannot recharge this plan'); + } if ($user['balance'] > $plan['price']) { r2(U . "order/pay/$router[id]/$bill[plan_id]", 'e', 'Order Plan'); } else { diff --git a/system/controllers/order.php b/system/controllers/order.php index a14d15e0..31b53dd0 100644 --- a/system/controllers/order.php +++ b/system/controllers/order.php @@ -149,6 +149,12 @@ switch ($action) { if (empty($plan)) { r2(U . "order/package", 'e', Lang::T("Plan Not found")); } + if(!$plan['enabled']){ + r2(U . "home", 'e', 'Plan is not exists'); + } + if($plan['allow_purchase'] != 'yes'){ + r2(U . "home", 'e', 'Cannot recharge this plan'); + } if ($routes['2'] == 'radius') { $router_name = 'radius'; } else { @@ -166,7 +172,7 @@ switch ($action) { "\nPrice: " . $p['price']); } } else { - echo "no renewall | plan enabled: $p[enabled] | User balance: $c[balance] | price $p[price]\n"; + r2(U . "home", 'e', 'Plan is not exists'); } break; case 'send': @@ -179,6 +185,12 @@ switch ($action) { if (empty($plan)) { r2(U . "order/package", 'e', Lang::T("Plan Not found")); } + if(!$plan['enabled']){ + r2(U . "home", 'e', 'Plan is not exists'); + } + if($plan['allow_purchase'] != 'yes'){ + r2(U . "home", 'e', 'Cannot recharge this plan'); + } if ($routes['2'] == 'radius') { $router_name = 'radius'; } else { diff --git a/system/controllers/pool.php b/system/controllers/pool.php index de7b2932..2261d8eb 100644 --- a/system/controllers/pool.php +++ b/system/controllers/pool.php @@ -68,6 +68,8 @@ switch ($action) { Mikrotik::removePool($client, $d['pool_name']); } catch (Exception $e) { //ignore exception, it means router has already deleted + } catch(Throwable $e){ + //ignore exception, it means router has already deleted } } $d->delete(); diff --git a/system/controllers/prepaid.php b/system/controllers/prepaid.php index ea521c8a..63f27c86 100644 --- a/system/controllers/prepaid.php +++ b/system/controllers/prepaid.php @@ -159,7 +159,7 @@ switch ($action) { case 'print': $id = _post('id'); $d = ORM::for_table('tbl_transactions')->where('id', $id)->find_one(); - $ui->assign('d', $d); + $ui->assign('in', $d); $ui->assign('date', Lang::dateAndTimeFormat($d['recharged_on'], $d['recharged_time'])); run_hook('print_invoice'); #HOOK diff --git a/system/controllers/services.php b/system/controllers/services.php index 093c1343..4909a9c3 100644 --- a/system/controllers/services.php +++ b/system/controllers/services.php @@ -173,6 +173,8 @@ switch ($action) { Mikrotik::removeHotspotPlan($client, $d['name_plan']); } catch (Exception $e) { //ignore exception, it means router has already deleted + } catch(Throwable $e){ + //ignore exception, it means router has already deleted } } @@ -441,6 +443,8 @@ switch ($action) { Mikrotik::removePpoePlan($client, $d['name_plan']); } catch (Exception $e) { //ignore exception, it means router has already deleted + } catch(Throwable $e){ + //ignore exception, it means router has already deleted } } $d->delete(); diff --git a/system/cron.php b/system/cron.php index cac928ab..be5b42e6 100644 --- a/system/cron.php +++ b/system/cron.php @@ -35,16 +35,16 @@ if (php_sapi_name() !== 'cli') { echo "<pre>"; } -if(!file_exists('../config.php')){ +if (!file_exists('../config.php')) { die("config.php file not found"); } -if(!file_exists('orm.php')){ +if (!file_exists('orm.php')) { die("orm.php file not found"); } -if(!file_exists('uploads/notifications.default.json')){ +if (!file_exists('uploads/notifications.default.json')) { die("uploads/notifications.default.json file not found"); } @@ -68,7 +68,13 @@ $_notifmsg_default = json_decode(file_get_contents('uploads/notifications.defaul //register all plugin foreach (glob(File::pathFixer("plugin/*.php")) as $filename) { - include $filename; + try{ + include $filename; + } catch(Throwable $e){ + //ignore plugin error + }catch(Exception $e){ + //ignore plugin error + } } $result = ORM::for_table('tbl_appconfig')->find_many(); @@ -111,9 +117,9 @@ foreach ($d as $ds) { echo " : EXPIRED \r\n"; $u = ORM::for_table('tbl_user_recharges')->where('id', $ds['id'])->find_one(); $c = ORM::for_table('tbl_customers')->where('id', $ds['customer_id'])->find_one(); - $m = ORM::for_table('tbl_routers')->where('name', $ds['routers'])->find_one(); + $m = Mikrotik::info($ds['routers']); $p = ORM::for_table('tbl_plans')->where('id', $u['plan_id'])->find_one(); - + $price = Lang::moneyFormat($p['price']); if ($p['is_radius']) { if (empty($p['pool_expired'])) { print_r(Radius::customerDeactivate($c['username'])); @@ -130,14 +136,14 @@ foreach ($d as $ds) { } Mikrotik::removeHotspotActiveUser($client, $c['username']); } - Message::sendPackageNotification($c['phonenumber'], $c['fullname'], $u['namebp'], $textExpired, $config['user_notification_expired']); + echo Message::sendPackageNotification($c['phonenumber'], $c['fullname'], $u['namebp'], $price, $textExpired, $config['user_notification_expired'])."\n"; //update database user dengan status off $u->status = 'off'; $u->save(); // autorenewal from deposit if ($config['enable_balance'] == 'yes' && $c['auto_renewal']) { - if ($p && $p['enabled'] && $c['balance'] >= $p['price'] && $p['allow_purchase'] =='yes') { + if ($p && $p['enabled'] && $c['balance'] >= $p['price'] && $p['allow_purchase'] == 'yes') { if (Package::rechargeUser($ds['customer_id'], $p['routers'], $p['id'], 'Customer', 'Balance')) { // if success, then get the balance Balance::min($ds['customer_id'], $p['price']); @@ -156,7 +162,8 @@ foreach ($d as $ds) { } else { echo "no renewall | balance $config[enable_balance] auto_renewal $c[auto_renewal]\n"; } - } else echo " : ACTIVE \r\n"; + } else + echo " : ACTIVE \r\n"; } else { $date_now = strtotime(date("Y-m-d H:i:s")); $expiration = strtotime($ds['expiration'] . ' ' . $ds['time']); @@ -167,7 +174,7 @@ foreach ($d as $ds) { $c = ORM::for_table('tbl_customers')->where('id', $ds['customer_id'])->find_one(); $m = ORM::for_table('tbl_routers')->where('name', $ds['routers'])->find_one(); $p = ORM::for_table('tbl_plans')->where('id', $u['plan_id'])->find_one(); - + $price = Lang::moneyFormat($p['price']); if ($p['is_radius']) { if (empty($p['pool_expired'])) { print_r(Radius::customerDeactivate($c['username'])); @@ -184,14 +191,14 @@ foreach ($d as $ds) { } Mikrotik::removePpoeActive($client, $c['username']); } - Message::sendPackageNotification($c['phonenumber'], $c['fullname'], $u['namebp'], $textExpired, $config['user_notification_expired']); + echo Message::sendPackageNotification($c['phonenumber'], $c['fullname'], $u['namebp'], $price, $textExpired, $config['user_notification_expired'])."\n"; $u->status = 'off'; $u->save(); // autorenewal from deposit if ($config['enable_balance'] == 'yes' && $c['auto_renewal']) { - if ($p && $p['enabled'] && $c['balance'] >= $p['price']&& $p['allow_purchase'] =='yes') { + if ($p && $p['enabled'] && $c['balance'] >= $p['price'] && $p['allow_purchase'] == 'yes') { if (Package::rechargeUser($ds['customer_id'], $p['routers'], $p['id'], 'Customer', 'Balance')) { // if success, then get the balance Balance::min($ds['customer_id'], $p['price']); @@ -206,6 +213,7 @@ foreach ($d as $ds) { } } } - } else echo " : ACTIVE \r\n"; + } else + echo " : ACTIVE \r\n"; } } diff --git a/system/cron_reminder.php b/system/cron_reminder.php index 1b77aac8..b09b7dec 100644 --- a/system/cron_reminder.php +++ b/system/cron_reminder.php @@ -67,7 +67,13 @@ $_notifmsg_default = json_decode(file_get_contents('uploads/notifications.defaul //register all plugin foreach (glob(File::pathFixer("plugin/*.php")) as $filename) { - include $filename; + try{ + include $filename; + } catch(Throwable $e){ + //ignore plugin error + }catch(Exception $e){ + //ignore plugin error + } } $result = ORM::for_table('tbl_appconfig')->find_many(); @@ -98,13 +104,15 @@ print_r([$day1, $day3, $day7]); foreach ($d as $ds) { if (in_array($ds['expiration'], [$day1, $day3, $day7])) { $u = ORM::for_table('tbl_user_recharges')->where('id', $ds['id'])->find_one(); + $p = ORM::for_table('tbl_plans')->where('id', $u['plan_id'])->find_one(); $c = ORM::for_table('tbl_customers')->where('id', $ds['customer_id'])->find_one(); + $price = Lang::moneyFormat($p['price']); if ($ds['expiration'] == $day7) { - echo Message::sendPackageNotification($c['phonenumber'], $c['fullname'], $u['namebp'], Lang::getNotifText('reminder_7_day'), $config['user_notification_reminder']) . "\n"; + echo Message::sendPackageNotification($c['phonenumber'], $c['fullname'], $p['name_plan'], $price, Lang::getNotifText('reminder_7_day'), $config['user_notification_reminder']) . "\n"; } else if ($ds['expiration'] == $day3) { - echo Message::sendPackageNotification($c['phonenumber'], $c['fullname'], $u['namebp'], Lang::getNotifText('reminder_3_day'), $config['user_notification_reminder']) . "\n"; + echo Message::sendPackageNotification($c['phonenumber'], $c['fullname'], $p['name_plan'], $price, Lang::getNotifText('reminder_3_day'), $config['user_notification_reminder']) . "\n"; } else if ($ds['expiration'] == $day1) { - echo Message::sendPackageNotification($c['phonenumber'], $c['fullname'], $u['namebp'], Lang::getNotifText('reminder_1_day'), $config['user_notification_reminder']) . "\n"; + echo Message::sendPackageNotification($c['phonenumber'], $c['fullname'], $p['name_plan'], $price, Lang::getNotifText('reminder_1_day'), $config['user_notification_reminder']) . "\n"; } } } diff --git a/system/lan/english/common.lan.php b/system/lan/english/common.lan.php index 2dd0680e..5345f97f 100644 --- a/system/lan/english/common.lan.php +++ b/system/lan/english/common.lan.php @@ -3,8 +3,6 @@ ----------------------------------- Language Name: English Contributor: Ismail Marzuqi -Web: www.phpnuxbill.com -Email: iesien22@yahoo.com 2017 Contributor: Ibnu Maksum (@ibnux) @@ -261,7 +259,6 @@ $_L['Plan_Not_found'] = 'Plan Not found'; $_L['Failed_to_create_transaction'] = 'Failed to create transaction.'; $_L['Seller_has_not_yet_setup_Xendit_payment_gateway'] = 'Seller has not yet setup Xendit payment gateway'; $_L['Admin_has_not_yet_setup_Xendit_payment_gateway_please_tell_admin'] = 'Admin has not yet setup Xendit payment gateway, please tell admin'; -$_L['Buy_this_your_active_package_will_be_overwrite'] = 'Buy this? your active package will be overwrite'; $_L['You_already_have_unpaid_transaction_cancel_it_or_pay_it'] = 'You already have unpaid transaction, cancel it or pay it.'; $_L['Transaction_Not_found'] = 'Transaction Not found'; $_L['Cancel_it'] = 'Cancel it?'; @@ -314,7 +311,6 @@ $_L['User_Notification'] = 'User Notification'; $_L['Expired_Notification'] = 'Expired Notification'; $_L['User_will_get_notification_when_package_expired'] = 'User will get notification when package expired'; $_L['Expired_Notification_Message'] = 'Expired Notification Message'; -$_L['bnameb_will_be_replaced_with_Customer_Name_bpackageb_will_be_replaced_with_Package_name'] = '<b>[[name]]</b> will be replaced with Customer Name. <b>[[package]]</b> will be replaced with Package name.'; $_L['Payment_Notification'] = 'Payment Notification'; $_L['User_will_get_invoice_notification_when_buy_package_or_package_refilled'] = 'User will get invoice notification when buy package or package refilled'; $_L['Current_IP'] = 'Current IP'; @@ -411,12 +407,14 @@ $_L['Resend_To_Customer'] = 'Resend To Customer'; $_L['Your_friend_do_not_have_active_package'] = 'Your friend do not have active package'; $_L['Service_Type'] = 'Service Type'; $_L['Others'] = 'Others'; -$_L['PPPoE'] = 'PPPoE'; -$_L['Hotspot'] = 'Hotspot'; -$_L['Disable_Registration'] = 'Disable Registration'; -$_L['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'; -$_L['Login__Activate_Voucher'] = 'Login / Activate Voucher'; -$_L['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'; -$_L['Voucher_Prefix'] = 'Voucher Prefix'; -$_L['Voucher_activation_success_now_you_can_login'] = 'Voucher activation success, now you can login'; -$_L['Client_Can_Purchase'] = 'Client Can Purchase'; +$_L['PPPoE'] = 'PPPoE'; +$_L['Hotspot'] = 'Hotspot'; +$_L['Disable_Registration'] = 'Disable Registration'; +$_L['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'; +$_L['Login__Activate_Voucher'] = 'Login / Activate Voucher'; +$_L['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'; +$_L['Voucher_Prefix'] = 'Voucher Prefix'; +$_L['Voucher_activation_success_now_you_can_login'] = 'Voucher activation success, now you can login'; +$_L['Client_Can_Purchase'] = 'Client Can Purchase'; +$_L['Buy_this_your_active_package_will_be_overwritten'] = 'Buy this? your active package will be overwritten'; +$_L['Pay_this_with_Balance_your_active_package_will_be_overwritten'] = 'Pay this with Balance? your active package will be overwritten'; diff --git a/system/lan/indonesia/common.lan.php b/system/lan/indonesia/common.lan.php index f6a88e37..22c42831 100644 --- a/system/lan/indonesia/common.lan.php +++ b/system/lan/indonesia/common.lan.php @@ -3,9 +3,6 @@ ----------------------------------- Language Name: Indonesia Contributor: Ismail Marzuqi -Web: www.phpnuxbill.com -Email: iesien22@yahoo.com - 2017 Contributor: Ibnu Maksum (@ibnux) diff --git a/ui/ui/app-notifications.tpl b/ui/ui/app-notifications.tpl index b3d14000..2471c979 100644 --- a/ui/ui/app-notifications.tpl +++ b/ui/ui/app-notifications.tpl @@ -21,7 +21,7 @@ rows="3">{if $_json['expired']!=''}{Lang::htmlspecialchars($_json['expired'])}{else}Hello [[name]], your internet package [[package]] has been expired.{/if}</textarea> </div> <p class="help-block col-md-4"> - {Lang::T('<b>[[name]]</b> will be replaced with Customer Name. <b>[[package]]</b> will be replaced with Package name.')} + <b>[[name]]</b> will be replaced with Customer Name. <b>[[package]]</b> will be replaced with Package name. <b>[[price]]</b> will be replaced with Package price. </p> </div> </div> @@ -33,7 +33,7 @@ rows="3">{Lang::htmlspecialchars($_json['reminder_7_day'])}</textarea> </div> <p class="help-block col-md-4"> - {Lang::T('<b>[[name]]</b> will be replaced with Customer Name. <b>[[package]]</b> will be replaced with Package name.')} + <b>[[name]]</b> will be replaced with Customer Name. <b>[[package]]</b> will be replaced with Package name. <b>[[price]]</b> will be replaced with Package price. </p> </div> </div> @@ -45,7 +45,7 @@ rows="3">{Lang::htmlspecialchars($_json['reminder_3_day'])}</textarea> </div> <p class="help-block col-md-4"> - {Lang::T('<b>[[name]]</b> will be replaced with Customer Name. <b>[[package]]</b> will be replaced with Package name.')} + <b>[[name]]</b> will be replaced with Customer Name. <b>[[package]]</b> will be replaced with Package name. <b>[[price]]</b> will be replaced with Package price. </p> </div> </div> @@ -57,7 +57,7 @@ rows="3">{Lang::htmlspecialchars($_json['reminder_1_day'])}</textarea> </div> <p class="help-block col-md-4"> - {Lang::T('<b>[[name]]</b> will be replaced with Customer Name. <b>[[package]]</b> will be replaced with Package name.')} + <b>[[name]]</b> will be replaced with Customer Name. <b>[[package]]</b> will be replaced with Package name. <b>[[price]]</b> will be replaced with Package price. </p> </div> </div> diff --git a/ui/ui/app-settings.tpl b/ui/ui/app-settings.tpl index f84b56f5..12854e41 100644 --- a/ui/ui/app-settings.tpl +++ b/ui/ui/app-settings.tpl @@ -53,6 +53,14 @@ <input type="text" class="form-control" id="phone" name="phone" value="{$_c['phone']}"> </div> </div> + <div class="form-group"> + <label class="col-md-2 control-label"><i class="glyphicon glyphicon-print"></i> Print Max Char</label> + <div class="col-md-6"> + <input type="number" required class="form-control" id="printer_cols" placeholder="37" name="printer_cols" + value="{$_c['printer_cols']}"> + </div> + <span class="help-block col-md-4">For invoice print using Thermal Printer</span> + </div> <div class="form-group"> <label class="col-md-2 control-label">Theme</label> <div class="col-md-6"> diff --git a/ui/ui/hotspot-add.tpl b/ui/ui/hotspot-add.tpl index 4472be80..fd16f816 100644 --- a/ui/ui/hotspot-add.tpl +++ b/ui/ui/hotspot-add.tpl @@ -175,21 +175,20 @@ if (cek.checked) { $("#routerChoose").addClass('hidden'); document.getElementById("routers").required = false; + $("#pool_expired").html(''); + $.ajax({ + url: "index.php?_route=autoload/pool", + data: "routers=radius", + cache: false, + success: function(msg) { + $("#pool_expired").html(msg); + } + }); } else { document.getElementById("routers").required = true; $("#routerChoose").removeClass('hidden'); } } - setTimeout(() => { - $.ajax({ - url: "index.php?_route=autoload/pool", - data: "routers=radius", - cache: false, - success: function(msg) { - $("#pool_expired").html(msg); - } - }); - }, 2000); </script> {/literal} {/if} diff --git a/ui/ui/hotspot-edit.tpl b/ui/ui/hotspot-edit.tpl index ffe6af7a..b5fa76a6 100644 --- a/ui/ui/hotspot-edit.tpl +++ b/ui/ui/hotspot-edit.tpl @@ -179,7 +179,7 @@ </div> </div> -{if $_c['radius_enable']} +{if $_c['radius_enable'] && $d['is_radius']} {literal} <script> function isRadius(cek) { diff --git a/ui/ui/hotspot.tpl b/ui/ui/hotspot.tpl index ffd33913..6203b307 100644 --- a/ui/ui/hotspot.tpl +++ b/ui/ui/hotspot.tpl @@ -49,7 +49,8 @@ </thead> <tbody> {foreach $d as $ds} - <tr {if $ds['enabled'] != 1}class="danger" title="disabled" {/if}> + <tr {if $ds['enabled'] != 1}class="danger" title="disabled" + {elseif $ds['allow_purchase'] != 'yes'}class="warning" title="Customer can't purchase" {/if}> <td>{$ds['name_plan']}</td> <td>{$ds['typebp']}</td> <td>{$ds['name_bw']}</td> diff --git a/ui/ui/invoice-print.tpl b/ui/ui/invoice-print.tpl index 09899735..21b98a93 100644 --- a/ui/ui/invoice-print.tpl +++ b/ui/ui/invoice-print.tpl @@ -21,30 +21,27 @@ <table width="200"> <tr> <td> - <fieldset> - <center> - <b>{$_c['CompanyName']}</b><br> - {$_c['address']}<br> - {$_c['phone']}<br> - </center> - ============================================<br> - INVOICE: <b>{$d['invoice']}</b> - {$_L['Date']} : {$date}<br> - {$_L['Sales']} : {$_admin['fullname']}<br> - ============================================<br> - {$_L['Type']} : <b>{$d['type']}</b><br> - {$_L['Plan_Name']} : <b>{$d['plan_name']}</b><br> - {$_L['Plan_Price']} : <b>{Lang::moneyFormat($d['price'])}</b><br> - <br> - {$_L['Username']} : <b>{$d['username']}</b><br> - {$_L['Password']} : **********<br> - {if $in['type'] != 'Balance'} - <br> - {$_L['Created_On']} : <b>{Lang::dateAndTimeFormat($d['recharged_on'],$d['recharged_time'])}</b><br> - {$_L['Expires_On']} : <b>{Lang::dateAndTimeFormat($d['expiration'],$d['time'])}</b><br> - {/if} - ============================================<br> - <center>{$_c['note']}</center> - </fieldset> +<pre style="border-style: none; background-color: white;"><b>{Lang::pad($_c['CompanyName'],' ', 2)}</b> +{Lang::pad($_c['address'],' ', 2)} +{Lang::pad($_c['phone'],' ', 2)} +{Lang::pad("", '=')} +{Lang::pads("Invoice", $in['invoice'], ' ')} +{Lang::pads($_L['Date'], $date, ' ')} +{Lang::pads($_L['Sales'], $_admin['fullname'], ' ')} +{Lang::pad("", '=')} +{Lang::pads($_L['Type'], $in['type'], ' ')} +{Lang::pads($_L['Plan_Name'], $in['plan_name'], ' ')} +{Lang::pads($_L['Plan_Price'], Lang::moneyFormat($in['price']), ' ')} +{Lang::pad($in['method'], ' ', 2)} + +{Lang::pads($_L['Username'], $in['username'], ' ')} +{Lang::pads($_L['Password'], '**********', ' ')} +{if $in['type'] != 'Balance'} +{Lang::pads($_L['Created_On'], Lang::dateAndTimeFormat($in['recharged_on'],$in['recharged_time']), ' ')} +{Lang::pads($_L['Expires_On'], Lang::dateAndTimeFormat($in['expiration'],$in['time']), ' ')} +{/if} +{Lang::pad("", '=')} +{Lang::pad($_c['note'],' ', 2)}</pre> </td> </tr> </table> diff --git a/ui/ui/invoice.tpl b/ui/ui/invoice.tpl index 0c9fa384..eec58810 100644 --- a/ui/ui/invoice.tpl +++ b/ui/ui/invoice.tpl @@ -5,42 +5,36 @@ <div class="panel panel-hovered panel-primary panel-stacked mb30"> <div class="panel-heading">{$in['invoice']}</div> <div class="panel-body"> - <div class="well"> - <fieldset> - <center> - <b>{$_c['CompanyName']}</b><br> - {$_c['address']}<br> - {$_c['phone']}<br> - </center> - ====================================================<br> - INVOICE: <b>{$in['invoice']}</b> - {$_L['Date']} : {$date}<br> - {$_L['Sales']} : {$_admin['fullname']}<br> - ====================================================<br> - {$_L['Type']} : <b>{$in['type']}</b><br> - {$_L['Plan_Name']} : <b>{$in['plan_name']}</b><br> - {$_L['Plan_Price']} : <b>{Lang::moneyFormat($in['price'])}</b><br> - {$in['method']}<br> - <br> - {$_L['Username']} : <b>{$in['username']}</b><br> - {$_L['Password']} : **********<br> - {if $in['type'] != 'Balance'} - <br> - {$_L['Created_On']} : <b>{Lang::dateAndTimeFormat($in['recharged_on'],$in['recharged_time'])}</b><br> - {$_L['Expires_On']} : <b>{Lang::dateAndTimeFormat($in['expiration'],$in['time'])}</b><br> - {/if} - =====================================================<br> - <center>{$_c['note']}</center> - </fieldset> - </div> - <form class="form-horizontal" method="post" action="{$_url}prepaid/print" target="_blank"> - <input type="hidden" name="id" value="{$in['id']}"> - <a href="{$_url}prepaid/list" class="btn btn-primary btn-sm"><i - class="ion-reply-all"></i>{$_L['Finish']}</a> - <a href="{$_url}prepaid/view/{$in['id']}/send" class="btn btn-info text-black btn-sm"><i - class="glyphicon glyphicon-envelope"></i> {Lang::T("Resend To Customer")}</a> - <button type="submit" class="btn btn-default btn-sm"><i class="fa fa-print"></i> - {$_L['Click_Here_to_Print']}</button> - </form> +<pre><b>{Lang::pad($_c['CompanyName'],' ', 2)}</b> +{Lang::pad($_c['address'],' ', 2)} +{Lang::pad($_c['phone'],' ', 2)} +{Lang::pad("", '=')} +{Lang::pads("Invoice", $in['invoice'], ' ')} +{Lang::pads($_L['Date'], $date, ' ')} +{Lang::pads($_L['Sales'], $_admin['fullname'], ' ')} +{Lang::pad("", '=')} +{Lang::pads($_L['Type'], $in['type'], ' ')} +{Lang::pads($_L['Plan_Name'], $in['plan_name'], ' ')} +{Lang::pads($_L['Plan_Price'], Lang::moneyFormat($in['price']), ' ')} +{Lang::pad($in['method'], ' ', 2)} + +{Lang::pads($_L['Username'], $in['username'], ' ')} +{Lang::pads($_L['Password'], '**********', ' ')} +{if $in['type'] != 'Balance'} +{Lang::pads($_L['Created_On'], Lang::dateAndTimeFormat($in['recharged_on'],$in['recharged_time']), ' ')} +{Lang::pads($_L['Expires_On'], Lang::dateAndTimeFormat($in['expiration'],$in['time']), ' ')} +{/if} +{Lang::pad("", '=')} +{Lang::pad($_c['note'],' ', 2)}</pre> +<form class="form-horizontal" method="post" action="{$_url}prepaid/print" target="_blank"> + <input type="hidden" name="id" value="{$in['id']}"> + <a href="{$_url}prepaid/list" class="btn btn-primary btn-sm"><i + class="ion-reply-all"></i>{$_L['Finish']}</a> + <a href="{$_url}prepaid/view/{$in['id']}/send" class="btn btn-info text-black btn-sm"><i + class="glyphicon glyphicon-envelope"></i> {Lang::T("Resend To Customer")}</a> + <button type="submit" class="btn btn-default btn-sm"><i class="fa fa-print"></i> + {$_L['Click_Here_to_Print']}</button> +</form> </div> </div> diff --git a/ui/ui/pppoe-edit.tpl b/ui/ui/pppoe-edit.tpl index 74d34ba2..26241045 100644 --- a/ui/ui/pppoe-edit.tpl +++ b/ui/ui/pppoe-edit.tpl @@ -121,7 +121,7 @@ </div> </div> -{if $_c['radius_enable'] and $d['is_radius']} +{if $_c['radius_enable'] && $d['is_radius']} {literal} <script> document.getElementById("routers").required = false; diff --git a/ui/ui/pppoe.tpl b/ui/ui/pppoe.tpl index 5fe10771..dd3c548a 100644 --- a/ui/ui/pppoe.tpl +++ b/ui/ui/pppoe.tpl @@ -47,7 +47,8 @@ </thead> <tbody> {foreach $d as $ds} - <tr {if $ds['enabled'] != 1}class="danger" title="disabled" {/if}> + <tr {if $ds['enabled'] != 1}class="danger" title="disabled" + {elseif $ds['allow_purchase'] != 'yes'}class="warning" title="Customer can't purchase" {/if}> <td>{$ds['name_plan']}</td> <td>{$ds['name_bw']}</td> <td>{Lang::moneyFormat($ds['price'])}</td> diff --git a/version.json b/version.json index 9fdb534f..cf76f775 100644 --- a/version.json +++ b/version.json @@ -1,3 +1,3 @@ { - "version": "2024.1.11" + "version": "2024.1.16.2" } \ No newline at end of file