Compare commits

...

13 Commits

Author SHA1 Message Date
24d7ef3f2d Fix login, register, dashboard, + pengumuman
Tampilan login dan register diubah
Error include file diperbaiki
logout diperbaiki
penambahan pengumuman dan informasi saat registrasi
2017-03-23 02:25:45 +07:00
0f7268ba13 remove config 2017-03-22 01:53:31 +07:00
a47f9cb201 Merge branch 'master' of github.com:ibnux/phpmixbill 2017-03-22 01:52:41 +07:00
e7cdacfae4 update diskusi, tambahin github pages 2017-03-22 01:50:29 +07:00
12fa57ab1c Set theme jekyll-theme-cayman 2017-03-22 01:13:57 +07:00
cdc9e5f9d8 limit uptime dan kuota masuk Mikrotik, setting pilih Tema dihapus 2017-03-22 01:07:15 +07:00
8c5ef4faff Upload sample Voucher 2017-03-19 07:31:15 +07:00
d21e20c20a Voucher Template, Disquss, static pages, bug menu
Voucher template di kanan bisa diganti, di kiri permanen, silahkan edit di themes kalo mau. Disquss untuk diskusi, static pages untuk kenten statis jarang diubah, ada bug di menu kalo di mobile tidak bisa di klik menu kanan nya, diperbaiki dengan cara paksa
2017-03-19 07:02:14 +07:00
7fbae8f280 Voucher Template, Disquss, static pages, bug menu
Voucher template di kanan bisa diganti, di kiri permanen, silahkan edit di themes kalo mau. Disquss untuk diskusi, static pages untuk kenten statis jarang diubah, ada bug di menu kalo di mobile tidak bisa di klik menu kanan nya, diperbaiki dengan cara paksa
2017-03-19 07:01:43 +07:00
ab563e5005 print voucher, update dashboard, hide messages 2017-03-15 02:37:15 +07:00
b6c55ff5a9 just added self Registration,
customer must have voucher before register
2017-03-14 05:15:08 +07:00
2e34fa46e5 update readme 2017-03-11 05:24:50 +07:00
a895c8ad6c adding gitignore, fix readme, add info to cron 2017-03-11 05:22:27 +07:00
55 changed files with 1538 additions and 178 deletions

BIN
.DS_Store vendored

Binary file not shown.

5
.gitignore vendored
View File

@ -1 +1,4 @@
/system/config.php /system/config.php
.DS_Store
.vscode/
ui/compiled/*.php

View File

@ -1,12 +1,30 @@
# PHP Mikrotik Billing # PHP Mikrotik Billing
---- ----
[![N|phpmixbill](http://4.bp.blogspot.com/-3OWL5OI7pqU/VjocUDdzMDI/AAAAAAAAAiA/s_XJN0_mDlk/s640/Screenshot_8.png) @ibnux notes:
----
> The project maybe has been abandoned,
> maybe the dev busy,
> and nobody donate to him,
> i will try to update as far as i can,
> any Modification will be update in here.
### iBNuX Todos
- Self registration, user must have voucher before registration
- SMS Notification for expired account
- PUSH Notification using onesignal
- embedable for mikrotik login template
----
![N|phpmixbill](http://4.bp.blogspot.com/-3OWL5OI7pqU/VjocUDdzMDI/AAAAAAAAAiA/s_XJN0_mDlk/s640/Screenshot_8.png)
www.phpmixbill.com www.phpmixbill.com
by Ismail Marzuqi by Ismail Marzuqi
New Features: New Features:
=================================================== ----
- New Coding (ORM & Smarty) - New Coding (ORM & Smarty)
- New Design (responsive) - New Design (responsive)
- NEW API Mikrotik (PEAR2_Net_RouterOS) - NEW API Mikrotik (PEAR2_Net_RouterOS)
@ -17,13 +35,13 @@ New Features:
and many more... and many more...
STEPS: Installation STEPS: Installation
=================================================== ----
Auto Installer: Auto Installer:
1. Unzip the contents of the zip file to a folder on your computer. 1. Unzip the contents of the zip file to a folder on your computer.
2. Upload the Entire phpmixbill_v5.0 folder to your website / server 2. Upload the Entire phpmixbill folder to your website / server
3. Next you can rename the folder to whatever you like (billing, finance, manage etc..) 3. Next you can rename the folder to whatever you like (billing, finance, manage etc..)
4. Now visit the uploaded location using your web browser to run the installer process. 4. Now visit the uploaded location using your web browser to run the installer process.
5. Follow the instructions on screen to install PHPMixBill v5.0. 5. Follow the instructions on screen to install PHPMixBill
6. For security, Delete the install directory inside system folder. 6. For security, Delete the install directory inside system folder.
7. If you see blank page after installation, it might be your compiled folder permissoon is not writable. Please make permission 755 compiled directory inside ui folder to store the generated contents from theme. 7. If you see blank page after installation, it might be your compiled folder permissoon is not writable. Please make permission 755 compiled directory inside ui folder to store the generated contents from theme.
@ -31,14 +49,23 @@ Manual Install:
To install manually, follow this steps- To install manually, follow this steps-
1. Unzip the contents of the zip file to a folder on your computer. 1. Unzip the contents of the zip file to a folder on your computer.
2. Upload the Entire phpmixbill_v5.0 folder to your website / server 2. Upload the Entire phpmixbill folder to your website / server
3. Next you can rename the folder to whatever you like (billing, finance, manage etc..) 3. Next you can rename the folder to whatever you like (billing, finance, manage etc..)
4. Sample config file is available here- system/config.sample.php . Rename it to config.php & put it in same location (/system/config.php) Open config file using a text editor & Put the database info and url. 4. Sample config file is available here- system/config.sample.php . Rename it to config.php & put it in same location (/system/config.php) Open config file using a text editor & Put the database info and url.
5. Import database. Database file is located here- system/install/phpmixbill.sql 5. Import database. Database file is located here- system/install/phpmixbill.sql
6. For security, Delete the install directory inside sysfrm folder. 6. For security, Delete the install directory inside system folder.
CRON JOBS
----
Run Every 4 Hours
```sh
crontab -e
0 0,4,8,12,16,20 * * * /usr/bin/php -f /path/to/phpmixbill/system/cron.php
```
Every system have different configuration for crontab
System Requirements System Requirements
==================================================== ----
Most current web servers with PHP & MySQL installed will be capable of running PHPMixBill v5.0. Most current web servers with PHP & MySQL installed will be capable of running PHPMixBill v5.0.
Minimum Requirements Minimum Requirements
@ -55,5 +82,24 @@ copyright
License License
---- ----
GNU General Public License version 2 or later; see LICENSE.txt GNU General Public License version 2 or later
@donate PayPal: iesien22@yahoo.com / Bank Mandiri: 130.00.1024957.4
see LICENSE file
Donate to first Developer
----
PayPal: iesien22@yahoo.com
Bank Mandiri: 130.00.1024957.4
Donate to ibnux
----
[![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=6RBNGRJMZVV7C)
BCA: 5410454825
Mandiri: 163-000-1855-793
a.n Ibnu Maksum

Binary file not shown.

After

Width:  |  Height:  |  Size: 178 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

View File

72
docs/diskusi.html Normal file
View File

@ -0,0 +1,72 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>PHPMIXBILL - Voucher management for Mikrotik Hotspot</title>
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<!-- Optional theme -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous">
<style>
@-ms-viewport { width: device-width; }
@-o-viewport { width: device-width; }
@viewport { width: device-width; }
body {
padding-top: 50px;
}
.starter-template {
padding: 40px 15px;
text-align: center;
}
</style>
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->
</head>
<body>
<div class="container">
<div class="starter-template">
<h1>PHP PHPMIXBILL</h1>
<p class="lead">Aplikasi manajemen Voucher Hotspot untuk Mikrotik</p>
<div class="btn-group btn-group-justified" role="group">
<a href="https://github.com/ibnux/phpmixbill/releases" class="btn btn-primary">Download</a>
<a href="https://github.com/ibnux/phpmixbill" class="btn btn-success">Source</a>
</div>
</div>
<div class="row">
<div class="col-sm-12">
<div class="panel panel-hovered mb20 panel-default">
<div class="panel-heading">Public Disquss</div>
<div class="panel-body">
<div id="disqus_thread"></div>
<script>
var disqus_config = function () {
this.page.url = "https://ibnux.github.io/phpmixbill/diskusi.html"; // Replace PAGE_URL with your page's canonical URL variable
this.page.identifier = "phpmixbill"; // Replace PAGE_IDENTIFIER with your page's unique identifier variable
};
(function() { // DON'T EDIT BELOW THIS LINE
var d = document, s = d.createElement('script');
s.src = 'https://phpmixbill.disqus.com/embed.js';
s.setAttribute('data-timestamp', +new Date());
(d.head || d.body).appendChild(s);
})();
</script>
<noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
</div>
</div>
</div>
</div>
</div><!-- /.container -->
</body>
</html>

50
docs/index.html Normal file
View File

@ -0,0 +1,50 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>PHPMIXBILL - Voucher management for Mikrotik Hotspot</title>
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<!-- Optional theme -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous">
<style>
@-ms-viewport { width: device-width; }
@-o-viewport { width: device-width; }
@viewport { width: device-width; }
body {
padding-top: 50px;
}
.starter-template {
padding: 40px 15px;
text-align: center;
}
</style>
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->
</head>
<body>
<div class="container">
<div class="starter-template">
<h1>PHPMIXBILL</h1>
<p class="lead">Aplikasi manajemen Voucher Hotspot untuk Mikrotik</p>
<div class="btn-group btn-group-justified" role="group">
<a href="https://github.com/ibnux/phpmixbill/releases" class="btn btn-primary">Download</a>
<a href="https://github.com/ibnux/phpmixbill" class="btn btn-success">Source</a>
<a href="https://ibnux.github.io/phpmixbill/diskusi.html" class="btn btn-info">Disquss</a>
</div>
</div>
</div><!-- /.container -->
</body>
</html>

View File

@ -7,6 +7,8 @@
* @license GNU General Public License version 2 or later; see LICENSE.txt * @license GNU General Public License version 2 or later; see LICENSE.txt
* @donate PayPal: iesien22@yahoo.com / Bank Mandiri: 130.00.1024957.4 * @donate PayPal: iesien22@yahoo.com / Bank Mandiri: 130.00.1024957.4
**/ **/
//ini_set('display_errors', 1);
//ini_set('display_startup_errors', 1);
//error_reporting(E_ALL);
require ('system/boot.php'); require ('system/boot.php');
App::_run(); App::_run();

1
pages/Announcement.html Normal file
View File

@ -0,0 +1 @@
Pengumuman!!<br>Besok libur<br><br>Announcement!!<br>Tomorrow holiday<br>

1
pages/Order_Voucher.html Normal file
View File

@ -0,0 +1 @@
You can buy a voucher in my home<br><br><br>Dapatkan Voucher Internet di Warung terdekat

View File

@ -0,0 +1,2 @@
Before you registered, you must Buy Voucher first<br><br>
Sebelum mendaftar pastikan anda membeli voucher terlebih dahulu

31
pages/Voucher.html Normal file
View File

@ -0,0 +1,31 @@
<center><strong style="font-size:38px">{$_c['CompanyName']}</strong></center>
<table width="100%" border="1" cellspacing="0" cellpadding="4" bordercolor="#757575">
<tbody>
<tr>
<td valign="top" align="left">Pendaftaran dan Informasi Billing buka <b>billing.ibnux.net</b></td>
</tr>
<tr>
<td valign="top" align="left">Wireless Hotspot:
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr>
<td>iBNuXnet</td>
<td>iBNuXnet-P</td>
<td>iBNuXnet-Q</td>
</tr>
<tr>
<td>CitraGadingBlokP 3/4</td>
<td>CitraGadingBlokQ 2/3/4/5/6</td>
<td>iBNuXnet 5Ghz</td>
</tr>
</table>
</td>
</tr>
<tr>
<td valign="top" align="left">Voucher yang sudah dibeli tidak dapat dikembalikan</td>
</tr>
<tr>
<td valign="top" align="center"><b>hotspot.ibnux.net</b></td>
</tr>
</tbody>
</table>

8
pages/index.html Normal file
View File

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

BIN
system/.DS_Store vendored

Binary file not shown.

View File

@ -80,6 +80,7 @@ $ui->assign('app_url', APP_URL);
define('U', APP_URL.'/index.php?_route='); define('U', APP_URL.'/index.php?_route=');
$ui->assign('_url', APP_URL.'/index.php?_route='); $ui->assign('_url', APP_URL.'/index.php?_route=');
$ui->assign('_theme', $_theme); $ui->assign('_theme', $_theme);
$ui->assign('_path', __DIR__);
$ui->assign('_c', $config); $ui->assign('_c', $config);
$ui->assign('_L', $_L); $ui->assign('_L', $_L);
$ui->assign('_system_menu', 'dashboard'); $ui->assign('_system_menu', 'dashboard');
@ -110,12 +111,25 @@ if (isset($_SESSION['notify'])) {
unset($_SESSION['ntype']); unset($_SESSION['ntype']);
} }
// on some server, it getting error because of slash is backwards
function _autoloader($class) { function _autoloader($class) {
if (strpos($class, '_') !== false) { if (strpos($class, '_') !== false) {
$class = str_replace('_','/',$class); $class = str_replace('_','/',$class);
include 'autoload/' . $class . '.php'; if(file_exists('autoload/' . $class . '.php')){
include 'autoload/' . $class . '.php';
}else{
$class = str_replace("\\","/",$class);
if(file_exists(__DIR__.'/autoload/' . $class . '.php'))
include __DIR__.'/autoload/' . $class . '.php';
}
} else{ } else{
include 'autoload/' . $class . '.php'; if(file_exists('autoload/' . $class . '.php')){
include 'autoload/' . $class . '.php';
}else{
$class = str_replace("\\","/",$class);
if(file_exists(__DIR__.'/autoload/' . $class . '.php'))
include __DIR__.'/autoload/' . $class . '.php';
}
} }
} }

View File

@ -113,11 +113,19 @@ switch ($action) {
$removeRequest->setArgument('numbers', $id); $removeRequest->setArgument('numbers', $id);
$client->sendSync($removeRequest); $client->sendSync($removeRequest);
} }
$d->delete(); try{
$c->delete(); $d->delete();
}catch(Exception $e){}
try{
$c->delete();
}catch(Exception $e){}
}else{ }else{
$d->delete(); try{
$c->delete(); $d->delete();
}catch(Exception $e){}
try{
$c->delete();
}catch(Exception $e){}
} }
r2(U . 'customers/list', 's', $_L['User_Delete_Ok']); r2(U . 'customers/list', 's', $_L['User_Delete_Ok']);

View File

@ -56,4 +56,25 @@ $ui->assign('dlog',$dlog);
$log = ORM::for_table('tbl_logs')->count(); $log = ORM::for_table('tbl_logs')->count();
$ui->assign('log',$log); $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){
$plans[$n]['name_plan'] = $plan['name_plan'];
$plans[$n]['unused'] = ORM::for_table('tbl_voucher')
->where('id_plan',$plan['id'])
->where('status',0)->count();;
$stocks["unused"] += $plans[$n]['unused'];
$plans[$n]['used'] = ORM::for_table('tbl_voucher')
->where('id_plan',$plan['id'])
->where('status',1)->count();;
$stocks["used"] += $plans[$n]['used'];
$n++;
}
$ui->assign('stocks',$stocks);
$ui->assign('plans',$plans);
$ui->display('dashboard.tpl'); $ui->display('dashboard.tpl');

View File

@ -0,0 +1,23 @@
<?php
/**
* PHP Mikrotik Billing (www.phpmixbill.com)
* Ibnu Maksum <me@ibnux.net>
* @copyright Copyright (C) 2014-2015 PHP Mikrotik Billing
* @license GNU General Public License version 2 or later; see LICENSE.txt
* @donate PayPal: me@ibnux.net
**/
_admin();
$ui->assign('_title', 'Disquss - '. $config['CompanyName']);
$ui->assign('_system_menu', 'disquss');
$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) {
default:
$ui->display('disquss.tpl');
}

View File

@ -7,6 +7,6 @@
* @license GNU General Public License version 2 or later; see LICENSE.txt * @license GNU General Public License version 2 or later; see LICENSE.txt
* @donate PayPal: iesien22@yahoo.com / Bank Mandiri: 130.00.1024957.4 * @donate PayPal: iesien22@yahoo.com / Bank Mandiri: 130.00.1024957.4
**/ **/
session_start(); if (session_status() == PHP_SESSION_NONE) session_start();
session_destroy(); session_destroy();
header('location: index.php'); header('location: index.php');

View File

@ -11,10 +11,13 @@ _auth();
$ui->assign('_title', $_L['Order_Voucher'].'- '. $config['CompanyName']); $ui->assign('_title', $_L['Order_Voucher'].'- '. $config['CompanyName']);
$ui->assign('_system_menu', 'order'); $ui->assign('_system_menu', 'order');
$action = $routes['1'];
$user = User::_info(); $user = User::_info();
$ui->assign('_user', $user); $ui->assign('_user', $user);
switch ($action) { if(file_exists(__DIR__."/../../pages/".str_replace(".","",$action).".html")){
default: $ui->assign("PageFile",$action);
$ui->display('404.tpl'); $ui->assign("pageHeader",$action);
} $ui->display('user-pages.tpl');
}else
$ui->display('404.tpl');

View File

