diff --git a/system/boot.php b/system/boot.php index 9d0fd4de..67fa438b 100644 --- a/system/boot.php +++ b/system/boot.php @@ -47,6 +47,13 @@ function _get($param, $defvalue = '') } } +class Lang { + public static function T($var) { + return Lang($var); + } +} + + require('system/orm.php'); ORM::configure("mysql:host=$db_host;dbname=$db_name"); @@ -175,6 +182,29 @@ function _log($description, $type = '', $userid = '0') $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) { @@ -195,6 +225,16 @@ function sendSMS($phone, $txt) } } +function sendWhatsapp($phone, $txt) +{ + global $_c; + if(!empty($_c['wa_url'])){ + $waurl = str_replace('[number]',urlencode($phone),$_c['wa_url']); + $waurl = str_replace('[text]',urlencode($txt),$waurl); + file_get_contents($waurl); + } +} + function time_elapsed_string($datetime, $full = false) { diff --git a/system/controllers/community.php b/system/controllers/community.php new file mode 100644 index 00000000..6bcd10e8 --- /dev/null +++ b/system/controllers/community.php @@ -0,0 +1,13 @@ +<?php +/** +* PHP Mikrotik Billing (https://ibnux.github.io/phpmixbill/) +**/ +_auth(); +$ui->assign('_title', 'Community - '. $config['CompanyName']); +$ui->assign('_system_menu', 'community'); + +$action = $routes['1']; +$admin = Admin::_info(); +$ui->assign('_admin', $admin); + +$ui->display('community.tpl'); \ No newline at end of file diff --git a/system/controllers/order.php b/system/controllers/order.php new file mode 100644 index 00000000..00f2b157 --- /dev/null +++ b/system/controllers/order.php @@ -0,0 +1,39 @@ +<?php +/** +* PHP Mikrotik Billing (https://ibnux.github.io/phpmixbill/) +**/ +_auth(); +$ui->assign('_system_menu', 'order'); +$action = $routes['1']; +$user = User::_info(); +$ui->assign('_user', $user); + +//Client Page +$bill = User::_billing(); +$ui->assign('_bill', $bill); + + +switch ($action) { + case 'voucher': + $ui->assign('_title', $_L['Order_Voucher'].' - '. $config['CompanyName']); + $ui->display('user-order.tpl'); + break; + case 'ppoe': + $ui->assign('_title', 'Order PPOE Internet- '. $config['CompanyName']);$routers = ORM::for_table('tbl_routers')->find_many(); + $plans = ORM::for_table('tbl_plans')->where('type', 'PPPOE')->find_many(); + $ui->assign('routers',$routers); + $ui->assign('plans', $plans); + $ui->display('user-orderPPOE.tpl'); + break; + case 'hotspot': + $ui->assign('_title', 'Order Hotspot Internet- '. $config['CompanyName']); + $routers = ORM::for_table('tbl_routers')->find_many(); + $plans = ORM::for_table('tbl_plans')->where('type', 'Hotspot')->find_many(); + $ui->assign('routers',$routers); + $ui->assign('plans', $plans); + $ui->display('user-orderHotspot.tpl'); + break; + default: + $ui->display('404.tpl'); +} + diff --git a/system/controllers/paymentgateway.php b/system/controllers/paymentgateway.php index 52c0fff0..5421f4d9 100644 --- a/system/controllers/paymentgateway.php +++ b/system/controllers/paymentgateway.php @@ -12,6 +12,7 @@ $ui->assign('_admin', $admin); switch ($action) { case 'xendit': $ui->assign('_title', 'Xendit - Payment Gateway - '. $config['CompanyName']); + $ui->assign('channels', json_decode(file_get_contents('system/paymentgateway/channel_xendit.json'), true)); $ui->display('app-xendit.tpl'); break; case 'xendit-post': @@ -37,6 +38,16 @@ switch ($action) { $d->value = $xendit_verification_token; $d->save(); } + $d = ORM::for_table('tbl_appconfig')->where('setting', 'xendit_channel')->find_one(); + if($d){ + $d->value = implode(',',$_POST['xendit_channel']); + $d->save(); + }else{ + $d = ORM::for_table('tbl_appconfig')->create(); + $d->setting = 'xendit_channel'; + $d->value = implode(',',$_POST['xendit_channel']); + $d->save(); + } _log('[' . $admin['username'] . ']: Xendit ' . $_L['Settings_Saved_Successfully'], 'Admin', $admin['id']); @@ -44,7 +55,7 @@ switch ($action) { break; case 'midtrans': $ui->assign('_title', 'Midtrans - Payment Gateway - '. $config['CompanyName']); - + $ui->assign('channels', json_decode(file_get_contents('system/paymentgateway/channel_midtrans.json'), true)); $ui->display('app-midtrans.tpl'); break; case 'midtrans-post': @@ -81,9 +92,73 @@ switch ($action) { $d->value = $midtrans_server_key; $d->save(); } + $d = ORM::for_table('tbl_appconfig')->where('setting', 'midtrans_channel')->find_one(); + if($d){ + $d->value = implode(',',$_POST['midtrans_channel']); + $d->save(); + }else{ + $d = ORM::for_table('tbl_appconfig')->create(); + $d->setting = 'midtrans_channel'; + $d->value = implode(',',$_POST['midtrans_channel']); + $d->save(); + } _log('[' . $admin['username'] . ']: Midtrans ' . $_L['Settings_Saved_Successfully'], 'Admin', $admin['id']); r2(U . 'paymentgateway/midtrans', 's', $_L['Settings_Saved_Successfully']); break; + case 'tripay': + $ui->assign('_title', 'Tripay - Payment Gateway - '. $config['CompanyName']); + $ui->assign('channels', json_decode(file_get_contents('system/paymentgateway/channel_tripay.json'), true)); + $ui->display('app-tripay.tpl'); + break; + case 'tripay-post': + $tripay_merchant = _post('tripay_merchant'); + $tripay_api_key = _post('tripay_api_key'); + $tripay_secret_key = _post('tripay_secret_key'); + $d = ORM::for_table('tbl_appconfig')->where('setting', 'tripay_merchant')->find_one(); + if($d){ + $d->value = $tripay_merchant; + $d->save(); + }else{ + $d = ORM::for_table('tbl_appconfig')->create(); + $d->setting = 'tripay_merchant'; + $d->value = $tripay_merchant; + $d->save(); + } + $d = ORM::for_table('tbl_appconfig')->where('setting', 'tripay_api_key')->find_one(); + if($d){ + $d->value = $tripay_api_key; + $d->save(); + }else{ + $d = ORM::for_table('tbl_appconfig')->create(); + $d->setting = 'tripay_api_key'; + $d->value = $tripay_api_key; + $d->save(); + } + $d = ORM::for_table('tbl_appconfig')->where('setting', 'tripay_secret_key')->find_one(); + if($d){ + $d->value = $tripay_secret_key; + $d->save(); + }else{ + $d = ORM::for_table('tbl_appconfig')->create(); + $d->setting = 'tripay_secret_key'; + $d->value = $tripay_secret_key; + $d->save(); + } + $d = ORM::for_table('tbl_appconfig')->where('setting', 'tripay_channel')->find_one(); + if($d){ + $d->value = implode(',',$_POST['tripay_channel']); + $d->save(); + }else{ + $d = ORM::for_table('tbl_appconfig')->create(); + $d->setting = 'tripay_channel'; + $d->value = implode(',',$_POST['tripay_channel']); + $d->save(); + } + + _log('[' . $admin['username'] . ']: Tripay ' . $_L['Settings_Saved_Successfully'].json_encode($_POST['tripay_channel']), 'Admin', $admin['id']); + + r2(U . 'paymentgateway/tripay', 's', $_L['Settings_Saved_Successfully']); + break; } diff --git a/system/controllers/prepaid.php b/system/controllers/prepaid.php index 9306710d..eb74fb9d 100644 --- a/system/controllers/prepaid.php +++ b/system/controllers/prepaid.php @@ -406,7 +406,7 @@ switch ($action) { $in = ORM::for_table('tbl_transactions')->where('username', $c['username'])->order_by_desc('id')->find_one(); $ui->assign('in', $in); - sendSMS($c['username'], "*$_c[CompanyName]*\n". + sendWhatsapp($c['username'], "*$_c[CompanyName]*\n". "$_c[address]\n". "$_c[phone]\n". "\n\n". @@ -1050,7 +1050,7 @@ switch ($action) { $ui->assign('in', $in); - sendSMS($c['username'], "*$_c[CompanyName]*\n". + sendWhatsapp($c['username'], "*$_c[CompanyName]*\n". "$_c[address]\n". "$_c[phone]\n". "\n\n". diff --git a/system/controllers/register.php b/system/controllers/register.php index df71b937..7576e90a 100644 --- a/system/controllers/register.php +++ b/system/controllers/register.php @@ -18,9 +18,11 @@ use PEAR2\Net\RouterOS; require_once 'system/autoload/PEAR2/Autoload.php'; +$otpPath = 'system/uploads/sms/'; + switch ($do) { case 'post': - + $otp_code = _post('otp_code'); $username = _post('username'); $fullname = _post('fullname'); $password = _post('password'); @@ -41,6 +43,32 @@ switch ($do) { $msg .= $_L['PasswordsNotMatch'] . '<br>'; } + if(!empty($_c['sms_url'])){ + $otpPath .= sha1($username.$db_password).".txt"; + if(file_exists($otpPath) && time()-filemtime($otpPath)>300){ + unlink($otpPath); + r2(U . 'register', 's', 'Verification code expired'); + }else if(file_exists($otpPath)){ + $code = file_get_contents($otpPath); + if($code!=$otp_code){ + $ui->assign('username', $username); + $ui->assign('fullname', $fullname); + $ui->assign('address', $address); + $ui->assign('phonenumber', $phonenumber); + $ui->assign('notify', '<div class="alert alert-success"> + <button type="button" class="close" data-dismiss="alert"> + <span aria-hidden="true">×</span> + </button> + <div>Verification code is Wrong</div></div>'); + $ui->display('register-otp.tpl'); + exit(); + }else{ + unlink($otpPath); + } + }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>'; @@ -65,9 +93,8 @@ switch ($do) { <span aria-hidden="true">×</span> </button> <div>Failed to register</div></div>'); - $ui->display('register.tpl'); + r2(U . 'register', 's', 'Failed to register'); } - //r2(U . 'register', 's', $_L['account_created_successfully']); } else { $ui->assign('username', $username); $ui->assign('fullname', $fullname); @@ -83,10 +110,47 @@ switch ($do) { break; default: - $ui->assign('username', ""); - $ui->assign('fullname', ""); - $ui->assign('address', ""); - $ui->assign('phonenumber', ""); - $ui->display('register.tpl'); + if(!empty($_c['sms_url'])){ + $username = _post('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']); + } + if(!file_exists($otpPath)){ + mkdir($otpPath); + touch($otpPath.'index.html'); + } + $otpPath .= sha1($username.$db_password).".txt"; + if(file_exists($otpPath) && time()-filemtime($otpPath)<120){ + $ui->assign('username', $username); + $ui->assign('notify', '<div class="alert alert-success"> + <button type="button" class="close" data-dismiss="alert"> + <span aria-hidden="true">×</span> + </button> + <div>Please wait '.(120-(time()-filemtime($otpPath))).' seconds before sending another SMS</div></div>'); + $ui->display('register-otp.tpl'); + }else{ + $otp = rand(100000,999999); + file_put_contents($otpPath, $otp); + sendSMS($username,$_c['CompanyName']."\nYour Verification code are: $otp"); + $ui->assign('username', $username); + $ui->assign('notify', '<div class="alert alert-success"> + <button type="button" class="close" data-dismiss="alert"> + <span aria-hidden="true">×</span> + </button> + <div>Verification code has been sent to your phone</div></div>'); + $ui->display('register-otp.tpl'); + } + }else{ + $ui->display('register-rotp.tpl'); + } + }else{ + $ui->assign('username', ""); + $ui->assign('fullname', ""); + $ui->assign('address', ""); + $ui->assign('otp', false); + $ui->display('register.tpl'); + } break; } diff --git a/system/controllers/routers.php b/system/controllers/routers.php index 190c91ae..9acd9adf 100644 --- a/system/controllers/routers.php +++ b/system/controllers/routers.php @@ -130,9 +130,17 @@ switch ($action) { } if($d['name'] != $name){ - $c = ORM::for_table('tbl_routers')->where('ip_address',$ip_address)->find_one(); + $c = ORM::for_table('tbl_routers')->where('name',$name)->where_not_equal('id',$id)->find_one(); if($c){ - $msg .= $_L['Router_already_exist']. '<br>'; + $msg .= 'Name Already Exists<br>'; + } + } + $oldname = $d['name']; + + if($d['ip_address'] != $ip_address){ + $c = ORM::for_table('tbl_routers')->where('ip_address',$ip_address)->where_not_equal('id',$id)->find_one(); + if($c){ + $msg .= 'IP Already Exists<br>'; } } @@ -152,6 +160,24 @@ switch ($action) { $d->password = $password; $d->description = $description; $d->save(); + $p = ORM::for_table('tbl_plans')->where('routers',$oldname)->find_result_set(); + $p->set('routers',$name); + $p->save(); + $p = ORM::for_table('tbl_payment_gateway')->where('routers',$oldname)->find_result_set(); + $p->set('routers',$name); + $p->save(); + $p = ORM::for_table('tbl_pool')->where('routers',$oldname)->find_result_set(); + $p->set('routers',$name); + $p->save(); + $p = ORM::for_table('tbl_transactions')->where('routers',$oldname)->find_result_set(); + $p->set('routers',$name); + $p->save(); + $p = ORM::for_table('tbl_user_recharges')->where('routers',$oldname)->find_result_set(); + $p->set('routers',$name); + $p->save(); + $p = ORM::for_table('tbl_voucher')->where('routers',$oldname)->find_result_set(); + $p->set('routers',$name); + $p->save(); r2(U . 'routers/list', 's', $_L['Updated_Successfully']); }else{ r2(U . 'routers/edit/'.$id, 'e', $msg); diff --git a/system/controllers/settings.php b/system/controllers/settings.php index 8aa24954..74b5b160 100644 --- a/system/controllers/settings.php +++ b/system/controllers/settings.php @@ -203,6 +203,7 @@ switch ($action) { $telegram_bot = _post('telegram_bot'); $telegram_target_id = _post('telegram_target_id'); $sms_url = _post('sms_url'); + $wa_url = _post('wa_url'); $address = _post('address'); $payment_gateway = _post('payment_gateway'); if ($company == '') { @@ -254,6 +255,17 @@ switch ($action) { $d->save(); } + $d = ORM::for_table('tbl_appconfig')->where('setting', 'wa_url')->find_one(); + if($d){ + $d->value = $wa_url; + $d->save(); + }else{ + $d = ORM::for_table('tbl_appconfig')->create(); + $d->setting = 'wa_url'; + $d->value = $wa_url; + $d->save(); + } + $d = ORM::for_table('tbl_appconfig')->where('setting', 'payment_gateway')->find_one(); if($d){ $d->value = $payment_gateway; diff --git a/system/lan/indonesia/common.lan.php b/system/lan/indonesia/common.lan.php index a8fef15c..6259ed43 100644 --- a/system/lan/indonesia/common.lan.php +++ b/system/lan/indonesia/common.lan.php @@ -244,3 +244,13 @@ $_L['Name_Lang'] = 'Nama Bahasa'; $_L['Folder_Lang'] = 'Nama Folder'; $_L['Translator'] = 'Translator'; $_L['Lang_already_exist'] = 'Nama bahasa sudah ada'; +$_L['Payment_Gateway'] = 'Payment Gateway'; +$_L['Community'] = 'Community'; +$_L['Cannot_be_change_after_saved'] = 'Cannot be change after saved'; +$_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'; diff --git a/system/paymentgateway/channel_midtrans.json b/system/paymentgateway/channel_midtrans.json new file mode 100644 index 00000000..7794c156 --- /dev/null +++ b/system/paymentgateway/channel_midtrans.json @@ -0,0 +1,82 @@ +[ + { + "id": "credit_card", + "name": "Credit Card", + "min": 10000 + }, + { + "id": "bca_va", + "name": "BCA", + "min": 10000 + }, + { + "id": "permata_va", + "name": "Permata", + "min": 10000 + }, + { + "id": "bni_va", + "name": "BNI", + "min": 10000 + }, + { + "id": "bri_va", + "name": "BRI", + "min": 10000 + }, + { + "id": "echannel", + "name": "Mandiri Bill", + "min": 10000 + }, + { + "id": "gopay", + "name": "Gopay", + "min": 1000 + }, + { + "id": "bca_klikbca", + "name": "KLIKBCA", + "min": 10000 + }, + { + "id": "bca_klikpay", + "name": "BCA KLIKPAY", + "min": 10000 + }, + { + "id": "cimb_clicks", + "name": "CIMB Clicks", + "min": 10000 + }, + { + "id": "danamon_online", + "name": "Danamon", + "min": 5000 + }, + { + "id": "bri_epay", + "name": "BRImo", + "min": 10000 + }, + { + "id": "indomaret", + "name": "Indomaret", + "min": 5000 + }, + { + "id": "alfamart", + "name": "Alfamart", + "min": 5000 + }, + { + "id": "ShopeePay", + "name": "ShopeePay", + "min": 1000 + }, + { + "id": "uob_ezpay", + "name": "UOB EZ Pay", + "min": 1000 + } +] diff --git a/system/paymentgateway/channel_tripay.json b/system/paymentgateway/channel_tripay.json new file mode 100644 index 00000000..9f1d8b78 --- /dev/null +++ b/system/paymentgateway/channel_tripay.json @@ -0,0 +1,92 @@ +[ + { + "id": "PERMATAVA", + "name": "Permata Bank", + "min": 10000 + }, + { + "id": "MYBVA", + "name": "Maybank", + "min": 10000 + }, + { + "id": "BNIVA", + "name": "BNI", + "min": 10000 + }, + { + "id": "BRIVA", + "name": "BRI", + "min": 10000 + }, + { + "id": "MANDIRIVA", + "name": "Mandiri", + "min": 10000 + }, + { + "id": "BCAVA", + "name": "BCA", + "min": 10000 + }, + { + "id": "SMSVA", + "name": "Sinarmas", + "min": 10000 + }, + { + "id": "MUAMALATVA", + "name": "Muamalat", + "min": 10000 + }, + { + "id": "SAMPOERNAVA", + "name": "Sahabat Sampoerna", + "min": 10000 + }, + { + "id": "BSIVA", + "name": "BSI", + "min": 10000 + }, + { + "id": "ALFAMART", + "name": "Alfamart ", + "min": 5000 + }, + { + "id": "INDOMARET", + "name": "Indomaret ", + "min": 10000 + }, + { + "id": "ALFAMIDI", + "name": "Alfamidi ", + "min": 5000 + }, + { + "id": "OVO", + "name": "OVO", + "min": 1000 + }, + { + "id": "QRIS", + "name": "QRIS by ShopeePay", + "min": 1000 + }, + { + "id": "QRISC", + "name": "QRIS (Customizable)", + "min": 1000 + }, + { + "id": "QRIS2", + "name": "QRIS", + "min": 1000 + }, + { + "id": "SHOPEEPAY", + "name": "ShopeePay ", + "min": 1000 + } +] diff --git a/system/paymentgateway/channel_xendit.json b/system/paymentgateway/channel_xendit.json new file mode 100644 index 00000000..00afe33b --- /dev/null +++ b/system/paymentgateway/channel_xendit.json @@ -0,0 +1,82 @@ +[ + { + "id": "CREDIT_CARD", + "name": "CREDIT CARD", + "min": 10000 + }, + { + "id": "PERMATA", + "name": "Permata Bank", + "min": 10000 + }, + { + "id": "BNI", + "name": "BNI", + "min": 10000 + }, + { + "id": "BRI", + "name": "BRI", + "min": 10000 + }, + { + "id": "MANDIRI", + "name": "Mandiri", + "min": 10000 + }, + { + "id": "BCA", + "name": "BCA", + "min": 10000 + }, + { + "id": "BSI", + "name": "BSI", + "min": 10000 + }, + { + "id": "DD_BRI", + "name": "Direct Debit BRI", + "min": 10000 + }, + { + "id": "DD_BCA_KLIKPAY", + "name": "Direct Debit BCA KLIKPAY", + "min": 10000 + }, + { + "id": "ALFAMART", + "name": "Alfamart ", + "min": 5000 + }, + { + "id": "INDOMARET", + "name": "Indomaret ", + "min": 10000 + }, + { + "id": "OVO", + "name": "OVO", + "min": 1000 + }, + { + "id": "DANA", + "name": "DANA", + "min": 1000 + }, + { + "id": "LINKAJA", + "name": "LinkAja", + "min": 1000 + }, + { + "id": "SHOPEEPAY", + "name": "ShopeePay ", + "min": 1000 + }, + { + "id": "QRIS", + "name": "QRIS", + "min": 1000 + } +] diff --git a/ui/ui/app-midtrans.tpl b/ui/ui/app-midtrans.tpl index 7a19ce89..c3b7000d 100644 --- a/ui/ui/app-midtrans.tpl +++ b/ui/ui/app-midtrans.tpl @@ -28,8 +28,8 @@ <div class="form-group"> <label class="col-md-2 control-label">Payment Notification URL</label> <div class="col-md-6"> - <input type="text" readonly class="form-control" value="{$_url}callback/midtrans"> - <p class="help-block">Payment Notification URL, Recurring Notification URL, Pay Account Notification URL</p> + <input type="text" readonly class="form-control" onclick="this.select()" value="{$_url}callback/midtrans"> + <p class="help-block">{Lang::T('Payment Notification URL, Recurring Notification URL, Pay Account Notification URL')}</p> <a href="https://dashboard.midtrans.com/settings/vtweb_configuration" target="_blank" class="help-block">https://dashboard.midtrans.com/settings/vtweb_configuration</a> </div> </div> @@ -37,11 +37,19 @@ <div class="form-group"> <label class="col-md-2 control-label">Finish Redirect URL</label> <div class="col-md-6"> - <input type="text" readonly class="form-control" value="{$_url}accounts/transaction"> - <p class="help-block">Finish Redirect URL, Unfinish Redirect URL, Error Redirect URL</p> + <input type="text" readonly class="form-control" onclick="this.select()" value="{$_url}accounts/transaction"> + <p class="help-block">{Lang::T('Finish Redirect URL, Unfinish Redirect URL, Error Redirect URL')}</p> <a href="https://dashboard.midtrans.com/settings/vtweb_configuration" target="_blank" class="help-block">https://dashboard.midtrans.com/settings/vtweb_configuration</a> </div> </div> + <div class="form-group"> + <label class="col-md-2 control-label">Channels</label> + <div class="col-md-6"> + {foreach $channels as $channel} + <label class="checkbox-inline"><input type="checkbox" {if strpos($_c['midtrans_channel'], $channel['id']) !== false}checked="true"{/if} id="midtrans_channel" name="midtrans_channel[]" value="{$channel['id']}"> {$channel['name']}</label> + {/foreach} + </div> + </div> <div class="form-group"> <div class="col-lg-offset-2 col-lg-10"> <button class="btn btn-primary waves-effect waves-light" type="submit">{$_L['Save']}</button> diff --git a/ui/ui/app-settings.tpl b/ui/ui/app-settings.tpl index 500e35de..fec09055 100644 --- a/ui/ui/app-settings.tpl +++ b/ui/ui/app-settings.tpl @@ -52,12 +52,22 @@ </div> </div> </div> + <div class="panel-heading">SMS OTP Registration</div> + <div class="panel-body"> + <div class="form-group"> + <label class="col-md-2 control-label">SMS Server URL</label> + <div class="col-md-6"> + <input type="text" class="form-control" id="sms_url" name="sms_url" value="{$_c['sms_url']}" placeholder="https://domain/?param_number=[number]¶m_text=[text]&secret="> + <p class="help-block">Must include <b>[text]</b> & <b>[number]</b>, it will be replaced.</p> + </div> + </div> + </div> <div class="panel-heading">Whatsapp Notification</div> <div class="panel-body"> <div class="form-group"> - <label class="col-md-2 control-label">Server URL</label> + <label class="col-md-2 control-label">Whatsapp Server URL</label> <div class="col-md-6"> - <input type="text" class="form-control" id="sms_url" name="sms_url" value="{$_c['sms_url']}" placeholder="https://domain/?param_number=[number]¶m_text=[text]&secret="> + <input type="text" class="form-control" id="wa_url" name="wa_url" value="{$_c['wa_url']}" placeholder="https://domain/?param_number=[number]¶m_text=[text]&secret="> <p class="help-block">Must include <b>[text]</b> & <b>[number]</b>, it will be replaced.</p> </div> </div> diff --git a/ui/ui/app-tripay.tpl b/ui/ui/app-tripay.tpl new file mode 100644 index 00000000..c2d2f101 --- /dev/null +++ b/ui/ui/app-tripay.tpl @@ -0,0 +1,53 @@ +{include file="sections/header.tpl"} + +<form class="form-horizontal" method="post" role="form" action="{$_url}paymentgateway/tripay-post" > + <div class="row"> + <div class="col-sm-12 col-md-12"> + <div class="panel panel-default panel-hovered panel-stacked mb30"> + <div class="panel-heading">Tripay</div> + <div class="panel-body"> + <div class="form-group"> + <label class="col-md-2 control-label">Kode Merchant</label> + <div class="col-md-6"> + <input type="text" class="form-control" id="tripay_merchant" name="tripay_merchant" placeholder="T" value="{$_c['tripay_merchant']}"> + </div> + </div> + <div class="form-group"> + <label class="col-md-2 control-label">API Key</label> + <div class="col-md-6"> + <input type="text" class="form-control" id="tripay_api_key" name="tripay_api_key" value="{$_c['tripay_api_key']}"> + </div> + </div> + <div class="form-group"> + <label class="col-md-2 control-label">Secret Key</label> + <div class="col-md-6"> + <input type="text" class="form-control" id="tripay_secret_key" name="tripay_secret_key" value="{$_c['tripay_secret_key']}"> + </div> + </div> + <div class="form-group"> + <label class="col-md-2 control-label">Callback URL</label> + <div class="col-md-6"> + <input type="text" readonly class="form-control" onclick="this.select()" value="{$_url}callback/tripay"> + </div> + </div> + <div class="form-group"> + <label class="col-md-2 control-label">Channels</label> + <div class="col-md-6"> + {foreach $channels as $channel} + <label class="checkbox-inline"><input type="checkbox" {if strpos($_c['tripay_channel'], $channel['id']) !== false}checked="true"{/if} id="tripay_channel" name="tripay_channel[]" value="{$channel['id']}"> {$channel['name']}</label> + {/foreach} + </div> + </div> + <div class="form-group"> + <div class="col-lg-offset-2 col-lg-10"> + <button class="btn btn-primary waves-effect waves-light" type="submit">{$_L['Save']}</button> + <a class="btn btn-info waves-effect waves-light" href="https://tripay.co.id/?ref=TP19304" target="_blank">Daftar Tripay</a> + </div> + </div> + </div> + </div> + + </div> + </div> +</form> +{include file="sections/footer.tpl"} diff --git a/ui/ui/app-xendit.tpl b/ui/ui/app-xendit.tpl index f1e4d693..a3f043af 100644 --- a/ui/ui/app-xendit.tpl +++ b/ui/ui/app-xendit.tpl @@ -28,6 +28,14 @@ <a href="https://dashboard.xendit.co/settings/developers#callbacks" target="_blank" class="help-block">https://dashboard.xendit.co/settings/developers#callbacks</a> </div> </div> + <div class="form-group"> + <label class="col-md-2 control-label">Channels</label> + <div class="col-md-6"> + {foreach $channels as $channel} + <label class="checkbox-inline"><input type="checkbox" {if strpos($_c['xendit_channel'], $channel['id']) !== false}checked="true"{/if} id="xendit_channel" name="xendit_channel[]" value="{$channel['id']}"> {$channel['name']}</label> + {/foreach} + </div> + </div> <div class="form-group"> <div class="col-lg-offset-2 col-lg-10"> <button class="btn btn-primary waves-effect waves-light" type="submit">{$_L['Save']}</button> diff --git a/ui/ui/community.tpl b/ui/ui/community.tpl new file mode 100644 index 00000000..bb20bb6a --- /dev/null +++ b/ui/ui/community.tpl @@ -0,0 +1,112 @@ +{include file="sections/header.tpl"} + + <div class="row"> + <div class="col-sm-6"> + <div class="panel panel-hovered mb20 panel-default"> + <div class="panel-heading">Discussions</div> + <div class="panel-body">Get help from community</div> + <div class="panel-footer"> + <a href="https://github.com/ibnux/phpmixbill/discussions" target="_blank" class="btn btn-primary btn-lg btn-block"><i class="ion ion-chatboxes"></i> Chat Now</a> + </div> + </div> + </div> + <div class="col-sm-6"> + <div class="panel panel-hovered mb20 panel-default"> + <div class="panel-heading">Feedback</div> + <div class="panel-body"> + Feedback and Bug Report + </div> + <div class="panel-footer"> + <a href="https://github.com/ibnux/phpmixbill/issues" target="_blank" class="btn btn-primary btn-lg btn-block"><i class="ion ion-chatboxes"></i> Give Feedback</a> + </div> + </div> + </div> + </div> + + <div class="row"> + <div class="col-sm-6"> + <div class="panel panel-hovered mb20 panel-default"> + <div class="panel-heading">Donasi</div> + <div class="panel-body">Untuk pengembangan lebih baik, donasi ke iBNuX, donasi akan membantu terus pengembangan aplikasi</div> + <div class="table-responsive"> + <table class="table table-bordered table-striped"> + <tbody> + <tr> + <td>BCA</td> + <td>5410-454-825</td> + </tr> + <tr> + <td>Mandiri</td> + <td>163-000-1855-793</td> + </tr> + <tr> + <td>Atas nama</td> + <td>Ibnu Maksum</td> + </tr> + </tbody> + </table> + </div> + <div class="panel-footer"> + <a href="https://trakteer.id/ibnux" target="_blank" class="btn btn-primary btn-lg btn-block">Trakteer</a> + <a href="https://karyakarsa.com/ibnux/support" target="_blank" class="btn btn-primary btn-lg btn-block">karyakarsa</a> + </div> + </div> + </div> + <div class="col-sm-6"> + <div class="panel panel-hovered mb20 panel-default"> + <div class="panel-heading">Donations</div> + <div class="panel-body"> + Donations will help to continue phpmixbill development + </div> + <div class="table-responsive"> + <table class="table table-bordered table-striped"> + <tbody> + <tr> + <td>Bank Central Asia</td> + <td>5410-454-825</td> + </tr> + <tr> + <td>SWIFT/BIC</td> + <td>CENAIDJA</td> + </tr> + <tr> + <td>Jakarta</td> + <td>Indonesia</td> + </tr> + <tr> + <td>Account Name</td> + <td>Ibnu Maksum</td> + </tr> + </tbody> + </table> + </div> + <div class="panel-footer"> + <a href="https://paypal.me/ibnux" target="_blank" class="btn btn-primary btn-lg btn-block">Paypal</a> + </div> + </div> + </div> + </div> + <div class="row"> + <div class="col-sm-6"> + <div class="panel panel-hovered mb20 panel-default"> + <div class="panel-heading">Chat with me</div> + <div class="panel-body">Paid Support?<br>donation confirmation?<br>Or ask any Donation Alternative</div> + <div class="panel-footer"> + <a href="https://t.me/ibnux" target="_blank" class="btn btn-primary btn-lg btn-block">Telegram</a> + <a href="https://twitter.com/messages/compose?recipient_id=20653807&text=Hello+i+am+phpmixbill+user" target="_blank" class="btn btn-primary btn-lg btn-block">Twitter</a> + <a href="https://m.me/ibnumaksum" target="_blank" class="btn btn-primary btn-lg btn-block">Facebook Messenger</a> + <a href="https://keybase.io/ibnux" target="_blank" class="btn btn-primary btn-lg btn-block">Keybase</a> + </div> + </div> + </div> + <div class="col-sm-6"> + <div class="panel panel-default panel-hovered mb20 activities"> + <div class="panel-heading">PHPMIXBILL</div> + <div class="panel-body"> + {$_L['Welcome_Text_Admin']} + </div> + </div> + </div> + </div> + +{include file="sections/footer.tpl"} diff --git a/ui/ui/dashboard.tpl b/ui/ui/dashboard.tpl index b0481791..2ed62919 100644 --- a/ui/ui/dashboard.tpl +++ b/ui/ui/dashboard.tpl @@ -84,7 +84,7 @@ <div class="col-md-7"> <div class="panel panel-default mb20 panel-hovered project-stats table-responsive"> <div class="panel-heading">Vouchers Stock</div> - <div class="panel-body"> + <div class="panel-body"> <table class="table"> <thead> <tr> @@ -137,7 +137,7 @@ </div> </div> </div> - + <div class="col-md-5"> <div class="panel panel-default panel-hovered mb20 activities"> <div class="panel-heading">{$_L['Activity_Log']}</div> @@ -153,14 +153,8 @@ </ul> </div> </div> - <div class="panel panel-default panel-hovered mb20 activities"> - <div class="panel-heading">PHPMIXBILL</div> - <div class="panel-body"> - {$_L['Welcome_Text_Admin']} - </div> - </div> </div> - + </div> {else} <div class="row"> @@ -204,7 +198,7 @@ <p class="small mb15">{date($_c['date_format'], strtotime($_bill['expiration']))} {$_bill['time']}</p> </div> </div> - + </div> </div> </div> diff --git a/ui/ui/hotspot-add.tpl b/ui/ui/hotspot-add.tpl index abaf8b5c..d3338abc 100644 --- a/ui/ui/hotspot-add.tpl +++ b/ui/ui/hotspot-add.tpl @@ -11,6 +11,7 @@ <label class="col-md-2 control-label">{$_L['Plan_Name']}</label> <div class="col-md-6"> <input type="text" class="form-control" id="name" name="name"> + <p class="help-block">{Lang::T('Cannot be change after saved')}</p> </div> </div> <div class="form-group"> @@ -79,6 +80,7 @@ <label class="col-md-2 control-label">{$_L['Shared_Users']}</label> <div class="col-md-6"> <input type="text" class="form-control" id="sharedusers" name="sharedusers" value="1"> + <p class="help-block">{Lang::T('1 user can be used for many devices?')}</p> </div> </div> <div class="form-group"> @@ -103,6 +105,7 @@ <option value="{$rs['name']}">{$rs['name']}</option> {/foreach} </select> + <p class="help-block">{Lang::T('Cannot be change after saved')}</p> </div> </div> diff --git a/ui/ui/sections/header.tpl b/ui/ui/sections/header.tpl index d320375c..2ef93717 100644 --- a/ui/ui/sections/header.tpl +++ b/ui/ui/sections/header.tpl @@ -23,7 +23,6 @@ <link rel="stylesheet" href="{$_theme}/styles/bootstrap.min.css"> <link rel="stylesheet" href="{$_theme}/styles/main.min.css"> - <link href='http://fonts.googleapis.com/css?family=Roboto:400,500,700,300' rel='stylesheet' type='text/css'> <!-- Match Media polyfill for IE9 --> <!--[if IE 9]> <script src="{$_theme}/scripts/ie/matchMedia.js"></script> <![endif]--> @@ -53,7 +52,7 @@ <li> <div class="site-logo visible-xs"> <a href="{$_url}dashboard" class="text-uppercase h3"> - <span class="text">{$_L['Logo']}</span> + <span class="text">{Lang::T('Logo')}</span> </a> </div> </li> @@ -265,19 +264,20 @@ <li {if $_system_menu eq 'paymentgateway'}class="open"{/if}> <a href="#" onClick="toggleDropdownMobile(this)"> <i class="ion ion-cash"></i> - <span class="text">Payment Gateway</span> + <span class="text">{Lang::T('Payment Gateway')}</span> <i class="arrow ion-chevron-left"></i> </a> <ul class="inner-drop list-unstyled"> <li {if $_system_menu eq 'paymentgateway'}class="active"{/if}><a href="{$_url}paymentgateway/xendit">Xendit</a></li> <li {if $_system_menu eq 'paymentgateway'}class="active"{/if}><a href="{$_url}paymentgateway/midtrans">Midtrans</a></li> + <li {if $_system_menu eq 'paymentgateway'}class="active"{/if}><a href="{$_url}paymentgateway/tripay">Tripay</a></li> <li> </li> </ul> </li> - <li {if $_system_menu eq 'disquss'}class="active"{/if}> - <a href="https://github.com/ibnux/phpmixbill/discussions" target="_blank"> - <i class="ion ion-chatbubbles"></i> - <span class="text">Discussions</span> + <li {if $_system_menu eq 'community'}class="active"{/if}> + <a href="{$_url}community"> + <i class="ion ion-chatboxes"></i> + <span class="text">{Lang::T('Community')}</span> </a> </li> {/if}