Compare commits
13 Commits
Author | SHA1 | Date | |
---|---|---|---|
24d7ef3f2d | |||
0f7268ba13 | |||
a47f9cb201 | |||
e7cdacfae4 | |||
12fa57ab1c | |||
cdc9e5f9d8 | |||
8c5ef4faff | |||
d21e20c20a | |||
7fbae8f280 | |||
ab563e5005 | |||
b6c55ff5a9 | |||
2e34fa46e5 | |||
a895c8ad6c |
5
.gitignore
vendored
5
.gitignore
vendored
@ -1 +1,4 @@
|
||||
/system/config.php
|
||||
/system/config.php
|
||||
.DS_Store
|
||||
.vscode/
|
||||
ui/compiled/*.php
|
66
README.md
66
README.md
@ -1,12 +1,30 @@
|
||||
# PHP Mikrotik Billing
|
||||
----
|
||||
|
||||
[
|
||||
@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
|
||||
|
||||
----
|
||||
|
||||

|
||||
|
||||
www.phpmixbill.com
|
||||
by Ismail Marzuqi
|
||||
|
||||
New Features:
|
||||
===================================================
|
||||
----
|
||||
- New Coding (ORM & Smarty)
|
||||
- New Design (responsive)
|
||||
- NEW API Mikrotik (PEAR2_Net_RouterOS)
|
||||
@ -17,13 +35,13 @@ New Features:
|
||||
and many more...
|
||||
|
||||
STEPS: Installation
|
||||
===================================================
|
||||
----
|
||||
Auto Installer:
|
||||
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..)
|
||||
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.
|
||||
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-
|
||||
|
||||
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..)
|
||||
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
|
||||
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
|
||||
====================================================
|
||||
----
|
||||
Most current web servers with PHP & MySQL installed will be capable of running PHPMixBill v5.0.
|
||||
|
||||
Minimum Requirements
|
||||
@ -55,5 +82,24 @@ copyright
|
||||
License
|
||||
----
|
||||
|
||||
GNU General Public License version 2 or later; see LICENSE.txt
|
||||
@donate PayPal: iesien22@yahoo.com / Bank Mandiri: 130.00.1024957.4
|
||||
GNU General Public License version 2 or later
|
||||
|
||||
see LICENSE file
|
||||
|
||||
Donate to first Developer
|
||||
----
|
||||
|
||||
PayPal: iesien22@yahoo.com
|
||||
|
||||
Bank Mandiri: 130.00.1024957.4
|
||||
|
||||
Donate to ibnux
|
||||
----
|
||||
|
||||
[](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
|
BIN
Sample/Voucher_after_print.jpg
Normal file
BIN
Sample/Voucher_after_print.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 178 KiB |
BIN
Sample/Voucher_before_Printed.png
Normal file
BIN
Sample/Voucher_before_Printed.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 48 KiB |
0
Sample/dont_upload_to_server
Normal file
0
Sample/dont_upload_to_server
Normal file
72
docs/diskusi.html
Normal file
72
docs/diskusi.html
Normal 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
50
docs/index.html
Normal 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>
|
@ -7,6 +7,8 @@
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
* @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');
|
||||
App::_run();
|
||||
|
1
pages/Announcement.html
Normal file
1
pages/Announcement.html
Normal file
@ -0,0 +1 @@
|
||||
Pengumuman!!<br>Besok libur<br><br>Announcement!!<br>Tomorrow holiday<br>
|
1
pages/Order_Voucher.html
Normal file
1
pages/Order_Voucher.html
Normal file
@ -0,0 +1 @@
|
||||
You can buy a voucher in my home<br><br><br>Dapatkan Voucher Internet di Warung terdekat
|
2
pages/Registration_Info.html
Normal file
2
pages/Registration_Info.html
Normal 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
31
pages/Voucher.html
Normal 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
8
pages/index.html
Normal 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
BIN
system/.DS_Store
vendored
Binary file not shown.
@ -80,6 +80,7 @@ $ui->assign('app_url', APP_URL);
|
||||
define('U', APP_URL.'/index.php?_route=');
|
||||
$ui->assign('_url', APP_URL.'/index.php?_route=');
|
||||
$ui->assign('_theme', $_theme);
|
||||
$ui->assign('_path', __DIR__);
|
||||
$ui->assign('_c', $config);
|
||||
$ui->assign('_L', $_L);
|
||||
$ui->assign('_system_menu', 'dashboard');
|
||||
@ -110,12 +111,25 @@ if (isset($_SESSION['notify'])) {
|
||||
unset($_SESSION['ntype']);
|
||||
}
|
||||
|
||||
// on some server, it getting error because of slash is backwards
|
||||
function _autoloader($class) {
|
||||
if (strpos($class, '_') !== false) {
|
||||
$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{
|
||||
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';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -113,11 +113,19 @@ switch ($action) {
|
||||
$removeRequest->setArgument('numbers', $id);
|
||||
$client->sendSync($removeRequest);
|
||||
}
|
||||
$d->delete();
|
||||
$c->delete();
|
||||
try{
|
||||
$d->delete();
|
||||
}catch(Exception $e){}
|
||||
try{
|
||||
$c->delete();
|
||||
}catch(Exception $e){}
|
||||
}else{
|
||||
$d->delete();
|
||||
$c->delete();
|
||||
try{
|
||||
$d->delete();
|
||||
}catch(Exception $e){}
|
||||
try{
|
||||
$c->delete();
|
||||
}catch(Exception $e){}
|
||||
}
|
||||
|
||||
r2(U . 'customers/list', 's', $_L['User_Delete_Ok']);
|
||||
|
@ -56,4 +56,25 @@ $ui->assign('dlog',$dlog);
|
||||
$log = ORM::for_table('tbl_logs')->count();
|
||||
$ui->assign('log',$log);
|
||||
|
||||
// Count stock
|
||||
$tmp = $v = ORM::for_table('tbl_plans')->select('id')->select('name_plan')->find_many();
|
||||
$plans = array();
|
||||
$stocks = array("used"=>0,"unused"=>0);
|
||||
$n = 0;
|
||||
foreach($tmp as $plan){
|
||||
$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');
|
23
system/controllers/disquss.php
Normal file
23
system/controllers/disquss.php
Normal 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');
|
||||
}
|
@ -7,6 +7,6 @@
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
* @donate PayPal: iesien22@yahoo.com / Bank Mandiri: 130.00.1024957.4
|
||||
**/
|
||||
session_start();
|
||||
if (session_status() == PHP_SESSION_NONE) session_start();
|
||||
session_destroy();
|
||||
header('location: index.php');
|
@ -11,10 +11,13 @@ _auth();
|
||||
$ui->assign('_title', $_L['Order_Voucher'].'- '. $config['CompanyName']);
|
||||
$ui->assign('_system_menu', 'order');
|
||||
|
||||
$action = $routes['1'];
|
||||
$user = User::_info();
|
||||
$ui->assign('_user', $user);
|
||||
|
||||
switch ($action) {
|
||||
default:
|
||||
$ui->display('404.tpl');
|
||||
}
|
||||
if(file_exists(__DIR__."/../../pages/".str_replace(".","",$action).".html")){
|
||||
$ui->assign("PageFile",$action);
|
||||
$ui->assign("pageHeader",$action);
|
||||
$ui->display('user-pages.tpl');
|
||||
}else
|
||||
$ui->display('404.tpl');
|
42
system/controllers/pages.php
Normal file
42
system/controllers/pages.php
Normal 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');
|
||||
}
|
@ -95,6 +95,7 @@ switch ($action) {
|
||||
} catch (Exception $e) {
|
||||
die('Unable to connect to the router.');
|
||||
}
|
||||
|
||||
$printRequest = new RouterOS\Request(
|
||||
'/ip hotspot user print .proplist=name',
|
||||
RouterOS\Query::where('name', $c['username'])
|
||||
@ -104,13 +105,59 @@ switch ($action) {
|
||||
$client($removeRequest
|
||||
->setArgument('numbers', $userName)
|
||||
);
|
||||
/* iBNuX Added:
|
||||
* Time limit to Mikrotik
|
||||
* 'Time_Limit', 'Data_Limit', 'Both_Limit'
|
||||
*/
|
||||
$addRequest = new RouterOS\Request('/ip/hotspot/user/add');
|
||||
$client->sendSync($addRequest
|
||||
->setArgument('name', $c['username'])
|
||||
->setArgument('profile', $p['name_plan'])
|
||||
->setArgument('password', $c['password'])
|
||||
);
|
||||
|
||||
if($p['typebp']=="Limited"){
|
||||
if($p['limit_type']=="Time_Limit"){
|
||||
if($p['time_unit']=='Hrs')
|
||||
$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->username = $c['username'];
|
||||
$b->plan_id = $plan;
|
||||
@ -144,12 +191,59 @@ switch ($action) {
|
||||
} catch (Exception $e) {
|
||||
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');
|
||||
$client->sendSync($addRequest
|
||||
->setArgument('name', $c['username'])
|
||||
->setArgument('profile', $p['name_plan'])
|
||||
->setArgument('password', $c['password'])
|
||||
);
|
||||
if($p['typebp']=="Limited"){
|
||||
if($p['limit_type']=="Time_Limit"){
|
||||
if($p['time_unit']=='Hrs')
|
||||
$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->customer_id = $id_customer;
|
||||
@ -391,11 +485,20 @@ switch ($action) {
|
||||
|
||||
$code = _post('code');
|
||||
if ($code != ''){
|
||||
$ui->assign('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{
|
||||
$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);
|
||||
@ -415,6 +518,83 @@ switch ($action) {
|
||||
$ui->display('voucher-add.tpl');
|
||||
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':
|
||||
$type = _post('type');
|
||||
$plan = _post('plan');
|
||||
|
235
system/controllers/register.php
Normal file
235
system/controllers/register.php
Normal 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;
|
||||
}
|
||||
|
@ -32,8 +32,9 @@ foreach ($d as $ds){
|
||||
if($ds['type'] == 'Hotspot'){
|
||||
$date_now = strtotime(date("Y-m-d H:i:s"));
|
||||
$expiration = strtotime($ds['expiration'].' '.$ds['time']);
|
||||
|
||||
echo $ds['expiration']." : ".$ds['username'];
|
||||
if ($date_now >= $expiration){
|
||||
echo " : EXPIRED \r\n";
|
||||
$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();
|
||||
$m = ORM::for_table('tbl_routers')->where('name',$ds['routers'])->find_one();
|
||||
@ -43,6 +44,7 @@ foreach ($d as $ds){
|
||||
} catch (Exception $e) {
|
||||
die('Unable to connect to the router.');
|
||||
}
|
||||
|
||||
$printRequest = new RouterOS\Request('/ip/hotspot/user/print');
|
||||
$printRequest->setArgument('.proplist', '.id');
|
||||
$printRequest->setQuery(RouterOS\Query::where('name', $c['username']));
|
||||
@ -66,12 +68,14 @@ foreach ($d as $ds){
|
||||
//update database user dengan status off
|
||||
$u->status = 'off';
|
||||
$u->save();
|
||||
}
|
||||
}else
|
||||
echo " : ACTIVE \r\n";
|
||||
}else{
|
||||
$date_now = strtotime(date("Y-m-d H:i:s"));
|
||||
$expiration = strtotime($ds['expiration'].' '.$ds['time']);
|
||||
|
||||
echo $ds['expiration']." : ".$ds['username'];
|
||||
if ($date_now >= $expiration){
|
||||
echo " : EXPIRED \r\n";
|
||||
$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();
|
||||
$m = ORM::for_table('tbl_routers')->where('name',$ds['routers'])->find_one();
|
||||
@ -102,7 +106,8 @@ foreach ($d as $ds){
|
||||
|
||||
$u->status = 'off';
|
||||
$u->save();
|
||||
}
|
||||
}else
|
||||
echo " : ACTIVE \r\n";
|
||||
}
|
||||
}
|
||||
|
||||
|
BIN
system/install/.DS_Store
vendored
BIN
system/install/.DS_Store
vendored
Binary file not shown.
@ -19,18 +19,18 @@ CREATE TABLE `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 ("3","currency_code","Rp.");
|
||||
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 ("6","nstyle","blue");
|
||||
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 ("9","thousands_sep",",");
|
||||
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 ("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 ("12","phone","081322225141");
|
||||
INSERT INTO tbl_appconfig (`id`,`setting`,`value`) VALUES ("11","address","");
|
||||
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 ("14","note","Thank you...");
|
||||
|
||||
@ -221,7 +221,7 @@ CREATE TABLE `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'
|
||||
|
@ -32,12 +32,11 @@ if ($cn == '1') {
|
||||
$db_password = \'' . $db_password . '\';
|
||||
$db_name = \'' . $db_name . '\';
|
||||
define(\'APP_URL\', \'' . $appurl . '\');
|
||||
$_app_stage = \'Live\';
|
||||
';
|
||||
$_app_stage = \'Live\';';
|
||||
$wConfig = "../config.php";
|
||||
$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");
|
||||
|
||||
|
||||
fwrite($fh, $input);
|
||||
fclose($fh);
|
||||
|
||||
|
BIN
system/lan/.DS_Store
vendored
BIN
system/lan/.DS_Store
vendored
Binary file not shown.
@ -5,15 +5,27 @@ Language Name: English
|
||||
Contributor: Ismail Marzuqi
|
||||
Web: www.phpmixbill.com
|
||||
Email: iesien22@yahoo.com
|
||||
|
||||
2017
|
||||
Contributor: Ibnu Maksum (@ibnux)
|
||||
|
||||
------------------------------------
|
||||
*/
|
||||
|
||||
$_L['Login'] = 'Login';
|
||||
$_L['Sign_In_Member'] = 'Sign In to Member Panel';
|
||||
$_L['Sign_In_Admin'] = 'Sign In to Admin Panel';
|
||||
$_L['Login'] = 'Log-in';
|
||||
$_L['Register'] = 'Register';
|
||||
$_L['Announcement'] = 'Announcement';
|
||||
$_L['Registration_Info'] = 'Registration Info';
|
||||
$_L['Register_Voucher_Failed'] = 'Voucher not found, please buy voucher befor register';
|
||||
$_L['Register_Success'] = 'Register Success! You can login now';
|
||||
$_L['Sign_In_Member'] = 'Log in to Member Panel';
|
||||
$_L['Register_Member'] = 'Register as Member';
|
||||
$_L['Sign_In_Admin'] = 'Masuk ke Admin Panel';
|
||||
$_L['Logo'] = 'PHPMixBill';
|
||||
$_L['Username'] = 'Username';
|
||||
$_L['Password'] = 'Password';
|
||||
$_L['PasswordsNotMatch'] = 'Passwords does not match';
|
||||
$_L['account_already_exist'] = 'Account already axist';
|
||||
$_L['Manage'] = 'Manage';
|
||||
$_L['Submit'] = 'Submit';
|
||||
$_L['Save'] = 'Save Changes';
|
||||
@ -25,6 +37,11 @@ $_L['Created_Successfully'] = 'Data Created Successfully';
|
||||
$_L['Updated_Successfully'] = 'Data Updated Successfully';
|
||||
$_L['Delete_Successfully'] = 'Data Deleted Successfully';
|
||||
|
||||
$_L['Static_Pages'] = "Static Pages";
|
||||
$_L['Failed_Save_Page'] = "Failed to save page, make sure i can write to folder pages, <i>chmod 664 pages/*.html<i>";
|
||||
$_L['Success_Save_Page'] = "Saving page success";
|
||||
$_L['Info_Page'] = "Sometimes you need to refresh 3 times until content change";
|
||||
|
||||
$_L['Dashboard'] = 'Dashboard';
|
||||
$_L['Search_Contact'] = 'Search Customers...';
|
||||
$_L['My_Account'] = 'My Account';
|
||||
@ -111,6 +128,7 @@ $_L['Select_Account'] = 'Select Account';
|
||||
$_L['Service_Plan'] = 'Service Plan';
|
||||
$_L['Recharge'] = 'Recharge';
|
||||
$_L['Method'] = 'Method';
|
||||
$_L['account_created_successfully'] = 'Account Created Successfully';
|
||||
|
||||
$_L['Database_Status'] = 'Database Status';
|
||||
$_L['Total_Database_Size'] = 'Total Database Size';
|
||||
@ -165,10 +183,12 @@ $_L['Number_of_Vouchers'] = 'Number of Vouchers';
|
||||
$_L['Length_Code'] = 'Length Code';
|
||||
$_L['Code_Voucher'] = 'Code Voucher';
|
||||
$_L['Voucher'] = 'Voucher';
|
||||
$_L['Voucher_Hotspot'] = 'Hotspot Voucher';
|
||||
$_L['Status_Voucher'] = 'Status Voucher';
|
||||
$_L['Add_Voucher'] = 'Add Vouchers';
|
||||
$_L['Voucher_Successfully'] = 'Create Vouchers Successfully';
|
||||
$_L['Generate'] = 'Generate';
|
||||
$_L['Print_Info'] = 'Print side by side, it will easy to cut';
|
||||
|
||||
$_L['From_Date'] = 'From Date';
|
||||
$_L['To_Date'] = 'To Date';
|
||||
@ -197,9 +217,9 @@ $_L['Title'] = 'Title';
|
||||
$_L['Message'] = 'Message';
|
||||
$_L['Account_Information'] = 'Your Account Information';
|
||||
$_L['Welcome_Text_User'] = 'Welcome to the Panel Members page, on this page you can:';
|
||||
$_L['Welcome_Text_Admin'] = '<b>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['Do_Not_Access'] = 'You do not have permission to access this page';
|
||||
$_L['Incorrect_Current_Password'] = 'Incorrect Current Password';
|
||||
|
@ -5,15 +5,27 @@ Language Name: Indonesia
|
||||
Contributor: Ismail Marzuqi
|
||||
Web: www.phpmixbill.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['Register_Member'] = 'Mendaftar sebagai pelanggan<br>pastikan anda sudah membeli voucher';
|
||||
$_L['Sign_In_Admin'] = 'Masuk ke Admin Panel';
|
||||
$_L['Logo'] = 'PHPMixBill';
|
||||
$_L['Username'] = 'Username';
|
||||
$_L['Password'] = 'Password';
|
||||
$_L['PasswordsNotMatch'] = 'Sandi tidak sama';
|
||||
$_L['account_already_exist'] = 'Username sudah ada yang menggunakan';
|
||||
$_L['Manage'] = 'Proses';
|
||||
$_L['Submit'] = 'Kirim';
|
||||
$_L['Save'] = 'Simpan Perubahan';
|
||||
@ -25,6 +37,11 @@ $_L['Created_Successfully'] = 'Data berhasil di buat';
|
||||
$_L['Updated_Successfully'] = 'Data berhasil di ubah';
|
||||
$_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['Search_Contact'] = 'Cari username member...';
|
||||
$_L['My_Account'] = 'Akun Saya';
|
||||
@ -111,6 +128,7 @@ $_L['Select_Account'] = 'Pilih Akun';
|
||||
$_L['Service_Plan'] = 'Paket';
|
||||
$_L['Recharge'] = 'Isi Ulang Akun';
|
||||
$_L['Method'] = 'Metode';
|
||||
$_L['account_created_successfully'] = 'Account Created Successfully';
|
||||
|
||||
$_L['Database_Status'] = 'Status Database';
|
||||
$_L['Total_Database_Size'] = 'Ukuran Database';
|
||||
@ -164,10 +182,12 @@ $_L['Number_of_Vouchers'] = 'Jumlah Voucher';
|
||||
$_L['Length_Code'] = 'Panjang Kode';
|
||||
$_L['Code_Voucher'] = 'Kode Voucher';
|
||||
$_L['Voucher'] = 'Voucher';
|
||||
$_L['Voucher_Hotspot'] = 'Voucher Hotspot';
|
||||
$_L['Status_Voucher'] = 'Status Voucher';
|
||||
$_L['Add_Voucher'] = 'Tambah Voucher';
|
||||
$_L['Add_Voucher'] = 'Tambah';
|
||||
$_L['Voucher_Successfully'] = 'Berhasil membuat Voucher baru';
|
||||
$_L['Generate'] = 'Generate';
|
||||
$_L['Print_Info'] = 'Print bolak balik, biar mudah dipotong dan hemat kertas';
|
||||
|
||||
$_L['From_Date'] = 'Dari Tanggal';
|
||||
$_L['To_Date'] = 'Hingga Tanggal';
|
||||
@ -196,7 +216,7 @@ $_L['Title'] = 'Title';
|
||||
$_L['Message'] = 'Message';
|
||||
$_L['Account_Information'] = 'Informasi Akun Anda';
|
||||
$_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
|
||||
$_L['Invalid_Username_or_Password'] = 'Username atau Password Salah';
|
||||
|
BIN
system/uploads/.DS_Store
vendored
BIN
system/uploads/.DS_Store
vendored
Binary file not shown.
BIN
system/vendors/.DS_Store
vendored
BIN
system/vendors/.DS_Store
vendored
Binary file not shown.
BIN
system/vendors/smarty/libs/.DS_Store
vendored
BIN
system/vendors/smarty/libs/.DS_Store
vendored
Binary file not shown.
BIN
ui/.DS_Store
vendored
BIN
ui/.DS_Store
vendored
Binary file not shown.
BIN
ui/theme/.DS_Store
vendored
BIN
ui/theme/.DS_Store
vendored
Binary file not shown.
@ -27,12 +27,11 @@
|
||||
<input type="text" class="form-control" id="phone" name="phone" value="{$_c['phone']}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="form-group hidden">
|
||||
<label class="col-md-2 control-label">Theme</label>
|
||||
<div class="col-md-6">
|
||||
<select name="theme" id="theme" class="form-control">
|
||||
<option value="default" {if $_c['theme'] eq 'default'}selected="selected" {/if}>Default</option>
|
||||
<option value="blue" {if $_c['theme'] eq 'blue'}selected="selected" {/if}>Blue</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -1,12 +1,12 @@
|
||||
{include file="sections/header.tpl"}
|
||||
|
||||
{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="dash-head clearfix mt15 mb20">
|
||||
<div class="left">
|
||||
<h4 class="mb5 text-light">Welcome to PHPMixBill v5.0</h4>
|
||||
<p class="small">{$_L['Welcome_Text_Admin']}</p>
|
||||
<h4 class="mb5 text-light">Dashboard</h4>
|
||||
<p class="small"></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -83,8 +83,36 @@
|
||||
<div class="row">
|
||||
<div class="col-md-7">
|
||||
<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">
|
||||
<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">
|
||||
<thead>
|
||||
<tr>
|
||||
@ -125,6 +153,12 @@
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="panel panel-default panel-hovered mb20 activities">
|
||||
<div class="panel-heading">PHPMIXBILL</div>
|
||||
<div class="panel-body">
|
||||
{$_L['Welcome_Text_Admin']}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
27
ui/theme/default/disquss.tpl
Normal file
27
ui/theme/default/disquss.tpl
Normal 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"}
|
@ -6,14 +6,6 @@
|
||||
<title>{$_title} - {$_L['Login']}</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">
|
||||
@ -23,49 +15,67 @@
|
||||
<!--[if IE 9]> <script src="{$_theme}/scripts/ie/matchMedia.js"></script> <![endif]-->
|
||||
|
||||
</head>
|
||||
<body id="app" class="app off-canvas body-full">
|
||||
<div class="main-container clearfix">
|
||||
<div class="content-container" id="content">
|
||||
<div class="page page-auth">
|
||||
<div class="auth-container">
|
||||
<div class="form-head mb20">
|
||||
<h1 class="site-logo h2 mb5 mt5 text-center text-uppercase text-bold"><a href="./">{$_L['Logo']}</a></h1>
|
||||
<h5 class="text-normal h5 text-center">{$_L['Sign_In_Member']}</h5>
|
||||
</div>
|
||||
{if isset($notify)}
|
||||
<body>
|
||||
<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}
|
||||
{/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>
|
||||
{/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>
|
||||
<script src="scripts/vendors.js"></script>
|
||||
</body>
|
||||
|
40
ui/theme/default/page-edit.tpl
Normal file
40
ui/theme/default/page-edit.tpl
Normal 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"}
|
133
ui/theme/default/print-voucher.tpl
Normal file
133
ui/theme/default/print-voucher.tpl
Normal 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 > <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>
|
111
ui/theme/default/register.tpl
Normal file
111
ui/theme/default/register.tpl
Normal 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>
|
@ -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>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="table-responsive">
|
||||
<table class="table table-striped table-bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
@ -52,6 +52,7 @@
|
||||
{/foreach}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{$paginator['contents']}
|
||||
</div>
|
||||
</div>
|
||||
|
8
ui/theme/default/scripts/bootstrap.min.js
vendored
8
ui/theme/default/scripts/bootstrap.min.js
vendored
File diff suppressed because one or more lines are too long
113
ui/theme/default/scripts/nicEdit.js
Normal file
113
ui/theme/default/scripts/nicEdit.js
Normal 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 (8pt)",2:"2 (10pt)",3:"3 (12pt)",4:"4 (14pt)",5:"5 (18pt)",6:"6 (24pt)"},init:function(){this.setDisplay("Font 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 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 6",h5:"Heading 5",h4:"Heading 4",h3:"Heading 3",h2:"Heading 2",h1:"Heading 1"},init:function(){this.setDisplay("Font 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);
|
||||
|
BIN
ui/theme/default/scripts/nicEditorIcons.gif
Normal file
BIN
ui/theme/default/scripts/nicEditorIcons.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.5 KiB |
5
ui/theme/default/scripts/plugins/bootstrap-colorpicker.min.js
vendored
Normal file
5
ui/theme/default/scripts/plugins/bootstrap-colorpicker.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
@ -60,8 +60,8 @@
|
||||
<li class="fullscreen hidden-xs">
|
||||
<a href="#"><i class="ion ion-qr-scanner"></i></a>
|
||||
</li>
|
||||
|
||||
<li class="notify-drop hidden-xs dropdown">
|
||||
<!-- Notification on progress, hide it -->
|
||||
<li class="notify-drop hidden-xs dropdown hidden">
|
||||
<a href="#" data-toggle="dropdown">
|
||||
<i class="ion ion-chatboxes"></i>
|
||||
<span class="badge badge-danger badge-xs circle">3</span>
|
||||
@ -96,10 +96,9 @@
|
||||
<nav class="site-nav clearfix" role="navigation">
|
||||
{if $_admin['user_type'] eq 'Admin' || $_admin['user_type'] eq 'Sales'}
|
||||
<div class="profile clearfix mb15">
|
||||
<img src="system/uploads/admin.png" alt="admin">
|
||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
|
||||
<img src="system/uploads/admin.png" alt="admin">
|
||||
<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">
|
||||
<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>
|
||||
@ -108,14 +107,12 @@
|
||||
</div>
|
||||
<small class="desig">{if $_admin['user_type'] eq 'Admin'} {$_L['Administrator']} {else} {$_L['Sales']} {/if}</small>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
{else}
|
||||
<div class="profile clearfix mb15">
|
||||
<img src="system/uploads/user.jpg" alt="admin">
|
||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
|
||||
<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">
|
||||
<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>
|
||||
@ -124,19 +121,19 @@
|
||||
</div>
|
||||
<small class="desig">{$_L['Member']}</small>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
{/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}>
|
||||
<a href="{$_url}dashboard">
|
||||
<i class="ion ion-monitor"></i>
|
||||
<span class="text">{$_L['Dashboard']}</span>
|
||||
</a>
|
||||
</li>
|
||||
<li {if $_system_menu eq 'message'}class="open"{/if}>
|
||||
<a href="#">
|
||||
<!-- Message on progress, hide it -->
|
||||
<li class="hidden {if $_system_menu eq 'message'}open{/if}">
|
||||
<a href="#" onClick="toggleDropdownMobile(this)">
|
||||
<i class="ion ion-email"></i>
|
||||
<span class="text">{$_L['Private_Message']}</span>
|
||||
<i class="arrow ion-chevron-left"></i>
|
||||
@ -149,7 +146,7 @@
|
||||
</li>
|
||||
{if $_admin['user_type'] eq 'Admin' || $_admin['user_type'] eq 'Sales'}
|
||||
<li {if $_system_menu eq 'customers'}class="open"{/if}>
|
||||
<a href="#">
|
||||
<a href="#" onClick="toggleDropdownMobile(this)">
|
||||
<i class="ion ion-android-contacts"></i>
|
||||
<span class="text">{$_L['Customers']}</span>
|
||||
<i class="arrow ion-chevron-left"></i>
|
||||
@ -160,7 +157,7 @@
|
||||
</ul>
|
||||
</li>
|
||||
<li {if $_system_menu eq 'prepaid'}class="open"{/if}>
|
||||
<a href="#">
|
||||
<a href="#" onClick="toggleDropdownMobile(this)">
|
||||
<i class="ion ion-card"></i>
|
||||
<span class="text">{$_L['Prepaid']}</span>
|
||||
<i class="arrow ion-chevron-left"></i>
|
||||
@ -173,7 +170,7 @@
|
||||
</ul>
|
||||
</li>
|
||||
<li {if $_system_menu eq 'services'}class="open"{/if}>
|
||||
<a href="#">
|
||||
<a href="#" onClick="toggleDropdownMobile(this)">
|
||||
<i class="ion ion-cube"></i>
|
||||
<span class="text">{$_L['Services']}</span>
|
||||
<i class="arrow ion-chevron-left"></i>
|
||||
@ -185,7 +182,7 @@
|
||||
</ul>
|
||||
</li>
|
||||
<li {if $_system_menu eq 'reports'}class="open"{/if}>
|
||||
<a href="#">
|
||||
<a href="#" onClick="toggleDropdownMobile(this)">
|
||||
<i class="ion ion-clipboard"></i>
|
||||
<span class="text">{$_L['Reports']}</span>
|
||||
<i class="arrow ion-chevron-left"></i>
|
||||
@ -197,7 +194,7 @@
|
||||
</li>
|
||||
{else}
|
||||
<li {if $_system_menu eq 'voucher'}class="open"{/if}>
|
||||
<a href="#">
|
||||
<a href="#" onClick="toggleDropdownMobile(this)">
|
||||
<i class="ion ion-card"></i>
|
||||
<span class="text">{$_L['Voucher']}</span>
|
||||
<i class="arrow ion-chevron-left"></i>
|
||||
@ -214,7 +211,7 @@
|
||||
</a>
|
||||
</li>
|
||||
<li {if $_system_menu eq 'accounts'}class="open"{/if}>
|
||||
<a href="#">
|
||||
<a href="#" onClick="toggleDropdownMobile(this)">
|
||||
<i class="ion ion-gear-a"></i>
|
||||
<span class="text">{$_L['My_Account']}</span>
|
||||
<i class="arrow ion-chevron-left"></i>
|
||||
@ -228,7 +225,7 @@
|
||||
{/if}
|
||||
{if $_admin['user_type'] eq 'Admin'}
|
||||
<li {if $_system_menu eq 'network'}class="open"{/if}>
|
||||
<a href="#">
|
||||
<a href="#" onClick="toggleDropdownMobile(this)">
|
||||
<i class="ion ion-network"></i>
|
||||
<span class="text">{$_L['Network']}</span>
|
||||
<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>
|
||||
</ul>
|
||||
</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}>
|
||||
<a href="#">
|
||||
<a href="#" onClick="toggleDropdownMobile(this)">
|
||||
<i class="ion ion-gear-a"></i>
|
||||
<span class="text">{$_L['Settings']}</span>
|
||||
<i class="arrow ion-chevron-left"></i>
|
||||
@ -252,6 +262,12 @@
|
||||
<li> </li>
|
||||
</ul>
|
||||
</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}
|
||||
</ul>
|
||||
|
||||
@ -261,7 +277,18 @@
|
||||
<p>{date('Y')} © <span>{$_c['CompanyName']}</span></p>
|
||||
</footer>
|
||||
</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="page {if $_system_menu eq 'dashboard'}page-dashboard{/if}{if $_system_menu eq 'reports'}page-invoice{/if}">
|
||||
|
||||
|
@ -52,7 +52,7 @@
|
||||
<a href="#"><i class="ion ion-qr-scanner"></i></a>
|
||||
</li>
|
||||
|
||||
<li class="notify-drop hidden-xs dropdown">
|
||||
<li class="notify-drop hidden hidden-xs dropdown">
|
||||
<a href="#" data-toggle="dropdown">
|
||||
<i class="ion ion-chatboxes"></i>
|
||||
<span class="badge badge-danger badge-xs circle">3</span>
|
||||
@ -86,10 +86,9 @@
|
||||
|
||||
<nav class="site-nav clearfix" role="navigation">
|
||||
<div class="profile clearfix mb15">
|
||||
<img src="system/uploads/user.jpg" alt="admin">
|
||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
|
||||
<img src="https://robohash.org/{$_user['id']}?set=set3&size=100x100&bgset=bg1" alt="admin">
|
||||
<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">
|
||||
<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>
|
||||
@ -98,7 +97,6 @@
|
||||
</div>
|
||||
<small class="desig">{$_L['Member']}</small>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<ul class="list-unstyled clearfix nav-list mb15">
|
||||
@ -108,8 +106,8 @@
|
||||
<span class="text">{$_L['Dashboard']}</span>
|
||||
</a>
|
||||
</li>
|
||||
<li {if $_system_menu eq 'pm'}class="open"{/if}>
|
||||
<a href="#">
|
||||
<li class="hidden {if $_system_menu eq 'pm'}open{/if}">
|
||||
<a href="#" onClick="toggleDropdownMobile(this)">
|
||||
<i class="ion ion-email"></i>
|
||||
<span class="text">{$_L['Private_Message']}</span>
|
||||
<i class="arrow ion-chevron-left"></i>
|
||||
@ -122,7 +120,7 @@
|
||||
</li>
|
||||
|
||||
<li {if $_system_menu eq 'voucher'}class="open"{/if}>
|
||||
<a href="#">
|
||||
<a href="#" onClick="toggleDropdownMobile(this)">
|
||||
<i class="ion ion-card"></i>
|
||||
<span class="text">{$_L['Voucher']}</span>
|
||||
<i class="arrow ion-chevron-left"></i>
|
||||
@ -133,13 +131,13 @@
|
||||
</ul>
|
||||
</li>
|
||||
<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>
|
||||
<span class="text">{$_L['Order_Voucher']}</span>
|
||||
</a>
|
||||
</li>
|
||||
<li {if $_system_menu eq 'accounts'}class="open"{/if}>
|
||||
<a href="#">
|
||||
<a href="#" onClick="toggleDropdownMobile(this)">
|
||||
<i class="ion ion-gear-a"></i>
|
||||
<span class="text">{$_L['My_Account']}</span>
|
||||
<i class="arrow ion-chevron-left"></i>
|
||||
@ -159,7 +157,18 @@
|
||||
<p>{date('Y')} © <span>{$_c['CompanyName']}</span></p>
|
||||
</footer>
|
||||
</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="page {if $_system_menu eq 'dashboard'}page-dashboard{/if}">
|
||||
|
||||
|
10
ui/theme/default/styles/plugins/bootstrap-colorpicker.min.css
vendored
Normal file
10
ui/theme/default/styles/plugins/bootstrap-colorpicker.min.css
vendored
Normal 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 */
|
@ -1,11 +1,11 @@
|
||||
{include file="sections/user-header.tpl"}
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<div class="dash-head clearfix mt15 mb20">
|
||||
<div class="left">
|
||||
<h4 class="mb5 text-light">{$_L['Welcome']}, {$_user['fullname']}</h4>
|
||||
<p>{$_L['Welcome_Text_User']}</p>
|
||||
<div class="col-md-6">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">{$_L['Welcome']}, {$_user['fullname']}</div>
|
||||
<div class="panel-body" style="height:296px;max-height:296px;overflow:scroll;">
|
||||
<p>{$_L['Welcome_Text_User']}</p>
|
||||
<ul>
|
||||
<li> {$_L['Account_Information']}</li>
|
||||
<li> <a href="{$_url}voucher/activation">{$_L['Voucher_Activation']}</a></li>
|
||||
@ -14,33 +14,63 @@
|
||||
<li> {$_L['Order_Voucher']}</li>
|
||||
<li> {$_L['Private_Message']}</li>
|
||||
</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>
|
||||
<br>
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
<div class="panel mb20 panel-primary panel-hovered">
|
||||
<div class="col-sm-6">
|
||||
<div class="panel panel-default table-condensed">
|
||||
<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} </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} </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="row">
|
||||
<div class="col-sm-3">
|
||||
<p class="small text-success text-uppercase text-normal">{$_L['Username']}</p>
|
||||
<p class="small mb15">{$_bill['username']}</p>
|
||||
</div>
|
||||
<div class="col-sm-3">
|
||||
<p class="small text-primary text-uppercase text-normal">{$_L['Plan_Name']}</p>
|
||||
<p class="small mb15">{$_bill['namebp']}</p>
|
||||
</div>
|
||||
<div class="col-sm-3">
|
||||
<p class="small text-info text-uppercase text-normal">{$_L['Created_On']}</p>
|
||||
<p class="small mb15">{date($_c['date_format'], strtotime($_bill['recharged_on']))} {$_bill['time']}</p>
|
||||
</div>
|
||||
<div class="col-sm-3">
|
||||
<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>
|
||||
<form class="form-horizontal" method="post" role="form" action="{$_url}voucher/activation-post" >
|
||||
<div class="form-group">
|
||||
<label class="col-md-4 control-label">{$_L['Code_Voucher']}</label>
|
||||
<div class="col-md-6">
|
||||
<input type="text" class="form-control" id="code" name="code" placeholder="{$_L['Enter_Voucher_Code']}">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<div align="center">
|
||||
<button class="btn btn-success waves-effect waves-light" type="submit">{$_L['Recharge']}</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
14
ui/theme/default/user-pages.tpl
Normal file
14
ui/theme/default/user-pages.tpl
Normal 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"}
|
@ -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>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="table-responsive">
|
||||
<table class="table table-bordered table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
@ -51,6 +51,7 @@
|
||||
{/foreach}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{$paginator['contents']}
|
||||
</div>
|
||||
</div>
|
||||
|
@ -20,13 +20,21 @@
|
||||
</form>
|
||||
</div>
|
||||
<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>
|
||||
</div>
|
||||
|
||||
<div class="table-responsive">
|
||||
<table id="datatable" class="table table-striped table-bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
<tr>
|
||||
<th>ID</th>
|
||||
<th>{$_L['Type']}</th>
|
||||
<th>{$_L['Routers']}</th>
|
||||
<th>{$_L['Plan_Name']}</th>
|
||||
@ -39,6 +47,7 @@
|
||||
<tbody>
|
||||
{foreach $d as $ds}
|
||||
<tr>
|
||||
<td>{$ds['id']}</td>
|
||||
<td>{$ds['type']}</td>
|
||||
<td>{$ds['routers']}</td>
|
||||
<td>{$ds['name_plan']}</td>
|
||||
@ -52,6 +61,7 @@
|
||||
{/foreach}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{$paginator['contents']}
|
||||
</div>
|
||||
</div>
|
||||
|
Reference in New Issue
Block a user