@ -0,0 +1,42 @@
<?php
/**
* PHP Mikrotik Billing (www.phpmixbill.com)
* Ismail Marzuqi <iesien22@yahoo.com>
* @version 5.0
* @copyright Copyright (C) 2014-2015 PHP Mikrotik Billing
* @license GNU General Public License version 2 or later; see LICENSE.txt
* @donate PayPal: iesien22@yahoo.com / Bank Mandiri: 130.00.1024957.4
**/
_admin();
$ui->assign('_title', 'Pages - '. $config['CompanyName']);
$ui->assign('_system_menu', 'pages');
$action = $routes['1'];
$admin = Admin::_info();
$ui->assign('_admin', $admin);
if(strpos($action,"-post")===false){
$path = __DIR__."/../../pages/".str_replace(".","",$action).".html";
//echo $path;
if(file_exists($path)){
$html = file_get_contents($path);
$ui->assign("htmls",str_replace(["<div","</div>"],"",$html));
$ui->assign("writeable",is_writable($path));
$ui->assign("pageHeader",$action);
$ui->assign("PageFile",$action);
$ui->display('page-edit.tpl');
}else
$ui->display('a404.tpl');
}else{
$action = str_replace("-post","",$action);
$path = __DIR__."/../../pages/".str_replace(".","",$action).".html";
if(file_exists($path)){
$html = _post("html");
if(file_put_contents($path, str_replace(["<div","</div>"],"",$html))){
r2(U . 'pages/'.$action, 's', $_L['Success_Save_Page']);
}else{
r2(U . 'pages/'.$action, 'e', $_L['Failed_Save_Page']);
}
}else
$ui->display('a404.tpl');
}

View File

@ -95,6 +95,7 @@ switch ($action) {
} catch (Exception $e) { } catch (Exception $e) {
die('Unable to connect to the router.'); die('Unable to connect to the router.');
} }
$printRequest = new RouterOS\Request( $printRequest = new RouterOS\Request(
'/ip hotspot user print .proplist=name', '/ip hotspot user print .proplist=name',
RouterOS\Query::where('name', $c['username']) RouterOS\Query::where('name', $c['username'])
@ -104,13 +105,59 @@ switch ($action) {
$client($removeRequest $client($removeRequest
->setArgument('numbers', $userName) ->setArgument('numbers', $userName)
); );
/* iBNuX Added:
* Time limit to Mikrotik
* 'Time_Limit', 'Data_Limit', 'Both_Limit'
*/
$addRequest = new RouterOS\Request('/ip/hotspot/user/add'); $addRequest = new RouterOS\Request('/ip/hotspot/user/add');
$client->sendSync($addRequest if($p['typebp']=="Limited"){
->setArgument('name', $c['username']) if($p['limit_type']=="Time_Limit"){
->setArgument('profile', $p['name_plan']) if($p['time_unit']=='Hrs')
->setArgument('password', $c['password']) $timelimit = $p['time_limit'].":00:00";
); else
$timelimit = "00:".$p['time_limit'].":00";
$client->sendSync($addRequest
->setArgument('name', $c['username'])
->setArgument('profile', $p['name_plan'])
->setArgument('password', $c['password'])
->setArgument('limit-uptime', $timelimit)
);
}else if($p['limit_type']=="Data_Limit"){
if($p['data_unit']=='GB')
$datalimit = $p['data_limit']."000000000";
else
$datalimit = $p['data_limit']."000000";
$client->sendSync($addRequest
->setArgument('name', $c['username'])
->setArgument('profile', $p['name_plan'])
->setArgument('password', $c['password'])
->setArgument('limit-bytes-total', $datalimit)
);
}else if($p['limit_type']=="Both_Limit"){
if($p['time_unit']=='Hrs')
$timelimit = $p['time_limit'].":00:00";
else
$timelimit = "00:".$p['time_limit'].":00";
if($p['data_unit']=='GB')
$datalimit = $p['data_limit']."000000000";
else
$datalimit = $p['data_limit']."000000";
$client->sendSync($addRequest
->setArgument('name', $c['username'])
->setArgument('profile', $p['name_plan'])
->setArgument('password', $c['password'])
->setArgument('limit-uptime', $timelimit)
->setArgument('limit-bytes-total', $datalimit)
);
}
}else{
$client->sendSync($addRequest
->setArgument('name', $c['username'])
->setArgument('profile', $p['name_plan'])
->setArgument('password', $c['password'])
);
}
$b->customer_id = $id_customer; $b->customer_id = $id_customer;
$b->username = $c['username']; $b->username = $c['username'];
$b->plan_id = $plan; $b->plan_id = $plan;
@ -144,12 +191,59 @@ switch ($action) {
} catch (Exception $e) { } catch (Exception $e) {
die('Unable to connect to the router.'); die('Unable to connect to the router.');
} }
/* iBNuX Added:
* Time limit to Mikrotik
* 'Time_Limit', 'Data_Limit', 'Both_Limit'
*/
$addRequest = new RouterOS\Request('/ip/hotspot/user/add'); $addRequest = new RouterOS\Request('/ip/hotspot/user/add');
$client->sendSync($addRequest if($p['typebp']=="Limited"){
->setArgument('name', $c['username']) if($p['limit_type']=="Time_Limit"){
->setArgument('profile', $p['name_plan']) if($p['time_unit']=='Hrs')
->setArgument('password', $c['password']) $timelimit = $p['time_limit'].":00:00";
); else
$timelimit = "00:".$p['time_limit'].":00";
$client->sendSync($addRequest
->setArgument('name', $c['username'])
->setArgument('profile', $p['name_plan'])
->setArgument('password', $c['password'])
->setArgument('limit-uptime', $timelimit)
);
}else if($p['limit_type']=="Data_Limit"){
if($p['data_unit']=='GB')
$datalimit = $p['data_limit']."000000000";
else
$datalimit = $p['data_limit']."000000";
$client->sendSync($addRequest
->setArgument('name', $c['username'])
->setArgument('profile', $p['name_plan'])
->setArgument('password', $c['password'])
->setArgument('limit-bytes-total', $datalimit)
);
}else if($p['limit_type']=="Both_Limit"){
if($p['time_unit']=='Hrs')
$timelimit = $p['time_limit'].":00:00";
else
$timelimit = "00:".$p['time_limit'].":00";
if($p['data_unit']=='GB')
$datalimit = $p['data_limit']."000000000";
else
$datalimit = $p['data_limit']."000000";
$client->sendSync($addRequest
->setArgument('name', $c['username'])
->setArgument('profile', $p['name_plan'])
->setArgument('password', $c['password'])
->setArgument('limit-uptime', $timelimit)
->setArgument('limit-bytes-total', $datalimit)
);
}
}else{
$client->sendSync($addRequest
->setArgument('name', $c['username'])
->setArgument('profile', $p['name_plan'])
->setArgument('password', $c['password'])
);
}
$d = ORM::for_table('tbl_user_recharges')->create(); $d = ORM::for_table('tbl_user_recharges')->create();
$d->customer_id = $id_customer; $d->customer_id = $id_customer;
@ -391,11 +485,20 @@ switch ($action) {
$code = _post('code'); $code = _post('code');
if ($code != ''){ if ($code != ''){
$ui->assign('code',$code);
$paginator = Paginator::bootstrap('tbl_voucher','code','%'.$code.'%'); $paginator = Paginator::bootstrap('tbl_voucher','code','%'.$code.'%');
$d = ORM::for_table('tbl_plans')->join('tbl_voucher', array('tbl_plans.id', '=', 'tbl_voucher.id_plan'))->where_like('tbl_plans.code','%'.$code.'%')->offset($paginator['startpoint'])->limit($paginator['limit'])->find_many(); $d = ORM::for_table('tbl_plans')
->join('tbl_voucher', array('tbl_plans.id', '=', 'tbl_voucher.id_plan'))
->where_like('tbl_plans.code','%'.$code.'%')
->offset($paginator['startpoint'])
->limit($paginator['limit'])
->find_many();
}else{ }else{
$paginator = Paginator::bootstrap('tbl_voucher'); $paginator = Paginator::bootstrap('tbl_voucher');
$d = ORM::for_table('tbl_plans')->join('tbl_voucher', array('tbl_plans.id', '=', 'tbl_voucher.id_plan'))->offset($paginator['startpoint'])->limit($paginator['limit'])->find_many(); $d = ORM::for_table('tbl_plans')
->join('tbl_voucher', array('tbl_plans.id', '=', 'tbl_voucher.id_plan'))
->offset($paginator['startpoint'])
->limit($paginator['limit'])->find_many();
} }
$ui->assign('d',$d); $ui->assign('d',$d);
@ -415,6 +518,83 @@ switch ($action) {
$ui->display('voucher-add.tpl'); $ui->display('voucher-add.tpl');
break; break;
case 'print-voucher':
$from_id = _post('from_id')*1;
$planid = _post('planid')*1;
$pagebreak = _post('pagebreak')*1;
$limit = _post('limit')*1;
if($pagebreak<1) $pagebreak = 6;
if($limit<1) $limit = $pagebreak *2;
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)
->where_gt('tbl_voucher.id',$from_id)
->limit($limit)
->find_many();
$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();
}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();
$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();
}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();
$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();
}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();
$vc = ORM::for_table('tbl_plans')
->join('tbl_voucher', array('tbl_plans.id', '=', 'tbl_voucher.id_plan'))
->where('tbl_voucher.status','0')
->count();
}
$ui->assign('_title', $_L['Voucher_Hotspot'].' - '. $config['CompanyName']);
$ui->assign('from_id',$from_id);
$ui->assign('pagebreak',$pagebreak);
$plans = ORM::for_table('tbl_plans')->find_many();
$ui->assign('plans',$plans);
$ui->assign('limit',$limit);
$ui->assign('planid',$planid);
$ui->assign('v',$v);
$ui->assign('vc',$vc);
//for counting pagebreak
$ui->assign('jml',0);
$ui->display('print-voucher.tpl');
break;
case 'voucher-post': case 'voucher-post':
$type = _post('type'); $type = _post('type');
$plan = _post('plan'); $plan = _post('plan');

View File

