Compare commits

...

84 Commits

Author SHA1 Message Date
8db3d6c679 update changelog 2024-02-23 14:44:37 +07:00
ddd7fb49fe Fix invoice 2024-02-23 14:40:47 +07:00
c6a203b1f0 Add Alert Page 2024-02-23 14:20:12 +07:00
6de63bed63 Integrate with PhpNuxBill Printer 2024-02-23 11:39:25 +07:00
9552a14de5 add button print 2024-02-22 18:37:28 +07:00
9d379b3fbd Phpnuxbill android printer support 2024-02-22 18:27:18 +07:00
4f3e5972b0 Merge pull request #112 from Focuslinkstech/Development
Update accounts.php
2024-02-22 11:45:29 +07:00
be65976310 link to settings when hide widget 2024-02-22 11:42:17 +07:00
8728af4332 Add Loading when click submit 2024-02-22 11:41:55 +07:00
07870d05ad Update accounts.php
Fix OTP not sending bug
2024-02-21 11:58:13 +01:00
cee6f8949c Merge branch 'Development' 2024-02-21 16:15:21 +07:00
3bdf44ddbe Merge pull request #111 from Focuslinkstech/Development
Bug Fix: OTP bugs
2024-02-21 16:13:26 +07:00
17c1675b4a Update accounts.php
fix lang function
2024-02-21 10:13:05 +01:00
54d1c4439d Bug Fix: OTP bugs
add phone number validation to prevent invalid phone number, phone number must be 10 digits up

fix issue with updating phone number without OTP
2024-02-21 10:02:31 +01:00
e710bd2862 Merge branch 'Development' 2024-02-21 14:38:09 +07:00
5309cb26db Delete Table Responsive, first Column Freeze 2024-02-21 14:37:44 +07:00
8072fe40eb change burst form 2024-02-21 14:11:19 +07:00
702f2b443c remove multiple spaces 2024-02-21 11:54:22 +07:00
a44190c1c2 delete meta table 2024-02-21 11:11:14 +07:00
3871b51f0f change position table customer field 2024-02-21 11:11:13 +07:00
d9a20f7213 Merge pull request #110 from Focuslinkstech/Development
Update: New Features "Miscellaneous"
2024-02-21 11:10:54 +07:00
a70b954981 Update: New Features "Miscellaneous"
[option] OTP is required when user want to change phone number.

admin can choose option in
 [Miscellaneous]
2024-02-21 00:15:36 +01:00
95e79439a2 delete meta table 2024-02-20 20:01:26 +07:00
7ea118ec1e change position table customer field 2024-02-20 18:32:23 +07:00
ae83cbeef4 Fix Voucher Permission 2024-02-20 16:49:03 +07:00
8047ed9555 remaining last login 2024-02-20 16:48:48 +07:00
c907a4044f Fix Voucher View 2024-02-20 16:48:27 +07:00
f12c7724fd fix 1 account can have 1 pppoe and 1 hotspot in 1 router 2024-02-20 13:54:46 +07:00
c8696f8d1a clear compiled after update 2024-02-20 11:34:08 +07:00
63bba0efb0 2024.2.20 2024-02-20 11:01:02 +07:00
2063ae4159 Fix Admin List for Admin 2024-02-20 10:58:50 +07:00
349a1d3250 add to Address List 2024-02-20 10:07:17 +07:00
cfb81596ae Burst Limit 2024-02-20 10:07:17 +07:00
91c90f05f8 Merge pull request #109 from Focuslinkstech/Development
new feature: Pace Loading
2024-02-20 09:42:15 +07:00
abefcf4a73 new feature: Pace Loading
Pace Loading added
2024-02-19 23:42:29 +01:00
f9ad13b746 2024.2.19 2024-02-19 16:31:01 +07:00
fe082258cd creating API, Work in Progress 2024-02-19 16:28:55 +07:00
ade714e2ae View Admin and Init script 2024-02-19 14:24:34 +07:00
ce649220f5 indonesian lang 2024-02-19 09:53:53 +07:00
de4a783dba Language editor 2024-02-19 09:52:36 +07:00
f550af257a fix customer custom field 2024-02-19 09:29:11 +07:00
2c16bb289e any Users can change password 2024-02-19 09:13:19 +07:00
61060c4173 Select Agent after choose sales 2024-02-19 09:13:19 +07:00
e7c715f1b3 Merge pull request #107 from Focuslinkstech/Development
New Feature Added "Custom Fields"
2024-02-19 09:12:18 +07:00
aa8fa3f436 update
admin can add more fields when editing customers
2024-02-18 04:56:30 +01:00
941c723193 New Feature Added "Custom Fields"
admin can now add unlimited Custom Fields, and also edit or delete the Custom Fields
2024-02-17 19:30:35 +01:00
cb23ddb912 Sales are below agent, but admin add sales not yet select Agent 2024-02-16 17:26:15 +07:00
e1272ec531 print 1 voucher will go to print or share 2024-02-16 17:26:15 +07:00
8e3e715c8c trash icon 2024-02-16 17:26:15 +07:00
850ae079f4 Merge pull request #106 from Focuslinkstech/Development
Update: SweetAlert Introduction
2024-02-16 17:24:31 +07:00
21bea606c3 Update: SweetAlert Introduction
Introducing SweeAlerts for Notifications
2024-02-16 10:03:35 +01:00
11c226caf5 Sales, sub sccount Agent 2024-02-16 14:54:43 +07:00
98fb853591 set Permission 2024-02-16 14:52:49 +07:00
d17c434c7b Add Edit Admin 2024-02-15 16:13:55 +07:00
a06d7db0b1 Change Error Page 2024-02-15 11:00:59 +07:00
84138bd02e Merge pull request #105 from Focuslinkstech/Development
add new menu "Radius"
move Radius NAS from Network to Radius
2024-02-15 10:37:37 +07:00
9d1f05735f update
add new menu "Radius"
move Radius NAS from Network to Radius
2024-02-14 10:14:24 +01:00
c91cc0470b 2024.2.13 2024-02-13 17:43:19 +07:00
459b9b30f1 Auto translate Fix 2024-02-13 17:41:55 +07:00
8baf977a9a delete other lang 2024-02-13 16:25:12 +07:00
1022674780 Stay Collapse 2024-02-13 16:22:00 +07:00
3c9b05468e Auto Translate Language 2024-02-13 13:54:01 +07:00
e9f5d56f91 Update CHANGELOG 2024-02-12 17:04:38 +07:00
792b1367d3 UserType 'SuperAdmin','Admin','Report','Agent','Sales' 2024-02-12 17:02:43 +07:00
bf6ec9d4cd export csv 2024-02-12 11:35:59 +07:00
9543ee6e34 Session using cookie 2024-02-12 09:45:44 +07:00
66432eda56 2024.2.7 2024-02-07 13:35:23 +07:00
92eee8245d timeElapsed 2024-02-07 13:32:33 +07:00
f62f07d102 add Hide Dashboard Content 2024-02-07 12:02:39 +07:00
671154d146 add sub sales 2024-02-07 10:11:30 +07:00
ac84e4b235 settimezone 2024-02-07 09:39:49 +07:00
db7c6014dc Fix invoice keyword 2024-02-06 17:41:45 +07:00
21b57ef471 Fix price for logging 2024-02-06 16:54:57 +07:00
79e5c72ca2 2024.2.6 2024-02-06 16:48:59 +07:00
5921fef67e cache Voucher stocks for 5 Minutes 2024-02-06 16:46:50 +07:00
1e0b246d74 Cache for 12 hours 2024-02-06 16:43:06 +07:00
009c890ab6 Fix router_name for log 2024-02-06 16:41:41 +07:00
f3d7687cdb cache dashboard graph 2024-02-06 16:41:26 +07:00
80cecabfb0 Fix Calculation 2024-02-05 14:25:23 +07:00
00ac91903f Merge pull request #103 from Focuslinkstech/master
Dashboard Updates
2024-02-05 14:19:37 +07:00
500f3de6a9 Update dashboard.tpl
fixed inactive users in graph
2024-02-05 08:17:10 +01:00
6c2658bf03 Update dashboard.tpl
change all users to total users
2024-02-05 07:41:15 +01:00
59de353353 Merge branch 'hotspotbilling:master' into master 2024-02-05 07:33:47 +01:00
d5ea56d078 Update dashboard.tpl
change active users to All Users Insight
add All users to graph
2024-02-05 07:24:32 +01:00
144 changed files with 6686 additions and 4573 deletions

10
.gitignore vendored
View File

@ -29,4 +29,12 @@ system/uploads/system/**
!system/uploads/system/index.html
ui/themes/**
!ui/themes/index.html
!ui/themes/README.md
!ui/themes/README.md
scanLang.php
system/lan/**
!system/lan/index.html
!system/lan/indonesia.json
!system/lan/spanish.json
!system/lan/turkish.json
!system/lan/english.json
!system/lan/country.json

View File

@ -2,6 +2,58 @@
# CHANGELOG
## 2024.2.23
- Integrate with PhpNuxBill Printer
- Fix Invoice
- add admin ID in transaction
## 2024.2.22
- Add Loading when click submit
- link to settings when hide widget
## 2024.2.21
- Fix SQL Installer
- remove multiple space in language
- Change Phone Number require OTP by @Focuslinkstech
- Change burst Form
- Delete Table Responsive, first Column Freeze
## 2024.2.20
- Fix list admin
- Burst Limit
- Pace Loading by @Focuslinkstech
## 2024.2.19
- Start API Development
- Multiple Admin Level
- Customer Attributes by @Focuslinkstech
- Radius Menu
## 2024.2.13
- Auto translate language
- change language structur to json
- save collapse menu
## 2024.2.12
- Admin Level : SuperAdmin,Admin,Report,Agent,Sales
- Export Customers to CSV
- Session using Cookie
## 2024.2.7
- Hide Dashboard content
## 2024.2.6
- Cache graph for faster opening graph
## 2024.2.5
- Admin Dashboard Update
@ -210,7 +262,7 @@ Customer can be move to expired pool after plan expired by cron
- Fix PDF Export by Period
- Add pppoe_password for Customer, this pppoe_password only admin can change
- Country Code Number Settings
- Customer Meta Table for Custom Fields
- Customer Meta Table for Customers Attributess
- Fix Add and Edit Customer Form for admin
- add Notification Message Editor
- cron reminder

242
init.php Normal file
View File

@ -0,0 +1,242 @@
<?php
/**
* PHP Mikrotik Billing (https://github.com/hotspotbilling/phpnuxbill/)
* by https://t.me/ibnux
**/
if (realpath(__FILE__) == realpath($_SERVER['SCRIPT_FILENAME'])) {
header('HTTP/1.0 403 Forbidden', TRUE, 403);
header('location: ../');
die();
}
$root_path = realpath(dirname(__FILE__)) . DIRECTORY_SEPARATOR;
$isApi = false;
// on some server, it getting error because of slash is backwards
function _autoloader($class)
{
global $root_path;
if (strpos($class, '_') !== false) {
$class = str_replace('_', DIRECTORY_SEPARATOR, $class);
if (file_exists($root_path . DIRECTORY_SEPARATOR . 'system' . DIRECTORY_SEPARATOR . 'autoload' . DIRECTORY_SEPARATOR . $class . '.php')) {
include $root_path . DIRECTORY_SEPARATOR . 'system' . DIRECTORY_SEPARATOR . 'autoload' . DIRECTORY_SEPARATOR . $class . '.php';
} else {
$class = str_replace("\\", DIRECTORY_SEPARATOR, $class);
if (file_exists($root_path . DIRECTORY_SEPARATOR . 'system' . DIRECTORY_SEPARATOR . 'autoload' . DIRECTORY_SEPARATOR . $class . '.php'))
include $root_path . DIRECTORY_SEPARATOR . 'system' . DIRECTORY_SEPARATOR . 'autoload' . DIRECTORY_SEPARATOR . $class . '.php';
}
} else {
if (file_exists($root_path . DIRECTORY_SEPARATOR . 'system' . DIRECTORY_SEPARATOR . 'autoload' . DIRECTORY_SEPARATOR . $class . '.php')) {
include $root_path . DIRECTORY_SEPARATOR . 'system' . DIRECTORY_SEPARATOR . 'autoload' . DIRECTORY_SEPARATOR . $class . '.php';
} else {
$class = str_replace("\\", DIRECTORY_SEPARATOR, $class);
if (file_exists($root_path . DIRECTORY_SEPARATOR . 'system' . DIRECTORY_SEPARATOR . 'autoload' . DIRECTORY_SEPARATOR . $class . '.php'))
include $root_path . DIRECTORY_SEPARATOR . 'system' . DIRECTORY_SEPARATOR . 'autoload' . DIRECTORY_SEPARATOR . $class . '.php';
}
}
}
spl_autoload_register('_autoloader');
if (!file_exists($root_path . 'config.php')) {
$root_path .= '..' . DIRECTORY_SEPARATOR;
if (!file_exists($root_path . 'config.php')) {
die("config.php file not found");
}
}
if (!file_exists($root_path . File::pathFixer('system/orm.php'))) {
die($root_path . "orm.php file not found");
}
if (!file_exists($root_path . File::pathFixer('system/uploads/notifications.default.json'))) {
die($root_path . File::pathFixer("system/uploads/notifications.default.json file not found"));
}
require_once $root_path . 'config.php';
require_once $root_path . File::pathFixer('system/orm.php');
require_once $root_path . File::pathFixer('system/autoload/PEAR2/Autoload.php');
include $root_path . File::pathFixer('system/autoload/Hookers.php');
ORM::configure("mysql:host=$db_host;dbname=$db_name");
ORM::configure('username', $db_user);
ORM::configure('password', $db_password);
ORM::configure('return_result_sets', true);
if ($_app_stage != 'Live') {
ORM::configure('logging', true);
}
define('U', APP_URL . '/index.php?_route=');
// notification message
if (file_exists($root_path . File::pathFixer("system/uploads/notifications.json"))) {
$_notifmsg = json_decode(file_get_contents($root_path . File::pathFixer('system/uploads/notifications.json')), true);
}
$_notifmsg_default = json_decode(file_get_contents($root_path . File::pathFixer('system/uploads/notifications.default.json')), true);
//register all plugin
foreach (glob(File::pathFixer($root_path . File::pathFixer("system/plugin/*.php"))) as $filename) {
try {
include $filename;
} catch (Throwable $e) {
//ignore plugin error
} catch (Exception $e) {
//ignore plugin error
}
}
$result = ORM::for_table('tbl_appconfig')->find_many();
foreach ($result as $value) {
$config[$value['setting']] = $value['value'];
}
if (empty($http_proxy) && !empty($config['http_proxy'])) {
$http_proxy = $config['http_proxy'];
if (empty($http_proxyauth) && !empty($config['http_proxyauth'])) {
$http_proxyauth = $config['http_proxyauth'];
}
}
date_default_timezone_set($config['timezone']);
if ((!empty($radius_user) && $config['radius_enable']) || _post('radius_enable')) {
ORM::configure("mysql:host=$radius_host;dbname=$radius_name", null, 'radius');
ORM::configure('username', $radius_user, 'radius');
ORM::configure('password', $radius_pass, 'radius');
ORM::configure('driver_options', array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'), 'radius');
ORM::configure('return_result_sets', true, 'radius');
}
if (empty($config['language'])) {
$config['language'] = 'english';
}
$lan_file = $root_path .File::pathFixer('system/lan/' . $config['language'] . '.json');
if (file_exists($lan_file)) {
$_L = json_decode(file_get_contents($lan_file), true);
$_SESSION['Lang'] = $_L;
} else {
$_L['author'] = 'Auto Generated by iBNuX Script';
$_SESSION['Lang'] = $_L;
file_put_contents($lan_file, json_encode($_L));
}
function safedata($value)
{
$value = trim($value);
return $value;
}
function _post($param, $defvalue = '')
{
if (!isset($_POST[$param])) {
return $defvalue;
} else {
return safedata($_POST[$param]);
}
}
function _get($param, $defvalue = '')
{
if (!isset($_GET[$param])) {
return $defvalue;
} else {
return safedata($_GET[$param]);
}
}
function _req($param, $defvalue = '')
{
if (!isset($_REQUEST[$param])) {
return $defvalue;
} else {
return safedata($_REQUEST[$param]);
}
}
function _auth($login = true)
{
if (User::getID()) {
return true;
} else {
if ($login) {
r2(U . 'login');
} else {
return false;
}
}
}
function _admin($login = true)
{
if (Admin::getID()) {
return true;
} else {
if ($login) {
r2(U . 'login');
} else {
return false;
}
}
}
function _log($description, $type = '', $userid = '0')
{
$d = ORM::for_table('tbl_logs')->create();
$d->date = date('Y-m-d H:i:s');
$d->type = $type;
$d->description = $description;
$d->userid = $userid;
$d->ip = $_SERVER["REMOTE_ADDR"];
$d->save();
}
function Lang($key)
{
return Lang::T($key);
}
function alphanumeric($str, $tambahan = "")
{
return preg_replace("/[^a-zA-Z0-9" . $tambahan . "]+/", "", $str);
}
function sendTelegram($txt)
{
Message::sendTelegram($txt);
}
function sendSMS($phone, $txt)
{
Message::sendSMS($phone, $txt);
}
function sendWhatsapp($phone, $txt)
{
Message::sendWhatsapp($phone, $txt);
}
function _alert($text, $type = 'success', $url = "home")
{
global $ui;
if(!isset($ui)) return;
if(strlen($url)>4){
if(substr($url,0,4)!="http"){
$url = U.$url;
}
}else{
$url = U.$url;
}
$ui->assign('text', $text);
$ui->assign('type', $type);
$ui->assign('url', $url);
$ui->display('alert.tpl');
}
if(!isset($api_secret)){
$api_secret = $db_password;
}

View File

@ -33,13 +33,6 @@ CREATE TABLE `tbl_customers` (
`last_login` datetime DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
DROP TABLE IF EXISTS `tbl_customers_meta`;
CREATE TABLE `tbl_customers_meta` (
`id` int(11) NOT NULL,
`customer_id` int(11) NOT NULL,
`meta_key` varchar(64) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '',
`meta_value` longtext COLLATE utf8mb4_general_ci
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
DROP TABLE IF EXISTS `tbl_logs`;
CREATE TABLE `tbl_logs` (
@ -188,7 +181,6 @@ CREATE TABLE `tb_languages` (
`id` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
ALTER TABLE `tbl_appconfig`
ADD PRIMARY KEY (`id`);
@ -198,9 +190,6 @@ ALTER TABLE `tbl_bandwidth`
ALTER TABLE `tbl_customers`
ADD PRIMARY KEY (`id`);
ALTER TABLE `tbl_customers_meta`
ADD PRIMARY KEY (`id`);
ALTER TABLE `tbl_logs`
ADD PRIMARY KEY (`id`);
@ -241,9 +230,6 @@ ALTER TABLE `tbl_bandwidth`
ALTER TABLE `tbl_customers`
MODIFY `id` int(10) NOT NULL AUTO_INCREMENT;
ALTER TABLE `tbl_customers_meta`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
ALTER TABLE `tbl_logs`
MODIFY `id` int(10) NOT NULL AUTO_INCREMENT;
@ -306,8 +292,28 @@ VALUES (
'admin',
'Administrator',
'd033e22ae348aeb5660fc2140aec35850c4da997',
'Admin',
'SuperAdmin',
'Active',
'2022-09-06 16:09:50',
'2014-06-23 01:43:07'
);
DROP TABLE IF EXISTS `tbl_customers_fields`;
CREATE TABLE tbl_customers_fields (
id INT PRIMARY KEY AUTO_INCREMENT,
customer_id INT NOT NULL,
field_name VARCHAR(255) NOT NULL,
field_value VARCHAR(255) NOT NULL,
FOREIGN KEY (customer_id) REFERENCES tbl_customers(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
ALTER TABLE `tbl_voucher` ADD `generated_by` INT NOT NULL DEFAULT '0' COMMENT 'id admin' AFTER `status`;
ALTER TABLE `tbl_users` ADD `root` INT NOT NULL DEFAULT '0' COMMENT 'for sub account' AFTER `id`;
ALTER TABLE `tbl_users` CHANGE `user_type` `user_type` ENUM('SuperAdmin','Admin','Report','Agent','Sales') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
ALTER TABLE `tbl_users` CHANGE `password` `password` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;
ALTER TABLE `tbl_users` ADD `phone` VARCHAR(32) NOT NULL DEFAULT '' AFTER `password`, ADD `email` VARCHAR(128) NOT NULL DEFAULT '' AFTER `phone`, ADD `city` VARCHAR(64) NOT NULL DEFAULT '' COMMENT 'kota' AFTER `email`, ADD `subdistrict` VARCHAR(64) NOT NULL DEFAULT '' COMMENT 'kecamatan' AFTER `city`, ADD `ward` VARCHAR(64) NOT NULL DEFAULT '' COMMENT 'kelurahan' AFTER `subdistrict`;
ALTER TABLE `tbl_customers` ADD `created_by` INT NOT NULL DEFAULT '0' AFTER `auto_renewal`;
ALTER TABLE `tbl_plans` ADD `list_expired` VARCHAR(32) NOT NULL DEFAULT '' COMMENT 'address list' AFTER `pool_expired`;
ALTER TABLE `tbl_bandwidth` ADD `burst` VARCHAR(128) NOT NULL DEFAULT '' AFTER `rate_up_unit`;
ALTER TABLE `tbl_transactions` ADD `admin_id` INT NOT NULL DEFAULT '1' AFTER `type`;
ALTER TABLE `tbl_user_recharges` ADD `admin_id` INT NOT NULL DEFAULT '1' AFTER `type`;

105
system/api.php Normal file
View File

@ -0,0 +1,105 @@
<?php
/**
* PHP Mikrotik Billing (https://github.com/hotspotbilling/phpnuxbill/)
* by https://t.me/ibnux
*
* This File is for API Access
**/
if ($_SERVER['REQUEST_METHOD'] === "OPTIONS" || $_SERVER['REQUEST_METHOD'] === "HEAD") {
header('Access-Control-Allow-Origin: *');
header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method, Access-Control-Request-Headers, Authorization");
header("HTTP/1.1 200 OK");
die();
}
include "../init.php";
$isApi = true;
// Dummy Class
$ui = new class($key)
{
var $assign = [];
function display($key)
{
}
function assign($key, $value)
{
$this->assign[$key] = $value;
}
function get($key, )
{
if(isset($this->assign[$key])){
return $this->assign[$key];
}
return '';
}
};
$req = _get('r');
# a/c.id.time.md5
# md5(a/c.id.time.$api_secret)
$token = _get('token');
$routes = explode('/', $req);
$handler = $routes[0];
if ($handler == '') {
$handler = 'default';
}
if(empty($token)){
showResult(false, Lang::T("Token is invalid"));
}
if($token == $config['api_key']){
$admin = ORM::for_table('tbl_users')->where('user_type','SuperAdmin')->find_one($id);
if(empty($admin)){
$admin = ORM::for_table('tbl_users')->where('user_type','Admin')->find_one($id);
if(empty($admin)){
showResult(false, Lang::T("Token is invalid"));
}
}
}else{
# validate token
list($tipe, $uid, $time, $md5) = explode('.', $token);
if ($md5 != md5($uid . '.' . $time . '.' . $api_secret)) {
showResult(false, Lang::T("Token is invalid"));
}
#cek token expiration
if ($time != 0 && time() > $time) {
showResult(false, Lang::T("Token Expired"), [], ['login' => true]);
}
if($tipe=='a'){
$_SESSION['aid'] = $uid;
}else if($tipe=='c'){
$_SESSION['uid'] = $uid;
}else{
showResult(false, Lang::T("Unknown Token"), [], ['login' => true]);
}
}
if($handler == 'isValid'){
showResult(true, Lang::T("Token is valid"));
}
function showResult($success, $message = '', $result = [], $meta = [])
{
header("Content-Type: Application/json; charset=utf-8");
die(json_encode(array('success' => $success, 'message' => $message, 'result' => $result, 'meta' => $meta)));
}
try {
$sys_render = File::pathFixer($root_path.'system/controllers/' . $handler . '.php');
if (file_exists($sys_render)) {
include($sys_render);
}else{
showResult(false, Lang::T('Command not found'));
}
} catch (Exception $e) {
showResult(false, $e->getMessage());
}

View File

@ -6,9 +6,42 @@
Class Admin{
public static function _info(){
$id = $_SESSION['aid'];
$d = ORM::for_table('tbl_users')->find_one($id);
return $d;
public static function getID(){
global $db_password;
if(isset($_SESSION['aid'])){
return $_SESSION['aid'];
}else if(isset($_COOKIE['aid'])){
// id.time.sha1
$tmp = explode('.',$_COOKIE['aid']);
if(sha1($tmp[0].$tmp[1].$db_password)==$tmp[2]){
if($tmp[1] < 86400*7){
$_SESSION['aid'] = $tmp[0];
return $tmp[0];
}
}
}
return 0;
}
public static function setCookie($aid){
global $db_password;
if(isset($aid)){
$time = time();
setcookie('aid', $aid.'.'.$time.'.'.sha1($aid.'.'.$time.'.'.$db_password), time()+86400*7);
}
}
public static function removeCookie(){
if(isset($_COOKIE['aid'])){
setcookie('aid', '', time()-86400);
}
}
public static function _info($id = 0){
if(empty($id) && $id>0){
$id = Admin::getID();
}
return ORM::for_table('tbl_users')->find_one($id);
}
}

View File

@ -8,9 +8,50 @@
class Lang
{
public static function T($var)
public static function T($key)
{
return Lang($var);
global $_L, $lan_file, $config;
$_L = $_SESSION['Lang'];
$key = preg_replace('/\s+/', ' ', $key);
if (!empty($_L[$key])) {
return $_L[$key];
}
$val = $key;
$key = Lang::sanitize($key);
if (isset($_L[$key])) {
return $_L[$key];
} else if (isset($_L[$key])) {
return $_L[$key];
} else {
$iso = Lang::getIsoLang()[$config['language']];
if (empty($iso)) {
return $val;
}
if (!empty($iso) && !empty($val)) {
$temp = Lang::translate($val, $iso);
if (!empty($temp)) {
$val = $temp;
}
}
$_L[$key] = $val;
$_SESSION['Lang'][$key] = $val;
file_put_contents($lan_file, json_encode($_SESSION['Lang'], JSON_PRETTY_PRINT));
return $val;
}
}
public static function sanitize($str)
{
return preg_replace("/[^A-Za-z0-9]/", '_', $str);;
}
public static function getIsoLang()
{
global $isolang;
if (empty($isolang) || count($isolang) == 0) {
$isolang = json_decode(file_get_contents(File::pathFixer("system/lan/country.json")), true);
}
return $isolang;
}
public static function htmlspecialchars($var)
@ -56,6 +97,37 @@ class Lang
return date($config['date_format'] . ' H:i', strtotime("$date $time"));
}
public static function timeElapsed($datetime, $full = false)
{
$now = new DateTime;
$ago = new DateTime($datetime);
$diff = $now->diff($ago);
$diff->w = floor($diff->d / 7);
$diff->d -= $diff->w * 7;
$string = array(
'y' => Lang::T('year'),
'm' => Lang::T('month'),
'w' => Lang::T('week'),
'd' => Lang::T('day'),
'h' => Lang::T('hour'),
'i' => Lang::T('minute'),
's' => Lang::T('second'),
);
foreach ($string as $k => &$v) {
if ($diff->$k) {
$v = $diff->$k . ' ' . $v . ($diff->$k > 1 ? 's' : '');
} else {
unset($string[$k]);
}
}
if (!$full)
$string = array_slice($string, 0, 1);
return $string ? implode(', ', $string) . ' ago' : 'just now';
}
public static function nl2br($text)
{
return nl2br($text);
@ -87,14 +159,15 @@ class Lang
return ucwords(str_replace('_', ' ', $text));
}
public static function randomUpLowCase($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);
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;
@ -106,31 +179,68 @@ class Lang
* 1 right
* 2 center
* */
public static function pad($text, $pad_string = ' ', $pad_type = 0){
public static function pad($text, $pad_string = ' ', $pad_type = 0)
{
global $config;
$cols = 37;
if($config['printer_cols']){
if ($config['printer_cols']) {
$cols = $config['printer_cols'];
}
$text = trim($text);
$texts = explode("\n", $text);
if(count($texts)>1){
if (count($texts) > 1) {
$text = '';
foreach($texts as $t){
$text.= self::pad(trim($t), $pad_string, $pad_type)."\n";
foreach ($texts as $t) {
$text .= self::pad(trim($t), $pad_string, $pad_type) . "\n";
}
return $text;
}else{
} else {
return str_pad(trim($text), $cols, $pad_string, $pad_type);
}
}
public static function pads($textLeft, $textRight, $pad_string = ' '){
public static function pads($textLeft, $textRight, $pad_string = ' ')
{
global $config;
$cols = 37;
if($config['printer_cols']){
if ($config['printer_cols']) {
$cols = $config['printer_cols'];
}
return $textLeft.str_pad($textRight, $cols-strlen($textLeft), $pad_string, 0);
return $textLeft . str_pad($textRight, $cols - strlen($textLeft), $pad_string, 0);
}
public static function translate($txt, $to = 'id')
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://translate.google.com/m?hl=en&sl=en&tl=$to&ie=UTF-8&prev=_m&q=" . urlencode($txt));
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (iPhone; CPU OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) FxiOS/28.1 Mobile/15E148 Safari/605.1.15");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
curl_setopt($ch, CURLOPT_HEADER, 0);
$hasil = curl_exec($ch);
curl_close($ch);
$temp = explode('<div class="result-container">', $hasil);
if (count($temp) > 0) {
$temp = explode("</div", $temp[1]);
if (!empty($temp[0])) {
return $temp[0];
}
}
return $txt;
}
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);
}
}
}

View File

@ -111,8 +111,9 @@ class Message
$textInvoice = str_replace('[[phone]]', $config['phone'], $textInvoice);
$textInvoice = str_replace('[[invoice]]', $trx['invoice'], $textInvoice);
$textInvoice = str_replace('[[date]]', Lang::dateAndTimeFormat($trx['recharged_on'], $trx['recharged_time']), $textInvoice);
$textInvoice = str_replace('[[payment_gateway]]', $config['gateway'], $textInvoice);
$textInvoice = str_replace('[[payment_channel]]', $config['channel'], $textInvoice);
$gc = explode("-", $trx['method']);
$textInvoice = str_replace('[[payment_gateway]]', trim($gc[0]), $textInvoice);
$textInvoice = str_replace('[[payment_channel]]', trim($gc[1]), $textInvoice);
$textInvoice = str_replace('[[type]]', $trx['type'], $textInvoice);
$textInvoice = str_replace('[[plan_name]]', $trx['plan_name'], $textInvoice);
$textInvoice = str_replace('[[plan_price]]', Lang::moneyFormat($trx['price']), $textInvoice);

View File

@ -514,4 +514,49 @@ class Mikrotik
->setArgument('message', $message);
$client->sendSync($smsRequest);
}
public static function getIpHotspotUser($client, $username){
global $_app_stage;
if ($_app_stage == 'demo') {
return null;
}
$printRequest = new RouterOS\Request(
'/ip hotspot active print',
RouterOS\Query::where('user', $username)
);
return $client->sendSync($printRequest)->getProperty('address');
}
public static function addIpToAddressList($client, $ip, $listName, $comment = '')
{
global $_app_stage;
if ($_app_stage == 'demo') {
return null;
}
$addRequest = new RouterOS\Request('/ip/firewall/address-list/add');
$client->sendSync(
$addRequest
->setArgument('address', $ip)
->setArgument('comment', $comment)
->setArgument('list', $listName)
);
}
public static function removeIpFromAddressList($client, $ip)
{
global $_app_stage;
if ($_app_stage == 'demo') {
return null;
}
$printRequest = new RouterOS\Request(
'/ip firewall address-list print .proplist=.id',
RouterOS\Query::where('address', $ip)
);
$id = $client->sendSync($printRequest)->getProperty('.id');
$removeRequest = new RouterOS\Request('/ip/firewall/address-list/remove');
$client->sendSync(
$removeRequest
->setArgument('numbers', $id)
);
}
}

View File

@ -19,7 +19,7 @@ class Package
*/
public static function rechargeUser($id_customer, $router_name, $plan_id, $gateway, $channel)
{
global $_c;
global $config, $admin;
$date_now = date("Y-m-d H:i:s");
$date_only = date("Y-m-d");
$time_only = date("H:i:s");
@ -47,6 +47,9 @@ class Package
$t->method = "$gateway - $channel";
$t->routers = $router_name;
$t->type = "Balance";
if ($channel == 'Administrator') {
$t->admin_id = $admin['id'];
}
$t->save();
$balance_before = $c['balance'];
@ -54,34 +57,40 @@ class Package
$balance = $c['balance'] + $p['price'];
$textInvoice = Lang::getNotifText('invoice_balance');
$textInvoice = str_replace('[[company_name]]', $_c['CompanyName'], $textInvoice);
$textInvoice = str_replace('[[address]]', $_c['address'], $textInvoice);
$textInvoice = str_replace('[[phone]]', $_c['phone'], $textInvoice);
$textInvoice = str_replace('[[company_name]]', $config['CompanyName'], $textInvoice);
$textInvoice = str_replace('[[address]]', $config['address'], $textInvoice);
$textInvoice = str_replace('[[phone]]', $config['phone'], $textInvoice);
$textInvoice = str_replace('[[invoice]]', $inv, $textInvoice);
$textInvoice = str_replace('[[date]]', Lang::dateTimeFormat($date_now), $textInvoice);
$textInvoice = str_replace('[[payment_gateway]]', $_c['gateway'], $textInvoice);
$textInvoice = str_replace('[[payment_channel]]', $_c['channel'], $textInvoice);
$textInvoice = str_replace('[[payment_gateway]]', $gateway, $textInvoice);
$textInvoice = str_replace('[[payment_channel]]', $channel, $textInvoice);
$textInvoice = str_replace('[[type]]', 'Balance', $textInvoice);
$textInvoice = str_replace('[[plan_name]]', $p['name_plan'], $textInvoice);
$textInvoice = str_replace('[[plan_price]]', Lang::moneyFormat($p['price']), $textInvoice);
$textInvoice = str_replace('[[name]]', $c['fullname'], $textInvoice);
$textInvoice = str_replace('[[user_name]]', $c['username'], $textInvoice);
$textInvoice = str_replace('[[user_password]]', $c['password'], $textInvoice);
$textInvoice = str_replace('[[footer]]', $_c['note'], $textInvoice);
$textInvoice = str_replace('[[footer]]', $config['note'], $textInvoice);
$textInvoice = str_replace('[[balance_before]]', Lang::moneyFormat($balance_before), $textInvoice);
$textInvoice = str_replace('[[balance]]', Lang::moneyFormat($balance), $textInvoice);
if ($_c['user_notification_payment'] == 'sms') {
if ($config['user_notification_payment'] == 'sms') {
Message::sendSMS($c['phonenumber'], $textInvoice);
} else if ($_c['user_notification_payment'] == 'wa') {
} else if ($config['user_notification_payment'] == 'wa') {
Message::sendWhatsapp($c['phonenumber'], $textInvoice);
}
return true;
}
$b = ORM::for_table('tbl_user_recharges')->where('customer_id', $id_customer)->where('routers', $router_name)->find_one();
/**
* 1 Customer only can have 1 PPPOE and 1 Hotspot Plan
*/
$b = ORM::for_table('tbl_user_recharges')
->where('customer_id', $id_customer)
->where('routers', $router_name)
->where('Type', $p['type'])
->find_one();
$mikrotik = Mikrotik::info($router_name);
if ($p['validity_unit'] == 'Months') {
@ -100,17 +109,6 @@ class Package
if ($p['type'] == 'Hotspot') {
if ($b) {
if ($p['is_radius']) {
Radius::customerAddPlan($c, $p, "$date_exp $time");
}else{
$client = Mikrotik::getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']);
Mikrotik::removeHotspotUser($client, $c['username']);
Mikrotik::removePpoeUser($client, $c['username']);
Mikrotik::removeHotspotActiveUser($client, $c['username']);
Mikrotik::removePpoeActive($client, $c['username']);
Mikrotik::addHotspotUser($client, $p, $c);
}
if ($b['namebp'] == $p['name_plan'] && $b['status'] == 'on') {
// if it same internet plan, expired will extend
if ($p['validity_unit'] == 'Months') {
@ -130,6 +128,15 @@ class Package
}
}
if ($p['is_radius']) {
Radius::customerAddPlan($c, $p, "$date_exp $time");
} else {
$client = Mikrotik::getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']);
Mikrotik::removeHotspotUser($client, $c['username']);
Mikrotik::removeHotspotActiveUser($client, $c['username']);
Mikrotik::addHotspotUser($client, $p, $c);
}
$b->customer_id = $id_customer;
$b->username = $c['username'];
$b->plan_id = $plan_id;
@ -142,6 +149,9 @@ class Package
$b->method = "$gateway - $channel";
$b->routers = $router_name;
$b->type = "Hotspot";
if ($channel == 'Administrator') {
$b->admin_id = $admin['id'];
}
$b->save();
// insert table transactions
@ -157,16 +167,17 @@ class Package
$t->method = "$gateway - $channel";
$t->routers = $router_name;
$t->type = "Hotspot";
if ($channel == 'Administrator') {
$t->admin_id = $admin['id'];
}
$t->save();
} else {
if ($p['is_radius']) {
Radius::customerAddPlan($c, $p, "$date_exp $time");
}else{
} else {
$client = Mikrotik::getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']);
Mikrotik::removeHotspotUser($client, $c['username']);
Mikrotik::removePpoeUser($client, $c['username']);
Mikrotik::removeHotspotActiveUser($client, $c['username']);
Mikrotik::removePpoeActive($client, $c['username']);
Mikrotik::addHotspotUser($client, $p, $c);
}
@ -183,6 +194,9 @@ class Package
$d->method = "$gateway - $channel";
$d->routers = $router_name;
$d->type = "Hotspot";
if ($channel == 'Administrator') {
$d->admin_id = $admin['id'];
}
$d->save();
// insert table transactions
@ -198,6 +212,9 @@ class Package
$t->method = "$gateway - $channel";
$t->routers = $router_name;
$t->type = "Hotspot";
if ($channel == 'Administrator') {
$t->admin_id = $admin['id'];
}
$t->save();
}
Message::sendTelegram("#u$c[username] #buy #Hotspot \n" . $p['name_plan'] .
@ -208,18 +225,6 @@ class Package
} else {
if ($b) {
if ($p['is_radius']) {
Radius::customerAddPlan($c, $p, "$date_exp $time");
}else{
$client = Mikrotik::getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']);
Mikrotik::removeHotspotUser($client, $c['username']);
Mikrotik::removePpoeUser($client, $c['username']);
Mikrotik::removeHotspotActiveUser($client, $c['username']);
Mikrotik::removePpoeActive($client, $c['username']);
Mikrotik::addPpoeUser($client, $p, $c);
}
if ($b['namebp'] == $p['name_plan'] && $b['status'] == 'on') {
// if it same internet plan, expired will extend
if ($p['validity_unit'] == 'Months') {
@ -239,6 +244,15 @@ class Package
}
}
if ($p['is_radius']) {
Radius::customerAddPlan($c, $p, "$date_exp $time");
} else {
$client = Mikrotik::getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']);
Mikrotik::removePpoeUser($client, $c['username']);
Mikrotik::removePpoeActive($client, $c['username']);
Mikrotik::addPpoeUser($client, $p, $c);
}
$b->customer_id = $id_customer;
$b->username = $c['username'];
$b->plan_id = $plan_id;
@ -251,6 +265,9 @@ class Package
$b->method = "$gateway - $channel";
$b->routers = $router_name;
$b->type = "PPPOE";
if ($channel == 'Administrator') {
$b->admin_id = $admin['id'];
}
$b->save();
// insert table transactions
@ -266,15 +283,16 @@ class Package
$t->method = "$gateway - $channel";
$t->routers = $router_name;
$t->type = "PPPOE";
if ($channel == 'Administrator') {
$t->admin_id = $admin['id'];
}
$t->save();
} else {
if ($p['is_radius']) {
Radius::customerAddPlan($c, $p, "$date_exp $time");
}else{
} else {
$client = Mikrotik::getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']);
Mikrotik::removeHotspotUser($client, $c['username']);
Mikrotik::removePpoeUser($client, $c['username']);
Mikrotik::removeHotspotActiveUser($client, $c['username']);
Mikrotik::removePpoeActive($client, $c['username']);
Mikrotik::addPpoeUser($client, $p, $c);
}
@ -292,6 +310,9 @@ class Package
$d->method = "$gateway - $channel";
$d->routers = $router_name;
$d->type = "PPPOE";
if ($channel == 'Administrator') {
$d->admin_id = $admin['id'];
}
$d->save();
// insert table transactions
@ -306,6 +327,9 @@ class Package
$t->time = $time;
$t->method = "$gateway - $channel";
$t->routers = $router_name;
if ($channel == 'Administrator') {
$t->admin_id = $admin['id'];
}
$t->type = "PPPOE";
$t->save();
}
@ -316,8 +340,7 @@ class Package
"\nPrice: " . Lang::moneyFormat($p['price']));
}
$in = ORM::for_table('tbl_transactions')->where('username', $c['username'])->order_by_desc('id')->find_one();
Message::sendInvoice($c, $in);
Message::sendInvoice($c, $t);
return true;
}
@ -326,9 +349,9 @@ class Package
$c = ORM::for_table('tbl_customers')->where('username', $username)->find_one();
$p = ORM::for_table('tbl_plans')->where('id', $plan_id)->where('enabled', '1')->find_one();
$b = ORM::for_table('tbl_user_recharges')->find_one($from_id);
if($p['routers'] == $b['routers'] && $b['routers'] != 'radius'){
if ($p['routers'] == $b['routers'] && $b['routers'] != 'radius') {
$mikrotik = Mikrotik::info($p['routers']);
}else{
} else {
$mikrotik = Mikrotik::info($b['routers']);
}
// delete first
@ -337,54 +360,46 @@ class Package
if (!$p['is_radius']) {
$client = Mikrotik::getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']);
Mikrotik::removeHotspotUser($client, $c['username']);
Mikrotik::removePpoeUser($client, $c['username']);
Mikrotik::removeHotspotActiveUser($client, $c['username']);
Mikrotik::removePpoeActive($client, $c['username']);
}
} else {
if (!$p['is_radius']) {
$client = Mikrotik::getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']);
Mikrotik::removeHotspotUser($client, $c['username']);
Mikrotik::removePpoeUser($client, $c['username']);
Mikrotik::removeHotspotActiveUser($client, $c['username']);
Mikrotik::removePpoeActive($client, $c['username']);
}
}
} else {
if ($b) {
if (!$p['is_radius']) {
$client = Mikrotik::getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']);
Mikrotik::removeHotspotUser($client, $c['username']);
Mikrotik::removePpoeUser($client, $c['username']);
Mikrotik::removeHotspotActiveUser($client, $c['username']);
Mikrotik::removePpoeActive($client, $c['username']);
}
} else {
if (!$p['is_radius']) {
$client = Mikrotik::getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']);
Mikrotik::removeHotspotUser($client, $c['username']);
Mikrotik::removePpoeUser($client, $c['username']);
Mikrotik::removeHotspotActiveUser($client, $c['username']);
Mikrotik::removePpoeActive($client, $c['username']);
}
}
}
// call the next mikrotik
if($p['routers'] != $b['routers'] && $p['routers'] != 'radius'){
if ($p['routers'] != $b['routers'] && $p['routers'] != 'radius') {
$mikrotik = Mikrotik::info($p['routers']);
}
if ($p['type'] == 'Hotspot') {
if ($b) {
if ($p['is_radius']) {
Radius::customerAddPlan($c, $p, $b['expiration'].''.$b['time']);
}else{
Radius::customerAddPlan($c, $p, $b['expiration'] . '' . $b['time']);
} else {
$client = Mikrotik::getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']);
Mikrotik::addHotspotUser($client, $p, $c);
}
} else {
if ($p['is_radius']) {
Radius::customerAddPlan($c, $p, $b['expiration'].''.$b['time']);
}else{
Radius::customerAddPlan($c, $p, $b['expiration'] . '' . $b['time']);
} else {
$client = Mikrotik::getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']);
Mikrotik::addHotspotUser($client, $p, $c);
}
@ -393,14 +408,14 @@ class Package
if ($b) {
if ($p['is_radius']) {
Radius::customerAddPlan($c, $p);
}else{
} else {
$client = Mikrotik::getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']);
Mikrotik::addPpoeUser($client, $p, $c);
}
} else {
if ($p['is_radius']) {
Radius::customerAddPlan($c, $p);
}else{
} else {
$client = Mikrotik::getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']);
Mikrotik::addPpoeUser($client, $p, $c);
}
@ -413,4 +428,70 @@ class Package
{
return substr(str_shuffle(str_repeat('0123456789', $l)), 0, $l);
}
/**
* @param in tbl_transactions
* @param string $router_name router name for this package
* @param int $plan_id plan id for this package
* @param string $gateway payment gateway name
* @param string $channel channel payment gateway
* @return boolean
*/
public static function createInvoice($in)
{
global $config, $admin, $ui;
$date = Lang::dateAndTimeFormat($in['recharged_on'], $in['recharged_time']);
if ($admin['id'] != $in['admin_id'] && $in['admin_id'] > 0) {
$_admin = Admin::_info($in['admin_id']);
// if admin not deleted
if ($_admin) $admin = $_admin;
}
//print
$invoice = Lang::pad($config['CompanyName'], ' ', 2) . "\n";
$invoice .= Lang::pad($config['address'], ' ', 2) . "\n";
$invoice .= Lang::pad($config['phone'], ' ', 2) . "\n";
$invoice .= Lang::pad("", '=') . "\n";
$invoice .= Lang::pads("Invoice", $in['invoice'], ' ') . "\n";
$invoice .= Lang::pads(Lang::T('Date'), $date, ' ') . "\n";
$invoice .= Lang::pads(Lang::T('Sales'), $admin['fullname'], ' ') . "\n";
$invoice .= Lang::pad("", '=') . "\n";
$invoice .= Lang::pads(Lang::T('Type'), $in['type'], ' ') . "\n";
$invoice .= Lang::pads(Lang::T('Plan Name'), $in['plan_name'], ' ') . "\n";
$invoice .= Lang::pads(Lang::T('Plan Price'), Lang::moneyFormat($in['price']), ' ') . "\n";
$invoice .= Lang::pad($in['method'], ' ', 2) . "\n";
$invoice .= Lang::pads(Lang::T('Username'), $in['username'], ' ') . "\n";
$invoice .= Lang::pads(Lang::T('Password'), '**********', ' ') . "\n";
if ($in['type'] != 'Balance') {
$invoice .= Lang::pads(Lang::T('Created On'), Lang::dateAndTimeFormat($in['recharged_on'], $in['recharged_time']), ' ') . "\n";
$invoice .= Lang::pads(Lang::T('Expires On'), Lang::dateAndTimeFormat($in['expiration'], $in['time']), ' ') . "\n";
}
$invoice .= Lang::pad("", '=') . "\n";
$invoice .= Lang::pad($config['note'], ' ', 2) . "\n";
$ui->assign('invoice', $invoice);
$config['printer_cols'] = 30;
//whatsapp
$invoice = Lang::pad($config['CompanyName'], ' ', 2) . "\n";
$invoice .= Lang::pad($config['address'], ' ', 2) . "\n";
$invoice .= Lang::pad($config['phone'], ' ', 2) . "\n";
$invoice .= Lang::pad("", '=') . "\n";
$invoice .= Lang::pads("Invoice", $in['invoice'], ' ') . "\n";
$invoice .= Lang::pads(Lang::T('Date'), $date, ' ') . "\n";
$invoice .= Lang::pads(Lang::T('Sales'), $admin['fullname'], ' ') . "\n";
$invoice .= Lang::pad("", '=') . "\n";
$invoice .= Lang::pads(Lang::T('Type'), $in['type'], ' ') . "\n";
$invoice .= Lang::pads(Lang::T('Plan Name'), $in['plan_name'], ' ') . "\n";
$invoice .= Lang::pads(Lang::T('Plan Price'), Lang::moneyFormat($in['price']), ' ') . "\n";
$invoice .= Lang::pad($in['method'], ' ', 2) . "\n";
$invoice .= Lang::pads(Lang::T('Username'), $in['username'], ' ') . "\n";
$invoice .= Lang::pads(Lang::T('Password'), '**********', ' ') . "\n";
if ($in['type'] != 'Balance') {
$invoice .= Lang::pads(Lang::T('Created On'), Lang::dateAndTimeFormat($in['recharged_on'], $in['recharged_time']), ' ') . "\n";
$invoice .= Lang::pads(Lang::T('Expires On'), Lang::dateAndTimeFormat($in['expiration'], $in['time']), ' ') . "\n";
}
$invoice .= Lang::pad("", '=') . "\n";
$invoice .= Lang::pad($config['note'], ' ', 2) . "\n";
$ui->assign('whatsapp', urlencode("```$invoice```"));
}
}

View File

@ -18,10 +18,14 @@ class Paginator
$page = (int)(empty(_get('p')) ? 1 : _get('p'));
$pagination = "";
foreach($colVal as $k=>$v) {
if(strpos($v,'%') === false) {
if(!is_array($v) && strpos($v,'%') === false) {
$table = $table->where($k, $v);
}else{
$table = $table->where_like($k, $v);
if(is_array($v)){
$table = $table->where_in($k, $v);
}else{
$table = $table->where_like($k, $v);
}
}
}
$totalReq = $table->count();
@ -78,11 +82,11 @@ class Paginator
}
if ($page < $counter - 1) {
$pagination .= "<li><a href='{$url}&p=$next&q=$query'>" . $_L['Next'] . "</a></li>";
$pagination .= "<li><a href='{$url}&p=$lastpage&q=$query'>" . $_L['Last'] . "</a></li>";
$pagination .= "<li><a href='{$url}&p=$next&q=$query'>" . Lang::T('Next') . "</a></li>";
$pagination .= "<li><a href='{$url}&p=$lastpage&q=$query'>" . Lang::T('Last') . "</a></li>";
} else {
$pagination .= "<li class='disabled'><a class='disabled'>" . $_L['Next'] . "</a></li>";
$pagination .= "<li class='disabled'><a class='disabled'>" . $_L['Last'] . "</a></li>";
$pagination .= "<li class='disabled'><a class='disabled'>" . Lang::T('Next') . "</a></li>";
$pagination .= "<li class='disabled'><a class='disabled'>" . Lang::T('Last') . "</a></li>";
}
$pagination .= "</ul>";
@ -184,11 +188,11 @@ class Paginator
}
if ($page < $counter - 1) {
$pagination .= "<li><a href='{$url}$next'>" . $_L['Next'] . "</a></li>";
$pagination .= "<li><a href='{$url}$lastpage'>" . $_L['Last'] . "</a></li>";
$pagination .= "<li><a href='{$url}$next'>" . Lang::T('Next') . "</a></li>";
$pagination .= "<li><a href='{$url}$lastpage'>" . Lang::T('Last') . "</a></li>";
} else {
$pagination .= "<li class='disabled'><a class='disabled'>" . $_L['Next'] . "</a></li>";
$pagination .= "<li class='disabled'><a class='disabled'>" . $_L['Last'] . "</a></li>";
$pagination .= "<li class='disabled'><a class='disabled'>" . Lang::T('Next') . "</a></li>";
$pagination .= "<li class='disabled'><a class='disabled'>" . Lang::T('Last') . "</a></li>";
}
$pagination .= "</ul>";
@ -278,11 +282,11 @@ class Paginator
}
if ($page < $counter - 1) {
$pagination .= "<li><a href='{$url}$next'>" . $_L['Next'] . "</a></li>";
$pagination .= "<li><a href='{$url}$lastpage'>" . $_L['Last'] . "</a></li>";
$pagination .= "<li><a href='{$url}$next'>" . Lang::T('Next') . "</a></li>";
$pagination .= "<li><a href='{$url}$lastpage'>" . Lang::T('Last') . "</a></li>";
} else {
$pagination .= "<li class='disabled'><a class='disabled'>" . $_L['Next'] . "</a></li>";
$pagination .= "<li class='disabled'><a class='disabled'>" . $_L['Last'] . "</a></li>";
$pagination .= "<li class='disabled'><a class='disabled'>" . Lang::T('Next') . "</a></li>";
$pagination .= "<li class='disabled'><a class='disabled'>" . Lang::T('Last') . "</a></li>";
}
$pagination .= "</ul>";

View File

@ -8,9 +8,40 @@
class User
{
public static function getID(){
global $db_password;
if(isset($_SESSION['uid'])){
return $_SESSION['uid'];
}else if(isset($_COOKIE['uid'])){
// id.time.sha1
$tmp = explode('.',$_COOKIE['uid']);
if(sha1($tmp[0].$tmp[1].$db_password)==$tmp[2]){
if($tmp[1] < 86400*30){
$_SESSION['uid'] = $tmp[0];
return $tmp[0];
}
}
}
return 0;
}
public static function setCookie($uid){
global $db_password;
if(isset($uid)){
$time = time();
setcookie('uid', $uid.'.'.$time.'.'.sha1($uid.'.'.$time.'.'.$db_password), time()+86400*30);
}
}
public static function removeCookie(){
if(isset($_COOKIE['uid'])){
setcookie('uid', '', time()-86400);
}
}
public static function _info()
{
$id = $_SESSION['uid'];
$id = User::getID();
$d = ORM::for_table('tbl_customers')->find_one($id);
if(empty($d['username'])){
@ -21,7 +52,7 @@ class User
public static function _billing()
{
$id = $_SESSION['uid'];
$id = User::getID();
$d = ORM::for_table('tbl_user_recharges')->where('customer_id', $id)->find_many();
return $d;
}

View File

@ -5,32 +5,6 @@
**/
// on some server, it getting error because of slash is backwards
function _autoloader($class)
{
if (strpos($class, '_') !== false) {
$class = str_replace('_', DIRECTORY_SEPARATOR, $class);
if (file_exists('autoload' . DIRECTORY_SEPARATOR . $class . '.php')) {
include 'autoload' . DIRECTORY_SEPARATOR . $class . '.php';
} else {
$class = str_replace("\\", DIRECTORY_SEPARATOR, $class);
if (file_exists(__DIR__ . DIRECTORY_SEPARATOR . 'autoload' . DIRECTORY_SEPARATOR . $class . '.php'))
include __DIR__ . DIRECTORY_SEPARATOR . 'autoload' . DIRECTORY_SEPARATOR . $class . '.php';
}
} else {
if (file_exists('autoload' . DIRECTORY_SEPARATOR . $class . '.php')) {
include 'autoload' . DIRECTORY_SEPARATOR . $class . '.php';
} else {
$class = str_replace("\\", DIRECTORY_SEPARATOR, $class);
if (file_exists(__DIR__ . DIRECTORY_SEPARATOR . 'autoload' . DIRECTORY_SEPARATOR . $class . '.php'))
include __DIR__ . DIRECTORY_SEPARATOR . 'autoload' . DIRECTORY_SEPARATOR . $class . '.php';
}
}
}
spl_autoload_register('_autoloader');
function r2($to, $ntype = 'e', $msg = '')
{
if ($msg == '') {
@ -49,65 +23,8 @@ if (file_exists('config.php')) {
r2('install');
}
function safedata($value)
{
$value = trim($value);
return $value;
}
function _post($param, $defvalue = '')
{
if (!isset($_POST[$param])) {
return $defvalue;
} else {
return safedata($_POST[$param]);
}
}
function _get($param, $defvalue = '')
{
if (!isset($_GET[$param])) {
return $defvalue;
} else {
return safedata($_GET[$param]);
}
}
try {
require_once File::pathFixer('system/orm.php');
ORM::configure("mysql:host=$db_host;dbname=$db_name");
ORM::configure('username', $db_user);
ORM::configure('password', $db_password);
ORM::configure('driver_options', array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
ORM::configure('return_result_sets', true);
if ($_app_stage != 'Live') {
ORM::configure('logging', true);
}
$result = ORM::for_table('tbl_appconfig')->find_many();
foreach ($result as $value) {
$config[$value['setting']] = $value['value'];
}
date_default_timezone_set($config['timezone']);
$_c = $config;
// check if proxy setup in database
if (empty($http_proxy) && !empty($config['http_proxy'])) {
$http_proxy = $config['http_proxy'];
if (empty($http_proxyauth) && !empty($config['http_proxyauth'])) {
$http_proxyauth = $config['http_proxyauth'];
}
}
if ((!empty($radius_user) && $config['radius_enable']) || _post('radius_enable')) {
ORM::configure("mysql:host=$radius_host;dbname=$radius_name", null, 'radius');
ORM::configure('username', $radius_user, 'radius');
ORM::configure('password', $radius_pass, 'radius');
ORM::configure('driver_options', array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'), 'radius');
ORM::configure('return_result_sets', true, 'radius');
}
require_once 'init.php';
} catch (Throwable $e) {
$ui = new Smarty();
$ui->setTemplateDir(['custom' => File::pathFixer('ui/ui_custom/'), 'default' => File::pathFixer('ui/ui/')]);
@ -116,7 +33,7 @@ try {
$ui->setConfigDir(File::pathFixer('ui/conf/'));
$ui->setCacheDir(File::pathFixer('ui/cache/'));
$ui->assign("error_title", "PHPNuxBill Crash");
if (isset($_SESSION['uid'])) {
if (_auth()) {
$ui->assign("error_message", $e->getMessage() . '<br>');
} else {
$ui->assign("error_message", $e->getMessage() . '<br><pre>' . $e->getTraceAsString() . '</pre>');
@ -131,7 +48,7 @@ try {
$ui->setConfigDir(File::pathFixer('ui/conf/'));
$ui->setCacheDir(File::pathFixer('ui/cache/'));
$ui->assign("error_title", "PHPNuxBill Crash");
if (isset($_SESSION['uid'])) {
if (_auth()) {
$ui->assign("error_message", $e->getMessage() . '<br>');
} else {
$ui->assign("error_message", $e->getMessage() . '<br><pre>' . $e->getTraceAsString() . '</pre>');
@ -145,18 +62,9 @@ function _notify($msg, $type = 'e')
$_SESSION['ntype'] = $type;
$_SESSION['notify'] = $msg;
}
if (empty($config['language'])) {
$config['language'] = 'english';
}
$lan_file = File::pathFixer('system/lan/' . $config['language'] . '/common.lan.php');
if (file_exists($lan_file)) {
require $lan_file;
} else {
die("$lan_file not found");
}
$ui = new Smarty();
$ui->assign('_kolaps', $_COOKIE['kolaps']);
if (!empty($config['theme']) && $config['theme'] != 'default') {
$_theme = APP_URL . '/ui/themes/' . $config['theme'];
$ui->setTemplateDir(['custom' => File::pathFixer('ui/ui_custom/'), 'theme' => File::pathFixer('ui/themes/' . $config['theme']), 'default' => File::pathFixer('ui/ui/')]);
@ -172,13 +80,11 @@ $ui->setConfigDir(File::pathFixer('ui/conf/'));
$ui->setCacheDir(File::pathFixer('ui/cache/'));
$ui->assign('app_url', APP_URL);
$ui->assign('_domain', str_replace('www.', '', parse_url(APP_URL, PHP_URL_HOST)));
define('U', APP_URL . '/index.php?_route=');
$ui->assign('_url', APP_URL . '/index.php?_route=');
$ui->assign('_path', __DIR__);
$ui->assign('_c', $config);
$ui->assign('_L', $_L);
$ui->assign('_system_menu', 'dashboard');
$ui->assign('_title', $config['CompanyName']);
function _msglog($type, $msg)
{
@ -195,134 +101,6 @@ if (isset($_SESSION['notify'])) {
unset($_SESSION['ntype']);
}
include "autoload/Hookers.php";
// notification message
if (file_exists(File::pathFixer("system/uploads/notifications.json"))) {
$_notifmsg = json_decode(file_get_contents(File::pathFixer('system/uploads/notifications.json')), true);
}
$_notifmsg_default = json_decode(file_get_contents(File::pathFixer('system/uploads/notifications.default.json')), true);
//register all plugin
foreach (glob(File::pathFixer("system/plugin/*.php")) as $filename) {
try {
include $filename;
} catch (Throwable $e) {
} catch (Exception $e) {
}
}
function _auth($login = true)
{
if (isset($_SESSION['uid'])) {
return true;
} else {
if ($login) {
r2(U . 'login');
} else {
return false;
}
}
}
function _admin($login = true)
{
if (isset($_SESSION['aid'])) {
return true;
} else {
if ($login) {
r2(U . 'login');
} else {
return false;
}
}
}
function _log($description, $type = '', $userid = '0')
{
$d = ORM::for_table('tbl_logs')->create();
$d->date = date('Y-m-d H:i:s');
$d->type = $type;
$d->description = $description;
$d->userid = $userid;
$d->ip = $_SERVER["REMOTE_ADDR"];
$d->save();
}
function Lang($key)
{
global $_L, $lan_file;
if (!empty($_L[$key])) {
return $_L[$key];
}
$val = $key;
$key = alphanumeric($key, " ");
if (!empty($_L[$key])) {
return $_L[$key];
} else if (!empty($_L[str_replace(' ', '_', $key)])) {
return $_L[str_replace(' ', '_', $key)];
} else {
$key = str_replace(' ', '_', $key);
file_put_contents($lan_file, "$" . "_L['$key'] = '" . addslashes($val) . "';\n", FILE_APPEND);
return $val;
}
}
function alphanumeric($str, $tambahan = "")
{
return preg_replace("/[^a-zA-Z0-9" . $tambahan . "]+/", "", $str);
}
function sendTelegram($txt)
{
Message::sendTelegram($txt);
}
function sendSMS($phone, $txt)
{
Message::sendSMS($phone, $txt);
}
function sendWhatsapp($phone, $txt)
{
Message::sendWhatsapp($phone, $txt);
}
function time_elapsed_string($datetime, $full = false)
{
$now = new DateTime;
$ago = new DateTime($datetime);
$diff = $now->diff($ago);
$diff->w = floor($diff->d / 7);
$diff->d -= $diff->w * 7;
$string = array(
'y' => 'year',
'm' => 'month',
'w' => 'week',
'd' => 'day',
'h' => 'hour',
'i' => 'minute',
's' => 'second',
);
foreach ($string as $k => &$v) {
if ($diff->$k) {
$v = $diff->$k . ' ' . $v . ($diff->$k > 1 ? 's' : '');
} else {
unset($string[$k]);
}
}
if (!$full)
$string = array_slice($string, 0, 1);
return $string ? implode(', ', $string) . ' ago' : 'just now';
}
// Routing Engine
$req = _get('_route');
$routes = explode('/', $req);
@ -332,7 +110,7 @@ if ($handler == '') {
$handler = 'default';
}
try {
$sys_render = File::pathFixer('system/controllers/' . $handler . '.php');
$sys_render = $root_path.File::pathFixer('system/controllers/' . $handler . '.php');
if (file_exists($sys_render)) {
$menus = array();
// "name" => $name,
@ -372,7 +150,7 @@ try {
r2(U . 'dashboard', 'e', 'not found');
}
} catch (Throwable $e) {
if (!isset($_SESSION['aid']) || empty($_SESSION['aid'])) {
if (!Admin::getID()) {
r2(U . 'home', 'e', $e->getMessage());
}
$ui->assign("error_message", $e->getMessage() . '<br><pre>' . $e->getTraceAsString() . '</pre>');
@ -380,7 +158,7 @@ try {
$ui->display('router-error.tpl');
die();
} catch (Exception $e) {
if (!isset($_SESSION['aid']) || empty($_SESSION['aid'])) {
if (!Admin::getID()) {
r2(U . 'home', 'e', $e->getMessage());
}
$ui->assign("error_message", $e->getMessage() . '<br><pre>' . $e->getTraceAsString() . '</pre>');

View File

@ -7,7 +7,7 @@
_auth();
$ui->assign('_title', $_L['My_Account']);
$ui->assign('_title', Lang::T('My Account'));
$ui->assign('_system_menu', 'accounts');
$action = $routes['1'];
@ -42,17 +42,17 @@ switch ($action) {
$c = ORM::for_table('tbl_user_recharges')->where('username', $user['username'])->find_one();
if ($c) {
$p = ORM::for_table('tbl_plans')->where('id', $c['plan_id'])->find_one();
if($p['is_radius']){
if($c['type'] == 'Hotspot' || ($c['type'] == 'PPPOE' && empty($d['pppoe_password']))){
if ($p['is_radius']) {
if ($c['type'] == 'Hotspot' || ($c['type'] == 'PPPOE' && empty($d['pppoe_password']))) {
Radius::customerUpsert($d, $p);
}
}else{
} else {
$mikrotik = Mikrotik::info($c['routers']);
$client = Mikrotik::getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']);
if ($c['type'] == 'Hotspot') {
Mikrotik::setHotspotUser($client, $c['username'], $npass);
Mikrotik::removeHotspotActiveUser($client, $user['username']);
} else if(empty($d['pppoe_password'])){
Mikrotik::setHotspotUser($client, $c['username'], $npass);
Mikrotik::removeHotspotActiveUser($client, $user['username']);
} else if (empty($d['pppoe_password'])) {
// only change when pppoe_password empty
Mikrotik::setPpoeUser($client, $c['username'], $npass);
Mikrotik::removePpoeActive($client, $user['username']);
@ -62,18 +62,18 @@ switch ($action) {
$d->password = $npass;
$d->save();
_msglog('s', $_L['Password_Changed_Successfully']);
_msglog('s', Lang::T('Password changed successfully, Please login again'));
_log('[' . $user['username'] . ']: Password changed successfully', 'User', $user['id']);
r2(U . 'login');
} else {
r2(U . 'accounts/change-password', 'e', $_L['Incorrect_Current_Password']);
r2(U . 'accounts/change-password', 'e', Lang::T('Incorrect Current Password'));
}
} else {
r2(U . 'accounts/change-password', 'e', $_L['Incorrect_Current_Password']);
r2(U . 'accounts/change-password', 'e', Lang::T('Incorrect Current Password'));
}
} else {
r2(U . 'accounts/change-password', 'e', $_L['Incorrect_Current_Password']);
r2(U . 'accounts/change-password', 'e', Lang::T('Incorrect Current Password'));
}
break;
@ -84,7 +84,7 @@ switch ($action) {
$ui->assign('d', $d);
$ui->display('user-profile.tpl');
} else {
r2(U . 'home', 'e', $_L['Account_Not_Found']);
r2(U . 'home', 'e', Lang::T('Account Not Found'));
}
break;
@ -105,7 +105,7 @@ switch ($action) {
$d = ORM::for_table('tbl_customers')->find_one($user['id']);
if ($d) {
} else {
$msg .= $_L['Data_Not_Found'] . '<br>';
$msg .= Lang::T('Data Not Found') . '<br>';
}
if ($msg == '') {
@ -115,13 +115,140 @@ switch ($action) {
$d->phonenumber = $phonenumber;
$d->save();
_log('[' . $user['username'] . ']: ' . $_L['User_Updated_Successfully'], 'User', $user['id']);
r2(U . 'accounts/profile', 's', $_L['User_Updated_Successfully']);
_log('[' . $user['username'] . ']: ' . Lang::T('User Updated Successfully'), 'User', $user['id']);
r2(U . 'accounts/profile', 's', Lang::T('User Updated Successfully'));
} else {
r2(U . 'accounts/profile', 'e', $msg);
}
break;
case 'phone-update':
$d = ORM::for_table('tbl_customers')->find_one($user['id']);
if ($d) {
//run_hook('customer_view_edit_profile'); #HOOK
$ui->assign('d', $d);
$ui->display('user-phone-update.tpl');
} else {
r2(U . 'home', 'e', Lang::T('Account Not Found'));
}
break;
case 'phone-update-otp':
$phone = _post('phone');
$username = $user['username'];
$otpPath = 'system/cache/sms/';
// Validate the phone number format
if (!preg_match('/^[0-9]{10,}$/', $phone)) {
r2(U . 'accounts/phone-update', 'e', Lang::T('Invalid phone number format'));
}
if (empty($config['sms_url'])) {
r2(U . 'accounts/phone-update', 'e', Lang::T('SMS server not Available, Please try again later'));
}
if (!empty($config['sms_url'])) {
if (!empty($phone)) {
$d = ORM::for_table('tbl_customers')->where('username', $username)->where('phonenumber', $phone)->find_one();
if ($d) {
r2(U . 'accounts/phone-update', 'e', Lang::T('You cannot use your current phone number'));
}
if (!file_exists($otpPath)) {
mkdir($otpPath);
touch($otpPath . 'index.html');
}
$otpFile = $otpPath . sha1($username . $db_password) . ".txt";
$phoneFile = $otpPath . sha1($username . $db_password) . "_phone.txt";
// expired 10 minutes
if (file_exists($otpFile) && time() - filemtime($otpFile) < 1200) {
r2(U . 'accounts/phone-update', 'e', Lang::T('Please wait ' . (1200 - (time() - filemtime($otpFile))) . ' seconds before sending another SMS'));
} else {
$otp = rand(100000, 999999);
file_put_contents($otpFile, $otp);
file_put_contents($phoneFile, $phone);
// send send OTP to user
if ($config['phone_otp_type'] === 'sms') {
Message::sendSMS($phone, $config['CompanyName'] . "\n Your Verification code is: $otp");
} elseif ($config['phone_otp_type'] === 'whatsapp') {
Message::sendWhatsapp($phone, $config['CompanyName'] . "\n Your Verification code is: $otp");
} elseif ($config['phone_otp_type'] === 'both') {
Message::sendSMS($phone, $config['CompanyName'] . "\n Your Verification code is: $otp");
Message::sendWhatsapp($phone, $config['CompanyName'] . "\n Your Verification code is: $otp");
}
//redirect after sending OTP
r2(U . 'accounts/phone-update', 'e', Lang::T('Verification code has been sent to your phone'));
}
}
}
break;
case 'phone-update-post':
$phone = _post('phone');
$otp_code = _post('otp');
$username = $user['username'];
$otpPath = 'system/cache/sms/';
// Validate the phone number format
if (!preg_match('/^[0-9]{10,}$/', $phone)) {
r2(U . 'accounts/phone-update', 'e', Lang::T('Invalid phone number format'));
exit();
}
if (!empty($config['sms_url'])) {
$otpFile = $otpPath . sha1($username . $db_password) . ".txt";
$phoneFile = $otpPath . sha1($username . $db_password) . "_phone.txt";
// Check if OTP file exists
if (!file_exists($otpFile)) {
r2(U . 'accounts/phone-update', 'e', Lang::T('Please request OTP first'));
exit();
}
// expired 10 minutes
if (time() - filemtime($otpFile) > 1200) {
unlink($otpFile);
unlink($phoneFile);
r2(U . 'accounts/phone-update', 'e', Lang::T('Verification code expired'));
exit();
} else {
$code = file_get_contents($otpFile);
// Check if OTP code matches
if ($code != $otp_code) {
r2(U . 'accounts/phone-update', 'e', Lang::T('Wrong Verification code'));
exit();
}
// Check if the phone number matches the one that requested the OTP
$savedPhone = file_get_contents($phoneFile);
if ($savedPhone !== $phone) {
r2(U . 'accounts/phone-update', 'e', Lang::T('The phone number does not match the one that requested the OTP'));
exit();
}
// OTP verification successful, delete OTP and phone number files
unlink($otpFile);
unlink($phoneFile);
}
} else {
r2(U . 'accounts/phone-update', 'e', Lang::T('SMS server not available'));
exit();
}
// Update the phone number in the database
$d = ORM::for_table('tbl_customers')->where('username', $username)->find_one();
if ($d) {
$d->phonenumber = Lang::phoneFormat($phone);
$d->save();
}
r2(U . 'accounts/profile', 's', Lang::T('Phone number updated successfully'));
break;
default:
$ui->display('a404.tpl');
}

View File

@ -22,22 +22,20 @@ switch ($do) {
$d_pass = $d['password'];
if (Password::_verify($password, $d_pass) == true) {
$_SESSION['aid'] = $d['id'];
Admin::setCookie($d['id']);
$d->last_login = date('Y-m-d H:i:s');
$d->save();
_log($username . ' ' . $_L['Login_Successful'], 'Admin', $d['id']);
r2(U . 'dashboard');
_log($username . ' ' . Lang::T('Login Successful'), $d['user_type'], $d['id']);
_alert(Lang::T('Login Successful'),'success', "dashboard");
} else {
_msglog('e', $_L['Invalid_Username_or_Password']);
_log($username . ' ' . $_L['Failed_Login'], 'Admin');
r2(U . 'admin');
_log($username . ' ' . Lang::T('Failed Login'), $d['user_type']);
_alert(Lang::T('Invalid Username or Password'),'danger', "admin");
}
} else {
_msglog('e', $_L['Invalid_Username_or_Password']);
r2(U . 'admin');
_alert(Lang::T('Invalid Username or Password'),'danger', "admin");
}
} else {
_msglog('e', $_L['Invalid_Username_or_Password']);
r2(U . 'admin');
_alert(Lang::T('Invalid Username or Password'),'danger', "admin");
}
break;

View File

@ -9,7 +9,7 @@
**/
_admin();
$ui->assign('_title', $_L['Network']);
$ui->assign('_title', Lang::T('Network'));
$ui->assign('_system_menu', 'network');
$action = $routes['1'];

View File

@ -5,15 +5,15 @@
**/
_admin();
$ui->assign('_title', $_L['Bandwidth_Plans']);
$ui->assign('_title', Lang::T('Bandwidth Plans'));
$ui->assign('_system_menu', 'services');
$action = $routes['1'];
$admin = Admin::_info();
$ui->assign('_admin', $admin);
if($admin['user_type'] != 'Admin' AND $admin['user_type'] != 'Sales'){
r2(U."dashboard",'e',$_L['Do_Not_Access']);
if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin'])) {
r2(U."dashboard",'e',Lang::T('You do not have permission to access this page'));
}
switch ($action) {
@ -44,6 +44,7 @@ switch ($action) {
run_hook('view_edit_bandwith'); #HOOK
$d = ORM::for_table('tbl_bandwidth')->find_one($id);
if($d){
$ui->assign('burst',explode(" ", $d['burst']));
$ui->assign('d',$d);
$ui->display('bandwidth-edit.tpl');
}else{
@ -57,7 +58,7 @@ switch ($action) {
$d = ORM::for_table('tbl_bandwidth')->find_one($id);
if($d){
$d->delete();
r2(U . 'bandwidth/list', 's', $_L['Delete_Successfully']);
r2(U . 'bandwidth/list', 's', Lang::T('Data Deleted Successfully'));
}
break;
@ -68,6 +69,18 @@ switch ($action) {
$rate_up = _post('rate_up');
$rate_up_unit = _post('rate_up_unit');
run_hook('add_bandwidth'); #HOOK
$isBurst = true;
$burst = "";
if(isset($_POST['burst'])){
foreach($_POST['burst'] as $b){
if(empty($b)){
$isBurst = false;
}
}
if($isBurst){
$burst = implode(' ', $_POST['burst']);
};
}
$msg = '';
if(Validator::Length($name,16,4) == false){
$msg .= 'Name should be between 5 to 15 characters'. '<br>';
@ -78,7 +91,7 @@ switch ($action) {
$d = ORM::for_table('tbl_bandwidth')->where('name_bw',$name)->find_one();
if($d){
$msg .= $_L['BW_already_exist']. '<br>';
$msg .= Lang::T('Name Bandwidth Already Exist'). '<br>';
}
if($msg == ''){
@ -88,9 +101,10 @@ switch ($action) {
$d->rate_down_unit = $rate_down_unit;
$d->rate_up = $rate_up;
$d->rate_up_unit = $rate_up_unit;
$d->burst = $burst;
$d->save();
r2(U . 'bandwidth/list', 's', $_L['Created_Successfully']);
r2(U . 'bandwidth/list', 's', Lang::T('Data Created Successfully'));
}else{
r2(U . 'bandwidth/add', 'e', $msg);
}
@ -102,7 +116,19 @@ switch ($action) {
$rate_down_unit = _post('rate_down_unit');
$rate_up = _post('rate_up');
$rate_up_unit = _post('rate_up_unit');
run_hook('edit_bandwidth'); #HOOK
run_hook('edit_bandwidth'); #HOOK
$isBurst = true;
$burst = "";
if(isset($_POST['burst'])){
foreach($_POST['burst'] as $b){
if(empty($b)){
$isBurst = false;
}
}
if($isBurst){
$burst = implode(' ', $_POST['burst']);
};
}
$msg = '';
if(Validator::Length($name,16,4) == false){
$msg .= 'Name should be between 5 to 15 characters'. '<br>';
@ -112,13 +138,13 @@ switch ($action) {
$d = ORM::for_table('tbl_bandwidth')->find_one($id);
if($d){
}else{
$msg .= $_L['Data_Not_Found']. '<br>';
$msg .= Lang::T('Data Not Found'). '<br>';
}
if($d['name_bw'] != $name){
$c = ORM::for_table('tbl_bandwidth')->where('name_bw',$name)->find_one();
if($c){
$msg .= $_L['BW_already_exist']. '<br>';
$msg .= Lang::T('Name Bandwidth Already Exist'). '<br>';
}
}
@ -128,9 +154,10 @@ switch ($action) {
$d->rate_down_unit = $rate_down_unit;
$d->rate_up = $rate_up;
$d->rate_up_unit = $rate_up_unit;
$d->burst = $burst;
$d->save();
r2(U . 'bandwidth/list', 's', $_L['Updated_Successfully']);
r2(U . 'bandwidth/list', 's', Lang::T('Data Updated Successfully'));
}else{
r2(U . 'bandwidth/edit/'.$id, 'e', $msg);
}

View File

@ -15,8 +15,8 @@ $admin = Admin::_info();
$ui->assign('_admin', $admin);
$cache = File::pathFixer('system/cache/codecanyon.json');
if ($admin['user_type'] != 'Admin') {
r2(U . "dashboard", 'e', $_L['Do_Not_Access']);
if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin'])) {
r2(U . "dashboard", 'e', Lang::T('You do not have permission to access this page'));
}
if (empty($config['envato_token'])) {
r2(U . 'settings/app', 'w', '<a href="' . U . 'settings/app#envato' . '">Envato Personal Access Token</a> is not set');

View File

@ -6,7 +6,7 @@
**/
_admin();
$ui->assign('_title', $_L['Customers']);
$ui->assign('_title', Lang::T('Customer'));
$ui->assign('_system_menu', 'customers');
$action = $routes['1'];
@ -14,13 +14,8 @@ $admin = Admin::_info();
$ui->assign('_admin', $admin);
if ($admin['user_type'] != 'Admin' and $admin['user_type'] != 'Sales') {
r2(U . "dashboard", 'e', $_L['Do_Not_Access']);
}
switch ($action) {
case 'list':
$ui->assign('xfooter', '<script type="text/javascript" src="ui/lib/c/customers.js"></script>');
$search = _post('search');
run_hook('list_customers'); #HOOK
if ($search != '') {
@ -49,6 +44,45 @@ switch ($action) {
$ui->display('customers.tpl');
break;
case 'csv':
if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin'])) {
r2(U . "dashboard", 'e', Lang::T('You do not have permission to access this page'));
}
$cs = ORM::for_table('tbl_customers')
->select('tbl_customers.id', 'id')
->select('tbl_customers.username', 'username')
->select('fullname')
->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();
$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_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;
}
if (!$h) {
echo '"' . implode('";"', $ks) . "\"\n";
$h = true;
}
echo '"' . implode('";"', $vs) . "\"\n";
}
break;
case 'add':
run_hook('view_add_customer'); #HOOK
$ui->display('customers-add.tpl');
@ -65,6 +99,9 @@ switch ($action) {
}
r2(U . 'customers/view/' . $id_customer, 'e', 'Cannot find active plan');
case 'deactivate':
if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin'])) {
r2(U . "dashboard", 'e', Lang::T('You do not have permission to access this page'));
}
$id_customer = $routes['2'];
$b = ORM::for_table('tbl_user_recharges')->where('customer_id', $id_customer)->find_one();
if ($b) {
@ -102,7 +139,7 @@ switch ($action) {
$p = ORM::for_table('tbl_plans')->where('id', $b['plan_id'])->where('enabled', '1')->find_one();
if ($p) {
if ($p['is_radius']) {
Radius::customerAddPlan($c, $p, $p['expiration'].' '.$p['time']);
Radius::customerAddPlan($c, $p, $p['expiration'] . ' ' . $p['time']);
r2(U . 'customers/view/' . $id_customer, 's', 'Success sync customer to Radius');
} else {
$mikrotik = Mikrotik::info($b['routers']);
@ -129,10 +166,17 @@ switch ($action) {
$customer = ORM::for_table('tbl_customers')->find_one($id);
}
if ($customer) {
// Fetch the Customers Attributes values from the tbl_customer_custom_fields table
$customFields = ORM::for_table('tbl_customers_fields')
->where('customer_id', $customer['id'])
->find_many();
$v = $routes['3'];
if (empty($v) || $v == 'order') {
$v = 'order';
$paginator = Paginator::build(ORM::for_table('tbl_payment_gateway'),['username'=>$customer['username']]);
$paginator = Paginator::build(ORM::for_table('tbl_payment_gateway'), ['username' => $customer['username']]);
$order = ORM::for_table('tbl_payment_gateway')
->where('username', $customer['username'])
->offset($paginator['startpoint'])
@ -142,7 +186,7 @@ switch ($action) {
$ui->assign('paginator', $paginator);
$ui->assign('order', $order);
} else if ($v == 'activation') {
$paginator = Paginator::build(ORM::for_table('tbl_transactions'),['username'=>$customer['username']]);
$paginator = Paginator::build(ORM::for_table('tbl_transactions'), ['username' => $customer['username']]);
$activation = ORM::for_table('tbl_transactions')
->where('username', $customer['username'])
->offset($paginator['startpoint'])
@ -156,6 +200,7 @@ switch ($action) {
$ui->assign('package', $package);
$ui->assign('v', $v);
$ui->assign('d', $customer);
$ui->assign('customFields', $customFields);
$ui->display('customers-view.tpl');
} else {
r2(U . 'customers/list', 'e', $_L['Account_Not_Found']);
@ -165,8 +210,13 @@ switch ($action) {
$id = $routes['2'];
run_hook('edit_customer'); #HOOK
$d = ORM::for_table('tbl_customers')->find_one($id);
// Fetch the Customers Attributes values from the tbl_customers_fields table
$customFields = ORM::for_table('tbl_customers_fields')
->where('customer_id', $id)
->find_many();
if ($d) {
$ui->assign('d', $d);
$ui->assign('customFields', $customFields);
$ui->display('customers-edit.tpl');
} else {
r2(U . 'customers/list', 'e', $_L['Account_Not_Found']);
@ -174,10 +224,15 @@ switch ($action) {
break;
case 'delete':
if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin'])) {
r2(U . "dashboard", 'e', Lang::T('You do not have permission to access this page'));
}
$id = $routes['2'];
run_hook('delete_customer'); #HOOK
$d = ORM::for_table('tbl_customers')->find_one($id);
if ($d) {
// Delete the associated Customers Attributes records from tbl_customer_custom_fields table
ORM::for_table('tbl_customers_fields')->where('customer_id', $id)->delete_many();
$c = ORM::for_table('tbl_user_recharges')->where('username', $d['username'])->find_one();
if ($c) {
$p = ORM::for_table('tbl_plans')->find_one($c['plan_id']);
@ -217,7 +272,7 @@ switch ($action) {
}
}
r2(U . 'customers/list', 's', $_L['User_Delete_Ok']);
r2(U . 'customers/list', 's', Lang::T('User deleted Successfully'));
}
break;
@ -230,6 +285,10 @@ switch ($action) {
$address = _post('address');
$phonenumber = _post('phonenumber');
$service_type = _post('service_type');
//post Customers Attributes
$custom_field_names = (array) $_POST['custom_field_name'];
$custom_field_values = (array) $_POST['custom_field_value'];
run_hook('add_customer'); #HOOK
$msg = '';
if (Validator::Length($username, 35, 2) == false) {
@ -238,13 +297,13 @@ switch ($action) {
if (Validator::Length($fullname, 36, 2) == false) {
$msg .= 'Full Name should be between 3 to 25 characters' . '<br>';
}
if (!Validator::Length($password, 35, 2)) {
if (!Validator::Length($password, 36, 2)) {
$msg .= 'Password should be between 3 to 35 characters' . '<br>';
}
$d = ORM::for_table('tbl_customers')->where('username', $username)->find_one();
if ($d) {
$msg .= $_L['account_already_exist'] . '<br>';
$msg .= Lang::T('Account already axist') . '<br>';
}
if ($msg == '') {
@ -255,10 +314,30 @@ switch ($action) {
$d->email = $email;
$d->fullname = $fullname;
$d->address = $address;
$d->created_by = $admin['id'];
$d->phonenumber = Lang::phoneFormat($phonenumber);
$d->service_type = $service_type;
$d->save();
r2(U . 'customers/list', 's', $_L['account_created_successfully']);
// Retrieve the customer ID of the newly created customer
$customerId = $d->id();
// Save Customers Attributes details
if (!empty($custom_field_names) && !empty($custom_field_values)) {
$totalFields = min(count($custom_field_names), count($custom_field_values));
for ($i = 0; $i < $totalFields; $i++) {
$name = $custom_field_names[$i];
$value = $custom_field_values[$i];
if (!empty($name)) {
$customField = ORM::for_table('tbl_customers_fields')->create();
$customField->customer_id = $customerId;
$customField->field_name = $name;
$customField->field_value = $value;
$customField->save();
}
}
}
r2(U . 'customers/list', 's', Lang::T('Account Created Successfully'));
} else {
r2(U . 'customers/add', 'e', $msg);
}
@ -275,22 +354,28 @@ switch ($action) {
$service_type = _post('service_type');
run_hook('edit_customer'); #HOOK
$msg = '';
if (Validator::Length($username, 16, 2) == false) {
if (Validator::Length($username, 35, 2) == false) {
$msg .= 'Username should be between 3 to 15 characters' . '<br>';
}
if (Validator::Length($fullname, 26, 1) == false) {
if (Validator::Length($fullname, 36, 1) == false) {
$msg .= 'Full Name should be between 2 to 25 characters' . '<br>';
}
if ($password != '') {
if (!Validator::Length($password, 15, 2)) {
if (!Validator::Length($password, 36, 2)) {
$msg .= 'Password should be between 3 to 15 characters' . '<br>';
}
}
$id = _post('id');
$d = ORM::for_table('tbl_customers')->find_one($id);
//lets find user Customers Attributes using id
$customFields = ORM::for_table('tbl_customers_fields')
->where('customer_id', $id)
->find_many();
if (!$d) {
$msg .= $_L['Data_Not_Found'] . '<br>';
$msg .= Lang::T('Data Not Found') . '<br>';
}
$oldusername = $d['username'];
@ -302,7 +387,7 @@ switch ($action) {
if ($oldusername != $username) {
$c = ORM::for_table('tbl_customers')->where('username', $username)->find_one();
if ($c) {
$msg .= $_L['account_already_exist'] . '<br>';
$msg .= Lang::T('Account already exist') . '<br>';
}
$userDiff = true;
}
@ -327,6 +412,52 @@ switch ($action) {
$d->phonenumber = $phonenumber;
$d->service_type = $service_type;
$d->save();
// Update Customers Attributes values in tbl_customers_fields table
foreach ($customFields as $customField) {
$fieldName = $customField['field_name'];
if (isset($_POST['custom_fields'][$fieldName])) {
$customFieldValue = $_POST['custom_fields'][$fieldName];
$customField->set('field_value', $customFieldValue);
$customField->save();
}
}
// Add new Customers Attributess
if (isset($_POST['custom_field_name']) && isset($_POST['custom_field_value'])) {
$newCustomFieldNames = $_POST['custom_field_name'];
$newCustomFieldValues = $_POST['custom_field_value'];
// Check if the number of field names and values match
if (count($newCustomFieldNames) == count($newCustomFieldValues)) {
$numNewFields = count($newCustomFieldNames);
for ($i = 0; $i < $numNewFields; $i++) {
$fieldName = $newCustomFieldNames[$i];
$fieldValue = $newCustomFieldValues[$i];
// Insert the new Customers Attributes
$newCustomField = ORM::for_table('tbl_customers_fields')->create();
$newCustomField->set('customer_id', $id);
$newCustomField->set('field_name', $fieldName);
$newCustomField->set('field_value', $fieldValue);
$newCustomField->save();
}
}
}
// Delete Customers Attributess
if (isset($_POST['delete_custom_fields'])) {
$fieldsToDelete = $_POST['delete_custom_fields'];
foreach ($fieldsToDelete as $fieldName) {
// Delete the Customers Attributes with the given field name
ORM::for_table('tbl_customers_fields')
->where('field_name', $fieldName)
->delete_many();
}
}
if ($userDiff || $pppoeDiff || $passDiff) {
$c = ORM::for_table('tbl_user_recharges')->where('username', ($userDiff) ? $oldusername : $username)->find_one();
if ($c) {
@ -334,11 +465,11 @@ switch ($action) {
$c->save();
$p = ORM::for_table('tbl_plans')->find_one($c['plan_id']);
if ($p['is_radius']) {
if($userDiff){
if ($userDiff) {
Radius::customerChangeUsername($oldusername, $username);
}
Radius::customerAddPlan($d, $p, $p['expiration'].' '.$p['time']);
}else{
Radius::customerAddPlan($d, $p, $p['expiration'] . ' ' . $p['time']);
} else {
$mikrotik = Mikrotik::info($c['routers']);
if ($c['type'] == 'Hotspot') {
$client = Mikrotik::getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']);

View File

@ -6,12 +6,9 @@
**/
_admin();
$ui->assign('_title', $_L['Dashboard']);
$ui->assign('_title', Lang::T('Dashboard'));
$admin = Admin::_info();
$ui->assign('_admin', $admin);
if (!in_array($admin['user_type'], ['Admin', 'Sales'])) {
r2(U . "home", 'e', $_L['Do_Not_Access']);
}
$fdate = date('Y-m-01');
$tdate = date('Y-m-t');
@ -51,26 +48,28 @@ if (empty($c_all)) {
}
$ui->assign('c_all', $c_all);
//user expire
$paginator = Paginator::build(ORM::for_table('tbl_user_recharges'));
$expire = ORM::for_table('tbl_user_recharges')
->where_lte('expiration', $mdate)
->offset($paginator['startpoint'])
->limit($paginator['limit'])
->order_by_desc('expiration')
->find_many();
if($config['hide_uet'] != 'yes'){
//user expire
$paginator = Paginator::build(ORM::for_table('tbl_user_recharges'));
$expire = ORM::for_table('tbl_user_recharges')
->where_lte('expiration', $mdate)
->offset($paginator['startpoint'])
->limit($paginator['limit'])
->order_by_desc('expiration')
->find_many();
// Get the total count of expired records for pagination
$totalCount = ORM::for_table('tbl_user_recharges')
->where_lte('expiration', $mdate)
->count();
// Get the total count of expired records for pagination
$totalCount = ORM::for_table('tbl_user_recharges')
->where_lte('expiration', $mdate)
->count();
// Pass the total count and current page to the paginator
$paginator['total_count'] = $totalCount;
// Pass the total count and current page to the paginator
$paginator['total_count'] = $totalCount;
// Assign the pagination HTML to the template variable
$ui->assign('paginator', $paginator);
$ui->assign('expire', $expire);
// Assign the pagination HTML to the template variable
$ui->assign('paginator', $paginator);
$ui->assign('expire', $expire);
}
//activity log
$dlog = ORM::for_table('tbl_logs')->limit(5)->order_by_desc('id')->find_many();
@ -78,90 +77,113 @@ $ui->assign('dlog', $dlog);
$log = ORM::for_table('tbl_logs')->count();
$ui->assign('log', $log);
// Count stock
$tmp = $v = ORM::for_table('tbl_plans')->select('id')->select('name_plan')->find_many();
$plans = array();
$stocks = array("used" => 0, "unused" => 0);
$n = 0;
foreach ($tmp as $plan) {
$unused = ORM::for_table('tbl_voucher')
->where('id_plan', $plan['id'])
->where('status', 0)->count();
$used = ORM::for_table('tbl_voucher')
->where('id_plan', $plan['id'])
->where('status', 1)->count();
if ($unused > 0 || $used > 0) {
$plans[$n]['name_plan'] = $plan['name_plan'];
$plans[$n]['unused'] = $unused;
$plans[$n]['used'] = $used;
$stocks["unused"] += $unused;
$stocks["used"] += $used;
$n++;
if($config['hide_vs'] != 'yes'){
$cacheStocksfile = File::pathFixer('system/cache/VoucherStocks.temp');
$cachePlanfile = File::pathFixer('system/cache/VoucherPlans.temp');
//Cache for 5 minutes
if(file_exists($cacheStocksfile) && time()- filemtime($cacheStocksfile) < 600){
$stocks = json_decode(file_get_contents($cacheStocksfile), true);
$plans = json_decode(file_get_contents($cachePlanfile), true);
}else{
// Count stock
$tmp = $v = ORM::for_table('tbl_plans')->select('id')->select('name_plan')->find_many();
$plans = array();
$stocks = array("used" => 0, "unused" => 0);
$n = 0;
foreach ($tmp as $plan) {
$unused = ORM::for_table('tbl_voucher')
->where('id_plan', $plan['id'])
->where('status', 0)->count();
$used = ORM::for_table('tbl_voucher')
->where('id_plan', $plan['id'])
->where('status', 1)->count();
if ($unused > 0 || $used > 0) {
$plans[$n]['name_plan'] = $plan['name_plan'];
$plans[$n]['unused'] = $unused;
$plans[$n]['used'] = $used;
$stocks["unused"] += $unused;
$stocks["used"] += $used;
$n++;
}
}
file_put_contents($cacheStocksfile, json_encode($stocks));
file_put_contents($cachePlanfile, json_encode($plans));
}
}
//Monthly Registered Customers
$result = ORM::for_table('tbl_customers')
->select_expr('MONTH(created_at)', 'month')
->select_expr('COUNT(*)', 'count')
->where_raw('YEAR(created_at) = YEAR(NOW())')
->group_by_expr('MONTH(created_at)')
->find_many();
$cacheMRfile = File::pathFixer('system/cache/monthlyRegistered.temp');
//Cache for 1 hour
if(file_exists($cacheMRfile) && time()- filemtime($cacheMRfile) < 3600){
$monthlyRegistered = json_decode(file_get_contents($cacheMRfile), true);
}else{
//Monthly Registered Customers
$result = ORM::for_table('tbl_customers')
->select_expr('MONTH(created_at)', 'month')
->select_expr('COUNT(*)', 'count')
->where_raw('YEAR(created_at) = YEAR(NOW())')
->group_by_expr('MONTH(created_at)')
->find_many();
$counts = [];
foreach ($result as $row) {
$counts[] = [
'date' => $row->month,
'count' => $row->count
];
$monthlyRegistered = [];
foreach ($result as $row) {
$monthlyRegistered[] = [
'date' => $row->month,
'count' => $row->count
];
}
file_put_contents($cacheMRfile, json_encode($monthlyRegistered));
}
// Query to retrieve monthly data
$query = ORM::for_table('tbl_transactions')
->select_expr('MONTH(recharged_on)', 'month')
->select_expr('SUM(price)', 'total')
->where_raw("YEAR(recharged_on) = YEAR(CURRENT_DATE())") // Filter by the current year
->group_by_expr('MONTH(recharged_on)')
->find_many();
$cacheMSfile = File::pathFixer('system/cache/monthlySales.temp');
//Cache for 12 hours
if(file_exists($cacheMSfile) && time()- filemtime($cacheMSfile) < 43200){
$monthlySales = json_decode(file_get_contents($cacheMSfile), true);
}else{
// Query to retrieve monthly data
$results = ORM::for_table('tbl_transactions')
->select_expr('MONTH(recharged_on)', 'month')
->select_expr('SUM(price)', 'total')
->where_raw("YEAR(recharged_on) = YEAR(CURRENT_DATE())") // Filter by the current year
->group_by_expr('MONTH(recharged_on)')
->find_many();
// Execute the query and retrieve the monthly sales data
$results = $query->find_many();
// Create an array to hold the monthly sales data
$monthlySales = array();
// Create an array to hold the monthly sales data
$monthlySales = array();
// Iterate over the results and populate the array
foreach ($results as $result) {
$month = $result->month;
$totalSales = $result->total;
// Iterate over the results and populate the array
foreach ($results as $result) {
$month = $result->month;
$totalSales = $result->total;
$monthlySales[$month] = array(
'month' => $month,
'totalSales' => $totalSales
);
}
// Fill in missing months with zero sales
for ($month = 1; $month <= 12; $month++) {
if (!isset($monthlySales[$month])) {
$monthlySales[$month] = array(
'month' => $month,
'totalSales' => 0
'totalSales' => $totalSales
);
}
// Fill in missing months with zero sales
for ($month = 1; $month <= 12; $month++) {
if (!isset($monthlySales[$month])) {
$monthlySales[$month] = array(
'month' => $month,
'totalSales' => 0
);
}
}
// Sort the array by month
ksort($monthlySales);
// Reindex the array
$monthlySales = array_values($monthlySales);
file_put_contents($cacheMSfile, json_encode($monthlySales));
}
// Sort the array by month
ksort($monthlySales);
// Reindex the array
$monthlySales = array_values($monthlySales);
// Assign the monthly sales data to Smarty
$ui->assign('monthlySales', $monthlySales);
$ui->assign('xheader', '<script src="https://cdn.jsdelivr.net/npm/apexcharts@3.28.0/dist/apexcharts.min.js"></script>');
$ui->assign('xfooter', '');
$ui->assign('counts', $counts);
$ui->assign('monthlyRegistered', $monthlyRegistered);
$ui->assign('stocks', $stocks);
$ui->assign('plans', $plans);

View File

@ -6,7 +6,7 @@
**/
_admin();
$ui->assign('_title', $_L['Reports']);
$ui->assign('_title', Lang::T('Reports'));
$ui->assign('_sysfrm_menu', 'reports');
$action = $routes['1'];
@ -75,21 +75,21 @@ switch ($action) {
<div id="address">
<h3>' . $config['CompanyName'] . '</h3>
' . $config['address'] . '<br>
' . $_L['Phone_Number'] . ': ' . $config['phone'] . '<br>
' . Lang::T('Phone Number') . ': ' . $config['phone'] . '<br>
</div>
<div id="logo"><img id="image" src="'.$logo.'" alt="logo" /></div>
</div>
<div id="header">' . $_L['All_Transactions_at_Date'] . ': ' . date($config['date_format'], strtotime($mdate)) . '</div>
<div id="header">' . Lang::T('All Transactions at Date') . ': ' . date($config['date_format'], strtotime($mdate)) . '</div>
<table id="customers">
<tr>
<th>' . $_L['Username'] . '</th>
<th>' . $_L['Plan_Name'] . '</th>
<th>' . $_L['Type'] . '</th>
<th>' . $_L['Plan_Price'] . '</th>
<th>' . $_L['Created_On'] . '</th>
<th>' . $_L['Expires_On'] . '</th>
<th>' . $_L['Method'] . '</th>
<th>' . $_L['Routers'] . '</th>
<th>' . Lang::T('Username') . '</th>
<th>' . Lang::T('Plan Name') . '</th>
<th>' . Lang::T('Type') . '</th>
<th>' . Lang::T('Plan Price') . '</th>
<th>' . Lang::T('Created On') . '</th>
<th>' . Lang::T('Expires On') . '</th>
<th>' . Lang::T('Method') . '</th>
<th>' . Lang::T('Routers') . '</th>
</tr>';
$c = true;
foreach ($x as $value) {
@ -116,7 +116,7 @@ switch ($action) {
</tr>";
}
$html .= '</table>
<h4 class="text-uppercase text-bold">' . $_L['Total_Income'] . ':</h4>
<h4 class="text-uppercase text-bold">' . Lang::T('Total Income') . ':</h4>
<h3 class="sum">' . $config['currency_code'] . ' ' . number_format($xy, 2, $config['dec_point'], $config['thousands_sep']) . '</h3>';
run_hook('print_pdf_by_date'); #HOOK
@ -247,21 +247,21 @@ EOF;
<div id="address">
<h3>' . $config['CompanyName'] . '</h3>
' . $config['address'] . '<br>
' . $_L['Phone_Number'] . ': ' . $config['phone'] . '<br>
' . Lang::T('Phone Number') . ': ' . $config['phone'] . '<br>
</div>
<div id="logo"><img id="image" src="'.$logo.'" alt="logo" /></div>
</div>
<div id="header">' . $_L['All_Transactions_at_Date'] . ': ' . date($config['date_format'], strtotime($fdate)) . ' - ' . date($config['date_format'], strtotime($tdate)) . '</div>
<div id="header">' . Lang::T('All Transactions at Date') . ': ' . date($config['date_format'], strtotime($fdate)) . ' - ' . date($config['date_format'], strtotime($tdate)) . '</div>
<table id="customers">
<tr>
<th>' . $_L['Username'] . '</th>
<th>' . $_L['Plan_Name'] . '</th>
<th>' . $_L['Type'] . '</th>
<th>' . $_L['Plan_Price'] . '</th>
<th>' . $_L['Created_On'] . '</th>
<th>' . $_L['Expires_On'] . '</th>
<th>' . $_L['Method'] . '</th>
<th>' . $_L['Routers'] . '</th>
<th>' . Lang::T('Username') . '</th>
<th>' . Lang::T('Plan Name') . '</th>
<th>' . Lang::T('Type') . '</th>
<th>' . Lang::T('Plan Price') . '</th>
<th>' . Lang::T('Created On') . '</th>
<th>' . Lang::T('Expires On') . '</th>
<th>' . Lang::T('Method') . '</th>
<th>' . Lang::T('Routers') . '</th>
</tr>';
$c = true;
foreach ($x as $value) {
@ -288,7 +288,7 @@ EOF;
</tr>";
}
$html .= '</table>
<h4 class="text-uppercase text-bold">' . $_L['Total_Income'] . ':</h4>
<h4 class="text-uppercase text-bold">' . Lang::T('Total Income') . ':</h4>
<h3 class="sum">' . $config['currency_code'] . ' ' . number_format($xy, 2, $config['dec_point'], $config['thousands_sep']) . '</h3>';
run_hook('pdf_by_period'); #HOOK

View File

@ -6,7 +6,7 @@
**/
_auth();
$ui->assign('_title', $_L['Dashboard']);
$ui->assign('_title', Lang::T('Dashboard'));
$user = User::_info();
$ui->assign('_user', $user);

View File

@ -22,21 +22,22 @@ switch ($do) {
$d_pass = $d['password'];
if (Password::_uverify($password, $d_pass) == true) {
$_SESSION['uid'] = $d['id'];
User::setCookie($d['id']);
$d->last_login = date('Y-m-d H:i:s');
$d->save();
_log($username . ' ' . $_L['Login_Successful'], 'User', $d['id']);
r2(U . 'home');
_log($username . ' ' . Lang::T('Login Successful'), 'User', $d['id']);
_alert(Lang::T('Login Successful'),'success', "home");
} else {
_msglog('e', $_L['Invalid_Username_or_Password']);
_log($username . ' ' . $_L['Failed_Login'], 'User');
_msglog('e', Lang::T('Invalid Username or Password'));
_log($username . ' ' . Lang::T('Failed Login'), 'User');
r2(U . 'login');
}
} else {
_msglog('e', $_L['Invalid_Username_or_Password']);
_msglog('e', Lang::T('Invalid Username or Password'));
r2(U . 'login');
}
} else {
_msglog('e', $_L['Invalid_Username_or_Password']);
_msglog('e', Lang::T('Invalid Username or Password'));
r2(U . 'login');
}
@ -63,6 +64,7 @@ switch ($do) {
r2(U . 'login', 'e', Lang::T('Voucher activation failed'));
}
} else {
_alert(Lang::T('Login Successful'),'success', "dashboard");
r2(U . 'login', 'e', Lang::T('Voucher activation failed') . '.');
}
}
@ -140,11 +142,11 @@ switch ($do) {
}
} else {
// voucher used by other customer
r2(U . 'login', 'e', $_L['Voucher_Not_Valid']);
r2(U . 'login', 'e', Lang::T('Voucher Not Valid'));
}
}
} else {
_msglog('e', $_L['Invalid_Username_or_Password']);
_msglog('e', Lang::T('Invalid Username or Password'));
r2(U . 'login');
}
default:

View File

@ -6,5 +6,7 @@
run_hook('customer_logout'); #HOOK
if (session_status() == PHP_SESSION_NONE) session_start();
Admin::removeCookie();
User::removeCookie();
session_destroy();
header('location: index.php');
_alert(Lang::T('Logout Successful'),'warning', "login");

View File

@ -13,8 +13,8 @@ $action = $routes['1'];
$admin = Admin::_info();
$ui->assign('_admin', $admin);
if ($admin['user_type'] != 'Admin') {
r2(U . "dashboard", 'e', $_L['Do_Not_Access']);
if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin'])) {
r2(U . "dashboard", 'e', Lang::T('You do not have permission to access this page'));
}

View File

@ -13,7 +13,7 @@ $ui->assign('_user', $user);
switch ($action) {
case 'voucher':
$ui->assign('_system_menu', 'voucher');
$ui->assign('_title', $_L['Order_Voucher']);
$ui->assign('_title', Lang::T('Order Voucher'));
run_hook('customer_view_order'); #HOOK
$ui->display('user-order.tpl');
break;

View File

@ -5,7 +5,7 @@
**/
_auth();
$ui->assign('_title', $_L['Order_Voucher']);
$ui->assign('_title', Lang::T('Order Voucher'));
$ui->assign('_system_menu', 'order');
$action = $routes['1'];

View File

@ -54,9 +54,9 @@ if(strpos($action,"-reset")!==false){
$html = _post("html");
run_hook('save_pages'); #HOOK
if(file_put_contents($path, str_replace(["<div","</div>"],"",$html))){
r2(U . 'pages/'.$action, 's', $_L['Success_Save_Page']);
r2(U . 'pages/'.$action, 's', Lang::T("Saving page success"));
}else{
r2(U . 'pages/'.$action, 'e', $_L['Failed_Save_Page']);
r2(U . 'pages/'.$action, 'e', Lang::T("Failed to save page, make sure i can write to folder pages, <i>chmod 664 pages/*.html<i>"));
}
}else
$ui->display('a404.tpl');

View File

@ -15,8 +15,8 @@ $admin = Admin::_info();
$ui->assign('_admin', $admin);
if ($admin['user_type'] != 'Admin') {
r2(U . "dashboard", 'e', $_L['Do_Not_Access']);
if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin'])) {
r2(U . "dashboard", 'e', Lang::T('You do not have permission to access this page'));
}
$cache = File::pathFixer('system/cache/plugin_repository.json');

View File

@ -6,15 +6,15 @@
**/
_admin();
$ui->assign('_title', $_L['Network']);
$ui->assign('_title', Lang::T('Network'));
$ui->assign('_system_menu', 'network');
$action = $routes['1'];
$admin = Admin::_info();
$ui->assign('_admin', $admin);
if ($admin['user_type'] != 'Admin') {
r2(U . "dashboard", 'e', $_L['Do_Not_Access']);
if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin'])) {
r2(U . "dashboard", 'e', Lang::T('You do not have permission to access this page'));
}
@ -74,7 +74,7 @@ switch ($action) {
}
$d->delete();
r2(U . 'pool/list', 's', $_L['Delete_Successfully']);
r2(U . 'pool/list', 's', Lang::T('Data Deleted Successfully'));
}
break;
@ -101,12 +101,12 @@ switch ($action) {
$msg .= 'Name should be between 3 to 30 characters' . '<br>';
}
if ($ip_address == '' or $routers == '') {
$msg .= $_L['All_field_is_required'] . '<br>';
$msg .= Lang::T('All field is required') . '<br>';
}
$d = ORM::for_table('tbl_pool')->where('pool_name', $name)->find_one();
if ($d) {
$msg .= $_L['Pool_already_exist'] . '<br>';
$msg .= Lang::T('Pool Name Already Exist') . '<br>';
}
if ($msg == '') {
if ($routers != 'radius') {
@ -121,7 +121,7 @@ switch ($action) {
$b->routers = $routers;
$b->save();
r2(U . 'pool/list', 's', $_L['Created_Successfully']);
r2(U . 'pool/list', 's', Lang::T('Data Created Successfully'));
} else {
r2(U . 'pool/add', 'e', $msg);
}
@ -135,14 +135,14 @@ switch ($action) {
$msg = '';
if ($ip_address == '' or $routers == '') {
$msg .= $_L['All_field_is_required'] . '<br>';
$msg .= Lang::T('All field is required') . '<br>';
}
$id = _post('id');
$d = ORM::for_table('tbl_pool')->find_one($id);
if ($d) {
} else {
$msg .= $_L['Data_Not_Found'] . '<br>';
$msg .= Lang::T('Data Not Found') . '<br>';
}
if ($msg == '') {
@ -156,7 +156,7 @@ switch ($action) {
$d->routers = $routers;
$d->save();
r2(U . 'pool/list', 's', $_L['Updated_Successfully']);
r2(U . 'pool/list', 's', Lang::T('Data Updated Successfully'));
} else {
r2(U . 'pool/edit/' . $id, 'e', $msg);
}

View File

@ -6,17 +6,13 @@
**/
_admin();
$ui->assign('_title', $_L['Recharge_Account']);
$ui->assign('_title', Lang::T('Recharge Account'));
$ui->assign('_system_menu', 'prepaid');
$action = $routes['1'];
$admin = Admin::_info();
$ui->assign('_admin', $admin);
if ($admin['user_type'] != 'Admin' and $admin['user_type'] != 'Sales') {
r2(U . "dashboard", 'e', $_L['Do_Not_Access']);
}
$select2_customer = <<<EOT
<script>
document.addEventListener("DOMContentLoaded", function(event) {
@ -38,6 +34,9 @@ EOT;
switch ($action) {
case 'sync':
if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin'])) {
r2(U . "dashboard", 'e', Lang::T('You do not have permission to access this page'));
}
set_time_limit(-1);
$plans = ORM::for_table('tbl_user_recharges')->where('status', 'on')->find_many();
$log = '';
@ -61,23 +60,28 @@ switch ($action) {
}
$log .= "DONE : $plan[username], $plan[namebp], $plan[type], $plan[routers]<br>";
}
if ($isApi) {
showResult(true, $log);
}
r2(U . 'prepaid/list', 's', $log);
case 'list':
$ui->assign('xfooter', '<script type="text/javascript" src="ui/lib/c/prepaid.js"></script>');
$ui->assign('_title', $_L['Customers']);
$username = _post('username');
if ($username != '') {
$paginator = Paginator::build(ORM::for_table('tbl_user_recharges'), ['username' => '%' . $username . '%'], $username);
$d = ORM::for_table('tbl_user_recharges')->where_like('username', '%' . $username . '%')->offset($paginator['startpoint'])->limit($paginator['limit'])->order_by_desc('id')->find_many();
$ui->assign('_title', Lang::T('Customer'));
$search = _post('search');
if ($search != '') {
$paginator = Paginator::build(ORM::for_table('tbl_user_recharges'), ['username' => '%' . $search . '%'], $search);
$d = ORM::for_table('tbl_user_recharges')->where_like('username', '%' . $search . '%')->offset($paginator['startpoint'])->limit($paginator['limit'])->order_by_desc('id')->find_many();
} else {
$paginator = Paginator::build(ORM::for_table('tbl_user_recharges'));
$d = ORM::for_table('tbl_user_recharges')->offset($paginator['startpoint'])->limit($paginator['limit'])->order_by_desc('id')->find_many();
$d = ORM::for_table('tbl_user_recharges')->offset($paginator['startpoint'])->limit($paginator['limit'])->order_by_desc('id')->find_array();
}
$ui->assign('d', $d);
$ui->assign('cari', $username);
$ui->assign('paginator', $paginator);
run_hook('view_list_billing'); #HOOK
if ($isApi) {
showResult(true, $action, $d, ['search' => $search]);
}
$ui->assign('d', $d);
$ui->assign('search', $search);
$ui->assign('paginator', $paginator);
$ui->display('prepaid.tpl');
break;
@ -125,10 +129,9 @@ switch ($action) {
if (Package::rechargeUser($id_customer, $server, $plan, "Recharge", $admin['fullname'])) {
$c = ORM::for_table('tbl_customers')->where('id', $id_customer)->find_one();
$in = ORM::for_table('tbl_transactions')->where('username', $c['username'])->order_by_desc('id')->find_one();
$ui->assign('in', $in);
$ui->assign('date', date("Y-m-d H:i:s"));
Package::createInvoice($in);
$ui->display('invoice.tpl');
_log('[' . $admin['username'] . ']: ' . 'Recharge ' . $c['username'] . ' [' . $in['plan_name'] . '][' . Lang::moneyFormat($in['price']) . ']', 'Admin', $admin['id']);
_log('[' . $admin['username'] . ']: ' . 'Recharge ' . $c['username'] . ' [' . $in['plan_name'] . '][' . Lang::moneyFormat($in['price']) . ']', $admin['user_type'], $admin['id']);
} else {
r2(U . 'prepaid/recharge', 'e', "Failed to recharge account");
}
@ -139,9 +142,8 @@ switch ($action) {
case 'view':
$id = $routes['2'];
$d = ORM::for_table('tbl_transactions')->where('id', $id)->find_one();
$ui->assign('in', $d);
$in = ORM::for_table('tbl_transactions')->where('id', $id)->find_one();
$ui->assign('in', $in);
if (!empty($routes['3']) && $routes['3'] == 'send') {
$c = ORM::for_table('tbl_customers')->where('username', $d['username'])->find_one();
if ($c) {
@ -150,23 +152,35 @@ switch ($action) {
}
r2(U . 'prepaid/view/' . $id, 'd', "Customer not found");
}
Package::createInvoice($in);
$ui->assign('_title', 'View Invoice');
$ui->assign('date', Lang::dateAndTimeFormat($d['recharged_on'], $d['recharged_time']));
$ui->display('invoice.tpl');
break;
case 'print':
$id = _post('id');
$d = ORM::for_table('tbl_transactions')->where('id', $id)->find_one();
$ui->assign('in', $d);
$content = $_POST['content'];
if (!empty($content)) {
if ($_POST['nux'] == 'print') {
//header("Location: nux://print?text=".urlencode($content));
$ui->assign('nuxprint', "nux://print?text=" . urlencode($content));
}
$ui->assign('content', $content);
} else {
$id = _post('id');
$d = ORM::for_table('tbl_transactions')->where('id', $id)->find_one();
$ui->assign('in', $d);
$ui->assign('date', Lang::dateAndTimeFormat($d['recharged_on'], $d['recharged_time']));
}
$ui->assign('date', Lang::dateAndTimeFormat($d['recharged_on'], $d['recharged_time']));
run_hook('print_invoice'); #HOOK
$ui->display('invoice-print.tpl');
break;
case 'edit':
if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin', 'Agent'])) {
r2(U . "dashboard", 'e', Lang::T('You do not have permission to access this page'));
}
$id = $routes['2'];
$d = ORM::for_table('tbl_user_recharges')->find_one($id);
if ($d) {
@ -182,6 +196,9 @@ switch ($action) {
break;
case 'delete':
if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin'])) {
r2(U . "dashboard", 'e', Lang::T('You do not have permission to access this page'));
}
$id = $routes['2'];
$d = ORM::for_table('tbl_user_recharges')->find_one($id);
if ($d) {
@ -202,12 +219,15 @@ switch ($action) {
}
}
$d->delete();
_log('[' . $admin['username'] . ']: ' . 'Delete Plan for Customer ' . $c['username'] . ' [' . $in['plan_name'] . '][' . Lang::moneyFormat($in['price']) . ']', 'Admin', $admin['id']);
r2(U . 'prepaid/list', 's', $_L['Delete_Successfully']);
_log('[' . $admin['username'] . ']: ' . 'Delete Plan for Customer ' . $c['username'] . ' [' . $in['plan_name'] . '][' . Lang::moneyFormat($in['price']) . ']', $admin['user_type'], $admin['id']);
r2(U . 'prepaid/list', 's', Lang::T('Data Deleted Successfully'));
}
break;
case 'edit-post':
if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin'])) {
r2(U . "dashboard", 'e', Lang::T('You do not have permission to access this page'));
}
$username = _post('username');
$id_plan = _post('id_plan');
$recharged_on = _post('recharged_on');
@ -218,7 +238,7 @@ switch ($action) {
$d = ORM::for_table('tbl_user_recharges')->find_one($id);
if ($d) {
} else {
$msg .= $_L['Data_Not_Found'] . '<br>';
$msg .= Lang::T('Data Not Found') . '<br>';
}
$p = ORM::for_table('tbl_plans')->where('id', $id_plan)->where('enabled', '1')->find_one();
if ($d) {
@ -233,57 +253,110 @@ switch ($action) {
//$d->recharged_on = $recharged_on;
$d->expiration = $expiration;
$d->time = $time;
if($d['status'] == 'off'){
if(strtotime($expiration.' '.$time) > time()){
if ($d['status'] == 'off') {
if (strtotime($expiration . ' ' . $time) > time()) {
$d->status = 'on';
}
}
if($p['is_radius']){
if ($p['is_radius']) {
$d->routers = 'radius';
}else{
} else {
$d->routers = $p['routers'];
}
$d->save();
if($d['status'] == 'on'){
if ($d['status'] == 'on') {
Package::changeTo($username, $id_plan, $id);
}
_log('[' . $admin['username'] . ']: ' . 'Edit Plan for Customer ' . $d['username'] . ' to [' . $d['namebp'] . '][' . Lang::moneyFormat($d['price']) . ']', 'Admin', $admin['id']);
r2(U . 'prepaid/list', 's', $_L['Updated_Successfully']);
_log('[' . $admin['username'] . ']: ' . 'Edit Plan for Customer ' . $d['username'] . ' to [' . $d['namebp'] . '][' . Lang::moneyFormat($p['price']) . ']', $admin['user_type'], $admin['id']);
r2(U . 'prepaid/list', 's', Lang::T('Data Updated Successfully'));
} else {
r2(U . 'prepaid/edit/' . $id, 'e', $msg);
}
break;
case 'voucher':
$ui->assign('xfooter', '<script type="text/javascript" src="ui/lib/c/voucher.js"></script>');
$ui->assign('_title', $_L['Prepaid_Vouchers']);
$code = _post('code');
if ($code != '') {
$ui->assign('code', $code);
$paginator = Paginator::build(ORM::for_table('tbl_voucher'), ['code' => '%' . $code . '%'], $code);
$d = ORM::for_table('tbl_plans')->where('enabled', '1')
->join('tbl_voucher', array('tbl_plans.id', '=', 'tbl_voucher.id_plan'))
->where_like('tbl_voucher.code', '%' . $code . '%')
->offset($paginator['startpoint'])
->limit($paginator['limit'])
->find_many();
$ui->assign('_title', Lang::T('Prepaid 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')
->join('tbl_voucher', array('tbl_plans.id', '=', 'tbl_voucher.id_plan'))
->where_like('tbl_voucher.code', '%' . $search . '%')
->offset($pageNow)
->limit($limit)
->findArray();
} else if ($admin['user_type'] == 'Agent') {
$sales = [];
$sls = ORM::for_table('tbl_users')->select('id')->where('root', $admin['id'])->findArray();
foreach ($sls as $s) {
$sales[] = $s['id'];
}
$sales[] = $admin['id'];
$d = 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();
}
} else {
$paginator = Paginator::build(ORM::for_table('tbl_voucher'));
$d = ORM::for_table('tbl_plans')->where('enabled', '1')
->join('tbl_voucher', array('tbl_plans.id', '=', 'tbl_voucher.id_plan'))
->offset($paginator['startpoint'])
->limit($paginator['limit'])->find_many();
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();
} else if ($admin['user_type'] == 'Agent') {
$sales = [];
$sls = ORM::for_table('tbl_users')->select('id')->where('root', $admin['id'])->findArray();
foreach ($sls as $s) {
$sales[] = $s['id'];
}
$sales[] = $admin['id'];
$d = 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();
}
}
// extract admin
$admins = [];
foreach ($d as $k) {
if (!empty($k['generated_by'])) {
$admins[] = $k['generated_by'];
}
}
if (count($admins) > 0) {
$adms = ORM::for_table('tbl_users')->where_in('id', $admins)->find_many();
unset($admins);
foreach ($adms as $adm) {
$tipe = $adm['user_type'];
if ($tipe == 'Sales') {
$tipe = ' [S]';
} else if ($tipe == 'Agent') {
$tipe = ' [A]';
} else {
$tipe == '';
}
$admins[$adm['id']] = $adm['fullname'] . $tipe;
}
}
$ui->assign('admins', $admins);
$ui->assign('d', $d);
$ui->assign('_code', $code);
$ui->assign('paginator', $paginator);
$ui->assign('search', $search);
$ui->assign('page', $page);
run_hook('view_list_voucher'); #HOOK
$ui->display('voucher.tpl');
break;
case 'add-voucher':
$ui->assign('_title', $_L['Add_Voucher']);
$ui->assign('_title', Lang::T('Add Vouchers'));
$c = ORM::for_table('tbl_customers')->find_many();
$ui->assign('c', $c);
$p = ORM::for_table('tbl_plans')->where('enabled', '1')->find_many();
@ -295,16 +368,19 @@ switch ($action) {
break;
case 'remove-voucher':
if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin'])) {
r2(U . "dashboard", 'e', Lang::T('You do not have permission to access this page'));
}
$d = ORM::for_table('tbl_voucher')->where_equal('status', '1')->findMany();
if ($d) {
$jml = 0;
foreach ($d as $v) {
if(!ORM::for_table('tbl_user_recharges')->where_equal("method",'Voucher - '.$v['code'])->findOne()){
if (!ORM::for_table('tbl_user_recharges')->where_equal("method", 'Voucher - ' . $v['code'])->findOne()) {
$v->delete();
$jml++;
}
}
r2(U . 'prepaid/voucher', 's', "$jml ".$_L['Delete_Successfully']);
r2(U . 'prepaid/voucher', 's', "$jml " . Lang::T('Data Deleted Successfully'));
}
case 'print-voucher':
$from_id = _post('from_id');
@ -328,53 +404,58 @@ switch ($action) {
->where('tbl_voucher.status', '0')
->where('tbl_plans.id', $planid)
->where_gt('tbl_voucher.id', $from_id)
->limit($limit)
->find_many();
->limit($limit);
$vc = ORM::for_table('tbl_plans')
->join('tbl_voucher', array('tbl_plans.id', '=', 'tbl_voucher.id_plan'))
->where('tbl_voucher.status', '0')
->where('tbl_plans.id', $planid)
->where_gt('tbl_voucher.id', $from_id)
->count();
->where_gt('tbl_voucher.id', $from_id);
} else if ($from_id == 0 && $planid > 0) {
$v = ORM::for_table('tbl_plans')
->join('tbl_voucher', array('tbl_plans.id', '=', 'tbl_voucher.id_plan'))
->where('tbl_voucher.status', '0')
->where('tbl_plans.id', $planid)
->limit($limit)
->find_many();
->limit($limit);
$vc = ORM::for_table('tbl_plans')
->join('tbl_voucher', array('tbl_plans.id', '=', 'tbl_voucher.id_plan'))
->where('tbl_voucher.status', '0')
->where('tbl_plans.id', $planid)
->count();
->where('tbl_plans.id', $planid);
} else if ($from_id > 0 && $planid == 0) {
$v = ORM::for_table('tbl_plans')
->join('tbl_voucher', array('tbl_plans.id', '=', 'tbl_voucher.id_plan'))
->where('tbl_voucher.status', '0')
->where_gt('tbl_voucher.id', $from_id)
->limit($limit)
->find_many();
->limit($limit);
$vc = ORM::for_table('tbl_plans')
->join('tbl_voucher', array('tbl_plans.id', '=', 'tbl_voucher.id_plan'))
->where('tbl_voucher.status', '0')
->where_gt('tbl_voucher.id', $from_id)
->count();
->where_gt('tbl_voucher.id', $from_id);
} else {
$v = ORM::for_table('tbl_plans')
->join('tbl_voucher', array('tbl_plans.id', '=', 'tbl_voucher.id_plan'))
->where('tbl_voucher.status', '0')
->limit($limit)
->find_many();
->limit($limit);
$vc = ORM::for_table('tbl_plans')
->join('tbl_voucher', array('tbl_plans.id', '=', 'tbl_voucher.id_plan'))
->where('tbl_voucher.status', '0')
->count();
->where('tbl_voucher.status', '0');
}
if (in_array($admin['user_type'], ['SuperAdmin', 'Admin'])) {
$v = $v->find_many();
$vc = $vc->count();
} else {
$sales = [];
$sls = ORM::for_table('tbl_users')->select('id')->where('root', $admin['id'])->findArray();
foreach ($sls as $s) {
$sales[] = $s['id'];
}
$sales[] = $admin['id'];
$v = $v->where_in('generated_by', $sales)->find_many();
$vc = $vc->where_in('generated_by', $sales)->count();
}
$template = file_get_contents("pages/Voucher.html");
$template = str_replace('[[company_name]]', $config['CompanyName'], $template);
$ui->assign('_title', $_L['Voucher_Hotspot']);
$ui->assign('_title', Lang::T('Hotspot Voucher'));
$ui->assign('from_id', $from_id);
$ui->assign('vpl', $vpl);
$ui->assign('pagebreak', $pagebreak);
@ -416,7 +497,7 @@ switch ($action) {
$msg = '';
if ($type == '' or $plan == '' or $server == '' or $numbervoucher == '' or $lengthcode == '') {
$msg .= $_L['All_field_is_required'] . '<br>';
$msg .= Lang::T('All field is required') . '<br>';
}
if (Validator::UnsignedNumber($numbervoucher) == false) {
$msg .= 'The Number of Vouchers must be a number' . '<br>';
@ -425,7 +506,7 @@ switch ($action) {
$msg .= 'The Length Code must be a number' . '<br>';
}
if ($msg == '') {
if(!empty($prefix)){
if (!empty($prefix)) {
$d = ORM::for_table('tbl_appconfig')->where('setting', 'voucher_prefix')->find_one();
if ($d) {
$d->value = $prefix;
@ -449,31 +530,93 @@ switch ($action) {
$d->type = $type;
$d->routers = $server;
$d->id_plan = $plan;
$d->code = $prefix.$code;
$d->code = $prefix . $code;
$d->user = '0';
$d->status = '0';
$d->generated_by = $admin['id'];
$d->save();
}
if ($numbervoucher == 1) {
r2(U . 'prepaid/voucher-view/' . $d->id(), 's', Lang::T('Create Vouchers Successfully'));
}
r2(U . 'prepaid/voucher', 's', $_L['Voucher_Successfully']);
r2(U . 'prepaid/voucher', 's', Lang::T('Create Vouchers Successfully'));
} else {
r2(U . 'prepaid/add-voucher/' . $id, 'e', $msg);
}
break;
case 'voucher-view':
$id = $routes[2];
if (in_array($admin['user_type'], ['SuperAdmin', 'Admin'])) {
$voucher = ORM::for_table('tbl_voucher')->find_one($id);
} else {
$sales = [];
$sls = ORM::for_table('tbl_users')->select('id')->where('root', $admin['id'])->findArray();
foreach ($sls as $s) {
$sales[] = $s['id'];
}
$sales[] = $admin['id'];
$voucher = ORM::for_table('tbl_voucher')
->find_one($id);
if (!in_array($voucher['generated_by'], $sales)) {
r2(U . 'prepaid/voucher/', 'e', Lang::T('Voucher Not Found'));
}
}
if (!$voucher) {
r2(U . 'prepaid/voucher/', 'e', Lang::T('Voucher Not Found'));
}
$plan = ORM::for_table('tbl_plans')->find_one($d['id_plan']);
if ($voucher && $plan) {
$content = Lang::pad($config['CompanyName'], ' ', 2) . "\n";
$content .= Lang::pad($config['address'], ' ', 2) . "\n";
$content .= Lang::pad($config['phone'], ' ', 2) . "\n";
$content .= Lang::pad("", '=') . "\n";
$content .= Lang::pads('ID', $voucher['id'], ' ') . "\n";
$content .= Lang::pads(Lang::T('Code'), $voucher['code'], ' ') . "\n";
$content .= Lang::pads(Lang::T('Plan Name'), $plan['name_plan'], ' ') . "\n";
$content .= Lang::pads(Lang::T('Type'), $voucher['type'], ' ') . "\n";
$content .= Lang::pads(Lang::T('Plan Price'), Lang::moneyFormat($plan['price']), ' ') . "\n";
$content .= Lang::pads(Lang::T('Sales'), $admin['fullname'] . ' #' . $admin['id'], ' ') . "\n";
$content .= Lang::pad("", '=') . "\n";
$content .= Lang::pad($config['note'], ' ', 2) . "\n";
$ui->assign('print', $content);
$config['printer_cols'] = 30;
$content = Lang::pad($config['CompanyName'], ' ', 2) . "\n";
$content .= Lang::pad($config['address'], ' ', 2) . "\n";
$content .= Lang::pad($config['phone'], ' ', 2) . "\n";
$content .= Lang::pad("", '=') . "\n";
$content .= Lang::pads('ID', $voucher['id'], ' ') . "\n";
$content .= Lang::pads(Lang::T('Code'), $voucher['code'], ' ') . "\n";
$content .= Lang::pads(Lang::T('Plan Name'), $plan['name_plan'], ' ') . "\n";
$content .= Lang::pads(Lang::T('Type'), $voucher['type'], ' ') . "\n";
$content .= Lang::pads(Lang::T('Plan Price'), Lang::moneyFormat($plan['price']), ' ') . "\n";
$content .= Lang::pads(Lang::T('Sales'), $admin['fullname'] . ' #' . $admin['id'], ' ') . "\n";
$content .= Lang::pad("", '=') . "\n";
$content .= Lang::pad($config['note'], ' ', 2) . "\n";
$ui->assign('_title', Lang::T('View'));
$ui->assign('whatsapp', urlencode("```$content```"));
$ui->display('voucher-view.tpl');
} else {
r2(U . 'prepaid/voucher/', 'e', Lang::T('Voucher Not Found'));
}
break;
case 'voucher-delete':
if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin'])) {
r2(U . "dashboard", 'e', Lang::T('You do not have permission to access this page'));
}
$id = $routes['2'];
run_hook('delete_voucher'); #HOOK
$d = ORM::for_table('tbl_voucher')->find_one($id);
if ($d) {
$d->delete();
r2(U . 'prepaid/voucher', 's', $_L['Delete_Successfully']);
r2(U . 'prepaid/voucher', 's', Lang::T('Data Deleted Successfully'));
}
break;
case 'refill':
$ui->assign('xfooter', $select2_customer);
$ui->assign('_title', $_L['Refill_Account']);
$ui->assign('_title', Lang::T('Refill Account'));
run_hook('view_refill'); #HOOK
$ui->display('refill.tpl');
@ -491,14 +634,13 @@ switch ($action) {
$v1->user = $user['username'];
$v1->save();
$in = ORM::for_table('tbl_transactions')->where('username', $user['username'])->order_by_desc('id')->find_one();
$ui->assign('in', $in);
$ui->assign('date', date("Y-m-d H:i:s"));
Package::createInvoice($in);
$ui->display('invoice.tpl');
} else {
r2(U . 'prepaid/refill', 'e', "Failed to refill account");
}
} else {
r2(U . 'prepaid/refill', 'e', $_L['Voucher_Not_Valid']);
r2(U . 'prepaid/refill', 'e', Lang::T('Voucher Not Valid'));
}
break;
case 'deposit':
@ -517,8 +659,7 @@ switch ($action) {
if (Package::rechargeUser($user, 'balance', $plan, "Deposit", $admin['fullname'])) {
$c = ORM::for_table('tbl_customers')->where('id', $user)->find_one();
$in = ORM::for_table('tbl_transactions')->where('username', $c['username'])->order_by_desc('id')->find_one();
$ui->assign('in', $in);
$ui->assign('date', date("Y-m-d H:i:s"));
Package::createInvoice($in);
$ui->display('invoice.tpl');
} else {
r2(U . 'prepaid/refill', 'e', "Failed to refill account");

View File

@ -12,14 +12,14 @@ $admin = Admin::_info();
$ui->assign('_admin', $admin);
if ($admin['user_type'] != 'Admin') {
r2(U . "dashboard", 'e', $_L['Do_Not_Access']);
if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin'])) {
r2(U . "dashboard", 'e', Lang::T('You do not have permission to access this page'));
}
switch ($action) {
case 'nas-add':
$ui->assign('_system_menu', 'network');
$ui->assign('_system_menu', 'radius');
$ui->assign('_title', "Network Access Server");
$ui->assign('routers', ORM::for_table('tbl_routers')->find_many());
$ui->display('radius-nas-add.tpl');
@ -67,7 +67,7 @@ switch ($action) {
}
break;
case 'nas-edit':
$ui->assign('_system_menu', 'network');
$ui->assign('_system_menu', 'radius');
$ui->assign('_title', "Network Access Server");
$id = $routes['2'];
@ -131,7 +131,7 @@ switch ($action) {
r2(U . 'radius/nas-list', 'e', 'NAS Not found');
}
default:
$ui->assign('_system_menu', 'network');
$ui->assign('_system_menu', 'radius');
$ui->assign('_title', "Network Access Server");
$name = _post('name');
if (empty($name)) {

View File

@ -41,7 +41,7 @@ switch ($do) {
$msg .= 'Email is not Valid<br>';
}
if ($password != $cpassword) {
$msg .= $_L['PasswordsNotMatch'] . '<br>';
$msg .= Lang::T('Passwords does not match') . '<br>';
}
if(!empty($config['sms_url'])){
@ -72,7 +72,7 @@ switch ($do) {
}
$d = ORM::for_table('tbl_customers')->where('username', $username)->find_one();
if ($d) {
$msg .= $_L['account_already_exist'] . '<br>';
$msg .= Lang::T('Account already axist') . '<br>';
}
if ($msg == '') {
run_hook('register_user'); #HOOK
@ -85,7 +85,7 @@ switch ($do) {
$d->phonenumber = $phonenumber;
if ($d->save()) {
$user = $d->id();
r2(U . 'login', 's', $_L['Register_Success']);
r2(U . 'login', 's', Lang::T('Register Success! You can login now'));
} else {
$ui->assign('username', $username);
$ui->assign('fullname', $fullname);
@ -115,7 +115,7 @@ switch ($do) {
if(!empty($username)){
$d = ORM::for_table('tbl_customers')->where('username', $username)->find_one();
if ($d) {
r2(U . 'register', 's', $_L['account_already_exist']);
r2(U . 'register', 's', Lang::T('Account already axist'));
}
if(!file_exists($otpPath)){
mkdir($otpPath);

View File

@ -6,17 +6,13 @@
**/
_admin();
$ui->assign('_title', $_L['Reports']);
$ui->assign('_title', Lang::T('Reports'));
$ui->assign('_system_menu', 'reports');
$action = $routes['1'];
$admin = Admin::_info();
$ui->assign('_admin', $admin);
if ($admin['user_type'] != 'Admin' and $admin['user_type'] != 'Sales') {
r2(U . "dashboard", 'e', $_L['Do_Not_Access']);
}
$mdate = date('Y-m-d');
$mtime = date('H:i:s');
$tdate = date('Y-m-d', strtotime('today - 30 days'));

View File

@ -6,7 +6,7 @@
**/
_admin();
$ui->assign('_title', $_L['Network']);
$ui->assign('_title', Lang::T('Network'));
$ui->assign('_system_menu', 'network');
$action = $routes['1'];
@ -17,8 +17,8 @@ use PEAR2\Net\RouterOS;
require_once 'system/autoload/PEAR2/Autoload.php';
if ($admin['user_type'] != 'Admin') {
r2(U . "dashboard", 'e', $_L['Do_Not_Access']);
if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin'])) {
r2(U . "dashboard", 'e', Lang::T('You do not have permission to access this page'));
}
switch ($action) {
@ -66,7 +66,7 @@ switch ($action) {
$d = ORM::for_table('tbl_routers')->find_one($id);
if ($d) {
$d->delete();
r2(U . 'routers/list', 's', $_L['Delete_Successfully']);
r2(U . 'routers/list', 's', Lang::T('Data Deleted Successfully'));
}
break;
@ -83,12 +83,12 @@ switch ($action) {
$msg .= 'Name should be between 5 to 30 characters' . '<br>';
}
if ($ip_address == '' or $username == '') {
$msg .= $_L['All_field_is_required'] . '<br>';
$msg .= Lang::T('All field is required') . '<br>';
}
$d = ORM::for_table('tbl_routers')->where('ip_address', $ip_address)->find_one();
if ($d) {
$msg .= $_L['Router_already_exist'] . '<br>';
$msg .= Lang::T('IP Router Already Exist') . '<br>';
}
if (strtolower($name) == 'radius') {
$msg .= '<b>Radius</b> name is reserved<br>';
@ -106,7 +106,7 @@ switch ($action) {
$d->enabled = $enabled;
$d->save();
r2(U . 'routers/list', 's', $_L['Created_Successfully']);
r2(U . 'routers/list', 's', Lang::T('Data Created Successfully'));
} else {
r2(U . 'routers/add', 'e', $msg);
}
@ -125,14 +125,14 @@ switch ($action) {
$msg .= 'Name should be between 5 to 30 characters' . '<br>';
}
if ($ip_address == '' or $username == '') {
$msg .= $_L['All_field_is_required'] . '<br>';
$msg .= Lang::T('All field is required') . '<br>';
}
$id = _post('id');
$d = ORM::for_table('tbl_routers')->find_one($id);
if ($d) {
} else {
$msg .= $_L['Data_Not_Found'] . '<br>';
$msg .= Lang::T('Data Not Found') . '<br>';
}
if ($d['name'] != $name) {
@ -185,7 +185,7 @@ switch ($action) {
$p->set('routers', $name);
$p->save();
}
r2(U . 'routers/list', 's', $_L['Updated_Successfully']);
r2(U . 'routers/list', 's', Lang::T('Data Updated Successfully'));
} else {
r2(U . 'routers/edit/' . $id, 'e', $msg);
}

View File

@ -5,15 +5,15 @@
* by https://t.me/ibnux
**/
_admin();
$ui->assign('_title', $_L['Hotspot_Plans']);
$ui->assign('_title', Lang::T('Hotspot Plans'));
$ui->assign('_system_menu', 'services');
$action = $routes['1'];
$admin = Admin::_info();
$ui->assign('_admin', $admin);
if ($admin['user_type'] != 'Admin' and $admin['user_type'] != 'Sales') {
r2(U . "dashboard", 'e', $_L['Do_Not_Access']);
if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin'])) {
r2(U . "dashboard", 'e', Lang::T('You do not have permission to access this page'));
}
use PEAR2\Net\RouterOS;
@ -173,14 +173,14 @@ switch ($action) {
Mikrotik::removeHotspotPlan($client, $d['name_plan']);
} catch (Exception $e) {
//ignore exception, it means router has already deleted
} catch(Throwable $e){
} catch (Throwable $e) {
//ignore exception, it means router has already deleted
}
}
$d->delete();
r2(U . 'services/hotspot', 's', $_L['Delete_Successfully']);
r2(U . 'services/hotspot', 's', Lang::T('Data Deleted Successfully'));
}
break;
@ -200,6 +200,7 @@ switch ($action) {
$validity_unit = _post('validity_unit');
$routers = _post('routers');
$pool_expired = _post('pool_expired');
$list_expired = _post('list_expired');
$enabled = _post('enabled');
$allow_purchase = _post('allow_purchase');
@ -211,16 +212,16 @@ switch ($action) {
$msg .= 'The price must be a number' . '<br>';
}
if ($name == '' or $id_bw == '' or $price == '' or $validity == '') {
$msg .= $_L['All_field_is_required'] . '<br>';
$msg .= Lang::T('All field is required') . '<br>';
}
if (empty($radius)) {
if ($routers == '') {
$msg .= $_L['All_field_is_required'] . '<br>';
$msg .= Lang::T('All field is required') . '<br>';
}
}
$d = ORM::for_table('tbl_plans')->where('name_plan', $name)->where('type', 'Hotspot')->find_one();
if ($d) {
$msg .= $_L['Plan_already_exist'] . '<br>';
$msg .= Lang::T('Name Plan Already Exist') . '<br>';
}
run_hook('add_plan'); #HOOK
@ -243,6 +244,7 @@ switch ($action) {
}
$rate = $b['rate_up'] . $unitup . "/" . $b['rate_down'] . $unitdown;
$radiusRate = $b['rate_up'] . $radup . '/' . $b['rate_down'] . $raddown;
$rate = trim($rate . " " . $b['burst']);
$d = ORM::for_table('tbl_plans')->create();
$d->name_plan = $name;
@ -264,8 +266,9 @@ switch ($action) {
} else {
$d->is_radius = 0;
$d->routers = $routers;
$d->pool_expired = $pool_expired;
}
$d->pool_expired = $pool_expired;
$d->list_expired = $list_expired;
$d->enabled = $enabled;
$d->allow_purchase = $allow_purchase;
$d->save();
@ -283,7 +286,7 @@ switch ($action) {
}
r2(U . 'services/hotspot', 's', $_L['Created_Successfully']);
r2(U . 'services/hotspot', 's', Lang::T('Data Created Successfully'));
} else {
r2(U . 'services/add', 'e', $msg);
}
@ -305,6 +308,7 @@ switch ($action) {
$validity = _post('validity');
$validity_unit = _post('validity_unit');
$pool_expired = _post('pool_expired');
$list_expired = _post('list_expired');
$enabled = _post('enabled');
$allow_purchase = _post('allow_purchase');
$routers = _post('routers');
@ -316,12 +320,12 @@ switch ($action) {
$msg .= 'The price must be a number' . '<br>';
}
if ($name == '' or $id_bw == '' or $price == '' or $validity == '') {
$msg .= $_L['All_field_is_required'] . '<br>';
$msg .= Lang::T('All field is required') . '<br>';
}
$d = ORM::for_table('tbl_plans')->where('id', $id)->find_one();
if ($d) {
} else {
$msg .= $_L['Data_Not_Found'] . '<br>';
$msg .= Lang::T('Data Not Found') . '<br>';
}
run_hook('edit_plan'); #HOOK
if ($msg == '') {
@ -343,6 +347,8 @@ switch ($action) {
$rate = $b['rate_up'] . $unitup . "/" . $b['rate_down'] . $unitdown;
$radiusRate = $b['rate_up'] . $radup . '/' . $b['rate_down'] . $raddown;
$rate = trim($rate . " " . $b['burst']);
if ($d['is_radius']) {
Radius::planUpSert($id, $radiusRate);
} else {
@ -367,18 +373,19 @@ switch ($action) {
$d->validity_unit = $validity_unit;
$d->shared_users = $sharedusers;
$d->pool_expired = $pool_expired;
$d->list_expired = $list_expired;
$d->enabled = $enabled;
$d->allow_purchase = $allow_purchase;
$d->save();
r2(U . 'services/hotspot', 's', $_L['Updated_Successfully']);
r2(U . 'services/hotspot', 's', Lang::T('Data Updated Successfully'));
} else {
r2(U . 'services/edit/' . $id, 'e', $msg);
}
break;
case 'pppoe':
$ui->assign('_title', $_L['PPPOE_Plans']);
$ui->assign('_title', Lang::T('PPPOE Plans'));
$ui->assign('xfooter', '<script type="text/javascript" src="ui/lib/c/pppoe.js"></script>');
$name = _post('name');
@ -397,7 +404,7 @@ switch ($action) {
break;
case 'pppoe-add':
$ui->assign('_title', $_L['PPPOE_Plans']);
$ui->assign('_title', Lang::T('PPPOE Plans'));
$d = ORM::for_table('tbl_bandwidth')->find_many();
$ui->assign('d', $d);
$r = ORM::for_table('tbl_routers')->find_many();
@ -407,7 +414,7 @@ switch ($action) {
break;
case 'pppoe-edit':
$ui->assign('_title', $_L['PPPOE_Plans']);
$ui->assign('_title', Lang::T('PPPOE Plans'));
$id = $routes['2'];
$d = ORM::for_table('tbl_plans')->find_one($id);
if ($d) {
@ -443,13 +450,13 @@ switch ($action) {
Mikrotik::removePpoePlan($client, $d['name_plan']);
} catch (Exception $e) {
//ignore exception, it means router has already deleted
} catch(Throwable $e){
} catch (Throwable $e) {
//ignore exception, it means router has already deleted
}
}
$d->delete();
r2(U . 'services/pppoe', 's', $_L['Delete_Successfully']);
r2(U . 'services/pppoe', 's', Lang::T('Data Deleted Successfully'));
}
break;
@ -463,6 +470,7 @@ switch ($action) {
$routers = _post('routers');
$pool = _post('pool_name');
$pool_expired = _post('pool_expired');
$list_expired = _post('list_expired');
$enabled = _post('enabled');
$allow_purchase = _post('allow_purchase');
@ -475,17 +483,17 @@ switch ($action) {
$msg .= 'The price must be a number' . '<br>';
}
if ($name == '' or $id_bw == '' or $price == '' or $validity == '' or $pool == '') {
$msg .= $_L['All_field_is_required'] . '<br>';
$msg .= Lang::T('All field is required') . '<br>';
}
if (empty($radius)) {
if ($routers == '') {
$msg .= $_L['All_field_is_required'] . '<br>';
$msg .= Lang::T('All field is required') . '<br>';
}
}
$d = ORM::for_table('tbl_plans')->where('name_plan', $name)->find_one();
if ($d) {
$msg .= $_L['Plan_already_exist'] . '<br>';
$msg .= Lang::T('Name Plan Already Exist') . '<br>';
}
run_hook('add_ppoe'); #HOOK
if ($msg == '') {
@ -506,6 +514,7 @@ switch ($action) {
}
$rate = $b['rate_up'] . $unitup . "/" . $b['rate_down'] . $unitdown;
$radiusRate = $b['rate_up'] . $radup . '/' . $b['rate_down'] . $raddown;
$rate = trim($rate . " " . $b['burst']);
$d = ORM::for_table('tbl_plans')->create();
$d->type = 'PPPOE';
@ -521,8 +530,9 @@ switch ($action) {
} else {
$d->is_radius = 0;
$d->routers = $routers;
$d->pool_expired = $pool_expired;
}
$d->pool_expired = $pool_expired;
$d->list_expired = $list_expired;
$d->enabled = $enabled;
$d->allow_purchase = $allow_purchase;
$d->save();
@ -539,7 +549,7 @@ switch ($action) {
}
}
r2(U . 'services/pppoe', 's', $_L['Created_Successfully']);
r2(U . 'services/pppoe', 's', Lang::T('Data Created Successfully'));
} else {
r2(U . 'services/pppoe-add', 'e', $msg);
}
@ -555,6 +565,7 @@ switch ($action) {
$routers = _post('routers');
$pool = _post('pool_name');
$pool_expired = _post('pool_expired');
$list_expired = _post('list_expired');
$enabled = _post('enabled');
$allow_purchase = _post('allow_purchase');
@ -566,13 +577,13 @@ switch ($action) {
$msg .= 'The price must be a number' . '<br>';
}
if ($name == '' or $id_bw == '' or $price == '' or $validity == '' or $pool == '') {
$msg .= $_L['All_field_is_required'] . '<br>';
$msg .= Lang::T('All field is required') . '<br>';
}
$d = ORM::for_table('tbl_plans')->where('id', $id)->find_one();
if ($d) {
} else {
$msg .= $_L['Data_Not_Found'] . '<br>';
$msg .= Lang::T('Data Not Found') . '<br>';
}
run_hook('edit_ppoe'); #HOOK
if ($msg == '') {
@ -593,6 +604,7 @@ switch ($action) {
}
$rate = $b['rate_up'] . $unitup . "/" . $b['rate_down'] . $unitdown;
$radiusRate = $b['rate_up'] . $radup . '/' . $b['rate_down'] . $raddown;
$rate = trim($rate . " " . $b['burst']);
if ($d['is_radius']) {
Radius::planUpSert($id, $radiusRate, $pool);
@ -613,11 +625,12 @@ switch ($action) {
$d->routers = $routers;
$d->pool = $pool;
$d->pool_expired = $pool_expired;
$d->list_expired = $list_expired;
$d->enabled = $enabled;
$d->allow_purchase = $allow_purchase;
$d->save();
r2(U . 'services/pppoe', 's', $_L['Updated_Successfully']);
r2(U . 'services/pppoe', 's', Lang::T('Data Updated Successfully'));
} else {
r2(U . 'services/pppoe-edit/' . $id, 'e', $msg);
}
@ -658,7 +671,7 @@ switch ($action) {
if ($d) {
run_hook('delete_balance'); #HOOK
$d->delete();
r2(U . 'services/balance', 's', $_L['Delete_Successfully']);
r2(U . 'services/balance', 's', Lang::T('Data Deleted Successfully'));
}
break;
case 'balance-edit-post':
@ -673,13 +686,13 @@ switch ($action) {
$msg .= 'The price must be a number' . '<br>';
}
if ($name == '') {
$msg .= $_L['All_field_is_required'] . '<br>';
$msg .= Lang::T('All field is required') . '<br>';
}
$d = ORM::for_table('tbl_plans')->where('id', $id)->find_one();
if ($d) {
} else {
$msg .= $_L['Data_Not_Found'] . '<br>';
$msg .= Lang::T('Data Not Found') . '<br>';
}
run_hook('edit_ppoe'); #HOOK
if ($msg == '') {
@ -689,7 +702,7 @@ switch ($action) {
$d->allow_purchase = $allow_purchase;
$d->save();
r2(U . 'services/balance', 's', $_L['Updated_Successfully']);
r2(U . 'services/balance', 's', Lang::T('Data Updated Successfully'));
} else {
r2(U . 'services/balance-edit/' . $id, 'e', $msg);
}
@ -705,12 +718,12 @@ switch ($action) {
$msg .= 'The price must be a number' . '<br>';
}
if ($name == '') {
$msg .= $_L['All_field_is_required'] . '<br>';
$msg .= Lang::T('All field is required') . '<br>';
}
$d = ORM::for_table('tbl_plans')->where('name_plan', $name)->find_one();
if ($d) {
$msg .= $_L['Plan_already_exist'] . '<br>';
$msg .= Lang::T('Name Plan Already Exist') . '<br>';
}
run_hook('add_ppoe'); #HOOK
if ($msg == '') {
@ -727,7 +740,7 @@ switch ($action) {
$d->allow_purchase = $allow_purchase;
$d->save();
r2(U . 'services/balance', 's', $_L['Created_Successfully']);
r2(U . 'services/balance', 's', Lang::T('Data Created Successfully'));
} else {
r2(U . 'services/balance-add', 'e', $msg);
}

View File

@ -5,7 +5,7 @@
* by https://t.me/ibnux
**/
_admin();
$ui->assign('_title', $_L['Settings']);
$ui->assign('_title', Lang::T('Settings'));
$ui->assign('_system_menu', 'settings');
$action = $routes['1'];
@ -14,8 +14,8 @@ $ui->assign('_admin', $admin);
switch ($action) {
case 'app':
if ($admin['user_type'] != 'Admin') {
r2(U . "dashboard", 'e', $_L['Do_Not_Access']);
if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin'])) {
r2(U . "dashboard", 'e', Lang::T('You do not have permission to access this page'));
}
if (!empty(_get('testWa'))) {
@ -62,6 +62,20 @@ switch ($action) {
} else {
$php = 'php';
}
if (empty($config['api_key'])) {
$config['api_key'] = sha1(uniqid(rand(), true));
$d = ORM::for_table('tbl_appconfig')->where('setting', 'api_key')->find_one();
if ($d) {
$d->value = $config['api_key'];
$d->save();
} else {
$d = ORM::for_table('tbl_appconfig')->create();
$d->setting = 'api_key';
$d->value = $config['api_key'];
$d->save();
}
}
$ui->assign('_c', $config);
$ui->assign('php', $php);
$ui->assign('dir', str_replace('controllers', '', __DIR__));
$ui->assign('themes', $themes);
@ -69,193 +83,6 @@ switch ($action) {
$ui->display('app-settings.tpl');
break;
case 'localisation':
if ($admin['user_type'] != 'Admin') {
r2(U . "dashboard", 'e', $_L['Do_Not_Access']);
}
$folders = [];
$files = scandir('system/lan/');
foreach ($files as $file) {
if (is_dir('system/lan/' . $file) && !in_array($file, ['.', '..'])) {
$folders[] = $file;
}
}
$ui->assign('lan', $folders);
$timezonelist = Timezone::timezoneList();
$ui->assign('tlist', $timezonelist);
$ui->assign('xjq', ' $("#tzone").select2(); ');
run_hook('view_localisation'); #HOOK
$ui->display('app-localisation.tpl');
break;
case 'users':
if ($admin['user_type'] != 'Admin') {
r2(U . "dashboard", 'e', $_L['Do_Not_Access']);
}
$ui->assign('xfooter', '<script type="text/javascript" src="ui/lib/c/users.js"></script>');
$username = _post('username');
if ($username != '') {
$paginator = Paginator::build(ORM::for_table('tbl_users'), ['username' => '%' . $username . '%'], $username);
$d = ORM::for_table('tbl_users')->where_like('username', '%' . $username . '%')->offset($paginator['startpoint'])->limit($paginator['limit'])->order_by_asc('id')->find_many();
} else {
$paginator = Paginator::build(ORM::for_table('tbl_users'));
$d = ORM::for_table('tbl_users')->offset($paginator['startpoint'])->limit($paginator['limit'])->order_by_asc('id')->find_many();
}
$ui->assign('d', $d);
$ui->assign('paginator', $paginator);
run_hook('view_list_admin'); #HOOK
$ui->display('users.tpl');
break;
case 'users-add':
if ($admin['user_type'] != 'Admin') {
r2(U . "dashboard", 'e', $_L['Do_Not_Access']);
}
run_hook('view_add_admin'); #HOOK
$ui->display('users-add.tpl');
break;
case 'users-edit':
if ($admin['user_type'] != 'Admin') {
r2(U . "dashboard", 'e', $_L['Do_Not_Access']);
}
$id = $routes['2'];
$d = ORM::for_table('tbl_users')->find_one($id);
if ($d) {
$ui->assign('d', $d);
run_hook('view_edit_admin'); #HOOK
$ui->display('users-edit.tpl');
} else {
r2(U . 'settings/users', 'e', $_L['Account_Not_Found']);
}
break;
case 'users-delete':
if ($admin['user_type'] != 'Admin') {
r2(U . "dashboard", 'e', $_L['Do_Not_Access']);
}
$id = $routes['2'];
if (($admin['id']) == $id) {
r2(U . 'settings/users', 'e', 'Sorry You can\'t delete yourself');
}
$d = ORM::for_table('tbl_users')->find_one($id);
if ($d) {
run_hook('delete_admin'); #HOOK
$d->delete();
r2(U . 'settings/users', 's', $_L['User_Delete_Ok']);
} else {
r2(U . 'settings/users', 'e', $_L['Account_Not_Found']);
}
break;
case 'users-post':
$username = _post('username');
$fullname = _post('fullname');
$password = _post('password');
$cpassword = _post('cpassword');
$user_type = _post('user_type');
$msg = '';
if (Validator::Length($username, 16, 2) == false) {
$msg .= 'Username should be between 3 to 15 characters' . '<br>';
}
if (Validator::Length($fullname, 26, 2) == false) {
$msg .= 'Full Name should be between 3 to 25 characters' . '<br>';
}
if (!Validator::Length($password, 15, 5)) {
$msg .= 'Password should be between 6 to 15 characters' . '<br>';
}
if ($password != $cpassword) {
$msg .= 'Passwords does not match' . '<br>';
}
$d = ORM::for_table('tbl_users')->where('username', $username)->find_one();
if ($d) {
$msg .= $_L['account_already_exist'] . '<br>';
}
$date_now = date("Y-m-d H:i:s");
run_hook('add_admin'); #HOOK
if ($msg == '') {
$password = Password::_crypt($password);
$d = ORM::for_table('tbl_users')->create();
$d->username = $username;
$d->fullname = $fullname;
$d->password = $password;
$d->user_type = $user_type;
$d->status = 'Active';
$d->creationdate = $date_now;
$d->save();
_log('[' . $admin['username'] . ']: ' . $_L['account_created_successfully'], 'Admin', $admin['id']);
r2(U . 'settings/users', 's', $_L['account_created_successfully']);
} else {
r2(U . 'settings/users-add', 'e', $msg);
}
break;
case 'users-edit-post':
$username = _post('username');
$fullname = _post('fullname');
$password = _post('password');
$cpassword = _post('cpassword');
$msg = '';
if (Validator::Length($username, 16, 2) == false) {
$msg .= 'Username should be between 3 to 15 characters' . '<br>';
}
if (Validator::Length($fullname, 26, 2) == false) {
$msg .= 'Full Name should be between 3 to 25 characters' . '<br>';
}
if ($password != '') {
if (!Validator::Length($password, 15, 5)) {
$msg .= 'Password should be between 6 to 15 characters' . '<br>';
}
if ($password != $cpassword) {
$msg .= 'Passwords does not match' . '<br>';
}
}
$id = _post('id');
$d = ORM::for_table('tbl_users')->find_one($id);
if ($d) {
} else {
$msg .= $_L['Data_Not_Found'] . '<br>';
}
if ($d['username'] != $username) {
$c = ORM::for_table('tbl_users')->where('username', $username)->find_one();
if ($c) {
$msg .= $_L['account_already_exist'] . '<br>';
}
}
run_hook('edit_admin'); #HOOK
if ($msg == '') {
$d->username = $username;
if ($password != '') {
$password = Password::_crypt($password);
$d->password = $password;
}
$d->fullname = $fullname;
if (($admin['id']) != $id) {
$user_type = _post('user_type');
$d->user_type = $user_type;
}
$d->save();
_log('[' . $admin['username'] . ']: ' . $_L['User_Updated_Successfully'], 'Admin', $admin['id']);
r2(U . 'settings/users', 's', 'User Updated Successfully');
} else {
r2(U . 'settings/users-edit/' . $id, 'e', $msg);
}
break;
case 'app-post':
$company = _post('CompanyName');
run_hook('save_settings'); #HOOK
@ -271,7 +98,7 @@ switch ($action) {
}
}
if ($company == '') {
r2(U . 'settings/app', 'e', $_L['All_field_is_required']);
r2(U . 'settings/app', 'e', Lang::T('All field is required'));
} else {
if ($radius_enable) {
try {
@ -299,12 +126,56 @@ switch ($action) {
}
}
_log('[' . $admin['username'] . ']: ' . $_L['Settings_Saved_Successfully'], 'Admin', $admin['id']);
//checkbox
$checks = ['hide_mrc', 'hide_tms', 'hide_aui', 'hide_al', 'hide_uet', 'hide_vs', 'hide_pg'];
foreach ($checks as $check) {
if (!isset($_POST[$check])) {
$d = ORM::for_table('tbl_appconfig')->where('setting', $check)->find_one();
if ($d) {
$d->value = 'no';
$d->save();
} else {
$d = ORM::for_table('tbl_appconfig')->create();
$d->setting = $check;
$d->value = 'no';
$d->save();
}
}
}
r2(U . 'settings/app', 's', $_L['Settings_Saved_Successfully']);
_log('[' . $admin['username'] . ']: ' . Lang::T('Settings Saved Successfully'), $admin['user_type'], $admin['id']);
r2(U . 'settings/app', 's', Lang::T('Settings Saved Successfully'));
}
break;
case 'localisation':
if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin'])) {
r2(U . "dashboard", 'e', Lang::T('You do not have permission to access this page'));
}
$folders = [];
$files = scandir('system/lan/');
foreach ($files as $file) {
if (is_file('system/lan/' . $file) && !in_array($file, ['index.html', 'country.json', '.DS_Store'])) {
$file = str_replace(".json", "", $file);
$folders[$file] = '';
}
}
$ui->assign('lani', $folders);
$lans = Lang::getIsoLang();
foreach ($lans as $lan => $val) {
if (isset($folders[$lan])) {
unset($lans[$lan]);
}
}
$ui->assign('lan', $lans);
$timezonelist = Timezone::timezoneList();
$ui->assign('tlist', $timezonelist);
$ui->assign('xjq', ' $("#tzone").select2(); ');
run_hook('view_localisation'); #HOOK
$ui->display('app-localisation.tpl');
break;
case 'localisation-post':
$tzone = _post('tzone');
$date_format = _post('date_format');
@ -312,7 +183,7 @@ switch ($action) {
$lan = _post('lan');
run_hook('save_localisation'); #HOOK
if ($tzone == '' or $date_format == '' or $lan == '') {
r2(U . 'settings/app', 'e', $_L['All_field_is_required']);
r2(U . 'settings/app', 'e', Lang::T('All field is required'));
} else {
$d = ORM::for_table('tbl_appconfig')->where('setting', 'timezone')->find_one();
$d->value = $tzone;
@ -386,16 +257,364 @@ switch ($action) {
$d = ORM::for_table('tbl_appconfig')->where('setting', 'language')->find_one();
$d->value = $lan;
$d->save();
unset($_SESSION['Lang']);
_log('[' . $admin['username'] . ']: ' . Lang::T('Settings Saved Successfully'), $admin['user_type'], $admin['id']);
r2(U . 'settings/localisation', 's', Lang::T('Settings Saved Successfully'));
}
break;
_log('[' . $admin['username'] . ']: ' . $_L['Settings_Saved_Successfully'], 'Admin', $admin['id']);
r2(U . 'settings/localisation', 's', $_L['Settings_Saved_Successfully']);
case 'users':
if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin', 'Agent'])) {
r2(U . "dashboard", 'e', Lang::T('You do not have permission to access this page'));
}
$search = _req('search');
if ($search != '') {
if ($admin['user_type'] == 'SuperAdmin') {
$paginator = Paginator::build(ORM::for_table('tbl_users'), ['username' => '%' . $search . '%'], $search);
$d = ORM::for_table('tbl_users')
->where_like('username', '%' . $search . '%')
->offset($paginator['startpoint'])
->limit($paginator['limit'])->order_by_asc('id')->findArray();
} else if ($admin['user_type'] == 'Admin') {
$paginator = Paginator::build(ORM::for_table('tbl_users'), [
'username' => '%' . $search . '%',
['user_type' => 'Report'],
['user_type' => 'Agent'],
['user_type' => 'Sales'],
['id' => $admin['id']]
], $search);
$d = ORM::for_table('tbl_users')
->where_like('username', '%' . $search . '%')
->where_any_is([
['user_type' => 'Report'],
['user_type' => 'Agent'],
['user_type' => 'Sales'],
['id' => $admin['id']]
])
->offset($paginator['startpoint'])
->limit($paginator['limit'])->order_by_asc('id')->findArray();
} else {
$paginator = Paginator::build(ORM::for_table('tbl_users'), ['username' => '%' . $search . '%'], $search);
$d = ORM::for_table('tbl_users')
->where_like('username', '%' . $search . '%')
->where_any_is([
['id' => $admin['id']],
['root' => $admin['id']]
])
->offset($paginator['startpoint'])
->limit($paginator['limit'])->order_by_asc('id')->findArray();
}
} else {
if ($admin['user_type'] == 'SuperAdmin') {
$paginator = Paginator::build(ORM::for_table('tbl_users'));
$d = ORM::for_table('tbl_users')->offset($paginator['startpoint'])->limit($paginator['limit'])->order_by_asc('id')->findArray();
} else if ($admin['user_type'] == 'Admin') {
$paginator = Paginator::build(ORM::for_table('tbl_users'));
$d = ORM::for_table('tbl_users')->where_any_is([
['user_type' => 'Report'],
['user_type' => 'Agent'],
['user_type' => 'Sales'],
['id' => $admin['id']]
])->offset($paginator['startpoint'])->limit($paginator['limit'])->order_by_asc('id')->findArray();
} else {
$paginator = Paginator::build(ORM::for_table('tbl_users'));
$d = ORM::for_table('tbl_users')
->where_any_is([
['id' => $admin['id']],
['root' => $admin['id']]
])
->offset($paginator['startpoint'])->limit($paginator['limit'])->order_by_asc('id')->findArray();
}
}
$admins = [];
foreach ($d as $k) {
if (!empty($k['root'])) {
$admins[] = $k['root'];
}
}
if (count($admins) > 0) {
$adms = ORM::for_table('tbl_users')->where_in('id', $admins)->findArray();
unset($admins);
foreach ($adms as $adm) {
$admins[$adm['id']] = $adm['fullname'];
}
}
if ($isApi) {
showResult(true, $action, [
'admins' => $d,
'roots' => $admins
], ['search' => $search]);
}
$ui->assign('admins', $admins);
$ui->assign('d', $d);
$ui->assign('search', $search);
$ui->assign('paginator', $paginator);
run_hook('view_list_admin'); #HOOK
$ui->display('users.tpl');
break;
case 'users-add':
if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin', 'Agent'])) {
r2(U . "dashboard", 'e', Lang::T('You do not have permission to access this page'));
}
$ui->assign('_title', Lang::T('Add User'));
$ui->assign('agents', ORM::for_table('tbl_users')->where('user_type', 'Agent')->find_many());
$ui->display('users-add.tpl');
break;
case 'users-view':
$ui->assign('_title', Lang::T('Edit User'));
$id = $routes['2'];
if (empty($id)) {
$id = $admin['id'];
}
//allow see himself
if ($admin['id'] == $id) {
$d = ORM::for_table('tbl_users')->where('id', $id)->find_array($id)[0];
} else {
if (in_array($admin['user_type'], ['SuperAdmin', 'Admin'])) {
// Super Admin can see anyone
$d = ORM::for_table('tbl_users')->where('id', $id)->find_array()[0];
} else if ($admin['user_type'] == 'Agent') {
// Agent can see Sales
$d = ORM::for_table('tbl_users')->where_any_is([['root' => $admin['id']], ['id' => $id]])->find_array()[0];
}
}
if ($d) {
run_hook('view_edit_admin'); #HOOK
if ($d['user_type'] == 'Sales') {
$ui->assign('agent', ORM::for_table('tbl_users')->where('id', $d['root'])->find_array()[0]);
}
if ($isApi) {
unset($d['password']);
$agent = $ui->get('agent');
if($agent) unset($agent['password']);
showResult(true, $action, [
'admin' => $d,
'agent' => $agent
], ['search' => $search]);
}
$ui->assign('d', $d);
$ui->assign('_title', $d['username']);
$ui->display('users-view.tpl');
} else {
r2(U . 'settings/users', 'e', $_L['Account_Not_Found']);
}
break;
case 'users-edit':
if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin', 'Agent'])) {
r2(U . "dashboard", 'e', Lang::T('You do not have permission to access this page'));
}
$ui->assign('_title', Lang::T('Edit User'));
$id = $routes['2'];
if (empty($id)) {
$id = $admin['id'];
}
if ($admin['id'] == $id) {
$d = ORM::for_table('tbl_users')->find_one($id);
} else {
if ($admin['user_type'] == 'SuperAdmin') {
$d = ORM::for_table('tbl_users')->find_one($id);
$ui->assign('agents', ORM::for_table('tbl_users')->where('user_type', 'Agent')->find_many());
} else if ($admin['user_type'] == 'Admin') {
$d = ORM::for_table('tbl_users')->where_any_is([
['user_type' => 'Report'],
['user_type' => 'Agent'],
['user_type' => 'Sales']
])->find_one($id);
$ui->assign('agents', ORM::for_table('tbl_users')->where('user_type', 'Agent')->find_many());
} else {
// Agent cannot move Sales to other Agent
$ui->assign('agents', ORM::for_table('tbl_users')->where('id', $admin['id'])->find_many());
$d = ORM::for_table('tbl_users')->where('root', $admin['id'])->find_one($id);
}
}
if ($d) {
$ui->assign('id', $id);
$ui->assign('d', $d);
run_hook('view_edit_admin'); #HOOK
$ui->display('users-edit.tpl');
} else {
r2(U . 'settings/users', 'e', $_L['Account_Not_Found']);
}
break;
case 'users-delete':
if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin'])) {
r2(U . "dashboard", 'e', Lang::T('You do not have permission to access this page'));
}
$id = $routes['2'];
if (($admin['id']) == $id) {
r2(U . 'settings/users', 'e', 'Sorry You can\'t delete yourself');
}
$d = ORM::for_table('tbl_users')->find_one($id);
if ($d) {
run_hook('delete_admin'); #HOOK
$d->delete();
r2(U . 'settings/users', 's', Lang::T('User deleted Successfully'));
} else {
r2(U . 'settings/users', 'e', $_L['Account_Not_Found']);
}
break;
case 'users-post':
$username = _post('username');
$fullname = _post('fullname');
$password = _post('password');
$user_type = _post('user_type');
$phone = _post('phone');
$email = _post('email');
$city = _post('city');
$subdistrict = _post('subdistrict');
$ward = _post('ward');
$send_notif = _post('send_notif');
$root = _post('root');
$msg = '';
if (Validator::Length($username, 45, 2) == false) {
$msg .= Lang::T('Username should be between 3 to 45 characters') . '<br>';
}
if (Validator::Length($fullname, 45, 2) == false) {
$msg .= Lang::T('Full Name should be between 3 to 45 characters') . '<br>';
}
if (!Validator::Length($password, 1000, 5)) {
$msg .= Lang::T('Password should be minimum 6 characters') . '<br>';
}
$d = ORM::for_table('tbl_users')->where('username', $username)->find_one();
if ($d) {
$msg .= Lang::T('Account already axist') . '<br>';
}
$date_now = date("Y-m-d H:i:s");
run_hook('add_admin'); #HOOK
if ($msg == '') {
$password = Password::_crypt($password);
$d = ORM::for_table('tbl_users')->create();
$d->username = $username;
$d->fullname = $fullname;
$d->password = $password;
$d->user_type = $user_type;
$d->phone = $phone;
$d->email = $email;
$d->city = $city;
$d->subdistrict = $subdistrict;
$d->ward = $ward;
$d->status = 'Active';
$d->creationdate = $date_now;
if ($admin['user_type'] == 'Agent') {
// Prevent hacking from form
$d->root = $admin['id'];
} else if ($user_type == 'Sales') {
$d->root = $root;
}
$d->save();
if ($send_notif == 'wa') {
Message::sendWhatsapp(Lang::phoneFormat($phone), Lang::T('Hello, Your account has been created successfully.') . "\nUsername: $username\nPassword: $password\n\n" . $config['CompanyName']);
} else if ($send_notif == 'sms') {
Message::sendSMS($phone, Lang::T('Hello, Your account has been created successfully.') . "\nUsername: $username\nPassword: $password\n\n" . $config['CompanyName']);
}
_log('[' . $admin['username'] . ']: ' . "Created $user_type <b>$username</b>", $admin['user_type'], $admin['id']);
r2(U . 'settings/users', 's', Lang::T('Account Created Successfully'));
} else {
r2(U . 'settings/users-add', 'e', $msg);
}
break;
case 'users-edit-post':
$username = _post('username');
$fullname = _post('fullname');
$password = _post('password');
$cpassword = _post('cpassword');
$user_type = _post('user_type');
$phone = _post('phone');
$email = _post('email');
$city = _post('city');
$subdistrict = _post('subdistrict');
$ward = _post('ward');
$status = _post('status');
$root = _post('root');
$msg = '';
if (Validator::Length($username, 45, 2) == false) {
$msg .= Lang::T('Username should be between 3 to 45 characters') . '<br>';
}
if (Validator::Length($fullname, 45, 2) == false) {
$msg .= Lang::T('Full Name should be between 3 to 45 characters') . '<br>';
}
if ($password != '') {
if (!Validator::Length($password, 1000, 5)) {
$msg .= Lang::T('Password should be minimum 6 characters') . '<br>';
}
if ($password != $cpassword) {
$msg .= Lang::T('Passwords does not match') . '<br>';
}
}
$id = _post('id');
if ($admin['id'] == $id) {
$d = ORM::for_table('tbl_users')->find_one($id);
} else {
if ($admin['user_type'] == 'SuperAdmin') {
$d = ORM::for_table('tbl_users')->find_one($id);
} else if ($admin['user_type'] == 'Admin') {
$d = ORM::for_table('tbl_users')->where_any_is([
['user_type' => 'Report'],
['user_type' => 'Agent'],
['user_type' => 'Sales']
])->find_one($id);
} else {
$d = ORM::for_table('tbl_users')->where('root', $admin['id'])->find_one($id);
}
}
if (!$d) {
$msg .= Lang::T('Data Not Found') . '<br>';
}
if ($d['username'] != $username) {
$c = ORM::for_table('tbl_users')->where('username', $username)->find_one();
if ($c) {
$msg .= "<b>$username</b> " . Lang::T('Account already axist') . '<br>';
}
}
run_hook('edit_admin'); #HOOK
if ($msg == '') {
$d->username = $username;
if ($password != '') {
$password = Password::_crypt($password);
$d->password = $password;
}
$d->fullname = $fullname;
if (($admin['id']) != $id) {
$user_type = _post('user_type');
$d->user_type = $user_type;
}
$d->phone = $phone;
$d->email = $email;
$d->city = $city;
$d->subdistrict = $subdistrict;
$d->ward = $ward;
if(isset($_POST['status'])){
$d->status = $status;
}
if ($admin['user_type'] == 'Agent') {
// Prevent hacking from form
$d->root = $admin['id'];
} else if ($user_type == 'Sales') {
$d->root = $root;
}
$d->save();
_log('[' . $admin['username'] . ']: $username ' . Lang::T('User Updated Successfully'), $admin['user_type'], $admin['id']);
r2(U . 'settings/users', 's', 'User Updated Successfully');
} else {
r2(U . 'settings/users-edit/' . $id, 'e', $msg);
}
break;
case 'change-password':
if ($admin['user_type'] != 'Admin' and $admin['user_type'] != 'Sales') {
r2(U . "dashboard", 'e', $_L['Do_Not_Access']);
}
run_hook('view_change_password'); #HOOK
$ui->display('change-password.tpl');
break;
@ -421,24 +640,24 @@ switch ($action) {
$d->password = $npass;
$d->save();
_msglog('s', $_L['Password_Changed_Successfully']);
_log('[' . $admin['username'] . ']: Password changed successfully', 'Admin', $admin['id']);
_msglog('s', Lang::T('Password changed successfully, Please login again'));
_log('[' . $admin['username'] . ']: Password changed successfully', $admin['user_type'], $admin['id']);
r2(U . 'admin');
} else {
r2(U . 'settings/change-password', 'e', $_L['Incorrect_Current_Password']);
r2(U . 'settings/change-password', 'e', Lang::T('Incorrect Current Password'));
}
} else {
r2(U . 'settings/change-password', 'e', $_L['Incorrect_Current_Password']);
r2(U . 'settings/change-password', 'e', Lang::T('Incorrect Current Password'));
}
} else {
r2(U . 'settings/change-password', 'e', $_L['Incorrect_Current_Password']);
r2(U . 'settings/change-password', 'e', Lang::T('Incorrect Current Password'));
}
break;
case 'notifications':
if ($admin['user_type'] != 'Admin' and $admin['user_type'] != 'Sales') {
r2(U . "dashboard", 'e', $_L['Do_Not_Access']);
if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin'])) {
r2(U . "dashboard", 'e', Lang::T('You do not have permission to access this page'));
}
run_hook('view_notifications'); #HOOK
if (file_exists("system/uploads/notifications.json")) {
@ -451,11 +670,11 @@ switch ($action) {
break;
case 'notifications-post':
file_put_contents("system/uploads/notifications.json", json_encode($_POST));
r2(U . 'settings/notifications', 's', $_L['Settings_Saved_Successfully']);
r2(U . 'settings/notifications', 's', Lang::T('Settings Saved Successfully'));
break;
case 'dbstatus':
if ($admin['user_type'] != 'Admin') {
r2(U . "dashboard", 'e', $_L['Do_Not_Access']);
if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin'])) {
r2(U . "dashboard", 'e', Lang::T('You do not have permission to access this page'));
}
$dbc = new mysqli($db_host, $db_user, $db_password, $db_name);
@ -472,8 +691,8 @@ switch ($action) {
break;
case 'dbbackup':
if ($admin['user_type'] != 'Admin') {
r2(U . "dashboard", 'e', $_L['Do_Not_Access']);
if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin'])) {
r2(U . "dashboard", 'e', Lang::T('You do not have permission to access this page'));
}
$tables = $_POST['tables'];
set_time_limit(-1);
@ -492,8 +711,8 @@ switch ($action) {
echo json_encode($array);
break;
case 'dbrestore':
if ($admin['user_type'] != 'Admin') {
r2(U . "dashboard", 'e', $_L['Do_Not_Access']);
if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin'])) {
r2(U . "dashboard", 'e', Lang::T('You do not have permission to access this page'));
}
if (file_exists($_FILES['json']['tmp_name'])) {
$suc = 0;
@ -522,38 +741,21 @@ switch ($action) {
}
break;
case 'language':
if ($admin['user_type'] != 'Admin') {
r2(U . "dashboard", 'e', $_L['Do_Not_Access']);
if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin'])) {
r2(U . "dashboard", 'e', Lang::T('You do not have permission to access this page'));
}
run_hook('view_add_language'); #HOOK
if (file_exists($lan_file)) {
$ui->assign('langs', json_decode(file_get_contents($lan_file), true));
} else {
$ui->assign('langs', []);
}
$ui->display('language-add.tpl');
break;
case 'lang-post':
$name = _post('name');
$folder = _post('folder');
$translator = _post('translator');
if ($name == '' or $folder == '') {
$msg .= $_L['All_field_is_required'] . '<br>';
}
$d = ORM::for_table('tbl_language')->where('name', $name)->find_one();
if ($d) {
$msg .= $_L['Lang_already_exist'] . '<br>';
}
run_hook('save_language'); #HOOK
if ($msg == '') {
$b = ORM::for_table('tbl_language')->create();
$b->name = $name;
$b->folder = $folder;
$b->author = $translator;
$b->save();
r2(U . 'settings/localisation', 's', $_L['Created_Successfully']);
} else {
r2(U . 'settings/language', 'e', $msg);
}
file_put_contents($lan_file, json_encode($_POST, JSON_PRETTY_PRINT));
r2(U . 'settings/language', 's', Lang::T('Translation saved Successfully'));
break;
default:

View File

@ -4,7 +4,7 @@
* by https://t.me/ibnux
**/
_auth();
$ui->assign('_title', $_L['Voucher']);
$ui->assign('_title', Lang::T('Voucher'));
$ui->assign('_system_menu', 'voucher');
$action = $routes['1'];
@ -29,12 +29,12 @@ switch ($action) {
$v1->status = "1";
$v1->user = $user['username'];
$v1->save();
r2(U . "voucher/list-activated", 's', $_L['Activation_Vouchers_Successfully']);
r2(U . "voucher/list-activated", 's', Lang::T('Activation Vouchers Successfully'));
} else {
r2(U . 'voucher/activation', 'e', "Failed to refill account");
}
} else {
r2(U . 'voucher/activation', 'e', $_L['Voucher_Not_Valid']);
r2(U . 'voucher/activation', 'e', Lang::T('Voucher Not Valid'));
}
break;

View File

@ -1,95 +1,11 @@
<?php
/**
* PHP Mikrotik Billing (https://github.com/hotspotbilling/phpnuxbill/)
* by https://t.me/ibnux
**/
// on some server, it getting error because of slash is backwards
function _autoloader($class)
{
if (strpos($class, '_') !== false) {
$class = str_replace('_', DIRECTORY_SEPARATOR, $class);
if (file_exists(__DIR__ . DIRECTORY_SEPARATOR . 'autoload' . DIRECTORY_SEPARATOR . $class . '.php')) {
include __DIR__ . DIRECTORY_SEPARATOR . 'autoload' . DIRECTORY_SEPARATOR . $class . '.php';
} else {
$class = str_replace("\\", DIRECTORY_SEPARATOR, $class);
if (file_exists(__DIR__ . DIRECTORY_SEPARATOR . 'autoload' . DIRECTORY_SEPARATOR . $class . '.php'))
include __DIR__ . DIRECTORY_SEPARATOR . 'autoload' . DIRECTORY_SEPARATOR . $class . '.php';
}
} else {
if (file_exists(__DIR__ . DIRECTORY_SEPARATOR . 'autoload' . DIRECTORY_SEPARATOR . $class . '.php')) {
include __DIR__ . DIRECTORY_SEPARATOR . 'autoload' . DIRECTORY_SEPARATOR . $class . '.php';
} else {
$class = str_replace("\\", DIRECTORY_SEPARATOR, $class);
if (file_exists(__DIR__ . DIRECTORY_SEPARATOR . 'autoload' . DIRECTORY_SEPARATOR . $class . '.php'))
include __DIR__ . DIRECTORY_SEPARATOR . 'autoload' . DIRECTORY_SEPARATOR . $class . '.php';
}
}
}
spl_autoload_register('_autoloader');
include "../init.php";
$isCli = true;
if (php_sapi_name() !== 'cli') {
$isCli = false;
echo "<pre>";
}
if (!file_exists('../config.php')) {
die("config.php file not found");
}
if (!file_exists('orm.php')) {
die("orm.php file not found");
}
if (!file_exists('uploads/notifications.default.json')) {
die("uploads/notifications.default.json file not found");
}
require_once '../config.php';
require_once 'orm.php';
require_once 'autoload/PEAR2/Autoload.php';
include "autoload/Hookers.php";
ORM::configure("mysql:host=$db_host;dbname=$db_name");
ORM::configure('username', $db_user);
ORM::configure('password', $db_password);
ORM::configure('return_result_sets', true);
ORM::configure('logging', true);
// notification message
if (file_exists("uploads/notifications.json")) {
$_notifmsg = json_decode(file_get_contents('uploads/notifications.json'), true);
}
$_notifmsg_default = json_decode(file_get_contents('uploads/notifications.default.json'), true);
//register all plugin
foreach (glob(File::pathFixer("plugin/*.php")) as $filename) {
try{
include $filename;
} catch(Throwable $e){
//ignore plugin error
}catch(Exception $e){
//ignore plugin error
}
}
$result = ORM::for_table('tbl_appconfig')->find_many();
foreach ($result as $value) {
$config[$value['setting']] = $value['value'];
}
if (!empty($radius_user) && $config['radius_enable']) {
ORM::configure("mysql:host=$radius_host;dbname=$radius_name", null, 'radius');
ORM::configure('username', $radius_user, 'radius');
ORM::configure('password', $radius_pass, 'radius');
ORM::configure('driver_options', array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'), 'radius');
ORM::configure('return_result_sets', true, 'radius');
}
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();
@ -100,7 +16,6 @@ while ($row = $statement->fetch(PDO::FETCH_ASSOC)) {
$_c = $config;
date_default_timezone_set($config['timezone']);
$textExpired = Lang::getNotifText('expired');
@ -112,7 +27,7 @@ foreach ($d as $ds) {
if ($ds['type'] == 'Hotspot') {
$date_now = strtotime(date("Y-m-d H:i:s"));
$expiration = strtotime($ds['expiration'] . ' ' . $ds['time']);
echo $ds['expiration'] . " : " . $ds['username'];
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();
@ -131,6 +46,9 @@ foreach ($d as $ds) {
$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::removeHotspotUser($client, $c['username']);
}
@ -153,7 +71,7 @@ foreach ($d as $ds) {
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: " . $router_name .
"\nRouter: " . $p['routers'] .
"\nPrice: " . $p['price']);
}
} else {
@ -167,7 +85,7 @@ foreach ($d as $ds) {
} else {
$date_now = strtotime(date("Y-m-d H:i:s"));
$expiration = strtotime($ds['expiration'] . ' ' . $ds['time']);
echo $ds['expiration'] . " : " . $ds['username'];
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();
@ -208,7 +126,7 @@ foreach ($d as $ds) {
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: " . $router_name .
"\nRouter: " . $p['routers'] .
"\nPrice: " . $p['price']);
}
}

View File

@ -7,82 +7,14 @@
* 0 7 * * * /usr/bin/php /var/www/system/cron_reminder.php
**/
// on some server, it getting error because of slash is backwards
function _autoloader($class)
{
if (strpos($class, '_') !== false) {
$class = str_replace('_', DIRECTORY_SEPARATOR, $class);
if (file_exists(__DIR__ . DIRECTORY_SEPARATOR . 'autoload' . DIRECTORY_SEPARATOR . $class . '.php')) {
include __DIR__ . DIRECTORY_SEPARATOR . 'autoload' . DIRECTORY_SEPARATOR . $class . '.php';
} else {
$class = str_replace("\\", DIRECTORY_SEPARATOR, $class);
if (file_exists(__DIR__ . DIRECTORY_SEPARATOR . 'autoload' . DIRECTORY_SEPARATOR . $class . '.php'))
include __DIR__ . DIRECTORY_SEPARATOR . 'autoload' . DIRECTORY_SEPARATOR . $class . '.php';
}
} else {
if (file_exists(__DIR__ . DIRECTORY_SEPARATOR . 'autoload' . DIRECTORY_SEPARATOR . $class . '.php')) {
include __DIR__ . DIRECTORY_SEPARATOR . 'autoload' . DIRECTORY_SEPARATOR . $class . '.php';
} else {
$class = str_replace("\\", DIRECTORY_SEPARATOR, $class);
if (file_exists(__DIR__ . DIRECTORY_SEPARATOR . 'autoload' . DIRECTORY_SEPARATOR . $class . '.php'))
include __DIR__ . DIRECTORY_SEPARATOR . 'autoload' . DIRECTORY_SEPARATOR . $class . '.php';
}
}
}
spl_autoload_register('_autoloader');
include "../init.php";
if(php_sapi_name() !== 'cli'){
$isCli = true;
if (php_sapi_name() !== 'cli') {
$isCli = false;
echo "<pre>";
}
if(!file_exists('../config.php')){
die("config.php file not found");
}
if(!file_exists('orm.php')){
die("orm.php file not found");
}
if(!file_exists('uploads/notifications.default.json')){
die("uploads/notifications.default.json file not found");
}
require_once '../config.php';
require_once 'orm.php';
require_once 'autoload/PEAR2/Autoload.php';
include "autoload/Hookers.php";
ORM::configure("mysql:host=$db_host;dbname=$db_name");
ORM::configure('username', $db_user);
ORM::configure('password', $db_password);
ORM::configure('return_result_sets', true);
ORM::configure('logging', true);
// notification message
if (file_exists("uploads/notifications.json")) {
$_notifmsg = json_decode(file_get_contents('uploads/notifications.json'), true);
}
$_notifmsg_default = json_decode(file_get_contents('uploads/notifications.default.json'), true);
//register all plugin
foreach (glob(File::pathFixer("plugin/*.php")) as $filename) {
try{
include $filename;
} catch(Throwable $e){
//ignore plugin error
}catch(Exception $e){
//ignore plugin error
}
}
$result = ORM::for_table('tbl_appconfig')->find_many();
foreach ($result as $value) {
$config[$value['setting']] = $value['value'];
}
date_default_timezone_set($config['timezone']);
$d = ORM::for_table('tbl_user_recharges')->where('status', 'on')->find_many();
run_hook('cronjob_reminder'); #HOOK

58
system/lan/country.json Normal file
View File

@ -0,0 +1,58 @@
{
"english": "en",
"indonesia": "id",
"spanish": "es",
"turkish": "tr",
"amharic": "am",
"arabic": "ar",
"basque": "eu",
"bengali": "bn",
"english-uk": "en-gb",
"portuguese-brazil": "pt-br",
"bulgarian": "bg",
"catalan": "ca",
"cherokee": "chr",
"croatian": "hr",
"czech": "cs",
"danish": "da",
"dutch": "nl",
"estonian": "et",
"filipino": "fil",
"finnish": "fi",
"french": "fr",
"german": "de",
"greek": "el",
"gujarati": "gu",
"hebrew": "iw",
"hindi": "hi",
"hungarian": "hu",
"icelandic": "is",
"italian": "it",
"japanese": "ja",
"kannada": "kn",
"korean": "ko",
"latvian": "lv",
"lithuanian": "lt",
"malay": "ms",
"malayalam": "ml",
"marathi": "mr",
"norwegian": "no",
"polish": "pl",
"portuguese (portugal)": "pt-pt",
"romanian": "ro",
"russian": "ru",
"serbian": "sr",
"chinese (prc)": "zh-cn",
"slovak": "sk",
"slovenian": "sl",
"swahili": "sw",
"swedish": "sv",
"tamil": "ta",
"telugu": "te",
"thai": "th",
"chinese-taiwan": "zh-tw",
"urdu": "ur",
"ukrainian": "uk",
"vietnamese": "vi",
"welsh": "cy"
}

458
system/lan/english.json Normal file
View File

@ -0,0 +1,458 @@
{
"Log_in": "Log-in",
"Register": "Register",
"Announcement": "Announcement",
"Registration_Info": "Registration Info",
"Voucher_not_found__please_buy_voucher_befor_register": "Voucher not found, please buy voucher befor register",
"Register_Success__You_can_login_now": "Register Success! You can login now",
"Log_in_to_Member_Panel": "Log in to Member Panel",
"Register_as_Member": "Register as Member",
"Enter_Admin_Area": "Enter Admin Area",
"PHPNuxBill": "PHPNuxBill",
"Username": "Username",
"Password": "Password",
"Passwords_does_not_match": "Passwords does not match",
"Account_already_axist": "Account already axist",
"Manage": "Manage",
"Submit": "Submit",
"Save_Changes": "Save Changes",
"Cancel": "Cancel",
"Edit": "Edit",
"Delete": "Delete",
"Welcome": "Welcome",
"Data_Created_Successfully": "Data Created Successfully",
"Data_Updated_Successfully": "Data Updated Successfully",
"Data_Deleted_Successfully": "Data Deleted Successfully",
"Static_Pages": "Static Pages",
"Failed_to_save_page__make_sure_i_can_write_to_folder_pages___i_chmod_664_pages___html_i_": "Failed to save page, make sure i can write to folder pages, <i>chmod 664 pages\/*.html<i>",
"Saving_page_success": "Saving page success",
"Sometimes_you_need_to_refresh_3_times_until_content_change": "Sometimes you need to refresh 3 times until content change",
"Dashboard": "Dashboard",
"Search_Customers___": "Search Customers...",
"My_Account": "My Account",
"My_Profile": "My Profile",
"Settings": "Settings",
"Edit_Profile": "Edit Profile",
"Change_Password": "Change Password",
"Logout": "Logout",
"Services": "Services",
"Bandwidth_Plans": "Bandwidth Plans",
"Bandwidth_Name": "Bandwidth Name",
"New_Bandwidth": "New Bandwidth",
"Edit_Bandwidth": "Edit Bandwidth",
"Add_New_Bandwidth": "Add New Bandwidth",
"Rate_Download": "Rate Download",
"Rate_Upload": "Rate Upload",
"Name_Bandwidth_Already_Exist": "Name Bandwidth Already Exist",
"Hotspot_Plans": "Hotspot Plans",
"PPPOE_Plans": "PPPOE Plans",
"Plan_Name": "Plan Name",
"New_Service_Plan": "New Service Plan",
"Add_Service_Plan": "Add Service Plan",
"Edit_Service_Plan": "Edit Service Plan",
"Name_Plan_Already_Exist": "Name Plan Already Exist",
"Plan_Type": "Plan Type",
"Plan_Price": "Plan Price",
"Limit_Type": "Limit Type",
"Unlimited": "Unlimited",
"Limited": "Limited",
"Time_Limit": "Time Limit",
"Data_Limit": "Data Limit",
"Both_Limit": "Both Limit",
"Plan_Validity": "Plan Validity",
"Select_Bandwidth": "Select Bandwidth",
"Shared_Users": "Shared Users",
"Choose_User_Type_Sales_to_disable_access_to_Settings": "Choose User Type Sales to disable access to Settings",
"Current_Password": "Current Password",
"New_Password": "New Password",
"Administrator": "Administrator",
"Sales": "Sales",
"Member": "Member",
"Confirm_New_Password": "Confirm New Password",
"Confirm_Password": "Confirm Password",
"Full_Name": "Full Name",
"User_Type": "User Type",
"Address": "Address",
"Created_On": "Created On",
"Expires_On": "Expires On",
"Phone_Number": "Phone Number",
"User_deleted_Successfully": "User deleted Successfully",
"Full_Administrator": "Full Administrator",
"Keep_Blank_to_do_not_change_Password": "Keep Blank to do not change Password",
"Keep_it_blank_if_you_do_not_want_to_show_currency_code": "Keep it blank if you do not want to show currency code",
"Theme_Style": "Theme Style",
"Theme_Color": "Theme Color",
"Default_Language": "Default Language",
"Network": "Network",
"Routers": "Routers",
"IP_Pool": "IP Pool",
"New_Router": "New Router",
"Add_Router": "Add Router",
"Edit_Router": "Edit Router",
"Router_Name": "Router Name",
"IP_Address": "IP Address",
"Router_Secret": "Router Secret",
"Description": "Description",
"IP_Router_Already_Exist": "IP Router Already Exist",
"Name_Pool": "Name Pool",
"Range_IP": "Range IP",
"New_Pool": "New Pool",
"Add_Pool": "Add Pool",
"Edit_Pool": "Edit Pool",
"Pool_Name_Already_Exist": "Pool Name Already Exist",
"Prepaid": "Prepaid",
"Prepaid_Users": "Prepaid Users",
"Prepaid_Vouchers": "Prepaid Vouchers",
"Refill_Account": "Refill Account",
"Recharge_Account": "Recharge Account",
"Select_Account": "Select Account",
"Service_Plan": "Service Plan",
"Recharge": "Recharge",
"Method": "Method",
"Account_Created_Successfully": "Account Created Successfully",
"Database_Status": "Database Status",
"Total_Database_Size": "Total Database Size",
"Download_Database_Backup": "Download Database Backup",
"Table_Name": "Table Name",
"Rows": "Rows",
"Size": "Size",
"Customer": "Customer",
"Add_New_Contact": "Add New Contact",
"Edit_Contact": "Edit Contact",
"List_Contact": "List Contact",
"Manage_Contact": "Manage Contact",
"Reports": "Reports",
"Daily_Reports": "Daily Reports",
"Period_Reports": "Period Reports",
"All_Transactions": "All Transactions",
"Total_Income": "Total Income",
"All_Transactions_at_Date": "All Transactions at Date",
"Export_for_Print": "Export for Print",
"Print": "Print",
"Export_to_PDF": "Export to PDF",
"Click_Here_to_Print": "Click Here to Print",
"You_can_use_html_tag": "You can use html tag",
"Date_Format": "Date Format",
"Income_Today": "Income Today",
"Income_This_Month": "Income This Month",
"Users_Active": "Users Active",
"Total_Users": "Total Users",
"Users": "Users",
"Edit_User": "Edit User",
"Last_Login": "Last Login",
"Administrator_Users": "Administrator Users",
"Manage_Administrator": "Manage Administrator",
"Add_New_Administrator": "Add New Administrator",
"Localisation": "Localisation",
"Backup_Restore": "Backup\/Restore",
"General_Settings": "General Settings",
"Date": "Date",
"Login_Successful": "Login Successful",
"Failed_Login": "Failed Login",
"Settings_Saved_Successfully": "Settings Saved Successfully",
"User_Updated_Successfully": "User Updated Successfully",
"User_Expired__Today": "User Expired, Today",
"Activity_Log": "Activity Log",
"View_Reports": "View Reports",
"View_All": "View All",
"Number_of_Vouchers": "Number of Vouchers",
"Length_Code": "Length Code",
"Code_Voucher": "Code Voucher",
"Voucher": "Voucher",
"Hotspot_Voucher": "Hotspot Voucher",
"Status_Voucher": "Status Voucher",
"Add_Vouchers": "Add Vouchers",
"Create_Vouchers_Successfully": "Create Vouchers Successfully",
"Generate": "Generate",
"Print_side_by_side__it_will_easy_to_cut": "Print side by side, it will easy to cut",
"From_Date": "From Date",
"To_Date": "To Date",
"New_Service": "New Service",
"Type": "Type",
"Finish": "Finish",
"Application_Name__Company_Name": "Application Name\/ Company Name",
"This_Name_will_be_shown_on_the_Title": "This Name will be shown on the Title",
"Next": "Next",
"Last": "Last",
"Timezone": "Timezone",
"Decimal_Point": "Decimal Point",
"Thousands_Separator": "Thousands Separator",
"Currency_Code": "Currency Code",
"Order_Voucher": "Order Voucher",
"Voucher_Activation": "Voucher Activation",
"List_Activated_Voucher": "List Activated Voucher",
"Enter_voucher_code_here": "Enter voucher code here",
"Private_Message": "Private Message",
"Inbox": "Inbox",
"Outbox": "Outbox",
"Compose": "Compose",
"Send_to": "Send to",
"Title": "Title",
"Message": "Message",
"Your_Account_Information": "Your Account Information",
"Welcome_to_the_Panel_Members_page__on_this_page_you_can_": "Welcome to the Panel Members page, on this page you can:",
"Invalid_Username_or_Password": "Invalid Username or Password",
"You_do_not_have_permission_to_access_this_page": "You do not have permission to access this page",
"Incorrect_Current_Password": "Incorrect Current Password",
"Password_changed_successfully__Please_login_again": "Password changed successfully, Please login again",
"All_field_is_required": "All field is required",
"Voucher_Not_Valid": "Voucher Not Valid",
"Activation_Vouchers_Successfully": "Activation Vouchers Successfully",
"Data_Not_Found": "Data Not Found",
"Search_by_Username": "Search by Username",
"Search_by_Name": "Search by Name",
"Search_by_Code_Voucher": "Search by Code Voucher",
"Search": "Search",
"Select_a_customer": "Select a customer",
"Select_Routers": "Select Routers",
"Select_Plans": "Select Plans",
"Select_Pool": "Select Pool",
"Hrs": "Hrs",
"Mins": "Mins",
"Days": "Days",
"Months": "Months",
"Add_Language": "Add Language",
"Language_Name": "Language Name",
"Folder_Name": "Folder Name",
"Translator": "Translator",
"Language_Name_Already_Exist": "Language Name Already Exist",
"Payment_Gateway": "Payment Gateway",
"Community": "Community",
"1_user_can_be_used_for_many_devices_": "1 user can be used for many devices?",
"Cannot_be_change_after_saved": "Cannot be change after saved",
"Explain_Coverage_of_router": "Explain Coverage of router",
"Name_of_Area_that_router_operated": "Name of Area that router operated",
"Payment_Notification_URL__Recurring_Notification_URL__Pay_Account_Notification_URL": "Payment Notification URL, Recurring Notification URL, Pay Account Notification URL",
"Finish_Redirect_URL__Unfinish_Redirect_URL__Error_Redirect_URL": "Finish Redirect URL, Unfinish Redirect URL, Error Redirect URL",
"Status": "Status",
"Plan_Not_found": "Plan Not found",
"Failed_to_create_transaction_": "Failed to create transaction.",
"Seller_has_not_yet_setup_Xendit_payment_gateway": "Seller has not yet setup Xendit payment gateway",
"Admin_has_not_yet_setup_Xendit_payment_gateway__please_tell_admin": "Admin has not yet setup Xendit payment gateway, please tell admin",
"You_already_have_unpaid_transaction__cancel_it_or_pay_it_": "You already have unpaid transaction, cancel it or pay it.",
"Transaction_Not_found": "Transaction Not found",
"Cancel_it_": "Cancel it?",
"expired": "expired",
"Check_for_Payment": "Check for Payment",
"Transaction_still_unpaid_": "Transaction still unpaid.",
"Paid_Date": "Paid Date",
"Transaction_has_been_paid_": "Transaction has been paid.",
"PAID": "PAID",
"CANCELED": "CANCELED",
"UNPAID": "UNPAID",
"PAY_NOW": "PAY NOW",
"Buy_Hotspot_Plan": "Buy Hotspot Plan",
"Buy_PPOE_Plan": "Buy PPOE Plan",
"Package": "Package",
"Order_Internet_Package": "Order Internet Package",
"Unknown_Command_": "Unknown Command.",
"Checking_payment": "Checking payment",
"Create_Transaction_Success": "Create Transaction Success",
"You_have_unpaid_transaction": "You have unpaid transaction",
"TripayPayment_Channel": "TripayPayment Channel",
"Payment_Channel": "Payment Channel",
"Payment_check_failed_": "Payment check failed.",
"Order_Package": "Order Package",
"Transactions": "Transactions",
"Payments": "Payments",
"History": "History",
"Order_History": "Order History",
"Gateway": "Gateway",
"Date_Done": "Date Done",
"Unpaid_Order": "Unpaid Order",
"Payment_Gateway_Not_Found": "Payment Gateway Not Found",
"Payment_Gateway_saved_successfully": "Payment Gateway saved successfully",
"ORDER": "ORDER",
"Package_History": "Package History",
"Buy_History": "Buy History",
"Activation_History": "Activation History",
"Buy_Package": "Buy Package",
"Email": "Email",
"Company_Footer": "Company Footer",
"Will_show_below_user_pages": "Will show below user pages",
"Request_OTP": "Request OTP",
"Verification_Code": "Verification Code",
"SMS_Verification_Code": "SMS Verification Code",
"Please_enter_your_email_address": "Please enter your email address",
"Failed_to_create_Paypal_transaction_": "Failed to create Paypal transaction.",
"Plugin": "Plugin",
"Plugin_Manager": "Plugin Manager",
"User_Notification": "User Notification",
"Expired_Notification": "Expired Notification",
"User_will_get_notification_when_package_expired": "User will get notification when package expired",
"Expired_Notification_Message": "Expired Notification Message",
"Payment_Notification": "Payment Notification",
"User_will_get_invoice_notification_when_buy_package_or_package_refilled": "User will get invoice notification when buy package or package refilled",
"Current_IP": "Current IP",
"Current_MAC": "Current MAC",
"Login_Status": "Login Status",
"Login_Request_successfully": "Login Request successfully",
"Logout_Request_successfully": "Logout Request successfully",
"Disconnect_Internet_": "Disconnect Internet?",
"Not_Online__Login_now_": "Not Online, Login now?",
"You_are_Online__Logout_": "You are Online, Logout?",
"Connect_to_Internet_": "Connect to Internet?",
"Your_account_not_connected_to_internet": "Your account not connected to internet",
"Failed_to_create_transaction__": "Failed to create transaction. ",
"Failed_to_check_status_transaction__": "Failed to check status transaction. ",
"Disable_Voucher": "Disable Voucher",
"Balance": "Balance",
"Balance_System": "Balance System",
"Enable_System": "Enable System",
"Allow_Transfer": "Allow Transfer",
"Telegram_Notification": "Telegram Notification",
"SMS_OTP_Registration": "SMS OTP Registration",
"Whatsapp_Notification": "Whatsapp Notification",
"Tawk_to_Chat_Widget": "Tawk.to Chat Widget",
"Invoice": "Invoice",
"Country_Code_Phone": "Country Code Phone",
"Voucher_activation_menu_will_be_hidden": "Voucher activation menu will be hidden",
"Customer_can_deposit_money_to_buy_voucher": "Customer can deposit money to buy voucher",
"Allow_balance_transfer_between_customers": "Allow balance transfer between customers",
"Reminder_Notification": "Reminder Notification",
"Reminder_Notification_Message": "Reminder Notification Message",
"Reminder_7_days": "Reminder 7 days",
"Reminder_3_days": "Reminder 3 days",
"Reminder_1_day": "Reminder 1 day",
"PPPOE_Password": "PPPOE Password",
"User_Cannot_change_this__only_admin__if_it_Empty_it_will_use_user_password": "User Cannot change this, only admin. if it Empty it will use user password",
"Invoice_Balance_Message": "Invoice Balance Message",
"Invoice_Notification_Payment": "Invoice Notification Payment",
"Balance_Notification_Payment": "Balance Notification Payment",
"Balance_Plans": "Balance Plans",
"Buy_Balance": "Buy Balance",
"Price": "Price",
"Validity": "Validity",
"Disable_auto_renewal_": "Disable auto renewal?",
"Auto_Renewal_On": "Auto Renewal On",
"Enable_auto_renewal_": "Enable auto renewal?",
"Auto_Renewal_Off": "Auto Renewal Off",
"Refill_Balance": "Refill Balance",
"Invoice_Footer": "Invoice Footer",
"Pay_With_Balance": "Pay With Balance",
"Pay_this_with_Balance__your_active_package_will_be_overwrite": "Pay this with Balance? your active package will be overwrite",
"Success_to_buy_package": "Success to buy package",
"Auto_Renewal": "Auto Renewal",
"View": "View",
"Back": "Back",
"Active": "Active",
"Transfer_Balance": "Transfer Balance",
"Send_your_balance_": "Send your balance?",
"Send": "Send",
"Cannot_send_to_yourself": "Cannot send to yourself",
"Sending_balance_success": "Sending balance success",
"From": "From",
"To": "To",
"insufficient_balance": "insufficient balance",
"Send_Balance": "Send Balance",
"Received_Balance": "Received Balance",
"Minimum_Balance_Transfer": "Minimum Balance Transfer",
"Minimum_Transfer": "Minimum Transfer",
"Company_Logo": "Company Logo",
"Expired_IP_Pool": "Expired IP Pool",
"Proxy": "Proxy",
"Proxy_Server": "Proxy Server",
"Proxy_Server_Login": "Proxy Server Login",
"Hotspot_Plan": "Hotspot Plan",
"PPPOE_Plan": "PPPOE Plan",
"UNKNOWN": "UNKNOWN",
"Are_You_Sure_": "Are You Sure?",
"Success_to_send_package": "Success to send package",
"Target_has_active_plan__different_with_current_plant_": "Target has active plan, different with current plant.",
"Recharge_a_friend": "Recharge a friend",
"Buy_for_friend": "Buy for friend",
"Buy_this_for_friend_account_": "Buy this for friend account?",
"Review_package_before_recharge": "Review package before recharge",
"Activate": "Activate",
"Deactivate": "Deactivate",
"Sync": "Sync",
"Failed_to_create_PaymeTrust_transaction_": "Failed to create PaymeTrust transaction.",
"Location": "Location",
"Radius_Plans": "Radius Plans",
"Change_title_in_user_Plan_order": "Change title in user Plan order",
"Logs": "Logs",
"Voucher_Format": "Voucher Format",
"Resend_To_Customer": "Resend To Customer",
"Your_friend_do_not_have_active_package": "Your friend do not have active package",
"Service_Type": "Service Type",
"Others": "Others",
"PPPoE": "PPPoE",
"Hotspot": "Hotspot",
"Disable_Registration": "Disable Registration",
"Customer_just_Login_with_Phone_number_and_Voucher_Code__Voucher_will_be_password": "Customer just Login with Phone number and Voucher Code, Voucher will be password",
"Login___Activate_Voucher": "Login \/ Activate Voucher",
"After_Customer_activate_voucher_or_login__customer_will_be_redirected_to_this_url": "After Customer activate voucher or login, customer will be redirected to this url",
"Voucher_Prefix": "Voucher Prefix",
"Voucher_activation_success__now_you_can_login": "Voucher activation success, now you can login",
"Client_Can_Purchase": "Client Can Purchase",
"Buy_this__your_active_package_will_be_overwritten": "Buy this? your active package will be overwritten",
"Pay_this_with_Balance__your_active_package_will_be_overwritten": "Pay this with Balance? your active package will be overwritten",
"Buy_this__your_active_package_will_be_overwrite": "Buy this? your active package will be overwrite",
"Monthly_Registered_Customers": "Monthly Registered Customers",
"Total_Monthly_Sales": "Total Monthly Sales",
"Active_Users": "Active Users",
"All_Users_Insights": "All Users Insights",
"SuperAdmin": "Super Admin",
"Radius": "Radius",
"Radius_NAS": "Radius NAS",
"Translation": "Translation",
"Translation_saved_Successfully": "Translation saved Successfully",
"Language_Editor": "Language Editor",
"year": "year",
"month": "month",
"week": "week",
"day": "day",
"hour": "hour",
"minute": "minute",
"second": "second",
"Attributes": "Attributes",
"Profile": "Profile",
"Phone": "Phone",
"City": "City",
"Sub_District": "Sub District",
"Ward": "Ward",
"Credentials": "Credentials",
"Agent": "Agent",
"This_Token_will_act_as_SuperAdmin_Admin": "This Token will act as SuperAdmin\/Admin",
"Login": "Login",
"Expired_Action": "Expired Action",
"Expired_Address_List_Name": "Expired Address List Name",
"Address_List": "Address List",
"Optional": "Optional",
"Generated_By": "Generated By",
"Admin": "Admin",
"Password_should_be_minimum_6_characters": "Password should be minimum 6 characters",
"Add_User": "Add User",
"Send_Notification": "Send Notification",
"Code": "Code",
"Send_To_Customer": "Send To Customer",
"Prev": "Prev",
"Voucher_Not_Found": "Voucher Not Found",
"Miscellaneous": "Miscellaneous",
"OTP_Required": "OTP Required",
"Change": "Change",
"Change_Phone_Number": "Change Phone Number",
"Current_Number": "Current Number",
"New_Number": "New Number",
"Input_your_phone_number": "Input your phone number",
"OTP": "OTP",
"Enter_OTP_that_was_sent_to_your_phone": "Enter OTP that was sent to your phone",
"Update": "Update",
"OTP_is_required_when_user_want_to_change_phone_number": "OTP is required when user want to change phone number",
"Rate": "Rate",
"Burst": "Burst",
"Editing_Bandwidth_will_not_automatically_update_the_plan__you_need_to_edit_the_plan_then_save_again": "Editing Bandwidth will not automatically update the plan, you need to edit the plan then save again",
"OTP_Method": "OTP Method",
"SMS": "SMS",
"WhatsApp": "WhatsApp",
"SMS_and_WhatsApp": "SMS and WhatsApp",
"The_method_which_OTP_will_be_sent_to_user": "The method which OTP will be sent to user",
"Report_Viewer": "Report Viewer",
"Super_Administrator": "Super Administrator",
"Send_To": "Send To",
"Resend": "Resend",
"Alert": "Alert",
"success": "success",
"Click_Here": "Click Here",
"danger": "danger"
}

View File

@ -1,429 +0,0 @@
<?php
/*
-----------------------------------
Language Name: English
Contributor: Ismail Marzuqi
2017
Contributor: Ibnu Maksum (@ibnux)
------------------------------------
*/
$_L['Login'] = 'Log-in';
$_L['Register'] = 'Register';
$_L['Announcement'] = 'Announcement';
$_L['Registration_Info'] = 'Registration Info';
$_L['Register_Voucher_Failed'] = 'Voucher not found, please buy voucher befor register';
$_L['Register_Success'] = 'Register Success! You can login now';
$_L['Sign_In_Member'] = 'Log in to Member Panel';
$_L['Register_Member'] = 'Register as Member';
$_L['Sign_In_Admin'] = 'Enter Admin Area';
$_L['Logo'] = 'PHPNuxBill';
$_L['Username'] = 'Username';
$_L['Password'] = 'Password';
$_L['PasswordsNotMatch'] = 'Passwords does not match';
$_L['account_already_exist'] = 'Account already axist';
$_L['Manage'] = 'Manage';
$_L['Submit'] = 'Submit';
$_L['Save'] = 'Save Changes';
$_L['Cancel'] = 'Cancel';
$_L['Edit'] = 'Edit';
$_L['Delete'] = 'Delete';
$_L['Welcome'] = 'Welcome';
$_L['Created_Successfully'] = 'Data Created Successfully';
$_L['Updated_Successfully'] = 'Data Updated Successfully';
$_L['Delete_Successfully'] = 'Data Deleted Successfully';
$_L['Static_Pages'] = "Static Pages";
$_L['Failed_Save_Page'] = "Failed to save page, make sure i can write to folder pages, <i>chmod 664 pages/*.html<i>";
$_L['Success_Save_Page'] = "Saving page success";
$_L['Info_Page'] = "Sometimes you need to refresh 3 times until content change";
$_L['Dashboard'] = 'Dashboard';
$_L['Search_Contact'] = 'Search Customers...';
$_L['My_Account'] = 'My Account';
$_L['My_Profile'] = 'My Profile';
$_L['Settings'] = 'Settings';
$_L['Edit_Profile'] = 'Edit Profile';
$_L['Change_Password'] = 'Change Password';
$_L['Logout'] = 'Logout';
$_L['Services'] = 'Services';
$_L['Bandwidth_Plans'] = 'Bandwidth Plans';
$_L['BW_Name'] = 'Bandwidth Name';
$_L['New_Bandwidth'] = 'New Bandwidth';
$_L['Edit_Bandwidth'] = 'Edit Bandwidth';
$_L['Add_Bandwidth'] = 'Add New Bandwidth';
$_L['Rate_Download'] = 'Rate Download';
$_L['Rate_Upload'] = 'Rate Upload';
$_L['BW_already_exist'] = 'Name Bandwidth Already Exist';
$_L['Hotspot_Plans'] = 'Hotspot Plans';
$_L['PPPOE_Plans'] = 'PPPOE Plans';
$_L['Plan_Name'] = 'Plan Name';
$_L['New_Plan'] = 'New Service Plan';
$_L['Add_Plan'] = 'Add Service Plan';
$_L['Edit_Plan'] = 'Edit Service Plan';
$_L['Plan_already_exist'] = 'Name Plan Already Exist';
$_L['Plan_Type'] = 'Plan Type';
$_L['Plan_Price'] = 'Plan Price';
$_L['Limit_Type'] = 'Limit Type';
$_L['Unlimited'] = 'Unlimited';
$_L['Limited'] = 'Limited';
$_L['Time_Limit'] = 'Time Limit';
$_L['Data_Limit'] = 'Data Limit';
$_L['Both_Limit'] = 'Both Limit';
$_L['Plan_Validity'] = 'Plan Validity';
$_L['Select_BW'] = 'Select Bandwidth';
$_L['Shared_Users'] = 'Shared Users';
$_L['user_type_help'] = 'Choose User Type Sales to disable access to Settings';
$_L['Current_Password'] = 'Current Password';
$_L['New_Password'] = 'New Password';
$_L['Administrator'] = 'Administrator';
$_L['Sales'] = 'Sales';
$_L['Member'] = 'Member';
$_L['Confirm_New_Password'] = 'Confirm New Password';
$_L['Confirm_Password'] = 'Confirm Password';
$_L['Full_Name'] = 'Full Name';
$_L['User_Type'] = 'User Type';
$_L['Address'] = 'Address';
$_L['Created_On'] = 'Created On';
$_L['Expires_On'] = 'Expires On';
$_L['Phone_Number'] = 'Phone Number';
$_L['User_Delete_Ok'] = 'User deleted Successfully';
$_L['Full_Administrator'] = 'Full Administrator';
$_L['password_change_help'] = 'Keep Blank to do not change Password';
$_L['currency_help'] = 'Keep it blank if you do not want to show currency code';
$_L['Theme_Style'] = 'Theme Style';
$_L['Theme_Color'] = 'Theme Color';
$_L['Default_Language'] = 'Default Language';
$_L['Network'] = 'Network';
$_L['Routers'] = 'Routers';
$_L['Pool'] = 'IP Pool';
$_L['New_Router'] = 'New Router';
$_L['Add_Router'] = 'Add Router';
$_L['Edit_Router'] = 'Edit Router';
$_L['Router_Name'] = 'Router Name';
$_L['IP_Address'] = 'IP Address';
$_L['Router_Secret'] = 'Router Secret';
$_L['Description'] = 'Description';
$_L['Router_already_exist'] = 'IP Router Already Exist';
$_L['Pool_Name'] = 'Name Pool';
$_L['Range_IP'] = 'Range IP';
$_L['New_Pool'] = 'New Pool';
$_L['Add_Pool'] = 'Add Pool';
$_L['Edit_Pool'] = 'Edit Pool';
$_L['Pool_already_exist'] = 'Pool Name Already Exist';
$_L['Prepaid'] = 'Prepaid';
$_L['Prepaid_User'] = 'Prepaid Users';
$_L['Prepaid_Vouchers'] = 'Prepaid Vouchers';
$_L['Refill_Account'] = 'Refill Account';
$_L['Recharge_Account'] = 'Recharge Account';
$_L['Select_Account'] = 'Select Account';
$_L['Service_Plan'] = 'Service Plan';
$_L['Recharge'] = 'Recharge';
$_L['Method'] = 'Method';
$_L['account_created_successfully'] = 'Account Created Successfully';
$_L['Database_Status'] = 'Database Status';
$_L['Total_Database_Size'] = 'Total Database Size';
$_L['Download_Database_Backup'] = 'Download Database Backup';
$_L['Table_Name'] = 'Table Name';
$_L['Rows'] = 'Rows';
$_L['Size'] = 'Size';
$_L['Customers'] = 'Customer';
$_L['Add_Contact'] = 'Add New Contact';
$_L['Edit_Contact'] = 'Edit Contact';
$_L['List_Contact'] = 'List Contact';
$_L['Manage_Accounts'] = 'Manage Contact';
$_L['Reports'] = 'Reports';
$_L['Daily_Report'] = 'Daily Reports';
$_L['Period_Reports'] = 'Period Reports';
$_L['All_Transactions'] = 'All Transactions';
$_L['Total_Income'] = 'Total Income';
$_L['All_Transactions_at_Date'] = 'All Transactions at Date';
$_L['Total_Income'] = 'Total Income';
$_L['Export_for_Print'] = 'Export for Print';
$_L['Print'] = 'Print';
$_L['Export_to_PDF'] = 'Export to PDF';
$_L['Click_Here_to_Print'] = 'Click Here to Print';
$_L['You_can_use_html_tag'] = 'You can use html tag';
$_L['Date_Format'] = 'Date Format';
$_L['Income_Today'] = 'Income Today';
$_L['Income_This_Month'] = 'Income This Month';
$_L['Users_Active'] = 'Users Active';
$_L['Total_Users'] = 'Total Users';
$_L['Users'] = 'Users';
$_L['Edit_User'] = 'Edit User';
$_L['Last_Login'] = 'Last Login';
$_L['Administrator_Users'] = 'Administrator Users';
$_L['Manage_Administrator'] = 'Manage Administrator';
$_L['Add_New_Administrator'] = 'Add New Administrator';
$_L['Localisation'] = 'Localisation';
$_L['Backup_Restore'] = 'Backup/Restore';
$_L['General_Settings'] = 'General Settings';
$_L['Date'] = 'Date';
$_L['Login_Successful'] = 'Login Successful';
$_L['Failed_Login'] = 'Failed Login';
$_L['Settings_Saved_Successfully'] = 'Settings Saved Successfully';
$_L['User_Updated_Successfully'] = 'User Updated Successfully';
$_L['User_Expired_Today'] = 'User Expired, Today';
$_L['Activity_Log'] = 'Activity Log';
$_L['View_Reports'] = 'View Reports';
$_L['View_All'] = 'View All';
$_L['Number_of_Vouchers'] = 'Number of Vouchers';
$_L['Length_Code'] = 'Length Code';
$_L['Code_Voucher'] = 'Code Voucher';
$_L['Voucher'] = 'Voucher';
$_L['Voucher_Hotspot'] = 'Hotspot Voucher';
$_L['Status_Voucher'] = 'Status Voucher';
$_L['Add_Voucher'] = 'Add Vouchers';
$_L['Voucher_Successfully'] = 'Create Vouchers Successfully';
$_L['Generate'] = 'Generate';
$_L['Print_Info'] = 'Print side by side, it will easy to cut';
$_L['From_Date'] = 'From Date';
$_L['To_Date'] = 'To Date';
$_L['New_Service'] = 'New Service';
$_L['Type'] = 'Type';
$_L['Finish'] = 'Finish';
$_L['App_Name'] = 'Application Name/ Company Name';
$_L['App_Name_Help_Text'] = 'This Name will be shown on the Title';
$_L['Next'] = 'Next';
$_L['Last'] = 'Last';
$_L['Timezone'] = 'Timezone';
$_L['Decimal_Point'] = 'Decimal Point';
$_L['Thousands_Separator'] = 'Thousands Separator';
$_L['Currency_Code'] = 'Currency Code';
$_L['Order_Voucher'] = 'Order Voucher';
$_L['Voucher_Activation'] = 'Voucher Activation';
$_L['List_Activated_Voucher'] = 'List Activated Voucher';
$_L['Enter_Voucher_Code'] = 'Enter voucher code here';
$_L['Private_Message'] = 'Private Message';
$_L['Inbox'] = 'Inbox';
$_L['Outbox'] = 'Outbox';
$_L['Compose'] = 'Compose';
$_L['Send_to'] = 'Send to';
$_L['Title'] = 'Title';
$_L['Message'] = 'Message';
$_L['Account_Information'] = 'Your Account Information';
$_L['Welcome_Text_User'] = 'Welcome to the Panel Members page, on this page you can:';
$_L['Welcome_Text_Admin'] = '<b>PHPNuxBill</b> is a billing Hotspot and PPPOE for Mikrotik using PHP and Mikrotik API to comunicate with router. If you get more profit with this application, please donate us.<br>Watch project <a href="https://github.com/hotspotbilling/phpnuxbill" target="_blank">in here</a>';
//update
$_L['Invalid_Username_or_Password'] = 'Invalid Username or Password';
$_L['Do_Not_Access'] = 'You do not have permission to access this page';
$_L['Incorrect_Current_Password'] = 'Incorrect Current Password';
$_L['Password_Changed_Successfully'] = 'Password changed successfully, Please login again';
$_L['All_field_is_required'] = 'All field is required';
$_L['Voucher_Not_Valid'] = 'Voucher Not Valid';
$_L['Activation_Vouchers_Successfully'] = 'Activation Vouchers Successfully';
$_L['Data_Not_Found'] = 'Data Not Found';
$_L['Search_by_Username'] = 'Search by Username';
$_L['Search_by_Name'] = 'Search by Name';
$_L['Search_by_Code'] = 'Search by Code Voucher';
$_L['Search'] = 'Search';
$_L['Select_Customer'] = 'Select a customer';
$_L['Select_Routers'] = 'Select Routers';
$_L['Select_Plans'] = 'Select Plans';
$_L['Select_Pool'] = 'Select Pool';
$_L['Hrs'] = 'Hrs';
$_L['Mins'] = 'Mins';
$_L['Days'] = 'Days';
$_L['Months'] = 'Months';
$_L['Add_Language'] = 'Add Language';
$_L['Name_Lang'] = 'Language Name';
$_L['Folder_Lang'] = 'Folder Name';
$_L['Translator'] = 'Translator';
$_L['Lang_already_exist'] = 'Language Name Already Exist';
$_L['Payment_Gateway'] = 'Payment Gateway';
$_L['Community'] = 'Community';
$_L['1_user_can_be_used_for_many_devices'] = '1 user can be used for many devices?';
$_L['Cannot_be_change_after_saved'] = 'Cannot be change after saved';
$_L['Explain_Coverage_of_router'] = 'Explain Coverage of router';
$_L['Name_of_Area_that_router_operated'] = 'Name of Area that router operated';
$_L['Payment_Notification_URL_Recurring_Notification_URL_Pay_Account_Notification_URL'] = 'Payment Notification URL, Recurring Notification URL, Pay Account Notification URL';
$_L['Finish_Redirect_URL_Unfinish_Redirect_URL_Error_Redirect_URL'] = 'Finish Redirect URL, Unfinish Redirect URL, Error Redirect URL';
$_L['Status'] = 'Status';
$_L['Plan_Not_found'] = 'Plan Not found';
$_L['Failed_to_create_transaction'] = 'Failed to create transaction.';
$_L['Seller_has_not_yet_setup_Xendit_payment_gateway'] = 'Seller has not yet setup Xendit payment gateway';
$_L['Admin_has_not_yet_setup_Xendit_payment_gateway_please_tell_admin'] = 'Admin has not yet setup Xendit payment gateway, please tell admin';
$_L['You_already_have_unpaid_transaction_cancel_it_or_pay_it'] = 'You already have unpaid transaction, cancel it or pay it.';
$_L['Transaction_Not_found'] = 'Transaction Not found';
$_L['Cancel_it'] = 'Cancel it?';
$_L['expired'] = 'expired';
$_L['Check_for_Payment'] = 'Check for Payment';
$_L['Transaction_still_unpaid'] = 'Transaction still unpaid.';
$_L['Paid_Date'] = 'Paid Date';
$_L['Transaction_has_been_paid'] = 'Transaction has been paid.';
$_L['PAID'] = 'PAID';
$_L['CANCELED'] = 'CANCELED';
$_L['UNPAID'] = 'UNPAID';
$_L['PAY_NOW'] = 'PAY NOW';
$_L['Buy_Hotspot_Plan'] = 'Buy Hotspot Plan';
$_L['Buy_PPOE_Plan'] = 'Buy PPOE Plan';
$_L['Package'] = 'Package';
$_L['Order_Internet_Package'] = 'Order Internet Package';
$_L['Unknown_Command'] = 'Unknown Command.';
$_L['Checking_payment'] = 'Checking payment';
$_L['Create_Transaction_Success'] = 'Create Transaction Success';
$_L['You_have_unpaid_transaction'] = 'You have unpaid transaction';
$_L['TripayPayment_Channel'] = 'TripayPayment Channel';
$_L['Payment_Channel'] = 'Payment Channel';
$_L['Payment_check_failed'] = 'Payment check failed.';
$_L['Order_Package'] = 'Order Package';
$_L['Transactions'] = 'Transactions';
$_L['Payments'] = 'Payments';
$_L['History'] = 'History';
$_L['Order_History'] = 'Order History';
$_L['Gateway'] = 'Gateway';
$_L['Date_Done'] = 'Date Done';
$_L['Unpaid_Order'] = 'Unpaid Order';
$_L['Payment_Gateway_Not_Found'] = 'Payment Gateway Not Found';
$_L['Payment_Gateway_saved_successfully'] = 'Payment Gateway saved successfully';
$_L['ORDER'] = 'ORDER';
$_L['Package_History'] = 'Package History';
$_L['Buy_History'] = 'Buy History';
$_L['Activation_History'] = 'Activation History';
$_L['Buy_Package'] = 'Buy Package';
$_L['Email'] = 'Email';
$_L['Company_Footer'] = 'Company Footer';
$_L['Will_show_below_user_pages'] = 'Will show below user pages';
$_L['Request_OTP'] = 'Request OTP';
$_L['Verification_Code'] = 'Verification Code';
$_L['SMS_Verification_Code'] = 'SMS Verification Code';
$_L['Please_enter_your_email_address'] = 'Please enter your email address';
$_L['Failed_to_create_Paypal_transaction'] = 'Failed to create Paypal transaction.';
$_L['Plugin'] = 'Plugin';
$_L['Plugin_Manager'] = 'Plugin Manager';
$_L['User_Notification'] = 'User Notification';
$_L['Expired_Notification'] = 'Expired Notification';
$_L['User_will_get_notification_when_package_expired'] = 'User will get notification when package expired';
$_L['Expired_Notification_Message'] = 'Expired Notification Message';
$_L['Payment_Notification'] = 'Payment Notification';
$_L['User_will_get_invoice_notification_when_buy_package_or_package_refilled'] = 'User will get invoice notification when buy package or package refilled';
$_L['Current_IP'] = 'Current IP';
$_L['Current_MAC'] = 'Current MAC';
$_L['Login_Status'] = 'Login Status';
$_L['Login_Request_successfully'] = 'Login Request successfully';
$_L['Logout_Request_successfully'] = 'Logout Request successfully';
$_L['Disconnect_Internet'] = 'Disconnect Internet?';
$_L['Not_Online_Login_now'] = 'Not Online, Login now?';
$_L['You_are_Online_Logout'] = 'You are Online, Logout?';
$_L['Connect_to_Internet'] = 'Connect to Internet?';
$_L['Your_account_not_connected_to_internet'] = 'Your account not connected to internet';
$_L['Failed_to_create_transaction_'] = 'Failed to create transaction. ';
$_L['Failed_to_check_status_transaction_'] = 'Failed to check status transaction. ';
$_L['Disable_Voucher'] = 'Disable Voucher';
$_L['Balance'] = 'Balance';
$_L['Balance_System'] = 'Balance System';
$_L['Enable_System'] = 'Enable System';
$_L['Allow_Transfer'] = 'Allow Transfer';
$_L['Telegram_Notification'] = 'Telegram Notification';
$_L['SMS_OTP_Registration'] = 'SMS OTP Registration';
$_L['Whatsapp_Notification'] = 'Whatsapp Notification';
$_L['Tawkto_Chat_Widget'] = 'Tawk.to Chat Widget';
$_L['Invoice'] = 'Invoice';
$_L['Country_Code_Phone'] = 'Country Code Phone';
$_L['Voucher_activation_menu_will_be_hidden'] = 'Voucher activation menu will be hidden';
$_L['Customer_can_deposit_money_to_buy_voucher'] = 'Customer can deposit money to buy voucher';
$_L['Allow_balance_transfer_between_customers'] = 'Allow balance transfer between customers';
$_L['Reminder_Notification'] = 'Reminder Notification';
$_L['Reminder_Notification_Message'] = 'Reminder Notification Message';
$_L['Reminder_7_days'] = 'Reminder 7 days';
$_L['Reminder_3_days'] = 'Reminder 3 days';
$_L['Reminder_1_day'] = 'Reminder 1 day';
$_L['PPPOE_Password'] = 'PPPOE Password';
$_L['User_Cannot_change_this_only_admin_if_it_Empty_it_will_use_user_password'] = 'User Cannot change this, only admin. if it Empty it will use user password';
$_L['Invoice_Balance_Message'] = 'Invoice Balance Message';
$_L['Invoice_Notification_Payment'] = 'Invoice Notification Payment';
$_L['Balance_Notification_Payment'] = 'Balance Notification Payment';
$_L['Balance_Plans'] = 'Balance Plans';
$_L['Buy_Balance'] = 'Buy Balance';
$_L['Price'] = 'Price';
$_L['Validity'] = 'Validity';
$_L['Disable_auto_renewal'] = 'Disable auto renewal?';
$_L['Auto_Renewal_On'] = 'Auto Renewal On';
$_L['Enable_auto_renewal'] = 'Enable auto renewal?';
$_L['Auto_Renewal_Off'] = 'Auto Renewal Off';
$_L['Refill_Balance'] = 'Refill Balance';
$_L['Invoice_Footer'] = 'Invoice Footer';
$_L['Pay_With_Balance'] = 'Pay With Balance';
$_L['Pay_this_with_Balance_your_active_package_will_be_overwrite'] = 'Pay this with Balance? your active package will be overwrite';
$_L['Success_to_buy_package'] = 'Success to buy package';
$_L['Auto_Renewal'] = 'Auto Renewal';
$_L['View'] = 'View';
$_L['Back'] = 'Back';
$_L['Active'] = 'Active';
$_L['Transfer_Balance'] = 'Transfer Balance';
$_L['Send_your_balance'] = 'Send your balance?';
$_L['Send'] = 'Send';
$_L['Cannot_send_to_yourself'] = 'Cannot send to yourself';
$_L['Sending_balance_success'] = 'Sending balance success';
$_L['From'] = 'From';
$_L['To'] = 'To';
$_L['insufficient_balance'] = 'insufficient balance';
$_L['Send_Balance'] = 'Send Balance';
$_L['Received_Balance'] = 'Received Balance';
$_L['Minimum_Balance_Transfer'] = 'Minimum Balance Transfer';
$_L['Minimum_Transfer'] = 'Minimum Transfer';
$_L['Company_Logo'] = 'Company Logo';
$_L['Expired_IP_Pool'] = 'Expired IP Pool';
$_L['Proxy'] = 'Proxy';
$_L['Proxy_Server'] = 'Proxy Server';
$_L['Proxy_Server_Login'] = 'Proxy Server Login';
$_L['Hotspot_Plan'] = 'Hotspot Plan';
$_L['PPPOE_Plan'] = 'PPPOE Plan';
$_L['UNKNOWN'] = 'UNKNOWN';
$_L['Are_You_Sure'] = 'Are You Sure?';
$_L['Success_to_send_package'] = 'Success to send package';
$_L['Target_has_active_plan_different_with_current_plant'] = 'Target has active plan, different with current plant.';
$_L['Recharge_a_friend'] = 'Recharge a friend';
$_L['Buy_for_friend'] = 'Buy for friend';
$_L['Buy_this_for_friend_account'] = 'Buy this for friend account?';
$_L['Review_package_before_recharge'] = 'Review package before recharge';
$_L['Activate'] = 'Activate';
$_L['Deactivate'] = 'Deactivate';
$_L['Sync'] = 'Sync';
$_L['Failed_to_create_PaymeTrust_transaction'] = 'Failed to create PaymeTrust transaction.';
$_L['Location'] = 'Location';
$_L['Radius_Plans'] = 'Radius Plans';
$_L['Change_title_in_user_Plan_order'] = 'Change title in user Plan order';
$_L['Logs'] = 'Logs';
$_L['Voucher_Format'] = 'Voucher Format';
$_L['Resend_To_Customer'] = 'Resend To Customer';
$_L['Your_friend_do_not_have_active_package'] = 'Your friend do not have active package';
$_L['Service_Type'] = 'Service Type';
$_L['Others'] = 'Others';
$_L['PPPoE'] = 'PPPoE';
$_L['Hotspot'] = 'Hotspot';
$_L['Disable_Registration'] = 'Disable Registration';
$_L['Customer_just_Login_with_Phone_number_and_Voucher_Code_Voucher_will_be_password'] = 'Customer just Login with Phone number and Voucher Code, Voucher will be password';
$_L['Login__Activate_Voucher'] = 'Login / Activate Voucher';
$_L['After_Customer_activate_voucher_or_login_customer_will_be_redirected_to_this_url'] = 'After Customer activate voucher or login, customer will be redirected to this url';
$_L['Voucher_Prefix'] = 'Voucher Prefix';
$_L['Voucher_activation_success_now_you_can_login'] = 'Voucher activation success, now you can login';
$_L['Client_Can_Purchase'] = 'Client Can Purchase';
$_L['Buy_this_your_active_package_will_be_overwritten'] = 'Buy this? your active package will be overwritten';
$_L['Pay_this_with_Balance_your_active_package_will_be_overwritten'] = 'Pay this with Balance? your active package will be overwritten';
$_L['Buy_this_your_active_package_will_be_overwrite'] = 'Buy this? your active package will be overwrite';
$_L['Buy_this_your_active_package_will_be_overwrite'] = 'Buy this? your active package will be overwrite';
$_L['Buy_this_your_active_package_will_be_overwrite'] = 'Buy this? your active package will be overwrite';
$_L['Buy_this_your_active_package_will_be_overwrite'] = 'Buy this? your active package will be overwrite';
$_L['Buy_this_your_active_package_will_be_overwrite'] = 'Buy this? your active package will be overwrite';
$_L['Buy_this_your_active_package_will_be_overwrite'] = 'Buy this? your active package will be overwrite';
$_L['Monthly_Registered_Customers'] = 'Monthly Registered Customers';
$_L['Total_Monthly_Sales'] = 'Total Monthly Sales';
$_L['Active_Users'] = 'Active Users';

View File

@ -1,8 +0,0 @@
<html>
<head>
<title>403 Forbidden</title>
</head>
<body>
<p>Directory access is forbidden.</p>
</body>
</html>

384
system/lan/indonesia.json Normal file
View File

@ -0,0 +1,384 @@
{
"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 sukses",
"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": "Baru Bandwidth",
"Edit_Bandwidth": "Sunting Bandwidth",
"Add_New_Bandwidth": "Tambahkan Bandwidth Baru",
"Rate_Download": "Nilai Unduhan",
"Rate_Upload": "Nilai Unggahan",
"Name_Bandwidth_Already_Exist": "NamanBandwidth 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": "Keduanya Membatasi",
"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": "Kadaluarsa 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": "Rahasia 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",
"Prepaid": "Prabayar",
"Prepaid_Users": "Pengguna Prabayar",
"Prepaid_Vouchers": "Voucher Prabayar",
"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 Tanggal",
"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": "Kode Panjang",
"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 dan 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": "Surel",
"Company_Footer": "Catatan Kaki Perusahaan",
"Will_show_below_user_pages": "Akan ditampilkan di bawah 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 Kedaluarsa",
"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": "Service Type",
"Others": "Lainnya",
"PPPoE": "PPPoE",
"Hotspot": "Hotspot",
"Monthly_Registered_Customers": "Pendaftaran Pelanggan perbulan",
"Total_Monthly_Sales": "Total penjualan Perbulan",
"Active_Users": "Pelanggan Aktif"
}

View File

@ -1,414 +0,0 @@
<?php
/*
-----------------------------------
Language Name: Indonesia
Contributor: Ismail Marzuqi
2017
Contributor: Ibnu Maksum (@ibnux)
------------------------------------
*/
$_L['Login'] = 'Masuk';
$_L['Register'] = 'Daftar';
$_L['Announcement'] = 'Pemberitahuan';
$_L['Registration_Info'] = 'Info Pendaftaran';
$_L['Register_Voucher_Failed'] = 'Voucher tidak ditemukan, silakan beli voucher sebelum mendaftar';
$_L['Register_Success'] = 'Daftar Sukses! Anda dapat masuk sekarang';
$_L['Sign_In_Member'] = 'Masuk ke Panel Anggota';
$_L['Register_Member'] = 'Daftar sebagai Anggota';
$_L['Sign_In_Admin'] = 'Masuk ke Admin Panel';
$_L['Logo'] = 'PHPNuxBill';
$_L['Username'] = 'Nama Pengguna';
$_L['Password'] = 'Kata Sandi';
$_L['PasswordsNotMatch'] = 'Kata Sandi tidak cocok';
$_L['account_already_exist'] = 'Akun telah ada';
$_L['Manage'] = 'Mengelola';
$_L['Submit'] = 'Kirim';
$_L['Save'] = 'Simpan perubahan';
$_L['Cancel'] = 'Batal';
$_L['Edit'] = 'Sunting';
$_L['Delete'] = 'Hapus';
$_L['Welcome'] = 'Selamat Datang';
$_L['Created_Successfully'] = 'Data Berhasil Dibuat';
$_L['Updated_Successfully'] = 'Data Berhasil Diperbarui';
$_L['Delete_Successfully'] = 'Data Berhasil Dihapus';
$_L['Static_Pages'] = "Halaman Statis";
$_L['Failed_Save_Page'] = "Gagal menyimpan halaman, pastikan diperbolehkan menulis file di folder pages, <i>chmod 664 pages/*.html<i>";
$_L['Success_Save_Page'] = "Menyimpan halaman sukses";
$_L['Info_Page'] = "Terkadang Anda perlu menyegarkan 3 kali hingga konten berubah";
$_L['Dashboard'] = 'Dasbor';
$_L['Search_Contact'] = 'Cari Member...';
$_L['My_Account'] = 'Akun Saya';
$_L['My_Profile'] = 'Profil Saya';
$_L['Settings'] = 'Pengaturan';
$_L['Edit_Profile'] = 'Sunting profil';
$_L['Change_Password'] = 'Ganti kata sandi';
$_L['Logout'] = 'Keluar';
$_L['Services'] = 'Layanan';
$_L['Bandwidth_Plans'] = 'Paket Bandwidth';
$_L['BW_Name'] = 'Nama Bandwidth';
$_L['New_Bandwidth'] = 'Baru Bandwidth';
$_L['Edit_Bandwidth'] = 'Sunting Bandwidth';
$_L['Add_Bandwidth'] = 'Tambahkan Bandwidth Baru';
$_L['Rate_Download'] = 'Nilai Unduhan';
$_L['Rate_Upload'] = 'Nilai Unggahan';
$_L['BW_already_exist'] = 'NamanBandwidth Sudah Ada';
$_L['Hotspot_Plans'] = 'Paket Hotspot';
$_L['PPPOE_Plans'] = 'Paket PPPoE';
$_L['Plan_Name'] = 'Nama Paket';
$_L['New_Plan'] = 'Paket Layanan Baru';
$_L['Add_Plan'] = 'Tambah Paket Layanan';
$_L['Edit_Plan'] = 'Sunting Paket Layanan';
$_L['Plan_already_exist'] = 'Nama Paket Sudah Ada';
$_L['Plan_Type'] = 'Jenis Paket';
$_L['Plan_Price'] = 'Harga Paket';
$_L['Limit_Type'] = 'Tipe Batas';
$_L['Unlimited'] = 'Tak terbatas';
$_L['Limited'] = 'Terbatas';
$_L['Time_Limit'] = 'Batas waktu';
$_L['Data_Limit'] = 'Batas Data';
$_L['Both_Limit'] = 'Keduanya Membatasi';
$_L['Plan_Validity'] = 'Waktu Paket';
$_L['Select_BW'] = 'Pilih Bandwidth';
$_L['Shared_Users'] = 'Berbagi Pelanggan';
$_L['user_type_help'] = 'Pilih Sales untuk menonaktifkan akses ke Pengaturan';
$_L['Current_Password'] = 'Kata sandi saat ini';
$_L['New_Password'] = 'Kata sandi baru';
$_L['Administrator'] = 'Administrator';
$_L['Sales'] = 'Sales';
$_L['Member'] = 'Anggota';
$_L['Confirm_New_Password'] = 'Konfirmasi sandi baru';
$_L['Confirm_Password'] = 'konfirmasi sandi';
$_L['Full_Name'] = 'Nama Lengkap';
$_L['User_Type'] = 'Tipe Pelanggan';
$_L['Address'] = 'Alamat';
$_L['Created_On'] = 'Dibuat pada';
$_L['Expires_On'] = 'Kadaluarsa pada';
$_L['Phone_Number'] = 'Nomor telepon';
$_L['User_Delete_Ok'] = 'Pelanggan berhasil dihapus';
$_L['Full_Administrator'] = 'Administrator Penuh';
$_L['password_change_help'] = 'Biarkan Kosong apabila tidak ingin mengubah Kata Sandi';
$_L['currency_help'] = 'Kosongkan jika Anda tidak ingin menampilkan kode mata uang';
$_L['Theme_Style'] = 'Gaya Tema';
$_L['Theme_Color'] = 'Warna Tema';
$_L['Default_Language'] = 'Bahasa Bawaan';
$_L['Network'] = 'Jaringan';
$_L['Routers'] = 'Router';
$_L['Pool'] = 'IP Pool';
$_L['New_Router'] = 'Router baru';
$_L['Add_Router'] = 'Tambahkan Router';
$_L['Edit_Router'] = 'Sunting Router';
$_L['Router_Name'] = 'Nama Router';
$_L['IP_Address'] = 'Alamat IP';
$_L['Router_Secret'] = 'Rahasia Router';
$_L['Description'] = 'Deskrispi';
$_L['Router_already_exist'] = 'IP Router Sudah Ada';
$_L['Pool_Name'] = 'Nama Pool';
$_L['Range_IP'] = 'Rentang IP';
$_L['New_Pool'] = 'Pool baru';
$_L['Add_Pool'] = 'Tambahkan Pool';
$_L['Edit_Pool'] = 'Sunting Pool';
$_L['Pool_already_exist'] = 'Nama Pool Sudah Ada';
$_L['Prepaid'] = 'Prabayar';
$_L['Prepaid_User'] = 'Pengguna Prabayar';
$_L['Prepaid_Vouchers'] = 'Voucher Prabayar';
$_L['Refill_Account'] = 'Isi Ulang Akun';
$_L['Recharge_Account'] = 'Isi Ulang Akun';
$_L['Select_Account'] = 'Pilih Akun';
$_L['Service_Plan'] = 'Paket Layanan';
$_L['Recharge'] = 'Isi Ulang';
$_L['Method'] = 'Metode';
$_L['account_created_successfully'] = 'Akun Berhasil Dibuat';
$_L['Database_Status'] = 'Status Database';
$_L['Total_Database_Size'] = 'Ukuran Total Database';
$_L['Download_Database_Backup'] = 'Unduh Cadangan Database';
$_L['Table_Name'] = 'Nama Tabel';
$_L['Rows'] = 'Baris';
$_L['Size'] = 'Ukuran';
$_L['Customers'] = 'Pelanggan';
$_L['Add_Contact'] = 'Tambahkan Kontak Baru';
$_L['Edit_Contact'] = 'Sunting Kontak';
$_L['List_Contact'] = 'Daftar Kontak';
$_L['Manage_Accounts'] = 'Kelola Kontak';
$_L['Reports'] = 'Laporan';
$_L['Daily_Report'] = 'Laporan Harian';
$_L['Period_Reports'] = 'Laporan Periode';
$_L['All_Transactions'] = 'Semua Transaksi';
$_L['Total_Income'] = 'Jumlah Pemasukan';
$_L['All_Transactions_at_Date'] = 'Semua Transaksi pada Tanggal';
$_L['Total_Income'] = 'Jumlah Pemasukan';
$_L['Export_for_Print'] = 'Ekspor untuk Cetak';
$_L['Print'] = 'Cetak';
$_L['Export_to_PDF'] = 'Ekspor ke PDF';
$_L['Click_Here_to_Print'] = 'Klik Disini untuk Mencetak';
$_L['You_can_use_html_tag'] = 'Anda dapat menggunakan tag html';
$_L['Date_Format'] = 'Format tanggal';
$_L['Income_Today'] = 'Pendapatan Hari Ini';
$_L['Income_This_Month'] = 'Penghasilan Bulan Ini';
$_L['Users_Active'] = 'Pelanggan Aktif';
$_L['Total_Users'] = 'Total Pelanggan';
$_L['Users'] = 'Pelanggan';
$_L['Edit_User'] = 'Sunting Pelanggan';
$_L['Last_Login'] = 'Terakhir Masuk';
$_L['Administrator_Users'] = 'Pengguna Administrator';
$_L['Manage_Administrator'] = 'Kelola Administrator';
$_L['Add_New_Administrator'] = 'Tambahkan Administrator Baru';
$_L['Localisation'] = 'Lokalisasi';
$_L['Backup_Restore'] = 'Cadangkan/Pulihkan';
$_L['General_Settings'] = 'Pengaturan Umum';
$_L['Date'] = 'Tanggal';
$_L['Login_Successful'] = 'Berhasil Masuk';
$_L['Failed_Login'] = 'Gagal Masuk';
$_L['Settings_Saved_Successfully'] = 'Pengaturan Berhasil Disimpan';
$_L['User_Updated_Successfully'] = 'Pengguna Berhasil Diperbarui';
$_L['User_Expired_Today'] = 'Pengguna Kedaluwarsa, Hari Ini';
$_L['Activity_Log'] = 'Log aktivitas';
$_L['View_Reports'] = 'Lihat Laporan';
$_L['View_All'] = 'Lihat semua';
$_L['Number_of_Vouchers'] = 'Jumlah Voucher';
$_L['Length_Code'] = 'Kode Panjang';
$_L['Code_Voucher'] = 'Kode Voucher';
$_L['Voucher'] = 'Voucher';
$_L['Voucher_Hotspot'] = 'Voucher Hotspot';
$_L['Status_Voucher'] = 'Voucher Status';
$_L['Add_Voucher'] = 'Tambah Voucher';
$_L['Voucher_Successfully'] = 'Buat Voucher Berhasil';
$_L['Generate'] = 'Menghasilkan';
$_L['Print_Info'] = 'Info Cetak';
$_L['From_Date'] = 'Dari tanggal';
$_L['To_Date'] = 'Hingga saat ini';
$_L['New_Service'] = 'Layanan Baru';
$_L['Type'] = 'Jenis';
$_L['Finish'] = 'Menyelesaikan';
$_L['App_Name'] = 'Nama Aplikasi/ Nama Perusahaan';
$_L['App_Name_Help_Text'] = 'Nama ini akan ditampilkan pada Judul';
$_L['Next'] = 'Berikutnya';
$_L['Last'] = 'Terakhir';
$_L['Timezone'] = 'Zona waktu';
$_L['Decimal_Point'] = 'Titik Desimal';
$_L['Thousands_Separator'] = 'Pemisah Ribuan';
$_L['Currency_Code'] = 'Kode mata uang';
$_L['Order_Voucher'] = 'Pesan Voucher';
$_L['Voucher_Activation'] = 'Aktivasi Voucher';
$_L['List_Activated_Voucher'] = 'Daftar Voucher yang Diaktifkan';
$_L['Enter_Voucher_Code'] = 'Masukkan kode voucher di sini';
$_L['Private_Message'] = 'Pesan Pribadi';
$_L['Inbox'] = 'Kotak Masuk';
$_L['Outbox'] = 'Kotak Keluar';
$_L['Compose'] = 'Menyusun';
$_L['Send_to'] = 'Kirim ke';
$_L['Title'] = 'Judul';
$_L['Message'] = 'Pesan';
$_L['Account_Information'] = 'Informasi Akun Anda';
$_L['Welcome_Text_User'] = 'Selamat datang di halaman Anggota Panel, di halaman ini Anda dapat:';
$_L['Welcome_Text_Admin'] = '<b>PHPNuxBill</b> adalah penagihan Hotspot dan PPPoE untuk Mikrotik menggunakan PHP dan Mikrotik API untuk berkomunikasi dengan router. Jika Anda mendapat lebih banyak keuntungan dengan aplikasi ini, silakan berdonasi kepada kami.<br>Tonton proyek <a href="https://github.com/hotspotbilling/phpnuxbill" target="_blank">Disini</a>';
//update
$_L['Invalid_Username_or_Password'] = 'Nama pengguna dan kata sandi salah';
$_L['Do_Not_Access'] = 'Anda tidak memiliki izin untuk mengakses halaman ini';
$_L['Incorrect_Current_Password'] = 'Kata Sandi Saat Ini Salah';
$_L['Password_Changed_Successfully'] = 'Kata sandi berhasil diubah, Silakan login kembali';
$_L['All_field_is_required'] = 'Semua bidang wajib diisi';
$_L['Voucher_Not_Valid'] = 'Voucher Tidak Berlaku';
$_L['Activation_Vouchers_Successfully'] = 'Aktivasi Voucher Berhasil';
$_L['Data_Not_Found'] = 'Data Tidak Ditemukan';
$_L['Search_by_Username'] = 'Cari berdasarkan Nama Pengguna';
$_L['Search_by_Name'] = 'Cari berdasarkan Nama';
$_L['Search_by_Code'] = 'Cari berdasarkan Kode Voucher';
$_L['Search'] = 'Mencari';
$_L['Select_Customer'] = 'Pilih pelanggan';
$_L['Select_Routers'] = 'Pilih Router';
$_L['Select_Plans'] = 'Pilih Paket';
$_L['Select_Pool'] = 'Pilih Pool';
$_L['Hrs'] = 'Jam';
$_L['Mins'] = 'Menit';
$_L['Days'] = 'Hari';
$_L['Months'] = 'Bulan';
$_L['Add_Language'] = 'Tambahkan Bahasa';
$_L['Name_Lang'] = 'Nama Bahasa';
$_L['Folder_Lang'] = 'Nama Folder';
$_L['Translator'] = 'Penerjemah';
$_L['Lang_already_exist'] = 'Nama Bahasa Sudah Ada';
$_L['Payment_Gateway'] = 'Gerbang Pembayaran';
$_L['Community'] = 'Komunitas';
$_L['1_user_can_be_used_for_many_devices'] = '1 pengguna bisa digunakan untuk banyak perangkat?';
$_L['Cannot_be_change_after_saved'] = 'Tidak dapat diubah setelah disimpan';
$_L['Explain_Coverage_of_router'] = 'Jelaskan Cakupan router';
$_L['Name_of_Area_that_router_operated'] = 'Nama area tempat router dioperasikan';
$_L['Payment_Notification_URL_Recurring_Notification_URL_Pay_Account_Notification_URL'] = 'URL Notifikasi Pembayaran, URL Notifikasi Berulang, URL Notifikasi Akun Bayar';
$_L['Finish_Redirect_URL_Unfinish_Redirect_URL_Error_Redirect_URL'] = 'Selesaikan URL Pengalihan, Selesaikan URL Pengalihan, URL Pengalihan Kesalahan';
$_L['Status'] = 'Status';
$_L['Plan_Not_found'] = 'Paket Tidak ditemukan';
$_L['Failed_to_create_transaction'] = 'Gagal membuat transaksi.';
$_L['Seller_has_not_yet_setup_Xendit_payment_gateway'] = 'Penjual belum menyiapkan gateway pembayaran Xendit';
$_L['Admin_has_not_yet_setup_Xendit_payment_gateway_please_tell_admin'] = 'Admin belum menyiapkan gerbang pembayaran Xendit, mohon beritahu admin';
$_L['Buy_this_your_active_package_will_be_overwrite'] = 'Beli ini? Paket aktif Anda akan ditimpa';
$_L['You_already_have_unpaid_transaction_cancel_it_or_pay_it'] = 'Anda sudah memiliki transaksi yang belum dibayar, batalkan atau bayar.';
$_L['Transaction_Not_found'] = 'Transaksi Tidak ditemukan';
$_L['Cancel_it'] = 'Batalkan itu?';
$_L['expired'] = 'kedaluwarsa';
$_L['Check_for_Payment'] = 'Periksa Pembayaran';
$_L['Transaction_still_unpaid'] = 'Transaksi masih belum dibayar.';
$_L['Paid_Date'] = 'Tanggal Pembayaran';
$_L['Transaction_has_been_paid'] = 'Transaksi telah dibayar.';
$_L['PAID'] = 'DIBAYAR';
$_L['CANCELED'] = 'DIBATALKAN';
$_L['UNPAID'] = 'BELUM DIBAYAR';
$_L['PAY_NOW'] = 'BAYAR SEKARANG';
$_L['Buy_Hotspot_Plan'] = 'Beli Paket Hotspot';
$_L['Buy_PPOE_Plan'] = 'Beli Paket PPPoE';
$_L['Package'] = 'Paket';
$_L['Order_Internet_Package'] = 'Pesan Paket Internet';
$_L['Unknown_Command'] = 'Perintah Tidak Diketahui.';
$_L['Checking_payment'] = 'Memeriksa pembayaran';
$_L['Create_Transaction_Success'] = 'Transaksi Berhasil Dibuat';
$_L['You_have_unpaid_transaction'] = 'Anda memiliki transaksi yang belum dibayar';
$_L['TripayPayment_Channel'] = 'Saluran Pembayaran Tripay';
$_L['Payment_Channel'] = 'Saluran Pembayaran';
$_L['Payment_check_failed'] = 'Pemeriksaan pembayaran gagal.';
$_L['Order_Package'] = 'Pesan Paket';
$_L['Transactions'] = 'Transaksi';
$_L['Payments'] = 'Pembayaran';
$_L['History'] = 'Riwayat';
$_L['Order_History'] = 'Riwayat Pesanan';
$_L['Gateway'] = 'Gerbang';
$_L['Date_Done'] = 'Tanggal Selesai';
$_L['Unpaid_Order'] = 'Pesanan Belum Dibayar';
$_L['Payment_Gateway_Not_Found'] = 'Gerbang Pembayaran Tidak Ditemukan';
$_L['Payment_Gateway_saved_successfully'] = 'Gerbang Pembayaran berhasil disimpan';
$_L['ORDER'] = 'MEMESAN';
$_L['Package_History'] = 'Riwayat Paket';
$_L['Buy_History'] = 'Riwayat Beli';
$_L['Activation_History'] = 'Riwayat Aktivasi';
$_L['Buy_Package'] = 'Beli Paket';
$_L['Email'] = 'Surel';
$_L['Company_Footer'] = 'Catatan Kaki Perusahaan';
$_L['Will_show_below_user_pages'] = 'Akan ditampilkan di bawah halaman pengguna';
$_L['Request_OTP'] = 'Minta OTP';
$_L['Verification_Code'] = 'Kode Verifikasi';
$_L['SMS_Verification_Code'] = 'Kode Verifikasi SMS';
$_L['Please_enter_your_email_address'] = 'Silakan masukkan alamat email Anda';
$_L['Failed_to_create_Paypal_transaction'] = 'Gagal membuat transaksi Paypal.';
$_L['Plugin'] = 'Plugin';
$_L['Plugin_Manager'] = 'Manajer Plugin';
$_L['User_Notification'] = 'Pemberitahuan Pelanggan';
$_L['Expired_Notification'] = 'Pemberitahuan Kedaluarsa';
$_L['User_will_get_notification_when_package_expired'] = 'Pengguna akan mendapat notifikasi ketika paket sudah habis masa berlakunya';
$_L['Expired_Notification_Message'] = 'Pesan Pemberitahuan Kedaluwarsa';
$_L['bnameb_will_be_replaced_with_Customer_Name_bpackageb_will_be_replaced_with_Package_name'] = '<b>[[name]]</b> akan diganti dengan Nama pelanggan. <b>[[package]]</b> akan diganti dengan nama paket.';
$_L['Payment_Notification'] = 'Notifikasi Pembayaran';
$_L['User_will_get_invoice_notification_when_buy_package_or_package_refilled'] = 'Pengguna akan mendapatkan notifikasi invoice saat membeli paket atau isi ulang paket';
$_L['Current_IP'] = 'IP saat ini';
$_L['Current_MAC'] = 'MAC saat ini';
$_L['Login_Status'] = 'Status Masuk';
$_L['Login_Request_successfully'] = 'Permintaan Masuk berhasil';
$_L['Logout_Request_successfully'] = 'Permintaan Keluar berhasil';
$_L['Disconnect_Internet'] = 'Putuskan sambungan Internet?';
$_L['Not_Online_Login_now'] = 'Tidak , Masuk sekarang?';
$_L['You_are_Online_Logout'] = 'Kamu sedang aktif, ingin keluar?';
$_L['Connect_to_Internet'] = 'Hubungkan ke Internet?';
$_L['Your_account_not_connected_to_internet'] = 'Akun Anda tidak terhubung ke internet';
$_L['Failed_to_create_transaction_'] = 'Gagal membuat transaksi. ';
$_L['Failed_to_check_status_transaction_'] = 'Gagal memeriksa status transaksi. ';
$_L['Disable_Voucher'] = 'Nonaktifkan Voucher';
$_L['Balance'] = 'Saldo';
$_L['Balance_System'] = 'Saldo Sistem';
$_L['Enable_System'] = 'Aktifkan Sistem';
$_L['Allow_Transfer'] = 'Izinkan Transfer';
$_L['Telegram_Notification'] = 'Pemberitahuan Telegram';
$_L['SMS_OTP_Registration'] = 'Pendaftaran SMS OTP';
$_L['Whatsapp_Notification'] = 'Pemberitahuan WhatsApp';
$_L['Tawkto_Chat_Widget'] = 'Widget Obrolan Tawk.to';
$_L['Invoice'] = 'Faktur';
$_L['Country_Code_Phone'] = 'Kode Negara Telepon';
$_L['Voucher_activation_menu_will_be_hidden'] = 'Menu aktivasi voucher akan disembunyikan';
$_L['Customer_can_deposit_money_to_buy_voucher'] = 'Pelanggan dapat menyetor uang untuk membeli voucher';
$_L['Allow_balance_transfer_between_customers'] = 'Izinkan transfer saldo antar pelanggan';
$_L['Reminder_Notification'] = 'Pemberitahuan Pengingat';
$_L['Reminder_Notification_Message'] = 'Pesan Pemberitahuan Pengingat';
$_L['Reminder_7_days'] = 'Pengingat 7 hari';
$_L['Reminder_3_days'] = 'Pengingat 3 hari';
$_L['Reminder_1_day'] = 'Pengingat 1 hari';
$_L['PPPOE_Password'] = 'Kata sandi PPPoE';
$_L['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';
$_L['Invoice_Balance_Message'] = 'Faktur Pesan Saldo';
$_L['Invoice_Notification_Payment'] = 'Faktur Pemberitahuan Pembayaran';
$_L['Balance_Notification_Payment'] = 'Saldo Pemberitahuan Pembayaran';
$_L['Balance_Plans'] = 'Paket Saldo';
$_L['Buy_Balance'] = 'Beli Saldo';
$_L['Price'] = 'Harga';
$_L['Validity'] = 'Waktu';
$_L['Disable_auto_renewal'] = 'Nonaktifkan perpanjangan otomatis?';
$_L['Auto_Renewal_On'] = 'Perpanjangan Otomatis Aktif';
$_L['Enable_auto_renewal'] = 'Aktifkan perpanjangan otomatis?';
$_L['Auto_Renewal_Off'] = 'Perpanjangan Otomatis Mati';
$_L['Refill_Balance'] = 'Isi Ulang Saldo';
$_L['Invoice_Footer'] = 'Catatan Kaki Faktur';
$_L['Pay_With_Balance'] = 'Bayar dengan Saldo';
$_L['Pay_this_with_Balance_your_active_package_will_be_overwrite'] = 'Bayar ini dengan Saldo? Paket aktif Anda akan ditimpa';
$_L['Success_to_buy_package'] = 'Berhasil membeli paket';
$_L['Auto_Renewal'] = 'Perpanjangan otomatis';
$_L['View'] = 'Melihat';
$_L['Back'] = 'Kembali';
$_L['Active'] = 'Aktif';
$_L['Transfer_Balance'] = 'Kirim Saldo';
$_L['Send_your_balance'] = 'Kirim saldo Anda?';
$_L['Send'] = 'Kirim';
$_L['Cannot_send_to_yourself'] = 'Tidak dapat mengirim ke diri Anda sendiri';
$_L['Sending_balance_success'] = 'Berhasil mengirim saldo';
$_L['From'] = 'Dari';
$_L['To'] = 'Ke';
$_L['insufficient_balance'] = 'Saldo tidak mencukupi';
$_L['Send_Balance'] = 'Kirim Saldo';
$_L['Received_Balance'] = 'Saldo yang Diterima';
$_L['Minimum_Balance_Transfer'] = 'Minimal Transfer Saldo';
$_L['Minimum_Transfer'] = 'Minimal Transfer';
$_L['Company_Logo'] = 'Logo Perusahaan';
$_L['Expired_IP_Pool'] = 'IP Pool Kedaluwarsa';
$_L['Proxy'] = 'Proksi';
$_L['Proxy_Server'] = 'Server Proksi';
$_L['Proxy_Server_Login'] = 'Masuk Server Proksi';
$_L['Hotspot_Plan'] = 'Paket Hotspot';
$_L['PPPOE_Plan'] = 'Paket PPPoE';
$_L['UNKNOWN'] = 'TIDAK DIKENAL';
$_L['Are_You_Sure'] = 'Apa kamu yakin?';
$_L['Success_to_send_package'] = 'Berhasil mengirim paket';
$_L['Target_has_active_plan_different_with_current_plant'] = 'Target mempunyai paket aktif, berbeda dengan paket saat ini.';
$_L['Recharge_a_friend'] = 'Isi ulang teman';
$_L['Buy_for_friend'] = 'Beli untuk teman';
$_L['Buy_this_for_friend_account'] = 'Beli ini untuk akun teman?';
$_L['Review_package_before_recharge'] = 'Tinjau paket sebelum mengisi ulang';
$_L['Activate'] = 'Mengaktifkan Paket';
$_L['Deactivate'] = 'Menonaktifkan Paket';
$_L['Sync'] = 'Sinkronisasi';
$_L['Failed_to_create_PaymeTrust_transaction'] = 'Gagal membuat transaksi PaymeTrust.';
$_L['Location'] = 'Lokasi';
$_L['Radius_Plans'] = 'Paket Radius';
$_L['Change_title_in_user_Plan_order'] = 'Ubah judul dalam urutan paket pelanggan';
$_L['Logs'] = 'Log';
$_L['Voucher_Format'] = 'Format Voucher';
$_L['Resend_To_Customer'] = 'Kirim Ulang Ke Pelanggan';
$_L['Service_Type'] = 'Service Type';
$_L['Others'] = 'Lainnya';
$_L['PPPoE'] = 'PPPoE';
$_L['Hotspot'] = 'Hotspot';
$_L['Monthly_Registered_Customers'] = 'Pendaftaran Pelanggan perbulan';
$_L['Total_Monthly_Sales'] = 'Total penjualan Perbulan';
$_L['Active_Users'] = 'Pelanggan Aktif';

View File

@ -1,8 +0,0 @@
<html>
<head>
<title>403 Forbidden</title>
</head>
<body>
<p>Directory access is forbidden.</p>
</body>
</html>

380
system/lan/spanish.json Normal file
View File

@ -0,0 +1,380 @@
{
"Log_in": "Entrar",
"Register": "Registro",
"Announcement": "Anuncio",
"Registration_Info": "Informaci\u00f3n de registro",
"Voucher_not_found__please_buy_voucher_befor_register": "Cup\u00f3n no encontrado, compre el cup\u00f3n antes de registrarse",
"Register_Success__You_can_login_now": "\u00a1Registro exitoso! Puedes iniciar sesi\u00f3n ahora",
"Log_in_to_Member_Panel": "Log in to Member Panel",
"Register_as_Member": "Reg\u00edstrese como miembro",
"Enter_Admin_Area": "Panel de administraci\u00f3n",
"PHPNuxBill": "DIGITAL-RED",
"Username": "Usuario",
"Password": "Contrase\u00f1a",
"Passwords_does_not_match": "Las contrase\u00f1as no coinciden",
"Account_already_axist": "La cuenta ya existe",
"Manage": "Administrar",
"Submit": "Enviar",
"Save_Changes": "Guardar cambios",
"Cancel": "Cancelar",
"Edit": "Editar",
"Delete": "Eliminar",
"Welcome": "Bienvenido",
"Data_Created_Successfully": "Datos creados con \u00e9xito",
"Data_Updated_Successfully": "Datos actualizados con \u00e9xito",
"Data_Deleted_Successfully": "Datos eliminados con \u00e9xito",
"Static_Pages": "P\u00e1ginas est\u00e1ticas",
"Failed_to_save_page__make_sure_i_can_write_to_folder_pages___i_chmod_664_pages___html_i_": "No se pudo guardar la p\u00e1gina, aseg\u00farese de que pueda escribir en las p\u00e1ginas de la carpeta, <i>chmod 664 pages\/*.html<i>",
"Saving_page_success": "Guardando el \u00e9xito de la p\u00e1gina",
"Sometimes_you_need_to_refresh_3_times_until_content_change": "A veces es necesario actualizar 3 veces hasta que cambie el contenido",
"Dashboard": "Dashboard",
"Search_Customers___": "Buscar clientes...",
"My_Account": "Mi cuenta",
"My_Profile": "Mi perfil",
"Settings": "Ajustes",
"Edit_Profile": "Editar perfil",
"Change_Password": "Cambia la contrase\u00f1a",
"Logout": "Cerrar sesi\u00f3n",
"Services": "Servicios",
"Bandwidth_Plans": "Planes de velocidad",
"Bandwidth_Name": "Nombre de ancho de banda",
"New_Bandwidth": "Nuevo ancho de banda",
"Edit_Bandwidth": "Editar ancho de banda",
"Add_New_Bandwidth": "Agregar nuevo ancho de banda",
"Rate_Download": "Tarifa Descarga",
"Rate_Upload": "Tasa de subida",
"Name_Bandwidth_Already_Exist": "El ancho de banda del nombre ya existe",
"Hotspot_Plans": "Planes de Hotspot",
"PPPOE_Plans": "Planes PPPOE",
"Plan_Name": "Nombre",
"New_Service_Plan": "Nuevo plan de servicio",
"Add_Service_Plan": "Agregar plan de servicio",
"Edit_Service_Plan": "Editar plan de servicio",
"Name_Plan_Already_Exist": "Nombre El plan ya existe",
"Plan_Type": "Tipo de plan",
"Plan_Price": "Precio del plan",
"Limit_Type": "Tipo de l\u00edmite",
"Unlimited": "Ilimitado",
"Limited": "Limitado",
"Time_Limit": "L\u00edmite de tiempo",
"Data_Limit": "L\u00edmite de datos",
"Both_Limit": "Ambos L\u00edmite",
"Plan_Validity": "Validez del Plan",
"Select_Bandwidth": "Seleccionar ancho de banda",
"Shared_Users": "Usuarios compartidos",
"Choose_User_Type_Sales_to_disable_access_to_Settings": "Elija Ventas de tipo de usuario para deshabilitar el acceso a la Configuraci\u00f3n",
"Current_Password": "Contrase\u00f1a actual",
"New_Password": "Nueva contrase\u00f1a",
"Administrator": "Administrador",
"Sales": "Ventas",
"Member": "Usuario",
"Confirm_New_Password": "Confirmar nueva contrase\u00f1a",
"Confirm_Password": "Confirmar contrase\u00f1a",
"Full_Name": "Nombre completo",
"User_Type": "Tipo de usuario",
"Address": "Direcci\u00f3n",
"Created_On": "Creado en",
"Expires_On": "Expira el",
"Phone_Number": "N\u00famero de tel\u00e9fono",
"User_deleted_Successfully": "Usuario eliminado con \u00e9xito",
"Full_Administrator": "Administrador completo",
"Keep_Blank_to_do_not_change_Password": "Mantener en blanco para no cambiar la contrase\u00f1a",
"Keep_it_blank_if_you_do_not_want_to_show_currency_code": "Mant\u00e9ngalo en blanco si no desea mostrar el c\u00f3digo de moneda",
"Theme_Style": "Estilo de tema",
"Theme_Color": "Color del tema",
"Default_Language": "Idioma predeterminado",
"Network": "Red",
"Routers": "Routers",
"IP_Pool": "IP Pool",
"New_Router": "Nuevo Router",
"Add_Router": "Agregar Router",
"Edit_Router": "Editar Router",
"Router_Name": "Nombre del Router",
"IP_Address": "Direccion IP",
"Router_Secret": "Contrase\u00f1a Router",
"Description": "Descripcion",
"IP_Router_Already_Exist": "El enrutador IP ya existe",
"Name_Pool": "Nombre del Pool",
"Range_IP": "Rango de IP",
"New_Pool": "Nuevo Pool",
"Add_Pool": "Agregar Pool",
"Edit_Pool": "Editar Pool",
"Pool_Name_Already_Exist": "Nombre del Pool ya existe",
"Prepaid": "Prepago",
"Prepaid_Users": "Usuarios prepago",
"Prepaid_Vouchers": "Fichas prepago",
"Refill_Account": "Recargar Ficha",
"Recharge_Account": "Recargar Cuenta",
"Select_Account": "Seleccionar cuenta",
"Service_Plan": "Plan de servicio",
"Recharge": "Recargar",
"Method": "M\u00e9todo",
"Account_Created_Successfully": "Cuenta creada con \u00e9xito",
"Database_Status": "Estado de la base de datos",
"Total_Database_Size": "Tama\u00f1o total de la base de datos",
"Download_Database_Backup": "Descargar copia de seguridad de la base de datos",
"Table_Name": "Nombre de la tabla",
"Rows": "Filas",
"Size": "Tama\u00f1o",
"Customer": "Clientes",
"Add_New_Contact": "A\u00f1adir nuevo contacto",
"Edit_Contact": "Editar contacto",
"List_Contact": "Lista de contactos",
"Manage_Contact": "Administrar contacto",
"Reports": "Reportes",
"Daily_Reports": "Reportes diarios",
"Period_Reports": "Informes del per\u00edodo",
"All_Transactions": "Todas las transacciones",
"Total_Income": "Ingresos totales",
"All_Transactions_at_Date": "Todas las transacciones en la fecha",
"Export_for_Print": "Exportar para imprimir",
"Print": "Impresi\u00f3n",
"Export_to_PDF": "Exportar a PDF",
"Click_Here_to_Print": "Haga clic aqu\u00ed para imprimir",
"You_can_use_html_tag": "Puedes usar la etiqueta html",
"Date_Format": "Formato de fecha",
"Income_Today": "Ingresos hoy",
"Income_This_Month": "Ingresos este mes",
"Users_Active": "Usuarios activos",
"Total_Users": "Total de usuarios",
"Users": "Usuarios",
"Edit_User": "Editar usuario",
"Last_Login": "\u00daltimo acceso",
"Administrator_Users": "Usuarios administradores",
"Manage_Administrator": "Administrar administrador",
"Add_New_Administrator": "Agregar nuevo administrador",
"Localisation": "Localizaci\u00f3n",
"Backup_Restore": "Copia de seguridad\/restauracion",
"General_Settings": "Configuraci\u00f3n general",
"Date": "Fecha",
"Login_Successful": "Inicio de sesi\u00f3n exitoso",
"Failed_Login": "Inicio de sesi\u00f3n fallido",
"Settings_Saved_Successfully": "Configuraci\u00f3n guardada con \u00e9xito",
"User_Updated_Successfully": "Usuario actualizado con \u00e9xito",
"User_Expired__Today": "Usuario vencido, hoy",
"Activity_Log": "Registro de actividades",
"View_Reports": "Ver los informes",
"View_All": "Ver todo",
"Number_of_Vouchers": "N\u00famero de Fichas",
"Length_Code": "Longitud de codigo",
"Code_Voucher": "Cup\u00f3n de Ficha",
"Voucher": "Ficha",
"Hotspot_Voucher": "Ficha Hotspot",
"Status_Voucher": "Estatado de Ficha",
"Add_Vouchers": "Agregar Ficha",
"Create_Vouchers_Successfully": "Crear Ficha con \u00e9xito",
"Generate": "Generar",
"Print_side_by_side__it_will_easy_to_cut": "Imprimir uno al lado del otro, ser\u00e1 f\u00e1cil de cortar",
"From_Date": "Partir de la fecha",
"To_Date": "Hasta la fecha",
"New_Service": "Nuevo servicio",
"Type": "Tipo",
"Finish": "Finalizar",
"Application_Name__Company_Name": "Nombre de la aplicaci\u00f3n\/ Nombre de la empresa",
"This_Name_will_be_shown_on_the_Title": "Este nombre se mostrar\u00e1 en el t\u00edtulo",
"Next": "Siguiente",
"Last": "Atras",
"Timezone": "Zona horaria",
"Decimal_Point": "Punto decimal",
"Thousands_Separator": "Separador de miles",
"Currency_Code": "C\u00f3digo de moneda",
"Order_Voucher": "Comprobante de pedido",
"Voucher_Activation": "Activaci\u00f3n de Fichas",
"List_Activated_Voucher": "Lista de Fichas activados",
"Enter_voucher_code_here": "Ingrese el c\u00f3digo de la Ficha aqu\u00ed",
"Private_Message": "Mensaje privado",
"Inbox": "Bandeja de entrada",
"Outbox": "Bandeja de salida",
"Compose": "Componer",
"Send_to": "Enviar a",
"Title": "T\u00edtulo",
"Message": "Mensaje",
"Your_Account_Information": "Informaci\u00f3n de su cuenta",
"Welcome_to_the_Panel_Members_page__on_this_page_you_can_": "Bienvenido a la p\u00e1gina de Miembros del Panel, en esta p\u00e1gina puede:",
"Invalid_Username_or_Password": "Usuario o contrase\u00f1a invalido",
"You_do_not_have_permission_to_access_this_page": "Usted no tiene permiso para acceder a esta p\u00e1gina",
"Incorrect_Current_Password": "IContrase\u00f1a actual incorrecta",
"Password_changed_successfully__Please_login_again": "Contrase\u00f1a cambiada con \u00e9xito, por favor inicie sesi\u00f3n de nuevo",
"All_field_is_required": "Todo el campo es requerido",
"Voucher_Not_Valid": "Ficha no v\u00e1lida",
"Activation_Vouchers_Successfully": "Fichas de activaci\u00f3n con \u00e9xito",
"Data_Not_Found": "Datos no encontrados",
"Search_by_Username": "Buscar por nombre de usuario",
"Search_by_Name": "Buscar por nombre",
"Search_by_Code_Voucher": "B\u00fasqueda por c\u00f3digo de Ficha",
"Search": "B\u00fasqueda",
"Select_a_customer": "Seleccione un cliente",
"Select_Routers": "Seleccionar enrutadores",
"Select_Plans": "Seleccionar planes",
"Select_Pool": "Seleccionar Pool",
"Hrs": "Hrs",
"Mins": "Mins",
"Days": "Dias",
"Months": "Meses",
"Add_Language": "Agregar idioma",
"Language_Name": "Nombre del lenguaje",
"Folder_Name": "Nombre de la carpeta",
"Translator": "Traducir",
"Language_Name_Already_Exist": "El nombre del idioma ya existe",
"Payment_Gateway": "Payment Gateway",
"Community": "Community",
"1_user_can_be_used_for_many_devices_": "1 user can be used for many devices?",
"Cannot_be_change_after_saved": "Cannot be change after saved",
"Explain_Coverage_of_router": "Jelaskan Cakupan wilayah hotspot",
"Name_of_Area_that_router_operated": "Nama Lokasi\/Wilayah Router beroperasi",
"Payment_Notification_URL__Recurring_Notification_URL__Pay_Account_Notification_URL": "Payment Notification URL, Recurring Notification URL, Pay Account Notification URL",
"Finish_Redirect_URL__Unfinish_Redirect_URL__Error_Redirect_URL": "Finish Redirect URL, Unfinish Redirect URL, Error Redirect URL",
"Status": "Status",
"Plan_Not_found": "Plan Not found",
"Failed_to_create_transaction_": "Failed to create transaction.",
"Seller_has_not_yet_setup_Xendit_payment_gateway": "Seller has not yet setup Xendit payment gateway",
"Admin_has_not_yet_setup_Xendit_payment_gateway__please_tell_admin": "Admin has not yet setup Xendit payment gateway, please tell admin",
"Buy_this__your_active_package_will_be_overwrite": "Buy this? your active package will be overwrite",
"You_already_have_unpaid_transaction__cancel_it_or_pay_it_": "You already have unpaid transaction, cancel it or pay it.",
"Transaction_Not_found": "Transaction Not found",
"Cancel_it_": "Cancel it?",
"expired": "expired",
"Check_for_Payment": "Check for Payment",
"Transaction_still_unpaid_": "Transaction still unpaid.",
"Paid_Date": "Paid Date",
"Transaction_has_been_paid_": "Transaction has been paid.",
"PAID": "PAID",
"CANCELED": "CANCELED",
"UNPAID": "UNPAID",
"PAY_NOW": "PAY NOW",
"Buy_Hotspot_Plan": "Buy Hotspot Plan",
"Buy_PPOE_Plan": "Buy PPOE Plan",
"Package": "Package",
"Order_Internet_Package": "Order Internet Package",
"Unknown_Command_": "Unknown Command.",
"Checking_payment": "Checking payment",
"Create_Transaction_Success": "Create Transaction Success",
"You_have_unpaid_transaction": "You have unpaid transaction",
"TripayPayment_Channel": "TripayPayment Channel",
"Payment_Channel": "Payment Channel",
"Payment_check_failed_": "Payment check failed.",
"Order_Package": "Order Package",
"Transactions": "Transactions",
"Payments": "Payments",
"History": "History",
"Order_History": "Order History",
"Gateway": "Gateway",
"Date_Done": "Date Done",
"Unpaid_Order": "Unpaid Order",
"Payment_Gateway_Not_Found": "Payment Gateway Not Found",
"Payment_Gateway_saved_successfully": "Payment Gateway saved successfully",
"ORDER": "ORDER",
"Package_History": "Package History",
"Buy_History": "Buy History",
"Activation_History": "Activation History",
"Buy_Package": "Buy Package",
"Email": "Email",
"Company_Footer": "Company Footer",
"Will_show_below_user_pages": "Will show below user pages",
"Request_OTP": "Request OTP",
"Verification_Code": "Verification Code",
"SMS_Verification_Code": "SMS Verification Code",
"Please_enter_your_email_address": "Please enter your email address",
"Failed_to_create_Paypal_transaction_": "Failed to create Paypal transaction.",
"Plugin": "Plugin",
"Plugin_Manager": "Plugin Manager",
"User_Notification": "User Notification",
"Expired_Notification": "Expired Notification",
"User_will_get_notification_when_package_expired": "User will get notification when package expired",
"Expired_Notification_Message": "Expired Notification Message",
"Payment_Notification": "Payment Notification",
"User_will_get_invoice_notification_when_buy_package_or_package_refilled": "User will get invoice notification when buy package or package refilled",
"Current_IP": "Current IP",
"Current_MAC": "Current MAC",
"Login_Status": "Login Status",
"Login_Request_successfully": "Login Request successfully",
"Logout_Request_successfully": "Logout Request successfully",
"Disconnect_Internet_": "Disconnect Internet?",
"Not_Online__Login_now_": "Not Online, Login now?",
"You_are_Online__Logout_": "You are Online, Logout?",
"Connect_to_Internet_": "Connect to Internet?",
"Your_account_not_connected_to_internet": "Your account not connected to internet",
"Balance": "Balance",
"Balance_System": "Balance System",
"Enable_System": "Enable System",
"Allow_Transfer": "Allow Transfer",
"Telegram_Notification": "Telegram Notification",
"SMS_OTP_Registration": "SMS OTP Registration",
"Whatsapp_Notification": "Whatsapp Notification",
"Tawk_to_Chat_Widget": "Tawk.to Chat Widget",
"Invoice": "Invoice",
"Country_Code_Phone": "Country Code Phone",
"Voucher_activation_menu_will_be_hidden": "Voucher activation menu will be hidden",
"Customer_can_deposit_money_to_buy_voucher": "Customer can deposit money to buy voucher",
"Allow_balance_transfer_between_customers": "Allow balance transfer between customers",
"Refill_Balance": "Refill Balance",
"Balance_Plans": "Balance Plans",
"Failed_to_create_transaction__": "Failed to create transaction. ",
"Failed_to_check_status_transaction__": "Failed to check status transaction. ",
"Disable_Voucher": "Disable Voucher",
"Reminder_Notification": "Reminder Notification",
"Reminder_Notification_Message": "Reminder Notification Message",
"Reminder_7_days": "Reminder 7 days",
"Reminder_3_days": "Reminder 3 days",
"Reminder_1_day": "Reminder 1 day",
"PPPOE_Password": "PPPOE Password",
"User_Cannot_change_this__only_admin__if_it_Empty_it_will_use_user_password": "User Cannot change this, only admin. if it Empty it will use user password",
"Invoice_Balance_Message": "Invoice Balance Message",
"Invoice_Notification_Payment": "Invoice Notification Payment",
"Balance_Notification_Payment": "Balance Notification Payment",
"Buy_Balance": "Buy Balance",
"Price": "Price",
"Validity": "Validity",
"Disable_auto_renewal_": "Disable auto renewal?",
"Auto_Renewal_On": "Auto Renewal On",
"Enable_auto_renewal_": "Enable auto renewal?",
"Auto_Renewal_Off": "Auto Renewal Off",
"Invoice_Footer": "Invoice Footer",
"Pay_With_Balance": "Pay With Balance",
"Pay_this_with_Balance__your_active_package_will_be_overwrite": "Pay this with Balance? your active package will be overwrite",
"Success_to_buy_package": "Success to buy package",
"Auto_Renewal": "Auto Renewal",
"View": "View",
"Back": "Back",
"Active": "Active",
"Transfer_Balance": "Transfer Balance",
"Send_your_balance_": "Send your balance?",
"Send": "Send",
"Cannot_send_to_yourself": "Cannot send to yourself",
"Sending_balance_success": "Sending balance success",
"From": "From",
"To": "To",
"insufficient_balance": "insufficient balance",
"Send_Balance": "Send Balance",
"Received_Balance": "Received Balance",
"Minimum_Balance_Transfer": "Minimum Balance Transfer",
"Minimum_Transfer": "Minimum Transfer",
"Company_Logo": "Company Logo",
"Expired_IP_Pool": "Expired IP Pool",
"Proxy": "Proxy",
"Proxy_Server": "Proxy Server",
"Proxy_Server_Login": "Proxy Server Login",
"Hotspot_Plan": "Hotspot Plan",
"PPPOE_Plan": "PPPOE Plan",
"UNKNOWN": "UNKNOWN",
"Are_You_Sure_": "Are You Sure?",
"Success_to_send_package": "Success to send package",
"Target_has_active_plan__different_with_current_plant_": "Target has active plan, different with current plant.",
"Recharge_a_friend": "Recharge a friend",
"Buy_for_friend": "Buy for friend",
"Buy_this_for_friend_account_": "Buy this for friend account?",
"Review_package_before_recharge": "Review package before recharge",
"Activate": "Activate",
"Deactivate": "Deactivate",
"Sync": "Sync",
"Failed_to_create_PaymeTrust_transaction_": "Failed to create PaymeTrust transaction.",
"Location": "Location",
"Voucher_Format": "Voucher Format",
"Service_Type": "Service Type",
"Others": "Others",
"PPPoE": "PPPoE",
"Hotspot": "Hotspot",
"Monthly_Registered_Customers": "Monthly Registered Customers",
"Total_Monthly_Sales": "Total Monthly Sales",
"Active_Users": "Active Users"
}

View File

@ -1,411 +0,0 @@
<?php
/*
-----------------------------------
Language Name: Spanish
Contributor: Ing.Luis E. Hernandez
Web: www.phpnuxbill.com
Email: contacto.webland@gmail.com
2022
Contributor: Alucard (@alucard)
------------------------------------
*/
$_L['Login'] = 'Entrar';
$_L['Register'] = 'Registro';
$_L['Announcement'] = 'Anuncio';
$_L['Registration_Info'] = 'Información de registro';
$_L['Register_Voucher_Failed'] = 'Cupón no encontrado, compre el cupón antes de registrarse';
$_L['Register_Success'] = '¡Registro exitoso! Puedes iniciar sesión ahora';
$_L['Sign_In_Member'] = 'Log in to Member Panel';
$_L['Register_Member'] = 'Regístrese como miembro';
$_L['Sign_In_Admin'] = 'Panel de administración';
$_L['Logo'] = 'DIGITAL-RED';
$_L['Username'] = 'Usuario';
$_L['Password'] = 'Contraseña';
$_L['PasswordsNotMatch'] = 'Las contraseñas no coinciden';
$_L['account_already_exist'] = 'La cuenta ya existe';
$_L['Manage'] = 'Administrar';
$_L['Submit'] = 'Enviar';
$_L['Save'] = 'Guardar cambios';
$_L['Cancel'] = 'Cancelar';
$_L['Edit'] = 'Editar';
$_L['Delete'] = 'Eliminar';
$_L['Welcome'] = 'Bienvenido';
$_L['Created_Successfully'] = 'Datos creados con éxito';
$_L['Updated_Successfully'] = 'Datos actualizados con éxito';
$_L['Delete_Successfully'] = 'Datos eliminados con éxito';
$_L['Static_Pages'] = "Páginas estáticas";
$_L['Failed_Save_Page'] = "No se pudo guardar la página, asegúrese de que pueda escribir en las páginas de la carpeta, <i>chmod 664 pages/*.html<i>";
$_L['Success_Save_Page'] = "Guardando el éxito de la página";
$_L['Info_Page'] = "A veces es necesario actualizar 3 veces hasta que cambie el contenido";
$_L['Dashboard'] = 'Dashboard';
$_L['Search_Contact'] = 'Buscar clientes...';
$_L['My_Account'] = 'Mi cuenta';
$_L['My_Profile'] = 'Mi perfil';
$_L['Settings'] = 'Ajustes';
$_L['Edit_Profile'] = 'Editar perfil';
$_L['Change_Password'] = 'Cambia la contraseña';
$_L['Logout'] = 'Cerrar sesión';
$_L['Services'] = 'Servicios';
$_L['Bandwidth_Plans'] = 'Planes de velocidad';
$_L['BW_Name'] = 'Nombre de ancho de banda';
$_L['New_Bandwidth'] = 'Nuevo ancho de banda';
$_L['Edit_Bandwidth'] = 'Editar ancho de banda';
$_L['Add_Bandwidth'] = 'Agregar nuevo ancho de banda';
$_L['Rate_Download'] = 'Tarifa Descarga';
$_L['Rate_Upload'] = 'Tasa de subida';
$_L['BW_already_exist'] = 'El ancho de banda del nombre ya existe';
$_L['Hotspot_Plans'] = 'Planes de Hotspot';
$_L['PPPOE_Plans'] = 'Planes PPPOE';
$_L['Plan_Name'] = 'Nombre';
$_L['New_Plan'] = 'Nuevo plan de servicio';
$_L['Add_Plan'] = 'Agregar plan de servicio';
$_L['Edit_Plan'] = 'Editar plan de servicio';
$_L['Plan_already_exist'] = 'Nombre El plan ya existe';
$_L['Plan_Type'] = 'Tipo de plan';
$_L['Plan_Price'] = 'Precio del plan';
$_L['Limit_Type'] = 'Tipo de límite';
$_L['Unlimited'] = 'Ilimitado';
$_L['Limited'] = 'Limitado';
$_L['Time_Limit'] = 'Límite de tiempo';
$_L['Data_Limit'] = 'Límite de datos';
$_L['Both_Limit'] = 'Ambos Límite';
$_L['Plan_Validity'] = 'Validez del Plan';
$_L['Select_BW'] = 'Seleccionar ancho de banda';
$_L['Shared_Users'] = 'Usuarios compartidos';
$_L['user_type_help'] = 'Elija Ventas de tipo de usuario para deshabilitar el acceso a la Configuración';
$_L['Current_Password'] = 'Contraseña actual';
$_L['New_Password'] = 'Nueva contraseña';
$_L['Administrator'] = 'Administrador';
$_L['Sales'] = 'Ventas';
$_L['Member'] = 'Usuario';
$_L['Confirm_New_Password'] = 'Confirmar nueva contraseña';
$_L['Confirm_Password'] = 'Confirmar contraseña';
$_L['Full_Name'] = 'Nombre completo';
$_L['User_Type'] = 'Tipo de usuario';
$_L['Address'] = 'Dirección';
$_L['Created_On'] = 'Creado en';
$_L['Expires_On'] = 'Expira el';
$_L['Phone_Number'] = 'Número de teléfono';
$_L['User_Delete_Ok'] = 'Usuario eliminado con éxito';
$_L['Full_Administrator'] = 'Administrador completo';
$_L['password_change_help'] = 'Mantener en blanco para no cambiar la contraseña';
$_L['currency_help'] = 'Manténgalo en blanco si no desea mostrar el código de moneda';
$_L['Theme_Style'] = 'Estilo de tema';
$_L['Theme_Color'] = 'Color del tema';
$_L['Default_Language'] = 'Idioma predeterminado';
$_L['Network'] = 'Red';
$_L['Routers'] = 'Routers';
$_L['Pool'] = 'IP Pool';
$_L['New_Router'] = 'Nuevo Router';
$_L['Add_Router'] = 'Agregar Router';
$_L['Edit_Router'] = 'Editar Router';
$_L['Router_Name'] = 'Nombre del Router';
$_L['IP_Address'] = 'Direccion IP';
$_L['Router_Secret'] = 'Contraseña Router';
$_L['Description'] = 'Descripcion';
$_L['Router_already_exist'] = 'El enrutador IP ya existe';
$_L['Pool_Name'] = 'Nombre del Pool';
$_L['Range_IP'] = 'Rango de IP';
$_L['New_Pool'] = 'Nuevo Pool';
$_L['Add_Pool'] = 'Agregar Pool';
$_L['Edit_Pool'] = 'Editar Pool';
$_L['Pool_already_exist'] = 'Nombre del Pool ya existe';
$_L['Prepaid'] = 'Prepago';
$_L['Prepaid_User'] = 'Usuarios prepago';
$_L['Prepaid_Vouchers'] = 'Fichas prepago';
$_L['Refill_Account'] = 'Recargar Ficha';
$_L['Recharge_Account'] = 'Recargar Cuenta';
$_L['Select_Account'] = 'Seleccionar cuenta';
$_L['Service_Plan'] = 'Plan de servicio';
$_L['Recharge'] = 'Recargar';
$_L['Method'] = 'Método';
$_L['account_created_successfully'] = 'Cuenta creada con éxito';
$_L['Database_Status'] = 'Estado de la base de datos';
$_L['Total_Database_Size'] = 'Tamaño total de la base de datos';
$_L['Download_Database_Backup'] = 'Descargar copia de seguridad de la base de datos';
$_L['Table_Name'] = 'Nombre de la tabla';
$_L['Rows'] = 'Filas';
$_L['Size'] = 'Tamaño';
$_L['Customers'] = 'Clientes';
$_L['Add_Contact'] = 'Añadir nuevo contacto';
$_L['Edit_Contact'] = 'Editar contacto';
$_L['List_Contact'] = 'Lista de contactos';
$_L['Manage_Accounts'] = 'Administrar contacto';
$_L['Reports'] = 'Reportes';
$_L['Daily_Report'] = 'Reportes diarios';
$_L['Period_Reports'] = 'Informes del período';
$_L['All_Transactions'] = 'Todas las transacciones';
$_L['Total_Income'] = 'Ingresos totales';
$_L['All_Transactions_at_Date'] = 'Todas las transacciones en la fecha';
$_L['Export_for_Print'] = 'Exportar para imprimir';
$_L['Print'] = 'Impresión';
$_L['Export_to_PDF'] = 'Exportar a PDF';
$_L['Click_Here_to_Print'] = 'Haga clic aquí para imprimir';
$_L['You_can_use_html_tag'] = 'Puedes usar la etiqueta html';
$_L['Date_Format'] = 'Formato de fecha';
$_L['Income_Today'] = 'Ingresos hoy';
$_L['Income_This_Month'] = 'Ingresos este mes';
$_L['Users_Active'] = 'Usuarios activos';
$_L['Total_Users'] = 'Total de usuarios';
$_L['Users'] = 'Usuarios';
$_L['Edit_User'] = 'Editar usuario';
$_L['Last_Login'] = 'Último acceso';
$_L['Administrator_Users'] = 'Usuarios administradores';
$_L['Manage_Administrator'] = 'Administrar administrador';
$_L['Add_New_Administrator'] = 'Agregar nuevo administrador';
$_L['Localisation'] = 'Localización';
$_L['Backup_Restore'] = 'Copia de seguridad/restauracion';
$_L['General_Settings'] = 'Configuración general';
$_L['Date'] = 'Fecha';
$_L['Login_Successful'] = 'Inicio de sesión exitoso';
$_L['Failed_Login'] = 'Inicio de sesión fallido';
$_L['Settings_Saved_Successfully'] = 'Configuración guardada con éxito';
$_L['User_Updated_Successfully'] = 'Usuario actualizado con éxito';
$_L['User_Expired_Today'] = 'Usuario vencido, hoy';
$_L['Activity_Log'] = 'Registro de actividades';
$_L['View_Reports'] = 'Ver los informes';
$_L['View_All'] = 'Ver todo';
$_L['Number_of_Vouchers'] = 'Número de Fichas';
$_L['Length_Code'] = 'Longitud de codigo';
$_L['Code_Voucher'] = 'Cupón de Ficha';
$_L['Voucher'] = 'Ficha';
$_L['Voucher_Hotspot'] = 'Ficha Hotspot';
$_L['Status_Voucher'] = 'Estatado de Ficha';
$_L['Add_Voucher'] = 'Agregar Ficha';
$_L['Voucher_Successfully'] = 'Crear Ficha con éxito';
$_L['Generate'] = 'Generar';
$_L['Print_Info'] = 'Imprimir uno al lado del otro, será fácil de cortar';
$_L['From_Date'] = 'Partir de la fecha';
$_L['To_Date'] = 'Hasta la fecha';
$_L['New_Service'] = 'Nuevo servicio';
$_L['Type'] = 'Tipo';
$_L['Finish'] = 'Finalizar';
$_L['App_Name'] = 'Nombre de la aplicación/ Nombre de la empresa';
$_L['App_Name_Help_Text'] = 'Este nombre se mostrará en el título';
$_L['Next'] = 'Siguiente';
$_L['Last'] = 'Atras';
$_L['Timezone'] = 'Zona horaria';
$_L['Decimal_Point'] = 'Punto decimal';
$_L['Thousands_Separator'] = 'Separador de miles';
$_L['Currency_Code'] = 'Código de moneda';
$_L['Order_Voucher'] = 'Comprobante de pedido';
$_L['Voucher_Activation'] = 'Activación de Fichas';
$_L['List_Activated_Voucher'] = 'Lista de Fichas activados';
$_L['Enter_Voucher_Code'] = 'Ingrese el código de la Ficha aquí';
$_L['Private_Message'] = 'Mensaje privado';
$_L['Inbox'] = 'Bandeja de entrada';
$_L['Outbox'] = 'Bandeja de salida';
$_L['Compose'] = 'Componer';
$_L['Send_to'] = 'Enviar a';
$_L['Title'] = 'Título';
$_L['Message'] = 'Mensaje';
$_L['Account_Information'] = 'Información de su cuenta';
$_L['Welcome_Text_User'] = 'Bienvenido a la página de Miembros del Panel, en esta página puede:';
$_L['Welcome_Text_Admin'] = '<b>MIKRO-RED</b> es un punto de acceso de facturación y PPPOE para Mikrotik que utiliza PHP y la API de Mikrotik para comunicarse con el enrutador. Si obtiene más ganancias con esta aplicación, por favor dónenos.<br>Ver proyecto <a href="https://github.com/hotspotbilling/phpnuxbill" target="_blank">aqui</a>';
//update
$_L['Invalid_Username_or_Password'] = 'Usuario o contraseña invalido';
$_L['Do_Not_Access'] = 'Usted no tiene permiso para acceder a esta página';
$_L['Incorrect_Current_Password'] = 'IContraseña actual incorrecta';
$_L['Password_Changed_Successfully'] = 'Contraseña cambiada con éxito, por favor inicie sesión de nuevo';
$_L['All_field_is_required'] = 'Todo el campo es requerido';
$_L['Voucher_Not_Valid'] = 'Ficha no válida';
$_L['Activation_Vouchers_Successfully'] = 'Fichas de activación con éxito';
$_L['Data_Not_Found'] = 'Datos no encontrados';
$_L['Search_by_Username'] = 'Buscar por nombre de usuario';
$_L['Search_by_Name'] = 'Buscar por nombre';
$_L['Search_by_Code'] = 'Búsqueda por código de Ficha';
$_L['Search'] = 'Búsqueda';
$_L['Select_Customer'] = 'Seleccione un cliente';
$_L['Select_Routers'] = 'Seleccionar enrutadores';
$_L['Select_Plans'] = 'Seleccionar planes';
$_L['Select_Pool'] = 'Seleccionar Pool';
$_L['Hrs'] = 'Hrs';
$_L['Mins'] = 'Mins';
$_L['Days'] = 'Dias';
$_L['Months'] = 'Meses';
$_L['Add_Language'] = 'Agregar idioma';
$_L['Name_Lang'] = 'Nombre del lenguaje';
$_L['Folder_Lang'] = 'Nombre de la carpeta';
$_L['Translator'] = 'Traducir';
$_L['Lang_already_exist'] = 'El nombre del idioma ya existe';
$_L['Payment_Gateway'] = 'Payment Gateway';
$_L['Community'] = 'Community';
$_L['1_user_can_be_used_for_many_devices'] = '1 user can be used for many devices?';
$_L['Cannot_be_change_after_saved'] = 'Cannot be change after saved';
$_L['Explain_Coverage_of_router'] = 'Jelaskan Cakupan wilayah hotspot';
$_L['Name_of_Area_that_router_operated'] = 'Nama Lokasi/Wilayah Router beroperasi';
$_L['Payment_Notification_URL_Recurring_Notification_URL_Pay_Account_Notification_URL'] = 'Payment Notification URL, Recurring Notification URL, Pay Account Notification URL';
$_L['Finish_Redirect_URL_Unfinish_Redirect_URL_Error_Redirect_URL'] = 'Finish Redirect URL, Unfinish Redirect URL, Error Redirect URL';
$_L['Status'] = 'Status';
$_L['Plan_Not_found'] = 'Plan Not found';
$_L['Failed_to_create_transaction'] = 'Failed to create transaction.';
$_L['Seller_has_not_yet_setup_Xendit_payment_gateway'] = 'Seller has not yet setup Xendit payment gateway';
$_L['Admin_has_not_yet_setup_Xendit_payment_gateway_please_tell_admin'] = 'Admin has not yet setup Xendit payment gateway, please tell admin';
$_L['Buy_this_your_active_package_will_be_overwrite'] = 'Buy this? your active package will be overwrite';
$_L['You_already_have_unpaid_transaction_cancel_it_or_pay_it'] = 'You already have unpaid transaction, cancel it or pay it.';
$_L['Transaction_Not_found'] = 'Transaction Not found';
$_L['Cancel_it'] = 'Cancel it?';
$_L['expired'] = 'expired';
$_L['Check_for_Payment'] = 'Check for Payment';
$_L['Transaction_still_unpaid'] = 'Transaction still unpaid.';
$_L['Paid_Date'] = 'Paid Date';
$_L['Transaction_has_been_paid'] = 'Transaction has been paid.';
$_L['PAID'] = 'PAID';
$_L['CANCELED'] = 'CANCELED';
$_L['UNPAID'] = 'UNPAID';
$_L['PAY_NOW'] = 'PAY NOW';
$_L['Buy_Hotspot_Plan'] = 'Buy Hotspot Plan';
$_L['Buy_PPOE_Plan'] = 'Buy PPOE Plan';
$_L['Package'] = 'Package';
$_L['Order_Internet_Package'] = 'Order Internet Package';
$_L['Unknown_Command'] = 'Unknown Command.';
$_L['Checking_payment'] = 'Checking payment';
$_L['Create_Transaction_Success'] = 'Create Transaction Success';
$_L['You_have_unpaid_transaction'] = 'You have unpaid transaction';
$_L['TripayPayment_Channel'] = 'TripayPayment Channel';
$_L['Payment_Channel'] = 'Payment Channel';
$_L['Payment_check_failed'] = 'Payment check failed.';
$_L['Order_Package'] = 'Order Package';
$_L['Transactions'] = 'Transactions';
$_L['Payments'] = 'Payments';
$_L['History'] = 'History';
$_L['Order_History'] = 'Order History';
$_L['Gateway'] = 'Gateway';
$_L['Date_Done'] = 'Date Done';
$_L['Unpaid_Order'] = 'Unpaid Order';
$_L['Payment_Gateway_Not_Found'] = 'Payment Gateway Not Found';
$_L['Payment_Gateway_saved_successfully'] = 'Payment Gateway saved successfully';
$_L['ORDER'] = 'ORDER';
$_L['Package_History'] = 'Package History';
$_L['Buy_History'] = 'Buy History';
$_L['Activation_History'] = 'Activation History';
$_L['Buy_Package'] = 'Buy Package';
$_L['Email'] = 'Email';
$_L['Company_Footer'] = 'Company Footer';
$_L['Will_show_below_user_pages'] = 'Will show below user pages';
$_L['Request_OTP'] = 'Request OTP';
$_L['Verification_Code'] = 'Verification Code';
$_L['SMS_Verification_Code'] = 'SMS Verification Code';
$_L['Please_enter_your_email_address'] = 'Please enter your email address';
$_L['Failed_to_create_Paypal_transaction'] = 'Failed to create Paypal transaction.';
$_L['Plugin'] = 'Plugin';
$_L['Plugin_Manager'] = 'Plugin Manager';
$_L['User_Notification'] = 'User Notification';
$_L['Expired_Notification'] = 'Expired Notification';
$_L['User_will_get_notification_when_package_expired'] = 'User will get notification when package expired';
$_L['Expired_Notification_Message'] = 'Expired Notification Message';
$_L['bnameb_will_be_replaced_with_Customer_Name_bpackageb_will_be_replaced_with_Package_name'] = '<b>[[name]]</b> will be replaced with Customer Name. <b>[[package]]</b> will be replaced with Package name.';
$_L['Payment_Notification'] = 'Payment Notification';
$_L['User_will_get_invoice_notification_when_buy_package_or_package_refilled'] = 'User will get invoice notification when buy package or package refilled';
$_L['Current_IP'] = 'Current IP';
$_L['Current_MAC'] = 'Current MAC';
$_L['Login_Status'] = 'Login Status';
$_L['Login_Request_successfully'] = 'Login Request successfully';
$_L['Logout_Request_successfully'] = 'Logout Request successfully';
$_L['Disconnect_Internet'] = 'Disconnect Internet?';
$_L['Not_Online_Login_now'] = 'Not Online, Login now?';
$_L['You_are_Online_Logout'] = 'You are Online, Logout?';
$_L['Connect_to_Internet'] = 'Connect to Internet?';
$_L['Your_account_not_connected_to_internet'] = 'Your account not connected to internet';
$_L['Balance'] = 'Balance';
$_L['Balance_System'] = 'Balance System';
$_L['Enable_System'] = 'Enable System';
$_L['Allow_Transfer'] = 'Allow Transfer';
$_L['Telegram_Notification'] = 'Telegram Notification';
$_L['SMS_OTP_Registration'] = 'SMS OTP Registration';
$_L['Whatsapp_Notification'] = 'Whatsapp Notification';
$_L['Tawkto_Chat_Widget'] = 'Tawk.to Chat Widget';
$_L['Invoice'] = 'Invoice';
$_L['Country_Code_Phone'] = 'Country Code Phone';
$_L['Voucher_activation_menu_will_be_hidden'] = 'Voucher activation menu will be hidden';
$_L['Customer_can_deposit_money_to_buy_voucher'] = 'Customer can deposit money to buy voucher';
$_L['Allow_balance_transfer_between_customers'] = 'Allow balance transfer between customers';$_L['Refill_Balance'] = 'Refill Balance';
$_L['Balance_Plans'] = 'Balance Plans';
$_L['Failed_to_create_transaction_'] = 'Failed to create transaction. ';
$_L['Failed_to_check_status_transaction_'] = 'Failed to check status transaction. ';
$_L['Disable_Voucher'] = 'Disable Voucher';
$_L['Reminder_Notification'] = 'Reminder Notification';
$_L['Reminder_Notification_Message'] = 'Reminder Notification Message';
$_L['Reminder_7_days'] = 'Reminder 7 days';
$_L['Reminder_3_days'] = 'Reminder 3 days';
$_L['Reminder_1_day'] = 'Reminder 1 day';
$_L['PPPOE_Password'] = 'PPPOE Password';
$_L['User_Cannot_change_this_only_admin_if_it_Empty_it_will_use_user_password'] = 'User Cannot change this, only admin. if it Empty it will use user password';
$_L['Invoice_Balance_Message'] = 'Invoice Balance Message';
$_L['Invoice_Notification_Payment'] = 'Invoice Notification Payment';
$_L['Balance_Notification_Payment'] = 'Balance Notification Payment';
$_L['Buy_Balance'] = 'Buy Balance';
$_L['Price'] = 'Price';
$_L['Validity'] = 'Validity';
$_L['Disable_auto_renewal'] = 'Disable auto renewal?';
$_L['Auto_Renewal_On'] = 'Auto Renewal On';
$_L['Enable_auto_renewal'] = 'Enable auto renewal?';
$_L['Auto_Renewal_Off'] = 'Auto Renewal Off';
$_L['Invoice_Footer'] = 'Invoice Footer';
$_L['Pay_With_Balance'] = 'Pay With Balance';
$_L['Pay_this_with_Balance_your_active_package_will_be_overwrite'] = 'Pay this with Balance? your active package will be overwrite';
$_L['Success_to_buy_package'] = 'Success to buy package';
$_L['Auto_Renewal'] = 'Auto Renewal';
$_L['View'] = 'View';
$_L['Back'] = 'Back';
$_L['Active'] = 'Active';
$_L['Transfer_Balance'] = 'Transfer Balance';
$_L['Send_your_balance'] = 'Send your balance?';
$_L['Send'] = 'Send';
$_L['Cannot_send_to_yourself'] = 'Cannot send to yourself';
$_L['Sending_balance_success'] = 'Sending balance success';
$_L['From'] = 'From';
$_L['To'] = 'To';
$_L['insufficient_balance'] = 'insufficient balance';
$_L['Send_Balance'] = 'Send Balance';
$_L['Received_Balance'] = 'Received Balance';
$_L['Minimum_Balance_Transfer'] = 'Minimum Balance Transfer';
$_L['Minimum_Transfer'] = 'Minimum Transfer';
$_L['Company_Logo'] = 'Company Logo';
$_L['Expired_IP_Pool'] = 'Expired IP Pool';
$_L['Proxy'] = 'Proxy';
$_L['Proxy_Server'] = 'Proxy Server';
$_L['Proxy_Server_Login'] = 'Proxy Server Login';
$_L['Hotspot_Plan'] = 'Hotspot Plan';
$_L['PPPOE_Plan'] = 'PPPOE Plan';
$_L['UNKNOWN'] = 'UNKNOWN';
$_L['Are_You_Sure'] = 'Are You Sure?';
$_L['Success_to_send_package'] = 'Success to send package';
$_L['Target_has_active_plan_different_with_current_plant'] = 'Target has active plan, different with current plant.';
$_L['Recharge_a_friend'] = 'Recharge a friend';
$_L['Buy_for_friend'] = 'Buy for friend';
$_L['Buy_this_for_friend_account'] = 'Buy this for friend account?';
$_L['Review_package_before_recharge'] = 'Review package before recharge';
$_L['Activate'] = 'Activate';
$_L['Deactivate'] = 'Deactivate';
$_L['Sync'] = 'Sync';
$_L['Failed_to_create_PaymeTrust_transaction'] = 'Failed to create PaymeTrust transaction.';
$_L['Location'] = 'Location';
$_L['Voucher_Format'] = 'Voucher Format';
$_L['Service_Type'] = 'Service Type';
$_L['Others'] = 'Others';
$_L['PPPoE'] = 'PPPoE';
$_L['Hotspot'] = 'Hotspot';
$_L['Monthly_Registered_Customers'] = 'Monthly Registered Customers';
$_L['Total_Monthly_Sales'] = 'Total Monthly Sales';
$_L['Active_Users'] = 'Active Users';

375
system/lan/turkish.json Normal file
View File

@ -0,0 +1,375 @@
{
"Log_in": "Oturum a\u00e7",
"Register": "Kay\u0131t olmak",
"Announcement": "Duyuru",
"Registration_Info": "Kay\u0131t Bilgisi",
"Voucher_not_found__please_buy_voucher_befor_register": "Kupon bulunamad\u0131, l\u00fctfen kay\u0131t olun ve kay\u0131t olun",
"Register_Success__You_can_login_now": "Kay\u0131t Ba\u015far\u0131l\u0131! \u015eimdi giri\u015f yapabilirsiniz ",
"Log_in_to_Member_Panel": "\u00dcye Paneli'ne giri\u015f yap\u0131n",
"Register_as_Member": "\u00dcye olarak kay\u0131t ol",
"Enter_Admin_Area": "Y\u00f6netici Paneli Giri\u015fi",
"PHPNuxBill": "PHPNuxBill",
"Username": "Kullan\u0131c\u0131 ad\u0131",
"Password": "Parola",
"Passwords_does_not_match": "Parolalar e\u015fle\u015fmiyor",
"Account_already_axist": "Hesap zaten aksanl\u0131",
"Manage": "Y\u00f6net",
"Submit": "G\u00f6nder",
"Save_Changes": "De\u011fi\u015fiklikleri Kaydet",
"Cancel": "\u0130ptal etmek",
"Edit": "D\u00fczenle",
"Delete": "Sil",
"Welcome": "Ho\u015fgeldiniz",
"Data_Created_Successfully": "Veriler Ba\u015far\u0131yla Olu\u015fturuldu ",
"Data_Updated_Successfully": "Veriler Ba\u015far\u0131yla G\u00fcncellendi",
"Data_Deleted_Successfully": "Veri Ba\u015far\u0131yla Silindi",
"Dashboard": "Dashboard",
"Search_Customers___": "M\u00fc\u015fteri Ara ...",
"My_Account": "Hesab\u0131m",
"My_Profile": "Benim profilim",
"Settings": "Ayarlar",
"Edit_Profile": "Profili D\u00fczenle",
"Change_Password": "\u015eifre de\u011fi\u015ftir",
"Logout": "\u00c7\u0131k\u0131\u015f Yap",
"Services": "Hizmetler",
"Bandwidth_Plans": "Bant Geni\u015fli\u011fi Planlar\u0131",
"Bandwidth_Name": "Bant Geni\u015fli\u011fi Ad\u0131",
"New_Bandwidth": "Yeni Bant Geni\u015fli\u011fi",
"Edit_Bandwidth": "Bant Geni\u015fli\u011fini D\u00fczenle",
"Add_New_Bandwidth": "Yeni Bant Geni\u015fli\u011fi Ekle",
"Rate_Download": "\u0130ndirme Oran\u0131",
"Rate_Upload": "\u00dccret Y\u00fckleme",
"Name_Bandwidth_Already_Exist": "Bandwidth Ad\u0131 Zaten Var",
"Hotspot_Plans": "Hotspot Planlar\u0131",
"PPPOE_Plans": "PPPOE Planlar\u0131",
"Plan_Name": "Plan Ad\u0131",
"New_Service_Plan": "Yeni Hizmet Plan\u0131",
"Add_Service_Plan": "Hizmet Plan\u0131 Ekle",
"Edit_Service_Plan": "Hizmet Plan\u0131n\u0131 D\u00fczenle",
"Name_Plan_Already_Exist": "Plan\u0131 \u0130smi Zaten Var",
"Plan_Type": "Plan T\u00fcr\u00fc",
"Plan_Price": "Plan Fiyat\u0131",
"Limit_Type": "S\u0131n\u0131r Tipi",
"Unlimited": "S\u0131n\u0131rs\u0131z",
"Limited": "S\u0131n\u0131rl\u0131",
"Time_Limit": "Zaman s\u0131n\u0131r\u0131",
"Data_Limit": "Veri S\u0131n\u0131r\u0131",
"Both_Limit": "Her \u0130ki S\u0131n\u0131r",
"Plan_Validity": "Plan Ge\u00e7erlili\u011fi",
"Select_Bandwidth": "Bant Geni\u015fli\u011fini Se\u00e7",
"Shared_Users": "Payla\u015f\u0131lan Kullan\u0131c\u0131lar",
"Choose_User_Type_Sales_to_disable_access_to_Settings": "Ayarlar'a eri\u015fimi devre d\u0131\u015f\u0131 b\u0131rakmak i\u00e7in Kullan\u0131c\u0131 T\u00fcr\u00fc Sat\u0131\u015flar\u0131n\u0131 Se\u00e7",
"Current_Password": "\u015eimdiki \u015eifre",
"New_Password": "Yeni \u015eifre",
"Administrator": "Y\u00f6netici",
"Sales": "Sat\u0131\u015f",
"Member": "\u00dcye",
"Confirm_New_Password": "Yeni \u015fifreyi onayla",
"Confirm_Password": "\u015eifreyi Onayla",
"Full_Name": "Ad Soyad",
"User_Type": "Kullan\u0131c\u0131 tipi",
"Address": "Adres",
"Created_On": "Olu\u015fturuldu",
"Expires_On": "Tarihinde sona eriyor",
"Phone_Number": "Telefon numaras\u0131",
"User_deleted_Successfully": "Kullan\u0131c\u0131 Ba\u015far\u0131yla Silindi",
"Full_Administrator": "Tam Y\u00f6netici",
"Keep_Blank_to_do_not_change_Password": "\u015eifreyi de\u011fi\u015ftirmemek i\u00e7in bo\u015f tutun",
"Keep_it_blank_if_you_do_not_want_to_show_currency_code": "Para birimi kodunu g\u00f6stermek istemiyorsan\u0131z bo\u015f b\u0131rak\u0131n",
"Theme_Style": "Tema Stili",
"Theme_Color": "Tema Rengi",
"Default_Language": "Varsay\u0131lan dil",
"Network": "A\u011f",
"Routers": "Y\u00f6nlendiriciler",
"IP_Pool": "IP Havuzu",
"New_Router": "Yeni Y\u00f6nlendirici",
"Add_Router": "Router ekle",
"Edit_Router": "Y\u00f6nlendiriciyi D\u00fczenle",
"Router_Name": "Y\u00f6nlendirici Ad\u0131",
"IP_Address": "IP adresi",
"Router_Secret": "Y\u00f6nlendirici S\u0131rr\u0131",
"Description": "A\u00e7\u0131klama",
"IP_Router_Already_Exist": "IP Router Zaten Var",
"Name_Pool": "\u0130sim Havuzu",
"Range_IP": "Aral\u0131k \u0130P",
"New_Pool": "Yeni Havuz",
"Add_Pool": "Havuz ekle",
"Edit_Pool": "Havuzu D\u00fczenle",
"Pool_Name_Already_Exist": "Havuz Ad\u0131 \u200b\u200bZaten Var",
"Prepaid": "\u00d6n \u00d6demeli",
"Prepaid_Users": "\u00d6n \u00d6demeli Kullan\u0131c\u0131lar",
"Prepaid_Vouchers": "\u00d6n \u00d6demeli Kuponlar",
"Refill_Account": "Hesab\u0131 Yenile",
"Recharge_Account": "Hesab\u0131 Yeniden \u015earj Et",
"Select_Account": "Hesap Se\u00e7",
"Service_Plan": "Servis plan\u0131",
"Recharge": "\u015earj",
"Method": "Y\u00f6ntem",
"Account_Created_Successfully": "Hesap ba\u015far\u0131yla olu\u015fturuldu",
"Database_Status": "Veritaban\u0131 Durumu",
"Total_Database_Size": "Toplam Veritaban\u0131 Boyutu",
"Download_Database_Backup": "Veritaban\u0131 Yedekleme \u0130ndir",
"Table_Name": "Tablo ismi",
"Rows": "Sat\u0131r",
"Size": "Boyut",
"Customer": "M\u00fc\u015fteri",
"Add_New_Contact": "Yeni \u0130leti\u015fim Ekle",
"Edit_Contact": "\u0130leti\u015fim D\u00fczenle",
"List_Contact": "Liste \u0130rtibat",
"Manage_Contact": "Ki\u015fiyi Y\u00f6netin",
"Reports": "Raporlar",
"Daily_Reports": "G\u00fcnl\u00fck raporlar",
"Period_Reports": "D\u00f6nem Raporlar\u0131",
"All_Transactions": "T\u00fcm \u0130\u015flemler",
"Total_Income": "Toplam gelir",
"All_Transactions_at_Date": "Tarihte T\u00fcm \u0130\u015flemler",
"Export_for_Print": "Bask\u0131 i\u00e7in \u0130hracat",
"Print": "Bask\u0131",
"Export_to_PDF": "PDF'ye Aktar",
"Click_Here_to_Print": "Yazd\u0131rmak i\u00e7in Buraya T\u0131klay\u0131n",
"You_can_use_html_tag": "Html etiketini kullanabilirsiniz",
"Date_Format": "Tarih format\u0131",
"Income_Today": "Gelir Bug\u00fcn",
"Income_This_Month": "Bu Ay Gelir",
"Users_Active": "Kullan\u0131c\u0131lar Aktif",
"Total_Users": "Toplam Kullan\u0131c\u0131",
"Users": "Kullan\u0131c\u0131lar",
"Edit_User": "Kullan\u0131c\u0131y\u0131 d\u00fczenle",
"Last_Login": "Son giri\u015f",
"Administrator_Users": "Y\u00f6netici Kullan\u0131c\u0131lar\u0131",
"Manage_Administrator": "Y\u00f6netici Y\u00f6net",
"Add_New_Administrator": "Yeni Y\u00f6netici Ekleyin",
"Localisation": "Lokalizasyon",
"Backup_Restore": "Yedekleme \/ Geri",
"General_Settings": "Genel Ayarlar",
"Date": "Tarih",
"Login_Successful": "Giri\u015f ba\u015far\u0131l\u0131",
"Failed_Login": "Ba\u015far\u0131s\u0131z oturum a\u00e7ma",
"Settings_Saved_Successfully": "Ayarlar ba\u015far\u0131yla kaydedildi",
"User_Updated_Successfully": "Kullan\u0131c\u0131 Ba\u015far\u0131yla G\u00fcncellendi",
"User_Expired__Today": "Kullan\u0131c\u0131 S\u00fcresi Doldu, Bug\u00fcn",
"Activity_Log": "Etkinlik G\u00fcnl\u00fc\u011f\u00fc",
"View_Reports": "Raporlar\u0131 G\u00f6r\u00fcnt\u00fcle",
"View_All": "Hepsini g\u00f6r",
"Number_of_Vouchers": "Kuponlar\u0131n Say\u0131s\u0131",
"Length_Code": "Uzunluk Kodu",
"Code_Voucher": "Kod Makbuzu",
"Voucher": "Fi\u015f",
"Hotspot_Voucher": "Hotspot Kuponu",
"Status_Voucher": "Durum Makbuzu",
"Add_Vouchers": "Kupon Ekle",
"Create_Vouchers_Successfully": "Kuponlar\u0131 ba\u015far\u0131yla olu\u015ftur",
"Generate": "Genel",
"Print_side_by_side__it_will_easy_to_cut": "Yanyana yazd\u0131r\u0131rsan\u0131z, kesmesi daha kolay olacakt\u0131r.",
"From_Date": "\u0130tibaren",
"To_Date": "Bug\u00fcne kadar",
"New_Service": "Yeni Servis",
"Type": "T\u00fcr",
"Finish": "Biti\u015f",
"Application_Name__Company_Name": "Uygulama Ad\u0131 \/ \u015eirket Ad\u0131",
"This_Name_will_be_shown_on_the_Title": "Bu \u0130sim Ba\u015fl\u0131kta g\u00f6sterilecek",
"Next": "Sonraki",
"Last": "Son",
"Timezone": "Saat dilimi",
"Decimal_Point": "Ondal\u0131k nokta",
"Thousands_Separator": "Bin Ay\u0131r\u0131c\u0131",
"Currency_Code": "Para Birimi Kodu",
"Order_Voucher": "Sipari\u015f Makbuzu",
"Voucher_Activation": "Kupon Aktivasyonu",
"List_Activated_Voucher": "Aktif Fi\u015f Listesi",
"Enter_voucher_code_here": "Kupon kodunu buraya girin",
"Private_Message": "\u00d6zel mesaj",
"Inbox": "Gelen kutusu",
"Outbox": "Giden",
"Compose": "Olu\u015fturma",
"Send_to": "G\u00f6nderildi",
"Title": "Ba\u015fl\u0131k",
"Message": "Mesaj",
"Your_Account_Information": "Hesap Bilgileriniz",
"Invalid_Username_or_Password": "Ge\u00e7ersiz kullan\u0131c\u0131 ad\u0131 veya \u015fifre",
"You_do_not_have_permission_to_access_this_page": "Bu sayfaya eri\u015fim izniniz yok",
"Incorrect_Current_Password": "Yanl\u0131\u015f Ge\u00e7erli \u015eifre",
"Password_changed_successfully__Please_login_again": "\u015eifre ba\u015far\u0131yla de\u011fi\u015ftirildi, L\u00fctfen tekrar giri\u015f yap\u0131n",
"All_field_is_required": "T\u00fcm alan gerekli",
"Voucher_Not_Valid": "Kupon Ge\u00e7erli De\u011fil",
"Activation_Vouchers_Successfully": "Aktivasyon Kuponlar\u0131 Ba\u015far\u0131yla",
"Data_Not_Found": "Veri bulunamad\u0131",
"Search_by_Username": "Kullan\u0131c\u0131 Ad\u0131na G\u00f6re Ara",
"Search_by_Name": "\u0130sme G\u00f6re Ara",
"Search_by_Code_Voucher": "Kod Makbuzuna G\u00f6re Ara",
"Search": "Arama",
"Select_a_customer": "Bir m\u00fc\u015fteri se\u00e7in",
"Select_Routers": "Router'lar\u0131 Se\u00e7",
"Select_Plans": "Planlar\u0131 Se\u00e7",
"Select_Pool": "Havuz Se\u00e7",
"Hrs": "Saat",
"Mins": "Dk",
"Days": "G\u00fcn",
"Months": "Ay",
"Add_Language": "Dil Ekle",
"Language_Name": "Dil ad\u0131",
"Folder_Name": "Klas\u00f6r ad\u0131",
"Translator": "\u00c7evirmen",
"Language_Name_Already_Exist": "Dil Ad\u0131 Zaten Var",
"Payment_Gateway": "Payment Gateway",
"Community": "Community",
"1_user_can_be_used_for_many_devices_": "1 user can be used for many devices?",
"Cannot_be_change_after_saved": "Cannot be change after saved",
"Explain_Coverage_of_router": "Jelaskan Cakupan wilayah hotspot",
"Name_of_Area_that_router_operated": "Nama Lokasi\/Wilayah Router beroperasi",
"Payment_Notification_URL__Recurring_Notification_URL__Pay_Account_Notification_URL": "Payment Notification URL, Recurring Notification URL, Pay Account Notification URL",
"Finish_Redirect_URL__Unfinish_Redirect_URL__Error_Redirect_URL": "Finish Redirect URL, Unfinish Redirect URL, Error Redirect URL",
"Status": "Status",
"Plan_Not_found": "Plan Not found",
"Failed_to_create_transaction_": "Failed to create transaction.",
"Seller_has_not_yet_setup_Xendit_payment_gateway": "Seller has not yet setup Xendit payment gateway",
"Admin_has_not_yet_setup_Xendit_payment_gateway__please_tell_admin": "Admin has not yet setup Xendit payment gateway, please tell admin",
"Buy_this__your_active_package_will_be_overwrite": "Buy this? your active package will be overwrite",
"You_already_have_unpaid_transaction__cancel_it_or_pay_it_": "You already have unpaid transaction, cancel it or pay it.",
"Transaction_Not_found": "Transaction Not found",
"Cancel_it_": "Cancel it?",
"expired": "expired",
"Check_for_Payment": "Check for Payment",
"Transaction_still_unpaid_": "Transaction still unpaid.",
"Paid_Date": "Paid Date",
"Transaction_has_been_paid_": "Transaction has been paid.",
"PAID": "PAID",
"CANCELED": "CANCELED",
"UNPAID": "UNPAID",
"PAY_NOW": "PAY NOW",
"Buy_Hotspot_Plan": "Buy Hotspot Plan",
"Buy_PPOE_Plan": "Buy PPOE Plan",
"Package": "Package",
"Order_Internet_Package": "Order Internet Package",
"Unknown_Command_": "Unknown Command.",
"Checking_payment": "Checking payment",
"Create_Transaction_Success": "Create Transaction Success",
"You_have_unpaid_transaction": "You have unpaid transaction",
"TripayPayment_Channel": "TripayPayment Channel",
"Payment_Channel": "Payment Channel",
"Payment_check_failed_": "Payment check failed.",
"Order_Package": "Order Package",
"Transactions": "Transactions",
"Payments": "Payments",
"History": "History",
"Order_History": "Order History",
"Gateway": "Gateway",
"Date_Done": "Date Done",
"Unpaid_Order": "Unpaid Order",
"Payment_Gateway_Not_Found": "Payment Gateway Not Found",
"Payment_Gateway_saved_successfully": "Payment Gateway saved successfully",
"ORDER": "ORDER",
"Package_History": "Package History",
"Buy_History": "Buy History",
"Activation_History": "Activation History",
"Buy_Package": "Buy Package",
"Email": "Email",
"Company_Footer": "Company Footer",
"Will_show_below_user_pages": "Will show below user pages",
"Request_OTP": "Request OTP",
"Verification_Code": "Verification Code",
"SMS_Verification_Code": "SMS Verification Code",
"Please_enter_your_email_address": "Please enter your email address",
"Failed_to_create_Paypal_transaction_": "Failed to create Paypal transaction.",
"Plugin": "Plugin",
"Plugin_Manager": "Plugin Manager",
"User_Notification": "User Notification",
"Expired_Notification": "Expired Notification",
"User_will_get_notification_when_package_expired": "User will get notification when package expired",
"Expired_Notification_Message": "Expired Notification Message",
"Payment_Notification": "Payment Notification",
"User_will_get_invoice_notification_when_buy_package_or_package_refilled": "User will get invoice notification when buy package or package refilled",
"Current_IP": "Current IP",
"Current_MAC": "Current MAC",
"Login_Status": "Login Status",
"Login_Request_successfully": "Login Request successfully",
"Logout_Request_successfully": "Logout Request successfully",
"Disconnect_Internet_": "Disconnect Internet?",
"Not_Online__Login_now_": "Not Online, Login now?",
"You_are_Online__Logout_": "You are Online, Logout?",
"Connect_to_Internet_": "Connect to Internet?",
"Your_account_not_connected_to_internet": "Your account not connected to internet",
"Balance": "Balance",
"Balance_System": "Balance System",
"Enable_System": "Enable System",
"Allow_Transfer": "Allow Transfer",
"Telegram_Notification": "Telegram Notification",
"SMS_OTP_Registration": "SMS OTP Registration",
"Whatsapp_Notification": "Whatsapp Notification",
"Tawk_to_Chat_Widget": "Tawk.to Chat Widget",
"Invoice": "Invoice",
"Country_Code_Phone": "Country Code Phone",
"Voucher_activation_menu_will_be_hidden": "Voucher activation menu will be hidden",
"Customer_can_deposit_money_to_buy_voucher": "Customer can deposit money to buy voucher",
"Allow_balance_transfer_between_customers": "Allow balance transfer between customers",
"Failed_to_create_transaction__": "Failed to create transaction. ",
"Failed_to_check_status_transaction__": "Failed to check status transaction. ",
"Disable_Voucher": "Disable Voucher",
"Reminder_Notification": "Reminder Notification",
"Reminder_Notification_Message": "Reminder Notification Message",
"Reminder_7_days": "Reminder 7 days",
"Reminder_3_days": "Reminder 3 days",
"Reminder_1_day": "Reminder 1 day",
"PPPOE_Password": "PPPOE Password",
"User_Cannot_change_this__only_admin__if_it_Empty_it_will_use_user_password": "User Cannot change this, only admin. if it Empty it will use user password",
"Invoice_Balance_Message": "Invoice Balance Message",
"Invoice_Notification_Payment": "Invoice Notification Payment",
"Balance_Notification_Payment": "Balance Notification Payment",
"Balance_Plans": "Balance Plans",
"Buy_Balance": "Buy Balance",
"Price": "Price",
"Validity": "Validity",
"Disable_auto_renewal_": "Disable auto renewal?",
"Auto_Renewal_On": "Auto Renewal On",
"Enable_auto_renewal_": "Enable auto renewal?",
"Auto_Renewal_Off": "Auto Renewal Off",
"Refill_Balance": "Refill Balance",
"Invoice_Footer": "Invoice Footer",
"Pay_With_Balance": "Pay With Balance",
"Pay_this_with_Balance__your_active_package_will_be_overwrite": "Pay this with Balance? your active package will be overwrite",
"Success_to_buy_package": "Success to buy package",
"Auto_Renewal": "Auto Renewal",
"View": "View",
"Back": "Back",
"Active": "Active",
"Transfer_Balance": "Transfer Balance",
"Send_your_balance_": "Send your balance?",
"Send": "Send",
"Cannot_send_to_yourself": "Cannot send to yourself",
"Sending_balance_success": "Sending balance success",
"From": "From",
"To": "To",
"insufficient_balance": "insufficient balance",
"Send_Balance": "Send Balance",
"Received_Balance": "Received Balance",
"Minimum_Balance_Transfer": "Minimum Balance Transfer",
"Minimum_Transfer": "Minimum Transfer",
"Company_Logo": "Company Logo",
"Expired_IP_Pool": "Expired IP Pool",
"Proxy": "Proxy",
"Proxy_Server": "Proxy Server",
"Proxy_Server_Login": "Proxy Server Login",
"Hotspot_Plan": "Hotspot Plan",
"PPPOE_Plan": "PPPOE Plan",
"UNKNOWN": "UNKNOWN",
"Are_You_Sure_": "Are You Sure?",
"Success_to_send_package": "Success to send package",
"Target_has_active_plan__different_with_current_plant_": "Target has active plan, different with current plant.",
"Recharge_a_friend": "Recharge a friend",
"Buy_for_friend": "Buy for friend",
"Buy_this_for_friend_account_": "Buy this for friend account?",
"Review_package_before_recharge": "Review package before recharge",
"Activate": "Activate",
"Deactivate": "Deactivate",
"Sync": "Sync",
"Failed_to_create_PaymeTrust_transaction_": "Failed to create PaymeTrust transaction.",
"Location": "Location",
"Voucher_Format": "Voucher Format",
"Service_Type": "Service Type",
"Others": "Others",
"PPPoE": "PPPoE",
"Hotspot": "Hotspot",
"Monthly_Registered_Customers": "Monthly Registered Customers",
"Total_Monthly_Sales": "Total Monthly Sales",
"Active_Users": "Active Users"
}

View File

@ -1,388 +0,0 @@
<?php
/*
-----------------------------------
Language Name: Turkish
Contributor: Goktug Bogac OGEL
Web:
Email: goktugogel@gmail.com
------------------------------------
*/
$_L['Login'] = 'Oturum aç';
$_L['Register'] = 'Kayıt olmak';
$_L['Announcement'] = 'Duyuru';
$_L['Registration_Info'] = 'Kayıt Bilgisi';
$_L['Register_Voucher_Failed'] = 'Kupon bulunamadı, lütfen kayıt olun ve kayıt olun';
$_L['Register_Success'] = 'Kayıt Başarılı! Şimdi giriş yapabilirsiniz ';
$_L['Sign_In_Member'] = 'Üye Paneli\'ne giriş yapın';
$_L['Register_Member'] = 'Üye olarak kayıt ol';
$_L['Sign_In_Admin'] = 'Yönetici Paneli Girişi';
$_L['Logo'] = 'PHPNuxBill';
$_L['Username'] = 'Kullanıcı adı';
$_L['Password'] = 'Parola';
$_L['PasswordsNotMatch'] = 'Parolalar eşleşmiyor';
$_L['account_already_exist'] = 'Hesap zaten aksanlı';
$_L['Manage'] = 'Yönet';
$_L['Submit'] = 'Gönder';
$_L['Save'] = 'Değişiklikleri Kaydet';
$_L['Cancel'] = 'İptal etmek';
$_L['Edit'] = 'Düzenle';
$_L['Delete'] = 'Sil';
$_L['Welcome'] = 'Hoşgeldiniz';
$_L['Created_Successfully'] = 'Veriler Başarıyla Oluşturuldu ';
$_L['Updated_Successfully'] = 'Veriler Başarıyla Güncellendi';
$_L['Delete_Successfully'] = 'Veri Başarıyla Silindi';
$_L['Dashboard'] = 'Dashboard';
$_L['Search_Contact'] = 'Müşteri Ara ...';
$_L['My_Account'] = 'Hesabım';
$_L['My_Profile'] = 'Benim profilim';
$_L['Settings'] = 'Ayarlar';
$_L['Edit_Profile'] = 'Profili Düzenle';
$_L['Change_Password'] = 'Şifre değiştir';
$_L['Logout'] = ıkış Yap';
$_L['Services'] = 'Hizmetler';
$_L['Bandwidth_Plans'] = 'Bant Genişliği Planları';
$_L['BW_Name'] = 'Bant Genişliği Adı';
$_L['New_Bandwidth'] = 'Yeni Bant Genişliği';
$_L['Edit_Bandwidth'] = 'Bant Genişliğini Düzenle';
$_L['Add_Bandwidth'] = 'Yeni Bant Genişliği Ekle';
$_L['Rate_Download'] = 'İndirme Oranı';
$_L['Rate_Upload'] = 'Ücret Yükleme';
$_L['BW_already_exist'] = 'Bandwidth Adı Zaten Var';
$_L['Hotspot_Plans'] = 'Hotspot Planları';
$_L['PPPOE_Plans'] = 'PPPOE Planları';
$_L['Plan_Name'] = 'Plan Adı';
$_L['New_Plan'] = 'Yeni Hizmet Planı';
$_L['Add_Plan'] = 'Hizmet Planı Ekle';
$_L['Edit_Plan'] = 'Hizmet Planını Düzenle';
$_L['Plan_already_exist'] = 'Planı İsmi Zaten Var';
$_L['Plan_Type'] = 'Plan Türü';
$_L['Plan_Price'] = 'Plan Fiyatı';
$_L['Limit_Type'] = 'Sınır Tipi';
$_L['Unlimited'] = 'Sınırsız';
$_L['Limited'] = 'Sınırlı';
$_L['Time_Limit'] = 'Zaman sınırı';
$_L['Data_Limit'] = 'Veri Sınırı';
$_L['Both_Limit'] = 'Her İki Sınır';
$_L['Plan_Validity'] = 'Plan Geçerliliği';
$_L['Select_BW'] = 'Bant Genişliğini Seç';
$_L['Shared_Users'] = 'Paylaşılan Kullanıcılar';
$_L['user_type_help'] = 'Ayarlar\'a erişimi devre dışı bırakmak için Kullanıcı Türü Satışlarını Seç';
$_L['Current_Password'] = 'Şimdiki Şifre';
$_L['New_Password'] = 'Yeni Şifre';
$_L['Administrator'] = 'Yönetici';
$_L['Sales'] = 'Satış';
$_L['Member'] = 'Üye';
$_L['Confirm_New_Password'] = 'Yeni şifreyi onayla';
$_L['Confirm_Password'] = 'Şifreyi Onayla';
$_L['Full_Name'] = 'Ad Soyad';
$_L['User_Type'] = 'Kullanıcı tipi';
$_L['Address'] = 'Adres';
$_L['Created_On'] = 'Oluşturuldu';
$_L['Expires_On'] = 'Tarihinde sona eriyor';
$_L['Phone_Number'] = 'Telefon numarası';
$_L['User_Delete_Ok'] = 'Kullanıcı Başarıyla Silindi';
$_L['Full_Administrator'] = 'Tam Yönetici';
$_L['password_change_help'] = 'Şifreyi değiştirmemek için boş tutun';
$_L['currency_help'] = 'Para birimi kodunu göstermek istemiyorsanız boş bırakın';
$_L['Theme_Style'] = 'Tema Stili';
$_L['Theme_Color'] = 'Tema Rengi';
$_L['Default_Language'] = 'Varsayılan dil';
$_L['Network'] = 'Ağ';
$_L['Routers'] = 'Yönlendiriciler';
$_L['Pool'] = 'IP Havuzu';
$_L['New_Router'] = 'Yeni Yönlendirici';
$_L['Add_Router'] = 'Router ekle';
$_L['Edit_Router'] = 'Yönlendiriciyi Düzenle';
$_L['Router_Name'] = 'Yönlendirici Adı';
$_L['IP_Address'] = 'IP adresi';
$_L['Router_Secret'] = 'Yönlendirici Sırrı';
$_L['Description'] = 'Açıklama';
$_L['Router_already_exist'] = 'IP Router Zaten Var';
$_L['Pool_Name'] = 'İsim Havuzu';
$_L['Range_IP'] = 'Aralık İP';
$_L['New_Pool'] = 'Yeni Havuz';
$_L['Add_Pool'] = 'Havuz ekle';
$_L['Edit_Pool'] = 'Havuzu Düzenle';
$_L['Pool_already_exist'] = 'Havuz Adı Zaten Var';
$_L['Prepaid'] = 'Ön Ödemeli';
$_L['Prepaid_User'] = 'Ön Ödemeli Kullanıcılar';
$_L['Prepaid_Vouchers'] = 'Ön Ödemeli Kuponlar';
$_L['Refill_Account'] = 'Hesabı Yenile';
$_L['Recharge_Account'] = 'Hesabı Yeniden Şarj Et';
$_L['Select_Account'] = 'Hesap Seç';
$_L['Service_Plan'] = 'Servis planı';
$_L['Recharge'] = 'Şarj';
$_L['Method'] = 'Yöntem';
$_L['account_created_successfully'] = 'Hesap başarıyla oluşturuldu';
$_L['Database_Status'] = 'Veritabanı Durumu';
$_L['Total_Database_Size'] = 'Toplam Veritabanı Boyutu';
$_L['Download_Database_Backup'] = 'Veritabanı Yedekleme İndir';
$_L['Table_Name'] = 'Tablo ismi';
$_L['Rows'] = 'Satır';
$_L['Size'] = 'Boyut';
$_L['Customers'] = 'Müşteri';
$_L['Add_Contact'] = 'Yeni İletişim Ekle';
$_L['Edit_Contact'] = 'İletişim Düzenle';
$_L['List_Contact'] = 'Liste İrtibat';
$_L['Manage_Accounts'] = 'Kişiyi Yönetin';
$_L['Reports'] = 'Raporlar';
$_L['Daily_Report'] = 'Günlük raporlar';
$_L['Period_Reports'] = 'Dönem Raporları';
$_L['All_Transactions'] = 'Tüm İşlemler';
$_L['Total_Income'] = 'Toplam gelir';
$_L['All_Transactions_at_Date'] = 'Tarihte Tüm İşlemler';
$_L['Export_for_Print'] = 'Baskı için İhracat';
$_L['Print'] = 'Baskı';
$_L['Export_to_PDF'] = 'PDF\'ye Aktar';
$_L['Click_Here_to_Print'] = 'Yazdırmak için Buraya Tıklayın';
$_L['You_can_use_html_tag'] = 'Html etiketini kullanabilirsiniz';
$_L['Date_Format'] = 'Tarih formatı';
$_L['Income_Today'] = 'Gelir Bugün';
$_L['Income_This_Month'] = 'Bu Ay Gelir';
$_L['Users_Active'] = 'Kullanıcılar Aktif';
$_L['Total_Users'] = 'Toplam Kullanıcı';
$_L['Users'] = 'Kullanıcılar';
$_L['Edit_User'] = 'Kullanıcıyı düzenle';
$_L['Last_Login'] = 'Son giriş';
$_L['Administrator_Users'] = 'Yönetici Kullanıcıları';
$_L['Manage_Administrator'] = 'Yönetici Yönet';
$_L['Add_New_Administrator'] = 'Yeni Yönetici Ekleyin';
$_L['Localisation'] = 'Lokalizasyon';
$_L['Backup_Restore'] = 'Yedekleme / Geri';
$_L['General_Settings'] = 'Genel Ayarlar';
$_L['Date'] = 'Tarih';
$_L['Login_Successful'] = 'Giriş başarılı';
$_L['Failed_Login'] = 'Başarısız oturum açma';
$_L['Settings_Saved_Successfully'] = 'Ayarlar başarıyla kaydedildi';
$_L['User_Updated_Successfully'] = 'Kullanıcı Başarıyla Güncellendi';
$_L['User_Expired_Today'] = 'Kullanıcı Süresi Doldu, Bugün';
$_L['Activity_Log'] = 'Etkinlik Günlüğü';
$_L['View_Reports'] = 'Raporları Görüntüle';
$_L['View_All'] = 'Hepsini gör';
$_L['Number_of_Vouchers'] = 'Kuponların Sayısı';
$_L['Length_Code'] = 'Uzunluk Kodu';
$_L['Code_Voucher'] = 'Kod Makbuzu';
$_L['Voucher'] = 'Fiş';
$_L['Voucher_Hotspot'] = 'Hotspot Kuponu';
$_L['Status_Voucher'] = 'Durum Makbuzu';
$_L['Add_Voucher'] = 'Kupon Ekle';
$_L['Voucher_Successfully'] = 'Kuponları başarıyla oluştur';
$_L['Generate'] = 'Genel';
$_L['Print_Info'] = 'Yanyana yazdırırsanız, kesmesi daha kolay olacaktır.';
$_L['From_Date'] = 'İtibaren';
$_L['To_Date'] = 'Bugüne kadar';
$_L['New_Service'] = 'Yeni Servis';
$_L['Type'] = 'Tür';
$_L['Finish'] = 'Bitiş';
$_L['App_Name'] = 'Uygulama Adı / Şirket Adı';
$_L['App_Name_Help_Text'] = 'Bu İsim Başlıkta gösterilecek';
$_L['Next'] = 'Sonraki';
$_L['Last'] = 'Son';
$_L['Timezone'] = 'Saat dilimi';
$_L['Decimal_Point'] = 'Ondalık nokta';
$_L['Thousands_Separator'] = 'Bin Ayırıcı';
$_L['Currency_Code'] = 'Para Birimi Kodu';
$_L['Order_Voucher'] = 'Sipariş Makbuzu';
$_L['Voucher_Activation'] = 'Kupon Aktivasyonu';
$_L['List_Activated_Voucher'] = 'Aktif Fiş Listesi';
$_L['Enter_Voucher_Code'] = 'Kupon kodunu buraya girin';
$_L['Private_Message'] = 'Özel mesaj';
$_L['Inbox'] = 'Gelen kutusu';
$_L['Outbox'] = 'Giden';
$_L['Compose'] = 'Oluşturma';
$_L['Send_to'] = 'Gönderildi';
$_L['Title'] = 'Başlık';
$_L['Message'] = 'Mesaj';
$_L['Account_Information'] = 'Hesap Bilgileriniz';
$_L['Welcome_Text_User'] = 'Panel Üyeleri sayfasına hoş geldiniz, bu sayfada şunları yapabilirsiniz:';
$_L['Welcome_Text_Admin'] = '<b> PHPNuxBill </ b>, PHP ve Mikrotik API kullanılarak Mikrotik için bir faturalandırma Hotspot ve PPPOE olup, yönlendiriciyle iletişim kurar. Bu uygulamayla daha fazla kazanç elde ederseniz, lütfen bize bağış yapın. <br> Projeyi <a href="https://github.com/hotspotbilling/phpnuxbill" target="_blank"> buradan izleyin </a> ';
$_L['Invalid_Username_or_Password'] = 'Geçersiz kullanıcı adı veya şifre';
$_L['Do_Not_Access'] = 'Bu sayfaya erişim izniniz yok';
$_L['Incorrect_Current_Password'] = 'Yanlış Geçerli Şifre';
$_L['Password_Changed_Successfully'] = 'Şifre başarıyla değiştirildi, Lütfen tekrar giriş yapın';
$_L['All_field_is_required'] = 'Tüm alan gerekli';
$_L['Voucher_Not_Valid'] = 'Kupon Geçerli Değil';
$_L['Activation_Vouchers_Successfully'] = 'Aktivasyon Kuponları Başarıyla';
$_L['Data_Not_Found'] = 'Veri bulunamadı';
$_L['Search_by_Username'] = 'Kullanıcı Adına Göre Ara';
$_L['Search_by_Name'] = 'İsme Göre Ara';
$_L['Search_by_Code'] = 'Kod Makbuzuna Göre Ara';
$_L['Search'] = 'Arama';
$_L['Select_Customer'] = 'Bir müşteri seçin';
$_L['Select_Routers'] = 'Router\'ları Seç';
$_L['Select_Plans'] = 'Planları Seç';
$_L['Select_Pool'] = 'Havuz Seç';
$_L['Hrs'] = 'Saat';
$_L['Mins'] = 'Dk';
$_L['Days'] = 'Gün';
$_L['Months'] = 'Ay';
$_L['Add_Language'] = 'Dil Ekle';
$_L['Name_Lang'] = 'Dil adı';
$_L['Folder_Lang'] = 'Klasör adı';
$_L['Translator'] = 'Çevirmen';
$_L['Lang_already_exist'] = 'Dil Adı Zaten Var';
$_L['Payment_Gateway'] = 'Payment Gateway';
$_L['Community'] = 'Community';
$_L['1_user_can_be_used_for_many_devices'] = '1 user can be used for many devices?';
$_L['Cannot_be_change_after_saved'] = 'Cannot be change after saved';
$_L['Explain_Coverage_of_router'] = 'Jelaskan Cakupan wilayah hotspot';
$_L['Name_of_Area_that_router_operated'] = 'Nama Lokasi/Wilayah Router beroperasi';
$_L['Payment_Notification_URL_Recurring_Notification_URL_Pay_Account_Notification_URL'] = 'Payment Notification URL, Recurring Notification URL, Pay Account Notification URL';
$_L['Finish_Redirect_URL_Unfinish_Redirect_URL_Error_Redirect_URL'] = 'Finish Redirect URL, Unfinish Redirect URL, Error Redirect URL';
$_L['Status'] = 'Status';
$_L['Plan_Not_found'] = 'Plan Not found';
$_L['Failed_to_create_transaction'] = 'Failed to create transaction.';
$_L['Seller_has_not_yet_setup_Xendit_payment_gateway'] = 'Seller has not yet setup Xendit payment gateway';
$_L['Admin_has_not_yet_setup_Xendit_payment_gateway_please_tell_admin'] = 'Admin has not yet setup Xendit payment gateway, please tell admin';
$_L['Buy_this_your_active_package_will_be_overwrite'] = 'Buy this? your active package will be overwrite';
$_L['You_already_have_unpaid_transaction_cancel_it_or_pay_it'] = 'You already have unpaid transaction, cancel it or pay it.';
$_L['Transaction_Not_found'] = 'Transaction Not found';
$_L['Cancel_it'] = 'Cancel it?';
$_L['expired'] = 'expired';
$_L['Check_for_Payment'] = 'Check for Payment';
$_L['Transaction_still_unpaid'] = 'Transaction still unpaid.';
$_L['Paid_Date'] = 'Paid Date';
$_L['Transaction_has_been_paid'] = 'Transaction has been paid.';
$_L['PAID'] = 'PAID';
$_L['CANCELED'] = 'CANCELED';
$_L['UNPAID'] = 'UNPAID';
$_L['PAY_NOW'] = 'PAY NOW';
$_L['Buy_Hotspot_Plan'] = 'Buy Hotspot Plan';
$_L['Buy_PPOE_Plan'] = 'Buy PPOE Plan';
$_L['Package'] = 'Package';
$_L['Order_Internet_Package'] = 'Order Internet Package';
$_L['Unknown_Command'] = 'Unknown Command.';
$_L['Checking_payment'] = 'Checking payment';
$_L['Create_Transaction_Success'] = 'Create Transaction Success';
$_L['You_have_unpaid_transaction'] = 'You have unpaid transaction';
$_L['TripayPayment_Channel'] = 'TripayPayment Channel';
$_L['Payment_Channel'] = 'Payment Channel';
$_L['Payment_check_failed'] = 'Payment check failed.';
$_L['Order_Package'] = 'Order Package';
$_L['Transactions'] = 'Transactions';
$_L['Payments'] = 'Payments';
$_L['History'] = 'History';
$_L['Order_History'] = 'Order History';
$_L['Gateway'] = 'Gateway';
$_L['Date_Done'] = 'Date Done';
$_L['Unpaid_Order'] = 'Unpaid Order';
$_L['Payment_Gateway_Not_Found'] = 'Payment Gateway Not Found';
$_L['Payment_Gateway_saved_successfully'] = 'Payment Gateway saved successfully';
$_L['ORDER'] = 'ORDER';
$_L['Package_History'] = 'Package History';
$_L['Buy_History'] = 'Buy History';
$_L['Activation_History'] = 'Activation History';
$_L['Buy_Package'] = 'Buy Package';
$_L['Email'] = 'Email';
$_L['Company_Footer'] = 'Company Footer';
$_L['Will_show_below_user_pages'] = 'Will show below user pages';
$_L['Request_OTP'] = 'Request OTP';
$_L['Verification_Code'] = 'Verification Code';
$_L['SMS_Verification_Code'] = 'SMS Verification Code';
$_L['Please_enter_your_email_address'] = 'Please enter your email address';
$_L['Failed_to_create_Paypal_transaction'] = 'Failed to create Paypal transaction.';
$_L['Plugin'] = 'Plugin';
$_L['Plugin_Manager'] = 'Plugin Manager';
$_L['User_Notification'] = 'User Notification';
$_L['Expired_Notification'] = 'Expired Notification';
$_L['User_will_get_notification_when_package_expired'] = 'User will get notification when package expired';
$_L['Expired_Notification_Message'] = 'Expired Notification Message';
$_L['bnameb_will_be_replaced_with_Customer_Name_bpackageb_will_be_replaced_with_Package_name'] = '<b>[[name]]</b> will be replaced with Customer Name. <b>[[package]]</b> will be replaced with Package name.';
$_L['Payment_Notification'] = 'Payment Notification';
$_L['User_will_get_invoice_notification_when_buy_package_or_package_refilled'] = 'User will get invoice notification when buy package or package refilled';
$_L['Current_IP'] = 'Current IP';
$_L['Current_MAC'] = 'Current MAC';
$_L['Login_Status'] = 'Login Status';
$_L['Login_Request_successfully'] = 'Login Request successfully';
$_L['Logout_Request_successfully'] = 'Logout Request successfully';
$_L['Disconnect_Internet'] = 'Disconnect Internet?';
$_L['Not_Online_Login_now'] = 'Not Online, Login now?';
$_L['You_are_Online_Logout'] = 'You are Online, Logout?';
$_L['Connect_to_Internet'] = 'Connect to Internet?';
$_L['Your_account_not_connected_to_internet'] = 'Your account not connected to internet';
$_L['Balance'] = 'Balance';
$_L['Balance_System'] = 'Balance System';
$_L['Enable_System'] = 'Enable System';
$_L['Allow_Transfer'] = 'Allow Transfer';
$_L['Telegram_Notification'] = 'Telegram Notification';
$_L['SMS_OTP_Registration'] = 'SMS OTP Registration';
$_L['Whatsapp_Notification'] = 'Whatsapp Notification';
$_L['Tawkto_Chat_Widget'] = 'Tawk.to Chat Widget';
$_L['Invoice'] = 'Invoice';
$_L['Country_Code_Phone'] = 'Country Code Phone';
$_L['Voucher_activation_menu_will_be_hidden'] = 'Voucher activation menu will be hidden';
$_L['Customer_can_deposit_money_to_buy_voucher'] = 'Customer can deposit money to buy voucher';
$_L['Allow_balance_transfer_between_customers'] = 'Allow balance transfer between customers';
$_L['Failed_to_create_transaction_'] = 'Failed to create transaction. ';
$_L['Failed_to_check_status_transaction_'] = 'Failed to check status transaction. ';
$_L['Disable_Voucher'] = 'Disable Voucher';
$_L['Reminder_Notification'] = 'Reminder Notification';
$_L['Reminder_Notification_Message'] = 'Reminder Notification Message';
$_L['Reminder_7_days'] = 'Reminder 7 days';
$_L['Reminder_3_days'] = 'Reminder 3 days';
$_L['Reminder_1_day'] = 'Reminder 1 day';
$_L['PPPOE_Password'] = 'PPPOE Password';
$_L['User_Cannot_change_this_only_admin_if_it_Empty_it_will_use_user_password'] = 'User Cannot change this, only admin. if it Empty it will use user password';
$_L['Invoice_Balance_Message'] = 'Invoice Balance Message';
$_L['Invoice_Notification_Payment'] = 'Invoice Notification Payment';
$_L['Balance_Notification_Payment'] = 'Balance Notification Payment';
$_L['Balance_Plans'] = 'Balance Plans';
$_L['Buy_Balance'] = 'Buy Balance';
$_L['Price'] = 'Price';
$_L['Validity'] = 'Validity';
$_L['Disable_auto_renewal'] = 'Disable auto renewal?';
$_L['Auto_Renewal_On'] = 'Auto Renewal On';
$_L['Enable_auto_renewal'] = 'Enable auto renewal?';
$_L['Auto_Renewal_Off'] = 'Auto Renewal Off';
$_L['Refill_Balance'] = 'Refill Balance';
$_L['Invoice_Footer'] = 'Invoice Footer';
$_L['Pay_With_Balance'] = 'Pay With Balance';
$_L['Pay_this_with_Balance_your_active_package_will_be_overwrite'] = 'Pay this with Balance? your active package will be overwrite';
$_L['Success_to_buy_package'] = 'Success to buy package';
$_L['Auto_Renewal'] = 'Auto Renewal';
$_L['View'] = 'View';
$_L['Back'] = 'Back';
$_L['Active'] = 'Active';
$_L['Transfer_Balance'] = 'Transfer Balance';
$_L['Send_your_balance'] = 'Send your balance?';
$_L['Send'] = 'Send';
$_L['Cannot_send_to_yourself'] = 'Cannot send to yourself';
$_L['Sending_balance_success'] = 'Sending balance success';
$_L['From'] = 'From';
$_L['To'] = 'To';
$_L['insufficient_balance'] = 'insufficient balance';
$_L['Send_Balance'] = 'Send Balance';
$_L['Received_Balance'] = 'Received Balance';
$_L['Minimum_Balance_Transfer'] = 'Minimum Balance Transfer';
$_L['Minimum_Transfer'] = 'Minimum Transfer';
$_L['Company_Logo'] = 'Company Logo';
$_L['Expired_IP_Pool'] = 'Expired IP Pool';
$_L['Proxy'] = 'Proxy';
$_L['Proxy_Server'] = 'Proxy Server';
$_L['Proxy_Server_Login'] = 'Proxy Server Login';
$_L['Hotspot_Plan'] = 'Hotspot Plan';
$_L['PPPOE_Plan'] = 'PPPOE Plan';
$_L['UNKNOWN'] = 'UNKNOWN';
$_L['Are_You_Sure'] = 'Are You Sure?';
$_L['Success_to_send_package'] = 'Success to send package';
$_L['Target_has_active_plan_different_with_current_plant'] = 'Target has active plan, different with current plant.';
$_L['Recharge_a_friend'] = 'Recharge a friend';
$_L['Buy_for_friend'] = 'Buy for friend';
$_L['Buy_this_for_friend_account'] = 'Buy this for friend account?';
$_L['Review_package_before_recharge'] = 'Review package before recharge';
$_L['Activate'] = 'Activate';
$_L['Deactivate'] = 'Deactivate';
$_L['Sync'] = 'Sync';
$_L['Failed_to_create_PaymeTrust_transaction'] = 'Failed to create PaymeTrust transaction.';
$_L['Location'] = 'Location';
$_L['Voucher_Format'] = 'Voucher Format';
$_L['Service_Type'] = 'Service Type';
$_L['Others'] = 'Others';
$_L['PPPoE'] = 'PPPoE';
$_L['Hotspot'] = 'Hotspot';
$_L['Monthly_Registered_Customers'] = 'Monthly Registered Customers';
$_L['Total_Monthly_Sales'] = 'Total Monthly Sales';
$_L['Active_Users'] = 'Active Users';

View File

@ -1,8 +0,0 @@
<html>
<head>
<title>403 Forbidden</title>
</head>
<body>
<p>Directory access is forbidden.</p>
</body>
</html>

View File

@ -11,35 +11,63 @@
"ALTER TABLE `tbl_transactions` CHANGE `type` `type` ENUM('Hotspot','PPPOE','Balance') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;",
"ALTER TABLE `tbl_customers` ADD `auto_renewal` tinyint(1) NOT NULL DEFAULT 1 COMMENT 'Auto renewall using balance' AFTER `balance`;"
],
"2023.8.23" : [
"2023.8.23": [
"ALTER TABLE `tbl_customers` CHANGE `pppoe_password` `pppoe_password` VARCHAR(45) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT 'For PPPOE Login';"
],
"2023.8.28" : [
"2023.8.28": [
"ALTER TABLE `tbl_user_recharges` ADD `recharged_time` time NOT NULL DEFAULT '00:00:00' AFTER `recharged_on`;",
"ALTER TABLE `tbl_transactions` ADD `recharged_time` time NOT NULL DEFAULT '00:00:00' AFTER `recharged_on`;"
],
"2023.9.5" : [
"2023.9.5": [
"DROP TABLE `tbl_language`;",
"ALTER TABLE `tbl_plans` ADD `pool_expired` varchar(40) NOT NULL DEFAULT '' AFTER `pool`;"
],
"2023.9.27" : [
"2023.9.27": [
"ALTER TABLE `tbl_plans` CHANGE `type` `type` ENUM('Hotspot','PPPOE','Balance','Radius') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;",
"ALTER TABLE `tbl_transactions` CHANGE `type` `type` ENUM('Hotspot','PPPOE','Balance','Radius') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;"
],
"2023.9.28" : [
"2023.9.28": [
"ALTER TABLE `tbl_plans` CHANGE `type` `type` ENUM('Hotspot','PPPOE','Balance') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;",
"ALTER TABLE `tbl_transactions` CHANGE `type` `type` ENUM('Hotspot','PPPOE','Balance') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;"
],
"2023.10.1" : [
"2023.10.1": [
"ALTER TABLE `tbl_plans` ADD `is_radius` TINYINT(1) NOT NULL DEFAULT '0' COMMENT '1 is radius' AFTER `routers`; "
],
"2023.10.24" : [
"2023.10.24": [
"ALTER TABLE `nas` ADD `routers` VARCHAR(32) NOT NULL DEFAULT '' AFTER `description`;"
],
"2023.12.15": [
"ALTER TABLE `tbl_customers` ADD `service_type` ENUM('Hotspot','PPPoE','Others') DEFAULT 'Others' COMMENT 'For selecting user type' AFTER `balance`;"
],
"2024.1.11": [
"2024.1.11": [
"ALTER TABLE `tbl_plans` ADD `allow_purchase` ENUM('yes','no') DEFAULT 'yes' COMMENT 'allow to show package in buy package page' AFTER `enabled`;"
],
"2024.2.7": [
"ALTER TABLE `tbl_voucher` ADD `generated_by` INT NOT NULL DEFAULT '0' COMMENT 'id admin' AFTER `status`;",
"ALTER TABLE `tbl_users` ADD `root` INT NOT NULL DEFAULT '0' COMMENT 'for sub account' AFTER `id`;"
],
"2024.2.12": [
"ALTER TABLE `tbl_users` CHANGE `user_type` `user_type` ENUM('SuperAdmin','Admin','Report','Agent','Sales') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;"
],
"2024.2.15": [
"ALTER TABLE `tbl_users` CHANGE `password` `password` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL;",
"ALTER TABLE `tbl_users` ADD `phone` VARCHAR(32) NOT NULL DEFAULT '' AFTER `password`, ADD `email` VARCHAR(128) NOT NULL DEFAULT '' AFTER `phone`, ADD `city` VARCHAR(64) NOT NULL DEFAULT '' COMMENT 'kota' AFTER `email`, ADD `subdistrict` VARCHAR(64) NOT NULL DEFAULT '' COMMENT 'kecamatan' AFTER `city`, ADD `ward` VARCHAR(64) NOT NULL DEFAULT '' COMMENT 'kelurahan' AFTER `subdistrict`;"
],
"2024.2.16": [
"ALTER TABLE `tbl_customers` ADD `created_by` INT NOT NULL DEFAULT '0' AFTER `auto_renewal`;"
],
"2024.2.19": [
"CREATE TABLE `tbl_customers_fields` (`id` INT PRIMARY KEY AUTO_INCREMENT, `customer_id` INT NOT NULL, `field_name` VARCHAR(255) NOT NULL, `field_value` VARCHAR(255) NOT NULL, FOREIGN KEY (customer_id) REFERENCES tbl_customers(id));"
],
"2024.2.20" : [
"ALTER TABLE `tbl_plans` ADD `list_expired` VARCHAR(32) NOT NULL DEFAULT '' COMMENT 'address list' AFTER `pool_expired`;",
"ALTER TABLE `tbl_bandwidth` ADD `burst` VARCHAR(128) NOT NULL DEFAULT '' AFTER `rate_up_unit`;"
],
"2024.2.20.1" : [
"DROP TABLE IF EXISTS `tbl_customers_meta`;"
],
"2024.2.23" : [
"ALTER TABLE `tbl_transactions` ADD `admin_id` INT NOT NULL DEFAULT '1' AFTER `type`;",
"ALTER TABLE `tbl_user_recharges` ADD `admin_id` INT NOT NULL DEFAULT '1' AFTER `type`;"
]
}

View File

@ -4,7 +4,7 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<title>{$_title} - {$_L['Login']}</title>
<title>{$_title} - {Lang::T('Login')}</title>
<link rel="shortcut icon" href="ui/ui/images/logo.png" type="image/x-icon" />
<link rel="stylesheet" href="ui/ui/styles/bootstrap.min.css">
@ -19,20 +19,20 @@
<b>Nux</b>Billing
</div>
<div class="login-box-body">
<p class="login-box-msg">{$_L['Sign_In_Admin']}</p>
<p class="login-box-msg">{Lang::T('Enter Admin Area')}</p>
{if isset($notify)}
{$notify}
{/if}
<form action="{$_url}admin/post" method="post">
<div class="form-group has-feedback">
<input type="text" required class="form-control" name="username" placeholder="{$_L['Username']}">
<input type="text" required class="form-control" name="username" placeholder="{Lang::T('Username')}">
<span class="glyphicon glyphicon-user form-control-feedback"></span>
</div>
<div class="form-group has-feedback">
<input type="password" required class="form-control" name="password" placeholder="{$_L['Password']}">
<input type="password" required class="form-control" name="password" placeholder="{Lang::T('Password')}">
<span class="glyphicon glyphicon-lock form-control-feedback"></span>
</div>
<button type="submit" class="btn btn-primary btn-block btn-flat">{$_L['Login']}</button>
<button type="submit" class="btn btn-primary btn-block btn-flat">{Lang::T('Login')}</button>
</form>
</div>
</div>

47
ui/ui/alert.tpl Normal file
View File

@ -0,0 +1,47 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>{ucwords(Lang::T($type))} - {$_c['CompanyName']}</title>
<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
<link rel="shortcut icon" href="ui/ui/images/logo.png" type="image/x-icon" />
<link rel="stylesheet" href="ui/ui/styles/bootstrap.min.css">
<link rel="stylesheet" href="ui/ui/styles/modern-AdminLTE.min.css">
<meta http-equiv="refresh" content="3; url={$url}">
</head>
<body class="hold-transition lockscreen">
<div class="lockscreen-wrapper">
<div class="panel panel-{$type}">
<div class="panel-heading">{ucwords(Lang::T($type))}</div>
<div class="panel-body">
{$text}
</div>
<div class="panel-footer">
<a href="{$url}" id="button" class="btn btn-{$type} btn-block btn-block">{Lang::T('Click Here')} (3)</a>
</div>
</div>
<div class="lockscreen-footer text-center">
{$_c['CompanyName']}
</div>
</div>
<script>
var time = 3;
timer();
function timer() {
setTimeout(() => {
time--;
if (time > -1) {
document.getElementById("button").innerHTML = "{Lang::T('Click Here')} (" + time + ")";
timer();
}
}, 1000);
}
</script>
</body>
</html>

View File

@ -3,12 +3,12 @@
<div class="row">
<div class="col-sm-12 col-md-12">
<div class="panel panel-primary panel-hovered panel-stacked mb30">
<div class="panel-heading">{$_L['Localisation']}</div>
<div class="panel-heading">{Lang::T('Localisation')}</div>
<div class="panel-body">
<form class="form-horizontal" method="post" role="form" action="{$_url}settings/localisation-post">
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Timezone']}</label>
<label class="col-md-2 control-label">{Lang::T('Timezone')}</label>
<div class="col-md-6">
<select name="tzone" id="tzone" class="form-control">
{foreach $tlist as $value => $label}
@ -19,7 +19,7 @@
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Date_Format']}</label>
<label class="col-md-2 control-label">{Lang::T('Date Format')}</label>
<div class="col-md-6">
<select class="form-control" name="date_format" id="date_format">
<option value="d/m/Y" {if $_c['date_format'] eq 'd/m/Y'} selected="selected" {/if}>
@ -44,40 +44,48 @@
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Default_Language']}</label>
<label class="col-md-2 control-label">{Lang::T('Default Language')}</label>
<div class="col-md-6">
<select class="form-control" name="lan" id="lan">
{foreach $lani as $lanis}
<option value="{$lanis@key}" {if $_c['language'] eq $lanis@key} selected="selected" {/if}>
{$lanis@key}
</option>
{/foreach}
<option disabled>_________</option>
{foreach $lan as $lans}
<option value="{$lans}" {if $_c['language'] eq $lans} selected="selected" {/if}>{$lans}
<option value="{$lans@key}" {if $_c['language'] eq $lans@key} selected="selected" {/if}>
{$lans@key}
</option>
{/foreach}
</select>
</div>
<div class="col-md-4 help-block">
To add new Language, just add the folder, it will automatically detected
<a href="{$_url}settings/language">{Lang::T('Language Editor')}</a>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Decimal_Point']}</label>
<label class="col-md-2 control-label">{Lang::T('Decimal Point')}</label>
<div class="col-md-6">
<input type="text" class="form-control" id="dec_point" name="dec_point"
value="{$_c['dec_point']}">
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Thousands_Separator']}</label>
<label class="col-md-2 control-label">{Lang::T('Thousands Separator')}</label>
<div class="col-md-6">
<input type="text" class="form-control" id="thousands_sep" name="thousands_sep"
value="{$_c['thousands_sep']}">
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Currency_Code']}</label>
<label class="col-md-2 control-label">{Lang::T('Currency Code')}</label>
<div class="col-md-6">
<input type="text" class="form-control" id="currency_code" name="currency_code"
value="{$_c['currency_code']}">
</div>
<span class="help-block col-md-4">{$_L['currency_help']}</span>
<span
class="help-block col-md-4">{Lang::T('Keep it blank if you do not want to show currency code')}</span>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{Lang::T('Country Code Phone')}</label>
@ -117,7 +125,7 @@
<div class="form-group">
<div class="col-lg-offset-2 col-lg-10">
<button class="btn btn-primary waves-effect waves-light"
type="submit">{$_L['Save']}</button>
type="submit">{Lang::T('Save Changes')}</button>
</div>
</div>
</form>

View File

@ -150,7 +150,7 @@
<div class="panel-body">
<div class="form-group">
<button class="btn btn-success btn-block waves-effect waves-light"
type="submit">{$_L['Save']}</button>
type="submit">{Lang::T('Save Changes')}</button>
</div>
</div>
</div>

View File

@ -9,16 +9,16 @@
<button class="btn btn-primary btn-xs" title="save" type="submit"><span
class="glyphicon glyphicon-floppy-disk" aria-hidden="true"></span></button>
</div>
{$_L['General_Settings']}
{Lang::T('General Settings')}
</div>
<div class="panel-body">
<div class="form-group">
<label class="col-md-2 control-label">{$_L['App_Name']}</label>
<label class="col-md-2 control-label">{Lang::T('Application Name/ Company Name')}</label>
<div class="col-md-6">
<input type="text" required class="form-control" id="CompanyName" name="CompanyName"
value="{$_c['CompanyName']}">
</div>
<span class="help-block col-md-4">{$_L['App_Name_Help_Text']}</span>
<span class="help-block col-md-4">{Lang::T('This Name will be shown on the Title')}</span>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{Lang::T('Company Logo')}</label>
@ -40,19 +40,27 @@
<span class="help-block col-md-4">{Lang::T('Will show below user pages')}</span>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Address']}</label>
<label class="col-md-2 control-label">{Lang::T('Address')}</label>
<div class="col-md-6">
<textarea class="form-control" id="address" name="address"
rows="3">{Lang::htmlspecialchars($_c['address'])}</textarea>
</div>
<span class="help-block col-md-4">{$_L['You_can_use_html_tag']}</span>
<span class="help-block col-md-4">{Lang::T('You can use html tag')}</span>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Phone_Number']}</label>
<label class="col-md-2 control-label">{Lang::T('Phone Number')}</label>
<div class="col-md-6">
<input type="text" class="form-control" id="phone" name="phone" value="{$_c['phone']}">
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{Lang::T('Invoice Footer')}</label>
<div class="col-md-6">
<textarea class="form-control" id="note" name="note"
rows="3">{Lang::htmlspecialchars($_c['note'])}</textarea>
<span class="help-block">{Lang::T('You can use html tag')}</span>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label"><i class="glyphicon glyphicon-print"></i> Print Max
Char</label>
@ -66,11 +74,11 @@
<label class="col-md-2 control-label">Theme</label>
<div class="col-md-6">
<select name="theme" id="theme" class="form-control">
<option value="default" {if $_c['theme'] eq 'default'}selected="selected" {/if}>Default
<option value="default" {if $_c['theme'] eq 'default' }selected="selected" {/if}>Default
</option>
{foreach $themes as $theme}
<option value="{$theme}" {if $_c['theme'] eq $theme}selected="selected" {/if}>
{Lang::ucWords($theme)}</option>
<option value="{$theme}" {if $_c['theme'] eq $theme}selected="selected" {/if}>
{Lang::ucWords($theme)}</option>
{/foreach}
</select>
</div>
@ -86,6 +94,32 @@
<p class="help-block col-md-4">edit at config.php</p>
</div>
</div>
<div class="panel-heading" id="hide_dashboard_content">
<div class="btn-group pull-right">
<button class="btn btn-primary btn-xs" title="save" type="submit"><span
class="glyphicon glyphicon-floppy-disk" aria-hidden="true"></span></button>
</div>
Hide Dashboard Content
</div>
<div class="panel-body">
<div class="form-group">
<label class="col-md-3 control-label"><input type="checkbox" name="hide_mrc" value="yes" {if
$_c['hide_mrc'] eq 'yes' }checked{/if}>
{Lang::T('Monthly Registered Customers')}</label>
<label class="col-md-2 control-label"><input type="checkbox" name="hide_tms" value="yes" {if
$_c['hide_tms'] eq 'yes' }checked{/if}> {Lang::T('Total Monthly Sales')}</label>
<label class="col-md-2 control-label"><input type="checkbox" name="hide_aui" value="yes" {if
$_c['hide_aui'] eq 'yes' }checked{/if}> {Lang::T('All Users Insights')}</label>
<label class="col-md-2 control-label"><input type="checkbox" name="hide_al" value="yes" {if
$_c['hide_al'] eq 'yes' }checked{/if}> {Lang::T('Activity Log')}</label>
<label class="col-md-2 control-label"><input type="checkbox" name="hide_uet" value="yes" {if
$_c['hide_uet'] eq 'yes' }checked{/if}> {Lang::T('User Expired, Today')}</label>
<label class="col-md-2 control-label"><input type="checkbox" name="hide_vs" value="yes" {if
$_c['hide_vs'] eq 'yes' }checked{/if}> Vouchers Stock</label>
<label class="col-md-2 control-label"><input type="checkbox" name="hide_pg" value="yes" {if
$_c['hide_pg'] eq 'yes' }checked{/if}> Payment Gateway</label>
</div>
</div>
<div class="panel-heading">
<div class="btn-group pull-right">
<button class="btn btn-primary btn-xs" title="save" type="submit"><span
@ -98,9 +132,9 @@
<label class="col-md-2 control-label">{Lang::T('Disable Voucher')}</label>
<div class="col-md-6">
<select name="disable_voucher" id="disable_voucher" class="form-control">
<option value="no" {if $_c['disable_voucher'] == 'no'}selected="selected" {/if}>No
<option value="no" {if $_c['disable_voucher']=='no' }selected="selected" {/if}>No
</option>
<option value="yes" {if $_c['disable_voucher'] == 'yes'}selected="selected" {/if}>Yes
<option value="yes" {if $_c['disable_voucher']=='yes' }selected="selected" {/if}>Yes
</option>
</select>
</div>
@ -110,12 +144,12 @@
<label class="col-md-2 control-label">{Lang::T('Voucher Format')}</label>
<div class="col-md-6">
<select name="voucher_format" id="voucher_format" class="form-control">
<option value="up" {if $_c['voucher_format'] == 'up'}selected="selected" {/if}>UPPERCASE
<option value="up" {if $_c['voucher_format']=='up' }selected="selected" {/if}>UPPERCASE
</option>
<option value="low" {if $_c['voucher_format'] == 'low'}selected="selected" {/if}>
<option value="low" {if $_c['voucher_format']=='low' }selected="selected" {/if}>
lowercase
</option>
<option value="rand" {if $_c['voucher_format'] == 'rand'}selected="selected" {/if}>
<option value="rand" {if $_c['voucher_format']=='rand' }selected="selected" {/if}>
RaNdoM
</option>
</select>
@ -123,31 +157,33 @@
<p class="help-block col-md-4">UPPERCASE lowercase RaNdoM</p>
</div>
{if $_c['disable_voucher'] != 'yes'}
<div class="form-group">
<label class="col-md-2 control-label">{Lang::T('Disable Registration')}</label>
<div class="col-md-6">
<select name="disable_registration" id="disable_registration" class="form-control">
<option value="no" {if $_c['disable_registration'] == 'no'}selected="selected" {/if}>No
</option>
<option value="yes" {if $_c['disable_registration'] == 'yes'}selected="selected" {/if}>
Yes
</option>
</select>
</div>
<p class="help-block col-md-4">
{Lang::T('Customer just Login with Phone number and Voucher Code, Voucher will be password')}
</p>
<div class="form-group">
<label class="col-md-2 control-label">{Lang::T('Disable Registration')}</label>
<div class="col-md-6">
<select name="disable_registration" id="disable_registration" class="form-control">
<option value="no" {if $_c['disable_registration']=='no' }selected="selected" {/if}>No
</option>
<option value="yes" {if $_c['disable_registration']=='yes' }selected="selected" {/if}>
Yes
</option>
</select>
</div>
<div class="form-group">
<label class="col-md-2 control-label">Redirect after Activation</label>
<div class="col-md-6">
<input type="text" class="form-control" id="voucher_redirect" name="voucher_redirect"
placeholder="https://192.168.88.1/status" value="{$voucher_redirect}">
</div>
<p class="help-block col-md-4">
{Lang::T('After Customer activate voucher or login, customer will be redirected to this url')}
</p>
<p class="help-block col-md-4">
{Lang::T('Customer just Login with Phone number and Voucher Code, Voucher will be
password')}
</p>
</div>
<div class="form-group">
<label class="col-md-2 control-label">Redirect after Activation</label>
<div class="col-md-6">
<input type="text" class="form-control" id="voucher_redirect" name="voucher_redirect"
placeholder="https://192.168.88.1/status" value="{$voucher_redirect}">
</div>
<p class="help-block col-md-4">
{Lang::T('After Customer activate voucher or login, customer will be redirected to this
url')}
</p>
</div>
{/if}
</div>
<div class="panel-heading">
@ -189,9 +225,9 @@
<label class="col-md-2 control-label">{Lang::T('Enable System')}</label>
<div class="col-md-6">
<select name="enable_balance" id="enable_balance" class="form-control">
<option value="no" {if $_c['enable_balance'] == 'no'}selected="selected" {/if}>No
<option value="no" {if $_c['enable_balance']=='no' }selected="selected" {/if}>No
</option>
<option value="yes" {if $_c['enable_balance'] == 'yes'}selected="selected" {/if}>Yes
<option value="yes" {if $_c['enable_balance']=='yes' }selected="selected" {/if}>Yes
</option>
</select>
</div>
@ -201,10 +237,10 @@
<label class="col-md-2 control-label">{Lang::T('Allow Transfer')}</label>
<div class="col-md-6">
<select name="allow_balance_transfer" id="allow_balance_transfer" class="form-control">
<option value="no" {if $_c['allow_balance_transfer'] == 'no'}selected="selected" {/if}>
<option value="no" {if $_c['allow_balance_transfer']=='no' }selected="selected" {/if}>
No</option>
<option value="yes" {if $_c['allow_balance_transfer'] == 'yes'}selected="selected"
{/if}>Yes</option>
<option value="yes" {if $_c['allow_balance_transfer']=='yes' }selected="selected" {/if}>
Yes</option>
</select>
</div>
<p class="help-block col-md-4">{Lang::T('Allow balance transfer between customers')}</p>
@ -270,8 +306,8 @@
onchange="document.getElementById('sms_url').value = this.value">
<option value="">Select Router</option>
{foreach $r as $rs}
<option value="{$rs['name']}" {if $rs['name']==$_c['sms_url']}selected{/if}>
{$rs['name']}</option>
<option value="{$rs['name']}" {if $rs['name']==$_c['sms_url']}selected{/if}>
{$rs['name']}</option>
{/foreach}
</select>
</div>
@ -318,9 +354,9 @@
<select name="user_notification_expired" id="user_notification_expired"
class="form-control">
<option value="none">None</option>
<option value="wa" {if $_c['user_notification_expired'] == 'wa'}selected="selected"
<option value="wa" {if $_c['user_notification_expired']=='wa' }selected="selected"
{/if}>Whatsapp</option>
<option value="sms" {if $_c['user_notification_expired'] == 'sms'}selected="selected"
<option value="sms" {if $_c['user_notification_expired']=='sms' }selected="selected"
{/if}>SMS</option>
</select>
</div>
@ -332,9 +368,9 @@
<select name="user_notification_payment" id="user_notification_payment"
class="form-control">
<option value="none">None</option>
<option value="wa" {if $_c['user_notification_payment'] == 'wa'}selected="selected"
<option value="wa" {if $_c['user_notification_payment']=='wa' }selected="selected"
{/if}>Whatsapp</option>
<option value="sms" {if $_c['user_notification_payment'] == 'sms'}selected="selected"
<option value="sms" {if $_c['user_notification_payment']=='sms' }selected="selected"
{/if}>SMS</option>
</select>
</div>
@ -347,9 +383,9 @@
<select name="user_notification_reminder" id="user_notification_reminder"
class="form-control">
<option value="none">None</option>
<option value="wa" {if $_c['user_notification_reminder'] == 'wa'}selected="selected"
<option value="wa" {if $_c['user_notification_reminder']=='wa' }selected="selected"
{/if}>Whatsapp</option>
<option value="sms" {if $_c['user_notification_reminder'] == 'sms'}selected="selected"
<option value="sms" {if $_c['user_notification_reminder']=='sms' }selected="selected"
{/if}>SMS</option>
</select>
</div>
@ -381,16 +417,17 @@
<button class="btn btn-primary btn-xs" title="save" type="submit"><span
class="glyphicon glyphicon-floppy-disk" aria-hidden="true"></span></button>
</div>
{Lang::T('Invoice')}
API Key
</div>
<div class="panel-body">
<div class="form-group">
<label class="col-md-2 control-label">{Lang::T('Invoice Footer')}</label>
<label class="col-md-2 control-label">Access Token</label>
<div class="col-md-6">
<textarea class="form-control" id="note" name="note"
rows="3">{Lang::htmlspecialchars($_c['note'])}</textarea>
<span class="help-block">{$_L['You_can_use_html_tag']}</span>
<input type="password" class="form-control" id="api_key" name="api_key"
value="{$_c['api_key']}" placeholder="Empty this to randomly created API key"
onmouseleave="this.type = 'password'" onmouseenter="this.type = 'text'">
</div>
<p class="col-md-4 help-block">{Lang::T('This Token will act as SuperAdmin/Admin')}</p>
</div>
</div>
<div class="panel-heading">
@ -417,7 +454,44 @@
</div>
</div>
</div>
<div class="panel-heading" id="envato">
<div class="panel-heading">
<div class="btn-group pull-right">
<button class="btn btn-primary btn-xs" title="save" type="submit"><span
class="glyphicon glyphicon-floppy-disk" aria-hidden="true"></span></button>
</div>
{Lang::T('Miscellaneous')}
</div>
<div class="panel-body">
<div class="form-group">
<label class="col-md-2 control-label">{Lang::T('OTP Required')}</label>
<div class="col-md-6">
<select name="allow_phone_otp" id="allow_phone_otp" class="form-control">
<option value="no" {if $_c['allow_phone_otp']=='no' }selected="selected" {/if}>
No</option>
<option value="yes" {if $_c['allow_phone_otp']=='yes' }selected="selected" {/if}>Yes
</option>
</select>
</div>
<p class="help-block col-md-4">{Lang::T('OTP is required when user want to change phone
number')}</p>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{Lang::T('OTP Method')}</label>
<div class="col-md-6">
<select name="phone_otp_type" id="phone_otp_type" class="form-control">
<option value="sms" {if $_c['phone_otp_type']=='sms' }selected="selected" {/if}>
{Lang::T('SMS')}
<option value="whatsapp" {if $_c['phone_otp_type']=='whatsapp' }selected="selected"
{/if}> {Lang::T('WhatsApp')}
<option value="both" {if $_c['phone_otp_type']=='both' }selected="selected" {/if}>
{Lang::T('SMS and WhatsApp')}
</option>
</select>
</div>
<p class="help-block col-md-4">{Lang::T('The method which OTP will be sent to user')}</p>
</div>
</div>
{* <div class="panel-heading" id="envato">
<div class="btn-group pull-right">
<button class="btn btn-primary btn-xs" title="save" type="submit"><span
class="glyphicon glyphicon-floppy-disk" aria-hidden="true"></span></button>
@ -444,13 +518,13 @@
class="btn btn-xs btn-primary">View MarketPlace</a>
</label>
</div>
</div>
</div> *}
</div>
<div class="panel-body">
<div class="form-group">
<button class="btn btn-success btn-block waves-effect waves-light"
type="submit">{$_L['Save']}</button>
<button class="btn btn-success btn-block waves-effect waves-light" type="submit">{Lang::T('Save
Changes')}</button>
</div>
</div>
@ -476,14 +550,14 @@ add dst-host=*.{$_domain}</pre>
function testWa() {
var target = prompt("Phone number\nSave First before Test", "");
if (target != null) {
window.location.href = '{$_url}settings/app&testWa='+target;
window.location.href = '{$_url}settings/app&testWa=' + target;
}
}
function testSms() {
var target = prompt("Phone number\nSave First before Test", "");
if (target != null) {
window.location.href = '{$_url}settings/app&testSms='+target;
window.location.href = '{$_url}settings/app&testSms=' + target;
}
}

View File

@ -1,4 +1,4 @@
<option value=''>{$_L['Select_Pool']}</option>
<option value=''>{Lang::T('Select Pool')}</option>
{foreach $d as $ds}
<option value="{$ds['pool_name']}">{$ds['pool_name']}{if $routers==''} - {$ds['routers']}{/if}</option>
{/foreach}

View File

@ -1,4 +1,4 @@
<option value=''>{$_L['Select_Routers']}</option>
<option value=''>{Lang::T('Select Routers')}</option>
{if $_c['radius_enable']}
<option value="radius">Radius</option>
{/if}

View File

@ -3,7 +3,7 @@
<div class="row">
<div class="col-sm-12 col-md-12">
<div class="panel panel-primary panel-hovered panel-stacked mb30">
<div class="panel-heading">{$_L['Add_Plan']}</div>
<div class="panel-heading">{Lang::T('Add Service Plan')}</div>
<div class="panel-body">
<form class="form-horizontal" method="post" role="form" action="{$_url}services/balance-add-post" >
<div class="form-group">
@ -29,13 +29,13 @@
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Plan_Name']}</label>
<label class="col-md-2 control-label">{Lang::T('Plan Name')}</label>
<div class="col-md-6">
<input type="text" required class="form-control" id="name" name="name" maxlength="40" placeholder="Topup 100">
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Plan_Price']}</label>
<label class="col-md-2 control-label">{Lang::T('Plan Price')}</label>
<div class="col-md-6">
<div class="input-group">
<span class="input-group-addon">{$_c['currency_code']}</span>
@ -46,8 +46,8 @@
<div class="form-group">
<div class="col-lg-offset-2 col-lg-10">
<button class="btn btn-success waves-effect waves-light" type="submit">{$_L['Save']}</button>
Or <a href="{$_url}services/balance">{$_L['Cancel']}</a>
<button class="btn btn-success waves-effect waves-light" type="submit">{Lang::T('Save Changes')}</button>
Or <a href="{$_url}services/balance">{Lang::T('Cancel')}</a>
</div>
</div>
</form>

View File

@ -3,7 +3,7 @@
<div class="row">
<div class="col-sm-12 col-md-12">
<div class="panel panel-primary panel-hovered panel-stacked mb30">
<div class="panel-heading">{$_L['Edit_Plan']}</div>
<div class="panel-heading">{Lang::T('Edit Service Plan')}</div>
<div class="panel-body">
<form class="form-horizontal" method="post" role="form" action="{$_url}services/balance-edit-post">
<input type="hidden" name="id" value="{$d['id']}">
@ -31,13 +31,13 @@
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Plan_Name']}</label>
<label class="col-md-2 control-label">{Lang::T('Plan Name')}</label>
<div class="col-md-6">
<input type="text" required class="form-control" id="name" value="{$d['name_plan']}" name="name" maxlength="40" placeholder="Topup 100">
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Plan_Price']}</label>
<label class="col-md-2 control-label">{Lang::T('Plan Price')}</label>
<div class="col-md-6">
<div class="input-group">
<span class="input-group-addon">{$_c['currency_code']}</span>
@ -48,8 +48,8 @@
<div class="form-group">
<div class="col-lg-offset-2 col-lg-10">
<button class="btn btn-success waves-effect waves-light" type="submit">{$_L['Save']}</button>
Or <a href="{$_url}services/balance">{$_L['Cancel']}</a>
<button class="btn btn-success waves-effect waves-light" type="submit">{Lang::T('Save Changes')}</button>
Or <a href="{$_url}services/balance">{Lang::T('Cancel')}</a>
</div>
</div>
</form>

View File

@ -12,24 +12,24 @@
<div class="input-group-addon">
<span class="fa fa-search"></span>
</div>
<input type="text" name="name" class="form-control" placeholder="{$_L['Search_by_Name']}...">
<input type="text" name="name" class="form-control" placeholder="{Lang::T('Search by Name')}...">
<div class="input-group-btn">
<button class="btn btn-success" type="submit">{$_L['Search']}</button>
<button class="btn btn-success" type="submit">{Lang::T('Search')}</button>
</div>
</div>
</form>
</div>
<div class="col-md-4">
<a href="{$_url}services/balance-add" class="btn btn-primary btn-block waves-effect"><i class="ion ion-android-add"> </i> {$_L['New_Plan']}</a>
<a href="{$_url}services/balance-add" class="btn btn-primary btn-block waves-effect"><i class="ion ion-android-add"> </i> {Lang::T('New Service Plan')}</a>
</div>&nbsp;
</div>
<div class="table-responsive">
<table class="table table-bordered table-striped table-condensed">
<thead>
<tr>
<th>{$_L['Plan_Name']}</th>
<th>{$_L['Plan_Price']}</th>
<th>{$_L['Manage']}</th>
<th>{Lang::T('Plan Name')}</th>
<th>{Lang::T('Plan Price')}</th>
<th>{Lang::T('Manage')}</th>
</tr>
</thead>
<tbody>
@ -38,8 +38,8 @@
<td>{$ds['name_plan']}</td>
<td>{Lang::moneyFormat($ds['price'])}</td>
<td>
<a href="{$_url}services/balance-edit/{$ds['id']}" class="btn btn-info btn-xs">{$_L['Edit']}</a>
<a href="{$_url}services/balance-delete/{$ds['id']}" onclick="return confirm('{$_L['Delete']}?')" id="{$ds['id']}" class="btn btn-danger btn-xs">{$_L['Delete']}</a>
<a href="{$_url}services/balance-edit/{$ds['id']}" class="btn btn-info btn-xs">{Lang::T('Edit')}</a>
<a href="{$_url}services/balance-delete/{$ds['id']}" onclick="return confirm('{Lang::T('Delete')}?')" id="{$ds['id']}" class="btn btn-danger btn-xs"><i class="glyphicon glyphicon-trash"></i></a>
</td>
</tr>
{/foreach}

View File

@ -1,20 +1,20 @@
{include file="sections/header.tpl"}
<div class="row">
<div class="col-sm-12 col-md-12">
<div class="panel panel-primary panel-hovered panel-stacked mb30">
<div class="panel-heading">{$_L['Add_Bandwidth']}</div>
<div class="panel-body">
<form class="form-horizontal" method="post" role="form" action="{$_url}bandwidth/add-post">
<div class="form-group">
<label class="col-md-2 control-label">{$_L['BW_Name']}</label>
<div class="row">
<div class="col-sm-12 col-md-12">
<div class="panel panel-primary panel-hovered panel-stacked mb30">
<div class="panel-heading">{Lang::T('Add New Bandwidth')}</div>
<div class="panel-body">
<form class="form-horizontal" method="post" role="form" action="{$_url}bandwidth/add-post">
<div class="form-group">
<label class="col-md-2 control-label">{Lang::T('Bandwidth Name')}</label>
<div class="col-md-6">
<input type="text" class="form-control" id="name" name="name">
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Rate_Download']}</label>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{Lang::T('Rate Download')}</label>
<div class="col-md-4">
<input type="text" class="form-control" id="rate_down" name="rate_down">
</div>
@ -24,9 +24,9 @@
<option value="Mbps">Mbps</option>
</select>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Rate_Upload']}</label>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{Lang::T('Rate Upload')}</label>
<div class="col-md-4">
<input type="text" class="form-control" id="rate_up" name="rate_up">
</div>
@ -36,19 +36,49 @@
<option value="Mbps">Mbps</option>
</select>
</div>
</div>
</div>
<div class="form-group">
<div class="col-lg-offset-2 col-lg-10">
<button class="btn btn-primary waves-effect waves-light" type="submit">{$_L['Submit']}</button>
Or <a href="{$_url}bandwidth/list">{$_L['Cancel']}</a>
<label class="col-md-2 control-label">Burst Limit</label>
<div class="col-md-6">
<input type="text" class="form-control" name="burst[]" placeholder="[Burst/Limit]">
</div>
</div>
</form>
<div class="form-group">
<label class="col-md-2 control-label">Burst Threshold</label>
<div class="col-md-6">
<input type="text" class="form-control" name="burst[]" placeholder="[Burst/Threshold]">
</div>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">Burst Time</label>
<div class="col-md-6">
<input type="text" class="form-control" name="burst[]" placeholder="[Burst/Time]">
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">Priority</label>
<div class="col-md-6">
<input type="number" class="form-control" name="burst[]" placeholder="[Priority]">
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">Limit At</label>
<div class="col-md-6">
<input type="text" class="form-control" name="burst[]" placeholder="[Limit/At]">
</div>
</div>
<div class="form-group">
<div class="col-lg-offset-2 col-lg-10">
<button class="btn btn-primary waves-effect waves-light"
type="submit">{Lang::T('Submit')}</button>
Or <a href="{$_url}bandwidth/list">{Lang::T('Cancel')}</a>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
{include file="sections/footer.tpl"}
{include file="sections/footer.tpl"}

View File

@ -1,55 +1,95 @@
{include file="sections/header.tpl"}
<div class="row">
<div class="col-sm-12 col-md-12">
<div class="panel panel-primary panel-hovered panel-stacked mb30">
<div class="panel-heading">{$_L['Edit_Bandwidth']}</div>
<div class="panel-body">
<form class="form-horizontal" method="post" role="form" action="{$_url}bandwidth/edit-post" >
<input type="hidden" name="id" value="{$d['id']}">
<div class="form-group">
<label class="col-md-2 control-label">{$_L['BW_Name']}</label>
<div class="row">
<div class="col-sm-12 col-md-12">
<div class="panel panel-primary panel-hovered panel-stacked mb30">
<div class="panel-heading">{Lang::T('Edit Bandwidth')}</div>
<div class="panel-body">
<form class="form-horizontal" method="post" role="form" action="{$_url}bandwidth/edit-post">
<input type="hidden" name="id" value="{$d['id']}">
<div class="form-group">
<label class="col-md-2 control-label">{Lang::T('Bandwidth Name')}</label>
<div class="col-md-6">
<input type="text" class="form-control" id="name" name="name" value="{$d['name_bw']}">
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Rate_Download']}</label>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{Lang::T('Rate Download')}</label>
<div class="col-md-4">
<input type="text" class="form-control" id="rate_down" name="rate_down" value="{$d['rate_down']}">
<input type="text" class="form-control" id="rate_down" name="rate_down"
value="{$d['rate_down']}">
</div>
<div class="col-md-2">
<select class="form-control" id="rate_down_unit" name="rate_down_unit">
<option value="Kbps" {if $d['rate_down_unit'] eq 'Kbps'}selected="selected" {/if}>Kbps</option>
<option value="Mbps" {if $d['rate_down_unit'] eq 'Mbps'}selected="selected" {/if}>Mbps</option>
<option value="Kbps" {if $d['rate_down_unit'] eq 'Kbps'}selected="selected" {/if}>Kbps
</option>
<option value="Mbps" {if $d['rate_down_unit'] eq 'Mbps'}selected="selected" {/if}>Mbps
</option>
</select>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Rate_Upload']}</label>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{Lang::T('Rate Upload')}</label>
<div class="col-md-4">
<input type="text" class="form-control" id="rate_up" name="rate_up" value="{$d['rate_up']}">
</div>
<div class="col-md-2">
<select class="form-control" id="rate_up_unit" name="rate_up_unit">
<option value="Kbps" {if $d['rate_up_unit'] eq 'Kbps'}selected="selected" {/if}>Kbps</option>
<option value="Mbps" {if $d['rate_up_unit'] eq 'Mbps'}selected="selected" {/if}>Mbps</option>
<option value="Kbps" {if $d['rate_up_unit'] eq 'Kbps'}selected="selected" {/if}>Kbps
</option>
<option value="Mbps" {if $d['rate_up_unit'] eq 'Mbps'}selected="selected" {/if}>Mbps
</option>
</select>
</div>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">Burst Limit</label>
<div class="col-md-6">
<input type="text" class="form-control" name="burst[]" placeholder="[Burst/Limit]" value="{$burst[0]}">
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">Burst Threshold</label>
<div class="col-md-6">
<input type="text" class="form-control" name="burst[]" placeholder="[Burst/Threshold]" value="{$burst[1]}">
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">Burst Time</label>
<div class="col-md-6">
<input type="text" class="form-control" name="burst[]" placeholder="[Burst/Time]" value="{$burst[2]}">
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">Priority</label>
<div class="col-md-6">
<input type="number" class="form-control" name="burst[]" placeholder="[Priority]" value="{$burst[3]}">
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">Limit At</label>
<div class="col-md-6">
<input type="text" class="form-control" name="burst[]" placeholder="[Limit/At]" value="{$burst[4]}">
</div>
</div>
<div class="form-group">
<div class="col-lg-offset-2 col-lg-10">
<button class="btn btn-primary waves-effect waves-light" type="submit">{$_L['Submit']}</button>
Or <a href="{$_url}bandwidth/list">{$_L['Cancel']}</a>
<small>{Lang::T('Editing Bandwidth will not automatically update the plan, you need to edit the plan then save again')}</small>
</div>
</div>
</form>
<div class="form-group">
<div class="col-lg-offset-2 col-lg-10">
<button class="btn btn-primary waves-effect waves-light"
type="submit">{Lang::T('Submit')}</button>
Or <a href="{$_url}bandwidth/list">{Lang::T('Cancel')}</a>
</div>
</div>
</div>
</div>
</form>
{include file="sections/footer.tpl"}
</div>
</div>
</div>
</div>
{include file="sections/footer.tpl"}

View File

@ -3,7 +3,7 @@
<div class="row">
<div class="col-sm-12">
<div class="panel panel-hovered mb20 panel-primary">
<div class="panel-heading">{$_L['Bandwidth_Plans']}</div>
<div class="panel-heading">{Lang::T('Bandwidth Plans')}</div>
<div class="panel-body">
<div class="md-whiteframe-z1 mb20 text-center" style="padding: 15px">
<div class="col-md-8">
@ -12,36 +12,36 @@
<div class="input-group-addon">
<span class="fa fa-search"></span>
</div>
<input type="text" name="name" class="form-control" placeholder="{$_L['Search_by_Name']}...">
<input type="text" name="name" class="form-control" placeholder="{Lang::T('Search by Name')}...">
<div class="input-group-btn">
<button class="btn btn-success" type="submit">{$_L['Search']}</button>
<button class="btn btn-success" type="submit">{Lang::T('Search')}</button>
</div>
</div>
</form>
</div>
<div class="col-md-4">
<a href="{$_url}bandwidth/add" class="btn btn-primary btn-block waves-effect"><i class="ion ion-android-add"> </i> {$_L['New_Bandwidth']}</a>
<a href="{$_url}bandwidth/add" class="btn btn-primary btn-block waves-effect"><i class="ion ion-android-add"> </i> {Lang::T('New Bandwidth')}</a>
</div>&nbsp;
</div>
<div class="table-responsive">
<table class="table table-bordered table-striped">
<table class="table table-bordered table-condensed table-striped table_mobile">
<thead>
<tr>
<th>{$_L['BW_Name']}</th>
<th>{$_L['Rate_Download']}</th>
<th>{$_L['Rate_Upload']}</th>
<th>{$_L['Manage']}</th>
<th>{Lang::T('Bandwidth Name')}</th>
<th>{Lang::T('Rate')}</th>
<th>{Lang::T('Burst')}</th>
<th>{Lang::T('Manage')}</th>
</tr>
</thead>
<tbody>
{foreach $d as $ds}
<tr>
<td>{$ds['name_bw']}</td>
<td>{$ds['rate_down']} {$ds['rate_down_unit']}</td>
<td>{$ds['rate_up']} {$ds['rate_up_unit']}</td>
<td>{$ds['rate_down']} {$ds['rate_down_unit']} / {$ds['rate_up']} {$ds['rate_up_unit']}</td>
<td>{$ds['burst']}</td>
<td>
<a href="{$_url}bandwidth/edit/{$ds['id']}" class="btn btn-sm btn-warning">{$_L['Edit']}</a>
<a href="{$_url}bandwidth/delete/{$ds['id']}" id="{$ds['id']}" class="btn btn-danger btn-sm" onclick="return confirm('{$_L['Delete']}?')" >{$_L['Delete']}</a>
<a href="{$_url}bandwidth/edit/{$ds['id']}" class="btn btn-sm btn-warning">{Lang::T('Edit')}</a>
<a href="{$_url}bandwidth/delete/{$ds['id']}" id="{$ds['id']}" class="btn btn-danger btn-sm" onclick="return confirm('{Lang::T('Delete')}?')" ><i class="glyphicon glyphicon-trash"></i></a>
</td>
</tr>
{/foreach}

View File

@ -3,23 +3,23 @@
<div class="row">
<div class="col-sm-12 col-md-12">
<div class="panel panel-primary panel-hovered panel-stacked mb30">
<div class="panel-heading">{$_L['Change_Password']}</div>
<div class="panel-heading">{Lang::T('Change Password')}</div>
<div class="panel-body">
<form class="form-horizontal" method="post" role="form" action="{$_url}settings/change-password-post">
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Current_Password']}</label>
<label class="col-md-2 control-label">{Lang::T('Current Password')}</label>
<div class="col-md-6">
<input type="password" class="form-control" id="password" name="password">
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{$_L['New_Password']}</label>
<label class="col-md-2 control-label">{Lang::T('New Password')}</label>
<div class="col-md-6">
<input type="password" class="form-control" id="npass" name="npass">
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Confirm_New_Password']}</label>
<label class="col-md-2 control-label">{Lang::T('Confirm New Password')}</label>
<div class="col-md-6">
<input type="password" class="form-control" id="cnpass" name="cnpass">
</div>
@ -27,8 +27,8 @@
<div class="form-group">
<div class="col-lg-offset-2 col-lg-10">
<button class="btn btn-success waves-effect waves-light" type="submit">{$_L['Save']}</button>
Or <a href="{$_url}dashboard">{$_L['Cancel']}</a>
<button class="btn btn-success waves-effect waves-light" type="submit">{Lang::T('Save Changes')}</button>
Or <a href="{$_url}dashboard">{Lang::T('Cancel')}</a>
</div>
</div>
</form>

View File

@ -144,7 +144,7 @@
<h3 class="box-title">PHPNUXBILL</h3>
</div>
<div class="box-body">
{$_L['Welcome_Text_Admin']}
<b>PHPNuxBill</b> is a billing Hotspot and PPPOE for Mikrotik using PHP and Mikrotik API to comunicate with router. If you get more profit with this application, please donate us.<br>Watch project <a href="https://github.com/hotspotbilling/phpnuxbill" target="_blank">in here</a>
</div>
<div class="box-footer" id="currentVersion">ver</div>
<div class="box-footer" id="latestVersion">ver</div>

View File

@ -3,54 +3,54 @@
<div class="row">
<div class="col-sm-12 col-md-12">
<div class="panel panel-primary panel-hovered panel-stacked mb30">
<div class="panel-heading">{$_L['Add_Contact']}</div>
<div class="panel-heading">{Lang::T('Add New Contact')}</div>
<div class="panel-body">
<form class="form-horizontal" method="post" role="form" action="{$_url}customers/add-post">
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Username']}</label>
<label class="col-md-2 control-label">{Lang::T('Username')}</label>
<div class="col-md-6">
<div class="input-group">
{if $_c['country_code_phone']!= ''}
<span class="input-group-addon" id="basic-addon1">+</span>
<span class="input-group-addon" id="basic-addon1">+</span>
{else}
<span class="input-group-addon" id="basic-addon1"><i
class="glyphicon glyphicon-phone-alt"></i></span>
<span class="input-group-addon" id="basic-addon1"><i
class="glyphicon glyphicon-phone-alt"></i></span>
{/if}
<input type="text" class="form-control" name="username" required
placeholder="{if $_c['country_code_phone']!= ''}{$_c['country_code_phone']}{/if} {$_L['Phone_Number']}">
placeholder="{if $_c['country_code_phone']!= ''}{$_c['country_code_phone']}{/if} {Lang::T('Phone Number')}">
</div>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Full_Name']}</label>
<label class="col-md-2 control-label">{Lang::T('Full Name')}</label>
<div class="col-md-6">
<input type="text" required class="form-control" id="fullname" name="fullname">
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Email']}</label>
<label class="col-md-2 control-label">{Lang::T('Email')}</label>
<div class="col-md-6">
<input type="email" class="form-control" id="email" name="email">
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Phone_Number']}</label>
<label class="col-md-2 control-label">{Lang::T('Phone Number')}</label>
<div class="col-md-6">
<div class="input-group">
{if $_c['country_code_phone']!= ''}
<span class="input-group-addon" id="basic-addon1">+</span>
<span class="input-group-addon" id="basic-addon1">+</span>
{else}
<span class="input-group-addon" id="basic-addon1"><i
class="glyphicon glyphicon-phone-alt"></i></span>
<span class="input-group-addon" id="basic-addon1"><i
class="glyphicon glyphicon-phone-alt"></i></span>
{/if}
<input type="text" class="form-control" name="phonenumber"
placeholder="{if $_c['country_code_phone']!= ''}{$_c['country_code_phone']}{/if} {$_L['Phone_Number']}">
placeholder="{if $_c['country_code_phone']!= ''}{$_c['country_code_phone']}{/if} {Lang::T('Phone Number')}">
</div>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Password']}</label>
<label class="col-md-2 control-label">{Lang::T('Password')}</label>
<div class="col-md-6">
<input type="password" class="form-control" autocomplete="off" required id="password"
name="password" onmouseleave="this.type = 'password'" onmouseenter="this.type = 'text'">
@ -62,32 +62,44 @@
<input type="password" class="form-control" id="pppoe_password" name="pppoe_password"
value="{$d['pppoe_password']}" onmouseleave="this.type = 'password'"
onmouseenter="this.type = 'text'">
<span
class="help-block">{Lang::T('User Cannot change this, only admin. if it Empty it will use user password')}</span>
<span class="help-block">
{Lang::T('User Cannot change this, only admin. if it Empty it will use user password')}
</span>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Address']}</label>
<label class="col-md-2 control-label">{Lang::T('Address')}</label>
<div class="col-md-6">
<textarea name="address" id="address" class="form-control"></textarea>
</div>
</div>
<div class="form-group">
<div class="form-group">
<label class="col-md-2 control-label">{Lang::T('Service Type')}</label>
<div class="col-md-6">
<select class="form-control" id="service_type" name="service_type">
<option value="Hotspot" {if $d['service_type'] eq 'Hotspot'}selected{/if}>Hotspot</option>
<option value="PPPoE" {if $d['service_type'] eq 'PPPoE'}selected{/if}>PPPoE</option>
<option value="Others" {if $d['service_type'] eq 'Others'}selected{/if}>Others</option>
</select>
</div>
<select class="form-control" id="service_type" name="service_type">
<option value="Hotspot" {if $d['service_type'] eq 'Hotspot' }selected{/if}>Hotspot
</option>
<option value="PPPoE" {if $d['service_type'] eq 'PPPoE' }selected{/if}>PPPoE</option>
<option value="Others" {if $d['service_type'] eq 'Others' }selected{/if}>Others</option>
</select>
</div>
</div>
<!-- Customers Attributes add start -->
<div class="form-group">
<label class="col-md-2 control-label">{Lang::T('Attributes')}</label>
<div id="custom-fields-container" class="col-md-6">
<button class="btn btn-success btn-sm waves-effect waves-light" type="button"
id="add-custom-field">+</button>
</div>
</div>
<!-- Customers Attributes add end -->
<div class="form-group">
<div class="col-lg-offset-2 col-lg-10">
<button class="btn btn-primary waves-effect waves-light"
type="submit">{$_L['Save']}</button>
Or <a href="{$_url}customers/list">{$_L['Cancel']}</a>
<button class="btn btn-primary waves-effect waves-light" type="submit">
{Lang::T('Save Changes')}
</button>
Or <a href="{$_url}customers/list">{Lang::T('Cancel')}</a>
</div>
</div>
</form>
@ -96,6 +108,41 @@
</div>
</div>
</div>
{literal}
<script type="text/javascript">
document.addEventListener("DOMContentLoaded", function() {
var customFieldsContainer = document.getElementById('custom-fields-container');
var addCustomFieldButton = document.getElementById('add-custom-field');
addCustomFieldButton.addEventListener('click', function() {
var fieldIndex = customFieldsContainer.children.length;
var newField = document.createElement('div');
newField.className = 'form-group';
newField.innerHTML = `
<label class="col-md-2 control-label">Name:</label>
<div class="col-md-3">
<input type="text" class="form-control" name="custom_field_name[]" placeholder="Name">
</div>
<label class="col-md-2 control-label">Value:</label>
<div class="col-md-3">
<input type="text" class="form-control" name="custom_field_value[]" placeholder="Value">
</div>
<div class="col-md-2">
<button type="button" class="remove-custom-field btn btn-danger btn-sm waves-effect waves-light">-</button>
</div>
`;
customFieldsContainer.appendChild(newField);
});
customFieldsContainer.addEventListener('click', function(event) {
if (event.target.classList.contains('remove-custom-field')) {
var fieldContainer = event.target.parentNode.parentNode;
fieldContainer.parentNode.removeChild(fieldContainer);
}
});
});
</script>
{/literal}
{include file="sections/footer.tpl"}

View File

@ -3,62 +3,62 @@
<div class="row">
<div class="col-sm-12 col-md-12">
<div class="panel panel-primary panel-hovered panel-stacked mb30">
<div class="panel-heading">{$_L['Edit_Contact']}</div>
<div class="panel-heading">{Lang::T('Edit Contact')}</div>
<div class="panel-body">
<form class="form-horizontal" method="post" role="form" action="{$_url}customers/edit-post">
<input type="hidden" name="id" value="{$d['id']}">
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Username']}</label>
<label class="col-md-2 control-label">{Lang::T('Username')}</label>
<div class="col-md-6">
<div class="input-group">
{if $_c['country_code_phone']!= ''}
<span class="input-group-addon" id="basic-addon1">+</span>
<span class="input-group-addon" id="basic-addon1">+</span>
{else}
<span class="input-group-addon" id="basic-addon1"><i
class="glyphicon glyphicon-phone-alt"></i></span>
<span class="input-group-addon" id="basic-addon1"><i
class="glyphicon glyphicon-phone-alt"></i></span>
{/if}
<input type="text" class="form-control" name="username" value="{$d['username']}"
required
placeholder="{if $_c['country_code_phone']!= ''}{$_c['country_code_phone']}{/if} {$_L['Phone_Number']}">
placeholder="{if $_c['country_code_phone']!= ''}{$_c['country_code_phone']}{/if} {Lang::T('Phone Number')}">
</div>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Full_Name']}</label>
<label class="col-md-2 control-label">{Lang::T('Full Name')}</label>
<div class="col-md-6">
<input type="text" class="form-control" id="fullname" name="fullname"
value="{$d['fullname']}">
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Email']}</label>
<label class="col-md-2 control-label">{Lang::T('Email')}</label>
<div class="col-md-6">
<input type="email" class="form-control" id="email" name="email" value="{$d['email']}">
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Phone_Number']}</label>
<label class="col-md-2 control-label">{Lang::T('Phone Number')}</label>
<div class="col-md-6">
<div class="input-group">
{if $_c['country_code_phone']!= ''}
<span class="input-group-addon" id="basic-addon1">+</span>
<span class="input-group-addon" id="basic-addon1">+</span>
{else}
<span class="input-group-addon" id="basic-addon1"><i
class="glyphicon glyphicon-phone-alt"></i></span>
<span class="input-group-addon" id="basic-addon1"><i
class="glyphicon glyphicon-phone-alt"></i></span>
{/if}
<input type="text" class="form-control" name="phonenumber" value="{$d['phonenumber']}"
placeholder="{if $_c['country_code_phone']!= ''}{$_c['country_code_phone']}{/if} {$_L['Phone_Number']}">
placeholder="{if $_c['country_code_phone']!= ''}{$_c['country_code_phone']}{/if} {Lang::T('Phone Number')}">
</div>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Password']}</label>
<label class="col-md-2 control-label">{Lang::T('Password')}</label>
<div class="col-md-6">
<input type="password" autocomplete="off" class="form-control" id="password" name="password"
onmouseleave="this.type = 'password'" onmouseenter="this.type = 'text'"
value="{$d['password']}">
<span class="help-block">{$_L['password_change_help']}</span>
<span class="help-block">{Lang::T('Keep Blank to do not change Password')}</span>
</div>
</div>
<div class="form-group">
@ -67,32 +67,58 @@
<input type="password" autocomplete="off" class="form-control" id="pppoe_password"
name="pppoe_password" value="{$d['pppoe_password']}"
onmouseleave="this.type = 'password'" onmouseenter="this.type = 'text'">
<span
class="help-block">{Lang::T('User Cannot change this, only admin. if it Empty it will use user password')}</span>
<span class="help-block">
{Lang::T('User Cannot change this, only admin. if it Empty it will use user password')}
</span>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Address']}</label>
<label class="col-md-2 control-label">{Lang::T('Address')}</label>
<div class="col-md-6">
<textarea name="address" id="address" class="form-control">{$d['address']}</textarea>
</div>
</div>
<div class="form-group">
<div class="form-group">
<label class="col-md-2 control-label">{Lang::T('Service Type')}</label>
<div class="col-md-6">
<select class="form-control" id="service_type" name="service_type">
<option value="Hotspot" {if $d['service_type'] eq 'Hotspot'}selected{/if}>Hotspot</option>
<option value="PPPoE" {if $d['service_type'] eq 'PPPoE'}selected{/if}>PPPoE</option>
<option value="Others" {if $d['service_type'] eq 'Others'}selected{/if}>Others</option>
</select>
</div>
<select class="form-control" id="service_type" name="service_type">
<option value="Hotspot" {if $d['service_type'] eq 'Hotspot' }selected{/if}>Hotspot
</option>
<option value="PPPoE" {if $d['service_type'] eq 'PPPoE' }selected{/if}>PPPoE</option>
<option value="Others" {if $d['service_type'] eq 'Others' }selected{/if}>Others</option>
</select>
</div>
</div>
<!--Customers Attributes edit start -->
{if $customFields}
{foreach $customFields as $customField}
<div class="form-group">
<label class="col-md-2 control-label"
for="{$customField.field_name}">{$customField.field_name}</label>
<div class="col-md-6">
<input class="form-control" type="text" name="custom_fields[{$customField.field_name}]"
id="{$customField.field_name}" value="{$customField.field_value}">
</div>
<input type="checkbox" name="delete_custom_fields[]" value="{$customField.field_name}"> Delete
</div>
{/foreach}
{/if}
<!--Customers Attributes edit end -->
<!--Customers Attributes add start -->
<div class="form-group">
<label class="col-md-2 control-label">{Lang::T('Attributes')}</label>
<div id="custom-fields-container" class="col-md-6">
<button class="btn btn-success btn-sm waves-effect waves-light" type="button"
id="add-custom-field">+</button>
</div>
</div>
<!--Customers Attributes add end -->
<div class="form-group">
<div class="col-lg-offset-2 col-lg-10">
<button class="btn btn-primary waves-effect waves-light"
type="submit">{$_L['Save']}</button>
Or <a href="{$_url}customers/list">{$_L['Cancel']}</a>
<button class="btn btn-primary waves-effect waves-light" type="submit">
{Lang::T('Save Changes')}
</button>
Or <a href="{$_url}customers/list">{Lang::T('Cancel')}</a>
</div>
</div>
</form>
@ -102,4 +128,40 @@
</div>
</div>
{literal}
<script type="text/javascript">
document.addEventListener("DOMContentLoaded", function () {
var customFieldsContainer = document.getElementById('custom-fields-container');
var addCustomFieldButton = document.getElementById('add-custom-field');
addCustomFieldButton.addEventListener('click', function () {
var fieldIndex = customFieldsContainer.children.length;
var newField = document.createElement('div');
newField.className = 'form-group';
newField.innerHTML = `
<label class="col-md-2 control-label">Name:</label>
<div class="col-md-3">
<input type="text" class="form-control" name="custom_field_name[]" placeholder="Name">
</div>
<label class="col-md-2 control-label">Value:</label>
<div class="col-md-3">
<input type="text" class="form-control" name="custom_field_value[]" placeholder="Value">
</div>
<div class="col-md-2">
<button type="button" class="remove-custom-field btn btn-danger btn-sm waves-effect waves-light">-</button>
</div>
`;
customFieldsContainer.appendChild(newField);
});
customFieldsContainer.addEventListener('click', function (event) {
if (event.target.classList.contains('remove-custom-field')) {
var fieldContainer = event.target.parentNode.parentNode;
fieldContainer.parentNode.removeChild(fieldContainer);
}
});
});
</script>
{/literal}
{include file="sections/footer.tpl"}

View File

@ -12,43 +12,52 @@
<ul class="list-group list-group-unbordered">
<li class="list-group-item">
<b>{$_L['Username']}</b> <span class="pull-right">{$d['username']}</span>
<b>{Lang::T('Username')}</b> <span class="pull-right">{$d['username']}</span>
</li>
<li class="list-group-item">
<b>{$_L['Phone_Number']}</b> <span class="pull-right">{$d['phonenumber']}</span>
<b>{Lang::T('Phone Number')}</b> <span class="pull-right">{$d['phonenumber']}</span>
</li>
<li class="list-group-item">
<b>{$_L['Email']}</b> <span class="pull-right">{$d['email']}</span>
<b>{Lang::T('Email')}</b> <span class="pull-right">{$d['email']}</span>
</li>
</ul>
<p class="text-muted">{Lang::nl2br($d['address'])}</p>
<ul class="list-group list-group-unbordered">
<li class="list-group-item">
<b>{$_L['Password']}</b> <input type="password" value="{$d['password']}"
<b>{Lang::T('Password')}</b> <input type="password" value="{$d['password']}"
style=" border: 0px; text-align: right;" class="pull-right"
onmouseleave="this.type = 'password'" onmouseenter="this.type = 'text'"
onclick="this.select()">
</li>
{if $d['pppoe_password'] != ''}
<li class="list-group-item">
<b>PPPOE {$_L['Password']}</b> <input type="password" value="{$d['pppoe_password']}"
<li class="list-group-item">
<b>PPPOE {Lang::T('Password')}</b> <input type="password" value="{$d['pppoe_password']}"
style=" border: 0px; text-align: right;" class="pull-right"
onmouseleave="this.type = 'password'" onmouseenter="this.type = 'text'"
onclick="this.select()">
</li>
</li>
{/if}
<li class="list-group-item">
<!--Customers Attributes view start -->
{if $customFields}
{foreach $customFields as $customField}
<li class="list-group-item">
<b>{$customField.field_name}</b> <span class="pull-right">{$customField.field_value}</span>
</li>
{/foreach}
{/if}
<!--Customers Attributes view end -->
<li class="list-group-item">
<b>{Lang::T('Service Type')}</b> <span class="pull-right">{Lang::T($d['service_type'])}</span>
</li>
<li class="list-group-item">
<b>{Lang::T('Balance')}</b> <span class="pull-right">{Lang::moneyFormat($d['balance'])}</span>
</li>
<li class="list-group-item">
<b>{Lang::T('Auto Renewal')}</b> <span
class="pull-right">{if $d['auto_renewal']}yes{else}no{/if}</span>
<b>{Lang::T('Auto Renewal')}</b> <span class="pull-right">{if
$d['auto_renewal']}yes{else}no{/if}</span>
</li>
<li class="list-group-item">
<b>{$_L['Created_On']}</b> <span
<b>{Lang::T('Created On')}</b> <span
class="pull-right">{Lang::dateTimeFormat($d['created_at'])}</span>
</li>
<li class="list-group-item">
@ -59,134 +68,135 @@
<div class="row">
<div class="col-xs-4">
<a href="{$_url}customers/delete/{$d['id']}" id="{$d['id']}"
class="btn btn-danger btn-block btn-sm" onclick="return confirm('{$_L['Delete']}?')"><span
class="fa fa-trash"></span></a>
class="btn btn-danger btn-block btn-sm"
onclick="return confirm('{Lang::T('Delete')}?')"><span class="fa fa-trash"></span></a>
</div>
<div class="col-xs-8">
<a href="{$_url}customers/edit/{$d['id']}"
class="btn btn-warning btn-sm btn-block">{$_L['Edit']}</a>
class="btn btn-warning btn-sm btn-block">{Lang::T('Edit')}</a>
</div>
</div>
</div>
</div>
{if $package}
<div class="box box-{if $package['status']=='on'}success{else}danger{/if}">
<div class="box-body box-profile">
<h4 class="text-center">{$package['type']} - {$package['namebp']}</h4>
<ul class="list-group list-group-unbordered">
<li class="list-group-item">
{Lang::T('Active')} <span
class="pull-right">{if $package['status']=='on'}yes{else}no{/if}</span>
</li>
<li class="list-group-item">
{$_L['Created_On']} <span
class="pull-right">{Lang::dateAndTimeFormat($package['recharged_on'],$package['recharged_time'])}</span>
</li>
<li class="list-group-item">
{$_L['Expires_On']} <span
class="pull-right">{Lang::dateAndTimeFormat($package['expiration'], $package['time'])}</span>
</li>
<li class="list-group-item">
{$package['routers']} <span class="pull-right">{$package['method']}</span>
</li>
</ul>
<div class="row">
<div class="col-xs-4">
<a href="{$_url}customers/deactivate/{$d['id']}" id="{$d['id']}"
class="btn btn-danger btn-block btn-sm"
onclick="return confirm('This will deactivate Customer Plan, and make it expired')">{Lang::T('Deactivate')}</a>
</div>
<div class="col-xs-4">
<a href="{$_url}customers/recharge/{$d['id']}"
onclick="return confirm('This will extend Customer plan, same as recharge')"
class="btn btn-success btn-sm btn-block">{Lang::T('Recharge')}</a>
</div>
<div class="col-xs-4">
<a href="{$_url}customers/sync/{$d['id']}"
onclick="return confirm('This will sync Customer to Mikrotik?')"
class="btn btn-primary btn-sm btn-block">{Lang::T('Sync')}</a>
</div>
<div class="box box-{if $package['status']=='on'}success{else}danger{/if}">
<div class="box-body box-profile">
<h4 class="text-center">{$package['type']} - {$package['namebp']}</h4>
<ul class="list-group list-group-unbordered">
<li class="list-group-item">
{Lang::T('Active')} <span class="pull-right">{if
$package['status']=='on'}yes{else}no{/if}</span>
</li>
<li class="list-group-item">
{Lang::T('Created On')} <span
class="pull-right">{Lang::dateAndTimeFormat($package['recharged_on'],$package['recharged_time'])}</span>
</li>
<li class="list-group-item">
{Lang::T('Expires On')} <span
class="pull-right">{Lang::dateAndTimeFormat($package['expiration'],
$package['time'])}</span>
</li>
<li class="list-group-item">
{$package['routers']} <span class="pull-right">{$package['method']}</span>
</li>
</ul>
<div class="row">
<div class="col-xs-4">
<a href="{$_url}customers/deactivate/{$d['id']}" id="{$d['id']}"
class="btn btn-danger btn-block btn-sm"
onclick="return confirm('This will deactivate Customer Plan, and make it expired')">{Lang::T('Deactivate')}</a>
</div>
<div class="col-xs-4">
<a href="{$_url}customers/recharge/{$d['id']}"
onclick="return confirm('This will extend Customer plan, same as recharge')"
class="btn btn-success btn-sm btn-block">{Lang::T('Recharge')}</a>
</div>
<div class="col-xs-4">
<a href="{$_url}customers/sync/{$d['id']}"
onclick="return confirm('This will sync Customer to Mikrotik?')"
class="btn btn-primary btn-sm btn-block">{Lang::T('Sync')}</a>
</div>
</div>
</div>
</div>
{else}
<a href="{$_url}prepaid/recharge/{$d['id']}"
class="btn btn-success btn-sm btn-block mt-1">{Lang::T('Recharge')}</a><br>
<a href="{$_url}prepaid/recharge/{$d['id']}"
class="btn btn-success btn-sm btn-block mt-1">{Lang::T('Recharge')}</a><br>
{/if}
<a href="{$_url}customers/list" class="btn btn-primary btn-sm btn-block mt-1">{Lang::T('Back')}</a><br>
</div>
<div class="col-sm-8 col-md-8">
<ul class="nav nav-tabs">
<li role="presentation" {if $v=='order'}class="active" {/if}><a
<li role="presentation" {if $v=='order' }class="active" {/if}><a
href="{$_url}customers/view/{$d['id']}/order">30 {Lang::T('Order History')}</a></li>
<li role="presentation" {if $v=='activation'}class="active" {/if}><a
<li role="presentation" {if $v=='activation' }class="active" {/if}><a
href="{$_url}customers/view/{$d['id']}/activation">30 {Lang::T('Activation History')}</a></li>
</ul>
<div class="table-responsive" style="background-color: white;">
<table id="datatable" class="table table-bordered table-striped">
{if Lang::arrayCount($activation)}
<thead>
<tr>
<th>{$_L['Invoice']}</th>
<th>{$_L['Username']}</th>
<th>{$_L['Plan_Name']}</th>
<th>{$_L['Plan_Price']}</th>
<th>{$_L['Type']}</th>
<th>{$_L['Created_On']}</th>
<th>{$_L['Expires_On']}</th>
<th>{$_L['Method']}</th>
</tr>
</thead>
<tbody>
{foreach $activation as $ds}
<tr onclick="window.location.href = '{$_url}prepaid/view/{$ds['id']}'" style="cursor:pointer;">
<td>{$ds['invoice']}</td>
<td>{$ds['username']}</td>
<td>{$ds['plan_name']}</td>
<td>{Lang::moneyFormat($ds['price'])}</td>
<td>{$ds['type']}</td>
<td class="text-success">{Lang::dateAndTimeFormat($ds['recharged_on'],$ds['recharged_time'])}
</td>
<td class="text-danger">{Lang::dateAndTimeFormat($ds['expiration'],$ds['time'])}</td>
<td>{$ds['method']}</td>
</tr>
{/foreach}
</tbody>
<thead>
<tr>
<th>{Lang::T('Invoice')}</th>
<th>{Lang::T('Username')}</th>
<th>{Lang::T('Plan Name')}</th>
<th>{Lang::T('Plan Price')}</th>
<th>{Lang::T('Type')}</th>
<th>{Lang::T('Created On')}</th>
<th>{Lang::T('Expires On')}</th>
<th>{Lang::T('Method')}</th>
</tr>
</thead>
<tbody>
{foreach $activation as $ds}
<tr onclick="window.location.href = '{$_url}prepaid/view/{$ds['id']}'" style="cursor:pointer;">
<td>{$ds['invoice']}</td>
<td>{$ds['username']}</td>
<td>{$ds['plan_name']}</td>
<td>{Lang::moneyFormat($ds['price'])}</td>
<td>{$ds['type']}</td>
<td class="text-success">{Lang::dateAndTimeFormat($ds['recharged_on'],$ds['recharged_time'])}
</td>
<td class="text-danger">{Lang::dateAndTimeFormat($ds['expiration'],$ds['time'])}</td>
<td>{$ds['method']}</td>
</tr>
{/foreach}
</tbody>
{/if}
{if Lang::arrayCount($order)}
<thead>
<tr>
<th>{$_L['Plan_Name']}</th>
<th>{Lang::T('Gateway')}</th>
<th>{Lang::T('Routers')}</th>
<th>{$_L['Type']}</th>
<th>{$_L['Plan_Price']}</th>
<th>{$_L['Created_On']}</th>
<th>{$_L['Expires_On']}</th>
<th>{Lang::T('Date Done')}</th>
<th>{$_L['Method']}</th>
</tr>
</thead>
<tbody>
{foreach $order as $ds}
<tr>
<td>{$ds['plan_name']}</td>
<td>{$ds['gateway']}</td>
<td>{$ds['routers']}</td>
<td>{$ds['payment_channel']}</td>
<td>{Lang::moneyFormat($ds['price'])}</td>
<td class="text-primary">{Lang::dateTimeFormat($ds['created_date'])}</td>
<td class="text-danger">{Lang::dateTimeFormat($ds['expired_date'])}</td>
<td class="text-success">{if $ds['status']!=1}{Lang::dateTimeFormat($ds['paid_date'])}{/if}</td>
<td>{if $ds['status']==1}{$_L['UNPAID']}
{elseif $ds['status']==2}{$_L['PAID']}
{elseif $ds['status']==3}{$_L['FAILED']}
{elseif $ds['status']==4}{$_L['CANCELED']}
{elseif $ds['status']==5}{$_L['UNKNOWN']}
{/if}</td>
</tr>
{/foreach}
</tbody>
<thead>
<tr>
<th>{Lang::T('Plan Name')}</th>
<th>{Lang::T('Gateway')}</th>
<th>{Lang::T('Routers')}</th>
<th>{Lang::T('Type')}</th>
<th>{Lang::T('Plan Price')}</th>
<th>{Lang::T('Created On')}</th>
<th>{Lang::T('Expires On')}</th>
<th>{Lang::T('Date Done')}</th>
<th>{Lang::T('Method')}</th>
</tr>
</thead>
<tbody>
{foreach $order as $ds}
<tr>
<td>{$ds['plan_name']}</td>
<td>{$ds['gateway']}</td>
<td>{$ds['routers']}</td>
<td>{$ds['payment_channel']}</td>
<td>{Lang::moneyFormat($ds['price'])}</td>
<td class="text-primary">{Lang::dateTimeFormat($ds['created_date'])}</td>
<td class="text-danger">{Lang::dateTimeFormat($ds['expired_date'])}</td>
<td class="text-success">{if $ds['status']!=1}{Lang::dateTimeFormat($ds['paid_date'])}{/if}</td>
<td>{if $ds['status']==1}{Lang::T('UNPAID')}
{elseif $ds['status']==2}{Lang::T('PAID')}
{elseif $ds['status']==3}{$_L['FAILED']}
{elseif $ds['status']==4}{Lang::T('CANCELED')}
{elseif $ds['status']==5}{Lang::T('UNKNOWN')}
{/if}</td>
</tr>
{/foreach}
</tbody>
{/if}
</table>
</div>

View File

@ -3,7 +3,16 @@
<div class="row">
<div class="col-sm-12">
<div class="panel panel-hovered mb20 panel-primary">
<div class="panel-heading">{$_L['Manage_Accounts']}</div>
<div class="panel-heading">
{if in_array($_admin['user_type'],['SuperAdmin','Admin'])}
<div class="btn-group pull-right">
<a class="btn btn-primary btn-xs" title="save" href="{$_url}customers/csv"
onclick="return confirm('This will export to CSV?')"><span class="glyphicon glyphicon-download"
aria-hidden="true"></span> CSV</a>
</div>
{/if}
{Lang::T('Manage Contact')}
</div>
<div class="panel-body">
<div class="md-whiteframe-z1 mb20 text-center" style="padding: 15px">
<div class="col-md-8">
@ -20,29 +29,31 @@
</div>
<div class="col-md-4">
<a href="{$_url}customers/add" class="btn btn-primary btn-block waves-effect"><i
class="ion ion-android-add"> </i> {$_L['Add_Contact']}</a>
class="ion ion-android-add"> </i> {Lang::T('Add New Contact')}</a>
</div>&nbsp;
</div>
<div class="table-responsive">
<div class="table-responsive table_mobile">
<table class="table table-bordered table-striped table-condensed">
<thead>
<tr>
<th>{$_L['Username']}</th>
<th>{$_L['Full_Name']}</th>
<th>{Lang::T('Username')}</th>
<th>{Lang::T('Full Name')}</th>
<th>{Lang::T('Balance')}</th>
<th>{$_L['Phone_Number']}</th>
<th>{$_L['Email']}</th>
<th>{$_L['Package']}</th>
<th>{Lang::T('Phone Number')}</th>
<th>{Lang::T('Email')}</th>
<th>{Lang::T('Package')}</th>
<th>{Lang::T('Service Type')}</th>
<th>{$_L['Created_On']}</th>
<th>{$_L['Manage']}</th>
<th>{Lang::T('Created On')}</th>
<th>{Lang::T('Manage')}</th>
</tr>
</thead>
<tbody>
{foreach $d as $ds}
<tr>
<td onclick="window.location.href = '{$_url}customers/view/{$ds['id']}'" style="cursor:pointer;">{$ds['username']}</td>
<td onclick="window.location.href = '{$_url}customers/view/{$ds['id']}'" style="cursor: pointer;">{$ds['fullname']}</td>
<td onclick="window.location.href = '{$_url}customers/view/{$ds['id']}'"
style="cursor:pointer;">{$ds['username']}</td>
<td onclick="window.location.href = '{$_url}customers/view/{$ds['id']}'"
style="cursor: pointer;">{$ds['fullname']}</td>
<td>{Lang::moneyFormat($ds['balance'])}</td>
<td>{$ds['phonenumber']}</td>
<td>{$ds['email']}</td>
@ -52,10 +63,10 @@
<td>{$ds['service_type']}</td>
<td>{Lang::dateTimeFormat($ds['created_at'])}</td>
<td align="center">
<a href="{$_url}customers/view/{$ds['id']}" id="{$ds['id']}" style="margin: 0px;"
class="btn btn-success btn-xs">&nbsp;&nbsp;{Lang::T('View')}&nbsp;&nbsp;</a>
<a href="{$_url}prepaid/recharge/{$ds['id']}" id="{$ds['id']}" style="margin: 0px;"
class="btn btn-primary btn-xs">{$_L['Recharge']}</a>
<a href="{$_url}customers/view/{$ds['id']}" id="{$ds['id']}" style="margin: 0px;"
class="btn btn-success btn-xs">&nbsp;&nbsp;{Lang::T('View')}&nbsp;&nbsp;</a>
<a href="{$_url}prepaid/recharge/{$ds['id']}" id="{$ds['id']}" style="margin: 0px;"
class="btn btn-primary btn-xs">{Lang::T('Recharge')}</a>
</td>
</tr>
{/foreach}

View File

@ -7,12 +7,12 @@
<div class="inner">
<h4><sup>{$_c['currency_code']}</sup>
{number_format($iday,0,$_c['dec_point'],$_c['thousands_sep'])}</h4>
<p>{$_L['Income_Today']}</p>
<p>{Lang::T('Income Today')}</p>
</div>
<div class="icon">
<i class="ion ion-bag"></i>
</div>
<a href="{$_url}reports/by-date" class="small-box-footer">{$_L['View_Reports']} <i
<a href="{$_url}reports/by-date" class="small-box-footer">{Lang::T('View Reports')} <i
class="fa fa-arrow-circle-right"></i></a>
</div>
</div>
@ -22,12 +22,12 @@
<h4><sup>{$_c['currency_code']}</sup>
{number_format($imonth,0,$_c['dec_point'],$_c['thousands_sep'])}</h4>
<p>{$_L['Income_This_Month']}</p>
<p>{Lang::T('Income This Month')}</p>
</div>
<div class="icon">
<i class="ion ion-stats-bars"></i>
</div>
<a href="{$_url}reports/by-period" class="small-box-footer">{$_L['View_Reports']} <i
<a href="{$_url}reports/by-period" class="small-box-footer">{Lang::T('View Reports')} <i
class="fa fa-arrow-circle-right"></i></a>
</div>
</div>
@ -36,12 +36,12 @@
<div class="inner">
<h4>{$u_act}/{$u_all}</h4>
<p>{$_L['Users_Active']}</p>
<p>{Lang::T('Users Active')}</p>
</div>
<div class="icon">
<i class="ion ion-person"></i>
</div>
<a href="{$_url}prepaid/list" class="small-box-footer">{$_L['View_All']} <i
<a href="{$_url}prepaid/list" class="small-box-footer">{Lang::T('View All')} <i
class="fa fa-arrow-circle-right"></i></a>
</div>
</div>
@ -50,140 +50,152 @@
<div class="inner">
<h4>{$c_all}</h4>
<p>{$_L['Total_Users']}</p>
<p>{Lang::T('Total Users')}</p>
</div>
<div class="icon">
<i class="fa fa-users"></i>
</div>
<a href="{$_url}customers/list" class="small-box-footer">{$_L['View_All']} <i
<a href="{$_url}customers/list" class="small-box-footer">{Lang::T('View All')} <i
class="fa fa-arrow-circle-right"></i></a>
</div>
</div>
</div>
<!-- solid sales graph -->
<div class="box box-solid ">
<div class="box-header">
<i class="fa fa-th"></i>
{if $_c['hide_mrc'] != 'yes'}
<div class="box box-solid ">
<div class="box-header">
<i class="fa fa-th"></i>
<h3 class="box-title">{Lang::T('Monthly Registered Customers')}</h3>
<h3 class="box-title">{Lang::T('Monthly Registered Customers')}</h3>
<div class="box-tools pull-right">
<button type="button" class="btn bg-teal btn-sm" data-widget="collapse"><i class="fa fa-minus"></i>
</button>
<button type="button" class="btn bg-teal btn-sm" data-widget="remove"><i class="fa fa-times"></i>
</button>
<div class="box-tools pull-right">
<button type="button" class="btn bg-teal btn-sm" data-widget="collapse"><i class="fa fa-minus"></i>
</button>
<a href="{$_url}settings/app#hide_dashboard_content" class="btn bg-teal btn-sm" ><i class="fa fa-times"></i>
</a>
</div>
</div>
<div class="box-body border-radius-none">
<canvas class="chart" id="chart" style="height: 250px;"></canvas>
</div>
</div>
<div class="box-body border-radius-none">
<canvas class="chart" id="chart" style="height: 250px;"></canvas>
</div>
</div>
{/if}
<!-- solid sales graph -->
<div class="box box-solid ">
<div class="box-header">
<i class="fa fa-inbox"></i>
{if $_c['hide_tms'] != 'yes'}
<div class="box box-solid ">
<div class="box-header">
<i class="fa fa-inbox"></i>
<h3 class="box-title">{Lang::T('Total Monthly Sales')}</h3>
<h3 class="box-title">{Lang::T('Total Monthly Sales')}</h3>
<div class="box-tools pull-right">
<button type="button" class="btn bg-teal btn-sm" data-widget="collapse"><i class="fa fa-minus"></i>
</button>
<button type="button" class="btn bg-teal btn-sm" data-widget="remove"><i class="fa fa-times"></i>
</button>
<div class="box-tools pull-right">
<button type="button" class="btn bg-teal btn-sm" data-widget="collapse"><i class="fa fa-minus"></i>
</button>
<a href="{$_url}settings/app#hide_dashboard_content" class="btn bg-teal btn-sm" ><i class="fa fa-times"></i>
</a>
</div>
</div>
<div class="box-body border-radius-none">
<canvas class="chart" id="salesChart" style="height: 250px;"></canvas>
</div>
</div>
<div class="box-body border-radius-none">
<canvas class="chart" id="salesChart" style="height: 250px;"></canvas>
</div>
</div>
{/if}
<div class="row">
<div class="col-md-7">
{if $_c['disable_voucher'] != 'yes' && $stocks['unused']>0 || $stocks['used']>0}
<div class="panel panel-primary mb20 panel-hovered project-stats table-responsive">
<div class="panel-heading">Vouchers Stock</div>
<div class="table-responsive">
<table class="table">
<thead>
<tr>
<th>{$_L['Plan_Name']}</th>
<th>unused</th>
<th>used</th>
</tr>
</thead>
<tbody>
{foreach $plans as $stok}
<tr>
<td>{$stok['name_plan']}</td>
<td>{$stok['unused']}</td>
<td>{$stok['used']}</td>
</tr>
</tbody>
{/foreach}
<tr>
<td>Total</td>
<td>{$stocks['unused']}</td>
<td>{$stocks['used']}</td>
</tr>
</table>
</div>
</div>
{if $_c['hide_vs'] != 'yes'}
<div class="panel panel-primary mb20 panel-hovered project-stats table-responsive">
<div class="panel-heading">Vouchers Stock</div>
<div class="table-responsive">
<table class="table table-condensed">
<thead>
<tr>
<th>{Lang::T('Plan Name')}</th>
<th>unused</th>
<th>used</th>
</tr>
</thead>
<tbody>
{foreach $plans as $stok}
<tr>
<td>{$stok['name_plan']}</td>
<td>{$stok['unused']}</td>
<td>{$stok['used']}</td>
</tr>
</tbody>
{/foreach}
<tr>
<td>Total</td>
<td>{$stocks['unused']}</td>
<td>{$stocks['used']}</td>
</tr>
</table>
</div>
</div>
{/if}
{/if}
<div class="panel panel-warning mb20 panel-hovered project-stats table-responsive">
<div class="panel-heading">{$_L['User_Expired_Today']}</div>
<div class="table-responsive">
<table class="table">
<thead>
<tr>
<th>Id</th>
<th>{$_L['Username']}</th>
<th>{$_L['Created_On']}</th>
<th>{$_L['Expires_On']}</th>
</tr>
</thead>
<tbody>
{$no = 1}
{foreach $expire as $expired}
<tr>
<td>{$no++}</td>
<td><a href="{$_url}customers/viewu/{$expired['username']}">{$expired['username']}</a></td>
<td>{Lang::dateAndTimeFormat($expired['recharged_on'],$expired['recharged_time'])}
</td>
<td>{Lang::dateAndTimeFormat($expired['expiration'],$expired['time'])}
</td>
</tr>
</tbody>
{/foreach}
</table>
{if $_c['hide_uet'] != 'yes'}
<div class="panel panel-warning mb20 panel-hovered project-stats table-responsive">
<div class="panel-heading">{Lang::T('User Expired, Today')}</div>
<div class="table-responsive">
<table class="table table-condensed">
<thead>
<tr>
<th>{Lang::T('Username')}</th>
<th>{Lang::T('Created On')}</th>
<th>{Lang::T('Expires On')}</th>
</tr>
</thead>
<tbody>
{foreach $expire as $expired}
<tr>
<td><a href="{$_url}customers/viewu/{$expired['username']}">{$expired['username']}</a></td>
<td>{Lang::dateAndTimeFormat($expired['recharged_on'],$expired['recharged_time'])}
</td>
<td>{Lang::dateAndTimeFormat($expired['expiration'],$expired['time'])}
</td>
</tr>
</tbody>
{/foreach}
</table>
</div>
&nbsp; {$paginator['contents']}
</div>
&nbsp; {$paginator['contents']}
</div>
{/if}
</div>
<div class="col-md-5">
<div class="panel panel-success panel-hovered mb20 activities">
<div class="panel-heading">{Lang::T('Payment Gateway')}: {$_c['payment_gateway']}</div>
</div>
<div class="panel panel-info panel-hovered mb20 activities">
<div class="panel-heading">{Lang::T('Active Users')}</div>
<div class="panel-body">
<canvas id="userRechargesChart"></canvas>
{if $_c['hide_pg'] != 'yes'}
<div class="panel panel-success panel-hovered mb20 activities">
<div class="panel-heading">{Lang::T('Payment Gateway')}: {$_c['payment_gateway']}</div>
</div>
</div>
<div class="panel panel-info panel-hovered mb20 activities">
<div class="panel-heading"><a href="{$_url}logs">{$_L['Activity_Log']}</a></div>
<div class="panel-body">
<ul class="list-unstyled">
{foreach $dlog as $dlogs}
<li class="primary">
<span class="point"></span>
<span class="time small text-muted">{time_elapsed_string($dlogs['date'],true)}</span>
<p>{$dlogs['description']}</p>
</li>
{/foreach}
</ul>
{/if}
{if $_c['hide_aui'] != 'yes'}
<div class="panel panel-info panel-hovered mb20 activities">
<div class="panel-heading">{Lang::T('All Users Insights')}</div>
<div class="panel-body">
<canvas id="userRechargesChart"></canvas>
</div>
</div>
</div>
{/if}
{if $_c['hide_al'] != 'yes'}
<div class="panel panel-info panel-hovered mb20 activities">
<div class="panel-heading"><a href="{$_url}logs">{Lang::T('Activity Log')}</a></div>
<div class="panel-body">
<ul class="list-unstyled">
{foreach $dlog as $dlogs}
<li class="primary">
<span class="point"></span>
<span class="time small text-muted">{Lang::timeElapsed($dlogs['date'],true)}</span>
<p>{$dlogs['description']}</p>
</li>
{/foreach}
</ul>
</div>
</div>
{/if}
</div>
@ -191,169 +203,178 @@
<script src="https://cdn.jsdelivr.net/npm/chart.js@3.5.1/dist/chart.min.js"></script>
{literal}
<script type="text/javascript">
document.addEventListener("DOMContentLoaded", function () {
var counts = JSON.parse('{/literal}{$counts|json_encode}{literal}');
var monthNames = [
'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'
];
var labels = [];
var data = [];
for (var i = 1; i <= 12; i++) {
var month = counts.find(count => count.date === i);
labels.push(month ? monthNames[i - 1] : monthNames[i - 1].substring(0, 3));
data.push(month ? month.count : 0);
}
var ctx = document.getElementById('chart').getContext('2d');
var chart = new Chart(ctx, {
type: 'bar',
data: {
labels: labels,
datasets: [{
label: 'Registered Members',
data: data,
backgroundColor: 'rgba(0, 0, 255, 0.5)',
borderColor: 'rgba(0, 0, 255, 0.7)',
borderWidth: 1
}]
},
options: {
responsive: true,
scales: {
x: {
grid: {
display: false
}
},
y: {
beginAtZero: true,
grid: {
color: 'rgba(0, 0, 0, 0.1)'
}
}
}
}
});
});
</script>
<script type="text/javascript">
document.addEventListener("DOMContentLoaded", function () {
var monthlySales = JSON.parse('{/literal}{$monthlySales|json_encode}{literal}');
{if $_c['hide_mrc'] != 'yes'}
{literal}
document.addEventListener("DOMContentLoaded", function() {
var counts = JSON.parse('{/literal}{$monthlyRegistered|json_encode}{literal}');
var monthNames = [
'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'
];
var monthNames = [
'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'
];
var labels = [];
var data = [];
var labels = [];
var data = [];
for (var i = 1; i <= 12; i++) {
var month = findMonthData(monthlySales, i);
labels.push(month ? monthNames[i - 1] : monthNames[i - 1].substring(0, 3));
data.push(month ? month.totalSales : 0);
}
for (var i = 1; i <= 12; i++) {
var month = counts.find(count => count.date === i);
labels.push(month ? monthNames[i - 1] : monthNames[i - 1].substring(0, 3));
data.push(month ? month.count : 0);
}
var ctx = document.getElementById('salesChart').getContext('2d');
var chart = new Chart(ctx, {
type: 'bar',
data: {
labels: labels,
datasets: [{
label: 'Monthly Sales',
data: data,
backgroundColor: 'rgba(2, 10, 242)', // Customize the background color
borderColor: 'rgba(255, 99, 132, 1)', // Customize the border color
borderWidth: 1
}]
},
options: {
responsive: true,
scales: {
x: {
grid: {
display: false
}
var ctx = document.getElementById('chart').getContext('2d');
var chart = new Chart(ctx, {
type: 'bar',
data: {
labels: labels,
datasets: [{
label: 'Registered Members',
data: data,
backgroundColor: 'rgba(0, 0, 255, 0.5)',
borderColor: 'rgba(0, 0, 255, 0.7)',
borderWidth: 1
}]
},
y: {
beginAtZero: true,
grid: {
color: 'rgba(0, 0, 0, 0.1)'
options: {
responsive: true,
scales: {
x: {
grid: {
display: false
}
},
y: {
beginAtZero: true,
grid: {
color: 'rgba(0, 0, 0, 0.1)'
}
}
}
}
});
});
{/literal}
{/if}
{if $_c['hide_tmc'] != 'yes'}
{literal}
document.addEventListener("DOMContentLoaded", function() {
var monthlySales = JSON.parse('{/literal}{$monthlySales|json_encode}{literal}');
var monthNames = [
'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'
];
var labels = [];
var data = [];
for (var i = 1; i <= 12; i++) {
var month = findMonthData(monthlySales, i);
labels.push(month ? monthNames[i - 1] : monthNames[i - 1].substring(0, 3));
data.push(month ? month.totalSales : 0);
}
}
});
});
function findMonthData(monthlySales, month) {
for (var i = 0; i < monthlySales.length; i++) {
if (monthlySales[i].month === month) {
return monthlySales[i];
}
}
return null;
}
var ctx = document.getElementById('salesChart').getContext('2d');
var chart = new Chart(ctx, {
type: 'bar',
data: {
labels: labels,
datasets: [{
label: 'Monthly Sales',
data: data,
backgroundColor: 'rgba(2, 10, 242)', // Customize the background color
borderColor: 'rgba(255, 99, 132, 1)', // Customize the border color
borderWidth: 1
}]
},
options: {
responsive: true,
scales: {
x: {
grid: {
display: false
}
},
y: {
beginAtZero: true,
grid: {
color: 'rgba(0, 0, 0, 0.1)'
}
}
}
}
});
});
document.addEventListener("DOMContentLoaded", function () {
// Get the data from PHP and assign it to JavaScript variables
var u_act = '{/literal}{$u_act}{literal}';
var u_all = '{/literal}{$u_all}{literal}';
// Create the chart data
var data = {
labels: ['Active Users', 'Inactive Users'],
datasets: [{
label: 'User Recharges',
data: [parseInt(u_act), parseInt(u_all)],
backgroundColor: ['rgba(4, 191, 13)', 'rgba(191, 35, 4)'],
borderColor: ['rgba(0, 255, 0, 1)', 'rgba(255, 99, 132, 1)'],
borderWidth: 1
}]
};
// Create chart options
var options = {
responsive: true,
aspectRatio: 1,
plugins: {
legend: {
position: 'bottom',
labels: {
boxWidth: 15
function findMonthData(monthlySales, month) {
for (var i = 0; i < monthlySales.length; i++) {
if (monthlySales[i].month === month) {
return monthlySales[i];
}
}
return null;
}
};
{/literal}
{/if}
{if $_c['hide_aui'] != 'yes'}
{literal}
document.addEventListener("DOMContentLoaded", function() {
// Get the data from PHP and assign it to JavaScript variables
var u_act = '{/literal}{$u_act}{literal}';
var c_all = '{/literal}{$c_all}{literal}';
var u_all = '{/literal}{$u_all}{literal}';
//lets calculate the inactive users as reported
var expired = u_all - u_act;
var inactive = c_all - u_all;
// Create the chart data
var data = {
labels: ['Active Users', 'Expired Users', 'Inactive Users'],
datasets: [{
label: 'User Recharges',
data: [parseInt(u_act), parseInt(expired), parseInt(inactive)],
backgroundColor: ['rgba(4, 191, 13)', 'rgba(191, 35, 4)', 'rgba(0, 0, 255, 0.5'],
borderColor: ['rgba(0, 255, 0, 1)', 'rgba(255, 99, 132, 1)', 'rgba(0, 0, 255, 0.7'],
borderWidth: 1
}]
};
// Get the canvas element and create the chart
var ctx = document.getElementById('userRechargesChart').getContext('2d');
var chart = new Chart(ctx, {
type: 'pie',
data: data,
options: options
});
});
// Create chart options
var options = {
responsive: true,
aspectRatio: 1,
plugins: {
legend: {
position: 'bottom',
labels: {
boxWidth: 15
}
}
}
};
// Get the canvas element and create the chart
var ctx = document.getElementById('userRechargesChart').getContext('2d');
var chart = new Chart(ctx, {
type: 'pie',
data: data,
options: options
});
});
{/literal}
{/if}
</script>
{/literal}
<script>
window.addEventListener('DOMContentLoaded', function () {
$.getJSON("./version.json?" + Math.random(), function (data) {
window.addEventListener('DOMContentLoaded', function() {
$.getJSON("./version.json?" + Math.random(), function(data) {
var localVersion = data.version;
$('#version').html('Version: ' + localVersion);
$.getJSON(
"https://raw.githubusercontent.com/hotspotbilling/phpnuxbill/master/version.json?" +
Math
.random(),
function (data) {
.random(),
function(data) {
var latestVersion = data.version;
if (localVersion !== latestVersion) {
$('#version').html('Latest Version: ' + latestVersion);

View File

@ -9,8 +9,8 @@
<table class="table table-bordered">
<thead>
<tr>
<th width="50%">{$_L['Table_Name']}</th>
<th>{$_L['Rows']}</th>
<th width="50%">{Lang::T('Table Name')}</th>
<th>{Lang::T('Rows')}</th>
<th>Select</th>
</tr>
</thead>
@ -31,7 +31,7 @@
<div class="col-md-4 text-right">
<button type="submit" class="btn btn-primary btn-xs btn-block"><i
class="fa fa-download"></i>
{$_L['Download_Database_Backup']}</button>
{Lang::T('Download Database Backup')}</button>
</div>
</div>
</div>

View File

@ -7,10 +7,10 @@
<div class="panel-body">
<form class="form-horizontal" method="post" role="form" action="{$_url}prepaid/deposit-post">
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Select_Account']}</label>
<label class="col-md-2 control-label">{Lang::T('Select Account')}</label>
<div class="col-md-6">
<select id="personSelect" class="form-control select2" name="id_customer" style="width: 100%"
data-placeholder="{$_L['Select_Customer']}...">
data-placeholder="{Lang::T('Select a customer')}...">
</select>
</div>
</div>
@ -18,7 +18,7 @@
<label class="col-md-2 control-label"><a href="{$_url}services/balance">{Lang::T('Balance Plans')}</a></label>
<div class="col-md-6">
<select id="planSelect" class="form-control select2" name="id_plan" style="width: 100%"
data-placeholder="{$_L['Select_Plans']}...">
data-placeholder="{Lang::T('Select Plans')}...">
<option></option>
{foreach $p as $pl}
<option value="{$pl['id']}">{$pl['name_plan']} - {Lang::moneyFormat($pl['price'])}</option>
@ -30,8 +30,8 @@
<div class="form-group">
<div class="col-lg-offset-2 col-lg-10">
<button class="btn btn-success waves-effect waves-light"
type="submit">{$_L['Recharge']}</button>
Or <a href="{$_url}customers/list">{$_L['Cancel']}</a>
type="submit">{Lang::T('Recharge')}</button>
Or <a href="{$_url}customers/list">{Lang::T('Cancel')}</a>
</div>
</div>
</form>

View File

@ -3,7 +3,7 @@
<div class="row">
<div class="col-sm-12 col-md-12">
<div class="panel panel-primary panel-hovered panel-stacked mb30">
<div class="panel-heading">{$_L['Add_Plan']}</div>
<div class="panel-heading">{Lang::T('Add Service Plan')}</div>
<div class="panel-body">
<form class="form-horizontal" method="post" role="form" action="{$_url}services/add-post">
<div class="form-group">
@ -32,49 +32,49 @@
</div>
{/if}
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Plan_Name']}</label>
<label class="col-md-2 control-label">{Lang::T('Plan Name')}</label>
<div class="col-md-6">
<input type="text" class="form-control" id="name" name="name" maxlength="40">
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Plan_Type']}</label>
<label class="col-md-2 control-label">{Lang::T('Plan Type')}</label>
<div class="col-md-10">
<input type="radio" id="Unlimited" name="typebp" value="Unlimited" checked>
{$_L['Unlimited']}
<input type="radio" id="Limited" name="typebp" value="Limited"> {$_L['Limited']}
{Lang::T('Unlimited')}
<input type="radio" id="Limited" name="typebp" value="Limited"> {Lang::T('Limited')}
</div>
</div>
<div style="display:none;" id="Type">
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Limit_Type']}</label>
<label class="col-md-2 control-label">{Lang::T('Limit Type')}</label>
<div class="col-md-10">
<input type="radio" id="Time_Limit" name="limit_type" value="Time_Limit" checked>
{$_L['Time_Limit']}
{Lang::T('Time Limit')}
<input type="radio" id="Data_Limit" name="limit_type" value="Data_Limit">
{$_L['Data_Limit']}
{Lang::T('Data Limit')}
<input type="radio" id="Both_Limit" name="limit_type" value="Both_Limit">
{$_L['Both_Limit']}
{Lang::T('Both Limit')}
</div>
</div>
</div>
<div style="display:none;" id="TimeLimit">
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Time_Limit']}</label>
<label class="col-md-2 control-label">{Lang::T('Time Limit')}</label>
<div class="col-md-4">
<input type="text" class="form-control" id="time_limit" name="time_limit" value="0">
</div>
<div class="col-md-2">
<select class="form-control" id="time_unit" name="time_unit">
<option value="Hrs">{$_L['Hrs']}</option>
<option value="Mins">{$_L['Mins']}</option>
<option value="Hrs">{Lang::T('Hrs')}</option>
<option value="Mins">{Lang::T('Mins')}</option>
</select>
</div>
</div>
</div>
<div style="display:none;" id="DataLimit">
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Data_Limit']}</label>
<label class="col-md-2 control-label">{Lang::T('Data Limit')}</label>
<div class="col-md-4">
<input type="text" class="form-control" id="data_limit" name="data_limit" value="0">
</div>
@ -88,10 +88,10 @@
</div>
<div class="form-group">
<label class="col-md-2 control-label"><a
href="{$_url}bandwidth/add">{$_L['BW_Name']}</a></label>
href="{$_url}bandwidth/add">{Lang::T('Bandwidth Name')}</a></label>
<div class="col-md-6">
<select id="id_bw" name="id_bw" class="form-control select2">
<option value="">{$_L['Select_BW']}...</option>
<option value="">{Lang::T('Select Bandwidth')}...</option>
{foreach $d as $ds}
<option value="{$ds['id']}">{$ds['name_bw']}</option>
{/foreach}
@ -99,7 +99,7 @@
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Plan_Price']}</label>
<label class="col-md-2 control-label">{Lang::T('Plan Price')}</label>
<div class="col-md-6">
<div class="input-group">
<span class="input-group-addon">{$_c['currency_code']}</span>
@ -108,37 +108,37 @@
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Shared_Users']}</label>
<label class="col-md-2 control-label">{Lang::T('Shared Users')}</label>
<div class="col-md-6">
<input type="text" class="form-control" id="sharedusers" name="sharedusers" value="1">
<p class="help-block">{Lang::T('1 user can be used for many devices?')}</p>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Plan_Validity']}</label>
<label class="col-md-2 control-label">{Lang::T('Plan Validity')}</label>
<div class="col-md-4">
<input type="text" class="form-control" id="validity" name="validity">
</div>
<div class="col-md-2">
<select class="form-control" id="validity_unit" name="validity_unit">
<option value="Mins" {if $d['validity_unit'] eq 'Mins'} selected {/if}>{$_L['Mins']}
<option value="Mins" {if $d['validity_unit'] eq 'Mins'} selected {/if}>{Lang::T('Mins')}
</option>
<option value="Hrs" {if $d['validity_unit'] eq 'Hrs'} selected {/if}>{$_L['Hrs']}
<option value="Hrs" {if $d['validity_unit'] eq 'Hrs'} selected {/if}>{Lang::T('Hrs')}
</option>
<option value="Days" {if $d['validity_unit'] eq 'Days'} selected {/if}>{$_L['Days']}
<option value="Days" {if $d['validity_unit'] eq 'Days'} selected {/if}>{Lang::T('Days')}
</option>
<option value="Months" {if $d['validity_unit'] eq 'Months'} selected {/if}>
{$_L['Months']}</option>
{Lang::T('Months')}</option>
</select>
</div>
</div>
<span id="routerChoose" class="">
<div class="form-group">
<label class="col-md-2 control-label"><a
href="{$_url}routers/add">{$_L['Router_Name']}</a></label>
href="{$_url}routers/add">{Lang::T('Router Name')}</a></label>
<div class="col-md-6">
<select id="routers" name="routers" required class="form-control select2">
<option value=''>{$_L['Select_Routers']}</option>
<option value=''>{Lang::T('Select Routers')}</option>
{foreach $r as $rs}
<option value="{$rs['name']}">{$rs['name']}</option>
{/foreach}
@ -147,20 +147,27 @@
</div>
</div>
</span>
<div class="form-group">
<legend>{Lang::T('Expired Action')} <sub>{Lang::T('Optional')}</sub></legend>
<div class="form-group" id="ipPool">
<label class="col-md-2 control-label"><a
href="{$_url}pool/add">{Lang::T('Expired IP Pool')}</a></label>
<div class="col-md-6">
<select id="pool_expired" name="pool_expired" class="form-control select2">
<option value=''>{$_L['Select_Pool']}</option>
<option value=''>{Lang::T('Select Pool')}</option>
</select>
</div>
</div>
{* <div class="form-group" id="AddressList">
<label class="col-md-2 control-label">{Lang::T('Address List')}</label>
<div class="col-md-6">
<input type="text" class="form-control" name="list_expired" id="list_expired">
</div>
</div> *}
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<button class="btn btn-success waves-effect waves-light"
type="submit">{$_L['Save']}</button>
Or <a href="{$_url}services/hotspot">{$_L['Cancel']}</a>
type="submit">{Lang::T('Save Changes')}</button>
Or <a href="{$_url}services/hotspot">{Lang::T('Cancel')}</a>
</div>
</div>
</form>
@ -193,4 +200,4 @@
{/literal}
{/if}
{include file="sections/footer.tpl"}
{include file="sections/footer.tpl"}

View File

@ -3,7 +3,7 @@
<div class="row">
<div class="col-sm-12 col-md-12">
<div class="panel panel-primary panel-hovered panel-stacked mb30">
<div class="panel-heading">{$_L['Edit_Plan']} || {$d['name_plan']}</div>
<div class="panel-heading">{Lang::T('Edit Service Plan')} || {$d['name_plan']}</div>
<div class="panel-body">
<form class="form-horizontal" method="post" role="form" action="{$_url}services/edit-post">
<input type="hidden" name="id" value="{$d['id']}">
@ -30,32 +30,32 @@
</div>
{/if}
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Plan_Name']}</label>
<label class="col-md-2 control-label">{Lang::T('Plan Name')}</label>
<div class="col-md-6">
<input type="text" class="form-control" id="name" name="name" maxlength="40"
value="{$d['name_plan']}">
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Plan_Type']}</label>
<label class="col-md-2 control-label">{Lang::T('Plan Type')}</label>
<div class="col-md-10">
<input type="radio" id="Unlimited" name="typebp" value="Unlimited"
{if $d['typebp'] eq 'Unlimited'} checked {/if}> {$_L['Unlimited']}
{if $d['typebp'] eq 'Unlimited'} checked {/if}> {Lang::T('Unlimited')}
<input type="radio" id="Limited" {if $_c['radius_enable'] and $d['is_radius']}disabled{/if}
name="typebp" value="Limited" {if $d['typebp'] eq 'Limited'} checked {/if}>
{$_L['Limited']}
{Lang::T('Limited')}
</div>
</div>
<div {if $d['typebp'] eq 'Unlimited'} style="display:none;" {/if} id="Type">
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Limit_Type']}</label>
<label class="col-md-2 control-label">{Lang::T('Limit Type')}</label>
<div class="col-md-10">
<input type="radio" id="Time_Limit" name="limit_type" value="Time_Limit"
{if $d['limit_type'] eq 'Time_Limit'} checked {/if}> {$_L['Time_Limit']}
{if $d['limit_type'] eq 'Time_Limit'} checked {/if}> {Lang::T('Time Limit')}
<input type="radio" id="Data_Limit" name="limit_type" value="Data_Limit"
{if $d['limit_type'] eq 'Data_Limit'} checked {/if}> {$_L['Data_Limit']}
{if $d['limit_type'] eq 'Data_Limit'} checked {/if}> {Lang::T('Data Limit')}
<input type="radio" id="Both_Limit" name="limit_type" value="Both_Limit"
{if $d['limit_type'] eq 'Both_Limit'} checked {/if}> {$_L['Both_Limit']}
{if $d['limit_type'] eq 'Both_Limit'} checked {/if}> {Lang::T('Both Limit')}
</div>
</div>
</div>
@ -63,16 +63,16 @@
{elseif ($d['time_limit']) eq '0'}
style="display:none;" {/if} id="TimeLimit">
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Time_Limit']}</label>
<label class="col-md-2 control-label">{Lang::T('Time Limit')}</label>
<div class="col-md-4">
<input type="text" class="form-control" id="time_limit" name="time_limit"
value="{$d['time_limit']}">
</div>
<div class="col-md-2">
<select class="form-control" id="time_unit" name="time_unit">
<option value="Hrs" {if $d['time_unit'] eq 'Hrs'} selected {/if}>{$_L['Hrs']}
<option value="Hrs" {if $d['time_unit'] eq 'Hrs'} selected {/if}>{Lang::T('Hrs')}
</option>
<option value="Mins" {if $d['time_unit'] eq 'Mins'} selected {/if}>{$_L['Mins']}
<option value="Mins" {if $d['time_unit'] eq 'Mins'} selected {/if}>{Lang::T('Mins')}
</option>
</select>
</div>
@ -82,7 +82,7 @@
{elseif ($d['data_limit']) eq '0'}
style="display:none;" {/if} id="DataLimit">
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Data_Limit']}</label>
<label class="col-md-2 control-label">{Lang::T('Data Limit')}</label>
<div class="col-md-4">
<input type="text" class="form-control" id="data_limit" name="data_limit"
value="{$d['data_limit']}">
@ -97,7 +97,7 @@
</div>
<div class="form-group">
<label class="col-md-2 control-label"><a
href="{$_url}bandwidth/add">{$_L['BW_Name']}</a></label>
href="{$_url}bandwidth/add">{Lang::T('Bandwidth Name')}</a></label>
<div class="col-md-6">
<select id="id_bw" name="id_bw" class="form-control select2">
{foreach $b as $bs}
@ -108,7 +108,7 @@
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Plan_Price']}</label>
<label class="col-md-2 control-label">{Lang::T('Plan Price')}</label>
<div class="col-md-6">
<div class="input-group">
<span class="input-group-addon">{$_c['currency_code']}</span>
@ -117,47 +117,48 @@
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Shared_Users']}</label>
<label class="col-md-2 control-label">{Lang::T('Shared Users')}</label>
<div class="col-md-6">
<input type="text" class="form-control" id="sharedusers" name="sharedusers"
value="{$d['shared_users']}">
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Plan_Validity']}</label>
<label class="col-md-2 control-label">{Lang::T('Plan Validity')}</label>
<div class="col-md-4">
<input type="text" class="form-control" id="validity" name="validity"
value="{$d['validity']}">
</div>
<div class="col-md-2">
<select class="form-control" id="validity_unit" name="validity_unit">
<option value="Mins" {if $d['validity_unit'] eq 'Mins'} selected {/if}>{$_L['Mins']}
<option value="Mins" {if $d['validity_unit'] eq 'Mins'} selected {/if}>{Lang::T('Mins')}
</option>
<option value="Hrs" {if $d['validity_unit'] eq 'Hrs'} selected {/if}>{$_L['Hrs']}
<option value="Hrs" {if $d['validity_unit'] eq 'Hrs'} selected {/if}>{Lang::T('Hrs')}
</option>
<option value="Days" {if $d['validity_unit'] eq 'Days'} selected {/if}>{$_L['Days']}
<option value="Days" {if $d['validity_unit'] eq 'Days'} selected {/if}>{Lang::T('Days')}
</option>
<option value="Months" {if $d['validity_unit'] eq 'Months'} selected {/if}>
{$_L['Months']}</option>
{Lang::T('Months')}</option>
</select>
</div>
</div>
<span id="routerChoose" class="{if $d['is_radius']}hidden{/if}">
<div class="form-group">
<label class="col-md-2 control-label"><a
href="{$_url}routers/add">{$_L['Router_Name']}</a></label>
href="{$_url}routers/add">{Lang::T('Router Name')}</a></label>
<div class="col-md-6">
<input type="text" class="form-control" id="routers" name="routers"
value="{$d['routers']}" readonly>
</div>
</div>
</span>
<legend>{Lang::T('Expired Action')} <sub>{Lang::T('Optional')}</sub></legend>
<div class="form-group">
<label class="col-md-2 control-label"><a
href="{$_url}pool/add">{Lang::T('Expired IP Pool')}</a></label>
<div class="col-md-6">
<select id="pool_expired" name="pool_expired" class="form-control select2">
<option value=''>{$_L['Select_Pool']}</option>
<option value=''>{Lang::T('Select Pool')}</option>
{foreach $p as $ps}
<option value="{$ps['pool_name']}" {if $d['pool_expired'] eq $ps['pool_name']} selected
{/if}>{$ps['pool_name']}</option>
@ -165,11 +166,17 @@
</select>
</div>
</div>
{* <div class="form-group" id="AddressList">
<label class="col-md-2 control-label">{Lang::T('Address List')}</label>
<div class="col-md-6">
<input type="text" class="form-control" name="list_expired" id="list_expired" value="{$d['list_expired']}">
</div>
</div> *}
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<button class="btn btn-success waves-effect waves-light"
type="submit">{$_L['Save']}</button>
Or <a href="{$_url}services/hotspot">{$_L['Cancel']}</a>
type="submit">{Lang::T('Save Changes')}</button>
Or <a href="{$_url}services/hotspot">{Lang::T('Cancel')}</a>
</div>
</div>
</form>

View File

@ -8,7 +8,7 @@
<a class="btn btn-primary btn-xs" title="save" href="{$_url}services/sync/hotspot"
onclick="return confirm('This will sync/send hotspot plan to Mikrotik?')"><span
class="glyphicon glyphicon-refresh" aria-hidden="true"></span> sync</a>
</div>{$_L['Hotspot_Plans']}
</div>{Lang::T('Hotspot Plans')}
</div>
<div class="panel-body">
<div class="md-whiteframe-z1 mb20 text-center" style="padding: 15px">
@ -19,39 +19,40 @@
<span class="fa fa-search"></span>
</div>
<input type="text" name="name" class="form-control"
placeholder="{$_L['Search_by_Name']}...">
placeholder="{Lang::T('Search by Name')}...">
<div class="input-group-btn">
<button class="btn btn-success" type="submit">{$_L['Search']}</button>
<button class="btn btn-success" type="submit">{Lang::T('Search')}</button>
</div>
</div>
</form>
</div>
<div class="col-md-4">
<a href="{$_url}services/add" class="btn btn-primary btn-block waves-effect"><i
class="ion ion-android-add"> </i> {$_L['New_Plan']}</a>
class="ion ion-android-add"> </i> {Lang::T('New Service Plan')}</a>
</div>&nbsp;
</div>
<div class="table-responsive">
<table class="table table-bordered table-striped table-condensed">
<thead>
<tr>
<th>{$_L['Plan_Name']}</th>
<th>{$_L['Plan_Type']}</th>
<th>{$_L['Bandwidth_Plans']}</th>
<th>{$_L['Plan_Price']}</th>
<th>{$_L['Time_Limit']}</th>
<th>{$_L['Data_Limit']}</th>
<th>{$_L['Plan_Validity']}</th>
<th>{$_L['Routers']}</th>
<th>{Lang::T('Plan Name')}</th>
<th>{Lang::T('Plan Type')}</th>
<th>{Lang::T('Bandwidth Plans')}</th>
<th>{Lang::T('Plan Price')}</th>
<th>{Lang::T('Time Limit')}</th>
<th>{Lang::T('Data Limit')}</th>
<th>{Lang::T('Plan Validity')}</th>
<th>{Lang::T('Routers')}</th>
<th>{Lang::T('Expired IP Pool')}</th>
<th>{$_L['Manage']}</th>
<th>{Lang::T('Manage')}</th>
<th>ID</th>
</tr>
</thead>
<tbody>
{foreach $d as $ds}
<tr {if $ds['enabled'] != 1}class="danger" title="disabled"
{elseif $ds['allow_purchase'] != 'yes'}class="warning" title="Customer can't purchase" {/if}>
<td>{$ds['name_plan']}</td>
<td class="headcol">{$ds['name_plan']}</td>
<td>{$ds['typebp']}</td>
<td>{$ds['name_bw']}</td>
<td>{Lang::moneyFormat($ds['price'])}</td>
@ -67,14 +68,15 @@
{/if}
{/if}
</td>
<td>{$ds['pool_expired']}</td>
<td>{$ds['pool_expired']}{if $ds['list_expired']}{if $ds['pool_expired']} | {/if}{$ds['list_expired']}{/if}</td>
<td>
<a href="{$_url}services/edit/{$ds['id']}"
class="btn btn-info btn-xs">{$_L['Edit']}</a>
class="btn btn-info btn-xs">{Lang::T('Edit')}</a>
<a href="{$_url}services/delete/{$ds['id']}" id="{$ds['id']}"
onclick="return confirm('{$_L['Delete']}?')"
class="btn btn-danger btn-xs">{$_L['Delete']}</a>
onclick="return confirm('{Lang::T('Delete')}?')"
class="btn btn-danger btn-xs"><i class="glyphicon glyphicon-trash"></i></a>
</td>
<td>{$ds['id']}</td>
</tr>
{/foreach}
</tbody>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 342 KiB

After

Width:  |  Height:  |  Size: 172 KiB

View File

@ -15,45 +15,58 @@
</script>
</head>
<body topmargin="0" leftmargin="0" onload="printpage()">
<body topmargin="0" leftmargin="0" {if !$nuxprint} onload="printpage()" {/if}>
<div class="row">
<div class="col-md-12">
<div class="col-md-6">
<table width="200">
<tr>
<td>
<pre style="border-style: none; background-color: white;"><b>{Lang::pad($_c['CompanyName'],' ', 2)}</b>
{Lang::pad($_c['address'],' ', 2)}
{Lang::pad($_c['phone'],' ', 2)}
{Lang::pad("", '=')}
{Lang::pads("Invoice", $in['invoice'], ' ')}
{Lang::pads($_L['Date'], $date, ' ')}
{Lang::pads($_L['Sales'], $_admin['fullname'], ' ')}
{Lang::pad("", '=')}
{Lang::pads($_L['Type'], $in['type'], ' ')}
{Lang::pads($_L['Plan_Name'], $in['plan_name'], ' ')}
{Lang::pads($_L['Plan_Price'], Lang::moneyFormat($in['price']), ' ')}
{Lang::pad($in['method'], ' ', 2)}
{if $content}
<pre style="border-style: none; background-color: white;">{$content}</pre>{else}
<pre style="border-style: none; background-color: white;"><b>{Lang::pad($_c['CompanyName'],' ', 2)}</b>
{Lang::pad($_c['address'],' ', 2)}
{Lang::pad($_c['phone'],' ', 2)}
{Lang::pad("", '=')}
{Lang::pads("Invoice", $in['invoice'], ' ')}
{Lang::pads(Lang::T('Date'), $date, ' ')}
{Lang::pads(Lang::T('Sales'), $_admin['fullname'], ' ')}
{Lang::pad("", '=')}
{Lang::pads(Lang::T('Type'), $in['type'], ' ')}
{Lang::pads(Lang::T('Plan Name'), $in['plan_name'], ' ')}
{Lang::pads(Lang::T('Plan Price'), Lang::moneyFormat($in['price']), ' ')}
{Lang::pad($in['method'], ' ', 2)}
{Lang::pads($_L['Username'], $in['username'], ' ')}
{Lang::pads($_L['Password'], '**********', ' ')}
{if $in['type'] != 'Balance'}
{Lang::pads($_L['Created_On'], Lang::dateAndTimeFormat($in['recharged_on'],$in['recharged_time']), ' ')}
{Lang::pads($_L['Expires_On'], Lang::dateAndTimeFormat($in['expiration'],$in['time']), ' ')}
{/if}
{Lang::pad("", '=')}
{Lang::pad($_c['note'],' ', 2)}</pre>
{Lang::pads(Lang::T('Username'), $in['username'], ' ')}
{Lang::pads(Lang::T('Password'), '**********', ' ')}
{if $in['type'] != 'Balance'}
{Lang::pads(Lang::T('Created On'), Lang::dateAndTimeFormat($in['recharged_on'],$in['recharged_time']), ' ')}
{Lang::pads(Lang::T('Expires On'), Lang::dateAndTimeFormat($in['expiration'],$in['time']), ' ')}
{/if}
{Lang::pad("", '=')}
{Lang::pad($_c['note'],' ', 2)}</pre>
{/if}
</td>
</tr>
</table>
{if $nuxprint}
<a href="{$nuxprint}" class="btn btn-success text-black btn-sm" name="nux" value="print">
<i class="glyphicon glyphicon-print"></i>
Nux Print
<i class="glyphicon glyphicon-phone"></i>
</a>
<br>
<iframe src="{$nuxprint}" style="height: 2px;"><iframe>
{/if}
</div>
</div>
<script src="ui/ui/scripts/jquery-1.10.2.js"></script>
<script src="ui/ui/scripts/jquery.min.js"></script>
<script src="ui/ui/scripts/bootstrap.min.js"></script>
{if isset($xfooter)}
{$xfooter}
{/if}
</body>
</html>

View File

@ -5,49 +5,36 @@
<div class="panel panel-hovered panel-primary panel-stacked mb30">
<div class="panel-heading">{$in['invoice']}</div>
<div class="panel-body">
<pre><b>{Lang::pad($_c['CompanyName'],' ', 2)}</b>
{Lang::pad($_c['address'],' ', 2)}
{Lang::pad($_c['phone'],' ', 2)}
{Lang::pad("", '=')}
{Lang::pads("Invoice", $in['invoice'], ' ')}
{Lang::pads($_L['Date'], $date, ' ')}
{Lang::pads($_L['Sales'], $_admin['fullname'], ' ')}
{Lang::pad("", '=')}
{Lang::pads($_L['Type'], $in['type'], ' ')}
{Lang::pads($_L['Plan_Name'], $in['plan_name'], ' ')}
{Lang::pads($_L['Plan_Price'], Lang::moneyFormat($in['price']), ' ')}
{Lang::pad($in['method'], ' ', 2)}
{Lang::pads($_L['Username'], $in['username'], ' ')}
{Lang::pads($_L['Password'], '**********', ' ')}
{if $in['type'] != 'Balance'}
{Lang::pads($_L['Created_On'], Lang::dateAndTimeFormat($in['recharged_on'],$in['recharged_time']), ' ')}
{Lang::pads($_L['Expires_On'], Lang::dateAndTimeFormat($in['expiration'],$in['time']), ' ')}
{/if}
{Lang::pad("", '=')}
{Lang::pad($_c['note'],' ', 2)}</pre>
<form class="form-horizontal" method="post" action="{$_url}prepaid/print" target="_blank">
<input type="hidden" name="id" value="{$in['id']}">
<a href="{$_url}prepaid/list" class="btn btn-primary btn-sm"><i
class="ion-reply-all"></i>{$_L['Finish']}</a>
<a href="{$_url}prepaid/view/{$in['id']}/send" class="btn btn-info text-black btn-sm"><i
class="glyphicon glyphicon-envelope"></i> {Lang::T("Resend To Customer")}</a>
<button type="submit" class="btn btn-default btn-sm"><i class="fa fa-print"></i>
{$_L['Click_Here_to_Print']}</button>
</form>
<form class="form-horizontal" method="post" action="{$_url}prepaid/print" target="_blank">
<pre id="content"></pre>
<textarea class="hidden" id="formcontent" name="content">{$invoice}</textarea>
<input type="hidden" name="id" value="{$in['id']}">
<a href="{$_url}prepaid/list" class="btn btn-default btn-sm"><i
class="ion-reply-all"></i>{Lang::T('Finish')}</a>
<a href="https://api.whatsapp.com/send/?text={$whatsapp}" target="_blank"
class="btn btn-primary btn-sm">
<i class="glyphicon glyphicon-share"></i> WhatsApp</a>
<a href="{$_url}prepaid/view/{$in['id']}/send" class="btn btn-info text-black btn-sm"><i
class="glyphicon glyphicon-envelope"></i> {Lang::T("Resend")}</a>
<button type="submit" class="btn btn-info text-black btn-sm"><i class="glyphicon glyphicon-print"></i>
Print</button>
<a href="nux://print?text={urlencode($invoice)}"
class="btn btn-success text-black btn-sm hidden-md hidden-lg">
<i class="glyphicon glyphicon-phone"></i>
NuxPrint
</a>
<a href="https://github.com/hotspotbilling/android-printer"
class="btn btn-success text-black btn-sm hidden-xs hidden-sm" target="_blank">
<i class="glyphicon glyphicon-phone"></i>
NuxPrint
</a>
</form>
</div>
</div>
</div>
</div>
<script type="text/javascript">
var s5_taf_parent = window.location;
function popup_print() {
window.open('print.php?page=<?php echo $_GET['
act '];?>', 'page',
'toolbar=0,scrollbars=1,location=0,statusbar=0,menubar=0,resizable=0,width=800,height=600,left=50,top=50,titlebar=yes'
)
}
document.getElementById('content').innerHTML = document.getElementById('formcontent').innerHTML;
</script>
{include file="sections/footer.tpl"}

View File

@ -1,39 +1,31 @@
{include file="sections/header.tpl"}
<div class="row">
<div class="col-sm-12 col-md-12">
<div class="panel panel-primary panel-hovered panel-stacked mb30">
<div class="panel-heading">{$_L['Add_Plan']}</div>
<div class="panel-body">
<form class="form-horizontal" method="post" role="form" action="{$_url}settings/lang-post" >
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Name_Lang']}</label>
<div class="col-md-6">
<input type="text" class="form-control" id="name" name="name">
</div>
<div class="row">
<div class="col-sm-12 col-md-12">
<div class="panel panel-primary panel-hovered panel-stacked mb30">
<div class="panel-heading">{Lang::T('Translation')}</div>
<div class="panel-body">
<form class="form-horizontal" method="post" role="form" action="{$_url}settings/lang-post">
{foreach $langs as $lang}
<div class="form-group">
<div class="col-md-12">
<small>{str_replace('_',' ', $lang@key)}</small>
<input type="text" class="form-control" rows="1" name="{$lang@key}"
placeholder="{$lang@key}" value="{$lang}">
</div>
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Folder_Lang']}</label>
<div class="col-md-6">
<input type="text" class="form-control" id="folder" name="folder">
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Translator']}</label>
<div class="col-md-6">
<input type="text" class="form-control" id="translator" name="translator">
</div>
</div>
<div class="form-group">
<div class="col-lg-offset-2 col-lg-10">
<button class="btn btn-primary waves-effect waves-light" type="submit">{$_L['Save']}</button>
Or <a href="{$_url}settings/localisation">{$_L['Cancel']}</a>
</div>
</div>
</form>
</div>
{/foreach}
<div class="form-group">
<div class="col-lg-offset-2 col-lg-10">
<button class="btn btn-primary waves-effect waves-light"
type="submit">{Lang::T('Save Changes')}</button>
Or <a href="{$_url}settings/localisation">{Lang::T('Cancel')}</a>
</div>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
{include file="sections/footer.tpl"}
{include file="sections/footer.tpl"}

View File

@ -15,9 +15,9 @@
<span class="fa fa-search"></span>
</div>
<input type="text" name="q" class="form-control" value="{$q}"
placeholder="{$_L['Search_by_Name']}...">
placeholder="{Lang::T('Search by Name')}...">
<div class="input-group-btn">
<button class="btn btn-success" type="submit">{$_L['Search']}</button>
<button class="btn btn-success" type="submit">{Lang::T('Search')}</button>
</div>
</div>
</form>

View File

@ -15,9 +15,9 @@
<span class="fa fa-search"></span>
</div>
<input type="text" name="q" class="form-control" value="{$q}"
placeholder="{$_L['Search_by_Name']}...">
placeholder="{Lang::T('Search by Name')}...">
<div class="input-group-btn">
<button class="btn btn-success" type="submit">{$_L['Search']}</button>
<button class="btn btn-success" type="submit">{Lang::T('Search')}</button>
</div>
</div>
</form>

View File

@ -15,13 +15,13 @@
<div class="panel-footer">
<a href="javascript:saveIt()" class="btn btn-primary btn-block">SAVE</a>
<br>
<p class="help-block">{$_L['Info_Page']}</p>
<p class="help-block">{Lang::T("Sometimes you need to refresh 3 times until content change")}</p>
<input type="text" class="form-control" onclick="this.select()" readonly
value="{$app_url}/pages/{$PageFile}.html">
</div>
{else}
<div class="panel-footer">
{$_L['Failed_Save_Page']}
{Lang::T("Failed to save page, make sure i can write to folder pages, <i>chmod 664 pages/*.html<i>")}
</div>
{/if}
{if $PageFile=='Voucher'}

View File

@ -24,7 +24,7 @@
</select>
</div>
<div class="col-md-2">
<button class="btn btn-block btn-primary waves-effect waves-light" type="submit">{$_L['Save']}</button>
<button class="btn btn-block btn-primary waves-effect waves-light" type="submit">{Lang::T('Save Changes')}</button>
</div>
</div>
</div>

View File

@ -3,24 +3,24 @@
<div class="row">
<div class="col-sm-12 col-md-12">
<div class="panel panel-primary panel-hovered panel-stacked mb30">
<div class="panel-heading">{$_L['Add_Pool']}</div>
<div class="panel-heading">{Lang::T('Add Pool')}</div>
<div class="panel-body">
<form class="form-horizontal" method="post" role="form" action="{$_url}pool/add-post" >
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Pool_Name']}</label>
<label class="col-md-2 control-label">{Lang::T('Name Pool')}</label>
<div class="col-md-6">
<input type="text" class="form-control" id="name" name="name">
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Range_IP']}</label>
<label class="col-md-2 control-label">{Lang::T('Range IP')}</label>
<div class="col-md-6">
<input type="text" class="form-control" id="ip_address" name="ip_address" placeholder="ex: 192.168.88.2-192.168.88.254">
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label"><a href="{$_url}routers/add">{$_L['Routers']}</a></label>
<label class="col-md-2 control-label"><a href="{$_url}routers/add">{Lang::T('Routers')}</a></label>
<div class="col-md-6">
<select id="routers" name="routers" class="form-control select2">
{if $_c['radius_enable']}
@ -37,8 +37,8 @@
</div>
<div class="form-group">
<div class="col-lg-offset-2 col-lg-10">
<button class="btn btn-primary waves-effect waves-light" type="submit">{$_L['Save']}</button>
Or <a href="{$_url}pool/list">{$_L['Cancel']}</a>
<button class="btn btn-primary waves-effect waves-light" type="submit">{Lang::T('Save Changes')}</button>
Or <a href="{$_url}pool/list">{Lang::T('Cancel')}</a>
</div>
</div>
</form>

View File

@ -3,25 +3,25 @@
<div class="row">
<div class="col-sm-12 col-md-12">
<div class="panel panel-primary panel-hovered panel-stacked mb30">
<div class="panel-heading">{$_L['Edit_Pool']}</div>
<div class="panel-heading">{Lang::T('Edit Pool')}</div>
<div class="panel-body">
<form class="form-horizontal" method="post" role="form" action="{$_url}pool/edit-post" >
<input type="hidden" name="id" value="{$d['id']}">
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Pool_Name']}</label>
<label class="col-md-2 control-label">{Lang::T('Name Pool')}</label>
<div class="col-md-6">
<input type="text" class="form-control" id="name" name="name" value="{$d['pool_name']}" readonly>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Range_IP']}</label>
<label class="col-md-2 control-label">{Lang::T('Range IP')}</label>
<div class="col-md-6">
<input type="text" class="form-control" id="ip_address" name="ip_address" value="{$d['range_ip']}">
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Routers']}</label>
<label class="col-md-2 control-label">{Lang::T('Routers')}</label>
<div class="col-md-6">
<input type="text" class="form-control" id="routers" name="routers" value="{$d['routers']}" readonly>
</div>
@ -32,8 +32,8 @@
<div class="form-group">
<div class="col-lg-offset-2 col-lg-10">
<button class="btn btn-success waves-effect waves-light" type="submit">{$_L['Save']}</button>
Or <a href="{$_url}pool/list">{$_L['Cancel']}</a>
<button class="btn btn-success waves-effect waves-light" type="submit">{Lang::T('Save Changes')}</button>
Or <a href="{$_url}pool/list">{Lang::T('Cancel')}</a>
</div>
</div>
</form>

View File

@ -9,7 +9,7 @@
onclick="return confirm('This will sync/send IP Pool to Mikrotik?')"><span
class="glyphicon glyphicon-refresh" aria-hidden="true"></span> sync</a>
</div>
{$_L['Pool']}
{Lang::T('IP Pool')}
</div>
<div class="panel-body">
<div class="md-whiteframe-z1 mb20 text-center" style="padding: 15px">
@ -20,43 +20,42 @@
<span class="fa fa-search"></span>
</div>
<input type="text" name="name" class="form-control"
placeholder="{$_L['Search_by_Name']}...">
placeholder="{Lang::T('Search by Name')}...">
<div class="input-group-btn">
<button class="btn btn-success" type="submit">{$_L['Search']}</button>
<button class="btn btn-success" type="submit">{Lang::T('Search')}</button>
</div>
</div>
</form>
</div>
<div class="col-md-4">
<a href="{$_url}pool/add" class="btn btn-primary btn-block waves-effect"><i
class="ion ion-android-add"> </i> {$_L['New_Pool']}</a>
class="ion ion-android-add"> </i> {Lang::T('New Pool')}</a>
</div>&nbsp;
</div>
<div class="table-responsive">
<table class="table table-bordered table-striped table-condensed">
<thead>
<tr>
<th>#</th>
<th>{$_L['Pool_Name']}</th>
<th>{$_L['Range_IP']}</th>
<th>{$_L['Routers']}</th>
<th>{$_L['Manage']}</th>
<th>{Lang::T('Name Pool')}</th>
<th>{Lang::T('Range IP')}</th>
<th>{Lang::T('Routers')}</th>
<th>{Lang::T('Manage')}</th>
<th>ID</th>
</tr>
</thead>
<tbody>
{$no = 1}
{foreach $d as $ds}
<tr>
<td align="center">{$no++}</td>
<td>{$ds['pool_name']}</td>
<td>{$ds['range_ip']}</td>
<td>{$ds['routers']}</td>
<td align="center">
<a href="{$_url}pool/edit/{$ds['id']}" class="btn btn-info btn-xs">{$_L['Edit']}</a>
<a href="{$_url}pool/edit/{$ds['id']}" class="btn btn-info btn-xs">{Lang::T('Edit')}</a>
<a href="{$_url}pool/delete/{$ds['id']}" id="{$ds['id']}"
onclick="return confirm('{$_L['Delete']}?')"
class="btn btn-danger btn-xs">{$_L['Delete']}</a>
onclick="return confirm('{Lang::T('Delete')}?')"
class="btn btn-danger btn-xs"><i class="glyphicon glyphicon-trash"></i></a>
</td>
<td>{$ds['id']}</td>
</tr>
{/foreach}
</tbody>

View File

@ -3,7 +3,7 @@
<div class="row">
<div class="col-sm-12 col-md-12">
<div class="panel panel-primary panel-hovered panel-stacked mb30">
<div class="panel-heading">{$_L['Add_Plan']}</div>
<div class="panel-heading">{Lang::T('Add Service Plan')}</div>
<div class="panel-body">
<form class="form-horizontal" method="post" role="form" action="{$_url}services/pppoe-add-post">
<div class="form-group">
@ -30,17 +30,17 @@
</div>
{/if}
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Plan_Name']}</label>
<label class="col-md-2 control-label">{Lang::T('Plan Name')}</label>
<div class="col-md-6">
<input type="text" class="form-control" id="name_plan" maxlength="40" name="name_plan">
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label"><a
href="{$_url}bandwidth/add">{$_L['BW_Name']}</a></label>
href="{$_url}bandwidth/add">{Lang::T('Bandwidth Name')}</a></label>
<div class="col-md-6">
<select id="id_bw" name="id_bw" class="form-control select2">
<option value="">{$_L['Select_BW']}...</option>
<option value="">{Lang::T('Select Bandwidth')}...</option>
{foreach $d as $ds}
<option value="{$ds['id']}">{$ds['name_bw']}</option>
{/foreach}
@ -48,7 +48,7 @@
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Plan_Price']}</label>
<label class="col-md-2 control-label">{Lang::T('Plan Price')}</label>
<div class="col-md-6">
<div class="input-group">
<span class="input-group-addon">{$_c['currency_code']}</span>
@ -57,25 +57,25 @@
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Plan_Validity']}</label>
<label class="col-md-2 control-label">{Lang::T('Plan Validity')}</label>
<div class="col-md-4">
<input type="text" class="form-control" id="validity" name="validity">
</div>
<div class="col-md-2">
<select class="form-control" id="validity_unit" name="validity_unit">
<option value="Mins">{$_L['Mins']}</option>
<option value="Hrs">{$_L['Hrs']}</option>
<option value="Days">{$_L['Days']}</option>
<option value="Months">{$_L['Months']}</option>
<option value="Mins">{Lang::T('Mins')}</option>
<option value="Hrs">{Lang::T('Hrs')}</option>
<option value="Days">{Lang::T('Days')}</option>
<option value="Months">{Lang::T('Months')}</option>
</select>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label"><a
href="{$_url}routers/add">{$_L['Router_Name']}</a></label>
href="{$_url}routers/add">{Lang::T('Router Name')}</a></label>
<div class="col-md-6">
<select id="routers" name="routers" required class="form-control select2">
<option value=''>{$_L['Select_Routers']}</option>
<option value=''>{Lang::T('Select Routers')}</option>
{foreach $r as $rs}
<option value="{$rs['name']}">{$rs['name']}</option>
{/foreach}
@ -84,27 +84,34 @@
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label"><a href="{$_url}pool/add">{$_L['Pool']}</a></label>
<label class="col-md-2 control-label"><a href="{$_url}pool/add">{Lang::T('IP Pool')}</a></label>
<div class="col-md-6">
<select id="pool_name" name="pool_name" required class="form-control select2">
<option value=''>{$_L['Select_Pool']}</option>
<option value=''>{Lang::T('Select Pool')}</option>
</select>
</div>
</div>
<div class="form-group">
<legend>{Lang::T('Expired Action')} <sub>{Lang::T('Optional')}</sub></legend>
<div class="form-group" id="ipPool">
<label class="col-md-2 control-label"><a
href="{$_url}pool/add">{Lang::T('Expired IP Pool')}</a></label>
<div class="col-md-6">
<select id="pool_expired" name="pool_expired" class="form-control select2">
<option value=''>{$_L['Select_Pool']}</option>
<option value=''>{Lang::T('Select Pool')}</option>
</select>
</div>
</div>
{* <div class="form-group" id="AddressList">
<label class="col-md-2 control-label">{Lang::T('Address List')}</label>
<div class="col-md-6">
<input type="text" class="form-control" name="list_expired" id="list_expired">
</div>
</div> *}
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<button class="btn btn-primary waves-effect waves-light"
type="submit">{$_L['Save']}</button>
Or <a href="{$_url}services/pppoe">{$_L['Cancel']}</a>
type="submit">{Lang::T('Save Changes')}</button>
Or <a href="{$_url}services/pppoe">{Lang::T('Cancel')}</a>
</div>
</div>
</form>

View File

@ -3,7 +3,7 @@
<div class="row">
<div class="col-sm-12 col-md-12">
<div class="panel panel-primary panel-hovered panel-stacked mb30">
<div class="panel-heading">{$_L['Edit_Plan']} || {$d['name_plan']}</div>
<div class="panel-heading">{Lang::T('Edit Service Plan')} || {$d['name_plan']}</div>
<div class="panel-body">
<form class="form-horizontal" method="post" role="form" action="{$_url}services/edit-pppoe-post">
<input type="hidden" name="id" value="{$d['id']}">
@ -30,7 +30,7 @@
</div>
{/if}
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Plan_Name']}</label>
<label class="col-md-2 control-label">{Lang::T('Plan Name')}</label>
<div class="col-md-6">
<input type="text" class="form-control" id="name_plan" maxlength="40" name="name_plan"
value="{$d['name_plan']}">
@ -38,7 +38,7 @@
</div>
<div class="form-group">
<label class="col-md-2 control-label"><a
href="{$_url}bandwidth/add">{$_L['BW_Name']}</a></label>
href="{$_url}bandwidth/add">{Lang::T('Bandwidth Name')}</a></label>
<div class="col-md-6">
<select id="id_bw" name="id_bw" class="form-control select2">
{foreach $b as $bs}
@ -49,7 +49,7 @@
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Plan_Price']}</label>
<label class="col-md-2 control-label">{Lang::T('Plan Price')}</label>
<div class="col-md-6">
<div class="input-group">
<span class="input-group-addon">{$_c['currency_code']}</span>
@ -58,26 +58,26 @@
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Plan_Validity']}</label>
<label class="col-md-2 control-label">{Lang::T('Plan Validity')}</label>
<div class="col-md-4">
<input type="text" class="form-control" id="validity" name="validity"
value="{$d['validity']}">
</div>
<div class="col-md-2">
<select class="form-control" id="validity_unit" name="validity_unit">
<option value="Mins" {if $d['validity_unit'] eq 'Mins'} selected {/if}>{$_L['Mins']}
<option value="Mins" {if $d['validity_unit'] eq 'Mins'} selected {/if}>{Lang::T('Mins')}
</option>
<option value="Hrs" {if $d['validity_unit'] eq 'Hrs'} selected {/if}>{$_L['Hrs']}
<option value="Hrs" {if $d['validity_unit'] eq 'Hrs'} selected {/if}>{Lang::T('Hrs')}
</option>
<option value="Days" {if $d['validity_unit'] eq 'Days'} selected {/if}>{$_L['Days']}
<option value="Days" {if $d['validity_unit'] eq 'Days'} selected {/if}>{Lang::T('Days')}
</option>
<option value="Months" {if $d['validity_unit'] eq 'Months'} selected {/if}>
{$_L['Months']}</option>
{Lang::T('Months')}</option>
</select>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label"><a href="{$_url}pool/add">{$_L['Pool']}</a></label>
<label class="col-md-2 control-label"><a href="{$_url}pool/add">{Lang::T('IP Pool')}</a></label>
<div class="col-md-6">
<select id="pool_name" name="pool_name" required class="form-control select2">
{foreach $p as $ps}
@ -87,12 +87,20 @@
</select>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{Lang::T('Router Name')}</label>
<div class="col-md-6">
<input type="text" class="form-control" id="routers" name="routers" value="{$d['routers']}"
readonly>
</div>
</div>
<legend>{Lang::T('Expired Action')} <sub>{Lang::T('Optional')}</sub></legend>
<div class="form-group">
<label class="col-md-2 control-label"><a
href="{$_url}pool/add">{Lang::T('Expired IP Pool')}</a></label>
<div class="col-md-6">
<select id="pool_expired" name="pool_expired" class="form-control select2">
<option value=''>{$_L['Select_Pool']}</option>
<option value=''>{Lang::T('Select Pool')}</option>
{foreach $p as $ps}
<option value="{$ps['pool_name']}" {if $d['pool_expired'] eq $ps['pool_name']} selected
{/if}>{$ps['pool_name']}</option>
@ -100,19 +108,17 @@
</select>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Router_Name']}</label>
{* <div class="form-group" id="AddressList">
<label class="col-md-2 control-label">{Lang::T('Address List')}</label>
<div class="col-md-6">
<input type="text" class="form-control" id="routers" name="routers" value="{$d['routers']}"
readonly>
<input type="text" class="form-control" name="list_expired" id="list_expired" value="{$d['list_expired']}">
</div>
</div>
</div> *}
<div class="form-group">
<div class="col-lg-offset-2 col-lg-10">
<button class="btn btn-success waves-effect waves-light"
type="submit">{$_L['Save']}</button>
Or <a href="{$_url}services/pppoe">{$_L['Cancel']}</a>
type="submit">{Lang::T('Save Changes')}</button>
Or <a href="{$_url}services/pppoe">{Lang::T('Cancel')}</a>
</div>
</div>
</form>

View File

@ -8,7 +8,7 @@
<a class="btn btn-primary btn-xs" title="save" href="{$_url}services/sync/pppoe"
onclick="return confirm('This will sync/send PPPOE plan to Mikrotik?')"><span
class="glyphicon glyphicon-refresh" aria-hidden="true"></span> sync</a>
</div>{$_L['PPPOE_Plans']}
</div>{Lang::T('PPPOE Plans')}
</div>
<div class="panel-body">
<div class="md-whiteframe-z1 mb20 text-center" style="padding: 15px">
@ -19,30 +19,31 @@
<span class="fa fa-search"></span>
</div>
<input type="text" name="name" class="form-control"
placeholder="{$_L['Search_by_Name']}...">
placeholder="{Lang::T('Search by Name')}...">
<div class="input-group-btn">
<button class="btn btn-success" type="submit">{$_L['Search']}</button>
<button class="btn btn-success" type="submit">{Lang::T('Search')}</button>
</div>
</div>
</form>
</div>
<div class="col-md-4">
<a href="{$_url}services/pppoe-add" class="btn btn-primary btn-block waves-effect"><i
class="ion ion-android-add"> </i> {$_L['New_Plan']}</a>
class="ion ion-android-add"> </i> {Lang::T('New Service Plan')}</a>
</div>&nbsp;
</div>
<div class="table-responsive">
<table class="table table-bordered table-striped table-condensed">
<thead>
<tr>
<th>{$_L['Plan_Name']}</th>
<th>{$_L['Bandwidth_Plans']}</th>
<th>{$_L['Plan_Price']}</th>
<th>{$_L['Plan_Validity']}</th>
<th>{$_L['Pool']}</th>
<th>{Lang::T('Plan Name')}</th>
<th>{Lang::T('Bandwidth Plans')}</th>
<th>{Lang::T('Plan Price')}</th>
<th>{Lang::T('Plan Validity')}</th>
<th>{Lang::T('IP Pool')}</th>
<th>{Lang::T('Expired IP Pool')}</th>
<th>{$_L['Routers']}</th>
<th>{$_L['Manage']}</th>
<th>{Lang::T('Routers')}</th>
<th>{Lang::T('Manage')}</th>
<th>ID</th>
</tr>
</thead>
<tbody>
@ -54,7 +55,7 @@
<td>{Lang::moneyFormat($ds['price'])}</td>
<td>{$ds['validity']} {$ds['validity_unit']}</td>
<td>{$ds['pool']}</td>
<td>{$ds['pool_expired']}</td>
<td>{$ds['pool_expired']}{if $ds['list_expired']}{if $ds['pool_expired']} | {/if}{$ds['list_expired']}{/if}</td>
<td>
{if $ds['is_radius']}
<span class="label label-primary">RADIUS</span>
@ -65,11 +66,12 @@
{/if}</td>
<td>
<a href="{$_url}services/pppoe-edit/{$ds['id']}"
class="btn btn-info btn-xs">{$_L['Edit']}</a>
class="btn btn-info btn-xs">{Lang::T('Edit')}</a>
<a href="{$_url}services/pppoe-delete/{$ds['id']}"
onclick="return confirm('{$_L['Delete']}?')" id="{$ds['id']}"
class="btn btn-danger btn-xs">{$_L['Delete']}</a>
onclick="return confirm('{Lang::T('Delete')}?')" id="{$ds['id']}"
class="btn btn-danger btn-xs"><i class="glyphicon glyphicon-trash"></i></a>
</td>
<td>{$ds['id']}</td>
</tr>
{/foreach}
</tbody>

View File

@ -10,7 +10,7 @@
<form class="form-horizontal" method="post" role="form" action="{$_url}prepaid/edit-post">
<input type="hidden" name="id" value="{$d['id']}">
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Select_Account']}</label>
<label class="col-md-2 control-label">{Lang::T('Select Account')}</label>
<div class="col-md-6">
<input type="text" class="form-control" id="username" name="username"
value="{$d['username']}" readonly>
@ -18,7 +18,7 @@
</div>
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Service_Plan']}</label>
<label class="col-md-2 control-label">{Lang::T('Service Plan')}</label>
<div class="col-md-6">
<select id="id_plan" name="id_plan" class="form-control select2">
{foreach $p as $ps}
@ -29,7 +29,7 @@
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Created_On']}</label>
<label class="col-md-2 control-label">{Lang::T('Created On')}</label>
<div class="col-md-4">
<input type="date" class="form-control" name="expiration" readonly
value="{$d['recharged_on']}">
@ -40,7 +40,7 @@
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Expires_On']}</label>
<label class="col-md-2 control-label">{Lang::T('Expires On')}</label>
<div class="col-md-4">
<input type="date" class="form-control" id="expiration" name="expiration"
value="{$d['expiration']}">
@ -54,8 +54,8 @@
<div class="form-group">
<div class="col-lg-offset-2 col-lg-10">
<button class="btn btn-success waves-effect waves-light"
type="submit">{$_L['Edit']}</button>
Or <a href="{$_url}prepaid/list">{$_L['Cancel']}</a>
type="submit">{Lang::T('Edit')}</button>
Or <a href="{$_url}prepaid/list">{Lang::T('Cancel')}</a>
</div>
</div>
</form>

View File

@ -4,11 +4,19 @@
<div class="col-sm-12">
<div class="panel panel-hovered mb20 panel-primary">
<div class="panel-heading">
<div class="btn-group pull-right">
<a class="btn btn-primary btn-xs" title="save" href="{$_url}prepaid/sync"
onclick="return confirm('This will sync/send Caustomer active plan to Mikrotik?')"><span
class="glyphicon glyphicon-refresh" aria-hidden="true"></span> sync</a>
</div>{$_L['Prepaid_User']}
{if in_array($_admin['user_type'],['SuperAdmin','Admin'])}
<div class="btn-group pull-right">
<a class="btn btn-primary btn-xs" title="save" href="{$_url}prepaid/sync"
onclick="return confirm('This will sync/send Caustomer active plan to Mikrotik?')"><span
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"
onclick="return confirm('This will export to CSV?')"><span class="glyphicon glyphicon-download"
aria-hidden="true"></span> CSV</a>
</div>
{/if}
{Lang::T('Prepaid Users')}
</div>
<div class="panel-body">
<div class="md-whiteframe-z1 mb20 text-center" style="padding: 15px">
@ -18,31 +26,31 @@
<div class="input-group-addon">
<span class="fa fa-search"></span>
</div>
<input type="text" name="username" class="form-control"
placeholder="{$_L['Search_by_Username']}..." value="{$cari}">
<input type="text" name="search" class="form-control"
placeholder="{Lang::T('Search by Username')}..." value="{$search}">
<div class="input-group-btn">
<button class="btn btn-success" type="submit">{$_L['Search']}</button>
<button class="btn btn-success" type="submit">{Lang::T('Search')}</button>
</div>
</div>
</form>
</div>
<div class="col-md-4">
<a href="{$_url}prepaid/recharge" class="btn btn-primary btn-block waves-effect"><i
class="ion ion-android-add"> </i> {$_L['Recharge_Account']}</a>
class="ion ion-android-add"> </i> {Lang::T('Recharge Account')}</a>
</div>&nbsp;
</div>
<div class="table-responsive">
<table id="datatable" class="table table-bordered table-striped table-condensed">
<thead>
<tr>
<th>{$_L['Username']}</th>
<th>{$_L['Plan_Name']}</th>
<th>{$_L['Type']}</th>
<th>{$_L['Created_On']}</th>
<th>{$_L['Expires_On']}</th>
<th>{$_L['Method']}</th>
<th>{$_L['Routers']}</th>
<th>{$_L['Manage']}</th>
<th>{Lang::T('Username')}</th>
<th>{Lang::T('Plan Name')}</th>
<th>{Lang::T('Type')}</th>
<th>{Lang::T('Created On')}</th>
<th>{Lang::T('Expires On')}</th>
<th>{Lang::T('Method')}</th>
<th>{Lang::T('Routers')}</th>
<th>{Lang::T('Manage')}</th>
</tr>
</thead>
<tbody>
@ -57,10 +65,12 @@
<td>{$ds['routers']}</td>
<td>
<a href="{$_url}prepaid/edit/{$ds['id']}"
class="btn btn-warning btn-xs">{$_L['Edit']}</a>
<a href="{$_url}prepaid/delete/{$ds['id']}" id="{$ds['id']}"
onclick="return confirm('{$_L['Delete']}?')"
class="btn btn-danger btn-xs">{$_L['Delete']}</a>
class="btn btn-warning btn-xs">{Lang::T('Edit')}</a>
{if in_array($_admin['user_type'],['SuperAdmin','Admin'])}
<a href="{$_url}prepaid/delete/{$ds['id']}" id="{$ds['id']}"
onclick="return confirm('{Lang::T('Delete')}?')"
class="btn btn-danger btn-xs"><i class="glyphicon glyphicon-trash"></i></a>
{/if}
</td>
</tr>
{/foreach}

View File

@ -22,17 +22,17 @@
<div class="row">
<div class="col-md-12">
<div id="printable">
<h4>{$_L['All_Transactions_at_Date']}: {date($_c['date_format'], strtotime($mdate))}</h4>
<h4>{Lang::T('All Transactions at Date')}: {date($_c['date_format'], strtotime($mdate))}</h4>
<div class="table-responsive">
<table class="table table-bordered table-condensed table-bordered" style="background: #ffffff">
<th class="text-center">{$_L['Username']}</th>
<th class="text-center">{$_L['Plan_Name']}</th>
<th class="text-center">{$_L['Type']}</th>
<th class="text-center">{$_L['Plan_Price']}</th>
<th class="text-center">{$_L['Created_On']}</th>
<th class="text-center">{$_L['Expires_On']}</th>
<th class="text-center">{$_L['Method']}</th>
<th class="text-center">{$_L['Routers']}</th>
<th class="text-center">{Lang::T('Username')}</th>
<th class="text-center">{Lang::T('Plan Name')}</th>
<th class="text-center">{Lang::T('Type')}</th>
<th class="text-center">{Lang::T('Plan Price')}</th>
<th class="text-center">{Lang::T('Created On')}</th>
<th class="text-center">{Lang::T('Expires On')}</th>
<th class="text-center">{Lang::T('Method')}</th>
<th class="text-center">{Lang::T('Routers')}</th>
{foreach $d as $ds}
<tr>
<td>{$ds['username']}</td>
@ -48,11 +48,11 @@
</table>
</div>
<div class="clearfix text-right total-sum mb10">
<h4 class="text-uppercase text-bold">{$_L['Total_Income']}:</h4>
<h4 class="text-uppercase text-bold">{Lang::T('Total Income')}:</h4>
<h3 class="sum">{$_c['currency_code']} {number_format($dr,2,$_c['dec_point'],$_c['thousands_sep'])}</h3>
</div>
</div>
<button type="button" id="actprint" class="btn btn-default btn-sm no-print">{$_L['Click_Here_to_Print']}</button>
<button type="button" id="actprint" class="btn btn-default btn-sm no-print">{Lang::T('Click Here to Print')}</button>
</div>
</div>
<script src="ui/ui/scripts/jquery-1.10.2.js"></script>

View File

@ -22,17 +22,17 @@
<div class="row">
<div class="col-md-12">
<div id="printable">
<h4>{$_L['All_Transactions_at_Date']}: {date( $_c['date_format'], strtotime($fdate))} - {date( $_c['date_format'], strtotime($tdate))}</h4>
<h4>{Lang::T('All Transactions at Date')}: {date( $_c['date_format'], strtotime($fdate))} - {date( $_c['date_format'], strtotime($tdate))}</h4>
<div class="table-responsive">
<table class="table table-bordered table-condensed table-striped " style="background: #ffffff">
<th class="text-center">{$_L['Username']}</th>
<th class="text-center">{$_L['Plan_Name']}</th>
<th class="text-center">{$_L['Type']}</th>
<th class="text-center">{$_L['Plan_Price']}</th>
<th class="text-center">{$_L['Created_On']}</th>
<th class="text-center">{$_L['Expires_On']}</th>
<th class="text-center">{$_L['Method']}</th>
<th class="text-center">{$_L['Routers']}</th>
<th class="text-center">{Lang::T('Username')}</th>
<th class="text-center">{Lang::T('Plan Name')}</th>
<th class="text-center">{Lang::T('Type')}</th>
<th class="text-center">{Lang::T('Plan Price')}</th>
<th class="text-center">{Lang::T('Created On')}</th>
<th class="text-center">{Lang::T('Expires On')}</th>
<th class="text-center">{Lang::T('Method')}</th>
<th class="text-center">{Lang::T('Routers')}</th>
{foreach $d as $ds}
<tr>
<td>{$ds['username']}</td>
@ -48,11 +48,11 @@
</table>
</div>
<div class="clearfix text-right total-sum mb10">
<h4 class="text-uppercase text-bold">{$_L['Total_Income']}:</h4>
<h4 class="text-uppercase text-bold">{Lang::T('Total Income')}:</h4>
<h3 class="sum">{Lang::moneyFormat($dr)}</h3>
</div>
</div>
<button type="button" id="actprint" class="btn btn-default btn-sm no-print">{$_L['Click_Here_to_Print']}</button>
<button type="button" id="actprint" class="btn btn-default btn-sm no-print">{Lang::T('Click Here to Print')}</button>
</div>
</div>
<script src="ui/ui/scripts/jquery-1.10.2.js"></script>

View File

@ -81,8 +81,8 @@
</table>
<hr>
<center><button type="button" onclick="window.print()"
class="btn btn-default btn-sm no-print">{$_L['Click_Here_to_Print']}</button><br>
{$_L['Print_Info']}<br>
class="btn btn-default btn-sm no-print">{Lang::T('Click Here to Print')}</button><br>
{Lang::T('Print side by side, it will easy to cut')}<br>
show {$v|@count} vouchers from {$vc} vouchers<br>
from ID {$v[0]['id']} limit {$limit} vouchers
</center>

View File

@ -9,14 +9,14 @@
<form class="form-horizontal" method="post" role="form" action="{$_url}radius/nas-add-post">
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Router_Name']}</label>
<label class="col-md-2 control-label">{Lang::T('Router Name')}</label>
<div class="col-md-6">
<input type="text" required class="form-control" id="shortname" name="shortname" maxlength="32">
<p class="help-block">{Lang::T('Name of Area that router operated')}</p>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{$_L['IP_Address']}</label>
<label class="col-md-2 control-label">{Lang::T('IP Address')}</label>
<div class="col-md-6">
<input type="text" placeholder="192.168.88.1" required class="form-control" id="nasname"
name="nasname" maxlength="128">
@ -51,14 +51,14 @@
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Description']}</label>
<label class="col-md-2 control-label">{Lang::T('Description')}</label>
<div class="col-md-6">
<textarea class="form-control" id="description" name="description"></textarea>
<p class="help-block">{Lang::T('Explain Coverage of router')}</p>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label"><a href="{$_url}routers/add">{$_L['Routers']}</a></label>
<label class="col-md-2 control-label"><a href="{$_url}routers/add">{Lang::T('Routers')}</a></label>
<div class="col-md-6">
<select id="routers" name="routers" class="form-control select2">
<option value="">No Router</option>
@ -72,8 +72,8 @@
<div class="form-group">
<div class="col-lg-offset-2 col-lg-10">
<button class="btn btn-primary waves-effect waves-light"
type="submit">{$_L['Save']}</button>
Or <a href="{$_url}radius/nas-list">{$_L['Cancel']}</a>
type="submit">{Lang::T('Save Changes')}</button>
Or <a href="{$_url}radius/nas-list">{Lang::T('Cancel')}</a>
</div>
</div>
</form>

View File

@ -9,14 +9,14 @@
<form class="form-horizontal" method="post" role="form" action="{$_url}radius/nas-edit-post/{$d['id']}">
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Router_Name']}</label>
<label class="col-md-2 control-label">{Lang::T('Router Name')}</label>
<div class="col-md-6">
<input type="text" required class="form-control" id="shortname" name="shortname" value="{$d['shortname']}" maxlength="32">
<p class="help-block">{Lang::T('Name of Area that router operated')}</p>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{$_L['IP_Address']}</label>
<label class="col-md-2 control-label">{Lang::T('IP Address')}</label>
<div class="col-md-6">
<input type="text" placeholder="192.168.88.1" value="{$d['nasname']}" required class="form-control" id="nasname"
name="nasname" maxlength="128">
@ -51,14 +51,14 @@
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">{$_L['Description']}</label>
<label class="col-md-2 control-label">{Lang::T('Description')}</label>
<div class="col-md-6">
<textarea class="form-control" id="description" name="description"> {htmlentities($d['description'])}</textarea>
<p class="help-block">{Lang::T('Explain Coverage of router')}</p>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label"><a href="{$_url}routers/add">{$_L['Routers']}</a></label>
<label class="col-md-2 control-label"><a href="{$_url}routers/add">{Lang::T('Routers')}</a></label>
<div class="col-md-6">
<select id="routers" name="routers" class="form-control select2">
<option value="">No Router</option>
@ -73,8 +73,8 @@
<div class="form-group">
<div class="col-lg-offset-2 col-lg-10">
<button class="btn btn-primary waves-effect waves-light"
type="submit">{$_L['Save']}</button>
Or <a href="{$_url}radius/nas-list">{$_L['Cancel']}</a>
type="submit">{Lang::T('Save Changes')}</button>
Or <a href="{$_url}radius/nas-list">{Lang::T('Cancel')}</a>
</div>
</div>
</form>

View File

@ -15,9 +15,9 @@
<span class="fa fa-search"></span>
</div>
<input type="text" name="name" class="form-control" value="{$name}"
placeholder="{$_L['Search_by_Name']}...">
placeholder="{Lang::T('Search by Name')}...">
<div class="input-group-btn">
<button class="btn btn-success" type="submit">{$_L['Search']}</button>
<button class="btn btn-success" type="submit">{Lang::T('Search')}</button>
</div>
</div>
</form>
@ -31,7 +31,6 @@
<table class="table table-bordered table-striped table-condensed">
<thead>
<tr>
<th>ID</th>
<th>Name</th>
<th>IP</th>
<th>Type</th>
@ -39,13 +38,13 @@
<th>Server</th>
<th>Community</th>
<th>Routers</th>
<th>{$_L['Manage']}</th>
<th>{Lang::T('Manage')}</th>
<th>ID</th>
</tr>
</thead>
<tbody>
{foreach $nas as $ds}
<tr>
<td align="center">{$ds['id']}</td>
<td>{$ds['shortname']}</td>
<td>{$ds['nasname']}</td>
<td>{$ds['type']}</td>
@ -54,11 +53,12 @@
<td>{$ds['community']}</td>
<td>{$ds['routers']}</td>
<td align="center">
<a href="{$_url}radius/nas-edit/{$ds['id']}" class="btn btn-info btn-xs">{$_L['Edit']}</a>
<a href="{$_url}radius/nas-edit/{$ds['id']}" class="btn btn-info btn-xs">{Lang::T('Edit')}</a>
<a href="{$_url}radius/nas-delete/{$ds['id']}" id="{$ds['id']}"
onclick="return confirm('{$_L['Delete']}?')"
class="btn btn-danger btn-xs">{$_L['Delete']}</a>
onclick="return confirm('{Lang::T('Delete')}?')"
class="btn btn-danger btn-xs"><i class="glyphicon glyphicon-trash"></i></a>
</td>
<td align="center">{$ds['id']}</td>
</tr>
{/foreach}
</tbody>

Some files were not shown because too many files have changed in this diff Show More