edit customer radius

This commit is contained in:
Ibnu Maksum 2023-10-04 15:41:48 +07:00
parent e87623d918
commit 0ee60eff3d
No known key found for this signature in database
GPG Key ID: 7FC82848810579E5
3 changed files with 117 additions and 84 deletions

View File

@ -134,6 +134,14 @@ class Radius
} }
return false; return false;
} }
public static function planDelete($plan_id){
// Delete Plan
Radius::getTablePackage()->where_equal('plan_id', "plan_".$plan_id)->delete_many();
// Delete User Plan
Radius::getTableUserPackage()->where_equal('groupname', "plan_".$plan_id)->delete_many();
}
public static function customerChangeUsername($from, $to){ public static function customerChangeUsername($from, $to){
$c = Radius::getTableCustomer()->where_equal('username', $from)->findMany(); $c = Radius::getTableCustomer()->where_equal('username', $from)->findMany();
if ($c) { if ($c) {
@ -162,6 +170,11 @@ class Radius
} }
} }
public static function customerDelete($username){
Radius::getTableCustomer()->where_equal('username', $username)->delete_many();
Radius::getTableUserPackage()->where_equal('username', $username)->delete_many();
}
/** /**
* When add a plan to Customer, use this * When add a plan to Customer, use this
*/ */

View File