@ -0,0 +1,235 @@
<?php
/**
* PHP Mikrotik Billing (www.phpmixbill.com)
* @copyright Copyright (C) 2014-2015 PHP Mikrotik Billing
* @license GNU General Public License version 2 or later; see LICENSE.txt
*
* created by iBNuX
**/
if (isset($routes['1'])) {
$do = $routes['1'];
} else {
$do = 'register-display';
}
use PEAR2\Net\RouterOS;
require_once 'system/autoload/PEAR2/Autoload.php';
switch($do){
case 'post':
$username = _post('username');
$fullname = _post('fullname');
$password = _post('password');
$cpassword = _post('cpassword');
$address = _post('address');
$phonenumber = _post('phonenumber');
$code = _post('kodevoucher');
$v1 = ORM::for_table('tbl_voucher')->where('code',$code)->where('status',0)->find_one();
if ($v1){
$msg = '';
if(Validator::Length($username,35,2) == false){
$msg .= 'Username should be between 3 to 55 characters'. '<br>';
}
if(Validator::Length($fullname,36,2) == false){
$msg .= 'Full Name should be between 3 to 25 characters'. '<br>';
}
if(!Validator::Length($password,35,2)){
$msg .= 'Password should be between 3 to 35 characters'. '<br>';
}
if($password != $cpassword){
$msg .= $_L['PasswordsNotMatch']. '<br>';
}
$d = ORM::for_table('tbl_customers')->where('username',$username)->find_one();
if($d){
$msg .= $_L['account_already_exist']. '<br>';
}
if($msg == ''){
$d = ORM::for_table('tbl_customers')->create();
$d->username = $username;
$d->password = $password;
$d->fullname = $fullname;
$d->address = $address;
$d->phonenumber = $phonenumber;
if($d->save()){
$user = $d->id();
//check voucher plan
$p = ORM::for_table('tbl_plans')->find_one($v1['id_plan']);
$c = ORM::for_table('tbl_customers')->find_one($user);
$p = ORM::for_table('tbl_plans')->find_one($v1['id_plan']);
$date_now = date("Y-m-d H:i:s");
$date_only = date("Y-m-d");
$time = date("H:i:s");
$mikrotik = Router::_info($v1['routers']);
$date_exp = date("Y-m-d", mktime(0,0,0,date("m"),date("d") + $p['validity'],date("Y")));
if($v1['type'] == 'Hotspot'){
try {
$client = new RouterOS\Client($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']);
} catch (Exception $e) {
die('Unable to connect to the router.');
}
$addRequest = new RouterOS\Request('/ip/hotspot/user/add');
$client->sendSync($addRequest
->setArgument('name', $c['username'])
->setArgument('profile', $p['name_plan'])
->setArgument('password', $c['password'])
);
$d = ORM::for_table('tbl_user_recharges')->create();
$d->customer_id = $user;
$d->username = $c['username'];
$d->plan_id = $v1['id_plan'];
$d->namebp = $p['name_plan'];
$d->recharged_on = $date_only;
$d->expiration = $date_exp;
$d->time = $time;
$d->status = "on";
$d->method = "voucher";
$d->routers = $v1['routers'];
$d->type = "Hotspot";
$d->save();
// insert table transactions
$t = ORM::for_table('tbl_transactions')->create();
$t->invoice = "INV-"._raid(5);
$t->username = $c['username'];
$t->plan_name = $p['name_plan'];
$t->price = $p['price'];
$t->recharged_on = $date_only;
$t->expiration = $date_exp;
$t->time = $time;
$t->method = "voucher";
$t->routers = $v1['routers'];
$t->type = "Hotspot";
$t->save();
$v1->status = "1";
$v1->user = $c['username'];
$v1->save();
}else{
try {
$client = new RouterOS\Client($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']);
} catch (Exception $e) {
die('Unable to connect to the router.');
}
$addRequest = new RouterOS\Request('/ppp/secret/add');
$client->sendSync($addRequest
->setArgument('name', $c['username'])
->setArgument('service', 'pppoe')
->setArgument('profile', $p['name_plan'])
->setArgument('password', $c['password'])
);
$d = ORM::for_table('tbl_user_recharges')->create();
$d->customer_id = $user;
$d->username = $c['username'];
$d->plan_id = $v1['id_plan'];
$d->namebp = $p['name_plan'];
$d->recharged_on = $date_only;
$d->expiration = $date_exp;
$d->time = $time;
$d->status = "on";
$d->method = "voucher";
$d->routers = $v1['routers'];
$d->type = "PPPOE";
$d->save();
// insert table transactions
$t = ORM::for_table('tbl_transactions')->create();
$t->invoice = "INV-"._raid(5);
$t->username = $c['username'];
$t->plan_name = $p['name_plan'];
$t->price = $p['price'];
$t->recharged_on = $date_only;
$t->expiration = $date_exp;
$t->time = $time;
$t->method = "voucher";
$t->routers = $v1['routers'];
$t->type = "PPPOE";
$t->save();
$v1->status = "1";
$v1->user = $c['username'];
$v1->save();
}
r2(U . 'login', 's', $_L['Register_Success']);
}else{
$ui->assign('username', $username);
$ui->assign('fullname', $fullname);
$ui->assign('address', $address);
$ui->assign('phonenumber', $phonenumber);
$ui->assign('notify','<div class="alert alert-danger">
<button type="button" class="close" data-dismiss="alert">
<span aria-hidden="true">×</span>
</button>
<div>Failed to register</div></div>');
$ui->display('register.tpl');
}
//r2(U . 'register', 's', $_L['account_created_successfully']);
}else{
$ui->assign('username', $username);
$ui->assign('fullname', $fullname);
$ui->assign('address', $address);
$ui->assign('phonenumber', $phonenumber);
$ui->assign('notify','<div class="alert alert-danger">
<button type="button" class="close" data-dismiss="alert">
<span aria-hidden="true">×</span>
</button>
<div>'.$msg.'</div></div>');
$ui->display('register.tpl');
}
}else{
$ui->assign('username', $username);
$ui->assign('fullname', $fullname);
$ui->assign('address', $address);
$ui->assign('phonenumber', $phonenumber);
$ui->assign('notify','<div class="alert alert-danger">
<button type="button" class="close" data-dismiss="alert">
<span aria-hidden="true">×</span>
</button>
<div>'.$_L['Voucher_Not_Valid'].'</div></div>');
$ui->display('register.tpl');
//r2(U . 'register', 'e', $_L['Voucher_Not_Valid']);
}
/*$password = _post('password');
if($username != '' AND $password != ''){
$d = ORM::for_table('tbl_customers')->where('username',$username)->find_one();
if($d){
$d_pass = $d['password'];
if(Password::_uverify($password,$d_pass) == true){
$_SESSION['uid'] = $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');
}else{
_msglog('e',$_L['Invalid_Username_or_Password']);
_log($username .' '. $_L['Failed_Login'],'User');
r2(U.'login');
}
}else{
_msglog('e',$_L['Invalid_Username_or_Password']);
r2(U.'login');
}
}else{
_msglog('e',$_L['Invalid_Username_or_Password']);
r2(U.'login');
}*/
break;
default:
$ui->assign('username', "");
$ui->assign('fullname', "");
$ui->assign('address', "");
$ui->assign('phonenumber', "");
$ui->display('register.tpl');
break;
}

View File

@ -32,8 +32,9 @@ foreach ($d as $ds){
if($ds['type'] == 'Hotspot'){ if($ds['type'] == 'Hotspot'){
$date_now = strtotime(date("Y-m-d H:i:s")); $date_now = strtotime(date("Y-m-d H:i:s"));
$expiration = strtotime($ds['expiration'].' '.$ds['time']); $expiration = strtotime($ds['expiration'].' '.$ds['time']);
echo $ds['expiration']." : ".$ds['username'];
if ($date_now >= $expiration){ if ($date_now >= $expiration){
echo " : EXPIRED \r\n";
$u = ORM::for_table('tbl_user_recharges')->where('id',$ds['id'])->find_one(); $u = ORM::for_table('tbl_user_recharges')->where('id',$ds['id'])->find_one();
$c = ORM::for_table('tbl_customers')->where('id',$ds['customer_id'])->find_one(); $c = ORM::for_table('tbl_customers')->where('id',$ds['customer_id'])->find_one();
$m = ORM::for_table('tbl_routers')->where('name',$ds['routers'])->find_one(); $m = ORM::for_table('tbl_routers')->where('name',$ds['routers'])->find_one();
@ -43,6 +44,7 @@ foreach ($d as $ds){
} catch (Exception $e) { } catch (Exception $e) {
die('Unable to connect to the router.'); die('Unable to connect to the router.');
} }
$printRequest = new RouterOS\Request('/ip/hotspot/user/print'); $printRequest = new RouterOS\Request('/ip/hotspot/user/print');
$printRequest->setArgument('.proplist', '.id'); $printRequest->setArgument('.proplist', '.id');
$printRequest->setQuery(RouterOS\Query::where('name', $c['username'])); $printRequest->setQuery(RouterOS\Query::where('name', $c['username']));
@ -66,12 +68,14 @@ foreach ($d as $ds){
//update database user dengan status off //update database user dengan status off
$u->status = 'off'; $u->status = 'off';
$u->save(); $u->save();
} }else
echo " : ACTIVE \r\n";
}else{ }else{
$date_now = strtotime(date("Y-m-d H:i:s")); $date_now = strtotime(date("Y-m-d H:i:s"));
$expiration = strtotime($ds['expiration'].' '.$ds['time']); $expiration = strtotime($ds['expiration'].' '.$ds['time']);
echo $ds['expiration']." : ".$ds['username'];
if ($date_now >= $expiration){ if ($date_now >= $expiration){
echo " : EXPIRED \r\n";
$u = ORM::for_table('tbl_user_recharges')->where('id',$ds['id'])->find_one(); $u = ORM::for_table('tbl_user_recharges')->where('id',$ds['id'])->find_one();
$c = ORM::for_table('tbl_customers')->where('id',$ds['customer_id'])->find_one(); $c = ORM::for_table('tbl_customers')->where('id',$ds['customer_id'])->find_one();
$m = ORM::for_table('tbl_routers')->where('name',$ds['routers'])->find_one(); $m = ORM::for_table('tbl_routers')->where('name',$ds['routers'])->find_one();
@ -102,7 +106,8 @@ foreach ($d as $ds){
$u->status = 'off'; $u->status = 'off';
$u->save(); $u->save();
} }else
echo " : ACTIVE \r\n";
} }
} }

Binary file not shown.

View File

@ -19,18 +19,18 @@ CREATE TABLE `tbl_appconfig` (
-- Dump Data for `tbl_appconfig` -- Dump Data for `tbl_appconfig`
-- --
INSERT INTO tbl_appconfig (`id`,`setting`,`value`) VALUES ("1","CompanyName","PHPMixBill v5.0"); INSERT INTO tbl_appconfig (`id`,`setting`,`value`) VALUES ("1","CompanyName","PHPMixBill");
INSERT INTO tbl_appconfig (`id`,`setting`,`value`) VALUES ("2","theme","default"); INSERT INTO tbl_appconfig (`id`,`setting`,`value`) VALUES ("2","theme","default");
INSERT INTO tbl_appconfig (`id`,`setting`,`value`) VALUES ("3","currency_code","Rp."); INSERT INTO tbl_appconfig (`id`,`setting`,`value`) VALUES ("3","currency_code","Rp.");
INSERT INTO tbl_appconfig (`id`,`setting`,`value`) VALUES ("4","language","english"); INSERT INTO tbl_appconfig (`id`,`setting`,`value`) VALUES ("4","language","english");
INSERT INTO tbl_appconfig (`id`,`setting`,`value`) VALUES ("5","show-logo","1"); INSERT INTO tbl_appconfig (`id`,`setting`,`value`) VALUES ("5","show-logo","1");
INSERT INTO tbl_appconfig (`id`,`setting`,`value`) VALUES ("6","nstyle","blue"); INSERT INTO tbl_appconfig (`id`,`setting`,`value`) VALUES ("6","nstyle","blue");
INSERT INTO tbl_appconfig (`id`,`setting`,`value`) VALUES ("7","timezone","Asia/Jakarta"); INSERT INTO tbl_appconfig (`id`,`setting`,`value`) VALUES ("7","timezone","Asia/Jakarta");
INSERT INTO tbl_appconfig (`id`,`setting`,`value`) VALUES ("8","dec_point","."); INSERT INTO tbl_appconfig (`id`,`setting`,`value`) VALUES ("8","dec_point",",");
INSERT INTO tbl_appconfig (`id`,`setting`,`value`) VALUES ("9","thousands_sep",","); INSERT INTO tbl_appconfig (`id`,`setting`,`value`) VALUES ("9","thousands_sep",".");
INSERT INTO tbl_appconfig (`id`,`setting`,`value`) VALUES ("10","rtl","0"); INSERT INTO tbl_appconfig (`id`,`setting`,`value`) VALUES ("10","rtl","0");
INSERT INTO tbl_appconfig (`id`,`setting`,`value`) VALUES ("11","address","Jl. Kubangsari VII No. 31 RT.03/RW.06 Bandung"); INSERT INTO tbl_appconfig (`id`,`setting`,`value`) VALUES ("11","address","");
INSERT INTO tbl_appconfig (`id`,`setting`,`value`) VALUES ("12","phone","081322225141"); INSERT INTO tbl_appconfig (`id`,`setting`,`value`) VALUES ("12","phone","");
INSERT INTO tbl_appconfig (`id`,`setting`,`value`) VALUES ("13","date_format","d M Y"); INSERT INTO tbl_appconfig (`id`,`setting`,`value`) VALUES ("13","date_format","d M Y");
INSERT INTO tbl_appconfig (`id`,`setting`,`value`) VALUES ("14","note","Thank you..."); INSERT INTO tbl_appconfig (`id`,`setting`,`value`) VALUES ("14","note","Thank you...");
@ -221,7 +221,7 @@ CREATE TABLE `tbl_users` (
-- Dump Data for `tbl_users` -- Dump Data for `tbl_users`
-- --
INSERT INTO tbl_users (`id`,`username`,`fullname`,`password`,`user_type`,`status`,`last_login`,`creationdate`) VALUES ("1","admin","Ismail Marzuqi","$1$W44.ns/.$MUnR0NeBH9xAcXm0Oku2h1","Admin","Active","2015-10-30 18:27:02","2014-06-23 01:43:07"); INSERT INTO tbl_users (`id`,`username`,`fullname`,`password`,`user_type`,`status`,`last_login`,`creationdate`) VALUES ("1","admin","Administrator","$1$W44.ns/.$MUnR0NeBH9xAcXm0Oku2h1","Admin","Active","2015-10-30 18:27:02","2014-06-23 01:43:07");
-- -------------------------------------------------------- -- --------------------------------------------------------
-- Structure for 'tbl_voucher' -- Structure for 'tbl_voucher'

View File

@ -32,12 +32,11 @@ if ($cn == '1') {
$db_password = \'' . $db_password . '\'; $db_password = \'' . $db_password . '\';
$db_name = \'' . $db_name . '\'; $db_name = \'' . $db_name . '\';
define(\'APP_URL\', \'' . $appurl . '\'); define(\'APP_URL\', \'' . $appurl . '\');
$_app_stage = \'Live\'; $_app_stage = \'Live\';';
';
$wConfig = "../config.php"; $wConfig = "../config.php";
$fh = fopen($wConfig, 'w') or die("Can't create config file, your server does not support 'fopen' function, $fh = fopen($wConfig, 'w') or die("Can't create config file, your server does not support 'fopen' function,
please create a file named - config.php with following contents- <br/>$input"); please create a file named - config.php with following contents- <br/>$input");
fwrite($fh, $input); fwrite($fh, $input);
fclose($fh); fclose($fh);

BIN
system/lan/.DS_Store vendored

Binary file not shown.

View File

@ -5,15 +5,27 @@ Language Name: English
Contributor: Ismail Marzuqi Contributor: Ismail Marzuqi
Web: www.phpmixbill.com Web: www.phpmixbill.com
Email: iesien22@yahoo.com Email: iesien22@yahoo.com
2017
Contributor: Ibnu Maksum (@ibnux)
------------------------------------ ------------------------------------
*/ */
$_L['Login'] = 'Login'; $_L['Login'] = 'Log-in';
$_L['Sign_In_Member'] = 'Sign In to Member Panel'; $_L['Register'] = 'Register';
$_L['Sign_In_Admin'] = 'Sign In to Admin Panel'; $_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'] = 'Masuk ke Admin Panel';
$_L['Logo'] = 'PHPMixBill'; $_L['Logo'] = 'PHPMixBill';
$_L['Username'] = 'Username'; $_L['Username'] = 'Username';
$_L['Password'] = 'Password'; $_L['Password'] = 'Password';
$_L['PasswordsNotMatch'] = 'Passwords does not match';
$_L['account_already_exist'] = 'Account already axist';
$_L['Manage'] = 'Manage'; $_L['Manage'] = 'Manage';
$_L['Submit'] = 'Submit'; $_L['Submit'] = 'Submit';
$_L['Save'] = 'Save Changes'; $_L['Save'] = 'Save Changes';
@ -25,6 +37,11 @@ $_L['Created_Successfully'] = 'Data Created Successfully';
$_L['Updated_Successfully'] = 'Data Updated Successfully'; $_L['Updated_Successfully'] = 'Data Updated Successfully';
$_L['Delete_Successfully'] = 'Data Deleted 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['Dashboard'] = 'Dashboard';
$_L['Search_Contact'] = 'Search Customers...'; $_L['Search_Contact'] = 'Search Customers...';
$_L['My_Account'] = 'My Account'; $_L['My_Account'] = 'My Account';
@ -111,6 +128,7 @@ $_L['Select_Account'] = 'Select Account';
$_L['Service_Plan'] = 'Service Plan'; $_L['Service_Plan'] = 'Service Plan';
$_L['Recharge'] = 'Recharge'; $_L['Recharge'] = 'Recharge';
$_L['Method'] = 'Method'; $_L['Method'] = 'Method';
$_L['account_created_successfully'] = 'Account Created Successfully';
$_L['Database_Status'] = 'Database Status'; $_L['Database_Status'] = 'Database Status';
$_L['Total_Database_Size'] = 'Total Database Size'; $_L['Total_Database_Size'] = 'Total Database Size';
@ -165,10 +183,12 @@ $_L['Number_of_Vouchers'] = 'Number of Vouchers';
$_L['Length_Code'] = 'Length Code'; $_L['Length_Code'] = 'Length Code';
$_L['Code_Voucher'] = 'Code Voucher'; $_L['Code_Voucher'] = 'Code Voucher';
$_L['Voucher'] = 'Voucher'; $_L['Voucher'] = 'Voucher';
$_L['Voucher_Hotspot'] = 'Hotspot Voucher';
$_L['Status_Voucher'] = 'Status Voucher'; $_L['Status_Voucher'] = 'Status Voucher';
$_L['Add_Voucher'] = 'Add Vouchers'; $_L['Add_Voucher'] = 'Add Vouchers';
$_L['Voucher_Successfully'] = 'Create Vouchers Successfully'; $_L['Voucher_Successfully'] = 'Create Vouchers Successfully';
$_L['Generate'] = 'Generate'; $_L['Generate'] = 'Generate';
$_L['Print_Info'] = 'Print side by side, it will easy to cut';
$_L['From_Date'] = 'From Date'; $_L['From_Date'] = 'From Date';
$_L['To_Date'] = 'To Date'; $_L['To_Date'] = 'To Date';
@ -197,9 +217,9 @@ $_L['Title'] = 'Title';
$_L['Message'] = 'Message'; $_L['Message'] = 'Message';
$_L['Account_Information'] = 'Your Account Information'; $_L['Account_Information'] = 'Your Account Information';
$_L['Welcome_Text_User'] = 'Welcome to the Panel Members page, on this page you can:'; $_L['Welcome_Text_User'] = 'Welcome to the Panel Members page, on this page you can:';
$_L['Welcome_Text_Admin'] = '<b>PHPMixBill</b> adalah sebuah aplikasi billing Hotspot dan PPPOE untuk Mikrotik dengan menggunakan bahasa pemograman PHP dan menggunakan API Mikrotik sebagai komunikasi dengan router. Jika aplikasi ini sangat berguna bagi bisnis Anda silahkan Anda donasi berapapun.'; $_L['Welcome_Text_Admin'] = '<b>PHPMixBill</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/ibnux/phpmixbill" target="_blank">in here</a>';
//update //update
$_L['Invalid_Username_or_Password'] = 'Invalid Username or Password'; $_L['Invalid_Username_or_Password'] = 'Invalid Username or Password';
$_L['Do_Not_Access'] = 'You do not have permission to access this page'; $_L['Do_Not_Access'] = 'You do not have permission to access this page';
$_L['Incorrect_Current_Password'] = 'Incorrect Current Password'; $_L['Incorrect_Current_Password'] = 'Incorrect Current Password';

View File

@ -5,15 +5,27 @@ Language Name: Indonesia
Contributor: Ismail Marzuqi Contributor: Ismail Marzuqi
Web: www.phpmixbill.com Web: www.phpmixbill.com
Email: iesien22@yahoo.com Email: iesien22@yahoo.com
2017
Contributor: Ibnu Maksum (@ibnux)
------------------------------------ ------------------------------------
*/ */
$_L['Login'] = 'Masuk'; $_L['Login'] = 'Masuk';
$_L['Register'] = 'Daftar';
$_L['Announcement'] = 'Pengumuman';
$_L['Registration_Info'] = 'Info Pendaftaran';
$_L['Register_Voucher_Failed'] = 'Voucher tidak ditemukan, mohon beli dulu Voucher sebelum mendaftar';
$_L['Register_Success'] = 'Pendaftaran sukses!<br>silahkan masuk';
$_L['Sign_In_Member'] = 'Masuk ke Member Panel'; $_L['Sign_In_Member'] = 'Masuk ke Member Panel';
$_L['Register_Member'] = 'Mendaftar sebagai pelanggan<br>pastikan anda sudah membeli voucher';
$_L['Sign_In_Admin'] = 'Masuk ke Admin Panel'; $_L['Sign_In_Admin'] = 'Masuk ke Admin Panel';
$_L['Logo'] = 'PHPMixBill'; $_L['Logo'] = 'PHPMixBill';
$_L['Username'] = 'Username'; $_L['Username'] = 'Username';
$_L['Password'] = 'Password'; $_L['Password'] = 'Password';
$_L['PasswordsNotMatch'] = 'Sandi tidak sama';
$_L['account_already_exist'] = 'Username sudah ada yang menggunakan';
$_L['Manage'] = 'Proses'; $_L['Manage'] = 'Proses';
$_L['Submit'] = 'Kirim'; $_L['Submit'] = 'Kirim';
$_L['Save'] = 'Simpan Perubahan'; $_L['Save'] = 'Simpan Perubahan';
@ -25,6 +37,11 @@ $_L['Created_Successfully'] = 'Data berhasil di buat';
$_L['Updated_Successfully'] = 'Data berhasil di ubah'; $_L['Updated_Successfully'] = 'Data berhasil di ubah';
$_L['Delete_Successfully'] = 'Berhasil menghapus data'; $_L['Delete_Successfully'] = 'Berhasil menghapus data';
$_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'] = "Sukses menyimpan halaman";
$_L['Info_Page'] = "Kadang harus di-refresh 3 kali baru konten berubah";
$_L['Dashboard'] = 'Beranda'; $_L['Dashboard'] = 'Beranda';
$_L['Search_Contact'] = 'Cari username member...'; $_L['Search_Contact'] = 'Cari username member...';
$_L['My_Account'] = 'Akun Saya'; $_L['My_Account'] = 'Akun Saya';
@ -111,6 +128,7 @@ $_L['Select_Account'] = 'Pilih Akun';
$_L['Service_Plan'] = 'Paket'; $_L['Service_Plan'] = 'Paket';
$_L['Recharge'] = 'Isi Ulang Akun'; $_L['Recharge'] = 'Isi Ulang Akun';
$_L['Method'] = 'Metode'; $_L['Method'] = 'Metode';
$_L['account_created_successfully'] = 'Account Created Successfully';
$_L['Database_Status'] = 'Status Database'; $_L['Database_Status'] = 'Status Database';
$_L['Total_Database_Size'] = 'Ukuran Database'; $_L['Total_Database_Size'] = 'Ukuran Database';
@ -164,10 +182,12 @@ $_L['Number_of_Vouchers'] = 'Jumlah Voucher';
$_L['Length_Code'] = 'Panjang Kode'; $_L['Length_Code'] = 'Panjang Kode';
$_L['Code_Voucher'] = 'Kode Voucher'; $_L['Code_Voucher'] = 'Kode Voucher';
$_L['Voucher'] = 'Voucher'; $_L['Voucher'] = 'Voucher';
$_L['Voucher_Hotspot'] = 'Voucher Hotspot';
$_L['Status_Voucher'] = 'Status Voucher'; $_L['Status_Voucher'] = 'Status Voucher';
$_L['Add_Voucher'] = 'Tambah Voucher'; $_L['Add_Voucher'] = 'Tambah';
$_L['Voucher_Successfully'] = 'Berhasil membuat Voucher baru'; $_L['Voucher_Successfully'] = 'Berhasil membuat Voucher baru';
$_L['Generate'] = 'Generate'; $_L['Generate'] = 'Generate';
$_L['Print_Info'] = 'Print bolak balik, biar mudah dipotong dan hemat kertas';
$_L['From_Date'] = 'Dari Tanggal'; $_L['From_Date'] = 'Dari Tanggal';
$_L['To_Date'] = 'Hingga Tanggal'; $_L['To_Date'] = 'Hingga Tanggal';
@ -196,7 +216,7 @@ $_L['Title'] = 'Title';
$_L['Message'] = 'Message'; $_L['Message'] = 'Message';
$_L['Account_Information'] = 'Informasi Akun Anda'; $_L['Account_Information'] = 'Informasi Akun Anda';
$_L['Welcome_Text_User'] = 'Selamat datang di Member Panel, disini Anda dapat mengetahui:'; $_L['Welcome_Text_User'] = 'Selamat datang di Member Panel, disini Anda dapat mengetahui:';
$_L['Welcome_Text_Admin'] = '<b>PHPMixBill</b> adalah sebuah aplikasi billing Hotspot dan PPPOE untuk Mikrotik dengan menggunakan bahasa pemograman PHP dan menggunakan API Mikrotik sebagai komunikasi dengan router. Jika aplikasi ini sangat berguna bagi bisnis Anda silahkan Anda donasi berapapun.'; $_L['Welcome_Text_Admin'] = '<b>PHPMixBill</b> adalah sebuah aplikasi billing Hotspot dan PPPOE untuk Mikrotik dengan menggunakan bahasa pemograman PHP dan menggunakan API Mikrotik sebagai komunikasi dengan router. Jika aplikasi ini sangat berguna bagi bisnis Anda silahkan Anda donasi berapapun.<br>Pantau proyek <a href="https://github.com/ibnux/phpmixbill" target="_blank">disini</a>';
//update //update
$_L['Invalid_Username_or_Password'] = 'Username atau Password Salah'; $_L['Invalid_Username_or_Password'] = 'Username atau Password Salah';

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
ui/.DS_Store vendored

Binary file not shown.

BIN
ui/theme/.DS_Store vendored

Binary file not shown.

View File

@ -27,12 +27,11 @@
<input type="text" class="form-control" id="phone" name="phone" value="{$_c['phone']}"> <input type="text" class="form-control" id="phone" name="phone" value="{$_c['phone']}">
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group hidden">
<label class="col-md-2 control-label">Theme</label> <label class="col-md-2 control-label">Theme</label>
<div class="col-md-6"> <div class="col-md-6">
<select name="theme" id="theme" class="form-control"> <select name="theme" id="theme" class="form-control">
<option value="default" {if $_c['theme'] eq 'default'}selected="selected" {/if}>Default</option> <option value="default" {if $_c['theme'] eq 'default'}selected="selected" {/if}>Default</option>
<option value="blue" {if $_c['theme'] eq 'blue'}selected="selected" {/if}>Blue</option>
</select> </select>
</div> </div>
</div> </div>

View File

@ -1,12 +1,12 @@
{include file="sections/header.tpl"} {include file="sections/header.tpl"}
{if ($_admin['user_type']) eq 'Admin' || ($_admin['user_type']) eq 'Sales'} {if ($_admin['user_type']) eq 'Admin' || ($_admin['user_type']) eq 'Sales'}
<div class="row"> <div class="row hidden">
<div class="col-md-12"> <div class="col-md-12">
<div class="dash-head clearfix mt15 mb20"> <div class="dash-head clearfix mt15 mb20">
<div class="left"> <div class="left">
<h4 class="mb5 text-light">Welcome to PHPMixBill v5.0</h4> <h4 class="mb5 text-light">Dashboard</h4>
<p class="small">{$_L['Welcome_Text_Admin']}</p> <p class="small"></p>
</div> </div>
</div> </div>
</div> </div>
@ -83,8 +83,36 @@
<div class="row"> <div class="row">
<div class="col-md-7"> <div class="col-md-7">
<div class="panel panel-default mb20 panel-hovered project-stats table-responsive"> <div class="panel panel-default mb20 panel-hovered project-stats table-responsive">
<div class="panel-heading">{$_L['User_Expired_Today']}</div> <div class="panel-heading">Vouchers Stock</div>
<div class="panel-body"> <div class="panel-body">
<table class="table">
<thead>
<tr>
<th>{$_L['Plan_Name']}</th>
<th>unused</th>
<th>used</th>
</tr>
</thead>
<tbody>
{foreach $plans as $stok}
<tr>
<td>{$stok['name_plan']}</td>
<td>{$stok['unused']}</td>
<td>{$stok['used']}</td>
</tr>
</tbody>
{/foreach}
<tr>
<td>Total</td>
<td>{$stocks['unused']}</td>
<td>{$stocks['used']}</td>
</tr>
</table>
</div>
</div>
<div class="panel panel-default mb20 panel-hovered project-stats table-responsive">
<div class="panel-heading">{$_L['User_Expired_Today']}</div>
<div class="panel-body">
<table class="table"> <table class="table">
<thead> <thead>
<tr> <tr>
@ -125,6 +153,12 @@
</ul> </ul>
</div> </div>
</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>
</div> </div>

View File

@ -0,0 +1,27 @@
{include file="sections/header.tpl"}
<div class="row">
<div class="col-sm-12">
<div class="panel panel-hovered mb20 panel-default">
<div class="panel-heading">Public Disquss</div>
<div class="panel-body">
<div id="disqus_thread"></div>
<script>
var disqus_config = function () {
this.page.url = "https://ibnux.github.io/phpmixbill/diskusi.html"; // Replace PAGE_URL with your page's canonical URL variable
this.page.identifier = "phpmixbill"; // Replace PAGE_IDENTIFIER with your page's unique identifier variable
};
(function() { // DON'T EDIT BELOW THIS LINE
var d = document, s = d.createElement('script');
s.src = 'https://phpmixbill.disqus.com/embed.js';
s.setAttribute('data-timestamp', +new Date());
(d.head || d.body).appendChild(s);
})();
</script>
<noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
</div>
</div>
</div>
</div>
{include file="sections/footer.tpl"}

View File

@ -6,14 +6,6 @@
<title>{$_title} - {$_L['Login']}</title> <title>{$_title} - {$_L['Login']}</title>
<link rel="shortcut icon" href="{$_theme}/images/logo.png" type="image/x-icon" /> <link rel="shortcut icon" href="{$_theme}/images/logo.png" type="image/x-icon" />
<!-- Icons -->
<link rel="stylesheet" href="{$_theme}/fonts/ionicons/css/ionicons.min.css">
<link rel="stylesheet" href="{$_theme}/fonts/font-awesome/css/font-awesome.min.css">
<!-- Plugins -->
<link rel="stylesheet" href="{$_theme}/styles/plugins/waves.css">
<link rel="stylesheet" href="{$_theme}/styles/plugins/perfect-scrollbar.css">
<!-- Css/Less Stylesheets --> <!-- Css/Less Stylesheets -->
<link rel="stylesheet" href="{$_theme}/styles/bootstrap.min.css"> <link rel="stylesheet" href="{$_theme}/styles/bootstrap.min.css">
<link rel="stylesheet" href="{$_theme}/styles/main.min.css"> <link rel="stylesheet" href="{$_theme}/styles/main.min.css">
@ -23,49 +15,67 @@
<!--[if IE 9]> <script src="{$_theme}/scripts/ie/matchMedia.js"></script> <![endif]--> <!--[if IE 9]> <script src="{$_theme}/scripts/ie/matchMedia.js"></script> <![endif]-->
</head> </head>
<body id="app" class="app off-canvas body-full"> <body>
<div class="main-container clearfix"> <div class="container">
<div class="content-container" id="content"> <div class="hidden-xs" style="height:150px"></div>
<div class="page page-auth"> <div class="form-head mb20">
<div class="auth-container"> <h1 class="site-logo h2 mb5 mt5 text-center text-uppercase text-bold" style="text-shadow: 2px 2px 4px #757575;">{$_c['CompanyName']}</h1>
<div class="form-head mb20"> <hr>
<h1 class="site-logo h2 mb5 mt5 text-center text-uppercase text-bold"><a href="./">{$_L['Logo']}</a></h1> </div>
<h5 class="text-normal h5 text-center">{$_L['Sign_In_Member']}</h5> {if isset($notify)}
</div> <div class="row">
{if isset($notify)} <div class="col-md-6 col-md-offset-3">
{$notify} {$notify}
{/if}
<div class="form-container">
<form class="form-horizontal" action="{$_url}login/post" method="post">
<div class="md-input-container md-float-label">
<input type="text" name="username" class="md-input">
<label>{$_L['Username']}</label>
</div>
<div class="md-input-container md-float-label">
<input type="password" name="password" class="md-input">
<label>{$_L['Password']}</label>
</div>
<div class="clearfix">
<div class="ui-checkbox ui-checkbox-primary right">
<label>
<input type="checkbox">
<span>Remember me</span>
</label>
</div>
</div>
<div class="btn-group btn-group-justified mb15">
<div class="btn-group">
<button type="submit" class="btn btn-success">{$_L['Login']}</button>
</div>
</div>
</form>
</div>
</div> </div>
</div> </div>
</div> {/if}
<div class="row">
<div class="col-md-4 col-md-offset-2">
<div class="panel panel-default">
<div class="panel-heading">{$_L['Announcement']}</div>
<div class="panel-body" style="height:296px;max-height:296px;overflow:scroll;">
{include file="$_path/../pages/Announcement.html"}
</div>
</div>
</div>
<div class="col-md-4">
<div class="panel panel-default">
<div class="panel-heading">{$_L['Sign_In_Member']}</div>
<div class="panel-body" style="height:296px;max-height:296px;">
<div class="form-container">
<form class="form-horizontal" action="{$_url}login/post" method="post">
<div class="md-input-container md-float-label">
<input type="text" name="username" placeholder="{$_L['Phone_Number']}" class="md-input">
<label>{$_L['Username']}</label>
</div>
<div class="md-input-container md-float-label">
<input type="password" name="password" placeholder="{$_L['Password']}" class="md-input">
<label>{$_L['Password']}</label>
</div>
<div class="clearfix hidden">
<div class="ui-checkbox ui-checkbox-primary right">
<label>
<input type="checkbox">
<span>Remember me</span>
</label>
</div>
</div>
<div class="btn-group btn-group-justified mb15">
<div class="btn-group">
<button type="submit" class="btn btn-primary">{$_L['Login']}</button>
</div>
<div class="btn-group">
<a href="{$_url}register" class="btn btn-success">{$_L['Register']}</a>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div> </div>
<script src="scripts/vendors.js"></script> <script src="scripts/vendors.js"></script>
</body> </body>

View File

@ -0,0 +1,40 @@
{include file="sections/header.tpl"}
<div class="row">
<div class="col-sm-12">
<div class="panel mb20 panel-primary panel-hovered">
<div class="panel-heading">{$_L[$pageHeader]}</div>
<div id="myNicPanel" style="width: 100%;"></div>
<div id="panel-edit" class="panel-body">{$htmls}</div>
{if $writeable}
<div class="panel-footer">
<a href="javascript:saveIt()" class="btn btn-primary btn-block">SAVE</a>
<br>
<p class="help-block">{$_L['Info_Page']}</p>
</div>
{else}
<div class="panel-footer">
{$_L['Failed_Save_Page']}
</div>
{/if}
</div>
</div>
</div>
<form id="formpages" class="hidden" method="post" role="form" action="{$_url}pages/{$pageHeader}-post" >
<textarea name="html" id="html"></textarea>
</form>
<script src="{$_theme}/scripts/nicEdit.js"></script>
<script type="text/javascript">
var myNicEditor
bkLib.onDomLoaded(function() {
myNicEditor = new nicEditor();
myNicEditor.setPanel('myNicPanel');
myNicEditor.addInstance('panel-edit');
});
function saveIt(){
//alert(document.getElementById('panel-edit').innerHTML);
document.getElementById('html').value = nicEditors.findEditor('panel-edit').getContent()
document.getElementById('formpages').submit();
}
</script>
{include file="sections/footer.tpl"}

View File

@ -0,0 +1,133 @@
<!DOCTYPE html>
<html>
<head>
<title>{$_title}</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="shortcut icon" type="image/x-icon" href="{$_theme}/images/favicon.ico">
<style>
.ukuran {
size:A4;
}
body,td,th {
font-size: 12px;
font-family: Segoe, "Segoe UI", "DejaVu Sans", "Trebuchet MS", Verdana, sans-serif;
}
page[size="A4"] {
background: white;
width: 21cm;
height: 29.7cm;
display: block;
margin: 0 auto;
margin-bottom: 0.5cm;
html, body {
width: 210mm;
height: 297mm;
}
}
@media print {
body {
size: auto;
margin: 0;
box-shadow: 0;
}
page[size="A4"] {
margin: 0;
size: auto;
box-shadow: 0;
}
.page-break { display: block; page-break-before: always; }
.no-print, .no-print *
{
display: none !important;
}
}
</style>
</head>
<body>
<page size="A4">
<form method="post" action="{$_url}prepaid/print-voucher/" class="no-print">
<table width="100%" border="0" cellspacing="0" cellpadding="1" class="btn btn-default btn-sm">
<tr>
<td>ID &gt; <input type="text" name="from_id" style="width:40px" value="{$from_id}"> limit <input type="text" name="limit" style="width:40px" value="{$limit}"></td>
<td>PageBreak after <input type="text" style="width:40px" name="pagebreak" value="{$pagebreak}"> vouchers</td>
<td>Plans <select id="plan_id" name="planid" style="width:150px">
<option value="0">--all--</option>
{foreach $plans as $plan}
<option value="{$plan['id']}" {if $plan['id']==$planid}selected{/if}>{$plan['name_plan']}</option>
{/foreach}
</select></td>
<td><button type="submit">submit</button></td>
</tr>
</table><hr>
<center><button type="button" id="actprint" class="btn btn-default btn-sm no-print">{$_L['Click_Here_to_Print']}</button><br>
{$_L['Print_Info']}<br>
show {$v|@count} vouchers from {$vc} vouchers<br>
from ID {$v[0]['id']} limit {$limit} vouchers
</center>
</form>
<div id="printable">
<hr>
{foreach $v as $vs}
{$jml = $jml + 1}
<table width="100%" height="200" border="0" cellspacing="0" cellpadding="1" style="margin-bottom:5px">
<tbody>
<tr><td align="center" valign="middle"></td></tr>
<tr>
<td align="center" valign="top">
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr>
<td width="50%" valign="middle" style="padding-right:10px">
<center><strong style="font-size:38px">{$_L['Voucher_Hotspot']}</strong><span class="no-print"> ID {$vs['id']}</span></center>
<table width="100%" border="1" cellspacing="0" cellpadding="4" bordercolor="#757575">
<tbody>
<tr>
<td valign="middle" align="center" style="font-size:25px">{$_c['currency_code']} {number_format($vs['price'],2,$_c['dec_point'],$_c['thousands_sep'])}</td>
</tr>
<tr>
<td valign="middle" align="center" style="font-size:20px">{$_L['Code_Voucher']}</td>
</tr>
<tr>
<td valign="middle" align="center" style="font-size:25px">{$vs['code']}</td>
</tr>
<tr>
<td valign="middle" align="center" style="font-size:15px">{$vs['name_plan']}</td>
</tr>
</tbody>
</table>
</td>
<td valign="top" style="padding-left:10px">
{include file="$_path/../pages/Voucher.html"}
</td>
</tr>
</table>
</td>
</tr>
</tbody>
</table>
<hr>
{if $jml == $pagebreak}
{$jml = 0}
<!-- pageBreak -->
<div class="page-break"><div class="no-print" style="background-color: #E91E63; color:#FFF;" align="center">-- pageBreak --<hr></div></div>
{/if}
{/foreach}
</div>
</page>
<script src="{$_theme}/scripts/jquery-1.10.2.js"></script>
{if isset($xfooter)}
{$xfooter}
{/if}
<script>
jQuery(document).ready(function() {
// initiate layout and plugins
$("#actprint").click(function() {
window.print();
return false;
});
});
</script>
</body>
</html>

View File

@ -0,0 +1,111 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<title>{$_title} - {$_L['Register']}</title>
<link rel="shortcut icon" href="{$_theme}/images/logo.png" type="image/x-icon" />
<!-- Icons -->
<link rel="stylesheet" href="{$_theme}/fonts/ionicons/css/ionicons.min.css">
<link rel="stylesheet" href="{$_theme}/fonts/font-awesome/css/font-awesome.min.css">
<!-- Plugins -->
<link rel="stylesheet" href="{$_theme}/styles/plugins/waves.css">
<link rel="stylesheet" href="{$_theme}/styles/plugins/perfect-scrollbar.css">
<!-- Css/Less Stylesheets -->
<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]-->
</head>
<body id="app" class="app off-canvas body-full">
<div class="container">
<div class="hidden-xs" style="height:150px"></div>
<div class="form-head mb20">
<h1 class="site-logo h2 mb5 mt5 text-center text-uppercase text-bold" style="text-shadow: 2px 2px 4px #757575;">{$_c['CompanyName']}</h1>
<hr>
</div>
{if isset($notify)}
<div class="row">
<div class="col-md-6 col-md-offset-3">
{$notify}
</div>
</div>
{/if}
<div class="row">
<div class="col-md-4">
<div class="panel panel-default">
<div class="panel-heading">{$_L['Registration_Info']}</div>
<div class="panel-body" style="height:375px;max-height:375px;overflow:scroll;">
{include file="$_path/../pages/Registration_Info.html"}
</div>
</div>
</div>
<form class="form-horizontal" action="{$_url}register/post" method="post">
<div class="col-md-4">
<div class="panel panel-default">
<div class="panel-heading">1. {$_L['Register_Member']}</div>
<div class="panel-body">
<div class="form-container">
<div class="md-input-container md-float-label">
<input type="text" required class="md-input" id="username" value="{$username}" placeholder="{$_L['Phone_Number']}" name="username">
<label>{$_L['Username']}</label>
</div>
<div class="md-input-container md-float-label">
<input type="text" required class="md-input" id="fullname" value="{$fullname}" name="fullname">
<label>{$_L['Full_Name']}</label>
</div>
<div class="md-input-container md-float-label">
<input type="text" name="address" id="address" value="{$address}" class="md-input">
<label>{$_L['Address']}</label>
</div>
<div class="md-input-container md-float-label">
<input type="text" required class="md-input" value="{$phonenumber}" id="phonenumber" name="phonenumber">
<label>{$_L['Phone_Number']}</label>
</div>
</div>
</div>
</div>
</div>
<div class="col-md-4">
<div class="panel panel-default">
<div class="panel-heading">2. {$_L['Register_Member']}</div>
<div class="panel-body">
<div class="form-container">
<div class="md-input-container md-float-label">
<input type="password" required class="md-input" id="password" name="password">
<label>{$_L['Password']}</label>
</div>
<div class="md-input-container md-float-label">
<input type="password" required class="md-input" id="cpassword" name="cpassword">
<label>{$_L['Confirm_Password']}</label>
</div>
<hr>
<div class="md-input-container md-float-label">
<input type="text" required class="md-input" id="kodevoucher" name="kodevoucher">
<label>{$_L['Code_Voucher']}</label>
</div>
<div class="btn-group btn-group-justified mb15">
<div class="btn-group">
<button class="btn btn-primary waves-effect waves-light" type="submit">{$_L['Register']}</button>
</div>
<div class="btn-group">
<a href="{$_url}login" class="btn btn-success">{$_L['Cancel']}</a>
</div>
</div>
</div>
</div>
</div>
</div>
</form>
</div>
</div>
<script src="scripts/vendors.js"></script>
</body>
</html>

View File

@ -24,7 +24,7 @@
<a href="{$_url}routers/add" class="btn btn-primary btn-block waves-effect"><i class="ion ion-android-add"> </i> {$_L['New_Router']}</a> <a href="{$_url}routers/add" class="btn btn-primary btn-block waves-effect"><i class="ion ion-android-add"> </i> {$_L['New_Router']}</a>
</div>&nbsp; </div>&nbsp;
</div> </div>
<div class="table-responsive">
<table class="table table-striped table-bordered"> <table class="table table-striped table-bordered">
<thead> <thead>
<tr> <tr>
@ -52,6 +52,7 @@
{/foreach} {/foreach}
</tbody> </tbody>
</table> </table>
</div>
{$paginator['contents']} {$paginator['contents']}
</div> </div>
</div> </div>

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,113 @@
/* NicEdit - Micro Inline WYSIWYG
* Copyright 2007-2008 Brian Kirchoff
*
* NicEdit is distributed under the terms of the MIT license
* For more information visit http://nicedit.com/
* Do not remove this copyright message
*/
var bkExtend=function(){var A=arguments;if(A.length==1){A=[this,A[0]]}for(var B in A[1]){A[0][B]=A[1][B]}return A[0]};function bkClass(){}bkClass.prototype.construct=function(){};bkClass.extend=function(C){var A=function(){if(arguments[0]!==bkClass){return this.construct.apply(this,arguments)}};var B=new this(bkClass);bkExtend(B,C);A.prototype=B;A.extend=this.extend;return A};var bkElement=bkClass.extend({construct:function(B,A){if(typeof (B)=="string"){B=(A||document).createElement(B)}B=$BK(B);return B},appendTo:function(A){A.appendChild(this);return this},appendBefore:function(A){A.parentNode.insertBefore(this,A);return this},addEvent:function(B,A){bkLib.addEvent(this,B,A);return this},setContent:function(A){this.innerHTML=A;return this},pos:function(){var C=curtop=0;var B=obj=this;if(obj.offsetParent){do{C+=obj.offsetLeft;curtop+=obj.offsetTop}while(obj=obj.offsetParent)}var A=(!window.opera)?parseInt(this.getStyle("border-width")||this.style.border)||0:0;return[C+A,curtop+A+this.offsetHeight]},noSelect:function(){bkLib.noSelect(this);return this},parentTag:function(A){var B=this;do{if(B&&B.nodeName&&B.nodeName.toUpperCase()==A){return B}B=B.parentNode}while(B);return false},hasClass:function(A){return this.className.match(new RegExp("(\\s|^)nicEdit-"+A+"(\\s|$)"))},addClass:function(A){if(!this.hasClass(A)){this.className+=" nicEdit-"+A}return this},removeClass:function(A){if(this.hasClass(A)){this.className=this.className.replace(new RegExp("(\\s|^)nicEdit-"+A+"(\\s|$)")," ")}return this},setStyle:function(A){var B=this.style;for(var C in A){switch(C){case"float":B.cssFloat=B.styleFloat=A[C];break;case"opacity":B.opacity=A[C];B.filter="alpha(opacity="+Math.round(A[C]*100)+")";break;case"className":this.className=A[C];break;default:B[C]=A[C]}}return this},getStyle:function(A,C){var B=(!C)?document.defaultView:C;if(this.nodeType==1){return(B&&B.getComputedStyle)?B.getComputedStyle(this,null).getPropertyValue(A):this.currentStyle[bkLib.camelize(A)]}},remove:function(){this.parentNode.removeChild(this);return this},setAttributes:function(A){for(var B in A){this[B]=A[B]}return this}});var bkLib={isMSIE:(navigator.appVersion.indexOf("MSIE")!=-1),addEvent:function(C,B,A){(C.addEventListener)?C.addEventListener(B,A,false):C.attachEvent("on"+B,A)},toArray:function(C){var B=C.length,A=new Array(B);while(B--){A[B]=C[B]}return A},noSelect:function(B){if(B.setAttribute&&B.nodeName.toLowerCase()!="input"&&B.nodeName.toLowerCase()!="textarea"){B.setAttribute("unselectable","on")}for(var A=0;A<B.childNodes.length;A++){bkLib.noSelect(B.childNodes[A])}},camelize:function(A){return A.replace(/\-(.)/g,function(B,C){return C.toUpperCase()})},inArray:function(A,B){return(bkLib.search(A,B)!=null)},search:function(A,C){for(var B=0;B<A.length;B++){if(A[B]==C){return B}}return null},cancelEvent:function(A){A=A||window.event;if(A.preventDefault&&A.stopPropagation){A.preventDefault();A.stopPropagation()}return false},domLoad:[],domLoaded:function(){if(arguments.callee.done){return }arguments.callee.done=true;for(i=0;i<bkLib.domLoad.length;i++){bkLib.domLoad[i]()}},onDomLoaded:function(A){this.domLoad.push(A);if(document.addEventListener){document.addEventListener("DOMContentLoaded",bkLib.domLoaded,null)}else{if(bkLib.isMSIE){document.write("<style>.nicEdit-main p { margin: 0; }</style><script id=__ie_onload defer "+((location.protocol=="https:")?"src='javascript:void(0)'":"src=//0")+"><\/script>");$BK("__ie_onload").onreadystatechange=function(){if(this.readyState=="complete"){bkLib.domLoaded()}}}}window.onload=bkLib.domLoaded}};function $BK(A){if(typeof (A)=="string"){A=document.getElementById(A)}return(A&&!A.appendTo)?bkExtend(A,bkElement.prototype):A}var bkEvent={addEvent:function(A,B){if(B){this.eventList=this.eventList||{};this.eventList[A]=this.eventList[A]||[];this.eventList[A].push(B)}return this},fireEvent:function(){var A=bkLib.toArray(arguments),C=A.shift();if(this.eventList&&this.eventList[C]){for(var B=0;B<this.eventList[C].length;B++){this.eventList[C][B].apply(this,A)}}}};function __(A){return A}Function.prototype.closure=function(){var A=this,B=bkLib.toArray(arguments),C=B.shift();return function(){if(typeof (bkLib)!="undefined"){return A.apply(C,B.concat(bkLib.toArray(arguments)))}}};Function.prototype.closureListener=function(){var A=this,C=bkLib.toArray(arguments),B=C.shift();return function(E){E=E||window.event;if(E.target){var D=E.target}else{var D=E.srcElement}return A.apply(B,[E,D].concat(C))}};
var nicEditorConfig = bkClass.extend({
buttons : {
'bold' : {name : __('Click to Bold'), command : 'Bold', tags : ['B','STRONG'], css : {'font-weight' : 'bold'}, key : 'b'},
'italic' : {name : __('Click to Italic'), command : 'Italic', tags : ['EM','I'], css : {'font-style' : 'italic'}, key : 'i'},
'underline' : {name : __('Click to Underline'), command : 'Underline', tags : ['U'], css : {'text-decoration' : 'underline'}, key : 'u'},
'left' : {name : __('Left Align'), command : 'justifyleft', noActive : true},
'center' : {name : __('Center Align'), command : 'justifycenter', noActive : true},
'right' : {name : __('Right Align'), command : 'justifyright', noActive : true},
'justify' : {name : __('Justify Align'), command : 'justifyfull', noActive : true},
'ol' : {name : __('Insert Ordered List'), command : 'insertorderedlist', tags : ['OL']},
'ul' : {name : __('Insert Unordered List'), command : 'insertunorderedlist', tags : ['UL']},
'subscript' : {name : __('Click to Subscript'), command : 'subscript', tags : ['SUB']},
'superscript' : {name : __('Click to Superscript'), command : 'superscript', tags : ['SUP']},
'strikethrough' : {name : __('Click to Strike Through'), command : 'strikeThrough', css : {'text-decoration' : 'line-through'}},
'removeformat' : {name : __('Remove Formatting'), command : 'removeformat', noActive : true},
'indent' : {name : __('Indent Text'), command : 'indent', noActive : true},
'outdent' : {name : __('Remove Indent'), command : 'outdent', noActive : true},
'hr' : {name : __('Horizontal Rule'), command : 'insertHorizontalRule', noActive : true}
},
iconsPath : './ui/theme/default/scripts/nicEditorIcons.gif',
buttonList : ['save','bold','italic','underline','left','center','right','justify','ol','ul','fontSize','fontFamily','fontFormat','indent','outdent','image','upload','link','unlink','forecolor','bgcolor'],
iconList : {"xhtml":1,"bgcolor":2,"forecolor":3,"bold":4,"center":5,"hr":6,"indent":7,"italic":8,"justify":9,"left":10,"ol":11,"outdent":12,"removeformat":13,"right":14,"save":15,"strikethrough":16,"subscript":17,"superscript":18,"ul":19,"underline":20,"image":21,"link":22,"unlink":23,"close":24,"arrow":25,"upload":26}
});
;
var nicEditors={nicPlugins:[],editors:[],registerPlugin:function(B,A){this.nicPlugins.push({p:B,o:A})},allTextAreas:function(C){var A=document.getElementsByTagName("textarea");for(var B=0;B<A.length;B++){nicEditors.editors.push(new nicEditor(C).panelInstance(A[B]))}return nicEditors.editors},findEditor:function(C){var B=nicEditors.editors;for(var A=0;A<B.length;A++){if(B[A].instanceById(C)){return B[A].instanceById(C)}}}};var nicEditor=bkClass.extend({construct:function(C){this.options=new nicEditorConfig();bkExtend(this.options,C);this.nicInstances=new Array();this.loadedPlugins=new Array();var A=nicEditors.nicPlugins;for(var B=0;B<A.length;B++){this.loadedPlugins.push(new A[B].p(this,A[B].o))}nicEditors.editors.push(this);bkLib.addEvent(document.body,"mousedown",this.selectCheck.closureListener(this))},panelInstance:function(B,C){B=this.checkReplace($BK(B));var A=new bkElement("DIV").setStyle({width:(parseInt(B.getStyle("width"))||B.clientWidth)+"px"}).appendBefore(B);this.setPanel(A);return this.addInstance(B,C)},checkReplace:function(B){var A=nicEditors.findEditor(B);if(A){A.removeInstance(B);A.removePanel()}return B},addInstance:function(B,C){B=this.checkReplace($BK(B));if(B.contentEditable||!!window.opera){var A=new nicEditorInstance(B,C,this)}else{var A=new nicEditorIFrameInstance(B,C,this)}this.nicInstances.push(A);return this},removeInstance:function(C){C=$BK(C);var B=this.nicInstances;for(var A=0;A<B.length;A++){if(B[A].e==C){B[A].remove();this.nicInstances.splice(A,1)}}},removePanel:function(A){if(this.nicPanel){this.nicPanel.remove();this.nicPanel=null}},instanceById:function(C){C=$BK(C);var B=this.nicInstances;for(var A=0;A<B.length;A++){if(B[A].e==C){return B[A]}}},setPanel:function(A){this.nicPanel=new nicEditorPanel($BK(A),this.options,this);this.fireEvent("panel",this.nicPanel);return this},nicCommand:function(B,A){if(this.selectedInstance){this.selectedInstance.nicCommand(B,A)}},getIcon:function(D,A){var C=this.options.iconList[D];var B=(A.iconFiles)?A.iconFiles[D]:"";return{backgroundImage:"url('"+((C)?this.options.iconsPath:B)+"')",backgroundPosition:((C)?((C-1)*-18):0)+"px 0px"}},selectCheck:function(C,A){var B=false;do{if(A.className&&A.className.indexOf("nicEdit")!=-1){return false}}while(A=A.parentNode);this.fireEvent("blur",this.selectedInstance,A);this.lastSelectedInstance=this.selectedInstance;this.selectedInstance=null;return false}});nicEditor=nicEditor.extend(bkEvent);
var nicEditorInstance=bkClass.extend({isSelected:false,construct:function(G,D,C){this.ne=C;this.elm=this.e=G;this.options=D||{};newX=parseInt(G.getStyle("width"))||G.clientWidth;newY=parseInt(G.getStyle("height"))||G.clientHeight;this.initialHeight=newY-8;var H=(G.nodeName.toLowerCase()=="textarea");if(H||this.options.hasPanel){var B=(bkLib.isMSIE&&!((typeof document.body.style.maxHeight!="undefined")&&document.compatMode=="CSS1Compat"));var E={width:newX+"px",border:"1px solid #ccc",borderTop:0,overflowY:"auto",overflowX:"hidden"};E[(B)?"height":"maxHeight"]=(this.ne.options.maxHeight)?this.ne.options.maxHeight+"px":null;this.editorContain=new bkElement("DIV").setStyle(E).appendBefore(G);var A=new bkElement("DIV").setStyle({width:(newX-8)+"px",margin:"4px",minHeight:newY+"px"}).addClass("main").appendTo(this.editorContain);G.setStyle({display:"none"});A.innerHTML=G.innerHTML;if(H){A.setContent(G.value);this.copyElm=G;var F=G.parentTag("FORM");if(F){bkLib.addEvent(F,"submit",this.saveContent.closure(this))}}A.setStyle((B)?{height:newY+"px"}:{overflow:"hidden"});this.elm=A}this.ne.addEvent("blur",this.blur.closure(this));this.init();this.blur()},init:function(){this.elm.setAttribute("contentEditable","true");if(this.getContent()==""){this.setContent("<br />")}this.instanceDoc=document.defaultView;this.elm.addEvent("mousedown",this.selected.closureListener(this)).addEvent("keypress",this.keyDown.closureListener(this)).addEvent("focus",this.selected.closure(this)).addEvent("blur",this.blur.closure(this)).addEvent("keyup",this.selected.closure(this));this.ne.fireEvent("add",this)},remove:function(){this.saveContent();if(this.copyElm||this.options.hasPanel){this.editorContain.remove();this.e.setStyle({display:"block"});this.ne.removePanel()}this.disable();this.ne.fireEvent("remove",this)},disable:function(){this.elm.setAttribute("contentEditable","false")},getSel:function(){return(window.getSelection)?window.getSelection():document.selection},getRng:function(){var A=this.getSel();if(!A||A.rangeCount===0){return }return(A.rangeCount>0)?A.getRangeAt(0):A.createRange()},selRng:function(A,B){if(window.getSelection){B.removeAllRanges();B.addRange(A)}else{A.select()}},selElm:function(){var C=this.getRng();if(!C){return }if(C.startContainer){var D=C.startContainer;if(C.cloneContents().childNodes.length==1){for(var B=0;B<D.childNodes.length;B++){var A=D.childNodes[B].ownerDocument.createRange();A.selectNode(D.childNodes[B]);if(C.compareBoundaryPoints(Range.START_TO_START,A)!=1&&C.compareBoundaryPoints(Range.END_TO_END,A)!=-1){return $BK(D.childNodes[B])}}}return $BK(D)}else{return $BK((this.getSel().type=="Control")?C.item(0):C.parentElement())}},saveRng:function(){this.savedRange=this.getRng();this.savedSel=this.getSel()},restoreRng:function(){if(this.savedRange){this.selRng(this.savedRange,this.savedSel)}},keyDown:function(B,A){if(B.ctrlKey){this.ne.fireEvent("key",this,B)}},selected:function(C,A){if(!A&&!(A=this.selElm)){A=this.selElm()}if(!C.ctrlKey){var B=this.ne.selectedInstance;if(B!=this){if(B){this.ne.fireEvent("blur",B,A)}this.ne.selectedInstance=this;this.ne.fireEvent("focus",B,A)}this.ne.fireEvent("selected",B,A);this.isFocused=true;this.elm.addClass("selected")}return false},blur:function(){this.isFocused=false;this.elm.removeClass("selected")},saveContent:function(){if(this.copyElm||this.options.hasPanel){this.ne.fireEvent("save",this);(this.copyElm)?this.copyElm.value=this.getContent():this.e.innerHTML=this.getContent()}},getElm:function(){return this.elm},getContent:function(){this.content=this.getElm().innerHTML;this.ne.fireEvent("get",this);return this.content},setContent:function(A){this.content=A;this.ne.fireEvent("set",this);this.elm.innerHTML=this.content},nicCommand:function(B,A){document.execCommand(B,false,A)}});
var nicEditorIFrameInstance=nicEditorInstance.extend({savedStyles:[],init:function(){var B=this.elm.innerHTML.replace(/^\s+|\s+$/g,"");this.elm.innerHTML="";(!B)?B="<br />":B;this.initialContent=B;this.elmFrame=new bkElement("iframe").setAttributes({src:"javascript:;",frameBorder:0,allowTransparency:"true",scrolling:"no"}).setStyle({height:"100px",width:"100%"}).addClass("frame").appendTo(this.elm);if(this.copyElm){this.elmFrame.setStyle({width:(this.elm.offsetWidth-4)+"px"})}var A=["font-size","font-family","font-weight","color"];for(itm in A){this.savedStyles[bkLib.camelize(itm)]=this.elm.getStyle(itm)}setTimeout(this.initFrame.closure(this),50)},disable:function(){this.elm.innerHTML=this.getContent()},initFrame:function(){var B=$BK(this.elmFrame.contentWindow.document);B.designMode="on";B.open();var A=this.ne.options.externalCSS;B.write("<html><head>"+((A)?'<link href="'+A+'" rel="stylesheet" type="text/css" />':"")+'</head><body id="nicEditContent" style="margin: 0 !important; background-color: transparent !important;">'+this.initialContent+"</body></html>");B.close();this.frameDoc=B;this.frameWin=$BK(this.elmFrame.contentWindow);this.frameContent=$BK(this.frameWin.document.body).setStyle(this.savedStyles);this.instanceDoc=this.frameWin.document.defaultView;this.heightUpdate();this.frameDoc.addEvent("mousedown",this.selected.closureListener(this)).addEvent("keyup",this.heightUpdate.closureListener(this)).addEvent("keydown",this.keyDown.closureListener(this)).addEvent("keyup",this.selected.closure(this));this.ne.fireEvent("add",this)},getElm:function(){return this.frameContent},setContent:function(A){this.content=A;this.ne.fireEvent("set",this);this.frameContent.innerHTML=this.content;this.heightUpdate()},getSel:function(){return(this.frameWin)?this.frameWin.getSelection():this.frameDoc.selection},heightUpdate:function(){this.elmFrame.style.height=Math.max(this.frameContent.offsetHeight,this.initialHeight)+"px"},nicCommand:function(B,A){this.frameDoc.execCommand(B,false,A);setTimeout(this.heightUpdate.closure(this),100)}});
var nicEditorPanel=bkClass.extend({construct:function(E,B,A){this.elm=E;this.options=B;this.ne=A;this.panelButtons=new Array();this.buttonList=bkExtend([],this.ne.options.buttonList);this.panelContain=new bkElement("DIV").setStyle({overflow:"hidden",width:"100%",border:"1px solid #cccccc",backgroundColor:"#efefef"}).addClass("panelContain");this.panelElm=new bkElement("DIV").setStyle({margin:"2px",marginTop:"0px",zoom:1,overflow:"hidden"}).addClass("panel").appendTo(this.panelContain);this.panelContain.appendTo(E);var C=this.ne.options;var D=C.buttons;for(button in D){this.addButton(button,C,true)}this.reorder();E.noSelect()},addButton:function(buttonName,options,noOrder){var button=options.buttons[buttonName];var type=(button.type)?eval("(typeof("+button.type+') == "undefined") ? null : '+button.type+";"):nicEditorButton;var hasButton=bkLib.inArray(this.buttonList,buttonName);if(type&&(hasButton||this.ne.options.fullPanel)){this.panelButtons.push(new type(this.panelElm,buttonName,options,this.ne));if(!hasButton){this.buttonList.push(buttonName)}}},findButton:function(B){for(var A=0;A<this.panelButtons.length;A++){if(this.panelButtons[A].name==B){return this.panelButtons[A]}}},reorder:function(){var C=this.buttonList;for(var B=0;B<C.length;B++){var A=this.findButton(C[B]);if(A){this.panelElm.appendChild(A.margin)}}},remove:function(){this.elm.remove()}});
var nicEditorButton=bkClass.extend({construct:function(D,A,C,B){this.options=C.buttons[A];this.name=A;this.ne=B;this.elm=D;this.margin=new bkElement("DIV").setStyle({"float":"left",marginTop:"2px"}).appendTo(D);this.contain=new bkElement("DIV").setStyle({width:"20px",height:"20px"}).addClass("buttonContain").appendTo(this.margin);this.border=new bkElement("DIV").setStyle({backgroundColor:"#efefef",border:"1px solid #efefef"}).appendTo(this.contain);this.button=new bkElement("DIV").setStyle({width:"18px",height:"18px",overflow:"hidden",zoom:1,cursor:"pointer"}).addClass("button").setStyle(this.ne.getIcon(A,C)).appendTo(this.border);this.button.addEvent("mouseover",this.hoverOn.closure(this)).addEvent("mouseout",this.hoverOff.closure(this)).addEvent("mousedown",this.mouseClick.closure(this)).noSelect();if(!window.opera){this.button.onmousedown=this.button.onclick=bkLib.cancelEvent}B.addEvent("selected",this.enable.closure(this)).addEvent("blur",this.disable.closure(this)).addEvent("key",this.key.closure(this));this.disable();this.init()},init:function(){},hide:function(){this.contain.setStyle({display:"none"})},updateState:function(){if(this.isDisabled){this.setBg()}else{if(this.isHover){this.setBg("hover")}else{if(this.isActive){this.setBg("active")}else{this.setBg()}}}},setBg:function(A){switch(A){case"hover":var B={border:"1px solid #666",backgroundColor:"#ddd"};break;case"active":var B={border:"1px solid #666",backgroundColor:"#ccc"};break;default:var B={border:"1px solid #efefef",backgroundColor:"#efefef"}}this.border.setStyle(B).addClass("button-"+A)},checkNodes:function(A){var B=A;do{if(this.options.tags&&bkLib.inArray(this.options.tags,B.nodeName)){this.activate();return true}}while(B=B.parentNode&&B.className!="nicEdit");B=$BK(A);while(B.nodeType==3){B=$BK(B.parentNode)}if(this.options.css){for(itm in this.options.css){if(B.getStyle(itm,this.ne.selectedInstance.instanceDoc)==this.options.css[itm]){this.activate();return true}}}this.deactivate();return false},activate:function(){if(!this.isDisabled){this.isActive=true;this.updateState();this.ne.fireEvent("buttonActivate",this)}},deactivate:function(){this.isActive=false;this.updateState();if(!this.isDisabled){this.ne.fireEvent("buttonDeactivate",this)}},enable:function(A,B){this.isDisabled=false;this.contain.setStyle({opacity:1}).addClass("buttonEnabled");this.updateState();this.checkNodes(B)},disable:function(A,B){this.isDisabled=true;this.contain.setStyle({opacity:0.6}).removeClass("buttonEnabled");this.updateState()},toggleActive:function(){(this.isActive)?this.deactivate():this.activate()},hoverOn:function(){if(!this.isDisabled){this.isHover=true;this.updateState();this.ne.fireEvent("buttonOver",this)}},hoverOff:function(){this.isHover=false;this.updateState();this.ne.fireEvent("buttonOut",this)},mouseClick:function(){if(this.options.command){this.ne.nicCommand(this.options.command,this.options.commandArgs);if(!this.options.noActive){this.toggleActive()}}this.ne.fireEvent("buttonClick",this)},key:function(A,B){if(this.options.key&&B.ctrlKey&&String.fromCharCode(B.keyCode||B.charCode).toLowerCase()==this.options.key){this.mouseClick();if(B.preventDefault){B.preventDefault()}}}});
var nicPlugin=bkClass.extend({construct:function(B,A){this.options=A;this.ne=B;this.ne.addEvent("panel",this.loadPanel.closure(this));this.init()},loadPanel:function(C){var B=this.options.buttons;for(var A in B){C.addButton(A,this.options)}C.reorder()},init:function(){}});
var nicPaneOptions = { };
var nicEditorPane=bkClass.extend({construct:function(D,C,B,A){this.ne=C;this.elm=D;this.pos=D.pos();this.contain=new bkElement("div").setStyle({zIndex:"99999",overflow:"hidden",position:"absolute",left:this.pos[0]+"px",top:this.pos[1]+"px"});this.pane=new bkElement("div").setStyle({fontSize:"12px",border:"1px solid #ccc",overflow:"hidden",padding:"4px",textAlign:"left",backgroundColor:"#ffffc9"}).addClass("pane").setStyle(B).appendTo(this.contain);if(A&&!A.options.noClose){this.close=new bkElement("div").setStyle({"float":"right",height:"16px",width:"16px",cursor:"pointer"}).setStyle(this.ne.getIcon("close",nicPaneOptions)).addEvent("mousedown",A.removePane.closure(this)).appendTo(this.pane)}this.contain.noSelect().appendTo(document.body);this.position();this.init()},init:function(){},position:function(){if(this.ne.nicPanel){var B=this.ne.nicPanel.elm;var A=B.pos();var C=A[0]+parseInt(B.getStyle("width"))-(parseInt(this.pane.getStyle("width"))+8);if(C<this.pos[0]){this.contain.setStyle({left:C+"px"})}}},toggle:function(){this.isVisible=!this.isVisible;this.contain.setStyle({display:((this.isVisible)?"block":"none")})},remove:function(){if(this.contain){this.contain.remove();this.contain=null}},append:function(A){A.appendTo(this.pane)},setContent:function(A){this.pane.setContent(A)}});
var nicEditorAdvancedButton=nicEditorButton.extend({init:function(){this.ne.addEvent("selected",this.removePane.closure(this)).addEvent("blur",this.removePane.closure(this))},mouseClick:function(){if(!this.isDisabled){if(this.pane&&this.pane.pane){this.removePane()}else{this.pane=new nicEditorPane(this.contain,this.ne,{width:(this.width||"270px"),backgroundColor:"#fff"},this);this.addPane();this.ne.selectedInstance.saveRng()}}},addForm:function(C,G){this.form=new bkElement("form").addEvent("submit",this.submit.closureListener(this));this.pane.append(this.form);this.inputs={};for(itm in C){var D=C[itm];var F="";if(G){F=G.getAttribute(itm)}if(!F){F=D.value||""}var A=C[itm].type;if(A=="title"){new bkElement("div").setContent(D.txt).setStyle({fontSize:"14px",fontWeight:"bold",padding:"0px",margin:"2px 0"}).appendTo(this.form)}else{var B=new bkElement("div").setStyle({overflow:"hidden",clear:"both"}).appendTo(this.form);if(D.txt){new bkElement("label").setAttributes({"for":itm}).setContent(D.txt).setStyle({margin:"2px 4px",fontSize:"13px",width:"50px",lineHeight:"20px",textAlign:"right","float":"left"}).appendTo(B)}switch(A){case"text":this.inputs[itm]=new bkElement("input").setAttributes({id:itm,value:F,type:"text"}).setStyle({margin:"2px 0",fontSize:"13px","float":"left",height:"20px",border:"1px solid #ccc",overflow:"hidden"}).setStyle(D.style).appendTo(B);break;case"select":this.inputs[itm]=new bkElement("select").setAttributes({id:itm}).setStyle({border:"1px solid #ccc","float":"left",margin:"2px 0"}).appendTo(B);for(opt in D.options){var E=new bkElement("option").setAttributes({value:opt,selected:(opt==F)?"selected":""}).setContent(D.options[opt]).appendTo(this.inputs[itm])}break;case"content":this.inputs[itm]=new bkElement("textarea").setAttributes({id:itm}).setStyle({border:"1px solid #ccc","float":"left"}).setStyle(D.style).appendTo(B);this.inputs[itm].value=F}}}new bkElement("input").setAttributes({type:"submit"}).setStyle({backgroundColor:"#efefef",border:"1px solid #ccc",margin:"3px 0","float":"left",clear:"both"}).appendTo(this.form);this.form.onsubmit=bkLib.cancelEvent},submit:function(){},findElm:function(B,A,E){var D=this.ne.selectedInstance.getElm().getElementsByTagName(B);for(var C=0;C<D.length;C++){if(D[C].getAttribute(A)==E){return $BK(D[C])}}},removePane:function(){if(this.pane){this.pane.remove();this.pane=null;this.ne.selectedInstance.restoreRng()}}});
var nicButtonTips=bkClass.extend({construct:function(A){this.ne=A;A.addEvent("buttonOver",this.show.closure(this)).addEvent("buttonOut",this.hide.closure(this))},show:function(A){this.timer=setTimeout(this.create.closure(this,A),400)},create:function(A){this.timer=null;if(!this.pane){this.pane=new nicEditorPane(A.button,this.ne,{fontSize:"12px",marginTop:"5px"});this.pane.setContent(A.options.name)}},hide:function(A){if(this.timer){clearTimeout(this.timer)}if(this.pane){this.pane=this.pane.remove()}}});nicEditors.registerPlugin(nicButtonTips);
var nicSelectOptions = {
buttons : {
'fontSize' : {name : __('Select Font Size'), type : 'nicEditorFontSizeSelect', command : 'fontsize'},
'fontFamily' : {name : __('Select Font Family'), type : 'nicEditorFontFamilySelect', command : 'fontname'},
'fontFormat' : {name : __('Select Font Format'), type : 'nicEditorFontFormatSelect', command : 'formatBlock'}
}
};
var nicEditorSelect=bkClass.extend({construct:function(D,A,C,B){this.options=C.buttons[A];this.elm=D;this.ne=B;this.name=A;this.selOptions=new Array();this.margin=new bkElement("div").setStyle({"float":"left",margin:"2px 1px 0 1px"}).appendTo(this.elm);this.contain=new bkElement("div").setStyle({width:"90px",height:"20px",cursor:"pointer",overflow:"hidden"}).addClass("selectContain").addEvent("click",this.toggle.closure(this)).appendTo(this.margin);this.items=new bkElement("div").setStyle({overflow:"hidden",zoom:1,border:"1px solid #ccc",paddingLeft:"3px",backgroundColor:"#fff"}).appendTo(this.contain);this.control=new bkElement("div").setStyle({overflow:"hidden","float":"right",height:"18px",width:"16px"}).addClass("selectControl").setStyle(this.ne.getIcon("arrow",C)).appendTo(this.items);this.txt=new bkElement("div").setStyle({overflow:"hidden","float":"left",width:"66px",height:"14px",marginTop:"1px",fontFamily:"sans-serif",textAlign:"center",fontSize:"12px"}).addClass("selectTxt").appendTo(this.items);if(!window.opera){this.contain.onmousedown=this.control.onmousedown=this.txt.onmousedown=bkLib.cancelEvent}this.margin.noSelect();this.ne.addEvent("selected",this.enable.closure(this)).addEvent("blur",this.disable.closure(this));this.disable();this.init()},disable:function(){this.isDisabled=true;this.close();this.contain.setStyle({opacity:0.6})},enable:function(A){this.isDisabled=false;this.close();this.contain.setStyle({opacity:1})},setDisplay:function(A){this.txt.setContent(A)},toggle:function(){if(!this.isDisabled){(this.pane)?this.close():this.open()}},open:function(){this.pane=new nicEditorPane(this.items,this.ne,{width:"88px",padding:"0px",borderTop:0,borderLeft:"1px solid #ccc",borderRight:"1px solid #ccc",borderBottom:"0px",backgroundColor:"#fff"});for(var C=0;C<this.selOptions.length;C++){var B=this.selOptions[C];var A=new bkElement("div").setStyle({overflow:"hidden",borderBottom:"1px solid #ccc",width:"88px",textAlign:"left",overflow:"hidden",cursor:"pointer"});var D=new bkElement("div").setStyle({padding:"0px 4px"}).setContent(B[1]).appendTo(A).noSelect();D.addEvent("click",this.update.closure(this,B[0])).addEvent("mouseover",this.over.closure(this,D)).addEvent("mouseout",this.out.closure(this,D)).setAttributes("id",B[0]);this.pane.append(A);if(!window.opera){D.onmousedown=bkLib.cancelEvent}}},close:function(){if(this.pane){this.pane=this.pane.remove()}},over:function(A){A.setStyle({backgroundColor:"#ccc"})},out:function(A){A.setStyle({backgroundColor:"#fff"})},add:function(B,A){this.selOptions.push(new Array(B,A))},update:function(A){this.ne.nicCommand(this.options.command,A);this.close()}});var nicEditorFontSizeSelect=nicEditorSelect.extend({sel:{1:"1&nbsp;(8pt)",2:"2&nbsp;(10pt)",3:"3&nbsp;(12pt)",4:"4&nbsp;(14pt)",5:"5&nbsp;(18pt)",6:"6&nbsp;(24pt)"},init:function(){this.setDisplay("Font&nbsp;Size...");for(itm in this.sel){this.add(itm,'<font size="'+itm+'">'+this.sel[itm]+"</font>")}}});var nicEditorFontFamilySelect=nicEditorSelect.extend({sel:{arial:"Arial","comic sans ms":"Comic Sans","courier new":"Courier New",georgia:"Georgia",helvetica:"Helvetica",impact:"Impact","times new roman":"Times","trebuchet ms":"Trebuchet",verdana:"Verdana"},init:function(){this.setDisplay("Font&nbsp;Family...");for(itm in this.sel){this.add(itm,'<font face="'+itm+'">'+this.sel[itm]+"</font>")}}});var nicEditorFontFormatSelect=nicEditorSelect.extend({sel:{p:"Paragraph",pre:"Pre",h6:"Heading&nbsp;6",h5:"Heading&nbsp;5",h4:"Heading&nbsp;4",h3:"Heading&nbsp;3",h2:"Heading&nbsp;2",h1:"Heading&nbsp;1"},init:function(){this.setDisplay("Font&nbsp;Format...");for(itm in this.sel){var A=itm.toUpperCase();this.add("<"+A+">","<"+itm+' style="padding: 0px; margin: 0px;">'+this.sel[itm]+"</"+A+">")}}});nicEditors.registerPlugin(nicPlugin,nicSelectOptions);
var nicLinkOptions = {
buttons : {
'link' : {name : 'Add Link', type : 'nicLinkButton', tags : ['A']},
'unlink' : {name : 'Remove Link', command : 'unlink', noActive : true}
}
};
var nicLinkButton=nicEditorAdvancedButton.extend({addPane:function(){this.ln=this.ne.selectedInstance.selElm().parentTag("A");this.addForm({"":{type:"title",txt:"Add/Edit Link"},href:{type:"text",txt:"URL",value:"http://",style:{width:"150px"}},title:{type:"text",txt:"Title"},target:{type:"select",txt:"Open In",options:{"":"Current Window",_blank:"New Window"},style:{width:"100px"}}},this.ln)},submit:function(C){var A=this.inputs.href.value;if(A=="http://"||A==""){alert("You must enter a URL to Create a Link");return false}this.removePane();if(!this.ln){var B="javascript:nicTemp();";this.ne.nicCommand("createlink",B);this.ln=this.findElm("A","href",B)}if(this.ln){this.ln.setAttributes({href:this.inputs.href.value,title:this.inputs.title.value,target:this.inputs.target.options[this.inputs.target.selectedIndex].value})}}});nicEditors.registerPlugin(nicPlugin,nicLinkOptions);
var nicColorOptions = {
buttons : {
'forecolor' : {name : __('Change Text Color'), type : 'nicEditorColorButton', noClose : true},
'bgcolor' : {name : __('Change Background Color'), type : 'nicEditorBgColorButton', noClose : true}
}
};
var nicEditorColorButton=nicEditorAdvancedButton.extend({addPane:function(){var D={0:"00",1:"33",2:"66",3:"99",4:"CC",5:"FF"};var H=new bkElement("DIV").setStyle({width:"270px"});for(var A in D){for(var F in D){for(var E in D){var I="#"+D[A]+D[E]+D[F];var C=new bkElement("DIV").setStyle({cursor:"pointer",height:"15px","float":"left"}).appendTo(H);var G=new bkElement("DIV").setStyle({border:"2px solid "+I}).appendTo(C);var B=new bkElement("DIV").setStyle({backgroundColor:I,overflow:"hidden",width:"11px",height:"11px"}).addEvent("click",this.colorSelect.closure(this,I)).addEvent("mouseover",this.on.closure(this,G)).addEvent("mouseout",this.off.closure(this,G,I)).appendTo(G);if(!window.opera){C.onmousedown=B.onmousedown=bkLib.cancelEvent}}}}this.pane.append(H.noSelect())},colorSelect:function(A){this.ne.nicCommand("foreColor",A);this.removePane()},on:function(A){A.setStyle({border:"2px solid #000"})},off:function(A,B){A.setStyle({border:"2px solid "+B})}});var nicEditorBgColorButton=nicEditorColorButton.extend({colorSelect:function(A){this.ne.nicCommand("hiliteColor",A);this.removePane()}});nicEditors.registerPlugin(nicPlugin,nicColorOptions);
var nicImageOptions = {
buttons : {
'image' : {name : 'Add Image', type : 'nicImageButton', tags : ['IMG']}
}
};
var nicImageButton=nicEditorAdvancedButton.extend({addPane:function(){this.im=this.ne.selectedInstance.selElm().parentTag("IMG");this.addForm({"":{type:"title",txt:"Add/Edit Image"},src:{type:"text",txt:"URL",value:"http://",style:{width:"150px"}},alt:{type:"text",txt:"Alt Text",style:{width:"100px"}},align:{type:"select",txt:"Align",options:{none:"Default",left:"Left",right:"Right"}}},this.im)},submit:function(B){var C=this.inputs.src.value;if(C==""||C=="http://"){alert("You must enter a Image URL to insert");return false}this.removePane();if(!this.im){var A="javascript:nicImTemp();";this.ne.nicCommand("insertImage",A);this.im=this.findElm("IMG","src",A)}if(this.im){this.im.setAttributes({src:this.inputs.src.value,alt:this.inputs.alt.value,align:this.inputs.align.value})}}});nicEditors.registerPlugin(nicPlugin,nicImageOptions);
var nicUploadOptions = {
buttons : {
'upload' : {name : 'Upload Image', type : 'nicUploadButton'}
}
};
var nicUploadButton=nicEditorAdvancedButton.extend({nicURI:"https://api.imgur.com/3/image",errorText:"Failed to upload image",addPane:function(){if(typeof window.FormData==="undefined"){return this.onError("Image uploads are not supported in this browser, use Chrome, Firefox, or Safari instead.")}this.im=this.ne.selectedInstance.selElm().parentTag("IMG");var A=new bkElement("div").setStyle({padding:"10px"}).appendTo(this.pane.pane);new bkElement("div").setStyle({fontSize:"14px",fontWeight:"bold",paddingBottom:"5px"}).setContent("Insert an Image").appendTo(A);this.fileInput=new bkElement("input").setAttributes({type:"file"}).appendTo(A);this.progress=new bkElement("progress").setStyle({width:"100%",display:"none"}).setAttributes("max",100).appendTo(A);this.fileInput.onchange=this.uploadFile.closure(this)},onError:function(A){this.removePane();alert(A||"Failed to upload image")},uploadFile:function(){var B=this.fileInput.files[0];if(!B||!B.type.match(/image.*/)){this.onError("Only image files can be uploaded");return }this.fileInput.setStyle({display:"none"});this.setProgress(0);var A=new FormData();A.append("image",B);var C=new XMLHttpRequest();C.open("POST",this.ne.options.uploadURI||this.nicURI);C.onload=function(){try{var D=JSON.parse(C.responseText).data}catch(E){return this.onError()}if(D.error){return this.onError(D.error)}this.onUploaded(D)}.closure(this);C.onerror=this.onError.closure(this);C.upload.onprogress=function(D){this.setProgress(D.loaded/D.total)}.closure(this);C.setRequestHeader("Authorization","Client-ID c37fc05199a05b7");C.send(A)},setProgress:function(A){this.progress.setStyle({display:"block"});if(A<0.98){this.progress.value=A}else{this.progress.removeAttribute("value")}},onUploaded:function(B){this.removePane();var D=B.link;if(!this.im){this.ne.selectedInstance.restoreRng();var C="javascript:nicImTemp();";this.ne.nicCommand("insertImage",D);this.im=this.findElm("IMG","src",D)}var A=parseInt(this.ne.selectedInstance.elm.getStyle("width"));if(this.im){this.im.setAttributes({src:D,width:(A&&B.width)?Math.min(A,B.width):""})}}});nicEditors.registerPlugin(nicPlugin,nicUploadOptions);
var nicCodeOptions = {
buttons : {
'xhtml' : {name : 'Edit HTML', type : 'nicCodeButton'}
}
};
var nicCodeButton=nicEditorAdvancedButton.extend({width:"350px",addPane:function(){this.addForm({"":{type:"title",txt:"Edit HTML"},code:{type:"content",value:this.ne.selectedInstance.getContent(),style:{width:"340px",height:"200px"}}})},submit:function(B){var A=this.inputs.code.value;this.ne.selectedInstance.setContent(A);this.removePane()}});nicEditors.registerPlugin(nicPlugin,nicCodeOptions);

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

File diff suppressed because one or more lines are too long

View File

@ -60,8 +60,8 @@
<li class="fullscreen hidden-xs"> <li class="fullscreen hidden-xs">
<a href="#"><i class="ion ion-qr-scanner"></i></a> <a href="#"><i class="ion ion-qr-scanner"></i></a>
</li> </li>
<!-- Notification on progress, hide it -->
<li class="notify-drop hidden-xs dropdown"> <li class="notify-drop hidden-xs dropdown hidden">
<a href="#" data-toggle="dropdown"> <a href="#" data-toggle="dropdown">
<i class="ion ion-chatboxes"></i> <i class="ion ion-chatboxes"></i>
<span class="badge badge-danger badge-xs circle">3</span> <span class="badge badge-danger badge-xs circle">3</span>
@ -96,10 +96,9 @@
<nav class="site-nav clearfix" role="navigation"> <nav class="site-nav clearfix" role="navigation">
{if $_admin['user_type'] eq 'Admin' || $_admin['user_type'] eq 'Sales'} {if $_admin['user_type'] eq 'Admin' || $_admin['user_type'] eq 'Sales'}
<div class="profile clearfix mb15"> <div class="profile clearfix mb15">
<img src="system/uploads/admin.png" alt="admin"> <img src="system/uploads/admin.png" alt="admin">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
<div class="group"> <div class="group">
<div class="dropdown">{$_admin['fullname']}<span class="caret"></span> <div class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown" aria-expanded="false">{$_admin['fullname']}<span class="caret"></a></span>
<ul class="dropdown-menu"> <ul class="dropdown-menu">
<li><a href="{$_url}settings/users-edit/{$_admin['id']}"><i class="ion ion-person"></i> {$_L['My_Account']}<div class="ripple-wrapper"></div></a></li> <li><a href="{$_url}settings/users-edit/{$_admin['id']}"><i class="ion ion-person"></i> {$_L['My_Account']}<div class="ripple-wrapper"></div></a></li>
<li><a href="{$_url}settings/change-password"><i class="ion ion-settings"></i> {$_L['Change_Password']}</a></li> <li><a href="{$_url}settings/change-password"><i class="ion ion-settings"></i> {$_L['Change_Password']}</a></li>
@ -108,14 +107,12 @@
</div> </div>
<small class="desig">{if $_admin['user_type'] eq 'Admin'} {$_L['Administrator']} {else} {$_L['Sales']} {/if}</small> <small class="desig">{if $_admin['user_type'] eq 'Admin'} {$_L['Administrator']} {else} {$_L['Sales']} {/if}</small>
</div> </div>
</a>
</div> </div>
{else} {else}
<div class="profile clearfix mb15"> <div class="profile clearfix mb15">
<img src="system/uploads/user.jpg" alt="admin"> <img src="system/uploads/user.jpg" alt="admin">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
<div class="group"> <div class="group">
<div class="dropdown">{$_user['fullname']}<span class="caret"></span> <div class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown" aria-expanded="false">{$_user['fullname']}<span class="caret"></span></a>
<ul class="dropdown-menu"> <ul class="dropdown-menu">
<li><a href="{$_url}accounts/profile"><i class="ion ion-person"></i> {$_L['My_Account']}<div class="ripple-wrapper"></div></a></li> <li><a href="{$_url}accounts/profile"><i class="ion ion-person"></i> {$_L['My_Account']}<div class="ripple-wrapper"></div></a></li>
<li><a href="{$_url}accounts/change-password"><i class="ion ion-settings"></i> {$_L['Change_Password']}</a></li> <li><a href="{$_url}accounts/change-password"><i class="ion ion-settings"></i> {$_L['Change_Password']}</a></li>
@ -124,19 +121,19 @@
</div> </div>
<small class="desig">{$_L['Member']}</small> <small class="desig">{$_L['Member']}</small>
</div> </div>
</a>
</div> </div>
{/if} {/if}
<ul class="list-unstyled clearfix nav-list mb15"> <ul id="leftMenu" class="list-unstyled clearfix nav-list mb15">
<li {if $_system_menu eq 'dashboard'}class="active"{/if}> <li {if $_system_menu eq 'dashboard'}class="active"{/if}>
<a href="{$_url}dashboard"> <a href="{$_url}dashboard">
<i class="ion ion-monitor"></i> <i class="ion ion-monitor"></i>
<span class="text">{$_L['Dashboard']}</span> <span class="text">{$_L['Dashboard']}</span>
</a> </a>
</li> </li>
<li {if $_system_menu eq 'message'}class="open"{/if}> <!-- Message on progress, hide it -->
<a href="#"> <li class="hidden {if $_system_menu eq 'message'}open{/if}">
<a href="#" onClick="toggleDropdownMobile(this)">
<i class="ion ion-email"></i> <i class="ion ion-email"></i>
<span class="text">{$_L['Private_Message']}</span> <span class="text">{$_L['Private_Message']}</span>
<i class="arrow ion-chevron-left"></i> <i class="arrow ion-chevron-left"></i>
@ -149,7 +146,7 @@
</li> </li>
{if $_admin['user_type'] eq 'Admin' || $_admin['user_type'] eq 'Sales'} {if $_admin['user_type'] eq 'Admin' || $_admin['user_type'] eq 'Sales'}
<li {if $_system_menu eq 'customers'}class="open"{/if}> <li {if $_system_menu eq 'customers'}class="open"{/if}>
<a href="#"> <a href="#" onClick="toggleDropdownMobile(this)">
<i class="ion ion-android-contacts"></i> <i class="ion ion-android-contacts"></i>
<span class="text">{$_L['Customers']}</span> <span class="text">{$_L['Customers']}</span>
<i class="arrow ion-chevron-left"></i> <i class="arrow ion-chevron-left"></i>
@ -160,7 +157,7 @@
</ul> </ul>
</li> </li>
<li {if $_system_menu eq 'prepaid'}class="open"{/if}> <li {if $_system_menu eq 'prepaid'}class="open"{/if}>
<a href="#"> <a href="#" onClick="toggleDropdownMobile(this)">
<i class="ion ion-card"></i> <i class="ion ion-card"></i>
<span class="text">{$_L['Prepaid']}</span> <span class="text">{$_L['Prepaid']}</span>
<i class="arrow ion-chevron-left"></i> <i class="arrow ion-chevron-left"></i>
@ -173,7 +170,7 @@
</ul> </ul>
</li> </li>
<li {if $_system_menu eq 'services'}class="open"{/if}> <li {if $_system_menu eq 'services'}class="open"{/if}>
<a href="#"> <a href="#" onClick="toggleDropdownMobile(this)">
<i class="ion ion-cube"></i> <i class="ion ion-cube"></i>
<span class="text">{$_L['Services']}</span> <span class="text">{$_L['Services']}</span>
<i class="arrow ion-chevron-left"></i> <i class="arrow ion-chevron-left"></i>
@ -185,7 +182,7 @@
</ul> </ul>
</li> </li>
<li {if $_system_menu eq 'reports'}class="open"{/if}> <li {if $_system_menu eq 'reports'}class="open"{/if}>
<a href="#"> <a href="#" onClick="toggleDropdownMobile(this)">
<i class="ion ion-clipboard"></i> <i class="ion ion-clipboard"></i>
<span class="text">{$_L['Reports']}</span> <span class="text">{$_L['Reports']}</span>
<i class="arrow ion-chevron-left"></i> <i class="arrow ion-chevron-left"></i>
@ -197,7 +194,7 @@
</li> </li>
{else} {else}
<li {if $_system_menu eq 'voucher'}class="open"{/if}> <li {if $_system_menu eq 'voucher'}class="open"{/if}>
<a href="#"> <a href="#" onClick="toggleDropdownMobile(this)">
<i class="ion ion-card"></i> <i class="ion ion-card"></i>
<span class="text">{$_L['Voucher']}</span> <span class="text">{$_L['Voucher']}</span>
<i class="arrow ion-chevron-left"></i> <i class="arrow ion-chevron-left"></i>
@ -214,7 +211,7 @@
</a> </a>
</li> </li>
<li {if $_system_menu eq 'accounts'}class="open"{/if}> <li {if $_system_menu eq 'accounts'}class="open"{/if}>
<a href="#"> <a href="#" onClick="toggleDropdownMobile(this)">
<i class="ion ion-gear-a"></i> <i class="ion ion-gear-a"></i>
<span class="text">{$_L['My_Account']}</span> <span class="text">{$_L['My_Account']}</span>
<i class="arrow ion-chevron-left"></i> <i class="arrow ion-chevron-left"></i>
@ -228,7 +225,7 @@
{/if} {/if}
{if $_admin['user_type'] eq 'Admin'} {if $_admin['user_type'] eq 'Admin'}
<li {if $_system_menu eq 'network'}class="open"{/if}> <li {if $_system_menu eq 'network'}class="open"{/if}>
<a href="#"> <a href="#" onClick="toggleDropdownMobile(this)">
<i class="ion ion-network"></i> <i class="ion ion-network"></i>
<span class="text">{$_L['Network']}</span> <span class="text">{$_L['Network']}</span>
<i class="arrow ion-chevron-left"></i> <i class="arrow ion-chevron-left"></i>
@ -238,8 +235,21 @@
<li {if $_system_menu eq 'network'}class="active"{/if}><a href="{$_url}pool/list">{$_L['Pool']}</a></li> <li {if $_system_menu eq 'network'}class="active"{/if}><a href="{$_url}pool/list">{$_L['Pool']}</a></li>
</ul> </ul>
</li> </li>
<li {if $_system_menu eq 'pages'}class="open"{/if}>
<a href="#" onClick="toggleDropdownMobile(this)">
<i class="ion ion-document"></i>
<span class="text">{$_L['Static_Pages']}</span>
<i class="arrow ion-chevron-left"></i>
</a>
<ul class="inner-drop list-unstyled">
<li {if $_system_menu eq 'pages'}class="active"{/if}><a href="{$_url}pages/Order_Voucher">{$_L['Order_Voucher']}</a></li>
<li {if $_system_menu eq 'pages'}class="active"{/if}><a href="{$_url}pages/Voucher">{$_L['Voucher']} Template</a></li>
<li {if $_system_menu eq 'pages'}class="active"{/if}><a href="{$_url}pages/Announcement">{$_L['Announcement']} Editor</a></li>
<li {if $_system_menu eq 'pages'}class="active"{/if}><a href="{$_url}pages/Registration_Info">{$_L['Registration_Info']} Editor</a></li>
</ul>
</li>
<li {if $_system_menu eq 'settings'}class="open"{/if}> <li {if $_system_menu eq 'settings'}class="open"{/if}>
<a href="#"> <a href="#" onClick="toggleDropdownMobile(this)">
<i class="ion ion-gear-a"></i> <i class="ion ion-gear-a"></i>
<span class="text">{$_L['Settings']}</span> <span class="text">{$_L['Settings']}</span>
<i class="arrow ion-chevron-left"></i> <i class="arrow ion-chevron-left"></i>
@ -252,6 +262,12 @@
<li>&nbsp;</li> <li>&nbsp;</li>
</ul> </ul>
</li> </li>
<li {if $_system_menu eq 'disquss'}class="active"{/if}>
<a href="{$_url}disquss">
<i class="ion ion-chatbubbles"></i>
<span class="text">Disquss</span>
</a>
</li>
{/if} {/if}
</ul> </ul>
@ -261,7 +277,18 @@
<p>{date('Y')} &copy; <span>{$_c['CompanyName']}</span></p> <p>{date('Y')} &copy; <span>{$_c['CompanyName']}</span></p>
</footer> </footer>
</aside> </aside>
<script>
// i find bug that dropdown menu in mobile browser doesnt active, so i force to show all
var mobile = false;
if( /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) ) {
mobile = true;
}
function toggleDropdownMobile(node){
if(mobile){
$(node).parent('li').addClass('open');
}
}
</script>
<div class="content-container" id="content"> <div class="content-container" id="content">
<div class="page {if $_system_menu eq 'dashboard'}page-dashboard{/if}{if $_system_menu eq 'reports'}page-invoice{/if}"> <div class="page {if $_system_menu eq 'dashboard'}page-dashboard{/if}{if $_system_menu eq 'reports'}page-invoice{/if}">

View File

@ -52,7 +52,7 @@
<a href="#"><i class="ion ion-qr-scanner"></i></a> <a href="#"><i class="ion ion-qr-scanner"></i></a>
</li> </li>
<li class="notify-drop hidden-xs dropdown"> <li class="notify-drop hidden hidden-xs dropdown">
<a href="#" data-toggle="dropdown"> <a href="#" data-toggle="dropdown">
<i class="ion ion-chatboxes"></i> <i class="ion ion-chatboxes"></i>
<span class="badge badge-danger badge-xs circle">3</span> <span class="badge badge-danger badge-xs circle">3</span>
@ -86,10 +86,9 @@
<nav class="site-nav clearfix" role="navigation"> <nav class="site-nav clearfix" role="navigation">
<div class="profile clearfix mb15"> <div class="profile clearfix mb15">
<img src="system/uploads/user.jpg" alt="admin"> <img src="https://robohash.org/{$_user['id']}?set=set3&size=100x100&bgset=bg1" alt="admin">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
<div class="group"> <div class="group">
<div class="dropdown">{$_user['fullname']}<span class="caret"></span> <div class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown" aria-expanded="false">{$_user['fullname']}<span class="caret"></span></a>
<ul class="dropdown-menu"> <ul class="dropdown-menu">
<li><a href="{$_url}accounts/profile"><i class="ion ion-person"></i> {$_L['My_Account']}<div class="ripple-wrapper"></div></a></li> <li><a href="{$_url}accounts/profile"><i class="ion ion-person"></i> {$_L['My_Account']}<div class="ripple-wrapper"></div></a></li>
<li><a href="{$_url}accounts/change-password"><i class="ion ion-settings"></i> {$_L['Change_Password']}</a></li> <li><a href="{$_url}accounts/change-password"><i class="ion ion-settings"></i> {$_L['Change_Password']}</a></li>
@ -98,7 +97,6 @@
</div> </div>
<small class="desig">{$_L['Member']}</small> <small class="desig">{$_L['Member']}</small>
</div> </div>
</a>
</div> </div>
<ul class="list-unstyled clearfix nav-list mb15"> <ul class="list-unstyled clearfix nav-list mb15">
@ -108,8 +106,8 @@
<span class="text">{$_L['Dashboard']}</span> <span class="text">{$_L['Dashboard']}</span>
</a> </a>
</li> </li>
<li {if $_system_menu eq 'pm'}class="open"{/if}> <li class="hidden {if $_system_menu eq 'pm'}open{/if}">
<a href="#"> <a href="#" onClick="toggleDropdownMobile(this)">
<i class="ion ion-email"></i> <i class="ion ion-email"></i>
<span class="text">{$_L['Private_Message']}</span> <span class="text">{$_L['Private_Message']}</span>
<i class="arrow ion-chevron-left"></i> <i class="arrow ion-chevron-left"></i>
@ -122,7 +120,7 @@
</li> </li>
<li {if $_system_menu eq 'voucher'}class="open"{/if}> <li {if $_system_menu eq 'voucher'}class="open"{/if}>
<a href="#"> <a href="#" onClick="toggleDropdownMobile(this)">
<i class="ion ion-card"></i> <i class="ion ion-card"></i>
<span class="text">{$_L['Voucher']}</span> <span class="text">{$_L['Voucher']}</span>
<i class="arrow ion-chevron-left"></i> <i class="arrow ion-chevron-left"></i>
@ -133,13 +131,13 @@
</ul> </ul>
</li> </li>
<li {if $_system_menu eq 'order'}class="active"{/if}> <li {if $_system_menu eq 'order'}class="active"{/if}>
<a href="{$_url}order"> <a href="{$_url}page/Order_Voucher">
<i class="ion ion-ios-cart"></i> <i class="ion ion-ios-cart"></i>
<span class="text">{$_L['Order_Voucher']}</span> <span class="text">{$_L['Order_Voucher']}</span>
</a> </a>
</li> </li>
<li {if $_system_menu eq 'accounts'}class="open"{/if}> <li {if $_system_menu eq 'accounts'}class="open"{/if}>
<a href="#"> <a href="#" onClick="toggleDropdownMobile(this)">
<i class="ion ion-gear-a"></i> <i class="ion ion-gear-a"></i>
<span class="text">{$_L['My_Account']}</span> <span class="text">{$_L['My_Account']}</span>
<i class="arrow ion-chevron-left"></i> <i class="arrow ion-chevron-left"></i>
@ -159,7 +157,18 @@
<p>{date('Y')} &copy; <span>{$_c['CompanyName']}</span></p> <p>{date('Y')} &copy; <span>{$_c['CompanyName']}</span></p>
</footer> </footer>
</aside> </aside>
<script>
// i find bug that dropdown menu in mobile browser doesnt active, so i force to show all
var mobile = false;
if( /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) ) {
mobile = true;
}
function toggleDropdownMobile(node){
if(mobile){
$(node).parent('li').addClass('open');
}
}
</script>
<div class="content-container" id="content"> <div class="content-container" id="content">
<div class="page {if $_system_menu eq 'dashboard'}page-dashboard{/if}"> <div class="page {if $_system_menu eq 'dashboard'}page-dashboard{/if}">

View File

@ -0,0 +1,10 @@
/*!
* Bootstrap Colorpicker v2.5.1
* https://itsjavi.com/bootstrap-colorpicker/
*
* Originally written by (c) 2012 Stefan Petre
* Licensed under the Apache License v2.0
* http://www.apache.org/licenses/LICENSE-2.0.txt
*
*/.colorpicker-saturation{width:100px;height:100px;background-image:url(../img/bootstrap-colorpicker/saturation.png);cursor:crosshair;float:left}.colorpicker-saturation i{display:block;height:5px;width:5px;border:1px solid #000;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;position:absolute;top:0;left:0;margin:-4px 0 0 -4px}.colorpicker-saturation i b{display:block;height:5px;width:5px;border:1px solid #fff;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.colorpicker-alpha,.colorpicker-hue{width:15px;height:100px;float:left;cursor:row-resize;margin-left:4px;margin-bottom:4px}.colorpicker-alpha i,.colorpicker-hue i{display:block;height:1px;background:#000;border-top:1px solid #fff;position:absolute;top:0;left:0;width:100%;margin-top:-1px}.colorpicker-hue{background-image:url(../img/bootstrap-colorpicker/hue.png)}.colorpicker-alpha{background-image:url(../img/bootstrap-colorpicker/alpha.png);display:none}.colorpicker-alpha,.colorpicker-hue,.colorpicker-saturation{background-size:contain}.colorpicker{padding:4px;min-width:130px;margin-top:1px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;z-index:2500}.colorpicker:after,.colorpicker:before{display:table;content:"";line-height:0}.colorpicker:after{clear:both}.colorpicker:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0,0,0,.2);position:absolute;top:-7px;left:6px}.colorpicker:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #fff;position:absolute;top:-6px;left:7px}.colorpicker div{position:relative}.colorpicker.colorpicker-with-alpha{min-width:140px}.colorpicker.colorpicker-with-alpha .colorpicker-alpha{display:block}.colorpicker-color{height:10px;margin-top:5px;clear:both;background-image:url(../img/bootstrap-colorpicker/alpha.png);background-position:0 100%}.colorpicker-color div{height:10px}.colorpicker-selectors{display:none;height:10px;margin-top:5px;clear:both}.colorpicker-selectors i{cursor:pointer;float:left;height:10px;width:10px}.colorpicker-selectors i+i{margin-left:3px}.colorpicker-element .add-on i,.colorpicker-element .input-group-addon i{display:inline-block;cursor:pointer;height:16px;vertical-align:text-top;width:16px}.colorpicker.colorpicker-inline{position:relative;display:inline-block;float:none;z-index:auto}.colorpicker.colorpicker-horizontal{width:110px;min-width:110px;height:auto}.colorpicker.colorpicker-horizontal .colorpicker-saturation{margin-bottom:4px}.colorpicker.colorpicker-horizontal .colorpicker-color{width:100px}.colorpicker.colorpicker-horizontal .colorpicker-alpha,.colorpicker.colorpicker-horizontal .colorpicker-hue{width:100px;height:15px;float:left;cursor:col-resize;margin-left:0;margin-bottom:4px}.colorpicker.colorpicker-horizontal .colorpicker-alpha i,.colorpicker.colorpicker-horizontal .colorpicker-hue i{display:block;height:15px;background:#fff;position:absolute;top:0;left:0;width:1px;border:none;margin-top:0}.colorpicker.colorpicker-horizontal .colorpicker-hue{background-image:url(../img/bootstrap-colorpicker/hue-horizontal.png)}.colorpicker.colorpicker-horizontal .colorpicker-alpha{background-image:url(../img/bootstrap-colorpicker/alpha-horizontal.png)}.colorpicker-right:before{left:auto;right:6px}.colorpicker-right:after{left:auto;right:7px}.colorpicker-no-arrow:before{border-right:0;border-left:0}.colorpicker-no-arrow:after{border-right:0;border-left:0}.colorpicker-alpha.colorpicker-visible,.colorpicker-hue.colorpicker-visible,.colorpicker-saturation.colorpicker-visible,.colorpicker-selectors.colorpicker-visible,.colorpicker.colorpicker-visible{display:block}.colorpicker-alpha.colorpicker-hidden,.colorpicker-hue.colorpicker-hidden,.colorpicker-saturation.colorpicker-hidden,.colorpicker-selectors.colorpicker-hidden,.colorpicker.colorpicker-hidden{display:none}.colorpicker-inline.colorpicker-visible{display:inline-block}
/*# sourceMappingURL=bootstrap-colorpicker.min.css.map */

View File

@ -1,11 +1,11 @@
{include file="sections/user-header.tpl"} {include file="sections/user-header.tpl"}
<div class="row"> <div class="row">
<div class="col-md-12"> <div class="col-md-6">
<div class="dash-head clearfix mt15 mb20"> <div class="panel panel-default">
<div class="left"> <div class="panel-heading">{$_L['Welcome']}, {$_user['fullname']}</div>
<h4 class="mb5 text-light">{$_L['Welcome']}, {$_user['fullname']}</h4> <div class="panel-body" style="height:296px;max-height:296px;overflow:scroll;">
<p>{$_L['Welcome_Text_User']}</p> <p>{$_L['Welcome_Text_User']}</p>
<ul> <ul>
<li> {$_L['Account_Information']}</li> <li> {$_L['Account_Information']}</li>
<li> <a href="{$_url}voucher/activation">{$_L['Voucher_Activation']}</a></li> <li> <a href="{$_url}voucher/activation">{$_L['Voucher_Activation']}</a></li>
@ -14,33 +14,63 @@
<li> {$_L['Order_Voucher']}</li> <li> {$_L['Order_Voucher']}</li>
<li> {$_L['Private_Message']}</li> <li> {$_L['Private_Message']}</li>
</ul> </ul>
</div> </div>
</div>
</div>
<div class="col-md-6">
<br class="visible-xs-inline visible-sm-inline">
<div class="panel panel-default">
<div class="panel-heading">{$_L['Announcement']}</div>
<div class="panel-body" style="height:296px;max-height:296px;overflow:scroll;">
{include file="$_path/../pages/Announcement.html"}
</div>
</div> </div>
</div> </div>
</div> </div>
<br>
<div class="row"> <div class="row">
<div class="col-sm-12"> <div class="col-sm-6">
<div class="panel mb20 panel-primary panel-hovered"> <div class="panel panel-default table-condensed">
<div class="panel-heading">{$_L['Account_Information']}</div> <div class="panel-heading">{$_L['Account_Information']}</div>
<table class="table table-striped table-bordered">
<tr>
<td class="small text-success text-uppercase text-normal">{$_L['Username']}</td>
<td class="small mb15">{$_bill['username']}</td>
</tr>
<tr>
<td class="small text-primary text-uppercase text-normal">{$_L['Plan_Name']}</td>
<td class="small mb15">{$_bill['namebp']}</td>
</tr>
<tr>
<td class="small text-info text-uppercase text-normal">{$_L['Created_On']}</td>
<td class="small mb15">{if $_bill['time'] ne ''}{date($_c['date_format'], strtotime($_bill['recharged_on']))} {$_bill['time']}{/if}&nbsp;</td>
</tr>
<tr>
<td class="small text-danger text-uppercase text-normal">{$_L['Expires_On']}</td>
<td class="small mb15">{if $_bill['time'] ne ''}{date($_c['date_format'], strtotime($_bill['expiration']))} {$_bill['time']}{/if}&nbsp;</td>
</tr>
</table>
</div>
</div>
<div class="col-sm-6">
<br class="visible-xs-inline visible-sm-inline">
<div class="panel panel-primary panel-hovered panel-stacked mb30">
<div class="panel-heading">{$_L['Voucher_Activation']}</div>
<div class="panel-body"> <div class="panel-body">
<div class="row"> <form class="form-horizontal" method="post" role="form" action="{$_url}voucher/activation-post" >
<div class="col-sm-3"> <div class="form-group">
<p class="small text-success text-uppercase text-normal">{$_L['Username']}</p> <label class="col-md-4 control-label">{$_L['Code_Voucher']}</label>
<p class="small mb15">{$_bill['username']}</p> <div class="col-md-6">
</div> <input type="text" class="form-control" id="code" name="code" placeholder="{$_L['Enter_Voucher_Code']}">
<div class="col-sm-3"> </div>
<p class="small text-primary text-uppercase text-normal">{$_L['Plan_Name']}</p> </div>
<p class="small mb15">{$_bill['namebp']}</p>
</div> <div class="form-group">
<div class="col-sm-3"> <div align="center">
<p class="small text-info text-uppercase text-normal">{$_L['Created_On']}</p> <button class="btn btn-success waves-effect waves-light" type="submit">{$_L['Recharge']}</button>
<p class="small mb15">{date($_c['date_format'], strtotime($_bill['recharged_on']))} {$_bill['time']}</p> </div>
</div> </div>
<div class="col-sm-3"> </form>
<p class="small text-danger text-uppercase text-normal">{$_L['Expires_On']}</p>
<p class="small mb15">{date($_c['date_format'], strtotime($_bill['expiration']))} {$_bill['time']}</p>
</div>
</div>
</div> </div>
</div> </div>
</div> </div>

View File

@ -0,0 +1,14 @@
{include file="sections/user-header.tpl"}
<div class="row">
<div class="col-sm-12">
<div class="panel mb20 panel-primary panel-hovered">
<div class="panel-heading">{$_L[$pageHeader]}</div>
<div class="panel-body">
{include file="$_path/../pages/$PageFile.html"}
</div>
</div>
</div>
</div>
{include file="sections/user-footer.tpl"}

View File

@ -23,7 +23,7 @@
<a href="{$_url}settings/users-add" class="btn btn-primary btn-block waves-effect"><i class="ion ion-android-add"> </i> {$_L['Add_New_Administrator']}</a> <a href="{$_url}settings/users-add" class="btn btn-primary btn-block waves-effect"><i class="ion ion-android-add"> </i> {$_L['Add_New_Administrator']}</a>
</div>&nbsp; </div>&nbsp;
</div> </div>
<div class="table-responsive">
<table class="table table-bordered table-striped"> <table class="table table-bordered table-striped">
<thead> <thead>
<tr> <tr>
@ -51,6 +51,7 @@
{/foreach} {/foreach}
</tbody> </tbody>
</table> </table>
</div>
{$paginator['contents']} {$paginator['contents']}
</div> </div>
</div> </div>

View File

@ -20,13 +20,21 @@
</form> </form>
</div> </div>
<div class="col-md-4"> <div class="col-md-4">
<a href="{$_url}prepaid/add-voucher" class="btn btn-primary btn-block waves-effect"><i class="ion ion-android-add"> </i> {$_L['Add_Voucher']}</a> <div class="btn-group btn-group-justified" role="group">
<div class="btn-group" role="group">
<a href="{$_url}prepaid/add-voucher" class="btn btn-primary btn-block waves-effect"><i class="ion ion-android-add"> </i> {$_L['Add_Voucher']}</a>
</div>
<div class="btn-group" role="group">
<a href="{$_url}prepaid/print-voucher" target="print_voucher" class="btn btn-info"><i class="ion ion-android-print"> </i> Print</a>
</div>
</div>
</div>&nbsp; </div>&nbsp;
</div> </div>
<div class="table-responsive">
<table id="datatable" class="table table-striped table-bordered"> <table id="datatable" class="table table-striped table-bordered">
<thead> <thead>
<tr> <tr>
<th>ID</th>
<th>{$_L['Type']}</th> <th>{$_L['Type']}</th>
<th>{$_L['Routers']}</th> <th>{$_L['Routers']}</th>
<th>{$_L['Plan_Name']}</th> <th>{$_L['Plan_Name']}</th>
@ -39,6 +47,7 @@
<tbody> <tbody>
{foreach $d as $ds} {foreach $d as $ds}
<tr> <tr>
<td>{$ds['id']}</td>
<td>{$ds['type']}</td> <td>{$ds['type']}</td>
<td>{$ds['routers']}</td> <td>{$ds['routers']}</td>
<td>{$ds['name_plan']}</td> <td>{$ds['name_plan']}</td>
@ -52,6 +61,7 @@
{/foreach} {/foreach}
</tbody> </tbody>
</table> </table>
</div>
{$paginator['contents']} {$paginator['contents']}
</div> </div>
</div> </div>