Compare commits

...

46 Commits

Author SHA1 Message Date
9712d411f5 Merge branch 'Development' 2024-04-23 11:52:04 +07:00
8dc7707b3a fix pagination Voucher 2024-04-23 11:51:34 +07:00
18bdf185d6 Update plan.php 2024-04-23 11:32:58 +07:00
2a70236576 Merge pull request #181 from agstrxyz/patch-10
Update plan.php
2024-04-23 11:31:52 +07:00
7b40fc850e Merge pull request #180 from freeispradius/master
Update to case csv. added columns
2024-04-23 11:31:18 +07:00
ad411e2223 Update plan.php 2024-04-23 09:24:47 +07:00
45a6085205 Update case csv-prepaid
changed the url
2024-04-22 23:33:54 +03:00
91fe5a4b46 Update to case csv. added columns
separated case csv now we will have one for all customers and another one for prepaid users.
for all customers csv will be downloaded from list and prepaid csv will be from prepaid users.
Also added columns instead of the previous one
2024-04-22 23:31:36 +03:00
c0cd197df2 Fix Extend Confirmation long text 2024-04-22 14:02:33 +07:00
3e89efcf46 add Customer Fullname 2024-04-22 11:33:21 +07:00
31b710e03c add username to telegram notif 2024-04-22 10:30:01 +07:00
4d6041f614 send Telegram for Extend 2024-04-22 10:30:01 +07:00
fbaf9dbe3f Merge pull request #179 from ahmadhusein17/patch-21
Indonesian Language Improvement
2024-04-22 09:51:18 +07:00
a4f5c1d422 Update indonesia.json
Improvements to the use of letter size in the language and minor improvements
2024-04-21 21:46:31 +07:00
d08137e0c3 Merge branch 'master' into Development 2024-04-21 20:55:42 +07:00
961f4770c0 Update cron_reminder.php 2024-04-21 20:54:10 +07:00
2d6fe9526c Update cron_reminder.php 2024-04-21 20:54:10 +07:00
bebc20e39f Update cron_reminder.php 2024-04-21 20:54:10 +07:00
964c141668 Update cron_reminder.php 2024-04-21 20:54:10 +07:00
88bbf3ed35 fix lang.php 2024-04-21 20:54:10 +07:00
bf00b21786 fix Lang 2024-04-21 20:54:10 +07:00
0e81db5ada indonesia lang 2024-04-21 20:54:10 +07:00
c0382c569a Update cron_reminder.php 2024-04-21 20:54:10 +07:00
c32542afda Update cron_reminder.php 2024-04-21 20:54:10 +07:00
8d17cd3f90 fix [[expired_date]] 2024-04-21 20:54:10 +07:00
6dafd549d9 Restore old cron 2024-04-21 20:54:10 +07:00
20c4be9121 As exp dev says, if it works, dont touch it 2024-04-21 20:54:10 +07:00
2f757f1006 Update cron_reminder.php 2024-04-21 20:54:10 +07:00
0ce112dc70 order activated by desc 2024-04-21 20:54:10 +07:00
ea3f5caf59 Update voucher.tpl 2024-04-21 20:54:09 +07:00
5a5032bbcc fix [[expired_date]] 2024-04-21 10:59:20 +07:00
0d44fec338 Restore old cron 2024-04-21 10:54:04 +07:00
7396c2f1d4 As exp dev says, if it works, dont touch it 2024-04-21 10:54:04 +07:00
73cf67b4cb Update cron_reminder.php 2024-04-21 10:54:04 +07:00
9e0f74926c Update cron_reminder.php 2024-04-21 10:54:04 +07:00
09af3474a9 Update cron.php 2024-04-21 10:54:04 +07:00
9b8f1fedf8 Merge pull request #178 from ahmadhusein17/master
restore cron.php and cron_reminder.php
2024-04-21 10:48:11 +07:00
05c77df315 order activated by desc 2024-04-19 14:43:06 +07:00
e88f662d8c Merge pull request #177 from ahmadhusein17/Development
Update voucher.tpl
2024-04-19 13:37:39 +07:00
2956cc2315 Update cron_reminder.php 2024-04-19 11:23:50 +07:00
3c8b2c906d Update cron_reminder.php 2024-04-19 11:22:34 +07:00
acded8eb29 Update cron.php 2024-04-19 11:21:44 +07:00
b63aeb5298 Update voucher.tpl 2024-04-16 14:10:40 +07:00
115a5c81a7 Fix variable cron for notification 2024-04-16 13:53:29 +07:00
ad565c15ca Remove question mark 2024-04-15 15:39:43 +07:00
a0c5cec31e Fix Notifications Page 2024-04-15 15:36:18 +07:00
19 changed files with 991 additions and 276 deletions

View File

@ -2,6 +2,19 @@
# CHANGELOG
## 2024.4.23
- Fix Pagination Voucher
- Fix Languange Translation
- Fix Alert Confirmation for requesting Extend
- Send Telegram Notification when Customer request to extend expiration
- prepaid users export list by @freeispradius
- fix show voucher by @agstrxyz
## 2024.4.21
- Restore old cron
## 2024.4.15
- Postpaid Customer can request extends expiration day if it enabled

View File

@ -222,7 +222,7 @@ function Lang($key)
function alphanumeric($str, $tambahan = "")
{
return preg_replace("/[^a-zA-Z0-9" . $tambahan . "]+/", "", $str);
return Text::alphanumeric($str, $tambahan);
}
function showResult($success, $message = '', $result = [], $meta = [])

View File

