Compare commits
108 Commits
2024.1.19
...
2024.2.26.
Author | SHA1 | Date | |
---|---|---|---|
fceb79bdc3 | |||
83457fd9fc | |||
cdd5da757d | |||
c6086c615f | |||
0cad73a17f | |||
d2fa9be8d1 | |||
617e628b04 | |||
35d679ed2c | |||
8824489704 | |||
a7502aa8fb | |||
375403135e | |||
db49d0f4b5 | |||
c4fb99479b | |||
091f4fb638 | |||
8db3d6c679 | |||
ddd7fb49fe | |||
c6a203b1f0 | |||
6de63bed63 | |||
9552a14de5 | |||
9d379b3fbd | |||
4f3e5972b0 | |||
be65976310 | |||
8728af4332 | |||
07870d05ad | |||
cee6f8949c | |||
3bdf44ddbe | |||
17c1675b4a | |||
54d1c4439d | |||
e710bd2862 | |||
5309cb26db | |||
8072fe40eb | |||
702f2b443c | |||
a44190c1c2 | |||
3871b51f0f | |||
d9a20f7213 | |||
a70b954981 | |||
95e79439a2 | |||
7ea118ec1e | |||
ae83cbeef4 | |||
8047ed9555 | |||
c907a4044f | |||
f12c7724fd | |||
c8696f8d1a | |||
63bba0efb0 | |||
2063ae4159 | |||
349a1d3250 | |||
cfb81596ae | |||
91c90f05f8 | |||
abefcf4a73 | |||
f9ad13b746 | |||
fe082258cd | |||
ade714e2ae | |||
ce649220f5 | |||
de4a783dba | |||
f550af257a | |||
2c16bb289e | |||
61060c4173 | |||
e7c715f1b3 | |||
aa8fa3f436 | |||
941c723193 | |||
cb23ddb912 | |||
e1272ec531 | |||
8e3e715c8c | |||
850ae079f4 | |||
21bea606c3 | |||
11c226caf5 | |||
98fb853591 | |||
d17c434c7b | |||
a06d7db0b1 | |||
84138bd02e | |||
9d1f05735f | |||
c91cc0470b | |||
459b9b30f1 | |||
8baf977a9a | |||
1022674780 | |||
3c9b05468e | |||
e9f5d56f91 | |||
792b1367d3 | |||
bf6ec9d4cd | |||
9543ee6e34 | |||
66432eda56 | |||
92eee8245d | |||
f62f07d102 | |||
671154d146 | |||
ac84e4b235 | |||
db7c6014dc | |||
21b57ef471 | |||
79e5c72ca2 | |||
5921fef67e | |||
1e0b246d74 | |||
009c890ab6 | |||
f3d7687cdb | |||
80cecabfb0 | |||
00ac91903f | |||
500f3de6a9 | |||
6c2658bf03 | |||
59de353353 | |||
d5ea56d078 | |||
7cc8034b8c | |||
c3a76bab90 | |||
8f32a7cfa9 | |||
cbe2602b69 | |||
771bc9d8d9 | |||
788e558171 | |||
4ab32bc68d | |||
bba09ca647 | |||
adbac642ca | |||
7e7b70ba75 |
12
.gitignore
vendored
12
.gitignore
vendored
@ -1,9 +1,11 @@
|
||||
config.php
|
||||
.DS_Store
|
||||
.vscode/
|
||||
ui/ui/compiled
|
||||
ui/compiled/*.php
|
||||
ui/cache/*.php
|
||||
test.php
|
||||
sms.php
|
||||
pages/
|
||||
system/cache/**
|
||||
system/plugin/*
|
||||
@ -28,4 +30,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
|
76
CHANGELOG.md
76
CHANGELOG.md
@ -2,6 +2,80 @@
|
||||
|
||||
# CHANGELOG
|
||||
|
||||
## 2024.2.26
|
||||
|
||||
- Clean Unused JS and CSS
|
||||
- Add some Authorization check
|
||||
- Custom Path for folder
|
||||
- fix some bugs
|
||||
|
||||
## 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
|
||||
- Add Monthly Registered Customers
|
||||
- Total Monthly Sales
|
||||
- Active Users
|
||||
|
||||
## 2024.2.2
|
||||
|
||||
- Fix edit plan for user
|
||||
|
||||
## 2024.1.24
|
||||
|
||||
- Add Send test for SMS, Whatsapp and Telegram
|
||||
|
||||
## 2024.1.19
|
||||
|
||||
- Paid Plugin, Theme, and payment gateway marketplace using codecanyon.net
|
||||
@ -195,7 +269,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
|
||||
|
260
init.php
Normal file
260
init.php
Normal file
@ -0,0 +1,260 @@
|
||||
<?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')) {
|
||||
r2('install');
|
||||
}
|
||||
}
|
||||
|
||||
if (!file_exists($root_path . File::pathFixer('system/orm.php'))) {
|
||||
die($root_path . "orm.php file not found");
|
||||
}
|
||||
|
||||
$UPLOAD_PATH = $root_path . File::pathFixer('system/uploads');
|
||||
$CACHE_PATH = $root_path . File::pathFixer('system/cache');
|
||||
$PAGES_PATH = $root_path . File::pathFixer('pages');
|
||||
$PLUGIN_PATH = $root_path . File::pathFixer('system/plugin');
|
||||
$PAYMENTGATEWAY_PATH = $root_path . File::pathFixer('system/paymentgateway');
|
||||
$UI_PATH = 'ui';
|
||||
|
||||
if (!file_exists($UPLOAD_PATH . File::pathFixer('/notifications.default.json'))) {
|
||||
die($UPLOAD_PATH . File::pathFixer("/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 . $UPLOAD_PATH . DIRECTORY_SEPARATOR . "notifications.json")) {
|
||||
$_notifmsg = json_decode(file_get_contents($root_path . $UPLOAD_PATH . DIRECTORY_SEPARATOR . 'notifications.json'), true);
|
||||
}
|
||||
$_notifmsg_default = json_decode(file_get_contents($root_path . $UPLOAD_PATH . DIRECTORY_SEPARATOR . 'notifications.default.json'), true);
|
||||
|
||||
//register all plugin
|
||||
foreach (glob(File::pathFixer($PLUGIN_PATH . DIRECTORY_SEPARATOR . '*.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 r2($to, $ntype = 'e', $msg = '')
|
||||
{
|
||||
if ($msg == '') {
|
||||
header("location: $to");
|
||||
exit;
|
||||
}
|
||||
$_SESSION['ntype'] = $ntype;
|
||||
$_SESSION['notify'] = $msg;
|
||||
header("location: $to");
|
||||
exit;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
@ -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` (
|
||||
@ -149,7 +142,7 @@ CREATE TABLE `tbl_users` (
|
||||
`username` varchar(45) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '',
|
||||
`fullname` varchar(45) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '',
|
||||
`password` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
|
||||
`user_type` enum('Admin','Sales') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
|
||||
`user_type` enum('SuperAdmin','Admin','Report','Agent','Sales') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
|
||||
`status` enum('Active','Inactive') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT 'Active',
|
||||
`last_login` datetime DEFAULT NULL,
|
||||
`creationdate` datetime NOT NULL
|
||||
@ -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,27 @@ 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 `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`;
|
107
system/api.php
Normal file
107
system/api.php
Normal file
@ -0,0 +1,107 @@
|
||||
<?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(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(!isset($handler) || empty($handler)){
|
||||
showResult(true, Lang::T("Token is valid"));
|
||||
}
|
||||
|
||||
|
||||
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());
|
||||
}
|
@ -1,14 +1,57 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* PHP Mikrotik Billing (https://github.com/hotspotbilling/phpnuxbill/)
|
||||
* by https://t.me/ibnux
|
||||
**/
|
||||
|
||||
|
||||
Class Admin{
|
||||
public static function _info(){
|
||||
$id = $_SESSION['aid'];
|
||||
$d = ORM::for_table('tbl_users')->find_one($id);
|
||||
return $d;
|
||||
class Admin
|
||||
{
|
||||
|
||||
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 (time() - $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();
|
||||
}
|
||||
if ($id) {
|
||||
return ORM::for_table('tbl_users')->find_one($id);
|
||||
} else {
|
||||
return [];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -18,8 +18,9 @@ $menu_registered = array();
|
||||
* @param string icon from ion icon, ion-person, only for AFTER_
|
||||
* @param string label for showing label or number of notification or update
|
||||
* @param string color Label color
|
||||
* @param string auth authorization ['SuperAdmin', 'Admin', 'Report', 'Agent', 'Sales'] will only show in this user, empty array for all users
|
||||
*/
|
||||
function register_menu($name, $admin, $function, $position, $icon = '', $label = '', $color = 'success')
|
||||
function register_menu($name, $admin, $function, $position, $icon = '', $label = '', $color = 'success', $auth = [])
|
||||
{
|
||||
global $menu_registered;
|
||||
$menu_registered[] = [
|
||||
@ -29,7 +30,8 @@ function register_menu($name, $admin, $function, $position, $icon = '', $label =
|
||||
"icon" => $icon,
|
||||
"function" => $function,
|
||||
"label" => $label,
|
||||
"color" => $color
|
||||
"color" => $color,
|
||||
"auth" => $auth
|
||||
];
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -14,7 +14,7 @@ class Message
|
||||
global $config;
|
||||
run_hook('send_telegram'); #HOOK
|
||||
if (!empty($config['telegram_bot']) && !empty($config['telegram_target_id'])) {
|
||||
Http::getData('https://api.telegram.org/bot' . $config['telegram_bot'] . '/sendMessage?chat_id=' . $config['telegram_target_id'] . '&text=' . urlencode($txt));
|
||||
return Http::getData('https://api.telegram.org/bot' . $config['telegram_bot'] . '/sendMessage?chat_id=' . $config['telegram_target_id'] . '&text=' . urlencode($txt));
|
||||
}
|
||||
}
|
||||
|
||||
@ -27,17 +27,17 @@ class Message
|
||||
if (strlen($config['sms_url']) > 4 && substr($config['sms_url'], 0, 4) != "http") {
|
||||
if (strlen($txt) > 160) {
|
||||
$txts = str_split($txt, 160);
|
||||
foreach ($txts as $txt) {
|
||||
try {
|
||||
$mikrotik = Mikrotik::info($config['sms_url']);
|
||||
$client = Mikrotik::getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']);
|
||||
try {
|
||||
$mikrotik = Mikrotik::info($config['sms_url']);
|
||||
$client = Mikrotik::getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']);
|
||||
foreach ($txts as $txt) {
|
||||
Mikrotik::sendSMS($client, $phone, $txt);
|
||||
} catch (Exception $e) {
|
||||
// ignore, add to logs
|
||||
_log("Failed to send SMS using Mikrotik.\n" . $e->getMessage(), 'SMS', 0);
|
||||
}
|
||||
} catch (Exception $e) {
|
||||
// ignore, add to logs
|
||||
_log("Failed to send SMS using Mikrotik.\n" . $e->getMessage(), 'SMS', 0);
|
||||
}
|
||||
}else{
|
||||
} else {
|
||||
try {
|
||||
$mikrotik = Mikrotik::info($config['sms_url']);
|
||||
$client = Mikrotik::getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']);
|
||||
@ -50,7 +50,7 @@ class Message
|
||||
} else {
|
||||
$smsurl = str_replace('[number]', urlencode($phone), $config['sms_url']);
|
||||
$smsurl = str_replace('[text]', urlencode($txt), $smsurl);
|
||||
Http::getData($smsurl);
|
||||
return Http::getData($smsurl);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -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);
|
||||
|
@ -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)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -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,11 @@ class Package
|
||||
$t->method = "$gateway - $channel";
|
||||
$t->routers = $router_name;
|
||||
$t->type = "Balance";
|
||||
if ($admin) {
|
||||
$t->admin_id = $admin['id'];
|
||||
}else{
|
||||
$t->admin_id = '0';
|
||||
}
|
||||
$t->save();
|
||||
|
||||
$balance_before = $c['balance'];
|
||||
@ -54,34 +59,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 +111,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 +130,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 +151,11 @@ class Package
|
||||
$b->method = "$gateway - $channel";
|
||||
$b->routers = $router_name;
|
||||
$b->type = "Hotspot";
|
||||
if ($admin) {
|
||||
$b->admin_id = $admin['id'];
|
||||
}else{
|
||||
$b->admin_id = '0';
|
||||
}
|
||||
$b->save();
|
||||
|
||||
// insert table transactions
|
||||
@ -157,16 +171,19 @@ class Package
|
||||
$t->method = "$gateway - $channel";
|
||||
$t->routers = $router_name;
|
||||
$t->type = "Hotspot";
|
||||
if ($admin) {
|
||||
$t->admin_id = $admin['id'];
|
||||
}else{
|
||||
$t->admin_id = '0';
|
||||
}
|
||||
$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 +200,11 @@ class Package
|
||||
$d->method = "$gateway - $channel";
|
||||
$d->routers = $router_name;
|
||||
$d->type = "Hotspot";
|
||||
if ($admin) {
|
||||
$b->admin_id = $admin['id'];
|
||||
}else{
|
||||
$b->admin_id = '0';
|
||||
}
|
||||
$d->save();
|
||||
|
||||
// insert table transactions
|
||||
@ -198,6 +220,11 @@ class Package
|
||||
$t->method = "$gateway - $channel";
|
||||
$t->routers = $router_name;
|
||||
$t->type = "Hotspot";
|
||||
if ($admin) {
|
||||
$t->admin_id = $admin['id'];
|
||||
}else{
|
||||
$t->admin_id = '0';
|
||||
}
|
||||
$t->save();
|
||||
}
|
||||
Message::sendTelegram("#u$c[username] #buy #Hotspot \n" . $p['name_plan'] .
|
||||
@ -208,18 +235,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 +254,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 +275,11 @@ class Package
|
||||
$b->method = "$gateway - $channel";
|
||||
$b->routers = $router_name;
|
||||
$b->type = "PPPOE";
|
||||
if ($admin) {
|
||||
$b->admin_id = $admin['id'];
|
||||
}else{
|
||||
$b->admin_id = '0';
|
||||
}
|
||||
$b->save();
|
||||
|
||||
// insert table transactions
|
||||
@ -266,15 +295,18 @@ class Package
|
||||
$t->method = "$gateway - $channel";
|
||||
$t->routers = $router_name;
|
||||
$t->type = "PPPOE";
|
||||
if ($admin) {
|
||||
$t->admin_id = $admin['id'];
|
||||
}else{
|
||||
$t->admin_id = '0';
|
||||
}
|
||||
$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 +324,11 @@ class Package
|
||||
$d->method = "$gateway - $channel";
|
||||
$d->routers = $router_name;
|
||||
$d->type = "PPPOE";
|
||||
if ($admin) {
|
||||
$d->admin_id = $admin['id'];
|
||||
}else{
|
||||
$d->admin_id = '0';
|
||||
}
|
||||
$d->save();
|
||||
|
||||
// insert table transactions
|
||||
@ -306,6 +343,11 @@ class Package
|
||||
$t->time = $time;
|
||||
$t->method = "$gateway - $channel";
|
||||
$t->routers = $router_name;
|
||||
if ($admin) {
|
||||
$t->admin_id = $admin['id'];
|
||||
}else{
|
||||
$t->admin_id = '0';
|
||||
}
|
||||
$t->type = "PPPOE";
|
||||
$t->save();
|
||||
}
|
||||
@ -316,8 +358,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 +367,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 +378,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 +426,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 +446,71 @@ 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```"));
|
||||
$ui->assign('in',$in);
|
||||
}
|
||||
}
|
||||
|
@ -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>";
|
||||
|
||||
|
@ -8,9 +8,40 @@
|
||||
|
||||
class User
|
||||
{
|
||||
public static function getID(){
|
||||
global $db_password;
|
||||
if(isset($_SESSION['uid']) && !empty($_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(time()-$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;
|
||||
}
|
||||
|
324
system/boot.php
324
system/boot.php
@ -5,118 +5,20 @@
|
||||
|
||||
**/
|
||||
|
||||
|
||||
// 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 == '') {
|
||||
header("location: $to");
|
||||
exit;
|
||||
}
|
||||
$_SESSION['ntype'] = $ntype;
|
||||
$_SESSION['notify'] = $msg;
|
||||
header("location: $to");
|
||||
exit;
|
||||
}
|
||||
|
||||
if (file_exists('config.php')) {
|
||||
require('config.php');
|
||||
} else {
|
||||
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/')]);
|
||||
$ui->setTemplateDir([
|
||||
'custom' => File::pathFixer($UI_PATH . '/ui_custom/'),
|
||||
'default' => File::pathFixer($UI_PATH . '/ui/')
|
||||
]);
|
||||
$ui->assign('_url', APP_URL . '/index.php?_route=');
|
||||
$ui->setCompileDir(File::pathFixer('ui/compiled/'));
|
||||
$ui->setConfigDir(File::pathFixer('ui/conf/'));
|
||||
$ui->setCacheDir(File::pathFixer('ui/cache/'));
|
||||
$ui->setCompileDir(File::pathFixer($UI_PATH . '/compiled/'));
|
||||
$ui->setConfigDir(File::pathFixer($UI_PATH . '/conf/'));
|
||||
$ui->setCacheDir(File::pathFixer($UI_PATH . '/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>');
|
||||
@ -125,13 +27,16 @@ try {
|
||||
die();
|
||||
} catch (Exception $e) {
|
||||
$ui = new Smarty();
|
||||
$ui->setTemplateDir(['custom' => File::pathFixer('ui/ui_custom/'), 'default' => File::pathFixer('ui/ui/')]);
|
||||
$ui->setTemplateDir([
|
||||
'custom' => File::pathFixer($UI_PATH . '/ui_custom/'),
|
||||
'default' => File::pathFixer($UI_PATH . '/ui/')
|
||||
]);
|
||||
$ui->assign('_url', APP_URL . '/index.php?_route=');
|
||||
$ui->setCompileDir(File::pathFixer('ui/compiled/'));
|
||||
$ui->setConfigDir(File::pathFixer('ui/conf/'));
|
||||
$ui->setCacheDir(File::pathFixer('ui/cache/'));
|
||||
$ui->setCompileDir(File::pathFixer($UI_PATH . '/compiled/'));
|
||||
$ui->setConfigDir(File::pathFixer($UI_PATH . '/conf/'));
|
||||
$ui->setCacheDir(File::pathFixer($UI_PATH . '/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,40 +50,38 @@ 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/')]);
|
||||
$_theme = APP_URL . '/' . $UI_PATH . '/themes/' . $config['theme'];
|
||||
$ui->setTemplateDir([
|
||||
'custom' => File::pathFixer($UI_PATH . '/ui_custom/'),
|
||||
'theme' => File::pathFixer($UI_PATH . '/themes/' . $config['theme']),
|
||||
'default' => File::pathFixer($UI_PATH . '/ui/')
|
||||
]);
|
||||
} else {
|
||||
$_theme = APP_URL . '/ui/ui';
|
||||
$ui->setTemplateDir(['custom' => File::pathFixer('ui/ui_custom/'), 'default' => File::pathFixer('ui/ui/')]);
|
||||
$_theme = APP_URL . '/' . $UI_PATH . '/ui';
|
||||
$ui->setTemplateDir([
|
||||
'custom' => File::pathFixer($UI_PATH . '/ui_custom/'),
|
||||
'default' => File::pathFixer($UI_PATH . '/ui/')
|
||||
]);
|
||||
}
|
||||
$ui->assign('_theme', $_theme);
|
||||
$ui->addTemplateDir(File::pathFixer('system/paymentgateway/ui/'), 'pg');
|
||||
$ui->addTemplateDir(File::pathFixer('system/plugin/ui/'), 'plugin');
|
||||
$ui->setCompileDir(File::pathFixer('ui/compiled/'));
|
||||
$ui->setConfigDir(File::pathFixer('ui/conf/'));
|
||||
$ui->setCacheDir(File::pathFixer('ui/cache/'));
|
||||
$ui->addTemplateDir($PAYMENTGATEWAY_PATH . File::pathFixer('/ui/'), 'pg');
|
||||
$ui->addTemplateDir($PLUGIN_PATH . File::pathFixer('/ui/'), 'plugin');
|
||||
$ui->setCompileDir(File::pathFixer($UI_PATH . '/compiled/'));
|
||||
$ui->setConfigDir(File::pathFixer($UI_PATH . '/conf/'));
|
||||
$ui->setCacheDir(File::pathFixer($UI_PATH . '/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('UPLOAD_PATH', $UPLOAD_PATH);
|
||||
$ui->assign('CACHE_PATH', $CACHE_PATH);
|
||||
$ui->assign('PAGES_PATH', $PAGES_PATH);
|
||||
$ui->assign('_system_menu', 'dashboard');
|
||||
$ui->assign('_title', $config['CompanyName']);
|
||||
|
||||
function _msglog($type, $msg)
|
||||
{
|
||||
@ -195,134 +98,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);
|
||||
@ -331,8 +106,9 @@ $handler = $routes[0];
|
||||
if ($handler == '') {
|
||||
$handler = 'default';
|
||||
}
|
||||
$admin = Admin::_info();
|
||||
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,
|
||||
@ -342,15 +118,17 @@ try {
|
||||
$ui->assign('_system_menu', $routes[0]);
|
||||
foreach ($menu_registered as $menu) {
|
||||
if ($menu['admin'] && _admin(false)) {
|
||||
$menus[$menu['position']] .= '<li' . (($routes[1] == $menu['function']) ? ' class="active"' : '') . '><a href="' . U . 'plugin/' . $menu['function'] . '">';
|
||||
if (!empty($menu['icon'])) {
|
||||
$menus[$menu['position']] .= '<i class="' . $menu['icon'] . '"></i>';
|
||||
if (count($menu['auth']) == 0 || in_array($admin['user_type'], $menu['auth'])) {
|
||||
$menus[$menu['position']] .= '<li' . (($routes[1] == $menu['function']) ? ' class="active"' : '') . '><a href="' . U . 'plugin/' . $menu['function'] . '">';
|
||||
if (!empty($menu['icon'])) {
|
||||
$menus[$menu['position']] .= '<i class="' . $menu['icon'] . '"></i>';
|
||||
}
|
||||
if (!empty($menu['label'])) {
|
||||
$menus[$menu['position']] .= '<span class="pull-right-container">';
|
||||
$menus[$menu['position']] .= '<small class="label pull-right bg-' . $menu['color'] . '">' . $menu['label'] . '</small></span>';
|
||||
}
|
||||
$menus[$menu['position']] .= '<span class="text">' . $menu['name'] . '</span></a></li>';
|
||||
}
|
||||
if (!empty($menu['label'])) {
|
||||
$menus[$menu['position']] .= '<span class="pull-right-container">';
|
||||
$menus[$menu['position']] .= '<small class="label pull-right bg-' . $menu['color'] . '">' . $menu['label'] . '</small></span>';
|
||||
}
|
||||
$menus[$menu['position']] .= '<span class="text">' . $menu['name'] . '</span></a></li>';
|
||||
} else if (!$menu['admin'] && _auth(false)) {
|
||||
$menus[$menu['position']] .= '<li' . (($routes[1] == $menu['function']) ? ' class="active"' : '') . '><a href="' . U . 'plugin/' . $menu['function'] . '">';
|
||||
if (!empty($menu['icon'])) {
|
||||
@ -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>');
|
||||
|
@ -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 = $CACHE_PATH . '/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 = $CACHE_PATH . '/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');
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -9,11 +9,10 @@
|
||||
**/
|
||||
|
||||
_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);
|
||||
|
||||
switch ($action) {
|
||||
|
@ -5,15 +5,14 @@
|
||||
**/
|
||||
|
||||
_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) {
|
||||
@ -35,15 +34,22 @@ switch ($action) {
|
||||
break;
|
||||
|
||||
case 'add':
|
||||
if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin'])) {
|
||||
_alert(Lang::T('You do not have permission to access this page'),'danger', "dashboard");
|
||||
}
|
||||
run_hook('view_add_bandwidth'); #HOOK
|
||||
$ui->display('bandwidth-add.tpl');
|
||||
break;
|
||||
|
||||
case 'edit':
|
||||
if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin'])) {
|
||||
_alert(Lang::T('You do not have permission to access this page'),'danger', "dashboard");
|
||||
}
|
||||
$id = $routes['2'];
|
||||
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{
|
||||
@ -52,22 +58,40 @@ switch ($action) {
|
||||
break;
|
||||
|
||||
case 'delete':
|
||||
if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin'])) {
|
||||
_alert(Lang::T('You do not have permission to access this page'),'danger', "dashboard");
|
||||
}
|
||||
$id = $routes['2'];
|
||||
run_hook('delete_bandwidth'); #HOOK
|
||||
$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;
|
||||
|
||||
case 'add-post':
|
||||
if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin'])) {
|
||||
_alert(Lang::T('You do not have permission to access this page'),'danger', "dashboard");
|
||||
}
|
||||
$name = _post('name');
|
||||
$rate_down = _post('rate_down');
|
||||
$rate_down_unit = _post('rate_down_unit');
|
||||
$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 +102,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,21 +112,37 @@ 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);
|
||||
}
|
||||
break;
|
||||
|
||||
case 'edit-post':
|
||||
if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin'])) {
|
||||
_alert(Lang::T('You do not have permission to access this page'),'danger', "dashboard");
|
||||
}
|
||||
$name = _post('name');
|
||||
$rate_down = _post('rate_down');
|
||||
$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 +152,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 +168,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);
|
||||
}
|
||||
|
@ -9,14 +9,14 @@
|
||||
$action = $routes['1'];
|
||||
|
||||
|
||||
if(file_exists('system/paymentgateway/'.$action.'.php')){
|
||||
include 'system/paymentgateway/'.$action.'.php';
|
||||
if(function_exists($action.'_payment_notification')){
|
||||
if (file_exists($PAYMENTGATEWAY_PATH . DIRECTORY_SEPARATOR . $action . '.php')) {
|
||||
include $PAYMENTGATEWAY_PATH . DIRECTORY_SEPARATOR . $action . '.php';
|
||||
if (function_exists($action . '_payment_notification')) {
|
||||
run_hook('callback_payment_notification'); #HOOK
|
||||
call_user_func($action.'_payment_notification');
|
||||
call_user_func($action . '_payment_notification');
|
||||
die();
|
||||
}
|
||||
}
|
||||
|
||||
header('HTTP/1.1 404 Not Found');
|
||||
echo 'Not Found';
|
||||
echo 'Not Found';
|
||||
|
@ -1,4 +1,5 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* PHP Mikrotik Billing (https://github.com/hotspotbilling/phpnuxbill/)
|
||||
* by https://t.me/ibnux
|
||||
@ -11,12 +12,11 @@ $ui->assign('_system_menu', 'settings');
|
||||
$plugin_repository = 'https://hotspotbilling.github.io/Plugin-Repository/repository.json';
|
||||
|
||||
$action = $routes['1'];
|
||||
$admin = Admin::_info();
|
||||
$ui->assign('_admin', $admin);
|
||||
$cache = File::pathFixer('system/cache/codecanyon.json');
|
||||
$cache = File::pathFixer($CACHE_PATH . '/codecanyon.json');
|
||||
|
||||
if ($admin['user_type'] != 'Admin') {
|
||||
r2(U . "dashboard", 'e', $_L['Do_Not_Access']);
|
||||
if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin'])) {
|
||||
_alert(Lang::T('You do not have permission to access this page'), 'danger', "dashboard");
|
||||
}
|
||||
if (empty($config['envato_token'])) {
|
||||
r2(U . 'settings/app', 'w', '<a href="' . U . 'settings/app#envato' . '">Envato Personal Access Token</a> is not set');
|
||||
@ -25,14 +25,14 @@ if (empty($config['envato_token'])) {
|
||||
switch ($action) {
|
||||
|
||||
case 'install':
|
||||
if (!is_writeable(File::pathFixer('system/cache/'))) {
|
||||
if (!is_writeable(File::pathFixer($CACHE_PATH . '/'))) {
|
||||
r2(U . "codecanyon", 'e', 'Folder system/cache/ is not writable');
|
||||
}
|
||||
if (!is_writeable(File::pathFixer('system/plugin/'))) {
|
||||
r2(U . "codecanyon", 'e', 'Folder system/plugin/ is not writable');
|
||||
if (!is_writeable($PLUGIN_PATH)) {
|
||||
r2(U . "codecanyon", 'e', 'Folder plugin/ is not writable');
|
||||
}
|
||||
if (!is_writeable(File::pathFixer('system/paymentgateway/'))) {
|
||||
r2(U . "codecanyon", 'e', 'Folder system/paymentgateway/ is not writable');
|
||||
if (!is_writeable($PAYMENTGATEWAY_PATH)) {
|
||||
r2(U . "codecanyon", 'e', 'Folder paymentgateway/ is not writable');
|
||||
}
|
||||
set_time_limit(-1);
|
||||
$item_id = $routes['2'];
|
||||
@ -42,7 +42,7 @@ switch ($action) {
|
||||
if (!isset($json['download_url'])) {
|
||||
r2(U . 'codecanyon', 'e', 'Failed to get download url. ' . $json['description']);
|
||||
}
|
||||
$file = File::pathFixer('system/cache/codecanyon/');
|
||||
$file = File::pathFixer($CACHE_PATH . '/codecanyon/');
|
||||
if (!file_exists($file)) {
|
||||
mkdir($file);
|
||||
}
|
||||
@ -62,16 +62,16 @@ switch ($action) {
|
||||
curl_close($ch);
|
||||
fclose($fp);
|
||||
//extract
|
||||
$target = File::pathFixer('system/cache/codecanyon/' . $item_id . '/');
|
||||
$target = File::pathFixer($CACHE_PATH . '/codecanyon/' . $item_id . '/');
|
||||
$zip = new ZipArchive();
|
||||
$zip->open($file);
|
||||
$zip->extractTo($target);
|
||||
$zip->close();
|
||||
//moving
|
||||
if (file_exists($target . 'plugin')) {
|
||||
File::copyFolder($target . 'plugin', File::pathFixer('system/plugin/'));
|
||||
File::copyFolder($target . 'plugin', $PLUGIN_PATH . DIRECTORY_SEPARATOR);
|
||||
} else if (file_exists($target . 'paymentgateway')) {
|
||||
File::copyFolder($target . 'paymentgateway', File::pathFixer('system/paymentgateway/'));
|
||||
File::copyFolder($target . 'paymentgateway', $PAYMENTGATEWAY_PATH . DIRECTORY_SEPARATOR);
|
||||
} else if (file_exists($target . 'theme')) {
|
||||
File::copyFolder($target . 'theme', File::pathFixer('ui/themes/'));
|
||||
}
|
||||
|
@ -9,7 +9,6 @@ $ui->assign('_title', 'Community');
|
||||
$ui->assign('_system_menu', 'community');
|
||||
|
||||
$action = $routes['1'];
|
||||
$admin = Admin::_info();
|
||||
$ui->assign('_admin', $admin);
|
||||
|
||||
$ui->display('community.tpl');
|
@ -6,21 +6,15 @@
|
||||
**/
|
||||
|
||||
_admin();
|
||||
$ui->assign('_title', $_L['Customers']);
|
||||
$ui->assign('_title', Lang::T('Customer'));
|
||||
$ui->assign('_system_menu', 'customers');
|
||||
|
||||
$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']);
|
||||
}
|
||||
|
||||
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,11 +43,56 @@ switch ($action) {
|
||||
$ui->display('customers.tpl');
|
||||
break;
|
||||
|
||||
case 'csv':
|
||||
if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin'])) {
|
||||
_alert(Lang::T('You do not have permission to access this page'),'danger', "dashboard");
|
||||
}
|
||||
$cs = ORM::for_table('tbl_customers')
|
||||
->select('tbl_customers.id', 'id')
|
||||
->select('tbl_customers.username', 'username')
|
||||
->select('fullname')
|
||||
->select('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':
|
||||
if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin', 'Agent', 'Sales'])) {
|
||||
_alert(Lang::T('You do not have permission to access this page'),'danger', "dashboard");
|
||||
}
|
||||
run_hook('view_add_customer'); #HOOK
|
||||
$ui->display('customers-add.tpl');
|
||||
break;
|
||||
case 'recharge':
|
||||
if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin', 'Agent', 'Sales'])) {
|
||||
_alert(Lang::T('You do not have permission to access this page'),'danger', "dashboard");
|
||||
}
|
||||
$id_customer = $routes['2'];
|
||||
$b = ORM::for_table('tbl_user_recharges')->where('customer_id', $id_customer)->find_one();
|
||||
if ($b) {
|
||||
@ -65,6 +104,9 @@ switch ($action) {
|
||||
}
|
||||
r2(U . 'customers/view/' . $id_customer, 'e', 'Cannot find active plan');
|
||||
case 'deactivate':
|
||||
if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin'])) {
|
||||
_alert(Lang::T('You do not have permission to access this page'),'danger', "dashboard");
|
||||
}
|
||||
$id_customer = $routes['2'];
|
||||
$b = ORM::for_table('tbl_user_recharges')->where('customer_id', $id_customer)->find_one();
|
||||
if ($b) {
|
||||
@ -102,7 +144,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 +171,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 +191,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,17 +205,26 @@ 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']);
|
||||
}
|
||||
break;
|
||||
case 'edit':
|
||||
if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin', 'Agent'])) {
|
||||
_alert(Lang::T('You do not have permission to access this page'),'danger', "dashboard");
|
||||
}
|
||||
$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 +232,15 @@ switch ($action) {
|
||||
break;
|
||||
|
||||
case 'delete':
|
||||
if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin'])) {
|
||||
_alert(Lang::T('You do not have permission to access this page'),'danger', "dashboard");
|
||||
}
|
||||
$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 +280,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 +293,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 +305,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 +322,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 +362,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 +395,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 +420,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 +473,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']);
|
||||
|
@ -6,12 +6,8 @@
|
||||
**/
|
||||
|
||||
_admin();
|
||||
$ui->assign('_title', $_L['Dashboard']);
|
||||
$admin = Admin::_info();
|
||||
$ui->assign('_title', Lang::T('Dashboard'));
|
||||
$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 +47,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,28 +76,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 = $CACHE_PATH . File::pathFixer('/VoucherStocks.temp');
|
||||
$cachePlanfile = $CACHE_PATH . File::pathFixer('/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));
|
||||
}
|
||||
}
|
||||
|
||||
$cacheMRfile = File::pathFixer('/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();
|
||||
|
||||
$monthlyRegistered = [];
|
||||
foreach ($result as $row) {
|
||||
$monthlyRegistered[] = [
|
||||
'date' => $row->month,
|
||||
'count' => $row->count
|
||||
];
|
||||
}
|
||||
file_put_contents($cacheMRfile, json_encode($monthlyRegistered));
|
||||
}
|
||||
|
||||
$cacheMSfile = $CACHE_PATH . File::pathFixer('/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();
|
||||
|
||||
// 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;
|
||||
|
||||
$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
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// Sort the array by month
|
||||
ksort($monthlySales);
|
||||
|
||||
// Reindex the array
|
||||
$monthlySales = array_values($monthlySales);
|
||||
file_put_contents($cacheMSfile, json_encode($monthlySales));
|
||||
}
|
||||
|
||||
// Assign the monthly sales data to Smarty
|
||||
$ui->assign('monthlySales', $monthlySales);
|
||||
$ui->assign('xfooter', '');
|
||||
$ui->assign('monthlyRegistered', $monthlyRegistered);
|
||||
$ui->assign('stocks', $stocks);
|
||||
$ui->assign('plans', $plans);
|
||||
|
||||
|
@ -6,11 +6,10 @@
|
||||
**/
|
||||
|
||||
_admin();
|
||||
$ui->assign('_title', $_L['Reports']);
|
||||
$ui->assign('_title', Lang::T('Reports'));
|
||||
$ui->assign('_sysfrm_menu', 'reports');
|
||||
|
||||
$action = $routes['1'];
|
||||
$admin = Admin::_info();
|
||||
$ui->assign('_admin', $admin);
|
||||
|
||||
$mdate = date('Y-m-d');
|
||||
@ -63,10 +62,10 @@ switch ($action) {
|
||||
$title = ' Reports [' . $mdate . ']';
|
||||
$title = str_replace('-', ' ', $title);
|
||||
|
||||
if(file_exists('system/uploads/logo.png')){
|
||||
$logo = 'system/uploads/logo.png';
|
||||
}else{
|
||||
$logo = 'system/uploads/logo.default.png';
|
||||
if (file_exists($UPLOAD_PATH . '/logo.png')) {
|
||||
$logo = $UPLOAD_PATH . '/logo.png';
|
||||
} else {
|
||||
$logo = $UPLOAD_PATH . '/logo.default.png';
|
||||
}
|
||||
|
||||
if ($x) {
|
||||
@ -75,21 +74,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 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 +115,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
|
||||
|
||||
@ -235,10 +234,10 @@ EOF;
|
||||
|
||||
$title = ' Reports [' . $mdate . ']';
|
||||
$title = str_replace('-', ' ', $title);
|
||||
if(file_exists('system/uploads/logo.png')){
|
||||
$logo = 'system/uploads/logo.png';
|
||||
}else{
|
||||
$logo = 'system/uploads/logo.default.png';
|
||||
if (file_exists($UPLOAD_PATH . '/logo.png')) {
|
||||
$logo = $UPLOAD_PATH . '/logo.png';
|
||||
} else {
|
||||
$logo = $UPLOAD_PATH . '/logo.default.png';
|
||||
}
|
||||
|
||||
if ($x) {
|
||||
@ -247,21 +246,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 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 +287,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
|
||||
|
@ -6,7 +6,7 @@
|
||||
**/
|
||||
|
||||
_auth();
|
||||
$ui->assign('_title', $_L['Dashboard']);
|
||||
$ui->assign('_title', Lang::T('Dashboard'));
|
||||
|
||||
$user = User::_info();
|
||||
$ui->assign('_user', $user);
|
||||
|
@ -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:
|
||||
|
@ -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");
|
@ -10,11 +10,10 @@ $ui->assign('_title', 'PHPNuxBill Logs');
|
||||
$ui->assign('_system_menu', 'logs');
|
||||
|
||||
$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'])) {
|
||||
_alert(Lang::T('You do not have permission to access this page'),'danger', "dashboard");
|
||||
}
|
||||
|
||||
|
||||
|
@ -13,13 +13,13 @@ $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;
|
||||
case 'history':
|
||||
$ui->assign('_system_menu', 'history');
|
||||
$paginator = Paginator::build(ORM::for_table('tbl_payment_gateway'),['username'=>$user['username']]);
|
||||
$paginator = Paginator::build(ORM::for_table('tbl_payment_gateway'), ['username' => $user['username']]);
|
||||
$d = ORM::for_table('tbl_payment_gateway')
|
||||
->where('username', $user['username'])
|
||||
->order_by_desc('id')
|
||||
@ -31,51 +31,51 @@ switch ($action) {
|
||||
run_hook('customer_view_order_history'); #HOOK
|
||||
$ui->display('user-orderHistory.tpl');
|
||||
break;
|
||||
case 'balance':
|
||||
if (strpos($user['email'], '@') === false) {
|
||||
r2(U . 'accounts/profile', 'e', Lang::T("Please enter your email address"));
|
||||
}
|
||||
$ui->assign('_title', 'Top Up');
|
||||
$ui->assign('_system_menu', 'balance');
|
||||
$plans_balance = ORM::for_table('tbl_plans')->where('enabled', '1')->where('type', 'Balance')->where('allow_purchase', 'yes')->find_many();
|
||||
$ui->assign('plans_balance', $plans_balance);
|
||||
$ui->display('user-orderBalance.tpl');
|
||||
break;
|
||||
case 'package':
|
||||
if (strpos($user['email'], '@') === false) {
|
||||
r2(U . 'accounts/profile', 'e', Lang::T("Please enter your email address"));
|
||||
}
|
||||
$ui->assign('_title', 'Order Plan');
|
||||
$ui->assign('_system_menu', 'package');
|
||||
if (!empty($_SESSION['nux-router'])) {
|
||||
if ($_SESSION['nux-router'] == 'radius') {
|
||||
$radius_pppoe = ORM::for_table('tbl_plans')->where('enabled', '1')->where('is_radius', 1)->where('type', 'PPPOE')->where('allow_purchase', 'yes')->find_many();
|
||||
$radius_hotspot = ORM::for_table('tbl_plans')->where('enabled', '1')->where('is_radius', 1)->where('type', 'Hotspot')->where('allow_purchase', 'yes')->find_many();
|
||||
} else {
|
||||
$routers = ORM::for_table('tbl_routers')->where('id', $_SESSION['nux-router'])->find_many();
|
||||
$rs = [];
|
||||
foreach ($routers as $r) {
|
||||
$rs[] = $r['name'];
|
||||
}
|
||||
$plans_pppoe = ORM::for_table('tbl_plans')->where('enabled', '1')->where_in('routers', $rs)->where('is_radius', 0)->where('type', 'PPPOE')->where('allow_purchase', 'yes')->find_many();
|
||||
$plans_hotspot = ORM::for_table('tbl_plans')->where('enabled', '1')->where_in('routers', $rs)->where('is_radius', 0)->where('type', 'Hotspot')->where('allow_purchase', 'yes')->find_many();
|
||||
}
|
||||
} else {
|
||||
case 'balance':
|
||||
if (strpos($user['email'], '@') === false) {
|
||||
r2(U . 'accounts/profile', 'e', Lang::T("Please enter your email address"));
|
||||
}
|
||||
$ui->assign('_title', 'Top Up');
|
||||
$ui->assign('_system_menu', 'balance');
|
||||
$plans_balance = ORM::for_table('tbl_plans')->where('enabled', '1')->where('type', 'Balance')->where('allow_purchase', 'yes')->find_many();
|
||||
$ui->assign('plans_balance', $plans_balance);
|
||||
$ui->display('user-orderBalance.tpl');
|
||||
break;
|
||||
case 'package':
|
||||
if (strpos($user['email'], '@') === false) {
|
||||
r2(U . 'accounts/profile', 'e', Lang::T("Please enter your email address"));
|
||||
}
|
||||
$ui->assign('_title', 'Order Plan');
|
||||
$ui->assign('_system_menu', 'package');
|
||||
if (!empty($_SESSION['nux-router'])) {
|
||||
if ($_SESSION['nux-router'] == 'radius') {
|
||||
$radius_pppoe = ORM::for_table('tbl_plans')->where('enabled', '1')->where('is_radius', 1)->where('type', 'PPPOE')->where('allow_purchase', 'yes')->find_many();
|
||||
$radius_hotspot = ORM::for_table('tbl_plans')->where('enabled', '1')->where('is_radius', 1)->where('type', 'Hotspot')->where('allow_purchase', 'yes')->find_many();
|
||||
|
||||
$routers = ORM::for_table('tbl_routers')->find_many();
|
||||
$plans_pppoe = ORM::for_table('tbl_plans')->where('enabled', '1')->where('is_radius', 0)->where('type', 'PPPOE')->where('allow_purchase', 'yes')->find_many();
|
||||
$plans_hotspot = ORM::for_table('tbl_plans')->where('enabled', '1')->where('is_radius', 0)->where('type', 'Hotspot')->where('allow_purchase', 'yes')->find_many();
|
||||
} else {
|
||||
$routers = ORM::for_table('tbl_routers')->where('id', $_SESSION['nux-router'])->find_many();
|
||||
$rs = [];
|
||||
foreach ($routers as $r) {
|
||||
$rs[] = $r['name'];
|
||||
}
|
||||
$plans_pppoe = ORM::for_table('tbl_plans')->where('enabled', '1')->where_in('routers', $rs)->where('is_radius', 0)->where('type', 'PPPOE')->where('allow_purchase', 'yes')->find_many();
|
||||
$plans_hotspot = ORM::for_table('tbl_plans')->where('enabled', '1')->where_in('routers', $rs)->where('is_radius', 0)->where('type', 'Hotspot')->where('allow_purchase', 'yes')->find_many();
|
||||
}
|
||||
$ui->assign('routers', $routers);
|
||||
$ui->assign('radius_pppoe', $radius_pppoe);
|
||||
$ui->assign('radius_hotspot', $radius_hotspot);
|
||||
$ui->assign('plans_pppoe', $plans_pppoe);
|
||||
$ui->assign('plans_hotspot', $plans_hotspot);
|
||||
run_hook('customer_view_order_plan'); #HOOK
|
||||
$ui->display('user-orderPlan.tpl');
|
||||
break;
|
||||
} else {
|
||||
$radius_pppoe = ORM::for_table('tbl_plans')->where('enabled', '1')->where('is_radius', 1)->where('type', 'PPPOE')->where('allow_purchase', 'yes')->find_many();
|
||||
$radius_hotspot = ORM::for_table('tbl_plans')->where('enabled', '1')->where('is_radius', 1)->where('type', 'Hotspot')->where('allow_purchase', 'yes')->find_many();
|
||||
|
||||
$routers = ORM::for_table('tbl_routers')->find_many();
|
||||
$plans_pppoe = ORM::for_table('tbl_plans')->where('enabled', '1')->where('is_radius', 0)->where('type', 'PPPOE')->where('allow_purchase', 'yes')->find_many();
|
||||
$plans_hotspot = ORM::for_table('tbl_plans')->where('enabled', '1')->where('is_radius', 0)->where('type', 'Hotspot')->where('allow_purchase', 'yes')->find_many();
|
||||
}
|
||||
$ui->assign('routers', $routers);
|
||||
$ui->assign('radius_pppoe', $radius_pppoe);
|
||||
$ui->assign('radius_hotspot', $radius_hotspot);
|
||||
$ui->assign('plans_pppoe', $plans_pppoe);
|
||||
$ui->assign('plans_hotspot', $plans_hotspot);
|
||||
run_hook('customer_view_order_plan'); #HOOK
|
||||
$ui->display('user-orderPlan.tpl');
|
||||
break;
|
||||
case 'unpaid':
|
||||
$d = ORM::for_table('tbl_payment_gateway')
|
||||
->where('username', $user['username'])
|
||||
@ -108,11 +108,11 @@ switch ($action) {
|
||||
r2(U . "order/buy/" . (($trx['routers_id'] == 0) ? $trx['routers'] : $trx['routers_id']) . '/' . $trx['plan_id'], 'w', Lang::T("Checking payment"));
|
||||
}
|
||||
if ($routes['3'] == 'check') {
|
||||
if (!file_exists('system/paymentgateway/' . $trx['gateway'] . '.php')) {
|
||||
if (!file_exists($PAYMENTGATEWAY_PATH . DIRECTORY_SEPARATOR . $trx['gateway'] . '.php')) {
|
||||
r2(U . 'order/view/' . $trxid, 'e', Lang::T("No Payment Gateway Available"));
|
||||
}
|
||||
run_hook('customer_check_payment_status'); #HOOK
|
||||
include 'system/paymentgateway/' . $trx['gateway'] . '.php';
|
||||
include $PAYMENTGATEWAY_PATH . DIRECTORY_SEPARATOR . $trx['gateway'] . '.php';
|
||||
call_user_func($trx['gateway'] . '_validate_config');
|
||||
call_user_func($config['payment_gateway'] . '_get_status', $trx, $user);
|
||||
} else if ($routes['3'] == 'cancel') {
|
||||
@ -149,10 +149,10 @@ switch ($action) {
|
||||
if (empty($plan)) {
|
||||
r2(U . "order/package", 'e', Lang::T("Plan Not found"));
|
||||
}
|
||||
if(!$plan['enabled']){
|
||||
if (!$plan['enabled']) {
|
||||
r2(U . "home", 'e', 'Plan is not exists');
|
||||
}
|
||||
if($plan['allow_purchase'] != 'yes'){
|
||||
if ($plan['allow_purchase'] != 'yes') {
|
||||
r2(U . "home", 'e', 'Cannot recharge this plan');
|
||||
}
|
||||
if ($routes['2'] == 'radius') {
|
||||
@ -185,10 +185,10 @@ switch ($action) {
|
||||
if (empty($plan)) {
|
||||
r2(U . "order/package", 'e', Lang::T("Plan Not found"));
|
||||
}
|
||||
if(!$plan['enabled']){
|
||||
if (!$plan['enabled']) {
|
||||
r2(U . "home", 'e', 'Plan is not exists');
|
||||
}
|
||||
if($plan['allow_purchase'] != 'yes'){
|
||||
if ($plan['allow_purchase'] != 'yes') {
|
||||
r2(U . "home", 'e', 'Cannot recharge this plan');
|
||||
}
|
||||
if ($routes['2'] == 'radius') {
|
||||
@ -273,11 +273,11 @@ switch ($action) {
|
||||
if ($config['payment_gateway'] == 'none') {
|
||||
r2(U . 'home', 'e', Lang::T("No Payment Gateway Available"));
|
||||
}
|
||||
if (!file_exists('system/paymentgateway/' . $config['payment_gateway'] . '.php')) {
|
||||
if (!file_exists($PAYMENTGATEWAY_PATH . DIRECTORY_SEPARATOR . $config['payment_gateway'] . '.php')) {
|
||||
r2(U . 'home', 'e', Lang::T("No Payment Gateway Available"));
|
||||
}
|
||||
run_hook('customer_buy_plan'); #HOOK
|
||||
include 'system/paymentgateway/' . $config['payment_gateway'] . '.php';
|
||||
include $PAYMENTGATEWAY_PATH . DIRECTORY_SEPARATOR . $config['payment_gateway'] . '.php';
|
||||
call_user_func($config['payment_gateway'] . '_validate_config');
|
||||
|
||||
if ($routes['2'] == 'radius') {
|
||||
|
@ -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'];
|
||||
|
@ -9,10 +9,12 @@ $ui->assign('_title', 'Pages');
|
||||
$ui->assign('_system_menu', 'pages');
|
||||
|
||||
$action = $routes['1'];
|
||||
$admin = Admin::_info();
|
||||
$ui->assign('_admin', $admin);
|
||||
|
||||
if(strpos($action,"-reset")!==false){
|
||||
if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin'])) {
|
||||
_alert(Lang::T('You do not have permission to access this page'),'danger', "dashboard");
|
||||
}
|
||||
$action = str_replace("-reset","",$action);
|
||||
$path = "pages/".str_replace(".","",$action).".html";
|
||||
$temp = "pages_template/".str_replace(".","",$action).".html";
|
||||
@ -25,6 +27,9 @@ if(strpos($action,"-reset")!==false){
|
||||
}
|
||||
r2(U . 'pages/'.$action);
|
||||
}else if(strpos($action,"-post")===false){
|
||||
if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin'])) {
|
||||
_alert(Lang::T('You do not have permission to access this page'),'danger', "dashboard");
|
||||
}
|
||||
$path = "pages/".str_replace(".","",$action).".html";
|
||||
//echo $path;
|
||||
run_hook('view_edit_pages'); #HOOK
|
||||
@ -48,15 +53,18 @@ if(strpos($action,"-reset")!==false){
|
||||
}else
|
||||
$ui->display('a404.tpl');
|
||||
}else{
|
||||
if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin'])) {
|
||||
_alert(Lang::T('You do not have permission to access this page'),'danger', "dashboard");
|
||||
}
|
||||
$action = str_replace("-post","",$action);
|
||||
$path = "pages/".str_replace(".","",$action).".html";
|
||||
if(file_exists($path)){
|
||||
$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');
|
||||
|
@ -1,4 +1,5 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* PHP Mikrotik Billing (https://github.com/hotspotbilling/phpnuxbill/)
|
||||
* by https://t.me/ibnux
|
||||
@ -8,41 +9,40 @@ _admin();
|
||||
$ui->assign('_system_menu', 'paymentgateway');
|
||||
|
||||
$action = alphanumeric($routes['1']);
|
||||
$admin = Admin::_info();
|
||||
$ui->assign('_admin', $admin);
|
||||
|
||||
if(file_exists('system/paymentgateway/'.$action.'.php')){
|
||||
include 'system/paymentgateway/'.$action.'.php';
|
||||
if (file_exists($PAYMENTGATEWAY_PATH . DIRECTORY_SEPARATOR . $action . '.php')) {
|
||||
include $PAYMENTGATEWAY_PATH . DIRECTORY_SEPARATOR . $action . '.php';
|
||||
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||
if(function_exists($action.'_save_config')){
|
||||
call_user_func($action.'_save_config');
|
||||
}else{
|
||||
if (function_exists($action . '_save_config')) {
|
||||
call_user_func($action . '_save_config');
|
||||
} else {
|
||||
$ui->display('a404.tpl');
|
||||
}
|
||||
}else{
|
||||
if(function_exists($action.'_show_config')){
|
||||
call_user_func($action.'_show_config');
|
||||
}else{
|
||||
} else {
|
||||
if (function_exists($action . '_show_config')) {
|
||||
call_user_func($action . '_show_config');
|
||||
} else {
|
||||
$ui->display('a404.tpl');
|
||||
}
|
||||
}
|
||||
}else{
|
||||
if(!empty($action)){
|
||||
} else {
|
||||
if (!empty($action)) {
|
||||
r2(U . 'paymentgateway', 'w', Lang::T('Payment Gateway Not Found'));
|
||||
}else{
|
||||
$files = scandir('system/paymentgateway/');
|
||||
foreach($files as $file){
|
||||
if(pathinfo($file, PATHINFO_EXTENSION)=='php'){
|
||||
$pgs[] = str_replace('.php','',$file);
|
||||
} else {
|
||||
$files = scandir($PAYMENTGATEWAY_PATH);
|
||||
foreach ($files as $file) {
|
||||
if (pathinfo($file, PATHINFO_EXTENSION) == 'php') {
|
||||
$pgs[] = str_replace('.php', '', $file);
|
||||
}
|
||||
}
|
||||
if(isset($_POST['payment_gateway'])){
|
||||
if (isset($_POST['payment_gateway'])) {
|
||||
$payment_gateway = _post('payment_gateway');
|
||||
$d = ORM::for_table('tbl_appconfig')->where('setting', 'payment_gateway')->find_one();
|
||||
if($d){
|
||||
if ($d) {
|
||||
$d->value = $payment_gateway;
|
||||
$d->save();
|
||||
}else{
|
||||
} else {
|
||||
$d = ORM::for_table('tbl_appconfig')->create();
|
||||
$d->setting = 'payment_gateway';
|
||||
$d->value = $payment_gateway;
|
||||
@ -54,4 +54,4 @@ if(file_exists('system/paymentgateway/'.$action.'.php')){
|
||||
$ui->assign('pgs', $pgs);
|
||||
$ui->display('paymentgateway.tpl');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,4 +1,5 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* PHP Mikrotik Billing (https://github.com/hotspotbilling/phpnuxbill/)
|
||||
* by https://t.me/ibnux
|
||||
@ -11,19 +12,18 @@ $ui->assign('_system_menu', 'settings');
|
||||
$plugin_repository = 'https://hotspotbilling.github.io/Plugin-Repository/repository.json';
|
||||
|
||||
$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'])) {
|
||||
_alert(Lang::T('You do not have permission to access this page'), 'danger', "dashboard");
|
||||
}
|
||||
|
||||
$cache = File::pathFixer('system/cache/plugin_repository.json');
|
||||
$cache = $CACHE_PATH . File::pathFixer('/plugin_repository.json');
|
||||
if (file_exists($cache) && time() - filemtime($cache) < (24 * 60 * 60)) {
|
||||
$txt = file_get_contents($cache);
|
||||
$json = json_decode($txt, true);
|
||||
if(empty($json['plugins']) && empty($json['payment_gateway'])){
|
||||
if (empty($json['plugins']) && empty($json['payment_gateway'])) {
|
||||
unlink($cache);
|
||||
r2(U . 'dashboard', 'd', $txt);
|
||||
}
|
||||
@ -36,22 +36,22 @@ if (file_exists($cache) && time() - filemtime($cache) < (24 * 60 * 60)) {
|
||||
switch ($action) {
|
||||
|
||||
case 'install':
|
||||
if(!is_writeable(File::pathFixer('system/cache/'))){
|
||||
r2(U . "pluginmanager", 'e', 'Folder system/cache/ is not writable');
|
||||
if (!is_writeable($CACHE_PATH)) {
|
||||
r2(U . "pluginmanager", 'e', 'Folder cache/ is not writable');
|
||||
}
|
||||
if(!is_writeable(File::pathFixer('system/plugin/'))){
|
||||
r2(U . "pluginmanager", 'e', 'Folder system/plugin/ is not writable');
|
||||
if (!is_writeable($PLUGIN_PATH)) {
|
||||
r2(U . "pluginmanager", 'e', 'Folder plugin/ is not writable');
|
||||
}
|
||||
set_time_limit(-1);
|
||||
$tipe = $routes['2'];
|
||||
$plugin = $routes['3'];
|
||||
$file = File::pathFixer('system/cache/') . $plugin . '.zip';
|
||||
$file = $CACHE_PATH . File::pathFixer('/') . $plugin . '.zip';
|
||||
if (file_exists($file)) unlink($file);
|
||||
if ($tipe == 'plugin') {
|
||||
foreach ($json['plugins'] as $plg) {
|
||||
if ($plg['id'] == $plugin) {
|
||||
$fp = fopen($file, 'w+');
|
||||
$ch = curl_init($plg['github'].'/archive/refs/heads/master.zip');
|
||||
$ch = curl_init($plg['github'] . '/archive/refs/heads/master.zip');
|
||||
curl_setopt($ch, CURLOPT_POST, 0);
|
||||
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 15);
|
||||
curl_setopt($ch, CURLOPT_TIMEOUT, 15);
|
||||
@ -64,19 +64,19 @@ switch ($action) {
|
||||
|
||||
$zip = new ZipArchive();
|
||||
$zip->open($file);
|
||||
$zip->extractTo(File::pathFixer('system/cache/'));
|
||||
$zip->extractTo($CACHE_PATH);
|
||||
$zip->close();
|
||||
$folder = File::pathFixer('system/cache/' . $plugin.'-main/');
|
||||
if(!file_exists($folder)){
|
||||
$folder = File::pathFixer('system/cache/' . $plugin.'-master/');
|
||||
$folder = $CACHE_PATH . File::pathFixer('/' . $plugin . '-main/');
|
||||
if (!file_exists($folder)) {
|
||||
$folder = $CACHE_PATH . File::pathFixer('/' . $plugin . '-master/');
|
||||
}
|
||||
if(!file_exists($folder)){
|
||||
if (!file_exists($folder)) {
|
||||
r2(U . "pluginmanager", 'e', 'Extracted Folder is unknown');
|
||||
}
|
||||
File::copyFolder($folder, File::pathFixer('system/plugin/'), ['README.md','LICENSE']);
|
||||
File::copyFolder($folder, $PLUGIN_PATH . DIRECTORY_SEPARATOR, ['README.md', 'LICENSE']);
|
||||
File::deleteFolder($folder);
|
||||
unlink($file);
|
||||
r2(U . "pluginmanager", 's', 'Plugin '.$plugin.' has been installed');
|
||||
r2(U . "pluginmanager", 's', 'Plugin ' . $plugin . ' has been installed');
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -85,7 +85,7 @@ switch ($action) {
|
||||
foreach ($json['payment_gateway'] as $plg) {
|
||||
if ($plg['id'] == $plugin) {
|
||||
$fp = fopen($file, 'w+');
|
||||
$ch = curl_init($plg['github'].'/archive/refs/heads/master.zip');
|
||||
$ch = curl_init($plg['github'] . '/archive/refs/heads/master.zip');
|
||||
curl_setopt($ch, CURLOPT_POST, 0);
|
||||
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 15);
|
||||
curl_setopt($ch, CURLOPT_TIMEOUT, 15);
|
||||
@ -98,19 +98,19 @@ switch ($action) {
|
||||
|
||||
$zip = new ZipArchive();
|
||||
$zip->open($file);
|
||||
$zip->extractTo(File::pathFixer('system/cache/'));
|
||||
$zip->extractTo($CACHE_PATH);
|
||||
$zip->close();
|
||||
$folder = File::pathFixer('system/cache/' . $plugin.'-main/');
|
||||
if(!file_exists($folder)){
|
||||
$folder = File::pathFixer('system/cache/' . $plugin.'-master/');
|
||||
$folder = $CACHE_PATH . File::pathFixer('/' . $plugin . '-main/');
|
||||
if (!file_exists($folder)) {
|
||||
$folder = $CACHE_PATH . File::pathFixer('/' . $plugin . '-master/');
|
||||
}
|
||||
if(!file_exists($folder)){
|
||||
if (!file_exists($folder)) {
|
||||
r2(U . "pluginmanager", 'e', 'Extracted Folder is unknown');
|
||||
}
|
||||
File::copyFolder($folder, File::pathFixer('system/paymentgateway/'), ['README.md','LICENSE']);
|
||||
File::copyFolder($folder, $PAYMENTGATEWAY_PATH . DIRECTORY_SEPARATOR, ['README.md', 'LICENSE']);
|
||||
File::deleteFolder($folder);
|
||||
unlink($file);
|
||||
r2(U . "paymentgateway", 's', 'Payment Gateway '.$plugin.' has been installed');
|
||||
r2(U . "paymentgateway", 's', 'Payment Gateway ' . $plugin . ' has been installed');
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -6,15 +6,14 @@
|
||||
**/
|
||||
|
||||
_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'])) {
|
||||
_alert(Lang::T('You do not have permission to access this page'),'danger', "dashboard");
|
||||
}
|
||||
|
||||
|
||||
@ -74,7 +73,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 +100,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 +120,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 +134,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 +155,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);
|
||||
}
|
||||
|
@ -6,17 +6,12 @@
|
||||
**/
|
||||
|
||||
_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 +33,9 @@ EOT;
|
||||
|
||||
switch ($action) {
|
||||
case 'sync':
|
||||
if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin'])) {
|
||||
_alert(Lang::T('You do not have permission to access this page'), 'danger', "dashboard");
|
||||
}
|
||||
set_time_limit(-1);
|
||||
$plans = ORM::for_table('tbl_user_recharges')->where('status', 'on')->find_many();
|
||||
$log = '';
|
||||
@ -61,27 +59,35 @@ 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;
|
||||
|
||||
case 'recharge':
|
||||
if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin', 'Agent', 'Sales'])) {
|
||||
_alert(Lang::T('You do not have permission to access this page'), 'danger', "dashboard");
|
||||
}
|
||||
$ui->assign('xfooter', $select2_customer);
|
||||
$p = ORM::for_table('tbl_plans')->where('enabled', '1')->find_many();
|
||||
$ui->assign('p', $p);
|
||||
@ -95,6 +101,9 @@ switch ($action) {
|
||||
break;
|
||||
|
||||
case 'recharge-user':
|
||||
if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin', 'Agent', 'Sales'])) {
|
||||
_alert(Lang::T('You do not have permission to access this page'), 'danger', "dashboard");
|
||||
}
|
||||
$id = $routes['2'];
|
||||
$ui->assign('id', $id);
|
||||
|
||||
@ -109,6 +118,9 @@ switch ($action) {
|
||||
break;
|
||||
|
||||
case 'recharge-post':
|
||||
if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin', 'Agent', 'Sales'])) {
|
||||
_alert(Lang::T('You do not have permission to access this page'), 'danger', "dashboard");
|
||||
}
|
||||
$id_customer = _post('id_customer');
|
||||
$type = _post('type');
|
||||
$server = _post('server');
|
||||
@ -125,10 +137,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,34 +150,45 @@ 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();
|
||||
$c = ORM::for_table('tbl_customers')->where('username', $in['username'])->find_one();
|
||||
if ($c) {
|
||||
Message::sendInvoice($c, $d);
|
||||
Message::sendInvoice($c, $in);
|
||||
r2(U . 'prepaid/view/' . $id, 's', "Success send to customer");
|
||||
}
|
||||
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'])) {
|
||||
_alert(Lang::T('You do not have permission to access this page'), 'danger', "dashboard");
|
||||
}
|
||||
$id = $routes['2'];
|
||||
$d = ORM::for_table('tbl_user_recharges')->find_one($id);
|
||||
if ($d) {
|
||||
@ -174,6 +196,7 @@ switch ($action) {
|
||||
$p = ORM::for_table('tbl_plans')->where('enabled', '1')->where_not_equal('type', 'Balance')->find_many();
|
||||
$ui->assign('p', $p);
|
||||
run_hook('view_edit_customer_plan'); #HOOK
|
||||
$ui->assign('_title', 'Edit Plan');
|
||||
$ui->display('prepaid-edit.tpl');
|
||||
} else {
|
||||
r2(U . 'services/list', 'e', $_L['Account_Not_Found']);
|
||||
@ -181,6 +204,9 @@ switch ($action) {
|
||||
break;
|
||||
|
||||
case 'delete':
|
||||
if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin'])) {
|
||||
_alert(Lang::T('You do not have permission to access this page'), 'danger', "dashboard");
|
||||
}
|
||||
$id = $routes['2'];
|
||||
$d = ORM::for_table('tbl_user_recharges')->find_one($id);
|
||||
if ($d) {
|
||||
@ -201,12 +227,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'])) {
|
||||
_alert(Lang::T('You do not have permission to access this page'), 'danger', "dashboard");
|
||||
}
|
||||
$username = _post('username');
|
||||
$id_plan = _post('id_plan');
|
||||
$recharged_on = _post('recharged_on');
|
||||
@ -217,7 +246,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) {
|
||||
@ -228,53 +257,117 @@ switch ($action) {
|
||||
run_hook('edit_customer_plan'); #HOOK
|
||||
$d->username = $username;
|
||||
$d->plan_id = $id_plan;
|
||||
$d->namebp = $p['name_plan'];
|
||||
//$d->recharged_on = $recharged_on;
|
||||
$d->expiration = $expiration;
|
||||
$d->time = $time;
|
||||
if($p['is_radius']){
|
||||
if ($d['status'] == 'off') {
|
||||
if (strtotime($expiration . ' ' . $time) > time()) {
|
||||
$d->status = 'on';
|
||||
}
|
||||
}
|
||||
if ($p['is_radius']) {
|
||||
$d->routers = 'radius';
|
||||
}else{
|
||||
} else {
|
||||
$d->routers = $p['routers'];
|
||||
}
|
||||
$d->save();
|
||||
Package::changeTo($username, $id_plan, $id);
|
||||
_log('[' . $admin['username'] . ']: ' . 'Edit Plan for Customer ' . $d['username'] . ' to [' . $d['plan_name'] . '][' . Lang::moneyFormat($d['price']) . ']', 'Admin', $admin['id']);
|
||||
r2(U . 'prepaid/list', 's', $_L['Updated_Successfully']);
|
||||
if ($d['status'] == 'on') {
|
||||
Package::changeTo($username, $id_plan, $id);
|
||||
}
|
||||
_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']);
|
||||
if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin', 'Agent', 'Sales'])) {
|
||||
_alert(Lang::T('You do not have permission to access this page'), 'danger', "dashboard");
|
||||
}
|
||||
$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();
|
||||
@ -286,16 +379,19 @@ switch ($action) {
|
||||
break;
|
||||
|
||||
case 'remove-voucher':
|
||||
if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin'])) {
|
||||
_alert(Lang::T('You do not have permission to access this page'), 'danger', "dashboard");
|
||||
}
|
||||
$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');
|
||||
@ -319,53 +415,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);
|
||||
@ -397,6 +498,9 @@ switch ($action) {
|
||||
$ui->display('print-voucher.tpl');
|
||||
break;
|
||||
case 'voucher-post':
|
||||
if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin', 'Agent', 'Sales'])) {
|
||||
_alert(Lang::T('You do not have permission to access this page'), 'danger', "dashboard");
|
||||
}
|
||||
$type = _post('type');
|
||||
$plan = _post('plan');
|
||||
$voucher_format = _post('voucher_format');
|
||||
@ -407,7 +511,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>';
|
||||
@ -416,7 +520,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;
|
||||
@ -440,37 +544,105 @@ 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'])) {
|
||||
_alert(Lang::T('You do not have permission to access this page'), 'danger', "dashboard");
|
||||
}
|
||||
$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':
|
||||
if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin', 'Agent', 'Sales'])) {
|
||||
_alert(Lang::T('You do not have permission to access this page'), 'danger', "dashboard");
|
||||
}
|
||||
$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');
|
||||
|
||||
break;
|
||||
|
||||
case 'refill-post':
|
||||
if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin', 'Agent', 'Sales'])) {
|
||||
_alert(Lang::T('You do not have permission to access this page'), 'danger', "dashboard");
|
||||
}
|
||||
$code = _post('code');
|
||||
$user = ORM::for_table('tbl_customers')->where('id', _post('id_customer'))->find_one();
|
||||
$v1 = ORM::for_table('tbl_voucher')->where('code', $code)->where('status', 0)->find_one();
|
||||
@ -482,17 +654,19 @@ 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':
|
||||
if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin', 'Agent', 'Sales'])) {
|
||||
_alert(Lang::T('You do not have permission to access this page'), 'danger', "dashboard");
|
||||
}
|
||||
$ui->assign('_title', Lang::T('Refill Balance'));
|
||||
$ui->assign('xfooter', $select2_customer);
|
||||
$ui->assign('p', ORM::for_table('tbl_plans')->where('enabled', '1')->where('type', 'Balance')->find_many());
|
||||
@ -500,6 +674,9 @@ switch ($action) {
|
||||
$ui->display('deposit.tpl');
|
||||
break;
|
||||
case 'deposit-post':
|
||||
if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin', 'Agent', 'Sales'])) {
|
||||
_alert(Lang::T('You do not have permission to access this page'), 'danger', "dashboard");
|
||||
}
|
||||
$user = _post('id_customer');
|
||||
$plan = _post('id_plan');
|
||||
|
||||
@ -508,8 +685,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");
|
||||
|
@ -8,18 +8,17 @@ $ui->assign('_title', $_L['Plugin Manager']);
|
||||
$ui->assign('_system_menu', 'settings');
|
||||
|
||||
$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'])) {
|
||||
_alert(Lang::T('You do not have permission to access this page'),'danger', "dashboard");
|
||||
}
|
||||
|
||||
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 +66,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 +130,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)) {
|
||||
|
@ -1,4 +1,5 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* PHP Mikrotik Billing (https://github.com/hotspotbilling/phpnuxbill/)
|
||||
* by https://t.me/ibnux
|
||||
@ -10,21 +11,21 @@ if (isset($routes['1'])) {
|
||||
$do = 'register-display';
|
||||
}
|
||||
|
||||
$otpPath = 'system/cache/sms/';
|
||||
$otpPath = $CACHE_PATH . File::pathFixer('/sms/');
|
||||
|
||||
switch ($do) {
|
||||
case 'post':
|
||||
$otp_code = _post('otp_code');
|
||||
$username = alphanumeric(_post('username'),"+_.");
|
||||
$username = alphanumeric(_post('username'), "+_.");
|
||||
$email = _post('email');
|
||||
$fullname = _post('fullname');
|
||||
$password = _post('password');
|
||||
$cpassword = _post('cpassword');
|
||||
$address = _post('address');
|
||||
if(!empty($config['sms_url'])){
|
||||
if (!empty($config['sms_url'])) {
|
||||
$phonenumber = Lang::phoneFormat($username);
|
||||
$username = $phonenumber;
|
||||
}else if(strlen($username)<21){
|
||||
} else if (strlen($username) < 21) {
|
||||
$phonenumber = $username;
|
||||
}
|
||||
$msg = '';
|
||||
@ -41,19 +42,19 @@ 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'])){
|
||||
$otpPath .= sha1($username.$db_password).".txt";
|
||||
if (!empty($config['sms_url'])) {
|
||||
$otpPath .= sha1($username . $db_password) . ".txt";
|
||||
run_hook('validate_otp'); #HOOK
|
||||
//expired 10 minutes
|
||||
if(file_exists($otpPath) && time()-filemtime($otpPath)>1200){
|
||||
if (file_exists($otpPath) && time() - filemtime($otpPath) > 1200) {
|
||||
unlink($otpPath);
|
||||
r2(U . 'register', 's', 'Verification code expired');
|
||||
}else if(file_exists($otpPath)){
|
||||
} else if (file_exists($otpPath)) {
|
||||
$code = file_get_contents($otpPath);
|
||||
if($code!=$otp_code){
|
||||
if ($code != $otp_code) {
|
||||
$ui->assign('username', $username);
|
||||
$ui->assign('fullname', $fullname);
|
||||
$ui->assign('address', $address);
|
||||
@ -63,21 +64,21 @@ switch ($do) {
|
||||
$ui->assign('notify_t', 'd');
|
||||
$ui->display('register-otp.tpl');
|
||||
exit();
|
||||
}else{
|
||||
} else {
|
||||
unlink($otpPath);
|
||||
}
|
||||
}else{
|
||||
} else {
|
||||
r2(U . 'register', 's', 'No Verification code');
|
||||
}
|
||||
}
|
||||
$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
|
||||
$d = ORM::for_table('tbl_customers')->create();
|
||||
$d->username = alphanumeric($username,"+_.");
|
||||
$d->username = alphanumeric($username, "+_.");
|
||||
$d->password = $password;
|
||||
$d->fullname = $fullname;
|
||||
$d->address = $address;
|
||||
@ -85,7 +86,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);
|
||||
@ -110,38 +111,38 @@ switch ($do) {
|
||||
break;
|
||||
|
||||
default:
|
||||
if(!empty($config['sms_url'])){
|
||||
if (!empty($config['sms_url'])) {
|
||||
$username = _post('username');
|
||||
if(!empty($username)){
|
||||
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)){
|
||||
if (!file_exists($otpPath)) {
|
||||
mkdir($otpPath);
|
||||
touch($otpPath.'index.html');
|
||||
touch($otpPath . 'index.html');
|
||||
}
|
||||
$otpPath .= sha1($username.$db_password).".txt";
|
||||
$otpPath .= sha1($username . $db_password) . ".txt";
|
||||
//expired 10 minutes
|
||||
if(file_exists($otpPath) && time()-filemtime($otpPath)<1200){
|
||||
if (file_exists($otpPath) && time() - filemtime($otpPath) < 1200) {
|
||||
$ui->assign('username', $username);
|
||||
$ui->assign('notify', 'Please wait '.(1200-(time()-filemtime($otpPath))).' seconds before sending another SMS');
|
||||
$ui->assign('notify', 'Please wait ' . (1200 - (time() - filemtime($otpPath))) . ' seconds before sending another SMS');
|
||||
$ui->assign('notify_t', 'd');
|
||||
$ui->display('register-otp.tpl');
|
||||
}else{
|
||||
$otp = rand(100000,999999);
|
||||
} else {
|
||||
$otp = rand(100000, 999999);
|
||||
file_put_contents($otpPath, $otp);
|
||||
Message::sendSMS($username,$config['CompanyName']."\nYour Verification code are: $otp");
|
||||
Message::sendSMS($username, $config['CompanyName'] . "\nYour Verification code are: $otp");
|
||||
$ui->assign('username', $username);
|
||||
$ui->assign('notify', 'Verification code has been sent to your phone');
|
||||
$ui->assign('notify_t', 's');
|
||||
$ui->display('register-otp.tpl');
|
||||
}
|
||||
}else{
|
||||
} else {
|
||||
run_hook('view_otp_register'); #HOOK
|
||||
$ui->display('register-rotp.tpl');
|
||||
}
|
||||
}else{
|
||||
} else {
|
||||
$ui->assign('username', "");
|
||||
$ui->assign('fullname', "");
|
||||
$ui->assign('address', "");
|
||||
|
@ -6,17 +6,12 @@
|
||||
**/
|
||||
|
||||
_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'));
|
||||
|
@ -6,19 +6,18 @@
|
||||
**/
|
||||
|
||||
_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);
|
||||
|
||||
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'])) {
|
||||
_alert(Lang::T('You do not have permission to access this page'),'danger', "dashboard");
|
||||
}
|
||||
|
||||
switch ($action) {
|
||||
@ -66,7 +65,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 +82,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 +105,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 +124,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 +184,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);
|
||||
}
|
||||
|
@ -5,15 +5,14 @@
|
||||
* 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'])) {
|
||||
_alert(Lang::T('You do not have permission to access this page'),'danger', "dashboard");
|
||||
}
|
||||
|
||||
use PEAR2\Net\RouterOS;
|
||||
@ -173,14 +172,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 +199,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 +211,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 +243,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 +265,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 +285,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 +307,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 +319,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 +346,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 +372,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 +403,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 +413,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 +449,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 +469,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 +482,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 +513,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 +529,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 +548,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 +564,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 +576,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 +603,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 +624,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 +670,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 +685,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 +701,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 +717,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 +739,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);
|
||||
}
|
||||
|
@ -5,22 +5,35 @@
|
||||
* 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'];
|
||||
$admin = Admin::_info();
|
||||
$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'])) {
|
||||
_alert(Lang::T('You do not have permission to access this page'), 'danger', "dashboard");
|
||||
}
|
||||
if (file_exists('system/uploads/logo.png')) {
|
||||
$logo = 'system/uploads/logo.png?' . time();
|
||||
|
||||
if (!empty(_get('testWa'))) {
|
||||
$result = Message::sendWhatsapp(_get('testWa'), 'PHPNuxBill Test Whatsapp');
|
||||
r2(U . "settings/app", 's', 'Test Whatsapp has been send<br>Result: ' . $result);
|
||||
}
|
||||
if (!empty(_get('testSms'))) {
|
||||
$result = Message::sendSMS(_get('testSms'), 'PHPNuxBill Test SMS');
|
||||
r2(U . "settings/app", 's', 'Test SMS has been send<br>Result: ' . $result);
|
||||
}
|
||||
if (!empty(_get('testTg'))) {
|
||||
$result = Message::sendTelegram('PHPNuxBill Test Telegram');
|
||||
r2(U . "settings/app", 's', 'Test Telegram has been send<br>Result: ' . $result);
|
||||
}
|
||||
|
||||
if (file_exists($UPLOAD_PATH . DIRECTORY_SEPARATOR . 'logo.png')) {
|
||||
$logo = $UPLOAD_PATH . DIRECTORY_SEPARATOR . 'logo.png?' . time();
|
||||
} else {
|
||||
$logo = 'system/uploads/logo.default.png';
|
||||
$logo = $UPLOAD_PATH . DIRECTORY_SEPARATOR . 'logo.default.png';
|
||||
}
|
||||
$ui->assign('logo', $logo);
|
||||
if ($_c['radius_enable'] && empty($_c['radius_client'])) {
|
||||
@ -48,6 +61,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);
|
||||
@ -55,209 +82,25 @@ 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':
|
||||
if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin'])) {
|
||||
_alert(Lang::T('You do not have permission to access this page'), 'danger', "dashboard");
|
||||
}
|
||||
$company = _post('CompanyName');
|
||||
run_hook('save_settings'); #HOOK
|
||||
|
||||
|
||||
if (!empty($_FILES['logo']['name'])) {
|
||||
if (function_exists('imagecreatetruecolor')) {
|
||||
if (file_exists('system/uploads/logo.png')) unlink('system/uploads/logo.png');
|
||||
File::resizeCropImage($_FILES['logo']['tmp_name'], 'system/uploads/logo.png', 1078, 200, 100);
|
||||
if (file_exists($UPLOAD_PATH . DIRECTORY_SEPARATOR . 'logo.png')) unlink($UPLOAD_PATH . DIRECTORY_SEPARATOR . 'logo.png');
|
||||
File::resizeCropImage($_FILES['logo']['tmp_name'], $UPLOAD_PATH . DIRECTORY_SEPARATOR . 'logo.png', 1078, 200, 100);
|
||||
if (file_exists($_FILES['logo']['tmp_name'])) unlink($_FILES['logo']['tmp_name']);
|
||||
} else {
|
||||
r2(U . 'settings/app', 'e', 'PHP GD is not installed');
|
||||
}
|
||||
}
|
||||
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 {
|
||||
@ -272,7 +115,7 @@ switch ($action) {
|
||||
}
|
||||
}
|
||||
// save all settings
|
||||
foreach($_POST as $key => $value) {
|
||||
foreach ($_POST as $key => $value) {
|
||||
$d = ORM::for_table('tbl_appconfig')->where('setting', $key)->find_one();
|
||||
if ($d) {
|
||||
$d->value = $value;
|
||||
@ -285,20 +128,67 @@ 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'])) {
|
||||
_alert(Lang::T('You do not have permission to access this page'), 'danger', "dashboard");
|
||||
}
|
||||
$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':
|
||||
if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin'])) {
|
||||
_alert(Lang::T('You do not have permission to access this page'), 'danger', "dashboard");
|
||||
}
|
||||
$tzone = _post('tzone');
|
||||
$date_format = _post('date_format');
|
||||
$country_code_phone = _post('country_code_phone');
|
||||
$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;
|
||||
@ -372,16 +262,367 @@ 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'])) {
|
||||
_alert(Lang::T('You do not have permission to access this page'), 'danger', "dashboard");
|
||||
}
|
||||
$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'])) {
|
||||
_alert(Lang::T('You do not have permission to access this page'), 'danger', "dashboard");
|
||||
}
|
||||
$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'])) {
|
||||
_alert(Lang::T('You do not have permission to access this page'), 'danger', "dashboard");
|
||||
}
|
||||
$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'])) {
|
||||
_alert(Lang::T('You do not have permission to access this page'), 'danger', "dashboard");
|
||||
}
|
||||
|
||||
$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':
|
||||
if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin', 'Agent'])) {
|
||||
_alert(Lang::T('You do not have permission to access this page'), 'danger', "dashboard");
|
||||
}
|
||||
$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;
|
||||
@ -407,41 +648,44 @@ 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'])) {
|
||||
_alert(Lang::T('You do not have permission to access this page'), 'danger', "dashboard");
|
||||
}
|
||||
run_hook('view_notifications'); #HOOK
|
||||
if (file_exists("system/uploads/notifications.json")) {
|
||||
$ui->assign('_json', json_decode(file_get_contents('system/uploads/notifications.json'), true));
|
||||
if (file_exists($UPLOAD_PATH . DIRECTORY_SEPARATOR . "notifications.json")) {
|
||||
$ui->assign('_json', json_decode(file_get_contents($UPLOAD_PATH . DIRECTORY_SEPARATOR . 'notifications.json'), true));
|
||||
} else {
|
||||
$ui->assign('_json', json_decode(file_get_contents('system/uploads/notifications.default.json'), true));
|
||||
$ui->assign('_json', json_decode(file_get_contents($UPLOAD_PATH . DIRECTORY_SEPARATOR . 'notifications.default.json'), true));
|
||||
}
|
||||
$ui->assign('_default', json_decode(file_get_contents('system/uploads/notifications.default.json'), true));
|
||||
$ui->assign('_default', json_decode(file_get_contents($UPLOAD_PATH . DIRECTORY_SEPARATOR . 'notifications.default.json'), true));
|
||||
$ui->display('app-notifications.tpl');
|
||||
break;
|
||||
case 'notifications-post':
|
||||
file_put_contents("system/uploads/notifications.json", json_encode($_POST));
|
||||
r2(U . 'settings/notifications', 's', $_L['Settings_Saved_Successfully']);
|
||||
if (!in_array($admin['user_type'], ['SuperAdmin', 'Admin'])) {
|
||||
_alert(Lang::T('You do not have permission to access this page'), 'danger', "dashboard");
|
||||
}
|
||||
file_put_contents($UPLOAD_PATH . "/notifications.json", json_encode($_POST));
|
||||
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'])) {
|
||||
_alert(Lang::T('You do not have permission to access this page'), 'danger', "dashboard");
|
||||
}
|
||||
|
||||
$dbc = new mysqli($db_host, $db_user, $db_password, $db_name);
|
||||
@ -458,8 +702,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'])) {
|
||||
_alert(Lang::T('You do not have permission to access this page'), 'danger', "dashboard");
|
||||
}
|
||||
$tables = $_POST['tables'];
|
||||
set_time_limit(-1);
|
||||
@ -478,8 +722,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'])) {
|
||||
_alert(Lang::T('You do not have permission to access this page'), 'danger', "dashboard");
|
||||
}
|
||||
if (file_exists($_FILES['json']['tmp_name'])) {
|
||||
$suc = 0;
|
||||
@ -508,38 +752,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'])) {
|
||||
_alert(Lang::T('You do not have permission to access this page'), 'danger', "dashboard");
|
||||
}
|
||||
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:
|
||||
|
@ -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;
|
||||
|
||||
|
102
system/cron.php
102
system/cron.php
@ -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']);
|
||||
}
|
||||
}
|
||||
|
@ -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
58
system/lan/country.json
Normal 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"
|
||||
}
|
460
system/lan/english.json
Normal file
460
system/lan/english.json
Normal file
@ -0,0 +1,460 @@
|
||||
{
|
||||
"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",
|
||||
"Logout_Successful": "Logout Successful",
|
||||
"warning": "warning"
|
||||
}
|
@ -1,426 +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';
|
@ -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
384
system/lan/indonesia.json
Normal 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"
|
||||
}
|
@ -1,411 +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';
|
@ -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
380
system/lan/spanish.json
Normal 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"
|
||||
}
|
@ -1,408 +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';
|
375
system/lan/turkish.json
Normal file
375
system/lan/turkish.json
Normal 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"
|
||||
}
|
@ -1,385 +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';
|
@ -1,8 +0,0 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>403 Forbidden</title>
|
||||
</head>
|
||||
<body>
|
||||
<p>Directory access is forbidden.</p>
|
||||
</body>
|
||||
</html>
|
@ -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`;"
|
||||
]
|
||||
}
|
53
system/vendor/mpdf/mpdf/.github/CONTRIBUTING.md
vendored
53
system/vendor/mpdf/mpdf/.github/CONTRIBUTING.md
vendored
@ -1,53 +0,0 @@
|
||||
Contributing
|
||||
============
|
||||
|
||||
Issue tracker
|
||||
-------------
|
||||
|
||||
The Issue tracker serves mainly as a place to report bugs and request new features.
|
||||
Please do not abuse it as a general questions or troubleshooting location.
|
||||
|
||||
General troubleshooting
|
||||
-------------
|
||||
|
||||
For these questions please use [Discussions](https://github.com/mpdf/mpdf/discussions). Add your enquiry
|
||||
to appropriate category and as always, include a reproducible code example when applicable (see code example guidelines below).
|
||||
|
||||
You can also use the [mpdf tag](https://stackoverflow.com/questions/tagged/mpdf)
|
||||
at [Stack Overflow](https://stackoverflow.com/)
|
||||
as the StackOverflow user base is more likely to answer you in a timely manner.
|
||||
When doing so, make sure you comply to StackOverflow question guidelines.
|
||||
|
||||
Bug reports
|
||||
-------------
|
||||
|
||||
* Bug reports **MUST** contain a small example in php/html that reproduces the bug.
|
||||
* The code example **MUST** be reproducible by copy&paste assuming composer dependencies are installed. That means:
|
||||
* No calling unrelated funcions,
|
||||
* an actual final HTML code has to be present, pasting a template file is not enough,
|
||||
* if the bug considers import or fonts, example source PDF/TTF/etc files have to be included.
|
||||
* Failing to provide necessary information or not using the issue template will cause the issue to be closed until required information is provided.
|
||||
* Please report one feature or one bug per issue.
|
||||
|
||||
Feature requests
|
||||
-------------
|
||||
|
||||
Feature requests have to be labeled as such and have to include reasoning for the change in question.
|
||||
|
||||
|
||||
Pull requests
|
||||
-------------
|
||||
|
||||
Pull requests should be always based on the default [development](https://github.com/mpdf/mpdf/tree/development)
|
||||
branch except for backports to older versions.
|
||||
|
||||
Guidelines:
|
||||
|
||||
* Use an aptly named feature branch for the Pull request.
|
||||
* Only files and lines affecting the scope of the Pull request must be affected.
|
||||
* Make small, *atomic* commits that keep the smallest possible related code changes together.
|
||||
* Code must be accompanied by a unit test testing expected behaviour whenever possible.
|
||||
* To be incorporated, the PR should contain a change in the CHANGELOG.md file describing itself
|
||||
|
||||
When updating a PR, do not create a new one, just `git push --force` to your former feature branch, the PR will
|
||||
update itself.
|
1
system/vendor/mpdf/mpdf/.github/FUNDING.yml
vendored
1
system/vendor/mpdf/mpdf/.github/FUNDING.yml
vendored
@ -1 +0,0 @@
|
||||
custom: https://www.paypal.me/mpdf
|
@ -1,35 +0,0 @@
|
||||
name: Bug report 🐛
|
||||
description: The library does not work as expected
|
||||
body:
|
||||
|
||||
- type: checkboxes
|
||||
attributes:
|
||||
label: Guidelines
|
||||
description: Please confirm this is a bug report and not general troubleshooting.
|
||||
options:
|
||||
- label: I understand that [if I fail to provide all required details, this issue may be closed without review](https://github.com/mpdf/mpdf/blob/development/.github/CONTRIBUTING.md).
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Description of the bug
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: input
|
||||
attributes:
|
||||
label: mPDF version
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: input
|
||||
attributes:
|
||||
label: PHP Version and environment (server type, cli provider etc., enclosing libraries and their respective versions)
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Reproducible PHP+CSS+HTML snippet suffering by the error
|
||||
validations:
|
||||
required: true
|
@ -1,8 +0,0 @@
|
||||
name: Feature request 🚀
|
||||
description: I would like to have a new functionality added
|
||||
body:
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Please describe the new functionality as best as you can.
|
||||
validations:
|
||||
required: true
|
@ -1,8 +0,0 @@
|
||||
blank_issues_enabled: false
|
||||
contact_links:
|
||||
- name: General questions and troubleshooting ❓
|
||||
url: https://github.com/mpdf/mpdf/discussions
|
||||
about: You can use Github Discussions for general questions and troubleshooting. Please note that asking at Stack Overflow will probably be more successful.
|
||||
- name: QA at Stack Overflow ❓
|
||||
url: https://stackoverflow.com/questions/tagged/mpdf
|
||||
about: Ask at Stack Overflow for a greater chance of a quick and correct answer to your questions. Make sure to comply to SO rules, terms and conditions.
|
6
system/vendor/mpdf/mpdf/.github/SECURITY.md
vendored
6
system/vendor/mpdf/mpdf/.github/SECURITY.md
vendored
@ -1,6 +0,0 @@
|
||||
How to disclose potential security issues
|
||||
============
|
||||
|
||||
As mPDF does not have a domain or a dedicated contact apart from its Github repository, to prevent
|
||||
disclosing maintainers' contacts publicly, please create an Issue about the security issue with means to contact you.
|
||||
We will reach out to you as soon as possible.
|
@ -1,42 +0,0 @@
|
||||
# https://help.github.com/en/categories/automating-your-workflow-with-github-actions
|
||||
|
||||
name: "Code coverage"
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- "development"
|
||||
- "coverage"
|
||||
|
||||
jobs:
|
||||
|
||||
coverage:
|
||||
|
||||
name: "Code coverage"
|
||||
|
||||
runs-on: ${{ matrix.operating-system }}
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
php-version:
|
||||
- "7.4"
|
||||
|
||||
operating-system: [ubuntu-latest]
|
||||
|
||||
steps:
|
||||
- name: "Checkout"
|
||||
uses: "actions/checkout@v3"
|
||||
|
||||
- name: "Install PHP"
|
||||
uses: "shivammathur/setup-php@v2"
|
||||
with:
|
||||
coverage: "xdebug"
|
||||
php-version: "${{ matrix.php-version }}"
|
||||
extensions: "mbstring, gd, bcmath, bz2"
|
||||
tools: composer:v2
|
||||
|
||||
- name: "Install dependencies"
|
||||
run: "composer install --no-interaction --no-progress"
|
||||
|
||||
- name: "Code coverage"
|
||||
run: composer coverage
|
43
system/vendor/mpdf/mpdf/.github/workflows/cs.yml
vendored
43
system/vendor/mpdf/mpdf/.github/workflows/cs.yml
vendored
@ -1,43 +0,0 @@
|
||||
# https://help.github.com/en/categories/automating-your-workflow-with-github-actions
|
||||
|
||||
name: "Coding standard check"
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
push:
|
||||
branches:
|
||||
- "development"
|
||||
- "test"
|
||||
|
||||
jobs:
|
||||
|
||||
cs:
|
||||
|
||||
name: "Coding standard"
|
||||
|
||||
runs-on: ${{ matrix.operating-system }}
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
php-version:
|
||||
- "7.4"
|
||||
|
||||
operating-system: [ubuntu-latest]
|
||||
|
||||
steps:
|
||||
- name: "Checkout"
|
||||
uses: "actions/checkout@v3"
|
||||
|
||||
- name: "Install PHP"
|
||||
uses: "shivammathur/setup-php@v2"
|
||||
with:
|
||||
coverage: "none"
|
||||
php-version: "${{ matrix.php-version }}"
|
||||
extensions: "mbstring"
|
||||
tools: composer:v2
|
||||
|
||||
- name: "Install dependencies"
|
||||
run: "composer install --no-interaction --no-progress"
|
||||
|
||||
- name: "CS"
|
||||
run: composer cs
|
@ -1,53 +0,0 @@
|
||||
# https://help.github.com/en/categories/automating-your-workflow-with-github-actions
|
||||
|
||||
name: "CI"
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
push:
|
||||
branches:
|
||||
- "master"
|
||||
- "development"
|
||||
- "test"
|
||||
|
||||
jobs:
|
||||
|
||||
tests:
|
||||
|
||||
name: "Tests"
|
||||
|
||||
runs-on: ${{ matrix.operating-system }}
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
php-version:
|
||||
- "5.6"
|
||||
- "7.0"
|
||||
- "7.1"
|
||||
- "7.2"
|
||||
- "7.3"
|
||||
- "7.4"
|
||||
- "8.0"
|
||||
- "8.1"
|
||||
- "8.2"
|
||||
operating-system: [ubuntu-latest, windows-latest]
|
||||
|
||||
steps:
|
||||
- name: "Checkout"
|
||||
uses: "actions/checkout@v3"
|
||||
|
||||
- name: "Install PHP"
|
||||
uses: "shivammathur/setup-php@v2"
|
||||
with:
|
||||
coverage: "none"
|
||||
php-version: "${{ matrix.php-version }}"
|
||||
extensions: "mbstring, gd, bcmath, bz2"
|
||||
tools: composer:v2
|
||||
ini-values: error_reporting=-1
|
||||
|
||||
- name: "Install dependencies"
|
||||
run: "composer install --no-interaction --no-progress"
|
||||
|
||||
- name: "Tests"
|
||||
run: composer test
|
2
system/vendor/mpdf/mpdf/.gitignore
vendored
2
system/vendor/mpdf/mpdf/.gitignore
vendored
@ -1,2 +0,0 @@
|
||||
vendor/*
|
||||
composer.lock
|
786
system/vendor/mpdf/mpdf/CHANGELOG.md
vendored
786
system/vendor/mpdf/mpdf/CHANGELOG.md
vendored
@ -1,786 +0,0 @@
|
||||
mPDF 8.1.x
|
||||
===========================
|
||||
|
||||
New features
|
||||
------------
|
||||
|
||||
* Service container for internal services
|
||||
* Set /Lang entry for better accessibility when document language is available (@cuongmits, #1418)
|
||||
* More verbose helper methods for `Output`: `OutputBinaryData`, `OutputHttpInline`, `OutputHttpDownload`, `OutputFile` (since v8.1.2)
|
||||
* Set font-size to `auto` in textarea and input in active forms to resize the font-size (@ChrisB9, #1721)
|
||||
* PHP 8.2 support in mPDF 8.1.3
|
||||
* Added support for `psr/log` v3 without dropping v2. (@markdorison, @apotek, @greg-1-anderson, #1857)
|
||||
|
||||
Bugfixes
|
||||
--------
|
||||
|
||||
* Better exception message about fonts with MarkGlyphSets (Fix for #1408)
|
||||
* Updated Garuda font with fixed "k" character (Fix for #1440)
|
||||
* Testing and suppressing PNG file conversion errors
|
||||
* Prevent hyphenation of urls starting with https and e-mail addresses (@HKandulla, #1634)
|
||||
* Colorspace restrictor reads mode from Mpdf and works again (Fix for #1094)
|
||||
* Prevent exception when multiple columns wrap to next page
|
||||
* Update default `curlUserAgent` configuration variable from Firefox 13 to 108
|
||||
|
||||
mPDF 8.0.x
|
||||
===========================
|
||||
|
||||
* Ability to customize User-Agent header in the HTTP requests sent by cURL (@samuelecat, #1229)
|
||||
* Add Page Number Myanmar Language Support (@MinKyawNyunt, #1201)
|
||||
* new `Mpdf\Exception\FontException` extending base `MpdfException` was introduced and is thrown on Font manipulation
|
||||
* A bit cleaner exception messages for font-related errors
|
||||
* Use atomic cache writing. (@PATROMO, #1186)
|
||||
* Fix: "Undefined index: group" when calling MultiCell when using font without OTL data (@Kekos, #1213, #941)
|
||||
* Add C128RAW barcode type to create any barcode (ex: subtype change in middle of barcode) (#1124)
|
||||
* Add proxy support to curl
|
||||
* Fixed date and time format in the informations dictionary (#1083, @peterdevpl)
|
||||
* Checking allowed stream wrappers in CssManager
|
||||
* PHP 7.4 support (until final 7.4 release with composer --ignore-platform-reqs)
|
||||
* Improve debugging of remote content issues (@ribeirobreno)
|
||||
* Added `exposeVersion` configuration variable allowing to hide mPDF version from Producer tag and HTTP headers
|
||||
* Added the check for JPEG SOF header 0xFF 0xC1 (extended) (@jamiejones85)
|
||||
* Allows setting `none` as zoom mode in `SetDisplayMode` method, so that OpenAction is not written (#602)
|
||||
* Allowed image stream whitelist to be customised (#1005, thanks @jakejackson)
|
||||
* Fixed parsing of top-left-bottom-right CSS rules with !important (#1009)
|
||||
* Fixed skipping ordered list numbering with page-break-inside: avoid (#339)
|
||||
* Compound classes selector support, like `.one.two` or `div.message.special` (#538, @peterdevpl)
|
||||
* Fixed CMYK colors in text-shadow (#1115, @lexilya)
|
||||
* Skip non supported wrappers when resolving paths (#1204, @MarkVaughn)
|
||||
* Fixed SVGs using a style tag, has styles ignored ( Requires ext-dom ) (#450, @antman3351)
|
||||
* Allows `{nb}`, `{nbpg}`, `{PAGENO}` and `{DATE ...}` substitution in body (#172 and #267, @Dasc3er)
|
||||
* Cache now creates a dedicated subdirectory `/mpdf`.
|
||||
* It is possible to disable automatic cache cleanup with `cacheCleanupInterval` config variable
|
||||
* PHP 8.0 is supported since 8.0.10 (#1263)
|
||||
* Fix: First header of named page is added twice (@antman3351, #1320)
|
||||
* Added `curlExecutionTimeout` configuration variable allowing to `CURLOPT_TIMEOUT` when fetching remote content
|
||||
* Fix: Not all combinations were generated for more than three compound classes (@JeppeKnockaert)
|
||||
* Added `quiet_zone_left` and `quiet_zone_right` to barcodes which support quiet zones in order to customize its width
|
||||
* Updated `CssManager` to use the `RemoteContentFetcher` class instead of `curl` natively (@greew)
|
||||
* Added optional `continue2pages` parameter to `SetDocTemplate` method, allowing a template to continue the last 2 pages alternately (@bmg-ruudv)
|
||||
* Ensure that all digits of a string are hexadecimal before decoding in ColorConverter (@derklaro)
|
||||
* Fix: Using mpdf in phar package leads to weird errors (#1504, @sandreas)
|
||||
* WEBP images support (#1525)
|
||||
|
||||
|
||||
mPDF 8.0.0
|
||||
===========================
|
||||
|
||||
### 15/03/2019
|
||||
|
||||
* Updated FPDI dependency to version 2 (thanks a lot, @JanSlabon)
|
||||
- removed `SetImportUse` method
|
||||
- case of `ImportPage` method changed to `importPage`
|
||||
- similarly, case of `setSourceFile` and `useTemplate` was changed to a lowercase first letter.
|
||||
- signature of `importPage` changed
|
||||
- returned value of `useTemplate` changed
|
||||
* Moved QRCode generating code portions to external package _mpdf/qrcode_
|
||||
- This reduced package size considerably (ca 6MB)
|
||||
* Fraction sizes without leading zeros allowed for font sizes (#973, thanks @peterdevpl)
|
||||
* WriteHTML is now strict about used `$mode` parameter (#915, thanks, @tomtomau)
|
||||
* Fixed regression in nested tables (#860, thanks, @machour)
|
||||
* Scientific notation handling in CSS font sizes (#753, thanks, @peterdevpl)
|
||||
|
||||
|
||||
mPDF 7.1.x
|
||||
===========================
|
||||
|
||||
* PHAR security issue fixed (thanks, @jakejackson)
|
||||
* Font temporary data saved as JSON instead of generating PHP files (thanks, @jakejackson)
|
||||
* cURL handling enhancements (thanks, @jakejackson)
|
||||
* SVG parsing fixes (thanks, @achretien)
|
||||
* Write PDF content with *Writer service classes
|
||||
* PHP 7.3 is supported
|
||||
* Added myclabs/deepcopy dependency, fixed TOC page numbering (thanks, @jakejackson)
|
||||
* Custom color for QR codes
|
||||
* Added support for orientation config key
|
||||
* Code and tests cleanups and enhancements
|
||||
- PHPUnit dedicated assertions (thanks, @carusogabriel)
|
||||
- WriteHTML part constants (thanks, @tomtomau)
|
||||
- Various notice fixes (kudos to all respective authors)
|
||||
|
||||
mPDF 7.0.x
|
||||
===========================
|
||||
|
||||
* Allow passing file content or file path to `SetAssociatedFiles` (#558)
|
||||
* Allowed ^1.4 and ^2.0 of paragon/random_compat to allow wider usage
|
||||
* Fix of undefined _getImage function (#539)
|
||||
* Code cleanup
|
||||
* Better writable rights for temp dir validation (#534)
|
||||
* Fix displaying dollar character in footer with core fonts (#520)
|
||||
* Fixed missed code2utf call (#531)
|
||||
* Refactored and cleaned-up classes and subnamespaces
|
||||
|
||||
|
||||
mPDF 7.0.0
|
||||
===========================
|
||||
|
||||
### 19/10/2017
|
||||
|
||||
Backward incompatible changes
|
||||
-----------------------------
|
||||
|
||||
- PHP `^5.6 || ~7.0.0 || ~7.1.0 || ~7.2.0` is required.
|
||||
- Entire project moved under `Mpdf` namespace
|
||||
- Practically all classes renamed to use `PascalCase` and named to be more verbose
|
||||
- Changed directory structure to comply to `PSR-4`
|
||||
- Removed explicit require calls, replaced with Composer autoloading
|
||||
- Removed configuration files
|
||||
- All configuration now done via `__construct` parameter (see below)
|
||||
- Changed `\Mpdf\Mpdf` constructor signature
|
||||
- Class now accepts only single array `$config` parameter
|
||||
- Array keys are former `config.php` and `config_fonts.php` properties
|
||||
- Additionally, former constructor parameters can be used as keys
|
||||
- `tempDir` directory now must be writable, otherwise an exception is thrown
|
||||
- ICC profile is loaded as entire path to file (to prevent a need to write inside vendor directory)
|
||||
- Moved examples to separate repository
|
||||
- Moved `TextVars` constants to separate class
|
||||
- Moved border constants to separate class
|
||||
- `scriptToLang` and `langToFont` in separate interfaced class methods
|
||||
- Will now throw an exception when `mbstring.func_overload` is set
|
||||
- Moved Glyph operator `GF_` constants in separate `\Mpdf\Fonts\GlyphOperator` class
|
||||
- All methods in Barcode class renamed to camelCase including public `dec_to_hex` and `hex_to_dec`
|
||||
- Decimal conversion methods (to roman, cjk, etc.) were moved to classes in `\Mpdf\Conversion` namespace
|
||||
- Images in PHP variables (`<img src="var:smileyface">`) were moved from direct Mpdf properties to `Mpdf::$imageVars` public property array
|
||||
- Removed global `_SVG_AUTOFONT` and `_SVG_CLASSES` constants in favor of `svgAutoFont` and `svgClasses` configuration keys
|
||||
- Moved global `_testIntersect`, `_testIntersectCircle` and `calc_bezier_bbox` fucntions inside `Svg` class as private methods.
|
||||
- Changed names to camelCase without underscores and to `computeBezierBoundingBox`
|
||||
- Security: Embedded files via `<annotation>` custom tag must be explicitly allowed via `allowAnnotationFiles` configuration key
|
||||
- `fontDir` property of Mpdf class is private and must be accessed via configuration variable with array of paths or `AddFontDirectory` method
|
||||
- QR code `<barcode>` element now treats `\r\n` and `\n` as actual line breaks
|
||||
- cURL is prefered over socket when downloading images.
|
||||
- Removed globally defined functions from `functions.php` in favor of `\Mpdf\Utils` classes `PdfDate` and `UtfString`.
|
||||
- Unused global functions were removed entirely.
|
||||
|
||||
|
||||
Removed features
|
||||
----------------
|
||||
|
||||
- Progressbar support
|
||||
- JpGraph support
|
||||
- `error_reporting` changes
|
||||
- Timezone changes
|
||||
- `compress.php` utility
|
||||
- `_MPDF_PATH` and `_MPDF_URI` constants
|
||||
- `_MPDF_TEMP_PATH` constant in favor of `tempDir` configuration variable
|
||||
- `_MPDF_TTFONTDATAPATH` in favor of `tempDir` configuration variable
|
||||
- `_MPDFK` constant in favor of `\Mpdf\Mpdf::SCALE` class constant
|
||||
- `FONT_DESCRIPTOR` constant in favor of `fontDescriptor` configuration variable
|
||||
- `_MPDF_SYSTEM_TTFONTS` constant in favor of `fontDir` configuration variable with array of paths or `AddFontDirectory` method
|
||||
- HTML output of error messages and debugs
|
||||
- Formerly deprecated methods
|
||||
|
||||
|
||||
Fixes and code enhancements
|
||||
----------------------------
|
||||
|
||||
- Fixed joining arab letters
|
||||
- Fixed redeclared `unicode_hex` function
|
||||
- Converted arrays to short syntax
|
||||
- Refactored and tested color handling with potential conversion fixes in `hsl*()` color definitions
|
||||
- Refactored `Barcode` class with separate class in `Mpdf\Barcode` namespace for each barcode type
|
||||
- Fixed colsum calculation for different locales (by @flow-control in #491)
|
||||
- Image type guessing from content separated to its own class
|
||||
|
||||
|
||||
New features
|
||||
------------
|
||||
|
||||
- Refactored caching (custom `Cache` and `FontCache` classes)
|
||||
- Implemented `Psr\Log\LoggerAware` interface
|
||||
- All debug and additional messages are now sent to the logger
|
||||
- Messages can be filtered based on `\Mpdf\Log\Context` class constants
|
||||
- `FontFileFinder` class allowing to specify multiple paths to search for fonts
|
||||
- `MpdfException` now extends `ErrorException` to allow specifying place in code where error occured
|
||||
- Generating font metrics moved to separate class
|
||||
- Added `\Mpdf\Output\Destination` class with verbose output destination constants
|
||||
- Availability to set custom default CSS file
|
||||
- Availability to set custom hyphenation dictionary file
|
||||
- Refactored code portions to new "separate" classes:
|
||||
- `Mpdf\Color\*` classes
|
||||
- `ColorConvertor`
|
||||
- `ColorModeConvertor`
|
||||
- `ColorSpaceRestrictor`
|
||||
- `Mpdf\SizeConvertor`
|
||||
- `Mpdf\Hyphenator`
|
||||
- `Mpdf\Image\ImageProcessor`
|
||||
- `Mpdf\Image\ImageTypeGuesser`
|
||||
- `Mpdf\Conversion\*` classes
|
||||
- Custom watermark angle with `watermarkAngle` configuration variable
|
||||
- Custom document properties (idea by @zarubik in #142)
|
||||
- PDF/A-3 associated files + additional xmp rdf (by @chab in #130)
|
||||
- Additional font directories can be added via `addFontDir` method
|
||||
- Introduced `cleanup` method which restores original `mb_` encoding settings (see #421)
|
||||
- QR code `<barcode>` element now treats `\r\n` and `\n` as actual line breaks
|
||||
- Customizable following of 3xx HTTP redirects, validation of SSL certificates, cURL timeout.
|
||||
- `curlFollowLocation`
|
||||
- `curlAllowUnsafeSslRequests`
|
||||
- `curlTimeout`
|
||||
- QR codes can be generated without a border using `disableborder="1"` HTML attribute in `<barcode>` tag
|
||||
|
||||
|
||||
Git repository enhancements
|
||||
---------------------------
|
||||
|
||||
- Added contributing guidelines
|
||||
- Added Issue template
|
||||
|
||||
|
||||
mPDF 6.1.0
|
||||
===========================
|
||||
|
||||
### 26/04/2016
|
||||
|
||||
- Composer updates
|
||||
- First release officially supporting Composer
|
||||
- Updated license in composer.json
|
||||
- Chmod 777 on dirs `ttfontdata`, `tmp`, `graph_cache` after composer install
|
||||
- Requiring PHP 5.4.0+ with Composer
|
||||
- Code style
|
||||
- Reformated (almost) all PHP files to keep basic code style
|
||||
- Removed trailing whitespaces
|
||||
- Converted all txt, php, css, and htm files to utf8
|
||||
- Removed closing PHP tags
|
||||
- Change all else if calls to elseif
|
||||
- Added base PHPUnit tests
|
||||
- Added Travis CI integration with unit tests
|
||||
- Changed all `mPDF::Error` and `die()` calls to throwing `MpdfException`
|
||||
- PDF Import changes
|
||||
- FPDI updated to 1.6.0 to fix incompatible licenses
|
||||
- FPDI loaded from Composer or manually only
|
||||
- Removed iccprofiles/CMYK directory
|
||||
- Renamed example files: change spaces to underscores to make scripting easier
|
||||
- Fixed `LEDGER` and `TABLOID` paper sizes
|
||||
- Implemented static cache for mpdf function `ConvertColor`.
|
||||
- Removed PHP4 style constructors
|
||||
- Work with HTML tags separated to `Tag` class
|
||||
- Fixed most Strict standards PHP errors
|
||||
- Add config constant so we can define custom font data
|
||||
- HTML
|
||||
- fax & tel support in href attribute
|
||||
- Check $html in `$mpdf->WriteHTML()` to see if it is an integer, float, string, boolean or
|
||||
a class with `__toString()` and cast to a string, otherwise throw exception.
|
||||
- PHP 7
|
||||
- Fix getting image from internal variable in PHP7 (4dcc2b4)
|
||||
- Fix PHP7 Fatal error: `'break' not in the 'loop' or 'switch' context` (002bb8a)
|
||||
- Fixed output file name for `D` and `I` output modes (issue #105, f297546)
|
||||
|
||||
mPDF 6.0
|
||||
===========================
|
||||
|
||||
### 20/12/2014
|
||||
|
||||
New features / Improvements
|
||||
---------------------------
|
||||
- Support for OpenTypeLayout tables / features for complex scripts and Advances Typography.
|
||||
- Improved bidirectional text handling.
|
||||
- Improved line-breaking, including for complex scripts e.g. Lao, Thai and Khmer.
|
||||
- Updated page-breaking options.
|
||||
- Automatic language mark-up and font selection using autoScriptToLang and autoLangToFont.
|
||||
- Kashida for text-justification in arabic scripts.
|
||||
- Index collation for non-ASCII characters.
|
||||
- Index mark-up allowing control over layout using CSS.
|
||||
- `{PAGENO}` and `{nbpg}` can use any of the number types as in list-style e.g. set in `<pagebreak>` using pagenumstyle.
|
||||
- CSS support for lists.
|
||||
- Default stylesheet - `mpdf.css` - updated.
|
||||
|
||||
Added CSS support
|
||||
-----------------
|
||||
- lang attribute selector e.g. :lang(fr), [lang="fr"]
|
||||
- font-variant-position
|
||||
- font-variant-caps
|
||||
- font-variant-ligatures
|
||||
- font-variant-numeric
|
||||
- font-variant-alternates - Only [normal | historical-forms] supported (i.e. most are NOT supported)
|
||||
- font-variant - as above, and except for: east-asian-variant-values, east-asian-width-values, ruby
|
||||
- font-language-override
|
||||
- font-feature-settings
|
||||
- text-outline is now supported on TD/TH tags
|
||||
- hebrew, khmer, cambodian, lao, and cjk-decimal recognised as values for "list-style-type" in numbered lists and page numbering.
|
||||
- list-style-image and list-style-position
|
||||
- transform (on `<img>` only)
|
||||
- text-decoration:overline
|
||||
- image-rendering
|
||||
- unicode-bidi (also `<bdi>` tag)
|
||||
- vertical-align can use lengths e.g. 0.5em
|
||||
- line-stacking-strategy
|
||||
- line-stacking-shift
|
||||
|
||||
mPDF 5.7.4
|
||||
================
|
||||
|
||||
### 15/12/2014
|
||||
|
||||
Bug Fixes & Minor Additions
|
||||
---------------------------
|
||||
- SVG images now support embedded images e.g. `<image xlink:href="image.png" width="100px" height="100px" />`
|
||||
- SVG images now supports `<tspan>` element e.g. `<tspan x,y,dx,dy,text-anchor >`, and also `<tref>`
|
||||
- SVG images now can use Autofont (see top of `classes/svg.php` file)
|
||||
- SVG images now has limited support for CSS classes (see top of `classes/svg.php` file)
|
||||
- SVG images - style inheritance improved
|
||||
- SVG images - improved handling of comments and other extraneous code
|
||||
- SVG images - fix to ensure opacity is reset before another element
|
||||
- SVG images - font-size not resetting after a `<text>` element
|
||||
- SVG radial gradients bug (if the focus [fx,fy] lies outside circle defined by [cx,cy] and r) cf. pservers-grad-15-b.svg
|
||||
- SVG allows spaces in attribute definitions in `<use>` or `<defs>` e.g. `<use x = "0" y = "0" xlink:href = "#s3" />`
|
||||
- SVG text which contains a `<` sign, it will break the text - now processed as `<` (despite the fact that this does not conform to XML spec)
|
||||
- SVG images - support automatic font selection and (minimal) use of CSS classes - cf. the defined constants at top of svg.php file
|
||||
- SVG images - text-anchor now supported as a CSS style, as well as an HTML attribute
|
||||
- CSS support for :nth-child() selector improved to fully support the draft CSS3 spec - http://www.w3.org/TR/selectors/#nth-child-pseudo
|
||||
[NB only works on table columns or rows]
|
||||
- text-indent when set as "em" - incorrectly calculated if last text in line in different font size than for block
|
||||
- CSS not applying cascaded styles on `<A>` elements - [changed MergeCSS() type to INLINE for 'A', LEGEND, METER and PROGRESS]
|
||||
- fix for underline/strikethrough/overline so that line position(s) are based correctly on font-size/font in nested situations
|
||||
- Error: Strict warning: Only variables should be passed by reference - in PHP5.5.9
|
||||
- bug accessing images from some servers (HTTP 403 Forbidden whn accessed using fopen etc.)
|
||||
- Setting page format incorrectly set default twice and missed some options
|
||||
- bug fixed in Overwrite() when specifying replacement as a string
|
||||
- barcode C93 - updated C93 code from TCPDF because of bug - incorrect checksum character for "153-2-4"
|
||||
- Tables - bug when using colspan across columns which may have a cell width specified
|
||||
cf. http://www.mpdf1.com/forum/discussion/2221/colspan-bug
|
||||
- Tables - cell height (when specified) is not resized when table is shrunk
|
||||
- Tables - if table width specified, but narrower than minimum cell wdith, and less than page width - table will expand to
|
||||
minimum cell width(s) as long as $keep_table_proportions = true
|
||||
- Tables - if using packTableData, and borders-collapse, wider border is overwriting content of adjacent cell
|
||||
Test case:
|
||||
```
|
||||
<table style="border-collapse: collapse;">
|
||||
<tr><td style="border-bottom: 42px solid #0FF; "> Hallo world </td></tr>
|
||||
<tr><td style="border-top: 14px solid #0F0; "> Hallo world </td></tr>
|
||||
</table>
|
||||
```
|
||||
- Images - image height is reset proportional to original if width is set to maximum e.g. `<img width="100%" height="20mm">`
|
||||
- URL handling changed to work with special characters in path fragments; affects `<a>` links, `<img>` images and
|
||||
CSS url() e.g background-image
|
||||
- also to ignore `../` included as a query value
|
||||
- Barcodes with bottom numerals e.g. EAN-13 - incorrect numeral size when using core fonts
|
||||
|
||||
--------------------------------
|
||||
|
||||
NB Spec. for embedded SVG images:
|
||||
as per http://www.w3.org/TR/2003/REC-SVG11-20030114/struct.html#ImageElement
|
||||
Attributes supported:
|
||||
- x
|
||||
- y
|
||||
- xlink:href (required) - can be jpeg, png or gif image - not vector (SVG or WMF) image
|
||||
- width (required)
|
||||
- height (required)
|
||||
- preserveAspectRatio
|
||||
|
||||
Note: all attribute names and values are case-sensitive
|
||||
width and height cannot be assigned by CSS - must be attributes
|
||||
|
||||
mPDF 5.7.3
|
||||
================
|
||||
|
||||
### 24/8/2014
|
||||
|
||||
Bug Fixes & Minor Additions
|
||||
---------------------------
|
||||
|
||||
- Tables - cellSpacing and cellPadding taking preference over CSS stylesheet
|
||||
- Tables - background images in table inside HTML Footer incorrectly positioned
|
||||
- Tables - cell in a nested table with a specified width, should determine width of parent table cell
|
||||
(cf. http://www.mpdf1.com/forum/discussion/1648/nested-table-bug-)
|
||||
- Tables - colspan (on a row after first row) exceeds number of columns in table
|
||||
- Gradients in Imported documents (mPDFI) causing error in some browsers
|
||||
- Fatal error after page-break-after:always on root level block element
|
||||
- Support for 'https/SSL' if file_get_contents_by_socket required (e.g. getting images with allow_url_fopen turned off)
|
||||
- Improved support for specified ports when getting external CSS stylesheets e.g. www.domain.com:80
|
||||
- error accessing local .css files with dummy queries (cache-busting) e.g. mpdfstyleA4.css?v=2.0.18.9
|
||||
- start of end tag in PRE incorrectly changed to <
|
||||
- error thrown when open.basedir restriction in effect (deleting temporary files)
|
||||
- image which forces pagebreak incorrectly positioned at top of page
|
||||
- [changes to avoid warning notices by checking if (isset(x)) before referencing it]
|
||||
- text with letter-spacing set inside table which needs to be resixed (shrunk) - letter-spacing was not adjusted
|
||||
- nested table incorrectly calculating width and unnecessarily wrapping text
|
||||
- vertical-align:super|sub can be nested using `<span>` elements
|
||||
- inline elements can be nested e.g. text `<sup>text<sup>13</sup>text</sup>` text
|
||||
- CSS vertical-align:0.5em (or %) now supported
|
||||
- underline and strikethrough now use the parent inline block baseline/fontsize/color for child inline elements *** change in behaviour
|
||||
(Adjusts line height to take account of superscript and subscript except in tables)
|
||||
- nested table incorrectly calculating width and unnecessarily wrapping text
|
||||
- tables - font size carrying over from one nested table to the next nested table
|
||||
- tables - border set as attribute on `<TABLE>` overrides border set as CSS on `<TD>`
|
||||
- tables - if table width set to 100% and one cell/column is empty with no padding/border, sizing incorrectly
|
||||
(http://www.mpdf1.com/forum/discussion/1886/td-fontsize-in-nested-table-bug-#Item_5)
|
||||
- `<main>` added as recognised tag
|
||||
- CSS style transform supported on `<img>` element (only)
|
||||
All transform functions are supported except matrix() i.e. translate(), translateX(), translateY(), skew(), skewX(), skewY(),
|
||||
scale(), scaleX(), scaleY(), rotate()
|
||||
NB When using Columns or Keep-with-table (use_kwt), cannot use transform
|
||||
- CSS background-color now supported on `<img>` element
|
||||
- @page :first not recognised unless @page {} has styles set
|
||||
- left/right margins not allowed on @page :first
|
||||
|
||||
mPDF 5.7.2
|
||||
================
|
||||
|
||||
### 28/12/2013
|
||||
|
||||
Bug Fixes
|
||||
---------
|
||||
|
||||
- `<tfoot>` not printing at all (since v5.7)
|
||||
- list-style incorrectly overriding list-style-type in cascading CSS
|
||||
- page-break-after:avoid not taking into account bottom padding and margin when estimating if next line can fit on page
|
||||
- images not displayed when using "https://" if images are referenced by src="//domain.com/image"
|
||||
- +aCJK incorrectly parsed when instantiating class e.g. new mpDF('ja+aCJK')
|
||||
- line-breaking - zero-width object at end of line (e.g. index entry) causing a space left untrimmed at end of line
|
||||
- ToC since v5.7 incorrectly handling non-ascii characters, entities or tags
|
||||
- cell height miscalculated when using hard-hyphenate
|
||||
- border colors set with transparency not working
|
||||
- transparency settings for stroke and fill interfering with one another
|
||||
- 'float' inside a HTML header/footer - not clearing the float before first line of text
|
||||
- error if script run across date change at midnight
|
||||
- temporary file name collisions (e.g. when processing images) if numerous users
|
||||
- `<watermarkimage>` position attribute not working
|
||||
- `<` (less-than sign) inside a PRE element, and NOT start of a valid tag, was incorrectly removed
|
||||
- file attachments not opening in Reader XI
|
||||
- JPG images not recognised if not containing JFIF or Exif markers
|
||||
- instance of preg_replace with /e modifier causing error in PHP 5.5
|
||||
- correctly handle CSS URLs with no scheme
|
||||
- Index entries causing errors when repeat entries are used within page-break-inside:avoid, rotated tables etc.
|
||||
- table with fixed width column and long word in cell set to colspan across this column (adding spare width to all columns)
|
||||
- incorrect hyphenation if multiple soft-hyphens on line before break
|
||||
- SVG images - objects contained in `<defs>` being displayed
|
||||
- SVG images - multiple, or quoted fonts e.g. style="font-family:'lucida grande', verdana" not recognised
|
||||
- SVG images - line with opacity=0 still visible (only in some PDF viewers/browsers)
|
||||
- text in an SVG image displaying with incorrect font in some PDF viewers/browsers
|
||||
- SVG images - fill:RGB(0,0,0) not recognised when uppercase
|
||||
- background images using data:image\/(jpeg|gif|png);base64 format - error when reading in stylesheet
|
||||
|
||||
New CSS support
|
||||
---------------
|
||||
|
||||
- added support for style="opacity:0.6;" in SVG images - previously only supported style="fill-opacity:0.6; stroke-opacity: 0.6;"
|
||||
- improved PNG image handling for some cases of alpha channel transparency
|
||||
- khmer, cambodian and lao recognised as list-style-type for numbered lists
|
||||
|
||||
SVG Images
|
||||
----------
|
||||
|
||||
- Limited support for `<use>` and `<defs>`
|
||||
|
||||
mPDF 5.7.1
|
||||
================
|
||||
## 01/09/2013
|
||||
|
||||
1) FILES: mpdf.php
|
||||
|
||||
Bug fix; Dollar sign enclosed by `<pre>` tag causing error.
|
||||
Test e.g.: `<pre>Test $1.00 Test</pre> <pre>Test $2.00 Test</pre> <pre>Test $3.00 Test</pre> <pre>Test $4.00 Test</pre>`
|
||||
|
||||
-----------------------------
|
||||
|
||||
2) FILES: includes/functions.php AND mpdf.php
|
||||
|
||||
Changes to `preg_replace` with `/e` modifier to use `preg_replace_callback`
|
||||
(/e depracated from PHP 5.5)
|
||||
|
||||
-----------------------------
|
||||
|
||||
3) FILES: classes/barcode.php
|
||||
|
||||
Small change to function `barcode_c128()` which allows ASCII 0 - 31 to be used in C128A e.g. chr(13) in:
|
||||
`<barcode code="5432
1068" type="C128A" />`
|
||||
|
||||
-----------------------------
|
||||
|
||||
4) FILES: mpdf.php
|
||||
|
||||
Using $use_kwt ("keep-[heading]-with-table") if `<h4></h4>` before table is on 2 lines and pagebreak occurs after first line
|
||||
the first line is displayed at the bottom of the 2nd page.
|
||||
Edited so that $use_kwt only works if the HEADING is only one line. Else ignores (but prints correctly)
|
||||
|
||||
-----------------------------
|
||||
|
||||
5) FILES: mpdf.php
|
||||
|
||||
Clearing old temporary files from `_MPDF_TEMP_PATH` will now ignore "hidden" files e.g. starting with a "`.`" `.htaccess`, `.gitignore` etc.
|
||||
and also leave `dummy.txt` alone
|
||||
|
||||
|
||||
mPDF 5.7
|
||||
===========================
|
||||
|
||||
### 14/07/2013
|
||||
|
||||
Files changed
|
||||
-------------
|
||||
- config.php
|
||||
- mpdf.php
|
||||
- classes/tocontents.php
|
||||
- classes/cssmgr.php
|
||||
- classes/svg.php
|
||||
- includes/functions.php
|
||||
- includes/out.php
|
||||
- examples/formsubmit.php [Important - Security update]
|
||||
|
||||
Updated Example Files in /examples/
|
||||
-----------------------------------
|
||||
|
||||
- All example files
|
||||
- mpdfstyleA4.css
|
||||
|
||||
config.php
|
||||
----------
|
||||
|
||||
Removed:
|
||||
- $this->hyphenateTables
|
||||
- $this->hyphenate
|
||||
- $this->orphansAllowed
|
||||
Edited:
|
||||
- "hyphens: manual" - Added to $this->defaultCSS
|
||||
- $this->allowedCSStags now includes '|TEXTCIRCLE|DOTTAB'
|
||||
New:
|
||||
- $this->decimal_align = array('DP'=>'.', 'DC'=>',', 'DM'=>"\xc2\xb7", 'DA'=>"\xd9\xab", 'DD'=>'-');
|
||||
- $this->h2toc = array('H1'=>0, 'H2'=>1, 'H3'=>2);
|
||||
- $this->h2bookmarks = array('H1'=>0, 'H2'=>1, 'H3'=>2);
|
||||
- $this->CJKforceend = false; // Forces overflowng punctuation to hang outside right margin (used with CJK script)
|
||||
|
||||
|
||||
Backwards compatability
|
||||
-----------------------
|
||||
|
||||
Changes in mPDF 5.7 may cause some changes to the way your documents appear. There are two main differences:
|
||||
1) Hyphenation. To retain appearance compatible with earlier versions, set the CSS property "hyphens: auto" whenever
|
||||
you previously used $mpdf->hyphenate=true;
|
||||
2) Table of Contents - appearance can now be controlled with CSS styles. By default, in mPDF 5.7, no styling is applied so you will get:
|
||||
- No indent (previous default of 5mm) - ($tocindent is ignored)
|
||||
- Any font, font-size set ($tocfont or $tocfontsize) will not work
|
||||
- HyperLinks will appear with your default appearance - usually blue and underlined
|
||||
- line spacing will be narrower (can use line-height or margin-top in CSS)
|
||||
|
||||
New features / Improvements
|
||||
---------------------------
|
||||
- Layout of Table of Content ToC now controlled using CSS styles
|
||||
- Text alignment on decimal mark inside tables
|
||||
- Automatically generated bookmarks and/or ToC entries from H1 - H6 tags
|
||||
- Support for unit of "rem" as size e.g. font-size: 1rem;
|
||||
- Origin and clipping for background images and gradients controlled by CSS i.e. background-origin, background-size, background-clip
|
||||
- Text-outline controlled by CSS (compatible with CSS3 spec.)
|
||||
- Use of `<dottab>` enhanced by custom CSS "outdent" property
|
||||
- Image HTML attributes `<img>` added: max-height, max-width, min-height and min-width
|
||||
- Spotcolor can now be defined as it is used e.g. color: spot(PANTONE 534 EC, 100%, 85, 65, 47, 9);
|
||||
- Lists - added support for "start" attribute in `<ol>` e.g. `<ol start="5">`
|
||||
- Hyphenation controlled using CSS, consistent with CSS3 spec.
|
||||
- Line breaking improved to avoid breaks within words where HTML tags are used e.g. H<sub>2<sub>0
|
||||
- Line breaking in CJK scripts improved (and ability to force hanging punctuation)
|
||||
- Numerals in a CJK script are kept together
|
||||
- RTL improved support for phrases containing numerals and \ and /
|
||||
- Bidi override codes supported - Right-to-Left Embedding [RLE] U+202B, Left-to-Right Embedding [LRE] U+202A,
|
||||
U+202C POP DIRECTIONAL FORMATTING (PDF)
|
||||
- Support for `<base href="">` in HTML - uses it to SetBasePath for relative URLs.
|
||||
- HTML tag - added support for `<wbr>` or `<wbr />` - converted to a soft-hyphen
|
||||
- CSS now takes precedence over HTML attribute e.g. `<table bgcolor="black" style="background-color:yellow">`
|
||||
|
||||
Added CSS support
|
||||
-----------------
|
||||
- max-height, max-width, min-height and min-width for images `<img>`
|
||||
- "hyphens: none|manual|auto" as per CSS3 spec.
|
||||
- Decimal mark alignment e.g. text-align: "." center;
|
||||
- "rem" accepted as a valid (font)size in CSS e.g. font-size: 1.5rem
|
||||
- text-outline, text-outline-width and text-outline-color supported everywhere except in tables (blur not supported)
|
||||
- background-origin, background-size, background-clip are now supported everywhere except in tables
|
||||
- "visibility: hidden|visible|printonly|screenonly" for inline elements e.g. `<span>`
|
||||
- Colors: device-cmyk(c,m,y,k) as per CSS3 spec. For consistency, device-cmyka also supported (not CSS3 spec)
|
||||
- "z-index" can be used to utilise layers in the PDF document
|
||||
- Custom CSS property added: "outdent" - opposite of indent
|
||||
|
||||
The HTML elements `<dottab>` and `<textcircle>` can now have CSS properties applied to them.
|
||||
|
||||
Bug fixes
|
||||
---------
|
||||
- SVG images - path including e.g. 1.234E-15 incorrectly parsed (not recognising capital E)
|
||||
- Tables - if a table starts when the Y position on page is below bottom margin caused endless loop
|
||||
- Float-ing DIVs - starting a float at bottom of page and it causes page break before anything output, second new page is forced
|
||||
- Tables - Warning notice now given in Table footer or header if `<tfoot>` placed after `<tbody>` and table spans page
|
||||
- Columns - block with border-width wider than the length of the border line, line overflows
|
||||
- Columns - block with no padding containing a block with borders but no backgound colour, borders not printed
|
||||
- Table in Columns - when background color set by surrounding block element - colour missing for height of half bottom border.
|
||||
- TOCpagebreakByArray() when called by function was not adding the pagebreak
|
||||
- Border around block element - dashed not showing correctly (not resetting linewidth between different edges)
|
||||
- Double border in table - when background colour set in surrounding block element - shows as black line between the 2 bits of double
|
||||
- Borders around DIVs - "double" border problem if not all 4 sides equally - fixed
|
||||
- Borders around DIVs - solid (and double) borders overlap as in tables - now fixed so mitred joins as in browser
|
||||
[Inadvertently improves borders in Columns because of change in LineCap]
|
||||
- Page numbering - $mpdf->pagenumSuffix etc not suppressed in HTML headers/footers if number suppressed
|
||||
- Page numbering - Page number total {nbpg} incorrect - e.g. showing decreasing numbers through document, when ToC present
|
||||
- RTL numerals - incorrectly reversing a number followed by a comma
|
||||
- Transform to uppercase/lowercase not working for chars > ASCII 128 when using core fonts
|
||||
- TOCpagebreak - Not setting TOC-FOOTER
|
||||
- TOCpagebreak - toc-even-header-name etc. not working
|
||||
- Parsing some relative URLs incorrectly
|
||||
- Textcircle - when moved to next page by "page-break-inside: avoid"
|
||||
- Bookmarks will now work if jump more than one level e.g. 0,2,1 Inserts a new blank entry at level 1
|
||||
- Paths to img or stylesheets - incorrectly reading "//www.domain.com" i.e. when starting with two /
|
||||
- data:image as background url() - incorrectly adjusting path on server if MPDF_PATH not specified (included in release mPDF 5.6.1)
|
||||
- Image problem if spaces or commas in path using http:// URL (included in release mPDF 5.6.1)
|
||||
- Image URL parsing rewritten to handle both urlencoded URLs and not urlencoded (included in release mPDF 5.6.1)
|
||||
- `<dottab>` fixed to allow color, font-size and font-family to be correctly used, avoid dots being moved to new page, and to work in RTL
|
||||
- Table {colsum} summed figures in table header
|
||||
- list-style-type (custom) colour not working
|
||||
- `<tocpagebreak>` toc-preHTML and toc-postHTML can now contain quotes
|
||||
|
||||
mPDF 5.6
|
||||
===========================
|
||||
|
||||
### 20/01/2013
|
||||
|
||||
Files changed
|
||||
-------------
|
||||
- mpdf.php
|
||||
- config.php
|
||||
- includes/functions.php
|
||||
- classes/meter.php
|
||||
- classes/directw.php
|
||||
|
||||
|
||||
config.php changes
|
||||
------------------
|
||||
|
||||
- $this->allowedCSStags - added HTML5 tags + textcircle AND
|
||||
- $this->outerblocktags - added HTML5 tags
|
||||
- $this->defaultCSS - added default CSS properties
|
||||
|
||||
New features / Improvements
|
||||
---------------------------
|
||||
CSS support added for for min-height, min-width, max-height and max-width in `<img>`
|
||||
|
||||
Images embedded in CSS
|
||||
- `<img src="data:image/gif;base64,....">` improved to make it more robust, and background: `url(data:image...` now added to work
|
||||
|
||||
HTML5 tags supported
|
||||
- as generic block elements: `<article><aside><details><figure><figcaption><footer><header><hgroup><nav><section><summary>`
|
||||
- as in-line elements: `<mark><time><meter><progress>`
|
||||
- `<mark>` has a default CSS set in config.php to yellow highlight
|
||||
- `<meter>` and `<progress>` support attributes as for HTML5
|
||||
- custom appearances for `<meter>` and `<progress>` can be made by editing `classes/meter.php` file
|
||||
- `<meter>` and `<progress>` suppress text inside the tags
|
||||
|
||||
Textcircle/Circular
|
||||
- font: "auto" added: automatically sizes text to fill semicircle (if both set) or full circle (if only one set)
|
||||
NB for this AND ALL CSS on `<textcircle>`: does not inherit CSS styles
|
||||
- attribute: divider="[characters including HTML entities]" added
|
||||
- `<textcircle r="30mm" top-text="Text Circular Text Circular" bottom-text="Text Circular Text Circular"
|
||||
divider=" • " style="font-size: auto" />`
|
||||
|
||||
» ’ ‚ „ are now included in "orphan"-management at the end of lines
|
||||
|
||||
Improved CJK line wrapping (if CJK character at end of line, breaks there rather than previous wordspace)
|
||||
|
||||
NB mPDF 5.5 added support for `<fieldset>` and `<legend>` (omitted from ChangeLog)
|
||||
|
||||
Bug fixes
|
||||
---------
|
||||
|
||||
- embedded fonts: Panose string incorrectly output as decimals - changed to hexadecimal
|
||||
Only a problem in limited circumstances.
|
||||
*****Need to delete all ttfontdata/ files in order for fix to have effect.
|
||||
- `<textCircle>` background white even when set to none/transparent
|
||||
- border="0" causing mPDF to add border to table CELLS as well as table
|
||||
- iteration counter in THEAD crashed in some circumstances
|
||||
- CSS color now supports spaces in the rgb() format e.g. border: 1px solid rgb(170, 170, 170);
|
||||
- CJK not working in table following changes made in v5.4
|
||||
- images fixed to work with Google Chart API (now mPDF does not urldecode the query part of the src)
|
||||
- CSS `<style>` within HTML page crashed if CSS is too large (? > 32Kb)
|
||||
- SVG image nested int eht HTML failed to show if code too large (? > 32Kb)
|
||||
- cyrillic character p р at end of table cell caused cell height to be incorrectly calculated
|
||||
|
||||
mPDF 5.5
|
||||
===========================
|
||||
|
||||
### 02/03/2012
|
||||
|
||||
Files changed
|
||||
-------------
|
||||
|
||||
- mpdf.php
|
||||
- classes/ttfontsuni.php
|
||||
- classes/svg.php
|
||||
- classes/tocontents.php
|
||||
- config.php
|
||||
- config_fonts.php
|
||||
- utils/font_collections.php
|
||||
- utils/font_coverage.php
|
||||
- utils/font_dump.php
|
||||
|
||||
Files added
|
||||
-----------
|
||||
|
||||
classes/ttfontsuni_analysis.php
|
||||
|
||||
config.php changes
|
||||
------------------
|
||||
|
||||
To avoid just the border/background-color of the (empty) end of a block being moved on to next page (`</div></div>`)
|
||||
|
||||
`$this->margBuffer = 0; // Allow an (empty) end of block to extend beyond the bottom margin by this amount (mm)`
|
||||
|
||||
config_fonts.php changes
|
||||
------------------------
|
||||
|
||||
Added to (arabic) fonts to allow "use non-mapped Arabic Glyphs" e.g. for Pashto
|
||||
'unAGlyphs' => true,
|
||||
|
||||
Arabic text
|
||||
-----------
|
||||
|
||||
Arabic text (RTL) rewritten with improved support for Pashto/Sindhi/Urdu/Kurdish
|
||||
Presentation forms added:
|
||||
U+0649, U+0681, U+0682, U+0685, U+069A-U+069E, U+06A0, U+06A2, U+06A3, U+06A5, U+06AB-U+06AE,
|
||||
U+06B0-U+06B4, U+06B5-U+06B9, U+06BB, U+06BC, U+06BE, U+06BF, U+06C0, U+06CD, U+06CE, U+06D1, U+06D3, U+0678
|
||||
Joining improved:
|
||||
U+0672, U+0675, U+0676, U+0677, U+0679-U+067D, U+067F, U+0680, U+0683, U+0684, U+0687, U+0687, U+0688-U+0692,
|
||||
U+0694, U+0695, U+0697, U+0699, U+068F, U+06A1, U+06A4, U+06A6, U+06A7, U+06A8, U+06AA, U+06BA, U+06C2-U+06CB, U+06CF
|
||||
|
||||
Note - Some characters in Pashto/Sindhi/Urdu/Kurdish do not have Unicode values for the final/initial/medial forms of the characters.
|
||||
However, some fonts include these characters "un-mapped" to Unicode (including XB Zar and XB Riyaz, which are bundled with mPDF).
|
||||
`'unAGlyphs' => true`, added to the config_fonts.php file for appropriate fonts will
|
||||
|
||||
This requires the font file to include a Format 2.0 POST table which references the glyphs as e.g. uni067C.med or uni067C.medi:
|
||||
e.g. XB Riyaz, XB Zar, Arabic Typesetting (MS), Arial (MS)
|
||||
|
||||
NB If you want to know if a font file is suitable, you can open a .ttf file in a text editor and search for "uni067C.med" - if it exists, it may work!
|
||||
Using "unAGlyphs" forces subsetting of fonts, and will not work with SIP/SMP fonts (using characters beyond the Unicode BMP Plane).
|
||||
|
||||
mPDF maps these characters to part of the Private Use Area allocated by Unicode U+F500-F7FF. This could interfere with correct use
|
||||
if the font already utilises these codes (unlikely).
|
||||
|
||||
mPDF now deletes U+200C,U+200D,U+200E,U+200F zero-widthjoiner/non-joiner, LTR and RTL marks so they will not appear
|
||||
even though some fonts contain glyphs for these characters.
|
||||
|
||||
|
||||
Other New features / Improvements
|
||||
---------------------------------
|
||||
Avoid just the border/background-color of the (empty) end of a block being moved on to next page (`</div></div>`)
|
||||
using configurable variable: `$this->margBuffer`;
|
||||
|
||||
|
||||
The TTFontsUni class contained a long function (extractcoreinfo) which is not used routinely in mPDF
|
||||
|
||||
This has been moved to a new file: classes/ttfontsuni_analysis.php.
|
||||
|
||||
The 3 utility scripts have been updated to use the new extended class:
|
||||
|
||||
- utils/font_collections.php
|
||||
- utils/font_coverage.php
|
||||
- utils/font_dump.php
|
||||
|
||||
|
||||
Bug fixes
|
||||
---------
|
||||
- Border & background when closing 2 blocks (e.g. `</div></div>`) incorrectly being moved to next page because incorrectly
|
||||
calculating how much space required
|
||||
- Fixed/Absolute-positioned elements not inheriting letter-spacing style
|
||||
- Rotated cell - error if text-rotate set on a table cell, but no text content in cell
|
||||
- SVG images, text-anchor not working
|
||||
- Nested table - not resetting cell style (font, color etc) after nested table, if text follows immediately
|
||||
- Nested table - font-size 70% set in extenal style sheet; if repeated nested tables, sets 70% of 70% etc etc
|
||||
- SVG setting font-size as percent on successive `<text>` elements gives progressively smaller text
|
||||
- mPDF will check if magic_quotes_runtime set ON even >= PHP 5.3 (will now cause an error message)
|
||||
- not resetting after 2 nested tags of same type e.g. `<b><b>bold</b></b>` still bold
|
||||
- When using charset_in other than utf-8, HTML Footers using tags e.g. `<htmlpageheader>` do not decode correctly
|
||||
- ToC if nested > 3 levels, line spacing reduces and starts to overlap
|
||||
|
||||
Older changes can be seen [on the documentation site](https://mpdf.github.io/about-mpdf/changelog.html).
|
91
system/vendor/mpdf/mpdf/CREDITS.txt
vendored
91
system/vendor/mpdf/mpdf/CREDITS.txt
vendored
@ -1,91 +0,0 @@
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* Software: FPDF *
|
||||
* Version: 1.53 *
|
||||
* Date: 2004-12-31 *
|
||||
* Author: Olivier PLATHEY *
|
||||
* License: Freeware *
|
||||
* *
|
||||
* You may use and modify this software as you wish. *
|
||||
*******************************************************************************/
|
||||
|
||||
/*******************************************************************************
|
||||
* HTML2FPDF is a php script to read a HTML text and generate a PDF file. *
|
||||
* Copyright (C) 2004-2005 Renato Coelho *
|
||||
* *
|
||||
* html2fpdf.php, htmltoolkit.php *
|
||||
*******************************************************************************/
|
||||
|
||||
CREDITS From HTML2FPDF:
|
||||
|
||||
-Olivier Plathey for the fpdf.php class [http://www.fpdf.org]
|
||||
-Damon Kohler for the Flowing Block script [mailto:damonkohler@yahoo.com]
|
||||
-Clément Lavoillotte for HTML-oriented FPDF idea
|
||||
-Yamasoft for the gif.php class [http://www.yamasoft.com/]
|
||||
-Jérôme Fenal for the _parsegif() function
|
||||
-"VIETCOM" for the PDFTable code [http://www.freepgs.com/vietcom/tool/pdftable/] [mailto:vncommando@yahoo.com]
|
||||
-Yukihiro O. for the SetDash() function [mailto:yukihiro_o@infoseek.jp]
|
||||
-Ron Korving for the WordWrap() function
|
||||
-Michel Poulain for the DisplayPreferences() function
|
||||
-Patrick Benny for the MultiCellBlt() function idea [no longer in use]
|
||||
-Seb for the _SetTextRendering() and SetTextOutline() functions [mailto:captainseb@wanadoo.fr]
|
||||
-MorphSoft for the colornames list idea
|
||||
-W3SCHOOLS for HTML-related reference info [http://www.w3schools.com/]
|
||||
|
||||
|
||||
|
||||
/****************************************************************************
|
||||
* Software: FPDF_Protection *
|
||||
* Version: 1.02 *
|
||||
* Date: 2005/05/08 *
|
||||
* Author: Klemen VODOPIVEC *
|
||||
* License: Freeware *
|
||||
* *
|
||||
* You may use and modify this software as you wish as stated in original *
|
||||
* FPDF package. *
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
// FPDI - Version 1.2
|
||||
//
|
||||
// Copyright 2004-2007 Setasign - Jan Slabon
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* @copyright Khaled Al-Shamaa 2008
|
||||
* @link http://www.ar-php.org
|
||||
* @author Khaled Al-Shamaa <khaled@ar-php.org>
|
||||
* @desc Set of PHP5 / UTF-8 Classes developed to enhance Arabic web
|
||||
* applications by providing set of tools includes stem-based searching,
|
||||
* translitiration, soundex, Hijri calendar, charset detection and
|
||||
* converter, spell numbers, keyboard language, Muslim prayer time,
|
||||
* auto-summarization, and more...
|
||||
* @package Arabic
|
||||
*
|
||||
* @version 1.8 released in Feb 15, 2009
|
||||
*
|
||||
* @license LGPL
|
||||
****************************************************************************/
|
||||
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation;
|
||||
This library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
[http://www.opensource.org/licenses/lgpl-license.php]
|
280
system/vendor/mpdf/mpdf/LICENSE.txt
vendored
280
system/vendor/mpdf/mpdf/LICENSE.txt
vendored
@ -1,280 +0,0 @@
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
License is intended to guarantee your freedom to share and change free
|
||||
software--to make sure the software is free for all its users. This
|
||||
General Public License applies to most of the Free Software
|
||||
Foundation's software and to any other program whose authors commit to
|
||||
using it. (Some other Free Software Foundation software is covered by
|
||||
the GNU Lesser General Public License instead.) You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
this service if you wish), that you receive source code or can get it
|
||||
if you want it, that you can change the software or use pieces of it
|
||||
in new free programs; and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
anyone to deny you these rights or to ask you to surrender the rights.
|
||||
These restrictions translate to certain responsibilities for you if you
|
||||
distribute copies of the software, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must give the recipients all the rights that
|
||||
you have. You must make sure that they, too, receive or can get the
|
||||
source code. And you must show them these terms so they know their
|
||||
rights.
|
||||
|
||||
We protect your rights with two steps: (1) copyright the software, and
|
||||
(2) offer you this license which gives you legal permission to copy,
|
||||
distribute and/or modify the software.
|
||||
|
||||
Also, for each author's protection and ours, we want to make certain
|
||||
that everyone understands that there is no warranty for this free
|
||||
software. If the software is modified by someone else and passed on, we
|
||||
want its recipients to know that what they have is not the original, so
|
||||
that any problems introduced by others will not reflect on the original
|
||||
authors' reputations.
|
||||
|
||||
Finally, any free program is threatened constantly by software
|
||||
patents. We wish to avoid the danger that redistributors of a free
|
||||
program will individually obtain patent licenses, in effect making the
|
||||
program proprietary. To prevent this, we have made it clear that any
|
||||
patent must be licensed for everyone's free use or not licensed at all.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License applies to any program or other work which contains
|
||||
a notice placed by the copyright holder saying it may be distributed
|
||||
under the terms of this General Public License. The "Program", below,
|
||||
refers to any such program or work, and a "work based on the Program"
|
||||
means either the Program or any derivative work under copyright law:
|
||||
that is to say, a work containing the Program or a portion of it,
|
||||
either verbatim or with modifications and/or translated into another
|
||||
language. (Hereinafter, translation is included without limitation in
|
||||
the term "modification".) Each licensee is addressed as "you".
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running the Program is not restricted, and the output from the Program
|
||||
is covered only if its contents constitute a work based on the
|
||||
Program (independent of having been made by running the Program).
|
||||
Whether that is true depends on what the Program does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Program's
|
||||
source code as you receive it, in any medium, provided that you
|
||||
conspicuously and appropriately publish on each copy an appropriate
|
||||
copyright notice and disclaimer of warranty; keep intact all the
|
||||
notices that refer to this License and to the absence of any warranty;
|
||||
and give any other recipients of the Program a copy of this License
|
||||
along with the Program.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy, and
|
||||
you may at your option offer warranty protection in exchange for a fee.
|
||||
|
||||
2. You may modify your copy or copies of the Program or any portion
|
||||
of it, thus forming a work based on the Program, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
|
||||
a) You must cause the modified files to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
b) You must cause any work that you distribute or publish, that in
|
||||
whole or in part contains or is derived from the Program or any
|
||||
part thereof, to be licensed as a whole at no charge to all third
|
||||
parties under the terms of this License.
|
||||
|
||||
c) If the modified program normally reads commands interactively
|
||||
when run, you must cause it, when started running for such
|
||||
interactive use in the most ordinary way, to print or display an
|
||||
announcement including an appropriate copyright notice and a
|
||||
notice that there is no warranty (or else, saying that you provide
|
||||
a warranty) and that users may redistribute the program under
|
||||
these conditions, and telling the user how to view a copy of this
|
||||
License. (Exception: if the Program itself is interactive but
|
||||
does not normally print such an announcement, your work based on
|
||||
the Program is not required to print an announcement.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Program,
|
||||
and can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based
|
||||
on the Program, the distribution of the whole must be on the terms of
|
||||
this License, whose permissions for other licensees extend to the
|
||||
entire whole, and thus to each and every part regardless of who wrote it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Program.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Program
|
||||
with the Program (or with a work based on the Program) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may copy and distribute the Program (or a work based on it,
|
||||
under Section 2) in object code or executable form under the terms of
|
||||
Sections 1 and 2 above provided that you also do one of the following:
|
||||
|
||||
a) Accompany it with the complete corresponding machine-readable
|
||||
source code, which must be distributed under the terms of Sections
|
||||
1 and 2 above on a medium customarily used for software interchange; or,
|
||||
|
||||
b) Accompany it with a written offer, valid for at least three
|
||||
years, to give any third party, for a charge no more than your
|
||||
cost of physically performing source distribution, a complete
|
||||
machine-readable copy of the corresponding source code, to be
|
||||
distributed under the terms of Sections 1 and 2 above on a medium
|
||||
customarily used for software interchange; or,
|
||||
|
||||
c) Accompany it with the information you received as to the offer
|
||||
to distribute corresponding source code. (This alternative is
|
||||
allowed only for noncommercial distribution and only if you
|
||||
received the program in object code or executable form with such
|
||||
an offer, in accord with Subsection b above.)
|
||||
|
||||
The source code for a work means the preferred form of the work for
|
||||
making modifications to it. For an executable work, complete source
|
||||
code means all the source code for all modules it contains, plus any
|
||||
associated interface definition files, plus the scripts used to
|
||||
control compilation and installation of the executable. However, as a
|
||||
special exception, the source code distributed need not include
|
||||
anything that is normally distributed (in either source or binary
|
||||
form) with the major components (compiler, kernel, and so on) of the
|
||||
operating system on which the executable runs, unless that component
|
||||
itself accompanies the executable.
|
||||
|
||||
If distribution of executable or object code is made by offering
|
||||
access to copy from a designated place, then offering equivalent
|
||||
access to copy the source code from the same place counts as
|
||||
distribution of the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
4. You may not copy, modify, sublicense, or distribute the Program
|
||||
except as expressly provided under this License. Any attempt
|
||||
otherwise to copy, modify, sublicense or distribute the Program is
|
||||
void, and will automatically terminate your rights under this License.
|
||||
However, parties who have received copies, or rights, from you under
|
||||
this License will not have their licenses terminated so long as such
|
||||
parties remain in full compliance.
|
||||
|
||||
5. You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Program or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Program (or any work based on the
|
||||
Program), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Program or works based on it.
|
||||
|
||||
6. Each time you redistribute the Program (or any work based on the
|
||||
Program), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute or modify the Program subject to
|
||||
these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties to
|
||||
this License.
|
||||
|
||||
7. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Program at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Program by
|
||||
all those who receive copies directly or indirectly through you, then
|
||||
the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Program.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under
|
||||
any particular circumstance, the balance of the section is intended to
|
||||
apply and the section as a whole is intended to apply in other
|
||||
circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system, which is
|
||||
implemented by public license practices. Many people have made
|
||||
generous contributions to the wide range of software distributed
|
||||
through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing
|
||||
to distribute software through any other system and a licensee cannot
|
||||
impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
8. If the distribution and/or use of the Program is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Program under this License
|
||||
may add an explicit geographical distribution limitation excluding
|
||||
those countries, so that distribution is permitted only in or among
|
||||
countries not thus excluded. In such case, this License incorporates
|
||||
the limitation as if written in the body of this License.
|
||||
|
||||
9. The Free Software Foundation may publish revised and/or new versions
|
||||
of the General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Program
|
||||
specifies a version number of this License which applies to it and "any
|
||||
later version", you have the option of following the terms and conditions
|
||||
either of that version or of any later version published by the Free
|
||||
Software Foundation. If the Program does not specify a version number of
|
||||
this License, you may choose any version ever published by the Free Software
|
||||
Foundation.
|
||||
|
||||
10. If you wish to incorporate parts of the Program into other free
|
||||
programs whose distribution conditions are different, write to the author
|
||||
to ask for permission. For software which is copyrighted by the Free
|
||||
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||
make exceptions for this. Our decision will be guided by the two goals
|
||||
of preserving the free status of all derivatives of our free software and
|
||||
of promoting the sharing and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||
REPAIR OR CORRECTION.
|
||||
|
||||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
147
system/vendor/mpdf/mpdf/README.md
vendored
147
system/vendor/mpdf/mpdf/README.md
vendored
@ -1,147 +0,0 @@
|
||||
mPDF is a PHP library which generates PDF files from UTF-8 encoded HTML.
|
||||
|
||||
It is based on [FPDF](http://www.fpdf.org/) and [HTML2FPDF](http://html2fpdf.sourceforge.net/)
|
||||
(see [CREDITS](CREDITS.txt)), with a number of enhancements. mPDF was written by Ian Back and is released
|
||||
under the [GNU GPL v2 licence](LICENSE.txt).
|
||||
|
||||
[](https://packagist.org/packages/mpdf/mpdf)
|
||||
[](https://packagist.org/packages/mpdf/mpdf)
|
||||
[](https://packagist.org/packages/mpdf/mpdf)
|
||||
|
||||
|
||||
> ⚠ If you are viewing this file on mPDF GitHub repository homepage or on Packagist, please note that
|
||||
> the default repository branch is `development` which can differ from the last stable release.
|
||||
|
||||
Requirements
|
||||
============
|
||||
|
||||
PHP versions and extensions
|
||||
---------------------------
|
||||
|
||||
- `PHP >=5.6 <7.3.0` is supported for `mPDF >= 7.0`
|
||||
- `PHP 7.3` is supported since `mPDF v7.1.7`
|
||||
- `PHP 7.4` is supported since `mPDF v8.0.4`
|
||||
- `PHP 8.0` is supported since `mPDF v8.0.10`
|
||||
- `PHP 8.1` is supported as of `mPDF v8.0.13`
|
||||
- `PHP 8.2` is supported as of `mPDF v8.1.3`
|
||||
|
||||
PHP `mbstring` and `gd` extensions have to be loaded.
|
||||
|
||||
Additional extensions may be required for some advanced features such as `zlib` for compression of output and
|
||||
embedded resources such as fonts, `bcmath` for generating barcodes or `xml` for character set conversion
|
||||
and SVG handling.
|
||||
|
||||
Known server caveats
|
||||
--------------------
|
||||
|
||||
mPDF has some problems with fetching external HTTP resources with single threaded servers such as `php -S`. A proper
|
||||
server such as nginx (php-fpm) or Apache is recommended.
|
||||
|
||||
Support us
|
||||
==========
|
||||
|
||||
Consider supporting development of mPDF with a donation of any value. [Donation button][1] can be found on the
|
||||
[main page of the documentation][1].
|
||||
|
||||
Installation
|
||||
============
|
||||
|
||||
Official installation method is via composer and its packagist package [mpdf/mpdf](https://packagist.org/packages/mpdf/mpdf).
|
||||
|
||||
```
|
||||
$ composer require mpdf/mpdf
|
||||
```
|
||||
|
||||
Usage
|
||||
=====
|
||||
|
||||
The simplest usage (since version 7.0) of the library would be as follows:
|
||||
|
||||
```php
|
||||
<?php
|
||||
|
||||
require_once __DIR__ . '/vendor/autoload.php';
|
||||
|
||||
$mpdf = new \Mpdf\Mpdf();
|
||||
$mpdf->WriteHTML('<h1>Hello world!</h1>');
|
||||
$mpdf->Output();
|
||||
|
||||
```
|
||||
|
||||
This will output the PDF inline to the browser as `application/pdf` Content-type.
|
||||
|
||||
Setup & Configuration
|
||||
=====================
|
||||
|
||||
All [configuration directives](https://mpdf.github.io/reference/mpdf-variables/overview.html) can
|
||||
be set by the `$config` parameter of the constructor.
|
||||
|
||||
It is recommended to set one's own temporary directory via `tempDir` configuration variable.
|
||||
The directory must have write permissions (mode `775` is recommended) for users using mPDF
|
||||
(typically `cli`, `webserver`, `fpm`).
|
||||
|
||||
**Warning:** mPDF will clean up old temporary files in the temporary directory. Choose a path dedicated to mPDF only.
|
||||
|
||||
|
||||
```php
|
||||
<?php
|
||||
|
||||
$mpdf = new \Mpdf\Mpdf(['tempDir' => __DIR__ . '/tmp']);
|
||||
|
||||
```
|
||||
|
||||
By default, the temporary directory will be inside vendor directory and will have write permissions from
|
||||
`post_install` composer script.
|
||||
|
||||
For more information about custom temporary directory see the note on
|
||||
[Folder for temporary files](https://mpdf.github.io/installation-setup/folders-for-temporary-files.html)
|
||||
in the section on Installation & Setup in the [manual][1].
|
||||
|
||||
If you have problems, please read the section on
|
||||
[troubleshooting](https://mpdf.github.io/troubleshooting/known-issues.html) in the manual.
|
||||
|
||||
About CSS support and development state
|
||||
=======================================
|
||||
|
||||
mPDF as a whole is a quite dated software. Nowadays, better alternatives are available, albeit not written in PHP.
|
||||
|
||||
Use mPDF if you cannot use non-PHP approach to generate PDF files or if you want to leverage some of the benefits of mPDF
|
||||
over browser approach – color handling, pre-print, barcodes support, headers and footers, page numbering, TOCs, etc.
|
||||
But beware that a HTML/CSS template tailored for mPDF might be necessary.
|
||||
|
||||
If you are looking for state of the art CSS support, mirroring existing HTML pages to PDF, use headless Chrome.
|
||||
|
||||
mPDF will still be updated to enhance some internal capabilities and to support newer versions of PHP,
|
||||
but better and/or newer CSS support will most likely not be implemented.
|
||||
|
||||
Online manual
|
||||
=============
|
||||
|
||||
Online manual is available at https://mpdf.github.io/.
|
||||
|
||||
General troubleshooting
|
||||
=============
|
||||
|
||||
For general questions or troubleshooting please use [Discussions](https://github.com/mpdf/mpdf/discussions).
|
||||
|
||||
You can also use the [mpdf tag](https://stackoverflow.com/questions/tagged/mpdf) at Stack Overflow as the StackOverflow user base is more likely to answer you in a timely manner.
|
||||
|
||||
Contributing
|
||||
============
|
||||
|
||||
Before submitting issues and pull requests please read the [CONTRIBUTING.md](https://github.com/mpdf/mpdf/blob/development/.github/CONTRIBUTING.md) file.
|
||||
|
||||
Unit Testing
|
||||
============
|
||||
|
||||
Unit testing for mPDF is done using [PHPUnit](https://phpunit.de/).
|
||||
|
||||
To get started, run `composer install` from the command line while in the mPDF root directory
|
||||
(you'll need [composer installed first](https://getcomposer.org/download/)).
|
||||
|
||||
To execute tests, run `composer test` from the command line while in the mPDF root directory.
|
||||
|
||||
Any assistance writing unit tests for mPDF is greatly appreciated. If you'd like to help, please
|
||||
note that any PHP file located in the `/tests/` directory will be autoloaded when unit testing.
|
||||
|
||||
[1]: https://mpdf.github.io
|
70
system/vendor/mpdf/mpdf/composer.json
vendored
70
system/vendor/mpdf/mpdf/composer.json
vendored
@ -1,70 +0,0 @@
|
||||
{
|
||||
"name": "mpdf/mpdf",
|
||||
"type": "library",
|
||||
"description": "PHP library generating PDF files from UTF-8 encoded HTML",
|
||||
"keywords": ["php", "pdf", "utf-8"],
|
||||
"homepage": "https://mpdf.github.io",
|
||||
"license": ["GPL-2.0-only"],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Matěj Humpál",
|
||||
"role": "Developer, maintainer"
|
||||
},
|
||||
{
|
||||
"name": "Ian Back",
|
||||
"role": "Developer (retired)"
|
||||
}
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/mpdf/mpdf/issues",
|
||||
"source": "https://github.com/mpdf/mpdf",
|
||||
"docs": "http://mpdf.github.io"
|
||||
},
|
||||
"require": {
|
||||
"php": "^5.6 || ^7.0 || ~8.0.0 || ~8.1.0 || ~8.2.0",
|
||||
"ext-gd": "*",
|
||||
"ext-mbstring": "*",
|
||||
"mpdf/psr-log-aware-trait": "^2.0 || ^3.0",
|
||||
"myclabs/deep-copy": "^1.7",
|
||||
"paragonie/random_compat": "^1.4|^2.0|^9.99.99",
|
||||
"psr/http-message": "^1.0",
|
||||
"psr/log": "^1.0 || ^2.0 || ^3.0",
|
||||
"setasign/fpdi": "^2.1"
|
||||
},
|
||||
"require-dev": {
|
||||
"mockery/mockery": "^1.3.0",
|
||||
"mpdf/qrcode": "^1.1.0",
|
||||
"squizlabs/php_codesniffer": "^3.5.0",
|
||||
"tracy/tracy": "~2.5",
|
||||
"yoast/phpunit-polyfills": "^1.0"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-bcmath": "Needed for generation of some types of barcodes",
|
||||
"ext-zlib": "Needed for compression of embedded resources, such as fonts",
|
||||
"ext-xml": "Needed mainly for SVG manipulation"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Mpdf\\": "src/"
|
||||
}
|
||||
},
|
||||
"autoload-dev": {
|
||||
"psr-4": {
|
||||
"Mpdf\\": "tests/Mpdf"
|
||||
},
|
||||
"files": [
|
||||
"src/functions-dev.php"
|
||||
]
|
||||
},
|
||||
"scripts": {
|
||||
"post-install-cmd": [
|
||||
"php -r \"chmod('./tmp', 0777);\""
|
||||
],
|
||||
"cs": "@php vendor/bin/phpcs -v --report-width=160 --standard=ruleset.xml --severity=1 --warning-severity=0 --extensions=php src utils tests",
|
||||
"test": "@php vendor/bin/phpunit",
|
||||
"coverage": "@php vendor/bin/phpunit --coverage-text"
|
||||
},
|
||||
"config": {
|
||||
"sort-packages": true
|
||||
}
|
||||
}
|
23
system/vendor/mpdf/mpdf/phpunit.xml
vendored
23
system/vendor/mpdf/mpdf/phpunit.xml
vendored
@ -1,23 +0,0 @@
|
||||
<phpunit
|
||||
bootstrap="tests/bootstrap.php"
|
||||
colors="true"
|
||||
backupGlobals="false"
|
||||
beStrictAboutTestsThatDoNotTestAnything="false">
|
||||
|
||||
<testsuites>
|
||||
<testsuite name="Tests">
|
||||
<directory suffix="Test.php">./tests</directory>
|
||||
</testsuite>
|
||||
</testsuites>
|
||||
|
||||
<coverage processUncoveredFiles="true">
|
||||
<include>
|
||||
<directory suffix=".php">src</directory>
|
||||
</include>
|
||||
<report>
|
||||
<html outputDirectory="build/coverage"/>
|
||||
<text outputFile="php://stdout" showOnlySummary="true"/>
|
||||
</report>
|
||||
</coverage>
|
||||
|
||||
</phpunit>
|
43
system/vendor/mpdf/mpdf/ruleset.xml
vendored
43
system/vendor/mpdf/mpdf/ruleset.xml
vendored
@ -1,43 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<ruleset name="PSR2Tabs">
|
||||
<description>PSR2 with tabs instead of spaces.</description>
|
||||
<arg name="tab-width" value="4" />
|
||||
<rule ref="PSR2">
|
||||
|
||||
<exclude name="Generic.Commenting.DocComment" />
|
||||
<exclude name="Generic.Files.LineLength.TooLong" />
|
||||
<exclude name="Generic.Files.LineLength.MaxExceeded" />
|
||||
<exclude name="Generic.NamingConventions.UpperCaseConstantName.ClassConstantNotUpperCase)" />
|
||||
<exclude name="Generic.WhiteSpace.DisallowTabIndent" />
|
||||
|
||||
<exclude name="PSR1.Files.SideEffects.FoundWithSymbols" />
|
||||
<exclude name="PSR1.Methods.CamelCapsMethodName.NotCamelCaps" />
|
||||
|
||||
<exclude name="PSR2.Classes.ClassDeclaration.CloseBraceAfterBody" />
|
||||
<exclude name="PSR2.Classes.PropertyDeclaration.ScopeMissing" />
|
||||
<exclude name="PSR2.Classes.PropertyDeclaration.Underscore" />
|
||||
<exclude name="PSR2.Classes.PropertyDeclaration.VarUsed" />
|
||||
<exclude name="PSR2.ControlStructures.SwitchDeclaration.BodyOnNextLineCASE" />
|
||||
<exclude name="PSR2.Methods.MethodDeclaration.Underscore" />
|
||||
|
||||
<exclude name="Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace" />
|
||||
<exclude name="Squiz.Scope.MethodScope.Missing" />
|
||||
<exclude name="Squiz.WhiteSpace.ControlStructureSpacing.SpacingAfterOpen" />
|
||||
<exclude name="Squiz.WhiteSpace.ControlStructureSpacing.SpacingBeforeClose" />
|
||||
|
||||
</rule>
|
||||
|
||||
<rule ref="Generic.Formatting.SpaceAfterCast">
|
||||
<properties>
|
||||
<property name="spacing" value="1" />
|
||||
</properties>
|
||||
</rule>
|
||||
|
||||
<rule ref="Generic.WhiteSpace.DisallowSpaceIndent" />
|
||||
<rule ref="Generic.WhiteSpace.ScopeIndent">
|
||||
<properties>
|
||||
<property name="indent" value="4" />
|
||||
<property name="tabIndent" value="true" />
|
||||
</properties>
|
||||
</rule>
|
||||
</ruleset>
|
Binary file not shown.
BIN
system/vendor/mpdf/mpdf/ttfonts/Abyssinica_SIL.ttf
vendored
BIN
system/vendor/mpdf/mpdf/ttfonts/Abyssinica_SIL.ttf
vendored
Binary file not shown.
BIN
system/vendor/mpdf/mpdf/ttfonts/Aegean.otf
vendored
BIN
system/vendor/mpdf/mpdf/ttfonts/Aegean.otf
vendored
Binary file not shown.
BIN
system/vendor/mpdf/mpdf/ttfonts/Aegyptus.otf
vendored
BIN
system/vendor/mpdf/mpdf/ttfonts/Aegyptus.otf
vendored
Binary file not shown.
BIN
system/vendor/mpdf/mpdf/ttfonts/Akkadian.otf
vendored
BIN
system/vendor/mpdf/mpdf/ttfonts/Akkadian.otf
vendored
Binary file not shown.
BIN
system/vendor/mpdf/mpdf/ttfonts/DBSILBR.ttf
vendored
BIN
system/vendor/mpdf/mpdf/ttfonts/DBSILBR.ttf
vendored
Binary file not shown.
BIN
system/vendor/mpdf/mpdf/ttfonts/DejaVuSans-Bold.ttf
vendored
BIN
system/vendor/mpdf/mpdf/ttfonts/DejaVuSans-Bold.ttf
vendored
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
system/vendor/mpdf/mpdf/ttfonts/DejaVuSans.ttf
vendored
BIN
system/vendor/mpdf/mpdf/ttfonts/DejaVuSans.ttf
vendored
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
system/vendor/mpdf/mpdf/ttfonts/DejaVuSansMono.ttf
vendored
BIN
system/vendor/mpdf/mpdf/ttfonts/DejaVuSansMono.ttf
vendored
Binary file not shown.
BIN
system/vendor/mpdf/mpdf/ttfonts/DejaVuSerif-Bold.ttf
vendored
BIN
system/vendor/mpdf/mpdf/ttfonts/DejaVuSerif-Bold.ttf
vendored
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
system/vendor/mpdf/mpdf/ttfonts/DejaVuSerif.ttf
vendored
BIN
system/vendor/mpdf/mpdf/ttfonts/DejaVuSerif.ttf
vendored
Binary file not shown.
Binary file not shown.
Binary file not shown.
99
system/vendor/mpdf/mpdf/ttfonts/DejaVuinfo.txt
vendored
99
system/vendor/mpdf/mpdf/ttfonts/DejaVuinfo.txt
vendored
@ -1,99 +0,0 @@
|
||||
Fonts are (c) Bitstream (see below). DejaVu changes are in public domain.
|
||||
Glyphs imported from Arev fonts are (c) Tavmjong Bah (see below)
|
||||
|
||||
Bitstream Vera Fonts Copyright
|
||||
------------------------------
|
||||
|
||||
Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is
|
||||
a trademark of Bitstream, Inc.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of the fonts accompanying this license ("Fonts") and associated
|
||||
documentation files (the "Font Software"), to reproduce and distribute the
|
||||
Font Software, including without limitation the rights to use, copy, merge,
|
||||
publish, distribute, and/or sell copies of the Font Software, and to permit
|
||||
persons to whom the Font Software is furnished to do so, subject to the
|
||||
following conditions:
|
||||
|
||||
The above copyright and trademark notices and this permission notice shall
|
||||
be included in all copies of one or more of the Font Software typefaces.
|
||||
|
||||
The Font Software may be modified, altered, or added to, and in particular
|
||||
the designs of glyphs or characters in the Fonts may be modified and
|
||||
additional glyphs or characters may be added to the Fonts, only if the fonts
|
||||
are renamed to names not containing either the words "Bitstream" or the word
|
||||
"Vera".
|
||||
|
||||
This License becomes null and void to the extent applicable to Fonts or Font
|
||||
Software that has been modified and is distributed under the "Bitstream
|
||||
Vera" names.
|
||||
|
||||
The Font Software may be sold as part of a larger software package but no
|
||||
copy of one or more of the Font Software typefaces may be sold by itself.
|
||||
|
||||
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT,
|
||||
TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME
|
||||
FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING
|
||||
ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES,
|
||||
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
|
||||
THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE
|
||||
FONT SOFTWARE.
|
||||
|
||||
Except as contained in this notice, the names of Gnome, the Gnome
|
||||
Foundation, and Bitstream Inc., shall not be used in advertising or
|
||||
otherwise to promote the sale, use or other dealings in this Font Software
|
||||
without prior written authorization from the Gnome Foundation or Bitstream
|
||||
Inc., respectively. For further information, contact: fonts at gnome dot
|
||||
org.
|
||||
|
||||
Arev Fonts Copyright
|
||||
------------------------------
|
||||
|
||||
Copyright (c) 2006 by Tavmjong Bah. All Rights Reserved.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of the fonts accompanying this license ("Fonts") and
|
||||
associated documentation files (the "Font Software"), to reproduce
|
||||
and distribute the modifications to the Bitstream Vera Font Software,
|
||||
including without limitation the rights to use, copy, merge, publish,
|
||||
distribute, and/or sell copies of the Font Software, and to permit
|
||||
persons to whom the Font Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright and trademark notices and this permission notice
|
||||
shall be included in all copies of one or more of the Font Software
|
||||
typefaces.
|
||||
|
||||
The Font Software may be modified, altered, or added to, and in
|
||||
particular the designs of glyphs or characters in the Fonts may be
|
||||
modified and additional glyphs or characters may be added to the
|
||||
Fonts, only if the fonts are renamed to names not containing either
|
||||
the words "Tavmjong Bah" or the word "Arev".
|
||||
|
||||
This License becomes null and void to the extent applicable to Fonts
|
||||
or Font Software that has been modified and is distributed under the
|
||||
"Tavmjong Bah Arev" names.
|
||||
|
||||
The Font Software may be sold as part of a larger software package but
|
||||
no copy of one or more of the Font Software typefaces may be sold by
|
||||
itself.
|
||||
|
||||
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL
|
||||
TAVMJONG BAH BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
||||
OTHER DEALINGS IN THE FONT SOFTWARE.
|
||||
|
||||
Except as contained in this notice, the name of Tavmjong Bah shall not
|
||||
be used in advertising or otherwise to promote the sale, use or other
|
||||
dealings in this Font Software without prior written authorization
|
||||
from Tavmjong Bah. For further information, contact: tavmjong @ free
|
||||
. fr.
|
||||
|
||||
$Id: LICENSE 2133 2007-11-28 02:46:28Z lechimp $
|
BIN
system/vendor/mpdf/mpdf/ttfonts/Dhyana-Bold.ttf
vendored
BIN
system/vendor/mpdf/mpdf/ttfonts/Dhyana-Bold.ttf
vendored
Binary file not shown.
BIN
system/vendor/mpdf/mpdf/ttfonts/Dhyana-Regular.ttf
vendored
BIN
system/vendor/mpdf/mpdf/ttfonts/Dhyana-Regular.ttf
vendored
Binary file not shown.
94
system/vendor/mpdf/mpdf/ttfonts/DhyanaOFL.txt
vendored
94
system/vendor/mpdf/mpdf/ttfonts/DhyanaOFL.txt
vendored
@ -1,94 +0,0 @@
|
||||
Copyright (c) 2010, Vernon Adams (vern@newtypography.co.uk),
|
||||
with Reserved Font Names "Dhyana".
|
||||
|
||||
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
||||
This license is copied below, and is also available with a FAQ at:
|
||||
http://scripts.sil.org/OFL
|
||||
|
||||
|
||||
-----------------------------------------------------------
|
||||
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
||||
-----------------------------------------------------------
|
||||
|
||||
PREAMBLE
|
||||
The goals of the Open Font License (OFL) are to stimulate worldwide
|
||||
development of collaborative font projects, to support the font creation
|
||||
efforts of academic and linguistic communities, and to provide a free and
|
||||
open framework in which fonts may be shared and improved in partnership
|
||||
with others.
|
||||
|
||||
The OFL allows the licensed fonts to be used, studied, modified and
|
||||
redistributed freely as long as they are not sold by themselves. The
|
||||
fonts, including any derivative works, can be bundled, embedded,
|
||||
redistributed and/or sold with any software provided that any reserved
|
||||
names are not used by derivative works. The fonts and derivatives,
|
||||
however, cannot be released under any other type of license. The
|
||||
requirement for fonts to remain under this license does not apply
|
||||
to any document created using the fonts or their derivatives.
|
||||
|
||||
DEFINITIONS
|
||||
"Font Software" refers to the set of files released by the Copyright
|
||||
Holder(s) under this license and clearly marked as such. This may
|
||||
include source files, build scripts and documentation.
|
||||
|
||||
"Reserved Font Name" refers to any names specified as such after the
|
||||
copyright statement(s).
|
||||
|
||||
"Original Version" refers to the collection of Font Software components as
|
||||
distributed by the Copyright Holder(s).
|
||||
|
||||
"Modified Version" refers to any derivative made by adding to, deleting,
|
||||
or substituting -- in part or in whole -- any of the components of the
|
||||
Original Version, by changing formats or by porting the Font Software to a
|
||||
new environment.
|
||||
|
||||
"Author" refers to any designer, engineer, programmer, technical
|
||||
writer or other person who contributed to the Font Software.
|
||||
|
||||
PERMISSION & CONDITIONS
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
||||
redistribute, and sell modified and unmodified copies of the Font
|
||||
Software, subject to the following conditions:
|
||||
|
||||
1) Neither the Font Software nor any of its individual components,
|
||||
in Original or Modified Versions, may be sold by itself.
|
||||
|
||||
2) Original or Modified Versions of the Font Software may be bundled,
|
||||
redistributed and/or sold with any software, provided that each copy
|
||||
contains the above copyright notice and this license. These can be
|
||||
included either as stand-alone text files, human-readable headers or
|
||||
in the appropriate machine-readable metadata fields within text or
|
||||
binary files as long as those fields can be easily viewed by the user.
|
||||
|
||||
3) No Modified Version of the Font Software may use the Reserved Font
|
||||
Name(s) unless explicit written permission is granted by the corresponding
|
||||
Copyright Holder. This restriction only applies to the primary font name as
|
||||
presented to the users.
|
||||
|
||||
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
||||
Software shall not be used to promote, endorse or advertise any
|
||||
Modified Version, except to acknowledge the contribution(s) of the
|
||||
Copyright Holder(s) and the Author(s) or with their explicit written
|
||||
permission.
|
||||
|
||||
5) The Font Software, modified or unmodified, in part or in whole,
|
||||
must be distributed entirely under this license, and must not be
|
||||
distributed under any other license. The requirement for fonts to
|
||||
remain under this license does not apply to any document created
|
||||
using the Font Software.
|
||||
|
||||
TERMINATION
|
||||
This license becomes null and void if any of the above conditions are
|
||||
not met.
|
||||
|
||||
DISCLAIMER
|
||||
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
||||
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
||||
OTHER DEALINGS IN THE FONT SOFTWARE.
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user