diff --git a/system/autoload/Radius.php b/system/autoload/Radius.php index 0ac1038..9ec99f5 100644 --- a/system/autoload/Radius.php +++ b/system/autoload/Radius.php @@ -30,7 +30,10 @@ class Radius { return ORM::for_table('nas', 'radius'); } - + public static function getTableAcct() + { + return ORM::for_table('radacct', 'radius'); + } public static function getTableCustomer() { return ORM::for_table('radcheck', 'radius'); @@ -88,9 +91,16 @@ class Radius public static function planUpSert($plan_id, $rate, $pool = null) { $rates = explode('/', $rate); + ##burst fixed + if (str_contains($rate, ' ')) { + $ratos = $rates[0].'/'.$rates[1].' '.$rates[2].'/'.$rates[3].'/'.$rates[4].'/'.$rates[5].'/'.$rates[6]; + } else { + $ratos = $rates[0].'/'.$rates[1]; + } + Radius::upsertPackage($plan_id, 'Ascend-Data-Rate', $rates[1], ':='); Radius::upsertPackage($plan_id, 'Ascend-Xmit-Rate', $rates[0], ':='); - Radius::upsertPackage($plan_id, 'Mikrotik-Rate-Limit', $rate, ':='); + Radius::upsertPackage($plan_id, 'Mikrotik-Rate-Limit', $ratos, ':='); // if ($pool != null) { // Radius::upsertPackage($plan_id, 'Framed-Pool', $pool, ':='); // } @@ -161,6 +171,8 @@ class Radius $p = Radius::getTableUserPackage()->where_equal('username', $customer['username'])->findOne(); if ($p) { // if exists + Radius::delAtribute(Radius::getTableCustomer(), 'Max-All-Session', 'username', $customer['username']); + Radius::delAtribute(Radius::getTableCustomer(), 'Max-Data', 'username', $customer['username']); $p->groupname = "plan_" . $plan['id']; $p->save(); } else { @@ -176,7 +188,7 @@ class Radius $timelimit = $plan['time_limit'] * 60 * 60; else $timelimit = $plan['time_limit'] * 60; - Radius::upsertCustomer($customer['username'], 'Expire-After', $timelimit); + Radius::upsertCustomer($customer['username'], 'Max-All-Session', $timelimit); } else if ($plan['limit_type'] == "Data_Limit") { if ($plan['data_unit'] == 'GB') $datalimit = $plan['data_limit'] . "000000000"; @@ -184,29 +196,40 @@ class Radius $datalimit = $plan['data_limit'] . "000000"; //Radius::upsertCustomer($customer['username'], 'Max-Volume', $datalimit); // Mikrotik Spesific - Radius::upsertCustomer($customer['username'], 'Mikrotik-Total-Limit', $datalimit); + Radius::upsertCustomer($customer['username'], 'Max-Data', $datalimit); } else if ($plan['limit_type'] == "Both_Limit") { if ($plan['time_unit'] == 'Hrs') $timelimit = $plan['time_limit'] * 60 * 60; else - $timelimit = $plan['time_limit'] . ":00"; + $timelimit = $plan['time_limit'] * 60; if ($plan['data_unit'] == 'GB') $datalimit = $plan['data_limit'] . "000000000"; else $datalimit = $plan['data_limit'] . "000000"; //Radius::upsertCustomer($customer['username'], 'Max-Volume', $datalimit); - Radius::upsertCustomer($customer['username'], 'Expire-After', $timelimit); + Radius::upsertCustomer($customer['username'], 'Max-All-Session', $timelimit); // Mikrotik Spesific - Radius::upsertCustomer($customer['username'], 'Mikrotik-Total-Limit', $datalimit); + Radius::upsertCustomer($customer['username'], 'Max-Data', $datalimit); + + + + } + + } else { //Radius::delAtribute(Radius::getTableCustomer(), 'Max-Volume', 'username', $customer['username']); - Radius::delAtribute(Radius::getTableCustomer(), 'Expire-After', 'username', $customer['username']); - Radius::delAtribute(Radius::getTableCustomer(), 'Mikrotik-Total-Limit', 'username', $customer['username']); + Radius::delAtribute(Radius::getTableCustomer(), 'Max-All-Session', 'username', $customer['username']); + Radius::delAtribute(Radius::getTableCustomer(), 'Max-Data', 'username', $customer['username']); } + + Radius::disconnectCustomer($customer['username']); + Radius::getTableAcct()->where_equal('username', $customer['username'])->delete_many(); + + // expired user if ($expired != null) { - //Radius::upsertCustomer($customer['username'], 'access-period', strtotime($expired) - time()); + //Radius::upsertCustomer($customer['username'], 'Max-All-Session', strtotime($expired) - time()); Radius::upsertCustomer($customer['username'], 'expiration', date('d M Y H:i:s', strtotime($expired))); // Mikrotik Spesific Radius::upsertCustomer( @@ -215,13 +238,15 @@ class Radius date('Y-m-d', strtotime($expired)) . 'T' . date('H:i:s', strtotime($expired)) . Timezone::getTimeOffset($config['timezone']) ); } else { - //Radius::delAtribute(Radius::getTableCustomer(), 'access-period', 'username', $customer['username']); + //Radius::delAtribute(Radius::getTableCustomer(), 'Max-All-Session', 'username', $customer['username']); Radius::delAtribute(Radius::getTableCustomer(), 'expiration', 'username', $customer['username']); } if ($plan['type'] == 'PPPOE') { Radius::upsertCustomerAttr($customer['username'], 'Framed-Pool', $plan['pool'], ':='); } + + return true; } return false; @@ -267,7 +292,7 @@ class Radius /** * To insert or update existing customer */ - private static function upsertCustomer($username, $attr, $value, $op = ':=') + public static function upsertCustomer($username, $attr, $value, $op = ':=') { $r = Radius::getTableCustomer()->where_equal('username', $username)->whereEqual('attribute', $attr)->find_one(); if (!$r) {