@ -49,8 +49,6 @@ switch ($action) {
$id_customer = $routes['2']; $id_customer = $routes['2'];
$b = ORM::for_table('tbl_user_recharges')->where('customer_id', $id_customer)->find_one(); $b = ORM::for_table('tbl_user_recharges')->where('customer_id', $id_customer)->find_one();
if ($b) { if ($b) {
$mikrotik = Mikrotik::info($b['routers']);
$client = Mikrotik::getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']);
if (Package::rechargeUser($id_customer, $b['routers'], $b['plan_id'], "Recharge", $admin['fullname'])) { if (Package::rechargeUser($id_customer, $b['routers'], $b['plan_id'], "Recharge", $admin['fullname'])) {
r2(U . 'customers/view/' . $id_customer, 's', 'Success Recharge Customer'); r2(U . 'customers/view/' . $id_customer, 's', 'Success Recharge Customer');
} else { } else {
@ -62,22 +60,30 @@ switch ($action) {
$id_customer = $routes['2']; $id_customer = $routes['2'];
$b = ORM::for_table('tbl_user_recharges')->where('customer_id', $id_customer)->find_one(); $b = ORM::for_table('tbl_user_recharges')->where('customer_id', $id_customer)->find_one();
if ($b) { if ($b) {
$mikrotik = Mikrotik::info($b['routers']); $p = ORM::for_table('tbl_plans')->where('id', $b['plan_id'])->where('enabled', '1')->find_one();
$client = Mikrotik::getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']); if ($p) {
if ($b['type'] == 'Hotspot') { if ($p['is_radius']) {
Mikrotik::removeHotspotUser($client, $b['username']); //TODO: disconnect using radius
Mikrotik::removeHotspotActiveUser($client, $b['username']); Radius::customerDeactivate(ORM::for_table('tbl_customers')->find_one($id_customer));
} else if ($b['type'] == 'PPPOE') { } else {
Mikrotik::removePpoeUser($client, $b['username']); $mikrotik = Mikrotik::info($b['routers']);
Mikrotik::removePpoeActive($client, $b['username']); $client = Mikrotik::getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']);
if ($b['type'] == 'Hotspot') {
Mikrotik::removeHotspotUser($client, $b['username']);
Mikrotik::removeHotspotActiveUser($client, $b['username']);
} else if ($b['type'] == 'PPPOE') {
Mikrotik::removePpoeUser($client, $b['username']);
Mikrotik::removePpoeActive($client, $b['username']);
}
}
$b->status = 'off';
$b->expiration = date('Y-m-d');
$b->time = date('H:i:s');
$b->save();
_log('Admin ' . $admin['username'] . ' Deactivate ' . $b['namebp'] . ' for ' . $b['username'], 'User', $b['customer_id']);
Message::sendTelegram('Admin ' . $admin['username'] . ' Deactivate ' . $b['namebp'] . ' for u' . $b['username']);
r2(U . 'customers/view/' . $id_customer, 's', 'Success deactivate customer to Mikrotik');
} }
$b->status = 'off';
$b->expiration = date('Y-m-d');
$b->time = date('H:i:s');
$b->save();
_log('Admin ' . $admin['username'] . ' Deactivate '.$b['namebp'].' for '.$b['username'], 'User', $b['customer_id']);
Message::sendTelegram('Admin ' . $admin['username'] . ' Deactivate '.$b['namebp'].' for u'.$b['username']);
r2(U . 'customers/view/' . $id_customer, 's', 'Success deactivate customer to Mikrotik');
} }
r2(U . 'customers/view/' . $id_customer, 'e', 'Cannot find active plan'); r2(U . 'customers/view/' . $id_customer, 'e', 'Cannot find active plan');
break; break;
@ -85,17 +91,22 @@ switch ($action) {
$id_customer = $routes['2']; $id_customer = $routes['2'];
$b = ORM::for_table('tbl_user_recharges')->where('customer_id', $id_customer)->where('status', 'on')->find_one(); $b = ORM::for_table('tbl_user_recharges')->where('customer_id', $id_customer)->where('status', 'on')->find_one();
if ($b) { if ($b) {
$mikrotik = Mikrotik::info($b['routers']);
$client = Mikrotik::getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']);
$c = ORM::for_table('tbl_customers')->find_one($id_customer); $c = ORM::for_table('tbl_customers')->find_one($id_customer);
$p = ORM::for_table('tbl_plans')->where('id', $b['plan_id'])->where('enabled', '1')->find_one(); $p = ORM::for_table('tbl_plans')->where('id', $b['plan_id'])->where('enabled', '1')->find_one();
if ($p) { if ($p) {
if ($b['type'] == 'Hotspot') { if ($p['is_radius']) {
Mikrotik::addHotspotUser($client, $p, $c); Radius::customerAddPlan($c, $p);
} else if ($b['type'] == 'PPPOE') { r2(U . 'customers/view/' . $id_customer, 's', 'Success sync customer to Radius');
Mikrotik::addPpoeUser($client, $p, $c); } else {
$mikrotik = Mikrotik::info($b['routers']);
$client = Mikrotik::getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']);
if ($b['type'] == 'Hotspot') {
Mikrotik::addHotspotUser($client, $p, $c);
} else if ($b['type'] == 'PPPOE') {
Mikrotik::addPpoeUser($client, $p, $c);
}
r2(U . 'customers/view/' . $id_customer, 's', 'Success sync customer to Mikrotik');
} }
r2(U . 'customers/view/' . $id_customer, 's', 'Success sync customer to Mikrotik');
} else { } else {
r2(U . 'customers/view/' . $id_customer, 'e', 'Customer plan is inactive'); r2(U . 'customers/view/' . $id_customer, 'e', 'Customer plan is inactive');
} }
@ -163,28 +174,29 @@ switch ($action) {
if ($d) { if ($d) {
$c = ORM::for_table('tbl_user_recharges')->where('username', $d['username'])->find_one(); $c = ORM::for_table('tbl_user_recharges')->where('username', $d['username'])->find_one();
if ($c) { if ($c) {
$mikrotik = Mikrotik::info($c['routers']); $p = ORM::for_table('tbl_plans')->find_one($c['plan_id']);
if ($c['type'] == 'Hotspot') { if ($p['is_radius']) {
if (!$config['radius_enable']) { Radius::customerDelete($d['username']);
} else {
$mikrotik = Mikrotik::info($c['routers']);
if ($c['type'] == 'Hotspot') {
$client = Mikrotik::getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']); $client = Mikrotik::getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']);
Mikrotik::removeHotspotUser($client, $d['username']); Mikrotik::removeHotspotUser($client, $d['username']);
Mikrotik::removeHotspotActiveUser($client, $d['username']); Mikrotik::removeHotspotActiveUser($client, $d['username']);
} } else {
} else {
if (!$config['radius_enable']) {
$client = Mikrotik::getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']); $client = Mikrotik::getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']);
Mikrotik::removePpoeUser($client, $d['username']); Mikrotik::removePpoeUser($client, $d['username']);
Mikrotik::removePpoeActive($client, $d['username']); Mikrotik::removePpoeActive($client, $d['username']);
} }
} try {
try { $d->delete();
$d->delete(); } catch (Exception $e) {
} catch (Exception $e) { } catch (Throwable $e) {
} catch (Throwable $e) { }
} try {
try { $c->delete();
$c->delete(); } catch (Exception $e) {
} catch (Exception $e) { }
} }
} else { } else {
try { try {
@ -272,61 +284,67 @@ switch ($action) {
$msg .= $_L['Data_Not_Found'] . '<br>'; $msg .= $_L['Data_Not_Found'] . '<br>';
} }
if ($d['username'] != $username) { $oldusername = $d['username'];
$oldPppoePassword = $d['password'];
$oldPassPassword = $d['pppoe_password'];
$userDiff = false;
$pppoeDiff = false;
$passDiff = false;
if ($oldusername != $username) {
$c = ORM::for_table('tbl_customers')->where('username', $username)->find_one(); $c = ORM::for_table('tbl_customers')->where('username', $username)->find_one();
if ($c) { if ($c) {
$msg .= $_L['account_already_exist'] . '<br>'; $msg .= $_L['account_already_exist'] . '<br>';
} }
$userDiff = true;
}
if ($oldPppoePassword != $pppoe_password) {
$pppoeDiff = true;
}
if ($password != '' && $oldPassPassword != $password) {
$passDiff = true;
} }
if ($msg == '') { if ($msg == '') {
$c = ORM::for_table('tbl_user_recharges')->where('username', $username)->find_one(); if ($userDiff) {
if ($c) { $d->username = $username;
$mikrotik = Mikrotik::info($c['routers']); }
if ($c['type'] == 'Hotspot') { if ($password != '') {
if (!$config['radius_enable']) { $d->password = $password;
$client = Mikrotik::getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']); }
Mikrotik::setHotspotUser($client, $c['username'], $password); $d->pppoe_password = $pppoe_password;
Mikrotik::removeHotspotActiveUser($client, $user['username']); $d->fullname = $fullname;
} $d->email = $email;
$d->address = $address;
$d->password = $password; $d->phonenumber = $phonenumber;
$d->save(); $d->save();
} else { if ($userDiff || $pppoeDiff || $passDiff) {
if (!$config['radius_enable']) { $c = ORM::for_table('tbl_user_recharges')->where('username', ($userDiff) ? $oldusername : $username)->find_one();
$client = Mikrotik::getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']); if ($c) {
if (!empty($d['pppoe_password'])) { $c->username = $username;
Mikrotik::setPpoeUser($client, $c['username'], $d['pppoe_password']); $c->save();
} else { $p = ORM::for_table('tbl_plans')->find_one($c['plan_id']);
Mikrotik::setPpoeUser($client, $c['username'], $password); if ($p['is_radius']) {
if($userDiff){
Radius::customerChangeUsername($oldusername, $username);
}
Radius::customerAddPlan($d, $p);
}else{
$mikrotik = Mikrotik::info($c['routers']);
if ($c['type'] == 'Hotspot') {
$client = Mikrotik::getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']);
Mikrotik::setHotspotUser($client, $c['username'], $password);
Mikrotik::removeHotspotActiveUser($client, $d['username']);
} else {
$client = Mikrotik::getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']);
if (!empty($d['pppoe_password'])) {
Mikrotik::setPpoeUser($client, $c['username'], $d['pppoe_password']);
} else {
Mikrotik::setPpoeUser($client, $c['username'], $password);
}
Mikrotik::removePpoeActive($client, $d['username']);
} }
Mikrotik::removePpoeActive($client, $user['username']);
} }
$d->password = $password;
$d->save();
} }
$d->username = $username;
if ($password != '') {
$d->password = $password;
}
$d->pppoe_password = $pppoe_password;
$d->fullname = $fullname;
$d->email = $email;
$d->address = $address;
$d->phonenumber = $phonenumber;
$d->save();
} else {
$d->username = $username;
if ($password != '') {
$d->password = $password;
}
$d->fullname = $fullname;
$d->pppoe_password = $pppoe_password;
$d->email = $email;
$d->address = $address;
$d->phonenumber = $phonenumber;
$d->save();
} }
r2(U . 'customers/list', 's', 'User Updated Successfully'); r2(U . 'customers/list', 's', 'User Updated Successfully');
} else { } else {

View File

@ -101,6 +101,7 @@ foreach ($d as $ds) {
$p = ORM::for_table('tbl_plans')->where('id', $u['plan_id'])->find_one(); $p = ORM::for_table('tbl_plans')->where('id', $u['plan_id'])->find_one();
if ($_c['radius_enable']) { if ($_c['radius_enable']) {
//TODO: disconnect using radius
Radius::customerDeactivate($c); Radius::customerDeactivate($c);
}else{ }else{
$client = Mikrotik::getClient($m['ip_address'], $m['username'], $m['password']); $client = Mikrotik::getClient($m['ip_address'], $m['username'], $m['password']);
@ -150,6 +151,7 @@ foreach ($d as $ds) {
$p = ORM::for_table('tbl_plans')->where('id', $u['plan_id'])->find_one(); $p = ORM::for_table('tbl_plans')->where('id', $u['plan_id'])->find_one();
if ($_c['radius_enable']) { if ($_c['radius_enable']) {
//TODO: disconnect using radius
Radius::customerDeactivate($c); Radius::customerDeactivate($c);
}else{ }else{
$client = Mikrotik::getClient($m['ip_address'], $m['username'], $m['password']); $client = Mikrotik::getClient($m['ip_address'], $m['username'], $m['password']);