@ -11,7 +11,9 @@ class Lang
public static function T($key)
{
global $_L, $lan_file, $config;
$_L = $_SESSION['Lang'];
if(is_array($_SESSION['Lang'])){
$_L = array_merge($_L, $_SESSION['Lang']);
}
$key = preg_replace('/\s+/', ' ', $key);
if (!empty($_L[$key])) {
return $_L[$key];

View File

@ -121,7 +121,7 @@ class Message
public static function sendPackageNotification($customer, $package, $price, $message, $via)
{
global $u;
global $user_recharge;
if(empty($message)){
return "";
}
@ -141,8 +141,10 @@ class Message
}else{
$msg = str_replace('[[bills]]', '', $msg);
}
if ($u) {
$msg = str_replace('[[expired_date]]', Lang::dateAndTimeFormat($u['expiration'], $u['time']), $msg);
if ($user_recharge) {
$msg = str_replace('[[expired_date]]', Lang::dateAndTimeFormat($user_recharge['expiration'], $user_recharge['time']), $msg);
}else{
$msg = str_replace('[[expired_date]]', "", $msg);
}
if (
!empty($customer['phonenumber']) && strlen($customer['phonenumber']) > 5

64
system/autoload/Text.php Normal file
View File

@ -0,0 +1,64 @@
<?php
/**
* PHP Mikrotik Billing (https://github.com/hotspotbilling/phpnuxbill/)
* by https://t.me/ibnux
*
* This file is for Text Transformation
**/
class Text
{
public static function toHex($string)
{
return "\x" . implode("\x", str_split(array_shift(unpack('H*', $string)), 2));
}
public static function alphanumeric($str, $tambahan = "")
{
return preg_replace("/[^a-zA-Z0-9" . $tambahan . "]+/", "", $str);
}
public static function numeric($str)
{
return preg_replace("/[^0-9]+/", "", $str);
}
public static function ucWords($text)
{
return ucwords(str_replace('_', ' ', $text));
}
public static function randomUpLowCase($text)
{
$jml = strlen($text);
$result = '';
for ($i = 0; $i < $jml; $i++) {
if (rand(0, 99) % 2) {
$result .= strtolower(substr($text, $i, 1));
} else {
$result .= substr($text, $i, 1);
}
}
return $result;
}
public static function maskText($text){
$len = strlen($text);
if($len < 3){
return "***";
}else if($len<5){
return substr($text,0,1)."***".substr($text,-1,1);
}else if($len<8){
return substr($text,0,2)."***".substr($text,-2,2);
}else{
return substr($text,0,4)."******".substr($text,-3,3);
}
}
public static function sanitize($str)
{
return preg_replace("/[^A-Za-z0-9]/", '_', $str);;
}
}

View File

@ -25,19 +25,19 @@ switch ($action) {
if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin'])) {
_alert(Lang::T('You do not have permission to access this page'), 'danger', "dashboard");
}
$cs = ORM::for_table('tbl_customers')
->select('tbl_customers.id', 'id')
->select('tbl_customers.username', 'username')
->select('fullname')
->select('address')
->select('phonenumber')
->select('email')
->select('balance')
->select('namebp')
->select('routers')
->select('status')
->select('method', 'Payment')
->join('tbl_user_recharges', array('tbl_customers.id', '=', 'tbl_user_recharges.customer_id'))
->order_by_asc('tbl_customers.id')->find_array();
->select('service_type')
->order_by_asc('tbl_customers.id')
->find_array();
$h = false;
set_time_limit(-1);
header('Pragma: public');
@ -46,18 +46,105 @@ switch ($action) {
header("Content-type: text/csv");
header('Content-Disposition: attachment;filename="phpnuxbill_customers_' . date('Y-m-d_H_i') . '.csv"');
header('Content-Transfer-Encoding: binary');
foreach ($cs as $c) {
$ks = [];
$vs = [];
foreach ($c as $k => $v) {
$ks[] = $k;
$vs[] = $v;
}
$headers = [
'id',
'username',
'fullname',
'address',
'phonenumber',
'email',
'balance',
'service_type',
];
if (!$h) {
echo '"' . implode('";"', $ks) . "\"\n";
echo '"' . implode('","', $headers) . "\"\n";
$h = true;
}
echo '"' . implode('";"', $vs) . "\"\n";
foreach ($cs as $c) {
$row = [
$c['id'],
$c['username'],
$c['fullname'],
$c['address'],
$c['phonenumber'],
$c['email'],
$c['balance'],
$c['service_type'],
];
echo '"' . implode('","', $row) . "\"\n";
}
break;
//case csv-prepaid can be moved later to (plan.php) php file dealing with prepaid users
case 'csv-prepaid':
if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin'])) {
_alert(Lang::T('You do not have permission to access this page'), 'danger', "dashboard");
}
$cs = ORM::for_table('tbl_customers')
->select('tbl_customers.id', 'id')
->select('tbl_customers.username', 'username')
->select('fullname')
->select('address')
->select('phonenumber')
->select('email')
->select('balance')
->select('service_type')
->select('namebp')
->select('routers')
->select('status')
->select('method', 'Payment')
->join('tbl_user_recharges', array('tbl_customers.id', '=', 'tbl_user_recharges.customer_id'))
->order_by_asc('tbl_customers.id')
->find_array();
$h = false;
set_time_limit(-1);
header('Pragma: public');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header("Content-type: text/csv");
header('Content-Disposition: attachment;filename="phpnuxbill_prepaid_users' . date('Y-m-d_H_i') . '.csv"');
header('Content-Transfer-Encoding: binary');
$headers = [
'id',
'username',
'fullname',
'address',
'phonenumber',
'email',
'balance',
'service_type',
'namebp',
'routers',
'status',
'Payment'
];
if (!$h) {
echo '"' . implode('","', $headers) . "\"\n";
$h = true;
}
foreach ($cs as $c) {
$row = [
$c['id'],
$c['username'],
$c['fullname'],
$c['address'],
$c['phonenumber'],
$c['email'],
$c['balance'],
$c['service_type'],
$c['namebp'],
$c['routers'],
$c['status'],
$c['Payment']
];
echo '"' . implode('","', $row) . "\"\n";
}
break;
case 'add':

View File

@ -142,31 +142,39 @@ if (isset($_GET['recharge']) && !empty($_GET['recharge'])) {
}
}
if ($tur['status'] != 'on') {
$days = $config['extend_days'];
$expiration = date('Y-m-d', strtotime(" +$days day"));
$tur->expiration = $expiration;
$tur->status = "on";
$tur->save();
App::setToken(_get('stoken'), $id);
if ($tur['routers'] != 'radius') {
$mikrotik = Mikrotik::info($tur['routers']);
$client = Mikrotik::getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']);
$router = $tur['routers'];
}
$p = ORM::for_table('tbl_plans')->findOne($tur['plan_id']);
$c = ORM::for_table('tbl_customers')->findOne($tur['customer_id']);
if(!$p){
r2(U . 'home', '3', "Plan Not Found");
}
if ($tur['routers'] == 'radius') {
Radius::customerAddPlan($c, $p, $tur['expiration'] . ' ' . $tur['time']);
Radius::customerAddPlan($user, $p, $tur['expiration'] . ' ' . $tur['time']);
} else {
if ($tur['type'] == 'Hotspot') {
Mikrotik::addHotspotUser($client, $p, $c);
Mikrotik::removeHotspotUser($client, $user['username']);
Mikrotik::addHotspotUser($client, $p, $user);
} else if ($tur['type'] == 'PPPOE') {
Mikrotik::addPpoeUser($client, $p, $c);
Mikrotik::removePpoeUser($client, $user['username']);
Mikrotik::addPpoeUser($client, $p, $user);
}
}
// make customer cannot extend again
$days = $config['extend_days'];
$expiration = date('Y-m-d', strtotime(" +$days day"));
$tur->expiration = $expiration;
$tur->status = "on";
$tur->save();
App::setToken(_get('stoken'), $id);
file_put_contents($path, $m);
_log("Customer $tur[customer_id] $tur[username] extend for $days days", "Customer", $user['id']);
Message::sendTelegram("#u$user[username] #extend #".$p['type']." \n" . $p['name_plan'] .
"\nLocation: " . $p['routers'] .
"\nCustomer: " . $user['fullname'] .
"\nNew Expired: " . Lang::dateAndTimeFormat($expiration, $tur['time']));
r2(U . 'home', 's', "Extend until $expiration");
}else{
r2(U . 'home', 'e', "Plan is not expired");

View File

@ -325,18 +325,13 @@ switch ($action) {
case 'voucher':
$ui->assign('_title', Lang::T('Vouchers'));
$limit = 10;
$page = _get('p', 0);
$pageNow = $page * $limit;
$search = _req('search');
if ($search != '') {
if (in_array($admin['user_type'], ['SuperAdmin', 'Admin'])) {
$d = ORM::for_table('tbl_plans')->where('enabled', '1')
$query = ORM::for_table('tbl_plans')->where('enabled', '1')
->join('tbl_voucher', array('tbl_plans.id', '=', 'tbl_voucher.id_plan'))
->where_like('tbl_voucher.code', '%' . $search . '%')
->offset($pageNow)
->limit($limit)
->findArray();
->where_like('tbl_voucher.code', '%' . $search . '%');
$d = Paginator::findMany($query, ["search" => $search]);
} else if ($admin['user_type'] == 'Agent') {
$sales = [];
$sls = ORM::for_table('tbl_users')->select('id')->where('root', $admin['id'])->findArray();
@ -344,21 +339,17 @@ switch ($action) {
$sales[] = $s['id'];
}
$sales[] = $admin['id'];
$d = ORM::for_table('tbl_plans')
$query = ORM::for_table('tbl_plans')
->join('tbl_voucher', array('tbl_plans.id', '=', 'tbl_voucher.id_plan'))
->where_in('generated_by', $sales)
->where_like('tbl_voucher.code', '%' . $search . '%')
->offset($pageNow)
->limit($limit)
->findArray();
->where_like('tbl_voucher.code', '%' . $search . '%');
$d = Paginator::findMany($query, ["search" => $search]);
}
} else {
if (in_array($admin['user_type'], ['SuperAdmin', 'Admin'])) {
$d = ORM::for_table('tbl_plans')->where('enabled', '1')
->join('tbl_voucher', array('tbl_plans.id', '=', 'tbl_voucher.id_plan'))
->offset($pageNow)
->limit($limit)
->findArray();
$query = ORM::for_table('tbl_plans')->where('enabled', '1')
->join('tbl_voucher', array('tbl_plans.id', '=', 'tbl_voucher.id_plan'));
$d = Paginator::findMany($query);
} else if ($admin['user_type'] == 'Agent') {
$sales = [];
$sls = ORM::for_table('tbl_users')->select('id')->where('root', $admin['id'])->findArray();
@ -366,12 +357,10 @@ switch ($action) {
$sales[] = $s['id'];
}
$sales[] = $admin['id'];
$d = ORM::for_table('tbl_plans')
$query = ORM::for_table('tbl_plans')
->join('tbl_voucher', array('tbl_plans.id', '=', 'tbl_voucher.id_plan'))
->where_in('generated_by', $sales)
->offset($pageNow)
->limit($limit)
->findArray();
->where_in('generated_by', $sales);
$d = Paginator::findMany($query);
}
}
// extract admin
@ -581,6 +570,7 @@ switch ($action) {
} else if ($voucher_format == 'rand') {
$code = Lang::randomUpLowCase($code);
}
die($code);
$d = ORM::for_table('tbl_voucher')->create();
$d->type = $type;
$d->routers = $server;
@ -621,7 +611,7 @@ switch ($action) {
if (!$voucher) {
r2(U . 'plan/voucher/', 'e', Lang::T('Voucher Not Found'));
}
$plan = ORM::for_table('tbl_plans')->find_one($d['id_plan']);
$plan = ORM::for_table('tbl_plans')->find_one($voucher['id_plan']);
if ($voucher && $plan) {
$content = Lang::pad($config['CompanyName'], ' ', 2) . "\n";
$content .= Lang::pad($config['address'], ' ', 2) . "\n";

View File

@ -40,7 +40,7 @@ switch ($action) {
case 'list-activated':
$ui->assign('_system_menu', 'list-activated');
$query = ORM::for_table('tbl_transactions')->where('username', $user['username'])->order_by_asc('id');
$query = ORM::for_table('tbl_transactions')->where('username', $user['username'])->order_by_desc('id');
$d = Paginator::findMany($query);
$ui->assign('d', $d);

View File

@ -1,99 +1,147 @@
<?php
include "../init.php";
$isCli = (php_sapi_name() !== 'cli') ? false : true;
if (!$isCli) {
$isCli = true;
if (php_sapi_name() !== 'cli') {
$isCli = false;
echo "<pre>";
}
echo "PHP Time\t" . date('Y-m-d H:i:s') . "\n";
$res = ORM::raw_execute('SELECT NOW() AS WAKTU;');
$statement = ORM::get_last_statement();
$rows = [];
$rows = array();
while ($row = $statement->fetch(PDO::FETCH_ASSOC)) {
echo "MYSQL Time\t" . $row['WAKTU'] . "\n";
}
$_c = $config;
$textExpired = Lang::getNotifText('expired');
$recharges = ORM::for_table('tbl_user_recharges')
->where('status', 'on')
->where_lte('expiration', date("Y-m-d"))
->find_many();
$d = ORM::for_table('tbl_user_recharges')->where('status', 'on')->where_lte('expiration', date("Y-m-d"))->find_many();
echo "Found " . count($d) . " user(s)\n";
run_hook('cronjob'); #HOOK
echo "Found " . count($recharges) . " user(s)\n";
run_hook('cronjob'); // HOOK
foreach ($recharges as $recharge) {
$dateNow = strtotime(date("Y-m-d H:i:s"));
$expiration = strtotime($recharge['expiration'] . ' ' . $recharge['time']);
echo $recharge['expiration'] . " : " . (($isCli) ? $recharge['username'] : Lang::maskText($recharge['username']));
if ($dateNow >= $expiration) {
foreach ($d as $ds) {
if ($ds['type'] == 'Hotspot') { # HOTSPOT
$date_now = strtotime(date("Y-m-d H:i:s"));
$expiration = strtotime($ds['expiration'] . ' ' . $ds['time']);
echo $ds['expiration'] . " : " . (($isCli) ? $ds['username'] : Lang::maskText($ds['username']));
if ($date_now >= $expiration) {
echo " : EXPIRED \r\n";
$userRecharge = ORM::for_table('tbl_user_recharges')->where('id', $recharge['id'])->find_one();
$customer = ORM::for_table('tbl_customers')->where('id', $recharge['customer_id'])->find_one();
$plan = ORM::for_table('tbl_plans')->where('id', $userRecharge['plan_id'])->find_one();
$router = ($recharge['type'] == 'Hotspot') ? Mikrotik::info($recharge['routers']) : ORM::for_table('tbl_routers')->where('name', $recharge['routers'])->find_one();
if ($plan['is_radius']) {
if (empty($plan['pool_expired'])) {
print_r(Radius::customerDeactivate($customer['username']));
$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 = Mikrotik::info($ds['routers']);
$p = ORM::for_table('tbl_plans')->where('id', $u['plan_id'])->find_one();
if ($p['is_radius']) {
if (empty($p['pool_expired'])) {
print_r(Radius::customerDeactivate($c['username']));
} else {
Radius::upsertCustomerAttr($customer['username'], 'Framed-Pool', $plan['pool_expired'], ':=');
print_r(Radius::disconnectCustomer($customer['username']));
Radius::upsertCustomerAttr($c['username'], 'Framed-Pool', $p['pool_expired'], ':=');
print_r(Radius::disconnectCustomer($c['username']));
}
} else {
$client = Mikrotik::getClient($router['ip_address'], $router['username'], $router['password']);
if (!empty($plan['pool_expired'])) {
if ($recharge['type'] == 'Hotspot') {
Mikrotik::setHotspotUserPackage($client, $customer['username'], 'EXPIRED NUXBILL ' . $plan['pool_expired']);
$client = Mikrotik::getClient($m['ip_address'], $m['username'], $m['password']);
if (!empty($p['pool_expired'])) {
Mikrotik::setHotspotUserPackage($client, $c['username'], 'EXPIRED NUXBILL ' . $p['pool_expired']);
// }if (!empty($p['list_expired'])) {
// $ip = Mikrotik::getIpHotspotUser($client, $ds['username']);
// Mikrotik::addIpToAddressList($client, $ip, $p['list_expired'], $c['username']);
} else {
Mikrotik::setPpoeUserPlan($client, $customer['username'], 'EXPIRED NUXBILL ' . $plan['pool_expired']);
}
} else {
if ($recharge['type'] == 'Hotspot') {
Mikrotik::removeHotspotUser($client, $customer['username']);
Mikrotik::removeHotspotActiveUser($client, $customer['username']);
} else {
Mikrotik::removePpoeUser($client, $customer['username']);
Mikrotik::removePpoeActive($client, $customer['username']);
}
Mikrotik::removeHotspotUser($client, $c['username']);
}
Mikrotik::removeHotspotActiveUser($client, $c['username']);
}
echo Message::sendPackageNotification($c, $u['namebp'], $p['price'], $textExpired, $config['user_notification_expired']) . "\n";
//update database user dengan status off
$u->status = 'off';
$u->save();
echo Message::sendPackageNotification($customer, $userRecharge['namebp'], $plan['price'], $textExpired, $config['user_notification_expired']) . "\n";
$userRecharge->status = 'off';
$userRecharge->save();
if ($config['enable_balance'] == 'yes' && $customer['auto_renewal']) {
list($bills, $add_cost) = User::getBills($recharge['customer_id']);
// autorenewal from deposit
if ($config['enable_balance'] == 'yes' && $c['auto_renewal']) {
list($bills, $add_cost) = User::getBills($ds['customer_id']);
if ($add_cost > 0) {
$plan['price'] += $add_cost;
if (!empty($add_cost)) {
$p['price'] += $add_cost;
}
if ($plan && $plan['enabled'] && $customer['balance'] >= $plan['price']) {
if (Package::rechargeUser($recharge['customer_id'], $plan['routers'], $plan['id'], 'Customer', 'Balance')) {
Balance::min($recharge['customer_id'], $plan['price']);
echo "Plan enabled: $plan[enabled] | User balance: $customer[balance] | Price: $plan[price]\n";
echo "Autorenewal Success\n";
}
if ($p && $p['enabled'] && $c['balance'] >= $p['price']) {
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']);
echo "plan enabled: $p[enabled] | User balance: $c[balance] | price $p[price]\n";
echo "auto renewall Success\n";
} else {
echo "Plan enabled: $plan[enabled] | User balance: $customer[balance] | Price: $plan[price]\n";
echo "Autorenewal Failed\n";
Message::sendTelegram("FAILED RENEWAL #cron\n\n#u$customer[username] #buy #" . (($recharge['type'] == 'Hotspot') ? 'Hotspot' : 'PPPOE') . " \n" . $plan['name_plan'] .
"\nRouter: " . $plan['routers'] .
"\nPrice: " . $plan['price']);
echo "plan enabled: $p[enabled] | User balance: $c[balance] | price $p[price]\n";
echo "auto renewall Failed\n";
Message::sendTelegram("FAILED RENEWAL #cron\n\n#u$c[username] #buy #Hotspot \n" . $p['name_plan'] .
"\nRouter: " . $p['routers'] .
"\nPrice: " . $p['price']);
}
} else {
echo "No renewal | Plan enabled: $plan[enabled] | User balance: $customer[balance] | Price: $plan[price]\n";
echo "no renewall | plan enabled: $p[enabled] | User balance: $c[balance] | price $p[price]\n";
}
} else {
echo "No renewal | Balance: $config[enable_balance] Auto-renewal: $customer[auto_renewal]\n";
echo "no renewall | balance $config[enable_balance] auto_renewal $c[auto_renewal]\n";
}
} else
echo " : ACTIVE \r\n";
} else { # PPPOE
$date_now = strtotime(date("Y-m-d H:i:s"));
$expiration = strtotime($ds['expiration'] . ' ' . $ds['time']);
echo $ds['expiration'] . " : " . (($isCli) ? $ds['username'] : Lang::maskText($ds['username']));
if ($date_now >= $expiration) {
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();
$p = ORM::for_table('tbl_plans')->where('id', $u['plan_id'])->find_one();
if ($p['is_radius']) {
if (empty($p['pool_expired'])) {
print_r(Radius::customerDeactivate($c['username']));
} else {
Radius::upsertCustomerAttr($c['username'], 'Framed-Pool', $p['pool_expired'], ':=');
print_r(Radius::disconnectCustomer($c['username']));
}
} else {
$client = Mikrotik::getClient($m['ip_address'], $m['username'], $m['password']);
if (!empty($p['pool_expired'])) {
Mikrotik::setPpoeUserPlan($client, $c['username'], 'EXPIRED NUXBILL ' . $p['pool_expired']);
} else {
Mikrotik::removePpoeUser($client, $c['username']);
}
Mikrotik::removePpoeActive($client, $c['username']);
}
echo Message::sendPackageNotification($c, $u['namebp'], $p['price'], $textExpired, $config['user_notification_expired']) . "\n";
$u->status = 'off';
$u->save();
// autorenewal from deposit
if ($config['enable_balance'] == 'yes' && $c['auto_renewal']) {
list($bills, $add_cost) = User::getBills($ds['customer_id']);
if ($add_cost > 0) {
if (!empty($add_cost)) {
$p['price'] += $add_cost;
}
}
if ($p && $p['enabled'] && $c['balance'] >= $p['price']) {
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']);
echo "plan enabled: $p[enabled] | User balance: $c[balance] | price $p[price]\n";
echo "auto renewall Success\n";
} else {
echo "plan enabled: $p[enabled] | User balance: $c[balance] | price $p[price]\n";
echo "auto renewall Failed\n";
Message::sendTelegram("FAILED RENEWAL #cron\n\n#u$c[username] #buy #PPPOE \n" . $p['name_plan'] .
"\nRouter: " . $p['routers'] .
"\nPrice: " . $p['price']);
}
}
}
} else
echo " : ACTIVE \r\n";
}
}

View File

@ -2,8 +2,8 @@
/**
* PHP Mikrotik Billing (https://github.com/hotspotbilling/phpnuxbill/)
* This file is for reminding users about expiration
* Example to run every day at 7:00 in the morning:
* This file for reminding user about expiration
* Example to run every at 7:00 in the morning
* 0 7 * * * /usr/bin/php /var/www/system/cron_reminder.php
**/
@ -15,9 +15,10 @@ if (php_sapi_name() !== 'cli') {
echo "<pre>";
}
$recharges = ORM::for_table('tbl_user_recharges')->where('status', 'on')->find_many();
$d = ORM::for_table('tbl_user_recharges')->where('status', 'on')->find_many();
run_hook('cronjob_reminder'); #HOOK
run_hook('cronjob_reminder'); // HOOK
echo "PHP Time\t" . date('Y-m-d H:i:s') . "\n";
$res = ORM::raw_execute('SELECT NOW() AS WAKTU;');
@ -27,35 +28,33 @@ while ($row = $statement->fetch(PDO::FETCH_ASSOC)) {
echo "MYSQL Time\t" . $row['WAKTU'] . "\n";
}
$day7 = date('Y-m-d', strtotime("+7 day"));
$day3 = date('Y-m-d', strtotime("+3 day"));
$day1 = date('Y-m-d', strtotime("+1 day"));
print_r([$day1, $day3, $day7]);
foreach ($recharges as $recharge) {
if (in_array($recharge['expiration'], [$day1, $day3, $day7])) {
$user_recharge = ORM::for_table('tbl_user_recharges')->where('id', $recharge['id'])->find_one();
$plan = ORM::for_table('tbl_plans')->where('id', $user_recharge['plan_id'])->find_one();
$customer = ORM::for_table('tbl_customers')->where('id', $recharge['customer_id'])->find_one();
if ($plan['validity_unit'] == 'Period') {
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();
if ($p['validity_unit'] == 'Period') {
// Postpaid price from field
$additional_invoice = User::getAttribute("Invoice", $recharge['customer_id']);
if (empty($additional_invoice) || $additional_invoice == 0) {
$price = $plan['price'];
$add_inv = User::getAttribute("Invoice", $ds['customer_id']);
if (empty ($add_inv) or $add_inv == 0) {
$price = $p['price'];
} else {
$price = $additional_invoice;
$price = $add_inv;
}
} else {
$price = $plan['price'];
$price = $p['price'];
}
if ($recharge['expiration'] == $day7) {
echo Message::sendPackageNotification($customer, $plan['name_plan'], $price, Lang::getNotifText('reminder_7_day'), $config['user_notification_reminder']) . "\n";
} elseif ($recharge['expiration'] == $day3) {
echo Message::sendPackageNotification($customer, $plan['name_plan'], $price, Lang::getNotifText('reminder_3_day'), $config['user_notification_reminder']) . "\n";
} elseif ($recharge['expiration'] == $day1) {
echo Message::sendPackageNotification($customer, $plan['name_plan'], $price, Lang::getNotifText('reminder_1_day'), $config['user_notification_reminder']) . "\n";
if ($ds['expiration'] == $day7) {
echo Message::sendPackageNotification($c, $p['name_plan'], $price, Lang::getNotifText('reminder_7_day'), $config['user_notification_reminder']) . "\n";
} else if ($ds['expiration'] == $day3) {
echo Message::sendPackageNotification($c, $p['name_plan'], $price, Lang::getNotifText('reminder_3_day'), $config['user_notification_reminder']) . "\n";
} else if ($ds['expiration'] == $day1) {
echo Message::sendPackageNotification($c, $p['name_plan'], $price, Lang::getNotifText('reminder_1_day'), $config['user_notification_reminder']) . "\n";
}
}
}

View File

@ -542,5 +542,40 @@
"ID": "ID",
"Internet_Plan": "Internet Plan",
"Privacy_Policy": "Privacy Policy",
"Terms_and_Conditions": "Terms and Conditions"
"Terms_and_Conditions": "Terms and Conditions",
"Contact": "Contact",
"will_be_replaced_with_Customer_Name": "will be replaced with Customer Name",
"will_be_replaced_with_Customer_username": "will be replaced with Customer username",
"will_be_replaced_with_Package_name": "will be replaced with Package name",
"will_be_replaced_with_Package_price": "will be replaced with Package price",
"additional_bills_for_customers": "additional bills for customers",
"will_be_replaced_with_Expiration_date": "will be replaced with Expiration date",
"Your_Company_Name_at_Settings": "Your Company Name at Settings",
"Your_Company_Address_at_Settings": "Your Company Address at Settings",
"Your_Company_Phone_at_Settings": "Your Company Phone at Settings",
"Invoice_number": "Invoice number",
"Date_invoice_created": "Date invoice created",
"Payment_gateway_user_paid_from": "Payment gateway user paid from",
"Payment_channel_user_paid_from": "Payment channel user paid from",
"is_Hotspot_or_PPPOE": "is Hotspot or PPPOE",
"Internet_Package": "Internet Package",
"Internet_Package_Prices": "Internet Package Prices",
"Receiver_name": "Receiver name",
"Username_internet": "Username internet",
"User_password": "User password",
"Expired_datetime": "Expired datetime",
"For_Notes_by_admin": "For Notes by admin",
"Transaction_datetime": "Transaction datetime",
"Balance_Before": "Balance Before",
"Balance_After": "Balance After",
"how_much_balance_have_been_send": "how much balance have been send",
"Current_Balance": "Current Balance",
"Sender_name": "Sender name",
"how_much_balance_have_been_received": "how much balance have been received",
"Extend_Postpaid_Expiration": "Extend Postpaid Expiration",
"Allow_Extend": "Allow Extend",
"Extend_Days": "Extend Days",
"Confirmation_Message": "Confirmation Message",
"You_are_already_logged_in": "You are already logged in",
"Extend": "Extend"
}

View File

@ -1,3 +1,476 @@
{
"Settings_Saved_Successfully": "Pengaturan Berhasil Disimpan"
"Log_in": "Masuk",
"Register": "Daftar",
"Announcement": "Pemberitahuan",
"Registration_Info": "Info Pendaftaran",
"Voucher_not_found__please_buy_voucher_befor_register": "Voucher tidak ditemukan, silakan beli voucher sebelum mendaftar",
"Register_Success__You_can_login_now": "Daftar Sukses! Anda dapat masuk sekarang",
"Log_in_to_Member_Panel": "Masuk ke Panel Anggota",
"Register_as_Member": "Daftar sebagai Anggota",
"Enter_Admin_Area": "Masuk ke Admin Panel",
"PHPNuxBill": "PHPNuxBill",
"Username": "Nama Pengguna",
"Password": "Kata Sandi",
"Passwords_does_not_match": "Kata sandi tidak cocok",
"Account_already_axist": "Akun telah ada",
"Manage": "Mengelola",
"Submit": "Kirim",
"Save_Changes": "Simpan Perubahan",
"Cancel": "Batal",
"Edit": "Sunting",
"Delete": "Hapus",
"Welcome": "Selamat Datang",
"Data_Created_Successfully": "Data Berhasil Dibuat",
"Data_Updated_Successfully": "Data Berhasil Diperbarui",
"Data_Deleted_Successfully": "Data Berhasil Dihapus",
"Static_Pages": "Halaman Statis",
"Failed_to_save_page__make_sure_i_can_write_to_folder_pages___i_chmod_664_pages___html_i_": "Gagal menyimpan halaman, pastikan diperbolehkan menulis file di folder pages, <i>chmod 664 pages\/*.html<i>",
"Saving_page_success": "Menyimpan halaman berhasil",
"Sometimes_you_need_to_refresh_3_times_until_content_change": "Terkadang Anda perlu menyegarkan 3 kali hingga konten berubah",
"Dashboard": "Dasbor",
"Search_Customers___": "Cari Member...",
"My_Account": "Akun Saya",
"My_Profile": "Profil Saya",
"Settings": "Pengaturan",
"Edit_Profile": "Sunting Profil",
"Change_Password": "Ganti kata sandi",
"Logout": "Keluar",
"Services": "Layanan",
"Bandwidth_Plans": "Paket Bandwidth",
"Bandwidth_Name": "Nama Bandwidth",
"New_Bandwidth": "Bandwidth Baru",
"Edit_Bandwidth": "Sunting Bandwidth",
"Add_New_Bandwidth": "Tambahkan Bandwidth Baru",
"Rate_Download": "Nilai Unduhan",
"Rate_Upload": "Nilai Unggahan",
"Name_Bandwidth_Already_Exist": "Nama Bandwidth sudah ada",
"Hotspot_Plans": "Paket Hotspot",
"PPPOE_Plans": "Paket PPPoE",
"Plan_Name": "Nama Paket",
"New_Service_Plan": "Paket Layanan Baru",
"Add_Service_Plan": "Tambah Paket Layanan",
"Edit_Service_Plan": "Sunting Paket Layanan",
"Name_Plan_Already_Exist": "Nama Paket sudah ada",
"Plan_Type": "Jenis Paket",
"Plan_Price": "Harga Paket",
"Limit_Type": "Tipe Batas",
"Unlimited": "Tak Terbatas",
"Limited": "Terbatas",
"Time_Limit": "Batas waktu",
"Data_Limit": "Batas Data",
"Both_Limit": "Membatasi keduanya",
"Plan_Validity": "Waktu Paket",
"Select_Bandwidth": "Pilih Bandwidth",
"Shared_Users": "Berbagi Pelanggan",
"Choose_User_Type_Sales_to_disable_access_to_Settings": "Pilih Sales untuk menonaktifkan akses ke Pengaturan",
"Current_Password": "Kata sandi saat ini",
"New_Password": "Kata sandi baru",
"Administrator": "Administrator",
"Sales": "Sales",
"Member": "Anggota",
"Confirm_New_Password": "Konfirmasi sandi baru",
"Confirm_Password": "Konfirmasi sandi",
"Full_Name": "Nama Lengkap",
"User_Type": "Tipe Pelanggan",
"Address": "Alamat",
"Created_On": "Dibuat pada",
"Expires_On": "Kedaluwarsa pada",
"Phone_Number": "Nomor telepon",
"User_deleted_Successfully": "Pelanggan berhasil dihapus",
"Full_Administrator": "Administrator Penuh",
"Keep_Blank_to_do_not_change_Password": "Biarkan kosong apabila tidak ingin mengubah kata sandi",
"Keep_it_blank_if_you_do_not_want_to_show_currency_code": "Kosongkan jika Anda tidak ingin menampilkan kode mata uang",
"Theme_Style": "Gaya Tema",
"Theme_Color": "Warna Tema",
"Default_Language": "Bahasa Bawaan",
"Network": "Jaringan",
"Routers": "Router",
"IP_Pool": "IP Pool",
"New_Router": "Router baru",
"Add_Router": "Tambahkan Router",
"Edit_Router": "Sunting Router",
"Router_Name": "Nama Router",
"IP_Address": "Alamat IP",
"Router_Secret": "Password Router",
"Description": "Deskrispi",
"IP_Router_Already_Exist": "IP Router sudah ada",
"Name_Pool": "Nama Pool",
"Range_IP": "Rentang IP",
"New_Pool": "Pool baru",
"Add_Pool": "Tambahkan Pool",
"Edit_Pool": "Sunting Pool",
"Pool_Name_Already_Exist": "Nama Pool sudah ada",
"Refill_Account": "Isi Ulang Akun",
"Recharge_Account": "Isi Ulang Akun",
"Select_Account": "Pilih Akun",
"Service_Plan": "Paket Layanan",
"Recharge": "Isi Ulang",
"Method": "Metode",
"Account_Created_Successfully": "Akun berhasil dibuat",
"Database_Status": "Status Database",
"Total_Database_Size": "Ukuran total database",
"Download_Database_Backup": "Unduh cadangan database",
"Table_Name": "Nama Tabel",
"Rows": "Baris",
"Size": "Ukuran",
"Customer": "Pelanggan",
"Add_New_Contact": "Tambahkan Kontak Baru",
"Edit_Contact": "Sunting Kontak",
"List_Contact": "Daftar Kontak",
"Manage_Contact": "Kelola Kontak",
"Reports": "Laporan",
"Daily_Reports": "Laporan Harian",
"Period_Reports": "Laporan Periode",
"All_Transactions": "Semua Transaksi",
"Total_Income": "Jumlah Pemasukan",
"All_Transactions_at_Date": "Semua transaksi pada ganggal",
"Export_for_Print": "Ekspor untuk cetak",
"Print": "Cetak",
"Export_to_PDF": "Ekspor ke PDF",
"Click_Here_to_Print": "Klik Disini untuk mencetak",
"You_can_use_html_tag": "Anda dapat menggunakan tag HTML",
"Date_Format": "Format tanggal",
"Income_Today": "Pendapatan hari ini",
"Income_This_Month": "Penghasilan bulan ini",
"Users_Active": "Pelanggan Aktif",
"Total_Users": "Total Pelanggan",
"Users": "Pelanggan",
"Edit_User": "Sunting Pelanggan",
"Last_Login": "Terakhir Masuk",
"Administrator_Users": "Pengguna Administrator",
"Manage_Administrator": "Kelola Administrator",
"Add_New_Administrator": "Tambahkan Administrator Baru",
"Localisation": "Lokalisasi",
"Backup_Restore": "Cadangkan\/Pulihkan",
"General_Settings": "Pengaturan Umum",
"Date": "Tanggal",
"Login_Successful": "Berhasil Masuk",
"Failed_Login": "Gagal Masuk",
"Settings_Saved_Successfully": "Pengaturan Berhasil Disimpan",
"User_Updated_Successfully": "Pengguna Berhasil Diperbarui",
"User_Expired__Today": "Pengguna Kedaluwarsa, Hari Ini",
"Activity_Log": "Log Aktivitas",
"View_Reports": "Lihat Laporan",
"View_All": "Lihat semua",
"Number_of_Vouchers": "Jumlah Voucher",
"Length_Code": "Panjang Kode",
"Code_Voucher": "Kode Voucher",
"Voucher": "Voucher",
"Hotspot_Voucher": "Voucher Hotspot",
"Status_Voucher": "Voucher Status",
"Add_Vouchers": "Tambah Voucher",
"Create_Vouchers_Successfully": "Buat Voucher Berhasil",
"Generate": "Menghasilkan",
"Print_side_by_side__it_will_easy_to_cut": "Info Cetak",
"From_Date": "Dari tanggal",
"To_Date": "Hingga saat ini",
"New_Service": "Layanan Baru",
"Type": "Jenis",
"Finish": "Menyelesaikan",
"Application_Name__Company_Name": "Nama Aplikasi\/ Nama Perusahaan",
"This_Name_will_be_shown_on_the_Title": "Nama ini akan ditampilkan pada Judul",
"Next": "Berikutnya",
"Last": "Terakhir",
"Timezone": "Zona waktu",
"Decimal_Point": "Titik Desimal",
"Thousands_Separator": "Pemisah Ribuan",
"Currency_Code": "Kode Mata Uang",
"Order_Voucher": "Pesan Voucher",
"Voucher_Activation": "Aktivasi Voucher",
"List_Activated_Voucher": "Daftar Voucher yang diaktifkan",
"Enter_voucher_code_here": "Masukkan kode voucher di sini",
"Private_Message": "Pesan Pribadi",
"Inbox": "Kotak Masuk",
"Outbox": "Kotak Keluar",
"Compose": "Menyusun",
"Send_to": "Kirim ke",
"Title": "Judul",
"Message": "Pesan",
"Your_Account_Information": "Informasi Akun Anda",
"Welcome_to_the_Panel_Members_page__on_this_page_you_can_": "Selamat datang di halaman Anggota Panel, di halaman ini Anda dapat:",
"Invalid_Username_or_Password": "Nama pengguna atau kata sandi salah",
"You_do_not_have_permission_to_access_this_page": "Anda tidak memiliki izin untuk mengakses halaman ini",
"Incorrect_Current_Password": "Kata sandi saat ini salah",
"Password_changed_successfully__Please_login_again": "Kata sandi berhasil diubah, silakan login kembali",
"All_field_is_required": "Semua bidang wajib diisi",
"Voucher_Not_Valid": "Voucher tidak berlaku",
"Activation_Vouchers_Successfully": "Aktivasi Voucher Berhasil",
"Data_Not_Found": "Data tidak ditemukan",
"Search_by_Username": "Cari berdasarkan nama pengguna",
"Search_by_Name": "Cari berdasarkan nama",
"Search_by_Code_Voucher": "Cari berdasarkan kode voucher",
"Search": "Mencari",
"Select_a_customer": "Pilih pelanggan",
"Select_Routers": "Pilih Router",
"Select_Plans": "Pilih Paket",
"Select_Pool": "Pilih Pool",
"Hrs": "Jam",
"Mins": "Menit",
"Days": "Hari",
"Months": "Bulan",
"Add_Language": "Tambahkan Bahasa",
"Language_Name": "Nama Bahasa",
"Folder_Name": "Nama Folder",
"Translator": "Penerjemah",
"Language_Name_Already_Exist": "Nama Bahasa sudah ada",
"Payment_Gateway": "Gerbang Pembayaran",
"Community": "Komunitas",
"1_user_can_be_used_for_many_devices_": "1 pengguna bisa digunakan untuk banyak perangkat?",
"Cannot_be_change_after_saved": "Tidak dapat diubah setelah disimpan",
"Explain_Coverage_of_router": "Jelaskan cakupan router",
"Name_of_Area_that_router_operated": "Nama area tempat router dioperasikan",
"Payment_Notification_URL__Recurring_Notification_URL__Pay_Account_Notification_URL": "URL notifikasi pembayaran, URL notifikasi berulang, URL notifikasi akun bayar",
"Finish_Redirect_URL__Unfinish_Redirect_URL__Error_Redirect_URL": "Selesaikan URL pengalihan, selesaikan URL pengalihan, URL pengalihan kesalahan",
"Status": "Status",
"Plan_Not_found": "Paket tidak ditemukan",
"Failed_to_create_transaction_": "Gagal membuat transaksi.",
"Seller_has_not_yet_setup_Xendit_payment_gateway": "Penjual belum menyiapkan gateway pembayaran Xendit",
"Admin_has_not_yet_setup_Xendit_payment_gateway__please_tell_admin": "Admin belum menyiapkan gerbang pembayaran Xendit, mohon beritahu Admin",
"Buy_this__your_active_package_will_be_overwrite": "Beli ini? Paket aktif Anda akan ditimpa",
"You_already_have_unpaid_transaction__cancel_it_or_pay_it_": "Anda sudah memiliki transaksi yang belum dibayar, batalkan atau bayar.",
"Transaction_Not_found": "Transaksi tidak ditemukan",
"Cancel_it_": "Batalkan itu?",
"expired": "Kedaluwarsa",
"Check_for_Payment": "Periksa Pembayaran",
"Transaction_still_unpaid_": "Transaksi masih belum dibayar.",
"Paid_Date": "Tanggal Pembayaran",
"Transaction_has_been_paid_": "Transaksi telah dibayar.",
"PAID": "DIBAYAR",
"CANCELED": "DIBATALKAN",
"UNPAID": "BELUM DIBAYAR",
"PAY_NOW": "BAYAR SEKARANG",
"Buy_Hotspot_Plan": "Beli Paket Hotspot",
"Buy_PPOE_Plan": "Beli Paket PPPoE",
"Package": "Paket",
"Order_Internet_Package": "Pesan Paket Internet",
"Unknown_Command_": "Perintah tidak diketahui.",
"Checking_payment": "Memeriksa pembayaran",
"Create_Transaction_Success": "Transaksi berhasil dibuat",
"You_have_unpaid_transaction": "Anda memiliki transaksi yang belum dibayar",
"TripayPayment_Channel": "Saluran Pembayaran Tripay",
"Payment_Channel": "Saluran Pembayaran",
"Payment_check_failed_": "Pemeriksaan pembayaran gagal.",
"Order_Package": "Pesan Paket",
"Transactions": "Transaksi",
"Payments": "Pembayaran",
"History": "Riwayat",
"Order_History": "Riwayat Pesanan",
"Gateway": "Gerbang",
"Date_Done": "Tanggal Selesai",
"Unpaid_Order": "Pesanan Belum Dibayar",
"Payment_Gateway_Not_Found": "Gerbang Pembayaran tidak ditemukan",
"Payment_Gateway_saved_successfully": "Gerbang Pembayaran berhasil disimpan",
"ORDER": "MEMESAN",
"Package_History": "Riwayat Paket",
"Buy_History": "Riwayat Beli",
"Activation_History": "Riwayat Aktivasi",
"Buy_Package": "Beli Paket",
"Email": "Email",
"Company_Footer": "Catatan Kaki Perusahaan",
"Will_show_below_user_pages": "Akan ditampilkan dibawah halaman pengguna",
"Request_OTP": "Minta OTP",
"Verification_Code": "Kode Verifikasi",
"SMS_Verification_Code": "Kode Verifikasi SMS",
"Please_enter_your_email_address": "Silakan masukkan alamat email Anda",
"Failed_to_create_Paypal_transaction_": "Gagal membuat transaksi Paypal.",
"Plugin": "Plugin",
"Plugin_Manager": "Manajer Plugin",
"User_Notification": "Pemberitahuan Pelanggan",
"Expired_Notification": "Pemberitahuan Kedaluwarsa",
"User_will_get_notification_when_package_expired": "Pengguna akan mendapat notifikasi ketika paket sudah habis masa berlakunya",
"Expired_Notification_Message": "Pesan Pemberitahuan Kedaluwarsa",
"Payment_Notification": "Notifikasi Pembayaran",
"User_will_get_invoice_notification_when_buy_package_or_package_refilled": "Pengguna akan mendapatkan notifikasi invoice saat membeli paket atau isi ulang paket",
"Current_IP": "IP saat ini",
"Current_MAC": "MAC saat ini",
"Login_Status": "Status Masuk",
"Login_Request_successfully": "Permintaan masuk berhasil",
"Logout_Request_successfully": "Permintaan keluar berhasil",
"Disconnect_Internet_": "Putuskan sambungan internet?",
"Not_Online__Login_now_": "Tidak, masuk sekarang?",
"You_are_Online__Logout_": "Kamu sedang aktif, ingin keluar?",
"Connect_to_Internet_": "Hubungkan ke Internet?",
"Your_account_not_connected_to_internet": "Akun Anda tidak terhubung ke internet",
"Failed_to_create_transaction__": "Gagal membuat transaksi. ",
"Failed_to_check_status_transaction__": "Gagal memeriksa status transaksi.",
"Disable_Voucher": "Nonaktifkan Voucher",
"Balance": "Saldo",
"Balance_System": "Saldo Sistem",
"Enable_System": "Aktifkan Sistem",
"Allow_Transfer": "Izinkan Transfer",
"Telegram_Notification": "Pemberitahuan Telegram",
"SMS_OTP_Registration": "Pendaftaran SMS OTP",
"Whatsapp_Notification": "Pemberitahuan WhatsApp",
"Tawk_to_Chat_Widget": "Widget Obrolan Tawk.to",
"Invoice": "Faktur",
"Country_Code_Phone": "Kode Negara Telepon",
"Voucher_activation_menu_will_be_hidden": "Menu aktivasi voucher akan disembunyikan",
"Customer_can_deposit_money_to_buy_voucher": "Pelanggan dapat menyetor uang untuk membeli voucher",
"Allow_balance_transfer_between_customers": "Izinkan transfer saldo antar pelanggan",
"Reminder_Notification": "Pemberitahuan Pengingat",
"Reminder_Notification_Message": "Pesan Pemberitahuan Pengingat",
"Reminder_7_days": "Pengingat 7 hari",
"Reminder_3_days": "Pengingat 3 hari",
"Reminder_1_day": "Pengingat 1 hari",
"PPPOE_Password": "Kata sandi PPPoE",
"User_Cannot_change_this__only_admin__if_it_Empty_it_will_use_user_password": "Pelanggan tidak dapat mengubah ini, hanya Admin. Jika kosong maka akan menggunakan kata sandi pelanggan",
"Invoice_Balance_Message": "Faktur Pesan Saldo",
"Invoice_Notification_Payment": "Faktur Pemberitahuan Pembayaran",
"Balance_Notification_Payment": "Saldo Pemberitahuan Pembayaran",
"Balance_Plans": "Paket Saldo",
"Buy_Balance": "Beli Saldo",
"Price": "Harga",
"Validity": "Waktu",
"Disable_auto_renewal_": "Nonaktifkan perpanjangan otomatis?",
"Auto_Renewal_On": "Perpanjangan otomatis aktif",
"Enable_auto_renewal_": "Aktifkan perpanjangan otomatis?",
"Auto_Renewal_Off": "Perpanjangan otomatis mati",
"Refill_Balance": "Isi Ulang Saldo",
"Invoice_Footer": "Catatan Kaki Faktur",
"Pay_With_Balance": "Bayar dengan Saldo",
"Pay_this_with_Balance__your_active_package_will_be_overwrite": "Bayar ini dengan Saldo? Paket aktif Anda akan ditimpa",
"Success_to_buy_package": "Berhasil membeli paket",
"Auto_Renewal": "Perpanjangan otomatis",
"View": "Melihat",
"Back": "Kembali",
"Active": "Aktif",
"Transfer_Balance": "Kirim saldo",
"Send_your_balance_": "Kirim saldo Anda?",
"Send": "Kirim",
"Cannot_send_to_yourself": "Tidak dapat mengirim ke diri Anda sendiri",
"Sending_balance_success": "Berhasil mengirim saldo",
"From": "Dari",
"To": "Ke",
"insufficient_balance": "Saldo tidak mencukupi",
"Send_Balance": "Kirim saldo",
"Received_Balance": "Saldo yang diterima",
"Minimum_Balance_Transfer": "Minimal transfer saldo",
"Minimum_Transfer": "Minimal Transfer",
"Company_Logo": "Logo Perusahaan",
"Expired_IP_Pool": "IP Pool Kedaluwarsa",
"Proxy": "Proksi",
"Proxy_Server": "Server Proksi",
"Proxy_Server_Login": "Masuk Server Proksi",
"Hotspot_Plan": "Paket Hotspot",
"PPPOE_Plan": "Paket PPPoE",
"UNKNOWN": "TIDAK DIKENAL",
"Are_You_Sure_": "Apa kamu yakin?",
"Success_to_send_package": "Berhasil mengirim paket",
"Target_has_active_plan__different_with_current_plant_": "Target mempunyai paket aktif, berbeda dengan paket saat ini.",
"Recharge_a_friend": "Isi ulang teman",
"Buy_for_friend": "Beli untuk teman",
"Buy_this_for_friend_account_": "Beli ini untuk akun teman?",
"Review_package_before_recharge": "Tinjau paket sebelum mengisi ulang",
"Activate": "Mengaktifkan paket",
"Deactivate": "Menonaktifkan paket",
"Sync": "Sinkronisasi",
"Failed_to_create_PaymeTrust_transaction_": "Gagal membuat transaksi PaymeTrust.",
"Location": "Lokasi",
"Radius_Plans": "Paket Radius",
"Change_title_in_user_Plan_order": "Ubah Judul dalam urutan paket pelanggan",
"Logs": "Log",
"Voucher_Format": "Format Voucher",
"Resend_To_Customer": "Kirim Ulang Ke Pelanggan",
"Service_Type": "Jenis Layanan",
"Others": "Lainnya",
"PPPoE": "PPPoE",
"Hotspot": "Hotspot",
"Monthly_Registered_Customers": "Pendaftaran Pelanggan perbulan",
"Total_Monthly_Sales": "Total penjualan perbulan",
"Active_Users": "Pelanggan Aktif",
"SuperAdmin": "Super Admin",
"Lists": "Daftar",
"Vouchers": "Voucher",
"Refill_Customer": "Isi Ulang Pelanggan",
"Recharge_Customer": "Isi Ulang Pelanggan",
"Plans": "Paket",
"PPPOE": "PPPOE",
"Bandwidth": "Bandwidth",
"Send_Message": "Mengirim pesan",
"Single_Customer": "Pelanggan Tunggal",
"Bulk_Customers": "Pelanggan Massal",
"Radius": "Radius",
"Radius_NAS": "Radius NAS",
"Customer_Announcement": "Pengumuman Pelanggan",
"Language_Editor": "Editor Bahasa",
"Plan_Category": "Kategori Paket",
"ID": "ID",
"Prev": "Sebelumnya",
"Internet_Plan": "Paket Internet",
"Generated_By": "Dihasilkan oleh",
"All_Users_Insights": "Semua Wawasan Pengguna",
"year": "Tahun",
"month": "Bulan",
"week": "Pekan",
"day": "Hari",
"hour": "Jam",
"minute": "Menit",
"second": "Kedua",
"Account_Type": "Jenis akun",
"Contact": "Kontak",
"Paid": "Dibayar",
"Personal": "Pribadi",
"Coordinates": "Koordinat",
"Confirm": "Mengonfirmasi",
"Name": "Nama",
"Plan": "Paket",
"Using": "Menggunakan",
"Total": "Total",
"Additional_Cost": "Biaya tambahan",
"Resend": "Kirim ulang",
"Login": "Masuk",
"success": "Sukses",
"Click_Here": "Klik disini",
"Your_friend_do_not_have_active_package": "Teman Anda tidak memiliki paket aktif",
"If_your_friend_have_Additional_Cost__you_will_pay_for_that_too": "Jika teman Anda memiliki biaya tambahan, Anda juga akan membayarnya",
"Select_Payment_Gateway": "Pilih Gerbang Pembayaran",
"Available_Payment_Gateway": "Gerbang Pembayaran yang tersedia",
"Pay_Now": "Bayar sekarang",
"Notes": "Catatan",
"will_be_replaced_with_Customer_Name": "akan diganti dengan nama Pelanggan",
"will_be_replaced_with_Customer_username": "akan diganti dengan nama pengguna Pelanggan",
"will_be_replaced_with_Package_name": "akan diganti dengan nama paket",
"will_be_replaced_with_Package_price": "akan diganti dengan harga Paket",
"will_be_replaced_with_Expiration_date": "akan diganti dengan tanggal kedaluwarsa",
"additional_bills_for_customers": "tagihan tambahan untuk pelanggan",
"Your_Company_Name_at_Settings": "Nama Perusahaan Anda di pengaturan",
"Your_Company_Address_at_Settings": "Alamat Perusahaan Anda di pengaturan",
"Your_Company_Phone_at_Settings": "Telepon Perusahaan Anda di pengaturan",
"Invoice_number": "Nomor faktur",
"Date_invoice_created": "Tanggal faktur dibuat",
"Payment_gateway_user_paid_from": "Pengguna gateway pembayaran membayar dari",
"Payment_channel_user_paid_from": "Pengguna saluran pembayaran membayar dari",
"is_Hotspot_or_PPPOE": "adalah Hotspot atau PPPOE",
"Internet_Package": "Paket internet",
"Internet_Package_Prices": "Harga paket internet",
"Receiver_name": "Nama penerima",
"Username_internet": "Nama pengguna internet",
"User_password": "Kata sandi pengguna",
"Transaction_datetime": "Tanggal waktu transaksi",
"Balance_Before": "Saldo sebelumnya",
"Balance_After": "Saldo setelahnya",
"For_Notes_by_admin": "Untuk catatan oleh Admin",
"how_much_balance_have_been_send": "berapa banyak saldo yang telah dikirim",
"Current_Balance": "Saldo saat ini",
"Sender_name": "Nama pengirim",
"Customer_Balance": "Saldo Pelanggan",
"Privacy_Policy": "Kebijakan Privasi",
"Terms_and_Conditions": "Syarat dan Ketentuan",
"Disable_Registration": "Nonaktifkan Pendaftaran",
"Customer_just_Login_with_Phone_number_and_Voucher_Code__Voucher_will_be_password": "Pelanggan cukup masuk dengan nomor telepon dan kode voucher, Voucher akan menjadi kata sandi",
"After_Customer_activate_voucher_or_login__customer_will_be_redirected_to_this_url": "Setelah Pelanggan mengaktifkan voucher atau masuk, Pelanggan akan diarahkan ke URL ini",
"Extend_Postpaid_Expiration": "Perpanjang masa kedaluwarsa pascabayar",
"Allow_Extend": "Izinkan Perpanjang",
"Extend_Days": "Perpanjang Hari",
"Confirmation_Message": "Pesan konfirmasi",
"Email_Notification": "Pemberitahuan Email",
"This_Token_will_act_as_SuperAdmin_Admin": "Token ini akan bertindak sebagai SuperAdmin\/Admin",
"Miscellaneous": "Aneka ragam",
"OTP_Required": "Diperlukan OTP",
"OTP_is_required_when_user_want_to_change_phone_number": "OTP diperlukan ketika pengguna ingin mengganti nomor telepon",
"OTP_Method": "Metode OTP",
"SMS": "SMS",
"WhatsApp": "WhatsApp",
"SMS_and_WhatsApp": "SMS dan WhatsApp",
"The_method_which_OTP_will_be_sent_to_user": "Metode OTP yang akan dikirimkan ke pengguna"
}

View File

@ -17,14 +17,14 @@
<div class="col-md-6">
<textarea class="form-control" id="expired" name="expired"
placeholder="Hello [[name]], your internet package [[package]] has been expired"
rows="3">{if $_json['expired']!=''}{Lang::htmlspecialchars($_json['expired'])}{else}Hello [[name]], your internet package [[package]] has been expired.{/if}</textarea>
rows="4">{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">
<b>[[name]]</b> - {Lang::T('will be replaced with Customer Name)}.<br>
<b>[[username]]</b> - {Lang::T('will be replaced with Customer username)}.<br>
<b>[[package]]</b> - {Lang::T('will be replaced with Package name)}.<br>
<b>[[price]]</b> - {Lang::T('will be replaced with Package price)}.<br>
<b>[[bills]]</b> - {Lang::T('additional bills for customers)}.
<b>[[name]]</b> - {Lang::T('will be replaced with Customer Name')}.<br>
<b>[[username]]</b> - {Lang::T('will be replaced with Customer username')}.<br>
<b>[[package]]</b> - {Lang::T('will be replaced with Package name')}.<br>
<b>[[price]]</b> - {Lang::T('will be replaced with Package price')}.<br>
<b>[[bills]]</b> - {Lang::T('additional bills for customers')}.
</p>
</div>
</div>
@ -33,15 +33,15 @@
<label class="col-md-2 control-label">{Lang::T('Reminder 7 days')}</label>
<div class="col-md-6">
<textarea class="form-control" id="reminder_7_day" name="reminder_7_day"
rows="3">{Lang::htmlspecialchars($_json['reminder_7_day'])}</textarea>
rows="4">{Lang::htmlspecialchars($_json['reminder_7_day'])}</textarea>
</div>
<p class="help-block col-md-4">
<b>[[name]]</b> - {Lang::T('will be replaced with Customer Name)}.<br>
<b>[[username]]</b> - {Lang::T('will be replaced with Customer username)}.<br>
<b>[[package]]</b> - {Lang::T('will be replaced with Package name)}.<br>
<b>[[price]]</b> - {Lang::T('will be replaced with Package price)}.<br>
<b>[[expired_date]]</b> - {Lang::T('will be replaced with Expiration date)}.<br>
<b>[[bills]]</b> - {Lang::T('additional bills for customers)}.
<b>[[name]]</b> - {Lang::T('will be replaced with Customer Name')}.<br>
<b>[[username]]</b> - {Lang::T('will be replaced with Customer username')}.<br>
<b>[[package]]</b> - {Lang::T('will be replaced with Package name')}.<br>
<b>[[price]]</b> - {Lang::T('will be replaced with Package price')}.<br>
<b>[[expired_date]]</b> - {Lang::T('will be replaced with Expiration date')}.<br>
<b>[[bills]]</b> - {Lang::T('additional bills for customers')}.
</p>
</div>
</div>
@ -50,15 +50,15 @@
<label class="col-md-2 control-label">{Lang::T('Reminder 3 days')}</label>
<div class="col-md-6">
<textarea class="form-control" id="reminder_3_day" name="reminder_3_day"
rows="3">{Lang::htmlspecialchars($_json['reminder_3_day'])}</textarea>
rows="4">{Lang::htmlspecialchars($_json['reminder_3_day'])}</textarea>
</div>
<p class="help-block col-md-4">
<b>[[name]]</b> - {Lang::T('will be replaced with Customer Name)}.<br>
<b>[[username]]</b> - {Lang::T('will be replaced with Customer username)}.<br>
<b>[[package]]</b> - {Lang::T('will be replaced with Package name)}.<br>
<b>[[price]]</b> - {Lang::T('will be replaced with Package price)}.<br>
<b>[[expired_date]]</b> - {Lang::T('will be replaced with Expiration date)}.<br>
<b>[[bills]]</b> - {Lang::T('additional bills for customers)}.
<b>[[name]]</b> - {Lang::T('will be replaced with Customer Name')}.<br>
<b>[[username]]</b> - {Lang::T('will be replaced with Customer username')}.<br>
<b>[[package]]</b> - {Lang::T('will be replaced with Package name')}.<br>
<b>[[price]]</b> - {Lang::T('will be replaced with Package price')}.<br>
<b>[[expired_date]]</b> - {Lang::T('will be replaced with Expiration date')}.<br>
<b>[[bills]]</b> - {Lang::T('additional bills for customers')}.
</p>
</div>
</div>
@ -67,15 +67,15 @@
<label class="col-md-2 control-label">{Lang::T('Reminder 1 day')}</label>
<div class="col-md-6">
<textarea class="form-control" id="reminder_1_day" name="reminder_1_day"
rows="3">{Lang::htmlspecialchars($_json['reminder_1_day'])}</textarea>
rows="4">{Lang::htmlspecialchars($_json['reminder_1_day'])}</textarea>
</div>
<p class="help-block col-md-4">
<b>[[name]]</b> - {Lang::T('will be replaced with Customer Name)}.<br>
<b>[[username]]</b> - {Lang::T('will be replaced with Customer username)}.<br>
<b>[[package]]</b> - {Lang::T('will be replaced with Package name)}.<br>
<b>[[price]]</b> - {Lang::T('will be replaced with Package price)}.<br>
<b>[[expired_date]]</b> - {Lang::T('will be replaced with Expiration date)}.<br>
<b>[[bills]]</b> - {Lang::T('additional bills for customers)}.
<b>[[name]]</b> - {Lang::T('will be replaced with Customer Name')}.<br>
<b>[[username]]</b> - {Lang::T('will be replaced with Customer username')}.<br>
<b>[[package]]</b> - {Lang::T('will be replaced with Package name')}.<br>
<b>[[price]]</b> - {Lang::T('will be replaced with Package price')}.<br>
<b>[[expired_date]]</b> - {Lang::T('will be replaced with Expiration date')}.<br>
<b>[[bills]]</b> - {Lang::T('additional bills for customers')}.
</p>
</div>
</div>
@ -88,22 +88,22 @@
rows="20">{Lang::htmlspecialchars($_json['invoice_paid'])}</textarea>
</div>
<p class="col-md-4 help-block">
<b>[[company_name]]</b> {Lang::T('Your Company Name at Settings)}.<br>
<b>[[address]]</b> {Lang::T('Your Company Address at Settings)}.<br>
<b>[[phone]]</b> - {Lang::T('Your Company Phone at Settings)}.<br>
<b>[[invoice]]</b> - {Lang::T('Invoice number)}.<br>
<b>[[date]]</b> - {Lang::T('Date invoice created)}.<br>
<b>[[payment_gateway]]</b> - {Lang::T('Payment gateway user paid from)}.<br>
<b>[[payment_channel]]</b> - {Lang::T('Payment channel user paid from)}.<br>
<b>[[type]]</b> - {Lang::T('is Hotspot or PPPOE)}.<br>
<b>[[plan_name]]</b> - {Lang::T('Internet Package)}.<br>
<b>[[plan_price]]</b> - {Lang::T('Internet Package Prices)}.<br>
<b>[[name]]</b> - {Lang::T('Receiver name)}.<br>
<b>[[user_name]]</b> - {Lang::T('Username internet)}.<br>
<b>[[user_password]]</b> - {Lang::T('User password)}.<br>
<b>[[expired_date]]</b> - {Lang::T('Expired datetime)}.<br>
<b>[[footer]]</b> - {Lang::T('Invoice Footer)}.<br>
<b>[[note]]</b> - {Lang::T('For Notes by admin)}.<br>
<b>[[company_name]]</b> {Lang::T('Your Company Name at Settings')}.<br>
<b>[[address]]</b> {Lang::T('Your Company Address at Settings')}.<br>
<b>[[phone]]</b> - {Lang::T('Your Company Phone at Settings')}.<br>
<b>[[invoice]]</b> - {Lang::T('Invoice number')}.<br>
<b>[[date]]</b> - {Lang::T('Date invoice created')}.<br>
<b>[[payment_gateway]]</b> - {Lang::T('Payment gateway user paid from')}.<br>
<b>[[payment_channel]]</b> - {Lang::T('Payment channel user paid from')}.<br>
<b>[[type]]</b> - {Lang::T('is Hotspot or PPPOE')}.<br>
<b>[[plan_name]]</b> - {Lang::T('Internet Package')}.<br>
<b>[[plan_price]]</b> - {Lang::T('Internet Package Prices')}.<br>
<b>[[name]]</b> - {Lang::T('Receiver name')}.<br>
<b>[[user_name]]</b> - {Lang::T('Username internet')}.<br>
<b>[[user_password]]</b> - {Lang::T('User password')}.<br>
<b>[[expired_date]]</b> - {Lang::T('Expired datetime')}.<br>
<b>[[footer]]</b> - {Lang::T('Invoice Footer')}.<br>
<b>[[note]]</b> - {Lang::T('For Notes by admin')}.<br>
</p>
</div>
</div>
@ -116,23 +116,23 @@
rows="20">{Lang::htmlspecialchars($_json['invoice_balance'])}</textarea>
</div>
<p class="col-md-4 help-block">
<b>[[company_name]]</b> - {Lang::T('Your Company Name at Settings)}.<br>
<b>[[address]]</b> - {Lang::T('Your Company Address at Settings)}.<br>
<b>[[phone]]</b> - {Lang::T('Your Company Phone at Settings)}.<br>
<b>[[invoice]]</b> - {Lang::T('Invoice number)}.<br>
<b>[[date]]</b> - {Lang::T('Date invoice created)}.<br>
<b>[[payment_gateway]]</b> - {Lang::T('Payment gateway user paid from)}.<br>
<b>[[payment_channel]]</b> - {Lang::T('Payment channel user paid from)}.<br>
<b>[[type]]</b> - {Lang::T('is Hotspot or PPPOE)}.<br>
<b>[[plan_name]]</b> - {Lang::T('Internet Package)}.<br>
<b>[[plan_price]]</b> - {Lang::T('Internet Package Prices)}.<br>
<b>[[name]]</b> - {Lang::T('Receiver name)}.<br>
<b>[[user_name]]</b> - {Lang::T('Username internet)}.<br>
<b>[[user_password]]</b> - {Lang::T('User password)}.<br>
<b>[[trx_date]]</b> - {Lang::T('Transaction datetime)}.<br>
<b>[[balance_before]]</b> - {Lang::T('Balance Before)}.<br>
<b>[[balance]]</b> - {Lang::T('Balance After)}.<br>
<b>[[footer]]</b> - {Lang::T('Invoice Footer)}.
<b>[[company_name]]</b> - {Lang::T('Your Company Name at Settings')}.<br>
<b>[[address]]</b> - {Lang::T('Your Company Address at Settings')}.<br>
<b>[[phone]]</b> - {Lang::T('Your Company Phone at Settings')}.<br>
<b>[[invoice]]</b> - {Lang::T('Invoice number')}.<br>
<b>[[date]]</b> - {Lang::T('Date invoice created')}.<br>
<b>[[payment_gateway]]</b> - {Lang::T('Payment gateway user paid from')}.<br>
<b>[[payment_channel]]</b> - {Lang::T('Payment channel user paid from')}.<br>
<b>[[type]]</b> - {Lang::T('is Hotspot or PPPOE')}.<br>
<b>[[plan_name]]</b> - {Lang::T('Internet Package')}.<br>
<b>[[plan_price]]</b> - {Lang::T('Internet Package Prices')}.<br>
<b>[[name]]</b> - {Lang::T('Receiver name')}.<br>
<b>[[user_name]]</b> - {Lang::T('Username internet')}.<br>
<b>[[user_password]]</b> - {Lang::T('User password')}.<br>
<b>[[trx_date]]</b> - {Lang::T('Transaction datetime')}.<br>
<b>[[balance_before]]</b> - {Lang::T('Balance Before')}.<br>
<b>[[balance]]</b> - {Lang::T('Balance After')}.<br>
<b>[[footer]]</b> - {Lang::T('Invoice Footer')}.
</p>
</div>
</div>
@ -142,12 +142,12 @@
<label class="col-md-2 control-label">{Lang::T('Send Balance')}</label>
<div class="col-md-6">
<textarea class="form-control" id="balance_send" name="balance_send"
rows="3">{if $_json['balance_send']}{Lang::htmlspecialchars($_json['balance_send'])}{else}{Lang::htmlspecialchars($_default['balance_send'])}{/if}</textarea>
rows="4">{if $_json['balance_send']}{Lang::htmlspecialchars($_json['balance_send'])}{else}{Lang::htmlspecialchars($_default['balance_send'])}{/if}</textarea>
</div>
<p class="col-md-4 help-block">
<b>[[name]]</b> - {Lang::T('Receiver name)}.<br>
<b>[[balance]]</b> - {Lang::T('how much balance have been send)}.<br>
<b>[[current_balance]]</b> - {Lang::T('Current Balance)}.
<b>[[name]]</b> - {Lang::T('Receiver name')}.<br>
<b>[[balance]]</b> - {Lang::T('how much balance have been send')}.<br>
<b>[[current_balance]]</b> - {Lang::T('Current Balance')}.
</p>
</div>
</div>
@ -156,12 +156,12 @@
<label class="col-md-2 control-label">{Lang::T('Received Balance')}</label>
<div class="col-md-6">
<textarea class="form-control" id="balance_received" name="balance_received"
rows="3">{if $_json['balance_received']}{Lang::htmlspecialchars($_json['balance_received'])}{else}{Lang::htmlspecialchars($_default['balance_received'])}{/if}</textarea>
rows="4">{if $_json['balance_received']}{Lang::htmlspecialchars($_json['balance_received'])}{else}{Lang::htmlspecialchars($_default['balance_received'])}{/if}</textarea>
</div>
<p class="col-md-4 help-block">
<b>[[name]]</b> - {Lang::T('Sender name)}.<br>
<b>[[balance]]</b> - {Lang::T('how much balance have been received)}.<br>
<b>[[current_balance]]</b> - {Lang::T('Current Balance)}.
<b>[[name]]</b> - {Lang::T('Sender name')}.<br>
<b>[[balance]]</b> - {Lang::T('how much balance have been received')}.<br>
<b>[[current_balance]]</b> - {Lang::T('Current Balance')}.
</p>
</div>
</div>

View File

@ -11,7 +11,7 @@
class="glyphicon glyphicon-refresh" aria-hidden="true"></span> sync</a>
</div>
<div class="btn-group pull-right">
<a class="btn btn-info btn-xs" title="save" href="{$_url}customers/csv"
<a class="btn btn-info btn-xs" title="save" href="{$_url}customers/csv-prepaid"
onclick="return confirm('This will export to CSV?')"><span class="glyphicon glyphicon-download"
aria-hidden="true"></span> CSV</a>
</div>
@ -75,7 +75,7 @@
{/if}
{if $ds['status']=='off' && $_c['extend_expired']}
<a href="javascript:extend('{$ds['id']}')"
class="btn btn-info btn-xs">{Lang::T('extend')}</a>
class="btn btn-info btn-xs">{Lang::T('Extend')}</a>
{/if}
</td>
</tr>

View File

@ -187,7 +187,7 @@
{if $_bill['status'] != 'on' && $_bill['prepaid'] != 'yes' && $_c['extend_expired']}
<a class="btn btn-warning text-black btn-sm"
href="{$_url}home&extend={$_bill['id']}&stoken={App::getToken()}"
onclick="return confirm('{str_replace("\n","\\n",str_replace("\r","",$_c['extend_confirmation']))}?')">{Lang::T('Extend')}</a>
onclick="return confirm('{Text::toHex($_c['extend_confirmation'])}')">{Lang::T('Extend')}</a>
{/if}
<a class="btn btn-primary pull-right btn-sm"
href="{$_url}home&recharge={$_bill['id']}&stoken={App::getToken()}"

View File

@ -21,7 +21,8 @@
<div class="input-group-addon">
<span class="fa fa-search"></span>
</div>
<input type="text" name="search" class="form-control" placeholder="{Lang::T('Search by Code Voucher')}..." value="{$search}">
<input type="text" name="search" class="form-control"
placeholder="{Lang::T('Search by Code Voucher')}..." value="{$search}">
<div class="input-group-btn">
<button class="btn btn-success" type="submit">{Lang::T('Search')}</button>
</div>
@ -32,12 +33,14 @@
<div class="col-md-4">
<div class="btn-group btn-group-justified" role="group">
<div class="btn-group" role="group">
<a href="{$_url}plan/add-voucher" class="btn btn-primary btn-block"><i class="ion ion-android-add"></i> {Lang::T('Add Vouchers')}</a>
<a href="{$_url}plan/add-voucher" class="btn btn-primary btn-block"><i
class="ion ion-android-add"></i> {Lang::T('Add Vouchers')}</a>
</div>
</div>
<div class="btn-group btn-group-justified" role="group">
<div class="btn-group" role="group">
<a href="{$_url}plan/print-voucher" target="print_voucher" class="btn btn-info btn-block"><i class="ion ion-android-print"></i> Print</a>
<a href="{$_url}plan/print-voucher" target="print_voucher"
class="btn btn-info btn-block"><i class="ion ion-android-print"></i> Print</a>
</div>
</div>
</div>&nbsp;
@ -82,8 +85,7 @@
</td>
<td>
{if $ds['status'] neq '1'}
<a href="{$_url}plan/voucher-view/{$ds['id']}" id="{$ds['id']}"
style="margin: 0px;"
<a href="{$_url}plan/voucher-view/{$ds['id']}" id="{$ds['id']}" style="margin: 0px;"
class="btn btn-success btn-xs">&nbsp;&nbsp;{Lang::T('View')}&nbsp;&nbsp;</a>
{/if}
{if in_array($_admin['user_type'],['SuperAdmin','Admin'])}
@ -98,15 +100,7 @@
</tbody>
</table>
</div>
<ul class="pagination pagination-sm">
{if $page>0}
<li><a href="{$_url}plan/voucher&p={$page-1}&code={$_code}">{Lang::T('Prev')}</a></li>
{/if}
{if $d}
<li><a href="{$_url}plan/voucher&p={$page+1}&code={$_code}">{Lang::T('Next')}</a></li>
{/if}
</ul>
{include file="pagination.tpl"}
</div>
</div>
</div>

View File

@ -141,12 +141,12 @@ function r2($to, $ntype = 'e', $msg = '')
{
if ($msg == '') {
header("location: $to");
exit;
die();
}
$_SESSION['ntype'] = $ntype;
$_SESSION['notify'] = $msg;
header("location: $to");
exit;
die();
}
function copyFolder($from, $to, $exclude = [])

View File

@ -1,3 +1,3 @@
{
"version": "2024.4.15"
"version": "2024.4.23"
}