Inovasi
IKAN LELE
(Informasi Kesehatan Melalui Leaflet Elektronik)
Unit Promosi Kesehatan Rumah Sakit (PKRS)
UPT RSUD SINJAI
Akses materi edukasi kesehatan terpercaya, panduan pencegahan infeksi, etika batuk, hingga leaflet dan video informasi kesehatan digital berbasis scan QR Code yang mudah dipahami.
Katalog Leaflet & Video Edukasi
Pilih leaflet digital atau video edukasi resmi dari RSUD Sinjai di bawah ini.
Dashboard Statistik Real-time
Pantau pembacaan leaflet, jumlah pengunjung, dan sebaran wilayah pengunjung.
Total Pengunjung
0
Pembacaan Leaflet
0
Tautan Leaflet Aktif
0
Rasio Baca (CTR)
0%
Frekuensi Pembacaan per Leaflet
Tren Aktivitas Riil
Daftar Wilayah Pengunjung Web
Rincian lokasi pengunjung yang pernah membuka portal ini.
Rincian Performa Materi Leaflet
| Nama Leaflet | Kategori | Jumlah Dilihat | Persentase | Status |
|---|
Pengaturan & Manajemen Konten
Kelola daftar tombol materi edukasi, tampilan, serta integrasi sistem Google Apps Script.
Daftar Tautan Edukasi
Kelola tautan leaflet Google Drive dan Video YouTube/Drive.
Identitas & Logo Website
Master Plan Google Apps Script
Integrasi ke Google Sheets untuk penyimpanan data persisten.
Master Plan Google Apps Script
Integrasi ke Google Sheets untuk penyimpanan data persisten.
// MASTER PLAN GOOGLE APPS SCRIPT - IKAN LELE V3 (SINKRONISASI TOTAL)
function doGet(e) {
try {
var ss = SpreadsheetApp.getActiveSpreadsheet();
ensureSheetsExist(ss);
var sheetLinks = ss.getSheetByName("Master_Tautan");
var dataLinks = sheetLinks.getDataRange().getValues();
var links = [];
var globalLogo = "";
for (var i = 1; i < dataLinks.length; i++) {
if (dataLinks[i][0] !== "" && dataLinks[i][0] !== null) {
links.push({
id: dataLinks[i][0],
title: dataLinks[i][1],
url: dataLinks[i][2],
category: dataLinks[i][3],
type: dataLinks[i][4] || 'leaflet',
icon: dataLinks[i][5],
clicks: parseInt(dataLinks[i][6] || 0),
active: dataLinks[i][7] === "" || dataLinks[i][7] === null || dataLinks[i][7] === undefined || dataLinks[i][7] === true || dataLinks[i][7] === "TRUE" || dataLinks[i][7] === "true"
});
if (!globalLogo && dataLinks[i][8] && dataLinks[i][8].toString().trim() !== "") {
globalLogo = dataLinks[i][8].toString().trim();
}
}
}
var sheetSettings = ss.getSheetByName("Pengaturan");
var settings = { logo: globalLogo };
if (sheetSettings) {
var sData = sheetSettings.getDataRange().getValues();
for (var j = 1; j < sData.length; j++) {
if (sData[j][0]) {
settings[sData[j][0]] = sData[j][1];
}
}
}
var sheetVisitors = ss.getSheetByName("Log_Pengunjung");
var dataVisitors = sheetVisitors.getDataRange().getValues();
var totalVisitors = Math.max(0, dataVisitors.length - 1);
var dailyLogs = {};
var regions = {};
for (var k = 1; k < dataVisitors.length; k++) {
var row = dataVisitors[k];
if (row[0]) {
var dateObj = new Date(row[0]);
if (!isNaN(dateObj.getTime())) {
var dateKey = Utilities.formatDate(dateObj, Session.getScriptTimeZone(), "yyyy-MM-dd");
if (!dailyLogs[dateKey]) dailyLogs[dateKey] = { visitors: 0, clicks: 0 };
dailyLogs[dateKey].visitors += 1;
}
}
var regName = row[2] ? row[2].toString().trim() : "Kab. Sinjai";
if (regName) {
regions[regName] = (regions[regName] || 0) + 1;
}
}
var sheetClicks = ss.getSheetByName("Log_Klik");
var dataClicks = sheetClicks.getDataRange().getValues();
for (var m = 1; m < dataClicks.length; m++) {
var cRow = dataClicks[m];
if (cRow[0]) {
var cDateObj = new Date(cRow[0]);
if (!isNaN(cDateObj.getTime())) {
var cDateKey = Utilities.formatDate(cDateObj, Session.getScriptTimeZone(), "yyyy-MM-dd");
if (!dailyLogs[cDateKey]) dailyLogs[cDateKey] = { visitors: 0, clicks: 0 };
dailyLogs[cDateKey].clicks += 1;
}
}
}
var result = {
status: "success",
links: links,
settings: settings,
totalVisitors: totalVisitors,
dailyLogs: dailyLogs,
regions: regions
};
return ContentService.createTextOutput(JSON.stringify(result)).setMimeType(ContentService.MimeType.JSON);
} catch (err) {
return ContentService.createTextOutput(JSON.stringify({ status: "error", message: err.toString() })).setMimeType(ContentService.MimeType.JSON);
}
}
function doPost(e) {
try {
var ss = SpreadsheetApp.getActiveSpreadsheet();
ensureSheetsExist(ss);
var data = {};
if (e && e.postData && e.postData.contents) {
data = JSON.parse(e.postData.contents);
}
var action = data.action || data.event_type;
if (action === "log_visitor") {
ss.getSheetByName("Log_Pengunjung").appendRow([new Date(), data.ip || "127.0.0.1", data.location || "Sinjai", data.device || "Mobile"]);
}
else if (action === "log_click") {
ss.getSheetByName("Log_Klik").appendRow([new Date(), data.link_id, data.link_title, data.location || "Sinjai"]);
incrementClickCount(ss, data.link_id);
}
else if (action === "save_link") {
saveOrUpdateLink(ss, data.link);
}
else if (action === "delete_link") {
deleteLink(ss, data.link_id);
}
else if (action === "save_settings") {
saveSettings(ss, data.settings);
}
return ContentService.createTextOutput(JSON.stringify({ status: "success" })).setMimeType(ContentService.MimeType.JSON);
} catch(err) {
return ContentService.createTextOutput(JSON.stringify({ status: "error", message: err.toString() })).setMimeType(ContentService.MimeType.JSON);
}
}
function ensureSheetsExist(ss) {
if (!ss.getSheetByName("Master_Tautan")) {
var s1 = ss.insertSheet("Master_Tautan");
s1.appendRow(["ID", "Judul", "URL_Tautan", "Kategori", "Tipe_Materi", "Ikon", "Jumlah_Klik", "Status_Aktif", "Logo_URL"]);
}
if (!ss.getSheetByName("Log_Pengunjung")) {
ss.insertSheet("Log_Pengunjung").appendRow(["Waktu", "IP_Address", "Kota_Wilayah", "Perangkat"]);
}
if (!ss.getSheetByName("Log_Klik")) {
ss.insertSheet("Log_Klik").appendRow(["Waktu", "ID_Tautan", "Judul_Materi", "Lokasi_Pengunjung"]);
}
if (!ss.getSheetByName("Pengaturan")) {
ss.insertSheet("Pengaturan").appendRow(["Kunci", "Nilai"]);
}
}
function incrementClickCount(ss, linkId) {
var sheet = ss.getSheetByName("Master_Tautan");
var data = sheet.getDataRange().getValues();
for (var i = 1; i < data.length; i++) {
if (data[i][0] == linkId) {
var currentVal = parseInt(data[i][6] || 0);
sheet.getRange(i + 1, 7).setValue(currentVal + 1);
break;
}
}
}
function saveOrUpdateLink(ss, link) {
if (!link) return;
var sheet = ss.getSheetByName("Master_Tautan");
var data = sheet.getDataRange().getValues();
var found = false;
for (var i = 1; i < data.length; i++) {
if (data[i][0] == link.id) {
sheet.getRange(i + 1, 2).setValue(link.title);
sheet.getRange(i + 1, 3).setValue(link.url);
sheet.getRange(i + 1, 4).setValue(link.category);
sheet.getRange(i + 1, 5).setValue(link.type || 'leaflet');
sheet.getRange(i + 1, 6).setValue(link.icon);
sheet.getRange(i + 1, 8).setValue(link.active);
found = true;
break;
}
}
if (!found) {
sheet.appendRow([link.id, link.title, link.url, link.category, link.type || 'leaflet', link.icon, link.clicks || 0, link.active, ""]);
}
}
function deleteLink(ss, linkId) {
var sheet = ss.getSheetByName("Master_Tautan");
var data = sheet.getDataRange().getValues();
for (var i = 1; i < data.length; i++) {
if (data[i][0] == linkId) {
sheet.deleteRow(i + 1);
break;
}
}
}
function saveSettings(ss, settings) {
if (!settings) return;
var sheetP = ss.getSheetByName("Pengaturan");
var dataP = sheetP.getDataRange().getValues();
for (var key in settings) {
var val = settings[key];
if (key === "logo") {
var sheetM = ss.getSheetByName("Master_Tautan");
if (sheetM.getLastRow() >= 2) {
sheetM.getRange(2, 9).setValue(val);
} else {
sheetM.appendRow(["", "", "", "", "", "", "", "", val]);
}
}
var found = false;
for (var i = 1; i < dataP.length; i++) {
if (dataP[i][0] == key) {
sheetP.getRange(i + 1, 2).setValue(val);
found = true;
break;
}
}
if (!found) {
sheetP.appendRow([key, val]);
dataP = sheetP.getDataRange().getValues();
}
}
}