773 lines
34 KiB
PHP
773 lines
34 KiB
PHP
<?php if($SvId == 2 ) { ?>
|
|
|
|
<?php
|
|
$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 -->
|
|
<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']; ?></h3>
|
|
</div>
|
|
<div class="col-sm-6">
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<!-- /.card-header -->
|
|
<div class="card-body">
|
|
<div class="row">
|
|
<div class="col-sm-6">
|
|
<div class="text-danger" style="margin: 20px;">
|
|
<h6><b>Warning..!!</b></h6>
|
|
<p>Untuk memposisikan data dari pelanggan silahkan isi dengan Variabel di bawah ini :<br>
|
|
#usr => Nama Pelanggan<br>
|
|
#add => Alamat Pelanggan<br>
|
|
#ppp => PPPOE Pelanggan / ID Pelanggan<br>
|
|
#lyn => Paket Berlangganan<br>
|
|
#hly => Harga Layanan<br>
|
|
#jns => Jenis Layanan<br>
|
|
<?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<br>
|
|
#lnk => Link Payment Gateway
|
|
<?php } ?>
|
|
</p>
|
|
<p><b>Contoh :</b><br>
|
|
*Tagihan layanan internet*<br>
|
|
Nama : #usr<br>
|
|
Jumlah Tagihan : #jum<br>
|
|
PPN 11% : #ppn<br>
|
|
Total Tagihan : #tot
|
|
</p>
|
|
<?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>
|
|
<?php } ?>
|
|
</div>
|
|
</div>
|
|
<div class="col-sm-6">
|
|
<form method="post" enctype="multipart/form-data">
|
|
<?php
|
|
if ($pesan['nama'] == 'Pesan Melunasi Tagihan')
|
|
{ ?>
|
|
<center>
|
|
<label>CONTOH</label>
|
|
<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">
|
|
</div>
|
|
</center>
|
|
<hr>
|
|
<?php } ?>
|
|
<center><label>Edit Pesan</label></center>
|
|
<div class="form-group">
|
|
<textarea type="text" class="form-control" rows="15" name="fpesan"><?php echo $pesan['pesan']; ?></textarea>
|
|
</div>
|
|
<?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 ($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 $pesan['interval_koneksi_off']; ?>" name="interval">
|
|
<div class="input-group-append">
|
|
<div class="input-group-text">
|
|
<span> Menit </span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<?php } ?>
|
|
<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'])) {
|
|
|
|
$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();
|
|
}
|
|
|
|
}
|
|
?>
|
|
|
|
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
<!-- Modal Tambah -->
|
|
<div class="modal fade" id="staticBackdrop" data-backdrop="static" data-keyboard="false" tabindex="-1" aria-labelledby="staticBackdropLabel" aria-hidden="true">
|
|
<div class="modal-dialog modal-dialog-centered">
|
|
<div class="modal-content">
|
|
<form method="post" enctype="multipart/form-data">
|
|
<div class="modal-header bg-primary">
|
|
<h5 class="modal-title" id="staticBackdropLabel">Test Kirim <?php echo $page[1]; ?></h5>
|
|
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
|
<span aria-hidden="true">×</span>
|
|
</button>
|
|
</div>
|
|
<div class="modal-body">
|
|
<div class="form-group">
|
|
<label>Masukan Nomor WhatsApp</label>
|
|
<input type="text" name="nomor" class="form-control" required="required" placeholder="085*******">
|
|
</div>
|
|
</div>
|
|
<div class="modal-footer">
|
|
<input type="submit" name="kirim" class="btn btn-primary" value="Kirim Pesan">
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<?php
|
|
if (isset($_POST['kirim'])) {
|
|
// Kirim Pesan WhatsApp
|
|
$APIwa = new PesanWA();
|
|
// Menyiapkan query berdasarkan jenis pesan
|
|
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,$pesan['nama']);
|
|
|
|
} 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'";
|
|
}
|
|
$stmt = $pdo->prepare($sqldata);
|
|
$stmt->execute();
|
|
$data = $stmt->fetchAll();
|
|
$id = $data[0]['id'];
|
|
$url = baseurl()."/invoice/".$data[0]['img_invoice'];
|
|
|
|
$APIwa->Create_Pesan($SvId,$id,$pesan['nama'],'tag');
|
|
}
|
|
|
|
|
|
$Pesan = $APIwa->Get_Pesan();
|
|
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 } ?>
|