From 49c8fe5d551249390863f3a46ba56c51c16113fc Mon Sep 17 00:00:00 2001 From: iBNu Maksum Date: Sat, 21 Oct 2023 11:33:52 +0700 Subject: [PATCH 01/10] Update issue templates --- .github/ISSUE_TEMPLATE/bug_report.md | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 00000000..e5d0d54c --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,27 @@ +--- +name: Bug report +about: Create a report to help us improve +title: '' +labels: '' +assignees: ibnux + +--- + +**Describe the bug** +A clear and concise description of what the bug is. + +**To Reproduce** +Steps to reproduce the behavior: +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' +4. See error + +**Expected behavior** +A clear and concise description of what you expected to happen. + +**Screenshots** +If applicable, add screenshots to help explain your problem. + +**Additional context** +Add any other context about the problem here. From e2da5b67bf5ef059c733a44f30828718da506f1a Mon Sep 17 00:00:00 2001 From: iBNu Maksum Date: Sat, 21 Oct 2023 11:34:28 +0700 Subject: [PATCH 02/10] Update issue templates --- .github/ISSUE_TEMPLATE/feature_request.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 00000000..bbcbbe7d --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,20 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: '' +labels: '' +assignees: '' + +--- + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Additional context** +Add any other context or screenshots about the feature request here. From 3c4920f958f4d94d604b64447a02a685e493d929 Mon Sep 17 00:00:00 2001 From: iBNu Maksum Date: Sat, 21 Oct 2023 11:36:23 +0700 Subject: [PATCH 03/10] Update issue templates --- .github/ISSUE_TEMPLATE/bug_report.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index e5d0d54c..ddf5243b 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -8,7 +8,7 @@ assignees: ibnux --- **Describe the bug** -A clear and concise description of what the bug is. +A clear and concise description of what the bug is. Error connecting to router is not a bug, is your router port is not accessable, ask community for help, go to discussion or telegram group **To Reproduce** Steps to reproduce the behavior: From 4f975fbf0d1d3de980cdf36f19b35078681e6ab3 Mon Sep 17 00:00:00 2001 From: Ibnu Maksum Date: Tue, 24 Oct 2023 09:19:35 +0700 Subject: [PATCH 04/10] fix logic pool_expired radius --- system/cron.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/system/cron.php b/system/cron.php index 38036596..1b0f362f 100644 --- a/system/cron.php +++ b/system/cron.php @@ -103,7 +103,7 @@ foreach ($d as $ds) { $p = ORM::for_table('tbl_plans')->where('id', $u['plan_id'])->find_one(); if ($p['is_radius']) { - if (!empty($p['pool_expired'])) { + if (empty($p['pool_expired'])) { print_r(Radius::customerDeactivate($c['username'])); } else { Radius::upsertCustomerAttr($c['username'], 'Framed-Pool', $plan['pool_expired'], ':='); @@ -157,7 +157,7 @@ foreach ($d as $ds) { $p = ORM::for_table('tbl_plans')->where('id', $u['plan_id'])->find_one(); if ($p['is_radius']) { - if (!empty($p['pool_expired'])) { + if (empty($p['pool_expired'])) { print_r(Radius::customerDeactivate($c['username'])); } else { Radius::upsertCustomerAttr($c['username'], 'Framed-Pool', $plan['pool_expired'], ':='); From baca2d706f3d445cf814d63c8e73467e7edb62f5 Mon Sep 17 00:00:00 2001 From: Ibnu Maksum Date: Tue, 24 Oct 2023 09:27:51 +0700 Subject: [PATCH 05/10] alert move to tpl --- system/controllers/register.php | 35 ++++++++++----------------------- ui/ui/register-otp.tpl | 9 +++++---- ui/ui/register-rotp.tpl | 9 +++++---- ui/ui/register.tpl | 9 +++++---- ui/ui/user-login.tpl | 9 +++++---- 5 files changed, 30 insertions(+), 41 deletions(-) diff --git a/system/controllers/register.php b/system/controllers/register.php index 9b55439a..c1b3651e 100644 --- a/system/controllers/register.php +++ b/system/controllers/register.php @@ -59,11 +59,8 @@ switch ($do) { $ui->assign('address', $address); $ui->assign('email', $email); $ui->assign('phonenumber', $phonenumber); - $ui->assign('notify', '
- -
Verification code is Wrong
'); + $ui->assign('notify', 'Wrong Verification code'); + $ui->assign('notify_t', 'd'); $ui->display('register-otp.tpl'); exit(); }else{ @@ -95,11 +92,8 @@ switch ($do) { $ui->assign('address', $address); $ui->assign('email', $email); $ui->assign('phonenumber', $phonenumber); - $ui->assign('notify', '
- -
Failed to register
'); + $ui->assign('notify', 'Failed to register'); + $ui->assign('notify_t', 'd'); run_hook('view_otp_register'); #HOOK $ui->display('register-rotp.tpl'); } @@ -109,11 +103,8 @@ switch ($do) { $ui->assign('address', $address); $ui->assign('email', $email); $ui->assign('phonenumber', $phonenumber); - $ui->assign('notify', '
- -
' . $msg . '
'); + $ui->assign('notify', $msg); + $ui->assign('notify_t', 'd'); $ui->display('register.tpl'); } break; @@ -134,22 +125,16 @@ switch ($do) { //expired 10 minutes if(file_exists($otpPath) && time()-filemtime($otpPath)<1200){ $ui->assign('username', $username); - $ui->assign('notify', '
- -
Please wait '.(1200-(time()-filemtime($otpPath))).' seconds before sending another SMS
'); + $ui->assign('notify', 'Please wait '.(1200-(time()-filemtime($otpPath))).' seconds before sending another SMS'); + $ui->assign('notify_t', 'd'); $ui->display('register-otp.tpl'); }else{ $otp = rand(100000,999999); file_put_contents($otpPath, $otp); Message::sendSMS($username,$config['CompanyName']."\nYour Verification code are: $otp"); $ui->assign('username', $username); - $ui->assign('notify', '
- -
Verification code has been sent to your phone
'); + $ui->assign('notify', 'Verification code has been sent to your phone'); + $ui->assign('notify_t', 's'); $ui->display('register-otp.tpl'); } }else{ diff --git a/ui/ui/register-otp.tpl b/ui/ui/register-otp.tpl index 4a0d167f..b6b25aad 100644 --- a/ui/ui/register-otp.tpl +++ b/ui/ui/register-otp.tpl @@ -22,10 +22,11 @@
{if isset($notify)} -
-
- {$notify} -
+
+ +
{$notify}
{/if}
diff --git a/ui/ui/register-rotp.tpl b/ui/ui/register-rotp.tpl index dbb5646a..7ea3f751 100644 --- a/ui/ui/register-rotp.tpl +++ b/ui/ui/register-rotp.tpl @@ -34,10 +34,11 @@
{if isset($notify)} -
-
- {$notify} -
+
+ +
{$notify}
{/if}
diff --git a/ui/ui/register.tpl b/ui/ui/register.tpl index 09b02474..e7b23c93 100644 --- a/ui/ui/register.tpl +++ b/ui/ui/register.tpl @@ -22,10 +22,11 @@
{if isset($notify)} -
-
- {$notify} -
+
+ +
{$notify}
{/if}
diff --git a/ui/ui/user-login.tpl b/ui/ui/user-login.tpl index 0d09fb6d..dbbaa827 100644 --- a/ui/ui/user-login.tpl +++ b/ui/ui/user-login.tpl @@ -21,10 +21,11 @@
{if isset($notify)} -
-
- {$notify} -
+
+ +
{$notify}
{/if}
From 4e7a60aa6f8251f419b8a139ad79d3c67bf922f8 Mon Sep 17 00:00:00 2001 From: Ibnu Maksum Date: Tue, 24 Oct 2023 12:27:30 +0700 Subject: [PATCH 06/10] change pagination class --- system/autoload/Paginator.php | 6 +++--- system/controllers/bandwidth.php | 4 ++-- system/controllers/customers.php | 26 +++++++++++++++----------- system/controllers/order.php | 2 +- system/controllers/pool.php | 8 ++++---- system/controllers/prepaid.php | 26 +++++++++++++------------- system/controllers/reports.php | 2 +- system/controllers/routers.php | 4 ++-- system/controllers/services.php | 20 ++++++++++---------- system/controllers/settings.php | 19 ++++++++++--------- system/controllers/voucher.php | 2 +- 11 files changed, 62 insertions(+), 57 deletions(-) diff --git a/system/autoload/Paginator.php b/system/autoload/Paginator.php index f6fdf9c6..ed48ba05 100644 --- a/system/autoload/Paginator.php +++ b/system/autoload/Paginator.php @@ -18,10 +18,10 @@ class Paginator $page = (int)(empty(_get('p')) ? 1 : _get('p')); $pagination = ""; foreach($colVal as $k=>$v) { - if(!empty($query)){ - $table = $table->where_like($k, $v); - }else{ + if(strpos($v,'%') === false) { $table = $table->where($k, $v); + }else{ + $table = $table->where_like($k, $v); } } $totalReq = $table->count(); diff --git a/system/controllers/bandwidth.php b/system/controllers/bandwidth.php index 01cb3388..566e635e 100644 --- a/system/controllers/bandwidth.php +++ b/system/controllers/bandwidth.php @@ -22,10 +22,10 @@ switch ($action) { run_hook('view_list_bandwidth'); #HOOK $name = _post('name'); if ($name != ''){ - $paginator = Paginator::bootstrap('tbl_bandwidth','name_bw','%'.$name.'%'); + $paginator = Paginator::build(ORM::for_table('tbl_bandwidth'), ['name_bw' => '%' . $name . '%'], $name); $d = ORM::for_table('tbl_bandwidth')->where_like('name_bw','%'.$name.'%')->offset($paginator['startpoint'])->limit($paginator['limit'])->order_by_desc('id')->find_many(); }else{ - $paginator = Paginator::bootstrap('tbl_bandwidth'); + $paginator = Paginator::build(ORM::for_table('tbl_bandwidth')); $d = ORM::for_table('tbl_bandwidth')->offset($paginator['startpoint'])->limit($paginator['limit'])->order_by_desc('id')->find_many(); } diff --git a/system/controllers/customers.php b/system/controllers/customers.php index 4ac3b5a9..4f13f648 100644 --- a/system/controllers/customers.php +++ b/system/controllers/customers.php @@ -24,14 +24,19 @@ switch ($action) { $search = _post('search'); run_hook('list_customers'); #HOOK if ($search != '') { - $paginator = Paginator::bootstrapRaw('tbl_customers', "(`username` LIKE '%$search%' OR `fullname` LIKE '%$search%' OR `phonenumber` LIKE '%$search%' OR `email` LIKE '%$search%')", [$search, $search, $search, $search]); + $paginator = Paginator::build(ORM::for_table('tbl_customers'), [ + 'username' => '%' . $search . '%', + 'fullname' => '%' . $search . '%', + 'phonenumber' => '%' . $search . '%', + 'email' => '%' . $search . '%' + ], $search); $d = ORM::for_table('tbl_customers') ->where_raw("(`username` LIKE '%$search%' OR `fullname` LIKE '%$search%' OR `phonenumber` LIKE '%$search%' OR `email` LIKE '%$search%')", [$search, $search, $search, $search]) ->offset($paginator['startpoint']) ->limit($paginator['limit']) ->order_by_desc('id')->find_many(); } else { - $paginator = Paginator::bootstrap('tbl_customers'); + $paginator = Paginator::build(ORM::for_table('tbl_customers')); $d = ORM::for_table('tbl_customers') ->offset($paginator['startpoint'])->limit($paginator['limit'])->order_by_desc('id')->find_many(); } @@ -125,25 +130,24 @@ switch ($action) { $v = $routes['3']; if (empty($v) || $v == 'order') { $v = 'order'; - // $paginator = Paginator::bootstrap('tbl_payment_gateway', 'username', $customer['username']); - // print_r($paginator); + $paginator = Paginator::build(ORM::for_table('tbl_payment_gateway'),['username'=>$customer['username']]); $order = ORM::for_table('tbl_payment_gateway') ->where('username', $customer['username']) - ->offset(0) - ->limit(30) + ->offset($paginator['startpoint']) + ->limit($paginator['limit']) ->order_by_desc('id') ->find_many(); - // $ui->assign('paginator', $paginator); + $ui->assign('paginator', $paginator); $ui->assign('order', $order); } else if ($v == 'activation') { - // $paginator = Paginator::bootstrap('tbl_transactions', 'username', $customer['username']); + $paginator = Paginator::build(ORM::for_table('tbl_transactions'),['username'=>$customer['username']]); $activation = ORM::for_table('tbl_transactions') ->where('username', $customer['username']) - ->offset(0) - ->limit(30) + ->offset($paginator['startpoint']) + ->limit($paginator['limit']) ->order_by_desc('id') ->find_many(); - // $ui->assign('paginator', $paginator); + $ui->assign('paginator', $paginator); $ui->assign('activation', $activation); } $package = ORM::for_table('tbl_user_recharges')->where('username', $customer['username'])->find_one(); diff --git a/system/controllers/order.php b/system/controllers/order.php index ec7d084d..3905596b 100644 --- a/system/controllers/order.php +++ b/system/controllers/order.php @@ -19,7 +19,7 @@ switch ($action) { break; case 'history': $ui->assign('_system_menu', 'history'); - $paginator = Paginator::bootstrap('tbl_payment_gateway', 'username', $user['username']); + $paginator = Paginator::build(ORM::for_table('tbl_payment_gateway'),['username'=>$user['username']]); $d = ORM::for_table('tbl_payment_gateway') ->where('username', $user['username']) ->order_by_desc('id') diff --git a/system/controllers/pool.php b/system/controllers/pool.php index a75db507..de7b2932 100644 --- a/system/controllers/pool.php +++ b/system/controllers/pool.php @@ -24,10 +24,10 @@ switch ($action) { $name = _post('name'); if ($name != '') { - $paginator = Paginator::bootstrap('tbl_pool', 'pool_name', '%' . $name . '%'); + $paginator = Paginator::build(ORM::for_table('tbl_pool'), ['pool_name' => '%' . $name . '%'], $name); $d = ORM::for_table('tbl_pool')->where_like('pool_name', '%' . $name . '%')->offset($paginator['startpoint'])->limit($paginator['limit'])->order_by_desc('id')->find_many(); } else { - $paginator = Paginator::bootstrap('tbl_pool'); + $paginator = Paginator::build(ORM::for_table('tbl_pool')); $d = ORM::for_table('tbl_pool')->offset($paginator['startpoint'])->limit($paginator['limit'])->order_by_desc('id')->find_many(); } @@ -62,11 +62,11 @@ switch ($action) { $d = ORM::for_table('tbl_pool')->find_one($id); if ($d) { if ($d['routers'] != 'radius') { - try{ + try { $mikrotik = Mikrotik::info($d['routers']); $client = Mikrotik::getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']); Mikrotik::removePool($client, $d['pool_name']); - }catch(Exception $e){ + } catch (Exception $e) { //ignore exception, it means router has already deleted } } diff --git a/system/controllers/prepaid.php b/system/controllers/prepaid.php index 25e0539a..7509c0d8 100644 --- a/system/controllers/prepaid.php +++ b/system/controllers/prepaid.php @@ -67,10 +67,10 @@ switch ($action) { $ui->assign('_title', $_L['Customers']); $username = _post('username'); if ($username != '') { - $paginator = Paginator::bootstrap('tbl_user_recharges', 'username', '%' . $username . '%'); + $paginator = Paginator::build(ORM::for_table('tbl_user_recharges'), ['username' => '%' . $username . '%'], $username); $d = ORM::for_table('tbl_user_recharges')->where_like('username', '%' . $username . '%')->offset($paginator['startpoint'])->limit($paginator['limit'])->order_by_desc('id')->find_many(); } else { - $paginator = Paginator::bootstrap('tbl_user_recharges'); + $paginator = Paginator::build(ORM::for_table('tbl_user_recharges')); $d = ORM::for_table('tbl_user_recharges')->offset($paginator['startpoint'])->limit($paginator['limit'])->order_by_desc('id')->find_many(); } @@ -142,16 +142,16 @@ switch ($action) { $d = ORM::for_table('tbl_transactions')->where('id', $id)->find_one(); $ui->assign('in', $d); - if(!empty($routes['3']) && $routes['3']=='send'){ + if (!empty($routes['3']) && $routes['3'] == 'send') { $c = ORM::for_table('tbl_customers')->where('username', $d['username'])->find_one(); - if($c){ + if ($c) { Message::sendInvoice($c, $d); - r2(U . 'prepaid/view/'.$id, 's', "Success send to customer"); + r2(U . 'prepaid/view/' . $id, 's', "Success send to customer"); } - r2(U . 'prepaid/view/'.$id, 'd', "Customer not found"); + r2(U . 'prepaid/view/' . $id, 'd', "Customer not found"); } $ui->assign('_title', 'View Invoice'); - $ui->assign('date', Lang::dateAndTimeFormat($d['recharged_on'],$d['recharged_time'])); + $ui->assign('date', Lang::dateAndTimeFormat($d['recharged_on'], $d['recharged_time'])); $ui->display('invoice.tpl'); break; @@ -161,7 +161,7 @@ switch ($action) { $d = ORM::for_table('tbl_transactions')->where('id', $id)->find_one(); $ui->assign('d', $d); - $ui->assign('date', Lang::dateAndTimeFormat($d['recharged_on'],$d['recharged_time'])); + $ui->assign('date', Lang::dateAndTimeFormat($d['recharged_on'], $d['recharged_time'])); run_hook('print_invoice'); #HOOK $ui->display('invoice-print.tpl'); break; @@ -242,7 +242,7 @@ switch ($action) { $code = _post('code'); if ($code != '') { $ui->assign('code', $code); - $paginator = Paginator::bootstrap('tbl_voucher', 'code', '%' . $code . '%'); + $paginator = Paginator::build(ORM::for_table('tbl_voucher'), ['code' => '%' . $code . '%'], $code); $d = ORM::for_table('tbl_plans')->where('enabled', '1') ->join('tbl_voucher', array('tbl_plans.id', '=', 'tbl_voucher.id_plan')) ->where_like('tbl_voucher.code', '%' . $code . '%') @@ -250,7 +250,7 @@ switch ($action) { ->limit($paginator['limit']) ->find_many(); } else { - $paginator = Paginator::bootstrap('tbl_voucher'); + $paginator = Paginator::build(ORM::for_table('tbl_voucher')); $d = ORM::for_table('tbl_plans')->where('enabled', '1') ->join('tbl_voucher', array('tbl_plans.id', '=', 'tbl_voucher.id_plan')) ->offset($paginator['startpoint']) @@ -282,13 +282,13 @@ switch ($action) { $pagebreak = _post('pagebreak'); $limit = _post('limit'); $vpl = _post('vpl'); - if(empty($vpl)){ + if (empty($vpl)) { $vpl = 3; } if ($pagebreak < 1) $pagebreak = 12; if ($limit < 1) $limit = $pagebreak * 2; - if(empty($from_id)){ + if (empty($from_id)) { $from_id = 0; } @@ -367,7 +367,7 @@ switch ($action) { $n++; } - $ui->assign('voucher',$voucher); + $ui->assign('voucher', $voucher); $ui->assign('vc', $vc); //for counting pagebreak diff --git a/system/controllers/reports.php b/system/controllers/reports.php index 06dcb487..84b58792 100644 --- a/system/controllers/reports.php +++ b/system/controllers/reports.php @@ -48,7 +48,7 @@ switch ($action) { $ui->display('reports-activation.tpl'); break; case 'daily-report': - $paginator = Paginator::bootstrap('tbl_transactions', 'recharged_on', $mdate); + $paginator = Paginator::build(ORM::for_table('tbl_transactions'), ['recharged_on' => $mdate]); $d = ORM::for_table('tbl_transactions')->where('recharged_on', $mdate)->offset($paginator['startpoint'])->limit($paginator['limit'])->order_by_desc('id')->find_many(); $dr = ORM::for_table('tbl_transactions')->where('recharged_on', $mdate)->sum('price'); diff --git a/system/controllers/routers.php b/system/controllers/routers.php index 140ad2fb..31cc4cce 100644 --- a/system/controllers/routers.php +++ b/system/controllers/routers.php @@ -27,10 +27,10 @@ switch ($action) { $name = _post('name'); if ($name != '') { - $paginator = Paginator::bootstrap('tbl_routers', 'name', '%' . $name . '%'); + $paginator = Paginator::build(ORM::for_table('tbl_routers'), ['name' => '%' . $name . '%'], $name); $d = ORM::for_table('tbl_routers')->where_like('name', '%' . $name . '%')->offset($paginator['startpoint'])->limit($paginator['limit'])->order_by_desc('id')->find_many(); } else { - $paginator = Paginator::bootstrap('tbl_routers'); + $paginator = Paginator::build(ORM::for_table('tbl_routers')); $d = ORM::for_table('tbl_routers')->offset($paginator['startpoint'])->limit($paginator['limit'])->order_by_desc('id')->find_many(); } diff --git a/system/controllers/services.php b/system/controllers/services.php index 8bb68a96..3cc81302 100644 --- a/system/controllers/services.php +++ b/system/controllers/services.php @@ -120,10 +120,10 @@ switch ($action) { $name = _post('name'); if ($name != '') { - $paginator = Paginator::bootstrap('tbl_plans', 'name_plan', '%' . $name . '%', 'type', 'Hotspot'); + $paginator = Paginator::build(ORM::for_table('tbl_plans'), ['name_plan' => '%' . $name . '%', 'type' => 'Hotspot'], $name); $d = ORM::for_table('tbl_bandwidth')->join('tbl_plans', array('tbl_bandwidth.id', '=', 'tbl_plans.id_bw'))->where('tbl_plans.type', 'Hotspot')->where_like('tbl_plans.name_plan', '%' . $name . '%')->offset($paginator['startpoint'])->limit($paginator['limit'])->find_many(); } else { - $paginator = Paginator::bootstrap('tbl_plans', 'type', 'Hotspot'); + $paginator = Paginator::build(ORM::for_table('tbl_plans'), ['type' => 'Hotspot']); $d = ORM::for_table('tbl_bandwidth')->join('tbl_plans', array('tbl_bandwidth.id', '=', 'tbl_plans.id_bw'))->where('tbl_plans.type', 'Hotspot')->offset($paginator['startpoint'])->limit($paginator['limit'])->find_many(); } @@ -167,11 +167,11 @@ switch ($action) { if ($d['is_radius']) { Radius::planDelete($d['id']); } else { - try{ + try { $mikrotik = Mikrotik::info($d['routers']); $client = Mikrotik::getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']); Mikrotik::removeHotspotPlan($client, $d['name_plan']); - }catch(Exception $e){ + } catch (Exception $e) { //ignore exception, it means router has already deleted } } @@ -377,10 +377,10 @@ switch ($action) { $name = _post('name'); if ($name != '') { - $paginator = Paginator::bootstrap('tbl_plans', 'name_plan', '%' . $name . '%', 'type', 'Hotspot'); + $paginator = Paginator::build(ORM::for_table('tbl_plans'), ['name_plan' => '%' . $name . '%', 'type' => 'PPPOE'], $name); $d = ORM::for_table('tbl_bandwidth')->join('tbl_plans', array('tbl_bandwidth.id', '=', 'tbl_plans.id_bw'))->where('tbl_plans.type', 'PPPOE')->where_like('tbl_plans.name_plan', '%' . $name . '%')->offset($paginator['startpoint'])->limit($paginator['limit'])->find_many(); } else { - $paginator = Paginator::bootstrap('tbl_plans', 'type', 'Hotspot'); + $paginator = Paginator::build(ORM::for_table('tbl_plans'), ['type' => 'PPPOE'], $name); $d = ORM::for_table('tbl_bandwidth')->join('tbl_plans', array('tbl_bandwidth.id', '=', 'tbl_plans.id_bw'))->where('tbl_plans.type', 'PPPOE')->offset($paginator['startpoint'])->limit($paginator['limit'])->find_many(); } @@ -431,11 +431,11 @@ switch ($action) { if ($d['is_radius']) { Radius::planDelete($d['id']); } else { - try{ + try { $mikrotik = Mikrotik::info($d['routers']); $client = Mikrotik::getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']); Mikrotik::removePpoePlan($client, $d['name_plan']); - }catch(Exception $e){ + } catch (Exception $e) { //ignore exception, it means router has already deleted } } @@ -613,10 +613,10 @@ switch ($action) { $ui->assign('_title', Lang::T('Balance Plans')); $name = _post('name'); if ($name != '') { - $paginator = Paginator::bootstrap('tbl_plans', 'name_plan', '%' . $name . '%', 'type', 'Balance'); + $paginator = Paginator::build(ORM::for_table('tbl_plans'), ['name_plan' => '%' . $name . '%', 'type' => 'Balance'], $name); $d = ORM::for_table('tbl_plans')->where('tbl_plans.type', 'Balance')->where_like('tbl_plans.name_plan', '%' . $name . '%')->offset($paginator['startpoint'])->limit($paginator['limit'])->find_many(); } else { - $paginator = Paginator::bootstrap('tbl_plans', 'type', 'Hotspot'); + $paginator = Paginator::build(ORM::for_table('tbl_plans'), ['type' => 'Balance'], $name); $d = ORM::for_table('tbl_plans')->where('tbl_plans.type', 'Balance')->offset($paginator['startpoint'])->limit($paginator['limit'])->find_many(); } diff --git a/system/controllers/settings.php b/system/controllers/settings.php index b843661e..5b13dbee 100644 --- a/system/controllers/settings.php +++ b/system/controllers/settings.php @@ -1,4 +1,5 @@ assign('logo', $logo); - if(empty($_c['radius_client'])){ - try{ + if (empty($_c['radius_client'])) { + try { $_c['radius_client'] = Radius::getClient(); $ui->assign('_c', $_c); - }catch(Exception $e){ + } catch (Exception $e) { //ignore } } @@ -38,11 +39,11 @@ switch ($action) { } } $php = trim(shell_exec('which php')); - if(empty($php)){ + if (empty($php)) { $php = 'php'; } $ui->assign('php', $php); - $ui->assign('dir', str_replace('controllers','', __DIR__)); + $ui->assign('dir', str_replace('controllers', '', __DIR__)); $ui->assign('themes', $themes); run_hook('view_app_settings'); #HOOK $ui->display('app-settings.tpl'); @@ -76,10 +77,10 @@ switch ($action) { $username = _post('username'); if ($username != '') { - $paginator = Paginator::bootstrap('tbl_users', 'username', '%' . $username . '%'); + $paginator = Paginator::build(ORM::for_table('tbl_users'), ['username' => '%' . $username . '%'], $username); $d = ORM::for_table('tbl_users')->where_like('username', '%' . $username . '%')->offset($paginator['startpoint'])->limit($paginator['limit'])->order_by_asc('id')->find_many(); } else { - $paginator = Paginator::bootstrap('tbl_users'); + $paginator = Paginator::build(ORM::for_table('tbl_users')); $d = ORM::for_table('tbl_users')->offset($paginator['startpoint'])->limit($paginator['limit'])->order_by_asc('id')->find_many(); } @@ -261,11 +262,11 @@ switch ($action) { if (!empty($_FILES['logo']['name'])) { - if(function_exists('imagecreatetruecolor')){ + if (function_exists('imagecreatetruecolor')) { if (file_exists('system/uploads/logo.png')) unlink('system/uploads/logo.png'); File::resizeCropImage($_FILES['logo']['tmp_name'], 'system/uploads/logo.png', 1078, 200, 100); if (file_exists($_FILES['logo']['tmp_name'])) unlink($_FILES['logo']['tmp_name']); - }else{ + } else { r2(U . 'settings/app', 'e', 'PHP GD is not installed'); } } diff --git a/system/controllers/voucher.php b/system/controllers/voucher.php index 03df08d1..c491430e 100644 --- a/system/controllers/voucher.php +++ b/system/controllers/voucher.php @@ -42,7 +42,7 @@ switch ($action) { case 'list-activated': $ui->assign('_system_menu', 'list-activated'); - $paginator = Paginator::bootstrap('tbl_transactions', 'username', $user['username']); + $paginator = Paginator::build(ORM::for_table('tbl_transactions'), ['username' => $user['username']]); $d = ORM::for_table('tbl_transactions')->where('username', $user['username'])->offset($paginator['startpoint'])->limit($paginator['limit'])->order_by_desc('id')->find_many(); $ui->assign('d', $d); From 25cd07e975a4bf545393c5cc96ae697867b2c9d9 Mon Sep 17 00:00:00 2001 From: Ibnu Maksum Date: Tue, 24 Oct 2023 12:30:15 +0700 Subject: [PATCH 07/10] pagination Nas List --- system/autoload/Radius.php | 13 ------------- system/controllers/radius.php | 16 ++++++++++++++-- 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/system/autoload/Radius.php b/system/autoload/Radius.php index 2ce44219..a7a64a23 100644 --- a/system/autoload/Radius.php +++ b/system/autoload/Radius.php @@ -43,19 +43,6 @@ class Radius return ORM::for_table('radusergroup', 'radius'); } - public static function nasList($search = null) - { - if ($search == null) { - return ORM::for_table('nas', 'radius')->find_many(); - } else { - return ORM::for_table('nas', 'radius') - ->where_like('nasname', $search) - ->where_like('shortname', $search) - ->where_like('description', $search) - ->find_many(); - } - } - public static function nasAdd($name, $ip, $ports, $secret, $description = "", $type = 'other', $server = null, $community = null) { $n = Radius::getTableNas()->create(); diff --git a/system/controllers/radius.php b/system/controllers/radius.php index 90b2e5b1..95cf12ae 100644 --- a/system/controllers/radius.php +++ b/system/controllers/radius.php @@ -131,10 +131,22 @@ switch ($action) { $ui->assign('_title', "Network Access Server"); $name = _post('name'); if (empty($name)) { - $nas = Radius::nasList(); + $paginator = Paginator::build(ORM::for_table('nas', 'radius')); + $nas = ORM::for_table('nas', 'radius')->offset($paginator['startpoint'])->limit($paginator['limit'])->find_many(); } else { - $nas = Radius::nasList($name); + $paginator = Paginator::build(ORM::for_table('nas', 'radius'), [ + 'nasname' => '%'.$search.'%', + 'shortname' => '%'.$search.'%', + 'description' => '%'.$search.'%' + ]); + $nas = ORM::for_table('nas', 'radius') + ->where_like('nasname', $search) + ->where_like('shortname', $search) + ->where_like('description', $search) + ->offset($paginator['startpoint'])->limit($paginator['limit']) + ->find_many(); } + $ui->assign('paginator', $paginator); $ui->assign('name', $name); $ui->assign('nas', $nas); $ui->display('radius-nas.tpl'); From 02a68589a1a6d39930ec84ae66140e03c9884d76 Mon Sep 17 00:00:00 2001 From: Ibnu Maksum Date: Tue, 24 Oct 2023 13:38:58 +0700 Subject: [PATCH 08/10] check file if exists --- system/cron.php | 12 ++++++++++++ system/cron_reminder.php | 13 +++++++++++++ 2 files changed, 25 insertions(+) diff --git a/system/cron.php b/system/cron.php index 1b0f362f..cf897be0 100644 --- a/system/cron.php +++ b/system/cron.php @@ -35,6 +35,18 @@ if (php_sapi_name() !== 'cli') { echo "
";
 }
 
+if(!file_exists('../config.php')){
+    die("config.php file not found");
+}
+
+
+if(!file_exists('orm.php')){
+    die("orm.php file not found");
+}
+
+if(!file_exists('uploads/notifications.json')){
+    die("uploads/notifications.json file not found");
+}
 
 require_once '../config.php';
 require_once 'orm.php';
diff --git a/system/cron_reminder.php b/system/cron_reminder.php
index 5a55e180..be879dcb 100644
--- a/system/cron_reminder.php
+++ b/system/cron_reminder.php
@@ -35,6 +35,19 @@ if(php_sapi_name() !== 'cli'){
     echo "
";
 }
 
+if(!file_exists('../config.php')){
+    die("config.php file not found");
+}
+
+
+if(!file_exists('orm.php')){
+    die("orm.php file not found");
+}
+
+if(!file_exists('uploads/notifications.json')){
+    die("uploads/notifications.json file not found");
+}
+
 require_once '../config.php';
 require_once 'orm.php';
 require_once 'autoload/PEAR2/Autoload.php';

From ef256332755ff981ec4619007eaedc7a16d46d9c Mon Sep 17 00:00:00 2001
From: Ibnu Maksum 
Date: Tue, 24 Oct 2023 13:55:34 +0700
Subject: [PATCH 09/10] Assign router to NAS

---
 install/radius.sql            |  3 ++-
 system/autoload/Radius.php    | 28 +++++++++++++++-------------
 system/controllers/radius.php |  8 ++++++--
 system/updates.json           |  3 +++
 ui/ui/radius-nas-add.tpl      | 12 ++++++++++++
 ui/ui/radius-nas-edit.tpl     | 13 +++++++++++++
 ui/ui/radius-nas.tpl          |  2 ++
 7 files changed, 53 insertions(+), 16 deletions(-)

diff --git a/install/radius.sql b/install/radius.sql
index b556bbcb..fbe9879d 100644
--- a/install/radius.sql
+++ b/install/radius.sql
@@ -9,7 +9,8 @@ CREATE TABLE `nas` (
   `secret` varchar(60) COLLATE utf8mb4_general_ci NOT NULL DEFAULT 'secret',
   `server` varchar(64) COLLATE utf8mb4_general_ci DEFAULT NULL,
   `community` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL,
-  `description` varchar(200) COLLATE utf8mb4_general_ci DEFAULT 'RADIUS Client'
+  `description` varchar(200) COLLATE utf8mb4_general_ci DEFAULT 'RADIUS Client',
+  `routers` varchar(32) COLLATE utf8mb4_general_ci NOT NULL DEFAULT ''
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
 
 DROP TABLE IF EXISTS `radacct`;
diff --git a/system/autoload/Radius.php b/system/autoload/Radius.php
index a7a64a23..ad64a5f8 100644
--- a/system/autoload/Radius.php
+++ b/system/autoload/Radius.php
@@ -43,7 +43,7 @@ class Radius
         return ORM::for_table('radusergroup', 'radius');
     }
 
-    public static function nasAdd($name, $ip, $ports, $secret, $description = "", $type = 'other', $server = null, $community = null)
+    public static function nasAdd($name, $ip, $ports, $secret, $routers = "", $description = "", $type = 'other', $server = null, $community = null)
     {
         $n = Radius::getTableNas()->create();
         $n->nasname = $ip;
@@ -54,11 +54,12 @@ class Radius
         $n->description = $description;
         $n->server = $server;
         $n->community = $community;
+        $n->routers = $routers;
         $n->save();
         return $n->id();
     }
 
-    public static function nasUpdate($id, $name, $ip, $ports, $secret, $description = "", $type = 'other', $server = null, $community = null)
+    public static function nasUpdate($id, $name, $ip, $ports, $secret, $routers = "", $description = "", $type = 'other', $server = null, $community = null)
     {
         $n = Radius::getTableNas()->find_one($id);
         if (empty($n)) {
@@ -72,6 +73,7 @@ class Radius
         $n->description = $description;
         $n->server = $server;
         $n->community = $community;
+        $n->routers = $routers;
         return $n->save();
     }
 
@@ -119,17 +121,17 @@ class Radius
         }
     }
 
