Compare commits
17 Commits
2023.8.28
...
2023.9.1.1
Author | SHA1 | Date | |
---|---|---|---|
04c480cafa | |||
8be8737236 | |||
a8515b7d60 | |||
d71eb37f48 | |||
8fcca70ead | |||
59f6c180cf | |||
d53c4cf8c8 | |||
620bfaeb29 | |||
863dd65145 | |||
4de849fe34 | |||
18d68d68c8 | |||
1b15da5c04 | |||
51416626fb | |||
5a10c19853 | |||
44cdd8f594 | |||
00cf90e6ea | |||
341e26f4d6 |
17
CHANGELOG.md
17
CHANGELOG.md
@ -2,6 +2,23 @@
|
|||||||
|
|
||||||
# CHANGELOG
|
# CHANGELOG
|
||||||
|
|
||||||
|
## 2023.9.1.1
|
||||||
|
|
||||||
|
- Fix cronjob Delete customer
|
||||||
|
|
||||||
|
## 2023.9.1
|
||||||
|
|
||||||
|
- Critical bug fixes, bug happen when user buy package, expired time will be calculated from last expired, not from when they buy the package
|
||||||
|
- Time not change after user buy package for extending
|
||||||
|
- Add Cancel Button to user dashboard when it show unpaid package
|
||||||
|
- Fix username in user dashboard
|
||||||
|
|
||||||
|
## 2023.8.30
|
||||||
|
|
||||||
|
- Upload Logo from settings
|
||||||
|
- Fix Print value
|
||||||
|
- Fix Time when editing prepaid
|
||||||
|
|
||||||
## 2023.8.28
|
## 2023.8.28
|
||||||
|
|
||||||
- Extend expiration if buy same package
|
- Extend expiration if buy same package
|
||||||
|
@ -16,11 +16,8 @@
|
|||||||
|
|
||||||
<body style='background-color: #FBFBFB;'>
|
<body style='background-color: #FBFBFB;'>
|
||||||
<div id='main-container'>
|
<div id='main-container'>
|
||||||
<div class='header'>
|
<img src="img/logo.png" class="img-responsive" alt="Logo" />
|
||||||
<div class="header-box wrapper">
|
<hr>
|
||||||
<div class="hd-logo"><a href="#"><img src="img/logo.png" alt="Logo" /></a></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<!-- contents area start -->
|
<!-- contents area start -->
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
|
@ -16,11 +16,8 @@
|
|||||||
|
|
||||||
<body style='background-color: #FBFBFB;'>
|
<body style='background-color: #FBFBFB;'>
|
||||||
<div id='main-container'>
|
<div id='main-container'>
|
||||||
<div class='header'>
|
<img src="img/logo.png" class="img-responsive" alt="Logo" />
|
||||||
<div class="header-box wrapper">
|
<hr>
|
||||||
<div class="hd-logo"><a href="#"><img src="img/logo.png" alt="Logo" /></a></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="span12">
|
<div class="span12">
|
||||||
<h4> PHPNuxBill Installer </h4>
|
<h4> PHPNuxBill Installer </h4>
|
||||||
|
@ -15,11 +15,8 @@
|
|||||||
|
|
||||||
<body style='background-color: #FBFBFB;'>
|
<body style='background-color: #FBFBFB;'>
|
||||||
<div id='main-container'>
|
<div id='main-container'>
|
||||||
<div class='header'>
|
<img src="img/logo.png" class="img-responsive" alt="Logo" />
|
||||||
<div class="header-box wrapper">
|
<hr>
|
||||||
<div class="hd-logo"><a href="#"><img src="img/logo.png" alt="Logo"/></a></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="span12">
|
<div class="span12">
|
||||||
<h4> PHPNuxBill Installer </h4>
|
<h4> PHPNuxBill Installer </h4>
|
||||||
|
@ -82,11 +82,8 @@ $wConfig = "../config.php";
|
|||||||
|
|
||||||
<body style='background-color: #FBFBFB;'>
|
<body style='background-color: #FBFBFB;'>
|
||||||
<div id='main-container'>
|
<div id='main-container'>
|
||||||
<div class='header'>
|
<img src="img/logo.png" class="img-responsive" alt="Logo" />
|
||||||
<div class="header-box wrapper">
|
<hr>
|
||||||
<div class="hd-logo"><a href="#"><img src="img/logo.png" alt="Logo"/></a></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="span12">
|
<div class="span12">
|
||||||
<h4> PHPNuxBill Installer </h4>
|
<h4> PHPNuxBill Installer </h4>
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<title>PHPNuxBill Installer</title>
|
<title>PHPNuxBill Installer</title>
|
||||||
<link rel="shortcut icon" type="image/x-icon" href="img/favicon.ico">
|
<link rel="shortcut icon" type="image/x-icon" href="img/favicon.ico">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
@ -9,38 +10,46 @@
|
|||||||
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
|
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
|
||||||
<![endif]-->
|
<![endif]-->
|
||||||
|
|
||||||
<link type='text/css' href='css/style.css' rel='stylesheet'/>
|
<link type='text/css' href='css/style.css' rel='stylesheet' />
|
||||||
<link type='text/css' href="css/bootstrap.min.css" rel="stylesheet">
|
<link type='text/css' href="css/bootstrap.min.css" rel="stylesheet">
|
||||||
</head>
|
</head>
|
||||||
|
<?php if (!file_exists('../pages')) rename('../pages_template', '../pages'); ?>
|
||||||
|
|
||||||
<body style='background-color: #FBFBFB;'>
|
<body style='background-color: #FBFBFB;'>
|
||||||
<div id='main-container'>
|
<div id='main-container'>
|
||||||
<div class='header'>
|
<img src="img/logo.png" class="img-responsive" alt="Logo" />
|
||||||
<div class="header-box wrapper">
|
<hr>
|
||||||
<div class="hd-logo"><a href="#"><img src="img/logo.png" alt="Logo"/></a></div>
|
<div class="span12">
|
||||||
</div>
|
<h4> PHPNuxBill Installer </h4>
|
||||||
</div>
|
<p>
|
||||||
|
<strong>Congratulations!</strong><br>
|
||||||
<div class="span12">
|
You have just install PHPNuxBill !<br><br>
|
||||||
<h4> PHPNuxBill Installer </h4>
|
<span class="text-danger">But wait!!<br>
|
||||||
<p>
|
<ol>
|
||||||
<strong>Congratulations!</strong><br>
|
<li>Don't forget to rename folder <b>pages_example</b> to <b>pages</b>.<br>
|
||||||
You have just install PHPNuxBill !<br>
|
if it not yet renamed</li>
|
||||||
To Login Admin Portal:<br>
|
<li>Activate <a href="https://github.com/hotspotbilling/phpnuxbill/wiki/Cron-Jobs" target="_blank">Cronjob</a> for Expired and Reminder.</li>
|
||||||
Use this link -
|
<li>Check <a href="https://github.com/hotspotbilling/phpnuxbill/wiki/How-It-Works---Cara-kerja" target="_blank">how PHPNuxbill Works</a></li>
|
||||||
<?php
|
<li><a href="https://github.com/hotspotbilling/phpnuxbill/wiki#login-page-mikrotik" target="_blank">how to link Mikrotik Login to PHPNuxBill</a></li>
|
||||||
$cururl = (((!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off')|| $_SERVER['SERVER_PORT'] == 443)?'https':'http').'://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
|
<li>or use <a href="https://github.com/hotspotbilling/phpnuxbill-mikrotik-login-template" target="_blank">Mikrotik Login Template for PHPNuxBill</a></li>
|
||||||
$appurl = str_replace('/install/step5.php', '', $cururl);
|
</ol>
|
||||||
$appurl = str_replace('/system', '', $appurl);
|
</span><br><br>
|
||||||
echo '<a href="' . $appurl . '/admin">' . $appurl . '/admin</a>';
|
To Login Admin Portal:<br>
|
||||||
?>
|
Use this link -
|
||||||
<br>
|
<?php
|
||||||
Username: admin<br>
|
$cururl = (((!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') || $_SERVER['SERVER_PORT'] == 443) ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
|
||||||
Password: admin<br>
|
$appurl = str_replace('/install/step5.php', '', $cururl);
|
||||||
For security, Delete the <b>install</b> directory inside system folder.
|
$appurl = str_replace('/system', '', $appurl);
|
||||||
</p>
|
echo '<a href="' . $appurl . '/admin">' . $appurl . '/admin</a>';
|
||||||
</div>
|
?>
|
||||||
</div>
|
<br>
|
||||||
<div class="footer">Copyright © 2021 PHPNuxBill. All Rights Reserved<br/><br/></div>
|
Username: admin<br>
|
||||||
|
Password: admin<br>
|
||||||
|
For security, Delete the <b>install</b> directory inside system folder.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="footer">Copyright © 2021 PHPNuxBill. All Rights Reserved<br /><br /></div>
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
@ -16,11 +16,8 @@
|
|||||||
|
|
||||||
<body style='background-color: #FBFBFB;'>
|
<body style='background-color: #FBFBFB;'>
|
||||||
<div id='main-container'>
|
<div id='main-container'>
|
||||||
<div class='header'>
|
<img src="img/logo.png" class="img-responsive" alt="Logo" />
|
||||||
<div class="header-box wrapper">
|
<hr>
|
||||||
<div class="hd-logo"><a href="#"><img src="img/logo.png" alt="Logo" /></a></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="span12">
|
<div class="span12">
|
||||||
<h4> PHPNuxBill Updater </h4>
|
<h4> PHPNuxBill Updater </h4>
|
||||||
|
@ -33,6 +33,63 @@ class File
|
|||||||
rmdir($path);
|
rmdir($path);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function resizeCropImage($source_file, $dst_dir, $max_width, $max_height, $quality = 80)
|
||||||
|
{
|
||||||
|
$imgsize = getimagesize($source_file);
|
||||||
|
$width = $imgsize[0];
|
||||||
|
$height = $imgsize[1];
|
||||||
|
$mime = $imgsize['mime'];
|
||||||
|
|
||||||
|
switch ($mime) {
|
||||||
|
case 'image/gif':
|
||||||
|
$image_create = "imagecreatefromgif";
|
||||||
|
$image = "imagegif";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'image/png':
|
||||||
|
$image_create = "imagecreatefrompng";
|
||||||
|
$image = "imagepng";
|
||||||
|
$quality = 7;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'image/jpeg':
|
||||||
|
$image_create = "imagecreatefromjpeg";
|
||||||
|
$image = "imagejpeg";
|
||||||
|
$quality = 80;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($max_width == 0) {
|
||||||
|
$max_width = $width;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($max_height == 0) {
|
||||||
|
$max_height = $height;
|
||||||
|
}
|
||||||
|
|
||||||
|
$widthRatio = $max_width / $width;
|
||||||
|
$heightRatio = $max_height / $height;
|
||||||
|
$ratio = min($widthRatio, $heightRatio);
|
||||||
|
$nwidth = (int)$width * $ratio;
|
||||||
|
$nheight = (int)$height * $ratio;
|
||||||
|
|
||||||
|
$dst_img = imagecreatetruecolor($nwidth, $nheight);
|
||||||
|
$white = imagecolorallocate($dst_img, 255, 255, 255);
|
||||||
|
imagefill($dst_img, 0, 0, $white);
|
||||||
|
$src_img = $image_create($source_file);
|
||||||
|
imagecopyresampled($dst_img, $src_img, 0, 0, 0, 0, $nwidth, $nheight, $width, $height);
|
||||||
|
|
||||||
|
$image($dst_img, $dst_dir, $quality);
|
||||||
|
|
||||||
|
if ($dst_img) imagedestroy($dst_img);
|
||||||
|
if ($src_img) imagedestroy($src_img);
|
||||||
|
return file_exists($dst_dir);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* file path fixer
|
* file path fixer
|
||||||
|
@ -39,7 +39,11 @@ class Lang
|
|||||||
|
|
||||||
public static function dateTimeFormat($date){
|
public static function dateTimeFormat($date){
|
||||||
global $config;
|
global $config;
|
||||||
return date($config['date_format']. ' H:i', strtotime($date));
|
if(strtotime($date) < strtotime("2000-01-01 00:00:00")){
|
||||||
|
return "";
|
||||||
|
}else{
|
||||||
|
return date($config['date_format']. ' H:i', strtotime($date));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function dateAndTimeFormat($date, $time){
|
public static function dateAndTimeFormat($date, $time){
|
||||||
|
@ -19,7 +19,7 @@ class Package
|
|||||||
*/
|
*/
|
||||||
public static function rechargeUser($id_customer, $router_name, $plan_id, $gateway, $channel)
|
public static function rechargeUser($id_customer, $router_name, $plan_id, $gateway, $channel)
|
||||||
{
|
{
|
||||||
global $_c, $_L, $_notifmsg;
|
global $_c;
|
||||||
$date_now = date("Y-m-d H:i:s");
|
$date_now = date("Y-m-d H:i:s");
|
||||||
$date_only = date("Y-m-d");
|
$date_only = date("Y-m-d");
|
||||||
$time_only = date("H:i:s");
|
$time_only = date("H:i:s");
|
||||||
@ -102,7 +102,7 @@ class Package
|
|||||||
Mikrotik::addHotspotUser($client, $p, $c);
|
Mikrotik::addHotspotUser($client, $p, $c);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($b['namebp'] == $p['name_plan']) {
|
if ($b['namebp'] == $p['name_plan'] && $b['status'] == 'on') {
|
||||||
// if it same internet plan, expired will extend
|
// if it same internet plan, expired will extend
|
||||||
if ($p['validity_unit'] == 'Months') {
|
if ($p['validity_unit'] == 'Months') {
|
||||||
$date_exp = date("Y-m-d", strtotime($b['expiration'] . ' +' . $p['validity'] . ' months'));
|
$date_exp = date("Y-m-d", strtotime($b['expiration'] . ' +' . $p['validity'] . ' months'));
|
||||||
@ -200,12 +200,14 @@ class Package
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if ($b['namebp'] == $p['name_plan']) {
|
if ($b['namebp'] == $p['name_plan'] && $b['status'] == 'on') {
|
||||||
// if it same internet plan, expired will extend
|
// if it same internet plan, expired will extend
|
||||||
if ($p['validity_unit'] == 'Months') {
|
if ($p['validity_unit'] == 'Months') {
|
||||||
$date_exp = date("Y-m-d", strtotime($b['expiration'] . ' +' . $p['validity'] . ' months'));
|
$date_exp = date("Y-m-d", strtotime($b['expiration'] . ' +' . $p['validity'] . ' months'));
|
||||||
|
$time = $b['time'];
|
||||||
} else if ($p['validity_unit'] == 'Days') {
|
} else if ($p['validity_unit'] == 'Days') {
|
||||||
$date_exp = date("Y-m-d", strtotime($b['expiration'] . ' +' . $p['validity'] . ' days'));
|
$date_exp = date("Y-m-d", strtotime($b['expiration'] . ' +' . $p['validity'] . ' days'));
|
||||||
|
$time = $b['time'];
|
||||||
} else if ($p['validity_unit'] == 'Hrs') {
|
} else if ($p['validity_unit'] == 'Hrs') {
|
||||||
$datetime = explode(' ', date("Y-m-d H:i:s", strtotime($b['expiration'] . ' ' . $b['time'] . ' +' . $p['validity'] . ' hours')));
|
$datetime = explode(' ', date("Y-m-d H:i:s", strtotime($b['expiration'] . ' ' . $b['time'] . ' +' . $p['validity'] . ' hours')));
|
||||||
$date_exp = $datetime[0];
|
$date_exp = $datetime[0];
|
||||||
|
@ -114,7 +114,6 @@ switch ($action) {
|
|||||||
|
|
||||||
case 'print':
|
case 'print':
|
||||||
$id = _post('id');
|
$id = _post('id');
|
||||||
|
|
||||||
$d = ORM::for_table('tbl_transactions')->where('id', $id)->find_one();
|
$d = ORM::for_table('tbl_transactions')->where('id', $id)->find_one();
|
||||||
$ui->assign('d', $d);
|
$ui->assign('d', $d);
|
||||||
|
|
||||||
@ -367,19 +366,17 @@ switch ($action) {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case 'refill-post':
|
case 'refill-post':
|
||||||
$user = _post('id_customer');
|
|
||||||
$code = _post('code');
|
$code = _post('code');
|
||||||
|
$user = ORM::for_table('tbl_customers')->where('id', _post('id_customer'))->find_one();
|
||||||
$v1 = ORM::for_table('tbl_voucher')->where('code', $code)->where('status', 0)->find_one();
|
$v1 = ORM::for_table('tbl_voucher')->where('code', $code)->where('status', 0)->find_one();
|
||||||
|
|
||||||
run_hook('refill_customer'); #HOOK
|
run_hook('refill_customer'); #HOOK
|
||||||
if ($v1) {
|
if ($v1) {
|
||||||
if (Package::rechargeUser($user, $v1['routers'], $v1['id_plan'], "Refill", "Voucher")) {
|
if (Package::rechargeUser($user['id'], $v1['routers'], $v1['id_plan'], "Refill", "Voucher")) {
|
||||||
$v1->status = "1";
|
$v1->status = "1";
|
||||||
$v1->user = $c['username'];
|
$v1->user = $user['username'];
|
||||||
$v1->save();
|
$v1->save();
|
||||||
$c = ORM::for_table('tbl_customers')->where('id', $id_customer)->find_one();
|
$in = ORM::for_table('tbl_transactions')->where('username', $user['username'])->order_by_desc('id')->find_one();
|
||||||
$in = ORM::for_table('tbl_transactions')->where('username', $c['username'])->order_by_desc('id')->find_one();
|
|
||||||
$ui->assign('in', $in);
|
$ui->assign('in', $in);
|
||||||
$ui->assign('date', date("Y-m-d H:i:s"));
|
$ui->assign('date', date("Y-m-d H:i:s"));
|
||||||
$ui->display('invoice.tpl');
|
$ui->display('invoice.tpl');
|
||||||
|
@ -17,6 +17,12 @@ switch ($action) {
|
|||||||
if ($admin['user_type'] != 'Admin') {
|
if ($admin['user_type'] != 'Admin') {
|
||||||
r2(U . "dashboard", 'e', $_L['Do_Not_Access']);
|
r2(U . "dashboard", 'e', $_L['Do_Not_Access']);
|
||||||
}
|
}
|
||||||
|
if (file_exists('system/uploads/logo.png')) {
|
||||||
|
$logo = 'system/uploads/logo.png?' . time();
|
||||||
|
} else {
|
||||||
|
$logo = 'system/uploads/logo.default.png';
|
||||||
|
}
|
||||||
|
$ui->assign('logo', $logo);
|
||||||
run_hook('view_app_settings'); #HOOK
|
run_hook('view_app_settings'); #HOOK
|
||||||
$ui->display('app-settings.tpl');
|
$ui->display('app-settings.tpl');
|
||||||
break;
|
break;
|
||||||
@ -219,8 +225,15 @@ switch ($action) {
|
|||||||
$user_notification_payment = _post('user_notification_payment');
|
$user_notification_payment = _post('user_notification_payment');
|
||||||
$address = _post('address');
|
$address = _post('address');
|
||||||
$tawkto = _post('tawkto');
|
$tawkto = _post('tawkto');
|
||||||
$radius_mode = _post('radius_mode')*1;
|
$radius_mode = _post('radius_mode') * 1;
|
||||||
run_hook('save_settings'); #HOOK
|
run_hook('save_settings'); #HOOK
|
||||||
|
|
||||||
|
|
||||||
|
if (!empty($_FILES['logo']['name'])) {
|
||||||
|
if (file_exists('system/uploads/logo.png')) unlink('system/uploads/logo.png');
|
||||||
|
File::resizeCropImage($_FILES['logo']['tmp_name'], 'system/uploads/logo.png', 1078, 200, 100);
|
||||||
|
if (file_exists($_FILES['logo']['tmp_name'])) unlink($_FILES['logo']['tmp_name']);
|
||||||
|
}
|
||||||
if ($company == '') {
|
if ($company == '') {
|
||||||
r2(U . 'settings/app', 'e', $_L['All_field_is_required']);
|
r2(U . 'settings/app', 'e', $_L['All_field_is_required']);
|
||||||
} else {
|
} else {
|
||||||
@ -239,10 +252,10 @@ switch ($action) {
|
|||||||
|
|
||||||
|
|
||||||
$d = ORM::for_table('tbl_appconfig')->where('setting', 'CompanyFooter')->find_one();
|
$d = ORM::for_table('tbl_appconfig')->where('setting', 'CompanyFooter')->find_one();
|
||||||
if($d){
|
if ($d) {
|
||||||
$d->value = $footer;
|
$d->value = $footer;
|
||||||
$d->save();
|
$d->save();
|
||||||
}else{
|
} else {
|
||||||
$d = ORM::for_table('tbl_appconfig')->create();
|
$d = ORM::for_table('tbl_appconfig')->create();
|
||||||
$d->setting = 'CompanyFooter';
|
$d->setting = 'CompanyFooter';
|
||||||
$d->value = $footer;
|
$d->value = $footer;
|
||||||
@ -250,10 +263,10 @@ switch ($action) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$d = ORM::for_table('tbl_appconfig')->where('setting', 'disable_voucher')->find_one();
|
$d = ORM::for_table('tbl_appconfig')->where('setting', 'disable_voucher')->find_one();
|
||||||
if($d){
|
if ($d) {
|
||||||
$d->value = $disable_voucher;
|
$d->value = $disable_voucher;
|
||||||
$d->save();
|
$d->save();
|
||||||
}else{
|
} else {
|
||||||
$d = ORM::for_table('tbl_appconfig')->create();
|
$d = ORM::for_table('tbl_appconfig')->create();
|
||||||
$d->setting = 'disable_voucher';
|
$d->setting = 'disable_voucher';
|
||||||
$d->value = $disable_voucher;
|
$d->value = $disable_voucher;
|
||||||
@ -261,10 +274,10 @@ switch ($action) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$d = ORM::for_table('tbl_appconfig')->where('setting', 'enable_balance')->find_one();
|
$d = ORM::for_table('tbl_appconfig')->where('setting', 'enable_balance')->find_one();
|
||||||
if($d){
|
if ($d) {
|
||||||
$d->value = $enable_balance;
|
$d->value = $enable_balance;
|
||||||
$d->save();
|
$d->save();
|
||||||
}else{
|
} else {
|
||||||
$d = ORM::for_table('tbl_appconfig')->create();
|
$d = ORM::for_table('tbl_appconfig')->create();
|
||||||
$d->setting = 'enable_balance';
|
$d->setting = 'enable_balance';
|
||||||
$d->value = $enable_balance;
|
$d->value = $enable_balance;
|
||||||
@ -272,10 +285,10 @@ switch ($action) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$d = ORM::for_table('tbl_appconfig')->where('setting', 'allow_balance_transfer')->find_one();
|
$d = ORM::for_table('tbl_appconfig')->where('setting', 'allow_balance_transfer')->find_one();
|
||||||
if($d){
|
if ($d) {
|
||||||
$d->value = $allow_balance_transfer;
|
$d->value = $allow_balance_transfer;
|
||||||
$d->save();
|
$d->save();
|
||||||
}else{
|
} else {
|
||||||
$d = ORM::for_table('tbl_appconfig')->create();
|
$d = ORM::for_table('tbl_appconfig')->create();
|
||||||
$d->setting = 'allow_balance_transfer';
|
$d->setting = 'allow_balance_transfer';
|
||||||
$d->value = $allow_balance_transfer;
|
$d->value = $allow_balance_transfer;
|
||||||
@ -283,10 +296,10 @@ switch ($action) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$d = ORM::for_table('tbl_appconfig')->where('setting', 'minimum_transfer')->find_one();
|
$d = ORM::for_table('tbl_appconfig')->where('setting', 'minimum_transfer')->find_one();
|
||||||
if($d){
|
if ($d) {
|
||||||
$d->value = $minimum_transfer;
|
$d->value = $minimum_transfer;
|
||||||
$d->save();
|
$d->save();
|
||||||
}else{
|
} else {
|
||||||
$d = ORM::for_table('tbl_appconfig')->create();
|
$d = ORM::for_table('tbl_appconfig')->create();
|
||||||
$d->setting = 'minimum_transfer';
|
$d->setting = 'minimum_transfer';
|
||||||
$d->value = $minimum_transfer;
|
$d->value = $minimum_transfer;
|
||||||
@ -294,10 +307,10 @@ switch ($action) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$d = ORM::for_table('tbl_appconfig')->where('setting', 'telegram_bot')->find_one();
|
$d = ORM::for_table('tbl_appconfig')->where('setting', 'telegram_bot')->find_one();
|
||||||
if($d){
|
if ($d) {
|
||||||
$d->value = $telegram_bot;
|
$d->value = $telegram_bot;
|
||||||
$d->save();
|
$d->save();
|
||||||
}else{
|
} else {
|
||||||
$d = ORM::for_table('tbl_appconfig')->create();
|
$d = ORM::for_table('tbl_appconfig')->create();
|
||||||
$d->setting = 'telegram_bot';
|
$d->setting = 'telegram_bot';
|
||||||
$d->value = $telegram_bot;
|
$d->value = $telegram_bot;
|
||||||
@ -305,10 +318,10 @@ switch ($action) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$d = ORM::for_table('tbl_appconfig')->where('setting', 'telegram_target_id')->find_one();
|
$d = ORM::for_table('tbl_appconfig')->where('setting', 'telegram_target_id')->find_one();
|
||||||
if($d){
|
if ($d) {
|
||||||
$d->value = $telegram_target_id;
|
$d->value = $telegram_target_id;
|
||||||
$d->save();
|
$d->save();
|
||||||
}else{
|
} else {
|
||||||
$d = ORM::for_table('tbl_appconfig')->create();
|
$d = ORM::for_table('tbl_appconfig')->create();
|
||||||
$d->setting = 'telegram_target_id';
|
$d->setting = 'telegram_target_id';
|
||||||
$d->value = $telegram_target_id;
|
$d->value = $telegram_target_id;
|
||||||
@ -316,10 +329,10 @@ switch ($action) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$d = ORM::for_table('tbl_appconfig')->where('setting', 'sms_url')->find_one();
|
$d = ORM::for_table('tbl_appconfig')->where('setting', 'sms_url')->find_one();
|
||||||
if($d){
|
if ($d) {
|
||||||
$d->value = $sms_url;
|
$d->value = $sms_url;
|
||||||
$d->save();
|
$d->save();
|
||||||
}else{
|
} else {
|
||||||
$d = ORM::for_table('tbl_appconfig')->create();
|
$d = ORM::for_table('tbl_appconfig')->create();
|
||||||
$d->setting = 'sms_url';
|
$d->setting = 'sms_url';
|
||||||
$d->value = $sms_url;
|
$d->value = $sms_url;
|
||||||
@ -327,10 +340,10 @@ switch ($action) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$d = ORM::for_table('tbl_appconfig')->where('setting', 'wa_url')->find_one();
|
$d = ORM::for_table('tbl_appconfig')->where('setting', 'wa_url')->find_one();
|
||||||
if($d){
|
if ($d) {
|
||||||
$d->value = $wa_url;
|
$d->value = $wa_url;
|
||||||
$d->save();
|
$d->save();
|
||||||
}else{
|
} else {
|
||||||
$d = ORM::for_table('tbl_appconfig')->create();
|
$d = ORM::for_table('tbl_appconfig')->create();
|
||||||
$d->setting = 'wa_url';
|
$d->setting = 'wa_url';
|
||||||
$d->value = $wa_url;
|
$d->value = $wa_url;
|
||||||
@ -338,10 +351,10 @@ switch ($action) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$d = ORM::for_table('tbl_appconfig')->where('setting', 'user_notification_expired')->find_one();
|
$d = ORM::for_table('tbl_appconfig')->where('setting', 'user_notification_expired')->find_one();
|
||||||
if($d){
|
if ($d) {
|
||||||
$d->value = $user_notification_expired;
|
$d->value = $user_notification_expired;
|
||||||
$d->save();
|
$d->save();
|
||||||
}else{
|
} else {
|
||||||
$d = ORM::for_table('tbl_appconfig')->create();
|
$d = ORM::for_table('tbl_appconfig')->create();
|
||||||
$d->setting = 'user_notification_expired';
|
$d->setting = 'user_notification_expired';
|
||||||
$d->value = $user_notification_expired;
|
$d->value = $user_notification_expired;
|
||||||
@ -349,10 +362,10 @@ switch ($action) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$d = ORM::for_table('tbl_appconfig')->where('setting', 'user_notification_reminder')->find_one();
|
$d = ORM::for_table('tbl_appconfig')->where('setting', 'user_notification_reminder')->find_one();
|
||||||
if($d){
|
if ($d) {
|
||||||
$d->value = $user_notification_reminder;
|
$d->value = $user_notification_reminder;
|
||||||
$d->save();
|
$d->save();
|
||||||
}else{
|
} else {
|
||||||
$d = ORM::for_table('tbl_appconfig')->create();
|
$d = ORM::for_table('tbl_appconfig')->create();
|
||||||
$d->setting = 'user_notification_reminder';
|
$d->setting = 'user_notification_reminder';
|
||||||
$d->value = $user_notification_reminder;
|
$d->value = $user_notification_reminder;
|
||||||
@ -360,10 +373,10 @@ switch ($action) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$d = ORM::for_table('tbl_appconfig')->where('setting', 'user_notification_payment')->find_one();
|
$d = ORM::for_table('tbl_appconfig')->where('setting', 'user_notification_payment')->find_one();
|
||||||
if($d){
|
if ($d) {
|
||||||
$d->value = $user_notification_payment;
|
$d->value = $user_notification_payment;
|
||||||
$d->save();
|
$d->save();
|
||||||
}else{
|
} else {
|
||||||
$d = ORM::for_table('tbl_appconfig')->create();
|
$d = ORM::for_table('tbl_appconfig')->create();
|
||||||
$d->setting = 'user_notification_payment';
|
$d->setting = 'user_notification_payment';
|
||||||
$d->value = $user_notification_payment;
|
$d->value = $user_notification_payment;
|
||||||
@ -371,10 +384,10 @@ switch ($action) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$d = ORM::for_table('tbl_appconfig')->where('setting', 'tawkto')->find_one();
|
$d = ORM::for_table('tbl_appconfig')->where('setting', 'tawkto')->find_one();
|
||||||
if($d){
|
if ($d) {
|
||||||
$d->value = $tawkto;
|
$d->value = $tawkto;
|
||||||
$d->save();
|
$d->save();
|
||||||
}else{
|
} else {
|
||||||
$d = ORM::for_table('tbl_appconfig')->create();
|
$d = ORM::for_table('tbl_appconfig')->create();
|
||||||
$d->setting = 'tawkto';
|
$d->setting = 'tawkto';
|
||||||
$d->value = $tawkto;
|
$d->value = $tawkto;
|
||||||
@ -382,10 +395,10 @@ switch ($action) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$d = ORM::for_table('tbl_appconfig')->where('setting', 'radius_mode')->find_one();
|
$d = ORM::for_table('tbl_appconfig')->where('setting', 'radius_mode')->find_one();
|
||||||
if($d){
|
if ($d) {
|
||||||
$d->value = $radius_mode;
|
$d->value = $radius_mode;
|
||||||
$d->save();
|
$d->save();
|
||||||
}else{
|
} else {
|
||||||
$d = ORM::for_table('tbl_appconfig')->create();
|
$d = ORM::for_table('tbl_appconfig')->create();
|
||||||
$d->setting = 'radius_mode';
|
$d->setting = 'radius_mode';
|
||||||
$d->value = $radius_mode;
|
$d->value = $radius_mode;
|
||||||
@ -436,10 +449,10 @@ switch ($action) {
|
|||||||
|
|
||||||
|
|
||||||
$d = ORM::for_table('tbl_appconfig')->where('setting', 'country_code_phone')->find_one();
|
$d = ORM::for_table('tbl_appconfig')->where('setting', 'country_code_phone')->find_one();
|
||||||
if($d){
|
if ($d) {
|
||||||
$d->value = $country_code_phone;
|
$d->value = $country_code_phone;
|
||||||
$d->save();
|
$d->save();
|
||||||
}else{
|
} else {
|
||||||
$d = ORM::for_table('tbl_appconfig')->create();
|
$d = ORM::for_table('tbl_appconfig')->create();
|
||||||
$d->setting = 'country_code_phone';
|
$d->setting = 'country_code_phone';
|
||||||
$d->value = $country_code_phone;
|
$d->value = $country_code_phone;
|
||||||
@ -509,9 +522,9 @@ switch ($action) {
|
|||||||
r2(U . "dashboard", 'e', $_L['Do_Not_Access']);
|
r2(U . "dashboard", 'e', $_L['Do_Not_Access']);
|
||||||
}
|
}
|
||||||
run_hook('view_notifications'); #HOOK
|
run_hook('view_notifications'); #HOOK
|
||||||
if(file_exists("system/uploads/notifications.json")){
|
if (file_exists("system/uploads/notifications.json")) {
|
||||||
$ui->assign('_json', json_decode(file_get_contents('system/uploads/notifications.json'), true));
|
$ui->assign('_json', json_decode(file_get_contents('system/uploads/notifications.json'), true));
|
||||||
}else{
|
} else {
|
||||||
$ui->assign('_json', json_decode(file_get_contents('system/uploads/notifications.default.json'), true));
|
$ui->assign('_json', json_decode(file_get_contents('system/uploads/notifications.default.json'), true));
|
||||||
}
|
}
|
||||||
$ui->assign('_default', json_decode(file_get_contents('system/uploads/notifications.default.json'), true));
|
$ui->assign('_default', json_decode(file_get_contents('system/uploads/notifications.default.json'), true));
|
||||||
|
@ -19,8 +19,8 @@ ORM::configure('logging', true);
|
|||||||
include "autoload/Hookers.php";
|
include "autoload/Hookers.php";
|
||||||
|
|
||||||
// notification message
|
// notification message
|
||||||
if(file_exists("system/uploads/notifications.json")){
|
if (file_exists("system/uploads/notifications.json")) {
|
||||||
$_notifmsg =json_decode(file_get_contents('system/uploads/notifications.json'), true);
|
$_notifmsg = json_decode(file_get_contents('system/uploads/notifications.json'), true);
|
||||||
}
|
}
|
||||||
$_notifmsg_default = json_decode(file_get_contents('system/uploads/notifications.default.json'), true);
|
$_notifmsg_default = json_decode(file_get_contents('system/uploads/notifications.default.json'), true);
|
||||||
|
|
||||||
@ -66,7 +66,7 @@ date_default_timezone_set($config['timezone']);
|
|||||||
$textExpired = Lang::getNotifText('expired');
|
$textExpired = Lang::getNotifText('expired');
|
||||||
|
|
||||||
$d = 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";
|
echo "Found " . count($d) . " user(s)\n";
|
||||||
run_hook('cronjob'); #HOOK
|
run_hook('cronjob'); #HOOK
|
||||||
|
|
||||||
foreach ($d as $ds) {
|
foreach ($d as $ds) {
|
||||||
@ -84,6 +84,7 @@ foreach ($d as $ds) {
|
|||||||
$client = Mikrotik::getClient($m['ip_address'], $m['username'], $m['password']);
|
$client = Mikrotik::getClient($m['ip_address'], $m['username'], $m['password']);
|
||||||
Mikrotik::setHotspotLimitUptime($client, $c['username']);
|
Mikrotik::setHotspotLimitUptime($client, $c['username']);
|
||||||
Mikrotik::removeHotspotActiveUser($client, $c['username']);
|
Mikrotik::removeHotspotActiveUser($client, $c['username']);
|
||||||
|
Mikrotik::removeHotspotUser($client, $c['username']);
|
||||||
Message::sendPackageNotification($c['phonenumber'], $c['fullname'], $u['namebp'], $textExpired, $config['user_notification_expired']);
|
Message::sendPackageNotification($c['phonenumber'], $c['fullname'], $u['namebp'], $textExpired, $config['user_notification_expired']);
|
||||||
}
|
}
|
||||||
//update database user dengan status off
|
//update database user dengan status off
|
||||||
@ -106,10 +107,10 @@ foreach ($d as $ds) {
|
|||||||
"\nRouter: " . $router_name .
|
"\nRouter: " . $router_name .
|
||||||
"\nPrice: " . $p['price']);
|
"\nPrice: " . $p['price']);
|
||||||
}
|
}
|
||||||
}else{
|
} else {
|
||||||
echo "no renewall | plan enabled: $p[enabled] | User balance: $c[balance] | price $p[price]\n";
|
echo "no renewall | plan enabled: $p[enabled] | User balance: $c[balance] | price $p[price]\n";
|
||||||
}
|
}
|
||||||
}else{
|
} else {
|
||||||
echo "no renewall | balance $config[enable_balance] auto_renewal $c[auto_renewal]\n";
|
echo "no renewall | balance $config[enable_balance] auto_renewal $c[auto_renewal]\n";
|
||||||
}
|
}
|
||||||
} else echo " : ACTIVE \r\n";
|
} else echo " : ACTIVE \r\n";
|
||||||
@ -127,6 +128,7 @@ foreach ($d as $ds) {
|
|||||||
$client = Mikrotik::getClient($m['ip_address'], $m['username'], $m['password']);
|
$client = Mikrotik::getClient($m['ip_address'], $m['username'], $m['password']);
|
||||||
Mikrotik::disablePpoeUser($client, $c['username']);
|
Mikrotik::disablePpoeUser($client, $c['username']);
|
||||||
Mikrotik::removePpoeActive($client, $c['username']);
|
Mikrotik::removePpoeActive($client, $c['username']);
|
||||||
|
Mikrotik::removePpoeUser($client, $c['username']);
|
||||||
Message::sendPackageNotification($c['phonenumber'], $c['fullname'], $u['namebp'], $textExpired, $config['user_notification_expired']);
|
Message::sendPackageNotification($c['phonenumber'], $c['fullname'], $u['namebp'], $textExpired, $config['user_notification_expired']);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -384,3 +384,4 @@ $_L['Send_Balance'] = 'Send Balance';
|
|||||||
$_L['Received_Balance'] = 'Received Balance';
|
$_L['Received_Balance'] = 'Received Balance';
|
||||||
$_L['Minimum_Balance_Transfer'] = 'Minimum Balance Transfer';
|
$_L['Minimum_Balance_Transfer'] = 'Minimum Balance Transfer';
|
||||||
$_L['Minimum_Transfer'] = 'Minimum Transfer';
|
$_L['Minimum_Transfer'] = 'Minimum Transfer';
|
||||||
|
$_L['Company_Logo'] = 'Company Logo';
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{include file="sections/header.tpl"}
|
{include file="sections/header.tpl"}
|
||||||
|
|
||||||
<form class="form-horizontal" method="post" role="form" action="{$_url}settings/app-post">
|
<form class="form-horizontal" method="post" role="form" action="{$_url}settings/app-post" enctype="multipart/form-data">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-sm-12 col-md-12">
|
<div class="col-sm-12 col-md-12">
|
||||||
<div class="panel panel-primary panel-hovered panel-stacked mb30">
|
<div class="panel panel-primary panel-hovered panel-stacked mb30">
|
||||||
@ -17,10 +17,19 @@
|
|||||||
<div class="col-md-6">
|
<div class="col-md-6">
|
||||||
<input type="text" required class="form-control" id="company" name="company"
|
<input type="text" required class="form-control" id="company" name="company"
|
||||||
value="{$_c['CompanyName']}">
|
value="{$_c['CompanyName']}">
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<span class="help-block col-md-4">{$_L['App_Name_Help_Text']}</span>
|
<span class="help-block col-md-4">{$_L['App_Name_Help_Text']}</span>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-md-2 control-label">{Lang::T('Company Logo')}</label>
|
||||||
|
<div class="col-md-6">
|
||||||
|
<input type="file" class="form-control" id="logo" name="logo" accept="image/*">
|
||||||
|
<span class="help-block">For PDF Reports | Best size 1078 x 200 | uploaded image will be autosize</span>
|
||||||
|
</div>
|
||||||
|
<span class="help-block col-md-4">
|
||||||
|
<a href="./{$logo}" target="_blank"><img src="./{$logo}" height="48" alt="logo for PDF"></a>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="col-md-2 control-label">{Lang::T('Company Footer')}</label>
|
<label class="col-md-2 control-label">{Lang::T('Company Footer')}</label>
|
||||||
<div class="col-md-6">
|
<div class="col-md-6">
|
||||||
|
@ -33,7 +33,7 @@
|
|||||||
============================================<br>
|
============================================<br>
|
||||||
{$_L['Type']} : <b>{$d['type']}</b><br>
|
{$_L['Type']} : <b>{$d['type']}</b><br>
|
||||||
{$_L['Plan_Name']} : <b>{$d['plan_name']}</b><br>
|
{$_L['Plan_Name']} : <b>{$d['plan_name']}</b><br>
|
||||||
{$_L['Plan_Price']} : <b>{Lang::moneyFormat($in['price'])}</b><br>
|
{$_L['Plan_Price']} : <b>{Lang::moneyFormat($d['price'])}</b><br>
|
||||||
<br>
|
<br>
|
||||||
{$_L['Username']} : <b>{$d['username']}</b><br>
|
{$_L['Username']} : <b>{$d['username']}</b><br>
|
||||||
{$_L['Password']} : **********<br>
|
{$_L['Password']} : **********<br>
|
||||||
|
@ -43,7 +43,7 @@
|
|||||||
value="{$d['expiration']}">
|
value="{$d['expiration']}">
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-2">
|
<div class="col-md-2">
|
||||||
<input type="time" class="form-control" id="time" name="time"
|
<input type="text" class="form-control" id="time" name="time" placeholder="00:00:00"
|
||||||
value="{$d['time']}">
|
value="{$d['time']}">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -12,8 +12,7 @@
|
|||||||
<tbody>
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<td>{Lang::T('expired')}</td>
|
<td>{Lang::T('expired')}</td>
|
||||||
<td>{date({$_c['date_format']}, strtotime($unpaid['expired_date']))}
|
<td>{Lang::dateTimeFormat($unpaid['expired_date'])} </td>
|
||||||
{date('H:i', strtotime($unpaid['expired_date']))} </td>
|
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>{$_L['Plan_Name']}</td>
|
<td>{$_L['Plan_Name']}</td>
|
||||||
@ -30,10 +29,22 @@
|
|||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<div class="box-footer p-2">
|
<div class="box-footer p-2">
|
||||||
<a class="btn btn-danger btn-block btn-sm" href="{$_url}order/view/{$unpaid['id']}">
|
<div class="btn-group btn-group-justified mb15">
|
||||||
<span class="icon"><i class="ion ion-card"></i></span>
|
<div class="btn-group">
|
||||||
<span>{Lang::T('PAY NOW')}</span>
|
<a href="{$_url}order/view/{$unpaid['id']}/cancel" class="btn btn-danger btn-sm"
|
||||||
</a>
|
onclick="return confirm('{Lang::T('Cancel it?')}')">
|
||||||
|
<span class="glyphicon glyphicon-trash"></span>
|
||||||
|
{Lang::T('Cancel')}
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="btn-group">
|
||||||
|
<a class="btn btn-success btn-block btn-sm" href="{$_url}order/view/{$unpaid['id']}">
|
||||||
|
<span class="icon"><i class="ion ion-card"></i></span>
|
||||||
|
<span>{Lang::T('PAY NOW')}</span>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
@ -54,7 +65,7 @@
|
|||||||
<table class="table table-bordered table-striped table-bordered table-hover">
|
<table class="table table-bordered table-striped table-bordered table-hover">
|
||||||
<tr>
|
<tr>
|
||||||
<td class="small text-success text-uppercase text-normal">{$_L['Username']}</td>
|
<td class="small text-success text-uppercase text-normal">{$_L['Username']}</td>
|
||||||
<td class="small mb15">{$_bill['username']}</td>
|
<td class="small mb15">{$_user['username']}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="small text-success text-uppercase text-normal">{$_L['Password']}</td>
|
<td class="small text-success text-uppercase text-normal">{$_L['Password']}</td>
|
||||||
|
@ -70,10 +70,10 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="btn-group btn-group-justified mb15">
|
<div class="btn-group btn-group-justified mb15">
|
||||||
<div class="btn-group">
|
<div class="btn-group">
|
||||||
<button type="submit" class="btn btn-primary">{$_L['Login']}</button>
|
<a href="{$_url}register" class="btn btn-success">{$_L['Register']}</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="btn-group">
|
<div class="btn-group">
|
||||||
<a href="{$_url}register" class="btn btn-success">{$_L['Register']}</a>
|
<button type="submit" class="btn btn-primary">{$_L['Login']}</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
@ -208,7 +208,7 @@ function deleteFolder($path)
|
|||||||
<div class="container">
|
<div class="container">
|
||||||
<section class="content-header">
|
<section class="content-header">
|
||||||
<h1 class="text-center">
|
<h1 class="text-center">
|
||||||
Update PHP NuxBill
|
Update PHPNuxBill
|
||||||
</h1>
|
</h1>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
{
|
{
|
||||||
"version": "2023.8.28"
|
"version": "2023.9.1.1"
|
||||||
}
|
}
|
Reference in New Issue
Block a user