From c8d5861f2ee80f0991cfeb3a0baf92458041a200 Mon Sep 17 00:00:00 2001 From: Focuslinkstech <45756999+Focuslinkstech@users.noreply.github.com> Date: Wed, 4 Dec 2024 14:37:01 +0100 Subject: [PATCH] Patch Update: Enhancement Fixed Activation and Order History disappear when customer username is Changed --- install/phpnuxbill.sql | 2 + system/autoload/Package.php | 4 + system/controllers/customers.php | 121 +++++++++++++++++-------------- system/controllers/order.php | 15 +++- system/controllers/voucher.php | 8 +- system/updates.json | 4 + 6 files changed, 98 insertions(+), 56 deletions(-) diff --git a/install/phpnuxbill.sql b/install/phpnuxbill.sql index 92bf4053..27f75df1 100644 --- a/install/phpnuxbill.sql +++ b/install/phpnuxbill.sql @@ -72,6 +72,7 @@ DROP TABLE IF EXISTS `tbl_payment_gateway`; CREATE TABLE `tbl_payment_gateway` ( `id` int NOT NULL, `username` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `user_id` int(11) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL, `gateway` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'xendit | midtrans', `gateway_trx_id` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '', `plan_id` int NOT NULL, @@ -150,6 +151,7 @@ CREATE TABLE `tbl_transactions` ( `id` int NOT NULL, `invoice` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, `username` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `user_id` int(11) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL, `plan_name` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, `price` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, `recharged_on` date NOT NULL, diff --git a/system/autoload/Package.php b/system/autoload/Package.php index dda20884..e763be6f 100644 --- a/system/autoload/Package.php +++ b/system/autoload/Package.php @@ -283,6 +283,7 @@ class Package $t = ORM::for_table('tbl_transactions')->create(); $t->invoice = $inv = "INV-" . Package::_raid(); $t->username = $c['username']; + $t->user_id = $c['id']; $t->plan_name = $p['name_plan']; if ($gateway == 'Voucher' && User::isUserVoucher($channel)) { //its already paid @@ -398,6 +399,7 @@ class Package $t = ORM::for_table('tbl_transactions')->create(); $t->invoice = $inv = "INV-" . Package::_raid(); $t->username = $c['username']; + $t->user_id = $c['id']; $t->plan_name = $p['name_plan']; if ($gateway == 'Voucher' && User::isUserVoucher($channel)) { $t->price = 0; @@ -480,6 +482,7 @@ class Package $t = ORM::for_table('tbl_transactions')->create(); $t->invoice = $inv = "INV-" . Package::_raid(); $t->username = $customer['username']; + $t->user_id = $customer['id']; $t->plan_name = $plan['name_plan']; $t->price = $plan['price']; $t->recharged_on = date("Y-m-d"); @@ -545,6 +548,7 @@ class Package $t = ORM::for_table('tbl_transactions')->create(); $t->invoice = $inv = "INV-" . Package::_raid(); $t->username = $customer['username']; + $t->user_id = $customer['id']; $t->plan_name = 'Custom Balance'; $t->price = $plan['price']; $t->recharged_on = date("Y-m-d"); diff --git a/system/controllers/customers.php b/system/controllers/customers.php index d1798d99..5f5c8fb0 100644 --- a/system/controllers/customers.php +++ b/system/controllers/customers.php @@ -176,19 +176,19 @@ switch ($action) { $channel = $admin['fullname']; $cust = User::_info($id_customer); $plan = ORM::for_table('tbl_plans')->find_one($b['plan_id']); - $tax_enable = isset($config['enable_tax']) ? $config['enable_tax'] : 'no'; - $tax_rate_setting = isset($config['tax_rate']) ? $config['tax_rate'] : null; - $custom_tax_rate = isset($config['custom_tax_rate']) ? (float)$config['custom_tax_rate'] : null; - if ($tax_rate_setting === 'custom') { - $tax_rate = $custom_tax_rate; - } else { - $tax_rate = $tax_rate_setting; - } - if ($tax_enable === 'yes') { - $tax = Package::tax($plan['price'], $tax_rate); - } else { - $tax = 0; - } + $tax_enable = isset($config['enable_tax']) ? $config['enable_tax'] : 'no'; + $tax_rate_setting = isset($config['tax_rate']) ? $config['tax_rate'] : null; + $custom_tax_rate = isset($config['custom_tax_rate']) ? (float)$config['custom_tax_rate'] : null; + if ($tax_rate_setting === 'custom') { + $tax_rate = $custom_tax_rate; + } else { + $tax_rate = $tax_rate_setting; + } + if ($tax_enable === 'yes') { + $tax = Package::tax($plan['price'], $tax_rate); + } else { + $tax = 0; + } list($bills, $add_cost) = User::getBills($id_customer); if ($using == 'balance' && $config['enable_balance'] == 'yes') { if (!$cust) { @@ -212,7 +212,7 @@ switch ($action) { $usings[] = Lang::T('Cash'); } $abills = User::getAttributes("Bill"); - if ($tax_enable === 'yes') { + if ($tax_enable === 'yes') { $ui->assign('tax', $tax); } $ui->assign('usings', $usings); @@ -333,15 +333,30 @@ switch ($action) { if (empty($v)) { $v = 'activation'; } - if ($v == 'order') { - $v = 'order'; - $query = ORM::for_table('tbl_payment_gateway')->where('username', $customer['username'])->order_by_desc('id'); - $order = Paginator::findMany($query); - $ui->assign('order', $order); - } else if ($v == 'activation') { - $query = ORM::for_table('tbl_transactions')->where('username', $customer['username'])->order_by_desc('id'); - $activation = Paginator::findMany($query); - $ui->assign('activation', $activation); + switch ($v) { + case 'order': + $v = 'order'; + $query = ORM::for_table('tbl_payment_gateway')->where('user_id', $customer['id'])->order_by_desc('id'); + $order = Paginator::findMany($query); + + if (empty($order) || $order < 5) { + $query = ORM::for_table('tbl_payment_gateway')->where('username', $customer['username'])->order_by_desc('id'); + $order = Paginator::findMany($query); + } + + $ui->assign('order', $order); + break; + case 'activation': + $query = ORM::for_table('tbl_transactions')->where('user_id', $customer['id'])->order_by_desc('id'); + $activation = Paginator::findMany($query); + + if (empty($activation) || $activation < 5) { + $query = ORM::for_table('tbl_transactions')->where('username', $customer['username'])->order_by_desc('id'); + $activation = Paginator::findMany($query); + } + + $ui->assign('activation', $activation); + break; } $ui->assign('packages', User::_billing($customer['id'])); $ui->assign('v', $v); @@ -366,19 +381,19 @@ switch ($action) { ->where('customer_id', $id) ->find_many(); if ($d) { - if(isset($routes['3']) && $routes['3'] == 'deletePhoto'){ - if($d['photo'] != '' && strpos($d['photo'], 'default') === false){ - if(file_exists($UPLOAD_PATH.$d['photo']) && strpos($d['photo'], 'default') === false){ - unlink($UPLOAD_PATH.$d['photo']); - if(file_exists($UPLOAD_PATH.$d['photo'].'.thumb.jpg')){ - unlink($UPLOAD_PATH.$d['photo'].'.thumb.jpg'); + if (isset($routes['3']) && $routes['3'] == 'deletePhoto') { + if ($d['photo'] != '' && strpos($d['photo'], 'default') === false) { + if (file_exists($UPLOAD_PATH . $d['photo']) && strpos($d['photo'], 'default') === false) { + unlink($UPLOAD_PATH . $d['photo']); + if (file_exists($UPLOAD_PATH . $d['photo'] . '.thumb.jpg')) { + unlink($UPLOAD_PATH . $d['photo'] . '.thumb.jpg'); } } $d->photo = '/user.default.jpg'; $d->save(); $ui->assign('notify_t', 's'); $ui->assign('notify', 'You have successfully deleted the photo'); - }else{ + } else { $ui->assign('notify_t', 'e'); $ui->assign('notify', 'No photo found to delete'); } @@ -652,44 +667,44 @@ switch ($action) { if (function_exists('imagecreatetruecolor')) { $hash = md5_file($_FILES['photo']['tmp_name']); $subfolder = substr($hash, 0, 2); - $folder = $UPLOAD_PATH . DIRECTORY_SEPARATOR . 'photos'. DIRECTORY_SEPARATOR; - if(!file_exists($folder)){ + $folder = $UPLOAD_PATH . DIRECTORY_SEPARATOR . 'photos' . DIRECTORY_SEPARATOR; + if (!file_exists($folder)) { mkdir($folder); } - $folder = $UPLOAD_PATH . DIRECTORY_SEPARATOR . 'photos'. DIRECTORY_SEPARATOR. $subfolder. DIRECTORY_SEPARATOR; - if(!file_exists($folder)){ + $folder = $UPLOAD_PATH . DIRECTORY_SEPARATOR . 'photos' . DIRECTORY_SEPARATOR . $subfolder . DIRECTORY_SEPARATOR; + if (!file_exists($folder)) { mkdir($folder); } $imgPath = $folder . $hash . '.jpg'; - if (!file_exists($imgPath)){ + if (!file_exists($imgPath)) { File::resizeCropImage($_FILES['photo']['tmp_name'], $imgPath, 1600, 1600, 100); } - if (!file_exists($imgPath.'.thumb.jpg')){ - if(_post('faceDetect') == 'yes'){ - try{ + if (!file_exists($imgPath . '.thumb.jpg')) { + if (_post('faceDetect') == 'yes') { + try { $detector = new svay\FaceDetector(); $detector->setTimeout(5000); $detector->faceDetect($imgPath); - $detector->cropFaceToJpeg($imgPath.'.thumb.jpg', false); - }catch (Exception $e) { - File::makeThumb($imgPath, $imgPath.'.thumb.jpg', 200); + $detector->cropFaceToJpeg($imgPath . '.thumb.jpg', false); + } catch (Exception $e) { + File::makeThumb($imgPath, $imgPath . '.thumb.jpg', 200); } catch (Throwable $e) { - File::makeThumb($imgPath, $imgPath.'.thumb.jpg', 200); + File::makeThumb($imgPath, $imgPath . '.thumb.jpg', 200); } - }else{ - File::makeThumb($imgPath, $imgPath.'.thumb.jpg', 200); + } else { + File::makeThumb($imgPath, $imgPath . '.thumb.jpg', 200); } } - if(file_exists($imgPath)){ - if($c['photo'] != '' && strpos($c['photo'], 'default') === false){ - if(file_exists($UPLOAD_PATH.$c['photo'])){ - unlink($UPLOAD_PATH.$c['photo']); - if(file_exists($UPLOAD_PATH.$c['photo'].'.thumb.jpg')){ - unlink($UPLOAD_PATH.$c['photo'].'.thumb.jpg'); + if (file_exists($imgPath)) { + if ($c['photo'] != '' && strpos($c['photo'], 'default') === false) { + if (file_exists($UPLOAD_PATH . $c['photo'])) { + unlink($UPLOAD_PATH . $c['photo']); + if (file_exists($UPLOAD_PATH . $c['photo'] . '.thumb.jpg')) { + unlink($UPLOAD_PATH . $c['photo'] . '.thumb.jpg'); } } } - $c->photo = '/photos/'. $subfolder. '/'. $hash. '.jpg'; + $c->photo = '/photos/' . $subfolder . '/' . $hash . '.jpg'; } if (file_exists($_FILES['photo']['tmp_name'])) unlink($_FILES['photo']['tmp_name']); } else { @@ -829,9 +844,9 @@ switch ($action) { $query = ORM::for_table('tbl_customers'); $query->where("status", $filter); } - if($order == 'lastname') { + if ($order == 'lastname') { $query->order_by_expr("SUBSTR(fullname, INSTR(fullname, ' ')) $orderby"); - }else{ + } else { if ($orderby == 'asc') { $query->order_by_asc($order); } else { diff --git a/system/controllers/order.php b/system/controllers/order.php index b5f4c24f..ca2fd298 100644 --- a/system/controllers/order.php +++ b/system/controllers/order.php @@ -19,8 +19,14 @@ switch ($action) { break; case 'history': $ui->assign('_system_menu', 'history'); - $query = ORM::for_table('tbl_payment_gateway')->where('username', $user['username'])->order_by_desc('id'); + $query = ORM::for_table('tbl_payment_gateway')->where('user_id', $user['id'])->order_by_desc('id'); $d = Paginator::findMany($query); + + if (empty($order) || $order < 5) { + $query = ORM::for_table('tbl_payment_gateway')->where('username', $user['username'])->order_by_desc('id'); + $d = Paginator::findMany($query); + } + $ui->assign('d', $d); $ui->assign('_title', Lang::T('Order History')); run_hook('customer_view_order_history'); #HOOK @@ -329,6 +335,7 @@ switch ($action) { //sender $d = ORM::for_table('tbl_payment_gateway')->create(); $d->username = $user['username']; + $d->user_id = $user['id']; $d->gateway = $target['username']; $d->plan_id = $plan['id']; $d->plan_name = $plan['name_plan']; @@ -348,6 +355,7 @@ switch ($action) { //receiver $d = ORM::for_table('tbl_payment_gateway')->create(); $d->username = $target['username']; + $d->user_id = $target['id']; $d->gateway = $user['username']; $d->plan_id = $plan['id']; $d->plan_name = $plan['name_plan']; @@ -438,7 +446,7 @@ switch ($action) { } case 'buy': $gateway = _post('gateway'); - if($gateway == 'balance') { + if ($gateway == 'balance') { unset($_SESSION['gateway']); r2(U . 'order/pay/' . $routes[2] . '/' . $routes[3]); } @@ -484,6 +492,7 @@ switch ($action) { } $d = ORM::for_table('tbl_payment_gateway')->create(); $d->username = $user['username']; + $d->user_id = $user['id']; $d->gateway = $gateway; $d->plan_id = 0; $d->plan_name = 'Custom'; @@ -547,6 +556,7 @@ switch ($action) { if (empty($id)) { $d = ORM::for_table('tbl_payment_gateway')->create(); $d->username = $user['username']; + $d->user_id = $user['id']; $d->gateway = $gateway; $d->plan_id = $plan['id']; $d->plan_name = $plan['name_plan']; @@ -569,6 +579,7 @@ switch ($action) { $id = $d->id(); } else { $d->username = $user['username']; + $d->user_id = $user['id']; $d->gateway = $gateway; $d->plan_id = $plan['id']; $d->plan_name = $plan['name_plan']; diff --git a/system/controllers/voucher.php b/system/controllers/voucher.php index 46da67a6..1c7e0f4b 100644 --- a/system/controllers/voucher.php +++ b/system/controllers/voucher.php @@ -41,10 +41,16 @@ switch ($action) { case 'list-activated': $ui->assign('_system_menu', 'list-activated'); - $query = ORM::for_table('tbl_transactions')->where('username', $user['username'])->order_by_desc('id'); + $query = ORM::for_table('tbl_transactions')->where('user_id', $user['id'])->order_by_desc('id'); $d = Paginator::findMany($query); + if (empty($d) || $d < 5) { + $query = ORM::for_table('tbl_transactions')->where('username', $user['username'])->order_by_desc('id'); + $d = Paginator::findMany($query); + } + $ui->assign('d', $d); + $ui->assign('_title', Lang::T('Activation History')); run_hook('customer_view_activation_list'); #HOOK $ui->display('customer/activation-list.tpl'); diff --git a/system/updates.json b/system/updates.json index c30a749d..dd97c432 100644 --- a/system/updates.json +++ b/system/updates.json @@ -174,5 +174,9 @@ ], "2024.10.31" : [ "ALTER TABLE `tbl_customers` ADD `photo` VARCHAR(128) NOT NULL DEFAULT '/user.default.jpg' AFTER `password`;" + ], + "2024.12.5" : [ + "ALTER TABLE `tbl_transactions` ADD `user_id` INT(11) NULL AFTER `username`;", + "ALTER TABLE `tbl_payment_gateway` ADD `user_id` INT(11) NULL AFTER `username`;" ] } \ No newline at end of file