-    public static function customerDeactivate($username, $radiusDisconnect = true) {
-    {
-        global $radius_pass;
-        $r = Radius::getTableCustomer()->where_equal('username', $username)->whereEqual('attribute', 'Cleartext-Password')->findOne();
-        if ($r) {
-            // no need to delete, because it will make ID got higher
-            // we just change the password
-            $r->value = md5(time() . $username . $radius_pass);
-            $r->save();
-            if($radiusDisconnect)
-                return Radius::disconnectCustomer($username);
+    public static function customerDeactivate($username, $radiusDisconnect = true)
+    { {
+            global $radius_pass;
+            $r = Radius::getTableCustomer()->where_equal('username', $username)->whereEqual('attribute', 'Cleartext-Password')->findOne();
+            if ($r) {
+                // no need to delete, because it will make ID got higher
+                // we just change the password
+                $r->value = md5(time() . $username . $radius_pass);
+                $r->save();
+                if ($radiusDisconnect)
+                    return Radius::disconnectCustomer($username);
             }
         }
         return '';
diff --git a/system/controllers/radius.php b/system/controllers/radius.php
index 95cf12ae..2cf1cf36 100644
--- a/system/controllers/radius.php
+++ b/system/controllers/radius.php
@@ -21,6 +21,7 @@ switch ($action) {
     case 'nas-add':
         $ui->assign('_system_menu', 'network');
         $ui->assign('_title', "Network Access Server");
+        $ui->assign('routers', ORM::for_table('tbl_routers')->find_many());
         $ui->display('radius-nas-add.tpl');
         break;
     case 'nas-add-post':
@@ -32,6 +33,7 @@ switch ($action) {
         $server = _post('server', null);
         $community = _post('community', null);
         $description = _post('description');
+        $routers = _post('routers');
         $msg = '';
 
         if (Validator::Length($shortname, 30, 2) == false) {
@@ -54,7 +56,7 @@ switch ($action) {
             $msg .= 'NAS IP Exists
'; } if ($msg == '') { - $id = Radius::nasAdd($shortname, $nasname, $ports, $secret, $description, $type, $server, $community); + $id = Radius::nasAdd($shortname, $nasname, $ports, $secret, $routers, $description, $type, $server, $community); if ($id > 0) { r2(U . 'radius/nas-list/', 's', "NAS Added"); } else { @@ -74,6 +76,7 @@ switch ($action) { $d = ORM::for_table('nas', 'radius')->where_equal('shortname', _get('name'))->find_one(); } if ($d) { + $ui->assign('routers', ORM::for_table('tbl_routers')->find_many()); $ui->assign('d', $d); $ui->display('radius-nas-edit.tpl'); } else { @@ -91,6 +94,7 @@ switch ($action) { $server = _post('server', null); $community = _post('community', null); $description = _post('description'); + $routers = _post('routers'); $msg = ''; if (Validator::Length($shortname, 30, 2) == false) { @@ -109,7 +113,7 @@ switch ($action) { $type = null; } if ($msg == '') { - if (Radius::nasUpdate($id, $shortname, $nasname, $ports, $secret, $description, $type, $server, $community)) { + if (Radius::nasUpdate($id, $shortname, $nasname, $ports, $secret, $routers, $description, $type, $server, $community)) { r2(U . 'radius/list/', 's', "NAS Saved"); } else { r2(U . 'radius/nas-add', 'e', 'NAS NOT Exists'); diff --git a/system/updates.json b/system/updates.json index ef347220..86796d35 100644 --- a/system/updates.json +++ b/system/updates.json @@ -32,5 +32,8 @@ ], "2023.10.1" : [ "ALTER TABLE `tbl_plans` ADD `is_radius` TINYINT(1) NOT NULL DEFAULT '0' COMMENT '1 is radius' AFTER `routers`; " + ], + "2023.10.24" : [ + "ALTER TABLE `nas` ADD `routers` VARCHAR(32) NOT NULL DEFAULT '' AFTER `description`;" ] } \ No newline at end of file diff --git a/ui/ui/radius-nas-add.tpl b/ui/ui/radius-nas-add.tpl index 27c18e8b..0d788b47 100644 --- a/ui/ui/radius-nas-add.tpl +++ b/ui/ui/radius-nas-add.tpl @@ -57,6 +57,18 @@

{Lang::T('Explain Coverage of router')}

+
+ +
+ +
+

Assign NAS to Router

+
+
+ +
+ +
+

Assign NAS to Router

+
+