update wa official API
This commit is contained in:
@@ -722,7 +722,7 @@ $(document).ready(function() {
|
||||
"serverSide": true,
|
||||
"responsive": true,
|
||||
"ajax": {
|
||||
"url": "controller/get_withdrow.php?i=<?= $id; ?>",
|
||||
"url": "controller/get_withdrow.php?i=<?= $id; ?>&s=hotspot_auto",
|
||||
"type": "POST"
|
||||
},
|
||||
"pageLength": 10,
|
||||
|
||||
+39
-4
@@ -1,3 +1,31 @@
|
||||
<?php
|
||||
|
||||
function modifStatus($status) {
|
||||
$status = strtoupper(trim($status));
|
||||
|
||||
switch ($status) {
|
||||
case 'PROSES':
|
||||
$class = 'badge badge-warning text-dark'; // kuning
|
||||
break;
|
||||
case 'TERKIRIM':
|
||||
$class = 'badge badge-info'; // biru muda
|
||||
break;
|
||||
case 'DIBACA':
|
||||
$class = 'badge badge-success'; // hijau
|
||||
break;
|
||||
case 'GAGAL':
|
||||
$class = 'badge badge-danger'; // merah
|
||||
break;
|
||||
default:
|
||||
$class = 'badge badge-secondary'; // abu-abu
|
||||
break;
|
||||
}
|
||||
|
||||
return '<span class="' . $class . '">' . htmlspecialchars($status) . '</span>';
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
<!-- Main content -->
|
||||
<section class="content" style="zoom: 90%;">
|
||||
<div class="container-fluid">
|
||||
@@ -63,7 +91,7 @@
|
||||
$mulaiulang = date('Y-m-d H:i:s', strtotime("$sekarang -$jamtam hours"));
|
||||
|
||||
// Update pesan yang gagal
|
||||
$updatePesan = $pdo->prepare("UPDATE master_pesan SET status = 'PENDING' WHERE status = 'GAGAL' AND api_key = :api_key AND waktu >= :mulaiulang");
|
||||
$updatePesan = $pdo->prepare("UPDATE master_pesan SET status = 'PENDING' WHERE status = 'GAGAL' AND api_key = :api_key AND waktu >= :mulaiulang AND gateway_type = 'unofficial'");
|
||||
$updatePesan->execute([
|
||||
'api_key' => $pakw['apikey_whatsapp'],
|
||||
'mulaiulang' => $mulaiulang
|
||||
@@ -96,6 +124,7 @@
|
||||
<th>Nomor</th>
|
||||
<th>Pesan</th>
|
||||
<th>Url Image</th>
|
||||
<th>Type Gateway</th>
|
||||
<th>Status</th>
|
||||
<th>Action</th>
|
||||
</tr>
|
||||
@@ -118,9 +147,15 @@
|
||||
<td><?php echo $paket['nomor']; ?></td>
|
||||
<td style="max-width: 300px;"><?php echo $paket['pesan']; ?></td>
|
||||
<td style="max-width: 200px;"><?php echo $paket['url_file']; ?></td>
|
||||
<td><?php echo $paket['status']; ?></td>
|
||||
<td>
|
||||
<?php if($paket['status'] == 'GAGAL' || $paket['status'] == 'TERKIRIM') { ?>
|
||||
<td style="text-align: center;"><?php echo ucwords($paket['gateway_type']); ?></td>
|
||||
<td style="text-align: center;">
|
||||
<?php
|
||||
echo modifStatus($paket['status']);
|
||||
echo (empty($paket['message_status'])) ? '' : '<br>' . $paket['message_status'] ;
|
||||
?>
|
||||
</td>
|
||||
<td style="text-align: center;">
|
||||
<?php if($paket['gateway_type'] == 'unofficial' AND ($paket['status'] == 'GAGAL' || $paket['status'] == 'TERKIRIM')) { ?>
|
||||
<form method="post">
|
||||
<input type="submit" name="ulangi<?php echo $paket['id']; ?>" class="btn btn-primary btn-sm" value="Ulangi">
|
||||
</a>
|
||||
|
||||
@@ -127,9 +127,9 @@ if (isset($_POST['tambah'])) {
|
||||
|
||||
// Kirim Pesan WhatsApp
|
||||
$APIwa = new PesanWA();
|
||||
$APIwa->Create_Pesan($_POST['ids'], $last_id, 'pesan_registrasi', 'order');
|
||||
$APIwa->Create_Pesan($_POST['ids'], $last_id, 'Pesan Registrasi', 'order');
|
||||
$Pesan = $APIwa->Get_Pesan();
|
||||
$APIwa->Send_Pesan($_POST['ids'], 'sendMessage', $nomor, $Pesan);
|
||||
$APIwa->Send_Pesan($_POST['ids'], ['sendMessage','Pesan Registrasi'], $nomor, $Pesan);
|
||||
|
||||
sweetAlert("Order list telah di tambah", "success", "?" . encrypt_url('order_list'));
|
||||
|
||||
|
||||
@@ -166,4 +166,6 @@ if (isset($_POST['kirim'])) {
|
||||
}
|
||||
|
||||
|
||||
?>
|
||||
?>
|
||||
|
||||
|
||||
|
||||
@@ -985,7 +985,7 @@ if (isset($_POST['finish'])) { // Assuming 'finish' is set in session when form
|
||||
$pdo->commit();
|
||||
|
||||
// Perform Mikrotik update
|
||||
$script = ':global hsa "";:global pppa "";:local id [/system license get software-id];:local idbm ($id."'.$lastInsertIdMikrotik.'");:local uptim [/system resource get uptime];:local bname [/system resource get board-name];:foreach i in=[/ppp active find] do={:local name [/ppp active get $i name];:local ip [/ppp active get $i address];:set $pppa ("$pppa$name_$ip|");};:foreach h in=[/ip hotspot user find comment!="" and uptime<20m] do={:local cek [:pick [/ip hotspot user get $h comment] 0 6];:if ($cek = "Login.") do={:local hsuser [/ip hotspot user get $h name];:local hscom [:pick [/ip hotspot user get $h comment] 6 50];:set $hsa ("$hsa$hsuser_$hscom|");}};/tool fetch url="https://bilspro.com/api/mikrotik.php" mode=https http-method=post http-data="{\"id\":\"$idbm\",\"bm\":\"$bname\",\"ut\":\"$uptim\",\"hsa\":\"$hsa\",\"pppa\":\"$pppa\"}" keep-result=no;:delay 1s;:set $pppa ("");:set $hsa ("");';
|
||||
$script = ':global hsa "";:global pppa "";:local id [/system license get software-id];:local idbm ($id."7");:local uptim [/system resource get uptime];:local bname [/system resource get board-name];:foreach i in=[/ppp active find] do={:local name [/ppp active get $i name];:local ip [/ppp active get $i address];:local mac [/ppp active get $i caller-id];:set $pppa ("$pppa$name_$ip_$mac|");};:foreach h in=[/ip hotspot user find comment!="" and uptime<20m] do={:local cek [:pick [/ip hotspot user get $h comment] 0 6];:if ($cek = "Login.") do={:local hsuser [/ip hotspot user get $h name];:local hscom [:pick [/ip hotspot user get $h comment] 6 50];:set $hsa ("$hsa$hsuser_$hscom|");}};/tool fetch url="https://manjapro.net/api/mikrotik.php" mode=https http-method=post http-data="{\"id\":\"$idbm\",\"bm\":\"$bname\",\"ut\":\"$uptim\",\"hsa\":\"$hsa\",\"pppa\":\"$pppa\"}" keep-result=no;:delay 1s;:set $pppa ("");:set $hsa ("");';
|
||||
|
||||
$API = new RouterosAPI();
|
||||
$API->debug = false;
|
||||
|
||||
+31
-29
@@ -4,36 +4,38 @@
|
||||
<div class="card-header">
|
||||
<h4 class="text-center">Script ON LOGIN Hotspot Yang Sekali Pakai</h4>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<div class="card-body">
|
||||
<?php echo '
|
||||
:local nama $user;
|
||||
:local tanggal [/system clock get date];
|
||||
:local waktu [/system clock get time];
|
||||
:if ([/ip hotspot user get [find name=$nama] comment] = "") do={
|
||||
/ip hotspot user set [find name=$nama] comment="Login.$tanggal $waktu";
|
||||
:log warning ("User " . $nama . " berhasil login.");
|
||||
} else={
|
||||
:log warning ("User " . $nama . " berhasil melakukan login ulang.");
|
||||
}
|
||||
<!-- <div class="row">-->
|
||||
<!-- <div class="col-md-6">-->
|
||||
<!-- <div class="card-body">-->
|
||||
<?php
|
||||
// echo '
|
||||
// :local nama $user;
|
||||
// :local tanggal [/system clock get date];
|
||||
// :local waktu [/system clock get time];
|
||||
// :if ([/ip hotspot user get [find name=$nama] comment] = "") do={
|
||||
// /ip hotspot user set [find name=$nama] comment="Login.$tanggal $waktu";
|
||||
// :log warning ("User " . $nama . " berhasil login.");
|
||||
// } else={
|
||||
// :log warning ("User " . $nama . " berhasil melakukan login ulang.");
|
||||
// }
|
||||
|
||||
:if ([/system schedule find name=$nama] = "") do={
|
||||
/system schedule add name=$nama interval=ISI DENGAN INTERVAL on-event="/ip hotspot active remove [find user=$nama]; /ip hotspot user remove [find name=$nama]; /system schedule remove [find name=$nama]" start-date=$tanggal start-time=$waktu;
|
||||
}'; ?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="card-body">
|
||||
<h5 class="text-danger"><u>PERHATIAN..!</u></h5>
|
||||
<ul class="text-danger">
|
||||
<li>Sebelum di paste ke On Login silakan modif dulu "ISI DURASI VOUCHER" sesuai dengan interval Voucher nya</li>
|
||||
<li>Jika ingin memodifikasi script silahkan sesuaikan dengan fungsi yang anda mau.</li>
|
||||
<li>Jika menambahankan Telegram atau yang lainnya silahkan sesuaikan.</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
// :if ([/system schedule find name=$nama] = "") do={
|
||||
// /system schedule add name=$nama interval=ISI DENGAN INTERVAL on-event="/ip hotspot active remove [find user=$nama]; /ip hotspot user remove [find name=$nama]; /system schedule remove [find name=$nama]" start-date=$tanggal start-time=$waktu;
|
||||
// }';
|
||||
?>
|
||||
<!-- </div>-->
|
||||
<!-- </div>-->
|
||||
<!-- <div class="col-md-6">-->
|
||||
<!-- <div class="card-body">-->
|
||||
<!-- <h5 class="text-danger"><u>PERHATIAN..!</u></h5>-->
|
||||
<!-- <ul class="text-danger">-->
|
||||
<!-- <li>Sebelum di paste ke On Login silakan modif dulu "ISI DURASI VOUCHER" sesuai dengan interval Voucher nya</li>-->
|
||||
<!-- <li>Jika ingin memodifikasi script silahkan sesuaikan dengan fungsi yang anda mau.</li>-->
|
||||
<!-- <li>Jika menambahankan Telegram atau yang lainnya silahkan sesuaikan.</li>-->
|
||||
<!-- </ul>-->
|
||||
<!-- </div>-->
|
||||
<!-- </div>-->
|
||||
<!-- </div>-->
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
@@ -226,7 +226,7 @@
|
||||
<?php
|
||||
if (isset($_POST['test'.$server['id']]))
|
||||
{
|
||||
$script = ':global hsa "";:global pppa "";:local id [/system license get software-id];:local idbm ($id."'.$server['id'].'");:local uptim [/system resource get uptime];:local bname [/system resource get board-name];:foreach i in=[/ppp active find] do={:local name [/ppp active get $i name];:local ip [/ppp active get $i address];:set $pppa ("$pppa$name_$ip|");};:foreach h in=[/ip hotspot user find comment!="" and uptime<20m] do={:local cek [:pick [/ip hotspot user get $h comment] 0 6];:if ($cek = "Login.") do={:local hsuser [/ip hotspot user get $h name];:local hscom [:pick [/ip hotspot user get $h comment] 6 50];:set $hsa ("$hsa$hsuser_$hscom|");}};/tool fetch url="https://manjapro.net/api/mikrotik.php" mode=https http-method=post http-data="{\"id\":\"$idbm\",\"bm\":\"$bname\",\"ut\":\"$uptim\",\"hsa\":\"$hsa\",\"pppa\":\"$pppa\"}" keep-result=no;:delay 1s;:set $pppa ("");:set $hsa ("");';
|
||||
$script = ':global hsa "";:global pppa "";:local id [/system license get software-id];:local idbm ($id."7");:local uptim [/system resource get uptime];:local bname [/system resource get board-name];:foreach i in=[/ppp active find] do={:local name [/ppp active get $i name];:local ip [/ppp active get $i address];:local mac [/ppp active get $i caller-id];:set $pppa ("$pppa$name_$ip_$mac|");};:foreach h in=[/ip hotspot user find comment!="" and uptime<20m] do={:local cek [:pick [/ip hotspot user get $h comment] 0 6];:if ($cek = "Login.") do={:local hsuser [/ip hotspot user get $h name];:local hscom [:pick [/ip hotspot user get $h comment] 6 50];:set $hsa ("$hsa$hsuser_$hscom|");}};/tool fetch url="https://manjapro.net/api/mikrotik.php" mode=https http-method=post http-data="{\"id\":\"$idbm\",\"bm\":\"$bname\",\"ut\":\"$uptim\",\"hsa\":\"$hsa\",\"pppa\":\"$pppa\"}" keep-result=no;:delay 1s;:set $pppa ("");:set $hsa ("");';
|
||||
error_reporting(0);
|
||||
{
|
||||
$API = new RouterosAPI();
|
||||
|
||||
+102
-32
@@ -1,3 +1,72 @@
|
||||
<?php if($SvId == 2 || $_SESSION['user']['id'] == 1) { ?>
|
||||
|
||||
<!-- Main content -->
|
||||
<section class="content">
|
||||
<div class="container-fluid" style="zoom: 90%">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<div class="row">
|
||||
<div class="col-sm-6">
|
||||
<h3 class="card-title">Setting Pesan</h3>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /.card-header -->
|
||||
<div class="card-body">
|
||||
<table id="example1" class="table table-bordered table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Jenis Pesan</th>
|
||||
<th>Pesan WhataApp</th>
|
||||
<th style="max-width: 80px;">Template Cloud API</th>
|
||||
<th style="max-width: 80px;">Backroud Kwitansi</th>
|
||||
<th style="max-width: 50px;">Interval Koneksi Off</th>
|
||||
<th style="max-width: 50px;">Status Koneksi Off</th>
|
||||
<th>Tipe Gateway</th>
|
||||
<th>Action</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php
|
||||
$stmt3 = $pdo->prepare("SELECT * FROM master_template_pesan WHERE id_data_server IN ($SvId) GROUP BY nama");
|
||||
$stmt3->execute();
|
||||
$pesans = $stmt3->fetchALL(PDO::FETCH_ASSOC);
|
||||
foreach ($pesans as $pesan) {
|
||||
?>
|
||||
<tr>
|
||||
<td><?= $pesan['nama']; ?></td>
|
||||
<td style="max-width: 400px;"><?= ($pesan['gateway_type'] == 'unofficial') ? $pesan['pesan'] : '-'; ?></td>
|
||||
<td><?= $pesan['nama_template'] ?? '-'; ?></td>
|
||||
<td><?= $pesan['backround_kwitansi'] ?? '-'; ?></td>
|
||||
<td class="text-center"><?= $pesan['interval_koneksi_off'] ?? '-'; ?></td>
|
||||
<td class="text-center"><?= $pesan['status_koneksi_off'] ?? '-'; ?></td>
|
||||
<td class="text-center"><?= $pesan['status_pesan']; ?></td>
|
||||
<td class="text-center">
|
||||
<a href="?<?php echo encrypt_url('setting_pesan_pesan|'. $pesan['id']); ?>" type="button" class="btn btn-secondary btn-sm m-1" >Edit</a>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<?php } ?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- /.card-body -->
|
||||
</div>
|
||||
<!-- /.card -->
|
||||
</div>
|
||||
<!-- /.col -->
|
||||
</div>
|
||||
<!-- /.row -->
|
||||
</div>
|
||||
<!-- /.container-fluid -->
|
||||
</section>
|
||||
<!-- /.content -->
|
||||
|
||||
<?php } else { ?>
|
||||
<!-- Main content -->
|
||||
<section class="content">
|
||||
<div class="container-fluid">
|
||||
@@ -17,43 +86,43 @@
|
||||
<div class="card-body">
|
||||
<table id="example1" class="table table-bordered table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Jenis Pesan</th>
|
||||
<th>Pesan WhataApp</th>
|
||||
<th>Action</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Jenis Pesan</th>
|
||||
<th>Pesan WhataApp</th>
|
||||
<th style="max-width: 80px;">Template Cloud API</th>
|
||||
<th style="max-width: 80px;">Backroud Kwitansi</th>
|
||||
<th style="max-width: 50px;">Interval Koneksi Off</th>
|
||||
<th style="max-width: 50px;">Status Koneksi Off</th>
|
||||
<th>Tipe Gateway</th>
|
||||
<th>Action</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php
|
||||
|
||||
$aserver = mysqli_query($con,"SELECT backround_kwitansi, pesan_kirim_tagihan, pesan_peringatan_tagihan, pesan_isolir_pelanggan, pesan_melunasi_tagihan, pesan_koneksi_off, pesan_registrasi, pesan_aktivasi FROM data_server WHERE id = '$SvId' ");
|
||||
$server = mysqli_fetch_assoc($aserver);
|
||||
$data = array(
|
||||
array("id" => "1", "nama" => "pesan_kirim_tagihan", "pesan" => $server['pesan_kirim_tagihan']),
|
||||
array("id" => "2", "nama" => "pesan_peringatan_tagihan", "pesan" => $server['pesan_peringatan_tagihan']),
|
||||
array("id" => "3", "nama" => "pesan_isolir_pelanggan", "pesan" => $server['pesan_isolir_pelanggan']),
|
||||
array("id" => "4", "nama" => "pesan_melunasi_tagihan", "pesan" => $server['pesan_melunasi_tagihan']),
|
||||
array("id" => "5", "nama" => "pesan_koneksi_off", "pesan" => $server['pesan_koneksi_off']),
|
||||
array("id" => "6", "nama" => "pesan_registrasi", "pesan" => $server['pesan_registrasi']),
|
||||
array("id" => "7", "nama" => "pesan_aktivasi", "pesan" => $server['pesan_aktivasi'])
|
||||
);
|
||||
// echo "<pre>";
|
||||
// print_r($data);
|
||||
// echo "</pre>";
|
||||
foreach ($data as $key) {
|
||||
?>
|
||||
<tr>
|
||||
<td><?php echo $key['nama']; ?></td>
|
||||
<td><?php echo $key['pesan']; ?></td>
|
||||
<td>
|
||||
<a href="?<?php echo encrypt_url('setting_pesan_pesan|'.$key['nama']); ?>" type="button" class="btn btn-secondary btn-sm m-1" >Edit</a>
|
||||
</td>
|
||||
</tr>
|
||||
<?php } ?>
|
||||
<?php
|
||||
$stmt3 = $pdo->prepare("SELECT * FROM master_template_pesan WHERE id_data_server IN ($SvId) GROUP BY nama");
|
||||
$stmt3->execute();
|
||||
$pesans = $stmt3->fetchALL(PDO::FETCH_ASSOC);
|
||||
foreach ($pesans as $pesan) {
|
||||
?>
|
||||
<tr>
|
||||
<td><?= $pesan['nama']; ?></td>
|
||||
<td style="max-width: 400px;"><?= ($pesan['gateway_type'] == 'unofficial') ? $pesan['pesan'] : '-'; ?></td>
|
||||
<td><?= $pesan['nama_template'] ?? '-'; ?></td>
|
||||
<td><?= $pesan['backround_kwitansi'] ?? '-'; ?></td>
|
||||
<td class="text-center"><?= $pesan['interval_koneksi_off'] ?? '-'; ?></td>
|
||||
<td class="text-center"><?= $pesan['status_koneksi_off'] ?? '-'; ?></td>
|
||||
<td class="text-center"><?= $pesan['status_pesan']; ?></td>
|
||||
<td class="text-center">
|
||||
<a href="?<?php echo encrypt_url('setting_pesan_pesan|'. $pesan['id']); ?>" type="button" class="btn btn-secondary btn-sm m-1" >Edit</a>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<?php } ?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- /.card-body -->
|
||||
|
||||
</div>
|
||||
<!-- /.card -->
|
||||
</div>
|
||||
@@ -63,4 +132,5 @@
|
||||
</div>
|
||||
<!-- /.container-fluid -->
|
||||
</section>
|
||||
<!-- /.content -->
|
||||
<!-- /.content -->
|
||||
<?php } ?>
|
||||
+618
-65
@@ -1,6 +1,532 @@
|
||||
<?php if($SvId == 2 ) { ?>
|
||||
|
||||
<?php
|
||||
$aserver = mysqli_query($con,"SELECT $page[1],backround_kwitansi,status_koneksi_off, interval_koneksi_off, status_payment_gateway FROM data_server WHERE id = '$SvId' ");
|
||||
$server = mysqli_fetch_assoc($aserver);
|
||||
$stmt3 = $pdo->prepare("SELECT * FROM master_template_pesan WHERE id = :id");
|
||||
$stmt3->execute([':id' => $page[1]]);
|
||||
$pesan = $stmt3->fetch(PDO::FETCH_ASSOC);
|
||||
|
||||
$pesanDb = json_decode($pesan['pesan_official'], true);
|
||||
|
||||
if ($pesan['nama'] == 'Pesan Melunasi Tagihan' OR
|
||||
$pesan['nama'] == 'Pesan Isolir Pelanggan' OR
|
||||
$pesan['nama'] == 'Pesan Peringatan Tagihan' OR
|
||||
$pesan['nama'] == 'Pesan Kirim Tagihan') {
|
||||
|
||||
$baseVariable = [
|
||||
[ "key" => "#usr", "label" => "Nama Pelanggan" ],
|
||||
[ "key" => "#add", "label" => "Alamat Pelanggan" ],
|
||||
[ "key" => "#ppp", "label" => "PPPOE Pelanggan / ID Pelanggan" ],
|
||||
[ "key" => "#lyn", "label" => "Paket Berlangganan" ],
|
||||
[ "key" => "#hly", "label" => "Harga Layanan" ],
|
||||
[ "key" => "#jns", "label" => "Jenis Layanan" ],
|
||||
[ "key" => "#ket", "label" => "Keterangan Tagihan" ],
|
||||
[ "key" => "#jum", "label" => "Jumlah Tagihan" ],
|
||||
[ "key" => "#ppn", "label" => "PPN" ],
|
||||
[ "key" => "#unk", "label" => "Kode Unik (for payment gateway)" ],
|
||||
[ "key" => "#tot", "label" => "Total Tagihan" ],
|
||||
[ "key" => "#lmt", "label" => "Limit Pembayaran" ],
|
||||
[ "key" => "#lnk", "label" => "Link Payment Gateway" ]
|
||||
];
|
||||
} else {
|
||||
$baseVariable = [
|
||||
[ "key" => "#usr", "label" => "Nama Pelanggan" ],
|
||||
[ "key" => "#add", "label" => "Alamat Pelanggan" ],
|
||||
[ "key" => "#ppp", "label" => "PPPOE Pelanggan / ID Pelanggan" ],
|
||||
[ "key" => "#lyn", "label" => "Paket Berlangganan" ],
|
||||
[ "key" => "#hly", "label" => "Harga Layanan" ],
|
||||
[ "key" => "#jns", "label" => "Jenis Layanan" ]
|
||||
];
|
||||
}
|
||||
|
||||
?>
|
||||
<section class="content" style="zoom: 90%;">
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<div class="row">
|
||||
<div class="col-sm-6">
|
||||
<h3 class="card-title">Setting <?php echo $pesan['nama']; ?> <b><i class="text-success">(WhatsApp Official API)</i></b></h3>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /.card-header -->
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
<?php
|
||||
try {
|
||||
// Pastikan $SvId tidak kosong
|
||||
if (empty($SvId)) {
|
||||
throw new Exception("Parameter SvId tidak boleh kosong.");
|
||||
}
|
||||
|
||||
// Konversi jadi array (jika ada banyak ID, misalnya "1,2,3")
|
||||
$ids = array_map('intval', explode(',', $SvId));
|
||||
$ids = array_filter($ids); // buang ID kosong
|
||||
|
||||
if (empty($ids)) {
|
||||
throw new Exception("ID server tidak valid: $SvId");
|
||||
}
|
||||
|
||||
// Buat placeholder dinamis
|
||||
$placeholders = implode(',', array_fill(0, count($ids), '?'));
|
||||
|
||||
// Query database
|
||||
$sql = "SELECT * FROM whatsapp_cloud_api WHERE id_data_server IN ($placeholders) LIMIT 1";
|
||||
$stmt3 = $pdo->prepare($sql);
|
||||
$stmt3->execute($ids);
|
||||
$wacapi = $stmt3->fetch(PDO::FETCH_ASSOC);
|
||||
|
||||
$accessToken = $wacapi['token_access'];
|
||||
$phoneNumberId = $wacapi['waba_id'];
|
||||
|
||||
// URL endpoint template
|
||||
$url = "https://graph.facebook.com/v17.0/$phoneNumberId/message_templates";
|
||||
|
||||
// Request ke Cloud API
|
||||
$ch = curl_init();
|
||||
curl_setopt_array($ch, [
|
||||
CURLOPT_URL => $url,
|
||||
CURLOPT_HTTPHEADER => ["Authorization: Bearer $accessToken"],
|
||||
CURLOPT_RETURNTRANSFER => true,
|
||||
CURLOPT_TIMEOUT => 15
|
||||
]);
|
||||
$response = curl_exec($ch);
|
||||
|
||||
if (curl_errno($ch)) {
|
||||
throw new Exception("cURL Error: " . curl_error($ch));
|
||||
}
|
||||
curl_close($ch);
|
||||
|
||||
// Decode JSON
|
||||
$data = json_decode($response, true);
|
||||
if (!isset($data['data'])) {
|
||||
throw new Exception("Gagal mengambil template dari Cloud API. Response: " . $response);
|
||||
}
|
||||
|
||||
// Ambil list template
|
||||
$templates = $data['data'] ?? [];
|
||||
|
||||
// echo "<pre>";
|
||||
// print_r($templates);
|
||||
// echo "</pre>";
|
||||
|
||||
// Template yang terpilih (dari GET)
|
||||
$selectedTemplate = $_GET['template'] ?? '';
|
||||
|
||||
} catch (Exception $e) {
|
||||
echo "<p style='color:red;'>Error: " . htmlspecialchars($e->getMessage()) . "</p>";
|
||||
$templates = [];
|
||||
$selectedTemplate = '';
|
||||
}
|
||||
?>
|
||||
|
||||
<div class="col-md-3">
|
||||
<div class="card-body">
|
||||
<form method="POST" id="templateForm">
|
||||
<div class="form-group">
|
||||
<label for="template">Pilih Template:</label>
|
||||
<select class="form-control" name="template" id="template">
|
||||
<option value="">-- Pilih Template --</option>
|
||||
<?php foreach ($templates as $tpl): ?>
|
||||
<option
|
||||
value="<?= htmlspecialchars($tpl['name']) ?>"
|
||||
data-template='<?= json_encode($tpl, JSON_HEX_APOS | JSON_HEX_QUOT) ?>' <?= (htmlspecialchars($tpl['name']) == $pesan['nama_template']) ? 'selected' : '' ?>>
|
||||
<?= htmlspecialchars($tpl['name']) ?>
|
||||
</option>
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
</div>
|
||||
</form>
|
||||
<!-- Form dinamis -->
|
||||
<div id="paramForm" style="margin-top:20px;"></div>
|
||||
<hr>
|
||||
<div class="text-right">
|
||||
<button id="saveBtn" class="btn btn-success">Simpan</button>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-2">
|
||||
<div class="text-danger" style="margin: 20px;">
|
||||
<h5 class="text-center"><b><u>PERHATIAN..!</u></b></h5>
|
||||
<p style="text-align: justify;">Untuk memposisikan data dari pelanggan silahkan isi dengan Variabel di bawah ini :</p>
|
||||
<table class="table table-sm">
|
||||
<tr>
|
||||
<th>Variabel</th>
|
||||
<th></th>
|
||||
<th>Label</th>
|
||||
</tr>
|
||||
<?php
|
||||
foreach($baseVariable as $base) {
|
||||
echo '<tr>
|
||||
<td>' . $base['key'] . '</td>
|
||||
<td>:</td>
|
||||
<td>' . $base['label'] . '</td>
|
||||
<tr>';
|
||||
}
|
||||
?>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<div class="card-body" style="display:flex;justify-content:center;align-items:center;">
|
||||
<!-- Preview gaya WhatsApp -->
|
||||
<div id="waPreview" style="margin-top:20px;max-width:400px;font-family:sans-serif;">
|
||||
<div style="background:#075E54;color:white;padding:10px;border-radius:8px 8px 0 0;">
|
||||
WhatsApp Preview
|
||||
</div>
|
||||
<div style="border:1px solid #ccc;border-top:0;padding-top:10px;padding-left:10px;padding-right:10px;border-radius:0 0 8px 8px;background:#ECE5DD; padding-bottom: 20px;">
|
||||
<div style="background:white;padding:8px;border-radius:8px;display:flex;flex-direction:column;gap:0;max-width:90%;margin-bottom:-6px;">
|
||||
<div id="waHeader"></div>
|
||||
<div id="waMessage"></div>
|
||||
<div id="waFooter"></div>
|
||||
</div>
|
||||
<div id="waButtons" style="max-width:90%;"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-5">
|
||||
<div class="card-body">
|
||||
<div id="hasilUntukAPI" style="margin-top:15px;padding:10px;border:1px solid #ccc;border-radius:6px;background:#f9f9f9;"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const templateSelect = document.getElementById("template");
|
||||
const paramForm = document.getElementById("paramForm");
|
||||
const waHeader = document.getElementById("waHeader");
|
||||
const waMessage = document.getElementById("waMessage");
|
||||
const waFooter = document.getElementById("waFooter");
|
||||
const waButtons = document.getElementById("waButtons");
|
||||
|
||||
const submitBtn = document.getElementById("saveBtn");
|
||||
|
||||
// default submitBtn
|
||||
// submitBtn.disabled = true;
|
||||
|
||||
// data dari DB (PHP -> JS)
|
||||
let pesanDb = <?= json_encode($pesanDb ?? [], JSON_UNESCAPED_SLASHES) ?>;
|
||||
|
||||
// fungsi gabungkan Cloud API template dengan data DB
|
||||
function mergeWithDb(tpl, pesanDb) {
|
||||
if (!pesanDb || !pesanDb.template || !pesanDb.template.components) return tpl;
|
||||
|
||||
let dbComponents = pesanDb.template.components;
|
||||
|
||||
tpl.components.forEach((comp) => {
|
||||
let dbComp = dbComponents.find(c => c.type.toLowerCase() === comp.type.toLowerCase());
|
||||
|
||||
if (comp.type === "HEADER" && dbComp?.parameters) {
|
||||
comp.dbValue = dbComp.parameters[0]?.image?.link || "";
|
||||
}
|
||||
|
||||
if (comp.type === "BODY" && dbComp?.parameters) {
|
||||
comp.dbParams = dbComp.parameters.map(p => p.text);
|
||||
}
|
||||
|
||||
if (comp.type === "BUTTONS" && comp.buttons) {
|
||||
comp.buttons.forEach((btn, bi) => {
|
||||
let dbBtn = dbComponents.find(c =>
|
||||
c.type.toLowerCase() === "button" && parseInt(c.index) === bi
|
||||
);
|
||||
if (dbBtn?.parameters) {
|
||||
comp.buttons[bi].dbParams = dbBtn.parameters.map(p => p.text);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
return tpl;
|
||||
}
|
||||
|
||||
// trigger default on load
|
||||
window.addEventListener("DOMContentLoaded", () => {
|
||||
let selectedOpt = templateSelect.options[templateSelect.selectedIndex];
|
||||
let tplJson = selectedOpt.getAttribute("data-template");
|
||||
if (tplJson) {
|
||||
renderParamForm(JSON.parse(tplJson));
|
||||
updatePreview();
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
function renderParamForm(tpl) {
|
||||
tpl = mergeWithDb(tpl, pesanDb); // 🔹 merge dengan DB
|
||||
|
||||
paramForm.innerHTML = "";
|
||||
waHeader.innerHTML = "";
|
||||
waMessage.innerHTML = "";
|
||||
waFooter.innerHTML = "";
|
||||
waButtons.innerHTML = "";
|
||||
|
||||
if (!tpl || !tpl.components) return;
|
||||
|
||||
let formHtml = "<h5>Parameter Dinamis</h5>";
|
||||
let previewBody = "";
|
||||
|
||||
tpl.components.forEach((comp, ci) => {
|
||||
if (comp.type === "HEADER") {
|
||||
if (comp.format === "IMAGE") {
|
||||
let defaultImg = comp.dbValue || comp.example?.header_handle?.[0] || "";
|
||||
formHtml += `<div class="form-group">
|
||||
<label>Header Image URL:</label><br>
|
||||
<input class="form-control" type="text"
|
||||
name="header_image"
|
||||
value="${defaultImg}"
|
||||
oninput="updateHeaderImage(this)" required>
|
||||
</div>`;
|
||||
waHeader.innerHTML = `<img id="header-img-preview"
|
||||
src="${defaultImg}"
|
||||
style="max-width:100%;border-radius:6px;"><br>`;
|
||||
}
|
||||
}
|
||||
|
||||
if (comp.type === "BODY" && comp.text) {
|
||||
waMessage.setAttribute("data-original", comp.text);
|
||||
|
||||
let regex = /\{\{(\d+)\}\}/g;
|
||||
let match, idx = 0;
|
||||
while ((match = regex.exec(comp.text)) !== null) {
|
||||
let paramNum = match[1];
|
||||
let dbVal = comp.dbParams ? (comp.dbParams[idx] || "") : "";
|
||||
formHtml += `<div class="form-group">
|
||||
<label>Body Param ${paramNum}:</label><br>
|
||||
<input class="form-control" type="text" name="body_${paramNum}"
|
||||
value="${dbVal}"
|
||||
oninput="updatePreview()" data-placeholder="{{${paramNum}}}" required>
|
||||
</div>`;
|
||||
idx++;
|
||||
}
|
||||
|
||||
// apply formatting ke preview
|
||||
let text = comp.text
|
||||
.replace(/\*(.*?)\*/g, "<b>$1</b>")
|
||||
.replace(/__(.*?)__/g, "<u>$1</u>")
|
||||
.replace(/_(.*?)_/g, "<i>$1</i>")
|
||||
.replace(/~(.*?)~/g, "<s>$1</s>")
|
||||
.replace(/\n/g, "<br>");
|
||||
previewBody += text + "<br>";
|
||||
}
|
||||
|
||||
if (comp.type === "FOOTER" && comp.text) {
|
||||
waFooter.innerHTML = `<small class="text-secondary">${comp.text}</small><br>`;
|
||||
}
|
||||
|
||||
if (comp.type === "BUTTONS" && comp.buttons) {
|
||||
comp.buttons.forEach((btn, bi) => {
|
||||
if (btn.type === "URL") {
|
||||
let btnText = btn.text;
|
||||
let url = btn.url;
|
||||
let regex = /\{\{(\d+)\}\}/g;
|
||||
let match, idx = 0;
|
||||
while ((match = regex.exec(url)) !== null) {
|
||||
let paramNum = match[1];
|
||||
let dbVal = btn.dbParams ? (btn.dbParams[idx] || "") : "";
|
||||
formHtml += `<div class="form-group">
|
||||
<label>Button ${bi+1} Param ${paramNum}:</label><br>
|
||||
<input class="form-control" type="text" name="btn_${bi}_${paramNum}"
|
||||
value="${dbVal}"
|
||||
oninput="updatePreview()" data-placeholder="{{${paramNum}}}" required>
|
||||
</div>`;
|
||||
idx++;
|
||||
}
|
||||
|
||||
waButtons.innerHTML += `<a href="#"
|
||||
style="display:flex;align-items:center;justify-content:center;
|
||||
background:#fff;color:green;padding:8px 12px;
|
||||
border-radius:6px;border-top:1px solid #c0c0c0;
|
||||
text-decoration:none;position:relative;z-index:10;">
|
||||
<i class="fa fa-share-square" style="margin-right:8px; font-size:16px;"></i>
|
||||
<span>${btnText}</span>
|
||||
</a>`;
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
paramForm.innerHTML = formHtml;
|
||||
waMessage.innerHTML = previewBody;
|
||||
}
|
||||
|
||||
|
||||
// update preview teks saat input diisi
|
||||
function updatePreview() {
|
||||
let preview = waMessage.getAttribute("data-original"); // simpan text asli
|
||||
document.querySelectorAll("input[data-placeholder]").forEach(input => {
|
||||
let ph = input.dataset.placeholder; // contoh {{1}}
|
||||
let val = input.value || ph; // kalau kosong tetap {{1}}
|
||||
preview = preview.replace(ph, val);
|
||||
});
|
||||
|
||||
// styling simbol
|
||||
preview = preview.replace(/\*(.*?)\*/g, "<b>$1</b>");
|
||||
preview = preview.replace(/__(.*?)__/g, "<u>$1</u>");
|
||||
preview = preview.replace(/_(.*?)_/g, "<i>$1</i>");
|
||||
preview = preview.replace(/~(.*?)~/g, "<s>$1</s>");
|
||||
preview = preview.replace(/\n/g, "<br>");
|
||||
|
||||
waMessage.innerHTML = preview;
|
||||
}
|
||||
|
||||
// update header image preview
|
||||
function updateHeaderImage(input) {
|
||||
const img = document.getElementById("header-img-preview");
|
||||
if (img) img.src = input.value || "";
|
||||
}
|
||||
|
||||
// event change
|
||||
templateSelect.addEventListener("change", function() {
|
||||
let opt = this.options[this.selectedIndex];
|
||||
let tplJson = opt.getAttribute("data-template");
|
||||
if (tplJson) {
|
||||
renderParamForm(JSON.parse(tplJson));
|
||||
} else {
|
||||
paramForm.innerHTML = "";
|
||||
waHeader.innerHTML = "";
|
||||
waMessage.innerHTML = "";
|
||||
waFooter.innerHTML = "";
|
||||
waButtons.innerHTML = "";
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<script>
|
||||
function generatePayload() {
|
||||
let template = templateSelect.value;
|
||||
if (!template) {
|
||||
alert("Pilih template dulu!");
|
||||
return null;
|
||||
}
|
||||
|
||||
let data = {
|
||||
messaging_product: "whatsapp",
|
||||
recipient_type: "individual",
|
||||
to: "#no_whatsapp",
|
||||
|
||||
// <input type="text" id="toNumber" placeholder="628xxxxxx" class="form-control">
|
||||
// to: document.getElementById("toNumber")?.value || "", // isi dari input nomor tujuan
|
||||
|
||||
type: "template",
|
||||
template: {
|
||||
name: template,
|
||||
language: { code: "id" },
|
||||
components: []
|
||||
}
|
||||
};
|
||||
|
||||
// 🔹 HEADER
|
||||
let headerImageInput = document.querySelector("input[name='header_image']");
|
||||
if (headerImageInput && headerImageInput.value) {
|
||||
data.template.components.push({
|
||||
type: "header",
|
||||
parameters: [{
|
||||
type: "image",
|
||||
image: { link: headerImageInput.value }
|
||||
}]
|
||||
});
|
||||
}
|
||||
|
||||
// 🔹 BODY
|
||||
let bodyParams = [];
|
||||
document.querySelectorAll("input[name^='body_']").forEach(input => {
|
||||
if (input.value.trim() !== "") {
|
||||
bodyParams.push({ type: "text", text: input.value });
|
||||
}
|
||||
});
|
||||
if (bodyParams.length > 0) {
|
||||
data.template.components.push({
|
||||
type: "body",
|
||||
parameters: bodyParams
|
||||
});
|
||||
}
|
||||
|
||||
// 🔹 BUTTONS
|
||||
let btnInputs = document.querySelectorAll("input[name^='btn_']");
|
||||
btnInputs.forEach(input => {
|
||||
if (input.value.trim() !== "") {
|
||||
let [_, index, paramNum] = input.name.split("_"); // contoh: btn_0_1
|
||||
data.template.components.push({
|
||||
type: "button",
|
||||
sub_type: "url",
|
||||
index: parseInt(index),
|
||||
parameters: [{
|
||||
type: "text",
|
||||
text: input.value
|
||||
}]
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
// 🔘 Event tombol Simpan
|
||||
document.getElementById("saveBtn").addEventListener("click", function() {
|
||||
let payload = generatePayload();
|
||||
if (!payload) return;
|
||||
|
||||
console.log("🚀 Payload siap dikirim:", payload);
|
||||
|
||||
// tampilkan payload ke div
|
||||
document.getElementById("hasilUntukAPI").innerHTML =
|
||||
"<pre>" + JSON.stringify(payload, null, 4) + "</pre>";
|
||||
|
||||
fetch("controller/setting_pesan.php", {
|
||||
method: "POST",
|
||||
headers: { "Content-Type": "application/json" },
|
||||
body: JSON.stringify({
|
||||
payload: payload,
|
||||
nama: "<?= $pesan['nama']; ?>",
|
||||
id: "<?= $SvId; ?>"
|
||||
})
|
||||
})
|
||||
.then(r => r.json())
|
||||
.then(resp => {
|
||||
Swal.fire({
|
||||
title: resp.status === "success" ? "Berhasil ✅" : "Gagal ⚠️",
|
||||
text: resp.message,
|
||||
icon: resp.status, // success | error | warning | info
|
||||
confirmButtonText: "OK"
|
||||
});
|
||||
})
|
||||
.catch(err => {
|
||||
Swal.fire({
|
||||
title: "Error ❌",
|
||||
text: "Terjadi kesalahan koneksi: " + err,
|
||||
icon: "error",
|
||||
confirmButtonText: "OK"
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
<?php } else { ?>
|
||||
|
||||
|
||||
<?php
|
||||
$stmt3 = $pdo->prepare("SELECT * FROM master_template_pesan WHERE id = :id");
|
||||
$stmt3->execute([':id' => $page[1]]);
|
||||
$pesan = $stmt3->fetch(PDO::FETCH_ASSOC);
|
||||
|
||||
$stmt3 = $pdo->prepare("SELECT status_payment_gateway FROM data_server WHERE id = :ids");
|
||||
$stmt3->execute([':ids' => $pesan['id_data_server']]);
|
||||
$server = $stmt3->fetch(PDO::FETCH_ASSOC);
|
||||
// print_r($_SESSION);
|
||||
?>
|
||||
<!-- Main content -->
|
||||
@@ -12,7 +538,7 @@ $server = mysqli_fetch_assoc($aserver);
|
||||
<div class="card-header">
|
||||
<div class="row">
|
||||
<div class="col-sm-6">
|
||||
<h3 class="card-title">Setting <?php echo $page[1]; ?></h3>
|
||||
<h3 class="card-title">Setting <?php echo $pesan['nama']; ?></h3>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
</div>
|
||||
@@ -31,18 +557,15 @@ $server = mysqli_fetch_assoc($aserver);
|
||||
#lyn => Paket Berlangganan<br>
|
||||
#hly => Harga Layanan<br>
|
||||
#jns => Jenis Layanan<br>
|
||||
<?php if($page[1] == 'pesan_melunasi_tagihan' OR $page[1] == 'pesan_isolir_pelanggan' OR $page[1] == 'pesan_peringatan_tagihan' OR $page[1] == 'pesan_kirim_tagihan') { ?>
|
||||
<?php if($pesan['nama'] == 'Pesan Melunasi Tagihan' OR $pesan['nama'] == 'Pesan Isolir Pelanggan' OR $pesan['nama'] == 'Pesan Peringatan Tagihan' OR $pesan['nama'] == 'Pesan Kirim Tagihan') { ?>
|
||||
#ket => Keterangan Tagihan<br>
|
||||
#jum => Jumlah Tagihan<br>
|
||||
#ppn => PPN<br>
|
||||
#unk => Kode Unik (for payment gateway)<br>
|
||||
#tot => Total Tagihan<br>
|
||||
#lmt => Limit Pembayaran
|
||||
<?php }
|
||||
if($server['status_payment_gateway'] == 'ACTIVE' AND $page[1] == 'pesan_kirim_tagihan') {
|
||||
echo "<br>#lnk => Link Payment Gateway";
|
||||
}
|
||||
?>
|
||||
#lmt => Limit Pembayaran<br>
|
||||
#lnk => Link Payment Gateway
|
||||
<?php } ?>
|
||||
</p>
|
||||
<p><b>Contoh :</b><br>
|
||||
*Tagihan layanan internet*<br>
|
||||
@@ -51,7 +574,7 @@ $server = mysqli_fetch_assoc($aserver);
|
||||
PPN 11% : #ppn<br>
|
||||
Total Tagihan : #tot
|
||||
</p>
|
||||
<?php if ($page[1] == 'pesan_koneksi_off') { ?>
|
||||
<?php if ($pesan['nama'] == 'Pesan Koneksi Off') { ?>
|
||||
<hr>
|
||||
<h5><u>PERHATIAN..!!</u></h5>
|
||||
<p>Jika Status Pesan <b>Aktif</b> dan <b>Interval</b> di isi, maka pelanggan yang aktif dan koneksi nya mati akan di beri pesan otomatis setelah Interval yang telah anda tentukan</p>
|
||||
@@ -61,11 +584,11 @@ $server = mysqli_fetch_assoc($aserver);
|
||||
<div class="col-sm-6">
|
||||
<form method="post" enctype="multipart/form-data">
|
||||
<?php
|
||||
if ($page[1] == 'pesan_melunasi_tagihan')
|
||||
if ($pesan['nama'] == 'Pesan Melunasi Tagihan')
|
||||
{ ?>
|
||||
<center>
|
||||
<label>CONTOH</label>
|
||||
<img src="img/<?php echo $server['backround_kwitansi']; ?>" width="100%"><br><br>
|
||||
<img src="img/<?php echo $pesan['backround_kwitansi']; ?>" width="100%"><br><br>
|
||||
<div class="form-group">
|
||||
<label>Upload Backround Kwitansi</label>
|
||||
<input type="file" class="form-control" name="gambar">
|
||||
@@ -75,23 +598,23 @@ $server = mysqli_fetch_assoc($aserver);
|
||||
<?php } ?>
|
||||
<center><label>Edit Pesan</label></center>
|
||||
<div class="form-group">
|
||||
<textarea type="text" class="form-control" rows="15" name="fpesan"><?php echo $server[$page[1]]; ?></textarea>
|
||||
<textarea type="text" class="form-control" rows="15" name="fpesan"><?php echo $pesan['pesan']; ?></textarea>
|
||||
</div>
|
||||
<?php if ($page[1] == 'pesan_koneksi_off') { ?>
|
||||
<?php if ($pesan['nama'] == 'Pesan Koneksi Off') { ?>
|
||||
<div class="row">
|
||||
<div class="col-6">
|
||||
<div class="form-group">
|
||||
<label>Status Pesan</label>
|
||||
<select class="form-control" name="status_koneksi_off" required="required">
|
||||
<option value="Tidak Aktif" <?php if ($server['status_koneksi_off'] == "Tidak Aktif") { echo "selected"; }?>>Tidak Aktif</option>
|
||||
<option value="Aktif" <?php if ($server['status_koneksi_off'] == "Aktif") { echo "selected"; }?>>Aktif</option>
|
||||
<option value="Tidak Aktif" <?php if ($pesan['status_koneksi_off'] == "Tidak Aktif") { echo "selected"; }?>>Tidak Aktif</option>
|
||||
<option value="Aktif" <?php if ($pesan['status_koneksi_off'] == "Aktif") { echo "selected"; }?>>Aktif</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<label>Interval Saat Kirim Pesan</label>
|
||||
<div class="input-group mb-4">
|
||||
<input type="number" class="form-control" value="<?php echo $server['interval_koneksi_off']; ?>" name="interval">
|
||||
<input type="number" class="form-control" value="<?php echo $pesan['interval_koneksi_off']; ?>" name="interval">
|
||||
<div class="input-group-append">
|
||||
<div class="input-group-text">
|
||||
<span> Menit </span>
|
||||
@@ -104,49 +627,75 @@ $server = mysqli_fetch_assoc($aserver);
|
||||
<input type="submit" class="btn btn-sm btn-secondary m-1" name="edit" value="Simpan">
|
||||
<a type="button" class="btn btn-success btn-sm m-1" data-toggle="modal" data-target="#staticBackdrop">Test Kirim Pesan</a>
|
||||
</form>
|
||||
<?php
|
||||
if(isset($_POST['edit'])){
|
||||
// Periksa apakah file di-upload dan validasi halaman
|
||||
if (isset($page[1]) && $page[1] == 'pesan_melunasi_tagihan' && isset($_FILES['gambar'])) {
|
||||
// Validasi file upload
|
||||
if ($_FILES['gambar']['error'] === UPLOAD_ERR_OK) {
|
||||
|
||||
$nameFile = basename($_FILES["gambar"]["name"]);
|
||||
$targetDir = "img/";
|
||||
$targetFile = $targetDir . $nameFile;
|
||||
<?php
|
||||
if (isset($_POST['edit'])) {
|
||||
|
||||
// Memindahkan file ke direktori tujuan
|
||||
if (move_uploaded_file($_FILES["gambar"]["tmp_name"], $targetFile)) {
|
||||
// Menyiapkan string SQL untuk pembaruan
|
||||
$SqlPost = ", backround_kwitansi = '$nameFile'";
|
||||
} else {
|
||||
// Tangani kesalahan jika file gagal dipindahkan
|
||||
echo "Gagal memindahkan file.";
|
||||
$SqlPost = '';
|
||||
}
|
||||
} else {
|
||||
echo "Terjadi kesalahan dalam upload file.";
|
||||
$SqlPost = '';
|
||||
}
|
||||
} else {
|
||||
$SqlPost = '';
|
||||
}
|
||||
$SqlPost = '';
|
||||
$sqlPostOff = '';
|
||||
|
||||
// --- Validasi upload gambar ---
|
||||
if (isset($pesan['nama']) && $pesan['nama'] === 'Pesan Melunasi Tagihan' && isset($_FILES['gambar'])) {
|
||||
if ($_FILES['gambar']['error'] === UPLOAD_ERR_OK) {
|
||||
$nameFile = basename($_FILES["gambar"]["name"]);
|
||||
$targetDir = "img/";
|
||||
$targetFile = $targetDir . $nameFile;
|
||||
|
||||
if (move_uploaded_file($_FILES["gambar"]["tmp_name"], $targetFile)) {
|
||||
$SqlPost = ", backround_kwitansi = :nameFile";
|
||||
} else {
|
||||
echo "Gagal memindahkan file.";
|
||||
}
|
||||
} else {
|
||||
echo "Terjadi kesalahan dalam upload file.";
|
||||
}
|
||||
}
|
||||
|
||||
// --- Tambahan untuk Pesan Koneksi Off ---
|
||||
if (isset($pesan['nama']) && $pesan['nama'] === 'Pesan Koneksi Off') {
|
||||
$status_koneksi_off = $_POST['status_koneksi_off'] ?? '';
|
||||
$interval = preg_replace("/[^0-9]/", "", $_POST['interval'] ?? '');
|
||||
$sqlPostOff = ", status_koneksi_off = :status_koneksi_off, interval_koneksi_off = :interval_koneksi_off";
|
||||
}
|
||||
|
||||
// --- Query Update ---
|
||||
$query = "UPDATE master_template_pesan
|
||||
SET pesan = :pesan $SqlPost $sqlPostOff
|
||||
WHERE nama = :nama AND id_data_server IN ($SvId)";
|
||||
|
||||
$stmt = $pdo->prepare($query);
|
||||
|
||||
// Bind parameter utama
|
||||
$stmt->bindValue(':pesan', $_POST['fpesan']);
|
||||
|
||||
// Bind jika ada file upload
|
||||
if ($SqlPost !== '') {
|
||||
$stmt->bindValue(':nameFile', $nameFile);
|
||||
}
|
||||
|
||||
// Bind jika pesan koneksi off
|
||||
if ($sqlPostOff !== '') {
|
||||
$stmt->bindValue(':status_koneksi_off', $status_koneksi_off);
|
||||
$stmt->bindValue(':interval_koneksi_off', $interval);
|
||||
}
|
||||
|
||||
$stmt->bindValue(':nama', $pesan['nama']);
|
||||
try {
|
||||
$stmt->execute();
|
||||
$rows = $stmt->rowCount();
|
||||
|
||||
if ($rows > 0) {
|
||||
sweetAlert("Data telah diubah ($rows baris terpengaruh)", "success");
|
||||
} else {
|
||||
sweetAlert("Tidak ada data yang berubah", "info");
|
||||
}
|
||||
} catch (PDOException $e) {
|
||||
echo "Gagal update data: " . $e->getMessage();
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
|
||||
if ($page[1] == 'pesan_koneksi_off') {
|
||||
$status_koneksi_off = $_POST['status_koneksi_off'];
|
||||
$interval = preg_replace("/[^0-9]/","",$_POST['interval']);
|
||||
$sqlPostOff = ", status_koneksi_off = '".$status_koneksi_off."', interval_koneksi_off = '".$interval."' ";
|
||||
} else {
|
||||
$sqlPostOff = "";
|
||||
}
|
||||
|
||||
$update = mysqli_query($con,"UPDATE data_server SET $page[1] = '$_POST[fpesan]' $SqlPost $sqlPostOff WHERE id = '$SvId'");
|
||||
if($update){
|
||||
sweetAlert("Data telah di ubah", "success");
|
||||
// echo $SqlPost;
|
||||
}
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -185,16 +734,16 @@ $server = mysqli_fetch_assoc($aserver);
|
||||
// Kirim Pesan WhatsApp
|
||||
$APIwa = new PesanWA();
|
||||
// Menyiapkan query berdasarkan jenis pesan
|
||||
if ($page[1] == 'pesan_registrasi' || $page[1] == 'pesan_aktivasi' || $page[1] == 'pesan_koneksi_off') {
|
||||
if ($pesan['nama'] == 'Pesan Registrasi' || $pesan['nama'] == 'Pesan Aktivasi' || $pesan['nama'] == 'Pesan Koneksi Off') {
|
||||
$stmt = $pdo->prepare("SELECT id FROM pelanggan WHERE status = 'aktif' AND id_data_server = '$SvId'");
|
||||
$stmt->execute();
|
||||
$data = $stmt->fetchAll();
|
||||
$id = $data[0]['id'];
|
||||
$url = "";
|
||||
$APIwa->Create_Pesan($SvId,$id,$page[1]);
|
||||
$APIwa->Create_Pesan($SvId,$id,$pesan['nama']);
|
||||
|
||||
} elseif ($page[1] == 'pesan_melunasi_tagihan' || $page[1] == 'pesan_isolir_pelanggan' || $page[1] == 'pesan_peringatan_tagihan' || $page[1] == 'pesan_kirim_tagihan') {
|
||||
if($server['status_payment_gateway'] == 'ACTIVE' AND $page[1] == 'pesan_kirim_tagihan') {
|
||||
} elseif ($pesan['nama'] == 'Pesan Melunasi Tagihan' || $pesan['nama'] == 'Pesan Isolir Pelanggan' || $pesan['nama'] == 'Pesan Peringatan Tagihan' || $pesan['nama'] == 'Pesan Kirim Tagihan') {
|
||||
if($server['status_payment_gateway'] == 'ACTIVE' AND $pesan['nama'] == 'Pesan Kirim Tagihan') {
|
||||
$sqldata = "SELECT id,img_invoice FROM tagihan WHERE transaction_link != '' AND id_data_server = '$SvId'";
|
||||
} else {
|
||||
$sqldata = "SELECT id,img_invoice FROM tagihan WHERE status = 'lunas' AND id_data_server = '$SvId'";
|
||||
@@ -205,16 +754,20 @@ $server = mysqli_fetch_assoc($aserver);
|
||||
$id = $data[0]['id'];
|
||||
$url = baseurl()."/invoice/".$data[0]['img_invoice'];
|
||||
|
||||
$APIwa->Create_Pesan($SvId,$id,$page[1],'tag');
|
||||
$APIwa->Create_Pesan($SvId,$id,$pesan['nama'],'tag');
|
||||
}
|
||||
|
||||
|
||||
$Pesan = $APIwa->Get_Pesan();
|
||||
if ($page[1] == 'pesan_melunasi_tagihan') {
|
||||
if ($pesan['nama'] == 'Pesan Melunasi Tagihan') {
|
||||
$APIwa->Send_Pesan($SvId,'sendMediaFromUrl',[$_POST['nomor']],$Pesan, $url);
|
||||
} else {
|
||||
$APIwa->Send_Pesan($SvId,'sendMessage',[$_POST['nomor']],$Pesan);
|
||||
}
|
||||
sweetAlert("Pesan akan segera di kirim ke nomor ".$_POST['nomor'],"success");
|
||||
}
|
||||
?>
|
||||
?>
|
||||
|
||||
|
||||
|
||||
<?php } ?>
|
||||
@@ -386,9 +386,9 @@ $datakonpensasi = ($data[0]['konpensasi'] == 0) ? $data[0]['jumlah_konpensasi']
|
||||
$Url = baseurl($invoicePath);
|
||||
|
||||
$APIwa = new PesanWA();
|
||||
$APIwa->Create_Pesan($data[0]['id_data_server'],$idtag,'pesan_melunasi_tagihan','tag');
|
||||
$APIwa->Create_Pesan($data[0]['id_data_server'],$idtag,'Pesan Melunasi Tagihan','tag');
|
||||
$Pesan = $APIwa->Get_Pesan();
|
||||
$APIwa->Send_Pesan($data[0]['id_data_server'],'sendMediaFromUrl',$nomor,$Pesan,$Url);
|
||||
$APIwa->Send_Pesan($data[0]['id_data_server'],['sendMediaFromUrl','Pesan Melunasi Tagihan'],$nomor,$Pesan,$Url);
|
||||
// echo $Pesan;
|
||||
sweetAlert("Pembayaran tagihan berhasil", "success", "?".encrypt_url('tagihan_detail_lunas|' . $idtag));
|
||||
|
||||
|
||||
@@ -365,9 +365,9 @@ $paygw = $stmt->fetch(PDO::FETCH_ASSOC);
|
||||
// KIRIM PESAN WHATSAPP
|
||||
$phone = array($data[0]['nomor_whatsapp']);
|
||||
$API_WA = new PesanWA();
|
||||
$API_WA->Create_Pesan($data[0]['id_data_server'], $page[1], 'pesan_kirim_tagihan', 'tag');
|
||||
$API_WA->Create_Pesan($data[0]['id_data_server'], $page[1], 'Pesan Kirim Tagihan', 'tag');
|
||||
$Pesan = $API_WA->Get_Pesan();
|
||||
$API_WA->Send_Pesan($data[0]['id_data_server'], 'sendMessage', $phone, $Pesan);
|
||||
$API_WA->Send_Pesan($data[0]['id_data_server'], ['sendMessage','Pesan Kirim Tagihan'], $phone, $Pesan);
|
||||
if($API_WA){
|
||||
// echo $data[0]['id_data_server']. 'sendMessage'. $phone. $Pesan;
|
||||
sweetAlert("Tagihan Akan Segera di Kirim", "success");
|
||||
|
||||
+122
-4
@@ -35,9 +35,9 @@ $hotspotAktif = ($datauser['user_hs_aktif'] > 0);
|
||||
<?php } ?>
|
||||
<th>Alamat</th>
|
||||
<th>Koordinat</th>
|
||||
<th>Nomor WhatsApp</th>
|
||||
<th>Nomor Tlp & Email</th>
|
||||
<th>Server</th>
|
||||
<th>Mikrotik</th>
|
||||
<th>Detail Modem</th>
|
||||
<th>Paket</th>
|
||||
<th>Status Koneksi</th>
|
||||
<th>Mulai Berlangganan</th>
|
||||
@@ -52,6 +52,65 @@ $hotspotAktif = ($datauser['user_hs_aktif'] > 0);
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Modal -->
|
||||
<div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
|
||||
<div class="modal-dialog modal-dialog-centered" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header bg-primary text-white">
|
||||
<h5 class="modal-title" id="exampleModalLabel">Detail ONU</h5>
|
||||
<button type="button" class="close text-white" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div class="modal-body">
|
||||
<table class="table table-sm table-striped">
|
||||
<tbody>
|
||||
<tr>
|
||||
<th>Serial Number</th>
|
||||
<td><span id="modalSn"></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>MAC Address</th>
|
||||
<td><span id="modalMac"></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Nama</th>
|
||||
<td><span id="modalNama"></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Tipe</th>
|
||||
<td><span id="modalType"></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>RX Power</th>
|
||||
<td><span id="modalRx"></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>TX Power</th>
|
||||
<td><span id="modalTx"></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Status</th>
|
||||
<td><span id="modalStatus"></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Jarak (m)</th>
|
||||
<td><span id="modalDistance"></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Last Online</th>
|
||||
<td><span id="modalLastOnline"></span></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<span id="modalStatusCek" class="text-danger"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<script>
|
||||
$(document).ready(function(){
|
||||
var table = $("#dataTable3").DataTable({
|
||||
@@ -71,16 +130,75 @@ $(document).ready(function(){
|
||||
|
||||
// Debug: tampilkan POST parameter setiap kali request
|
||||
table.on('preXhr.dt', function(e, settings, data){
|
||||
console.log("🔎 DataTables POST Params:", data);
|
||||
// console.log("🔎 DataTables POST Params:", data);
|
||||
});
|
||||
|
||||
// Simpan param terakhir ke hidden input (opsional untuk export)
|
||||
table.on('draw', function(){
|
||||
const params = table.ajax.params();
|
||||
console.log("📦 Last Ajax Params:", params);
|
||||
// console.log("📦 Last Ajax Params:", params);
|
||||
$("#datatableParams").val(JSON.stringify(params));
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
<script>
|
||||
$(document).ready(function(){
|
||||
|
||||
// event delegation supaya pasti kepanggil
|
||||
$(document).on('click', '.openModal', function(){
|
||||
let id = $(this).data('id');
|
||||
// console.log("Klik modal dengan id:", id);
|
||||
|
||||
// Kosongkan dulu isi modal
|
||||
$('#modalSn, #modalMac, #modalNama, #modalType, #modalRx, #modalTx, #modalStatus, #modalDistance, #modalLastOnline')
|
||||
.text('-');
|
||||
$('#modalStatusCek').text('');
|
||||
|
||||
$.ajax({
|
||||
url: 'controller/get_onu_detail.php',
|
||||
type: 'POST', // lebih aman
|
||||
data: { id: id },
|
||||
dataType: 'json',
|
||||
beforeSend: function(){
|
||||
// console.log("Mengirim request ke controller/get_onu_detail.php dengan id:", id);
|
||||
},
|
||||
success: function(response){
|
||||
// console.log("Response:", response);
|
||||
|
||||
if(Array.isArray(response) && response.length > 0){
|
||||
let data = response[0]; // ambil object pertama
|
||||
|
||||
// isi ke modal
|
||||
$('#modalSn').text(data.onu_sn ?? '-');
|
||||
$('#modalMac').text(data.onu_mac ?? '-');
|
||||
$('#modalNama').text(data.onu_name ?? '-');
|
||||
$('#modalType').text(data.onu_type ?? '-');
|
||||
$('#modalRx').text(data.onu_rxpower ?? '-');
|
||||
$('#modalTx').text(data.onu_txpower ?? '-');
|
||||
$('#modalStatus').text(data.onu_status ?? '-');
|
||||
$('#modalDistance').text(data.onu_gpon_distance ?? '-');
|
||||
$('#modalLastOnline').text(data.onu_last_online ?? '-');
|
||||
} else {
|
||||
$('#modalStatusCek').text("Data tidak ditemukan");
|
||||
}
|
||||
},
|
||||
error: function(xhr, status, error){
|
||||
// console.error("AJAX Error:", error);
|
||||
$('#modalStatusCek').text("Gagal ambil data: " + error);
|
||||
}
|
||||
});
|
||||
|
||||
// action button
|
||||
$('#btnAction').off('click').on('click', function(){
|
||||
alert("Kamu pilih ID: " + id);
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
+29
-8
@@ -133,7 +133,7 @@ if (!isValidLong($long)) {
|
||||
|
||||
</select>
|
||||
</div>
|
||||
<hr><center><label>INFORMASI TOPOLOGI</label></center>
|
||||
<hr><center><label>INFORMASI TOPOLOGI / PERANGKAT</label></center>
|
||||
<div class="form-group m-1">
|
||||
<label for="firstDropdown">Topologi ODP</label>
|
||||
<select class="select2bs4" name="odp" style="width: 100%" id="firstDropdown" required="required" onchange="updateSecondDropdown()">
|
||||
@@ -151,6 +151,10 @@ if (!isValidLong($long)) {
|
||||
<select id="secondDropdown" name="port" class="form-control" required="required" data-id="<?php echo $isi['port_odp']; ?>">
|
||||
</select>
|
||||
</div>
|
||||
<div class="form-group m-1">
|
||||
<label>Serial Number <small><i> *Optional</i></small></label>
|
||||
<input type="text" class="form-control" name="serial_number" value="<?php echo $isi['serial_number']; ?>">
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<?php if($isi['status'] != 'sampah') { ?>
|
||||
@@ -265,17 +269,17 @@ if (isset($_POST['aktivasi'])) {
|
||||
try {
|
||||
// Fetching setting_mikrotik
|
||||
$stmt = $pdo->prepare("SELECT * FROM setting_mikrotik WHERE id = :id");
|
||||
$stmt->execute(['id' => $isi['id_setting_mikrotik']]);
|
||||
$stmt->execute(['id' => $_POST['ism']]);
|
||||
$mik = $stmt->fetch(PDO::FETCH_ASSOC);
|
||||
|
||||
// Fetching profile_paket
|
||||
$stmt = $pdo->prepare("SELECT nama_profile FROM profile_paket WHERE id = :id");
|
||||
$stmt->execute(['id' => $isi['id_profile_paket']]);
|
||||
$stmt->execute(['id' => $_POST['idp']]);
|
||||
$pro = $stmt->fetch(PDO::FETCH_ASSOC);
|
||||
|
||||
// Fetching master_topologi
|
||||
$stmt = $pdo->prepare("SELECT nama FROM master_topologi WHERE id = :id");
|
||||
$stmt->execute(['id' => $isi['id_master_topologi']]);
|
||||
$stmt->execute(['id' => $_POST['odp']]);
|
||||
$top = $stmt->fetch(PDO::FETCH_ASSOC);
|
||||
|
||||
$API = new RouterosAPI();
|
||||
@@ -324,10 +328,17 @@ if (isset($_POST['aktivasi'])) {
|
||||
// Kirim Pesan WhatsApp
|
||||
$nomor = [$isi['nomor_whatsapp']];
|
||||
$time_start = date('Y-m-d H:i:s');
|
||||
|
||||
//clean serial nnumber
|
||||
$serialnumber = $_POST['serial_number'] ?? null;
|
||||
$serialnumber = str_replace(' ', '', $serialnumber);
|
||||
$serialnumber = preg_replace('/[^A-Za-z0-9]/', '', $serialnumber);
|
||||
$serialnumber = strtoupper($serialnumber);
|
||||
|
||||
$APIwa = new PesanWA();
|
||||
$APIwa->Create_Pesan($isi['id_data_server'], $isi['id'], 'pesan_aktivasi');
|
||||
$APIwa->Create_Pesan($isi['id_data_server'], $isi['id'], 'Pesan Aktivasi');
|
||||
$Pesan = $APIwa->Get_Pesan();
|
||||
$APIwa->Send_Pesan($isi['id_data_server'], 'sendMessage', $nomor, $Pesan);
|
||||
$APIwa->Send_Pesan($isi['id_data_server'], ['sendMessage','Pesan Aktivasi'], $nomor, $Pesan);
|
||||
|
||||
// Menggunakan prepared statement untuk keamanan
|
||||
$stmt = $pdo->prepare("SELECT kode_unik_tagihan FROM pelanggan WHERE id_data_server = :id ORDER BY kode_unik_tagihan DESC LIMIT 1");
|
||||
@@ -356,7 +367,8 @@ if (isset($_POST['aktivasi'])) {
|
||||
status = 'aktif',
|
||||
user_hotspot = :user_hotspot,
|
||||
kode_unik_tagihan = :kodeuser,
|
||||
time_start = :time_start
|
||||
time_start = :time_start,
|
||||
serial_number = :serial_number
|
||||
WHERE id = :id");
|
||||
$stmt->execute([
|
||||
':id_setting_mikrotik' => $_POST['ism'],
|
||||
@@ -367,6 +379,7 @@ if (isset($_POST['aktivasi'])) {
|
||||
'user_hotspot' => $hotspot,
|
||||
'kodeuser' => $kodeuser,
|
||||
'time_start' => $time_start,
|
||||
'serial_number' => $serialnumber,
|
||||
'id' => $isi['id']
|
||||
]);
|
||||
|
||||
@@ -440,6 +453,12 @@ if (isset($_POST['ubah'])) {
|
||||
$fotorumah1 = $_SESSION['uploaded_files']['rmh'.$isi['id']];
|
||||
$fotoonu1 = $_SESSION['uploaded_files']['onu'.$isi['id']];
|
||||
$fototes1 = $_SESSION['uploaded_files']['tes'.$isi['id']];
|
||||
|
||||
//clean serial nnumber
|
||||
$serialnumber = $_POST['serial_number'] ?? null;
|
||||
$serialnumber = str_replace(' ', '', $serialnumber);
|
||||
$serialnumber = preg_replace('/[^A-Za-z0-9]/', '', $serialnumber);
|
||||
$serialnumber = strtoupper($serialnumber);
|
||||
|
||||
$stmt = $pdo->prepare("SELECT ip_address,username,password,port_api FROM setting_mikrotik WHERE id = :id");
|
||||
$stmt->execute(['id' => $isi['id_setting_mikrotik']]);
|
||||
@@ -521,7 +540,8 @@ if (isset($_POST['ubah'])) {
|
||||
foto_odp = :foto_odp,
|
||||
foto_rumah = :foto_rumah,
|
||||
foto_onu = :foto_onu,
|
||||
foto_test = :foto_test
|
||||
foto_test = :foto_test,
|
||||
serial_number = :serial_number
|
||||
WHERE id = :id";
|
||||
|
||||
try {
|
||||
@@ -549,6 +569,7 @@ if (isset($_POST['ubah'])) {
|
||||
':foto_rumah' => $fotorumah1,
|
||||
':foto_onu' => $fotoonu1,
|
||||
':foto_test' => $fototes1,
|
||||
':serial_number' => $serialnumber,
|
||||
':id' => $page[1]
|
||||
]);
|
||||
|
||||
|
||||
@@ -226,9 +226,9 @@ if (isset($_POST['tambah'])) {
|
||||
// Kirim Pesan WhatsApp
|
||||
$nomor = explode(',', $nowa.','.$watsapp['nomor_whatsapp']);
|
||||
$APIwa = new PesanWA();
|
||||
$APIwa->Create_Pesan($_POST['ids'], $last_id, 'pesan_registrasi');
|
||||
$APIwa->Create_Pesan($_POST['ids'], $last_id, 'Pesan Registrasi');
|
||||
$Pesan = $APIwa->Get_Pesan();
|
||||
$APIwa->Send_Pesan($_POST['ids'], 'sendMessage', $nomor, $Pesan);
|
||||
$APIwa->Send_Pesan($_POST['ids'], ['sendMessage','Pesan Registrasi'], $nomor, $Pesan);
|
||||
|
||||
$_SESSION['uploaded_files'] = '';
|
||||
$_SESSION['uploaded_files'] = '';
|
||||
|
||||
@@ -50,7 +50,7 @@ $stmt = $pdo->prepare("SELECT
|
||||
$stmt = $pdo->query("SELECT COUNT(id) FROM v_pelanggan WHERE $SqlSvData status = 'tidak aktif' ORDER BY nama");
|
||||
$totalRows = $stmt->fetchColumn();
|
||||
for ($offset = 0; $offset < $totalRows; $offset += $chunkSize) {
|
||||
$stmt = $pdo->prepare("SELECT id,akun,user_hotspot,nama,alamat,latitude,longitude,nomor_whatsapp,nama_server,nama_paket,time_start,status_koneksi,nama_mikrotik,id_setting_mikrotik,time_update,ip_address,tanggal_bayar FROM v_pelanggan WHERE $SqlSvData status = 'tidak aktif' ORDER BY nama LIMIT :limit OFFSET :offset");
|
||||
$stmt = $pdo->prepare("SELECT id,akun,user_hotspot,nama,alamat,latitude,longitude,nomor_whatsapp,nama_server,nama_paket,time_start,status_koneksi,nama_mikrotik,id_setting_mikrotik,time_update,ip_address,tanggal_bayar,mac_address FROM v_pelanggan WHERE $SqlSvData status = 'tidak aktif' ORDER BY nama LIMIT :limit OFFSET :offset");
|
||||
$stmt->bindValue(':limit', $chunkSize, PDO::PARAM_INT);
|
||||
$stmt->bindValue(':offset', $offset, PDO::PARAM_INT);
|
||||
$stmt->execute();
|
||||
@@ -87,6 +87,7 @@ $stmt = $pdo->prepare("SELECT
|
||||
<br><?php echo $row['ip_address']; ?>
|
||||
<?php } ?>
|
||||
<br><?php echo $row['time_update']; ?>
|
||||
<br><?php echo $row['mac_address']; ?>
|
||||
</td>
|
||||
<td><?php echo $row['time_start']; ?></td>
|
||||
<td><?php echo $row['tanggal_bayar']; ?></td>
|
||||
|
||||
@@ -35,6 +35,7 @@
|
||||
<th>Nama Mikrotik</th>
|
||||
<th>Akun PPPOE</th>
|
||||
<th>IP Address</th>
|
||||
<th>MAC Address</th>
|
||||
<th>Action</th>
|
||||
</tr>
|
||||
</thead>
|
||||
@@ -64,6 +65,7 @@
|
||||
<td><?php echo htmlspecialchars($server['nama']); ?></td>
|
||||
<td><?php echo htmlspecialchars($value['akun']); ?></td>
|
||||
<td><?php echo htmlspecialchars($value['ip_address']); ?></td>
|
||||
<td><?php echo htmlspecialchars($value['mac_address']); ?></td>
|
||||
<td>
|
||||
<a href="?<?php echo encrypt_url('user_remote|0000|' . $server['id'] . '|' . $value['ip_address'] . '|' . $value['akun']); ?>"
|
||||
class="btn btn-sm btn-success ml-1" style="border-radius: 20px;">Remote</a>
|
||||
|
||||
Reference in New Issue
Block a user