fix(ui): link repo ke gitea.oxpoe.xyz, buka semua menu, hapus kontak aktivasi
All checks were successful
CI / test (push) Successful in 1m55s
All checks were successful
CI / test (push) Successful in 1m55s
- ganti sisa URL gitea.oxpoe.qzz.io -> gitea.oxpoe.xyz (sidebar, donate, package.json, projectUrl) - default menu sidebar semuanya Tampil (tidak ada lagi menu terkunci) - hapus nomor kontak aktivasi palsu 081947215703 dari UI & pesan route - form pengaturan sidebar tidak lagi meminta password aktivasi
This commit is contained in:
@@ -177,7 +177,7 @@ app.use((req, res, next) => {
|
|||||||
res.locals.serviceNotice = noticeSvc.getServiceNotice();
|
res.locals.serviceNotice = noticeSvc.getServiceNotice();
|
||||||
res.locals.uptimeUrl = getSetting('uptime_url', '');
|
res.locals.uptimeUrl = getSetting('uptime_url', '');
|
||||||
res.locals.heroVer = getSetting('landing_hero_version', '');
|
res.locals.heroVer = getSetting('landing_hero_version', '');
|
||||||
res.locals.projectUrl = String(getSetting('project_url', 'https://gitea.oxpoe.qzz.io/oxpoe/open-isp') || '').replace(/\/+$/, '');
|
res.locals.projectUrl = String(getSetting('project_url', 'https://gitea.oxpoe.xyz/oxpoe/open-isp') || '').replace(/\/+$/, '');
|
||||||
res.locals.appVersion = String(getSetting('app_version', '0.5.1') || '0.5.1');
|
res.locals.appVersion = String(getSetting('app_version', '0.5.1') || '0.5.1');
|
||||||
res.locals.appVersionName = String(getSetting('app_version_name', 'pickle-lime') || 'pickle-lime');
|
res.locals.appVersionName = String(getSetting('app_version_name', 'pickle-lime') || 'pickle-lime');
|
||||||
res.locals.pwaVersion = String(getSetting('pwa_version', '2.0') || '2.0');
|
res.locals.pwaVersion = String(getSetting('pwa_version', '2.0') || '2.0');
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ Rilis ini menggabungkan pembaruan fitur dari repo upstream (`alijayanet/billing-
|
|||||||
- Kolom API key AI disamarkan di halaman Pengaturan.
|
- Kolom API key AI disamarkan di halaman Pengaturan.
|
||||||
|
|
||||||
## Dokumentasi
|
## Dokumentasi
|
||||||
- 10 screenshot (desktop + mobile) di `docs/screenshots/`.
|
- 10 screenshot (desktop + mobile) di `docs/screenshots/` (format WebP, ringan).
|
||||||
|
|
||||||
## Cara upgrade
|
## Cara upgrade
|
||||||
|
|
||||||
|
|||||||
@@ -50,12 +50,12 @@
|
|||||||
},
|
},
|
||||||
"author": "oxpoe",
|
"author": "oxpoe",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"homepage": "https://gitea.oxpoe.qzz.io/oxpoe/open-isp#readme",
|
"homepage": "https://gitea.oxpoe.xyz/oxpoe/open-isp#readme",
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "git+https://gitea.oxpoe.qzz.io/oxpoe/open-isp.git"
|
"url": "git+https://gitea.oxpoe.xyz/oxpoe/open-isp.git"
|
||||||
},
|
},
|
||||||
"bugs": {
|
"bugs": {
|
||||||
"url": "https://gitea.oxpoe.qzz.io/oxpoe/open-isp/issues"
|
"url": "https://gitea.oxpoe.xyz/oxpoe/open-isp/issues"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -705,7 +705,7 @@ function requireSidebarMenuAccess(menuKey) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (access.reason === 'locked') {
|
if (access.reason === 'locked') {
|
||||||
req.session._msg = { type: 'error', text: `Menu "${access.menu.labelDefault}" terkunci. Hubungi ${sidebarMenuSvc.getFeatureContactPhone()} untuk mendapatkan password.` };
|
req.session._msg = { type: 'error', text: `Menu "${access.menu.labelDefault}" terkunci. Buka dari Pengaturan Sidebar.` };
|
||||||
return res.redirect('/admin/sidebar-settings');
|
return res.redirect('/admin/sidebar-settings');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -317,7 +317,7 @@ function requireSidebarMenuAccess(menuKey) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (access.reason === 'locked') {
|
if (access.reason === 'locked') {
|
||||||
req.session._msg = { type: 'error', text: `Menu "${access.menu.labelDefault}" terkunci. Hubungi ${sidebarMenuSvc.FEATURE_CONTACT_PHONE} untuk mendapatkan password.` };
|
req.session._msg = { type: 'error', text: `Menu "${access.menu.labelDefault}" terkunci. Buka dari Pengaturan Sidebar.` };
|
||||||
return res.redirect('/admin/sidebar-settings');
|
return res.redirect('/admin/sidebar-settings');
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3989,11 +3989,6 @@ router.get('/sidebar-settings', requireAdminSession, (req, res) => {
|
|||||||
|
|
||||||
router.post('/sidebar-settings', requireAdminSession, restrictToAdmin, express.urlencoded({ extended: true }), (req, res) => {
|
router.post('/sidebar-settings', requireAdminSession, restrictToAdmin, express.urlencoded({ extended: true }), (req, res) => {
|
||||||
try {
|
try {
|
||||||
const featurePassword = String(req.body.feature_password || '').trim();
|
|
||||||
if (!sidebarMenuSvc.isFeaturePasswordValid(featurePassword)) {
|
|
||||||
throw new Error(`Password aktivasi salah. Hubungi ${sidebarMenuSvc.getFeatureContactPhone()} untuk mendapatkan password yang benar.`);
|
|
||||||
}
|
|
||||||
|
|
||||||
const menuStates = sidebarMenuSvc.sanitizeMenuStates(req.body.menu_state || {});
|
const menuStates = sidebarMenuSvc.sanitizeMenuStates(req.body.menu_state || {});
|
||||||
const success = sidebarMenuSvc.saveMenuStates(menuStates);
|
const success = sidebarMenuSvc.saveMenuStates(menuStates);
|
||||||
if (!success) throw new Error('Gagal menyimpan pengaturan sidebar');
|
if (!success) throw new Error('Gagal menyimpan pengaturan sidebar');
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ const { getSetting, getSettings, saveSettings } = require('../config/settingsMan
|
|||||||
const { getAppSetting, saveAppSetting } = require('../config/database');
|
const { getAppSetting, saveAppSetting } = require('../config/database');
|
||||||
|
|
||||||
const FEATURE_PASSWORD_HASH = 'af03458614be223016c5bc1c0788eaefc6a6bfd0c11cdcd4bc520f49d0cb474a'; // sha256 kode aktivasi — plaintext hanya di settings.json (activation_code), tidak di repo
|
const FEATURE_PASSWORD_HASH = 'af03458614be223016c5bc1c0788eaefc6a6bfd0c11cdcd4bc520f49d0cb474a'; // sha256 kode aktivasi — plaintext hanya di settings.json (activation_code), tidak di repo
|
||||||
const FEATURE_CONTACT_PHONE = '081947215703';
|
const FEATURE_CONTACT_PHONE = '';
|
||||||
|
|
||||||
function getFeaturePasswordHash() {
|
function getFeaturePasswordHash() {
|
||||||
return getSetting('feature_password_hash', FEATURE_PASSWORD_HASH);
|
return getSetting('feature_password_hash', FEATURE_PASSWORD_HASH);
|
||||||
@@ -115,16 +115,16 @@ const DEFAULT_MENU_STATES = {
|
|||||||
cashiers_reports: STATE_VISIBLE,
|
cashiers_reports: STATE_VISIBLE,
|
||||||
collector_payments: STATE_VISIBLE,
|
collector_payments: STATE_VISIBLE,
|
||||||
tickets: STATE_VISIBLE,
|
tickets: STATE_VISIBLE,
|
||||||
inventory: STATE_LOCKED,
|
inventory: STATE_VISIBLE,
|
||||||
attendance: STATE_LOCKED,
|
attendance: STATE_VISIBLE,
|
||||||
payroll: STATE_LOCKED,
|
payroll: STATE_VISIBLE,
|
||||||
cash_in: STATE_VISIBLE,
|
cash_in: STATE_VISIBLE,
|
||||||
expenses: STATE_VISIBLE,
|
expenses: STATE_VISIBLE,
|
||||||
expense_categories: STATE_VISIBLE,
|
expense_categories: STATE_VISIBLE,
|
||||||
cashier_attendance: STATE_VISIBLE,
|
cashier_attendance: STATE_VISIBLE,
|
||||||
technicians: STATE_LOCKED,
|
technicians: STATE_VISIBLE,
|
||||||
cashiers: STATE_LOCKED,
|
cashiers: STATE_VISIBLE,
|
||||||
collectors: STATE_LOCKED,
|
collectors: STATE_VISIBLE,
|
||||||
areas: STATE_VISIBLE,
|
areas: STATE_VISIBLE,
|
||||||
update: STATE_VISIBLE,
|
update: STATE_VISIBLE,
|
||||||
vouchers_discounts: STATE_VISIBLE,
|
vouchers_discounts: STATE_VISIBLE,
|
||||||
@@ -259,7 +259,7 @@ function enrichMenu(menu, states) {
|
|||||||
locked,
|
locked,
|
||||||
hidden,
|
hidden,
|
||||||
hrefResolved: menu.href,
|
hrefResolved: menu.href,
|
||||||
lockedMessage: locked ? `Menu "${menu.labelDefault}" terkunci. Hubungi ${getFeatureContactPhone()} untuk mendapatkan password aktivasi.` : ''
|
lockedMessage: locked ? `Menu "${menu.labelDefault}" terkunci. Buka dari Pengaturan Sidebar.` : ''
|
||||||
};
|
};
|
||||||
if (Array.isArray(menu.children)) {
|
if (Array.isArray(menu.children)) {
|
||||||
out.children = menu.children.map((ch) => enrichMenu(ch, states));
|
out.children = menu.children.map((ch) => enrichMenu(ch, states));
|
||||||
|
|||||||
@@ -129,7 +129,7 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
<i class="bi bi-box-arrow-left"></i><span><%= t('common.logout', 'Logout') %></span>
|
<i class="bi bi-box-arrow-left"></i><span><%= t('common.logout', 'Logout') %></span>
|
||||||
</a>
|
</a>
|
||||||
<div class="mt-4 px-3 py-2 text-center" style="border-top: 1px solid rgba(255,255,255,0.1);">
|
<div class="mt-4 px-3 py-2 text-center" style="border-top: 1px solid rgba(255,255,255,0.1);">
|
||||||
<a href="https://gitea.oxpoe.qzz.io/oxpoe/open-isp" target="_blank" rel="noopener" style="color: #cbd5e1; font-size: 11px; text-decoration: none; font-weight: 700;">
|
<a href="https://gitea.oxpoe.xyz/oxpoe/open-isp" target="_blank" rel="noopener" style="color: #cbd5e1; font-size: 11px; text-decoration: none; font-weight: 700;">
|
||||||
OPEN-ISP BILLING SYSTEM
|
OPEN-ISP BILLING SYSTEM
|
||||||
</a>
|
</a>
|
||||||
<div style="color:#64748b;font-size:10px;margin-top:3px;line-height:1.5">
|
<div style="color:#64748b;font-size:10px;margin-top:3px;line-height:1.5">
|
||||||
@@ -163,7 +163,7 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
<%= t('admin.lock.code_label','Kode aktivasi menu ini') %> <strong style="color:#86efac">GRATIS</strong> <%= t('admin.lock.wiki_note','— tanpa perlu donasi untuk membukanya.') %>
|
<%= t('admin.lock.code_label','Kode aktivasi menu ini') %> <strong style="color:#86efac">GRATIS</strong> <%= t('admin.lock.wiki_note','— tanpa perlu donasi untuk membukanya.') %>
|
||||||
</div>
|
</div>
|
||||||
<div style="margin-top:14px;display:flex;flex-direction:column;gap:8px">
|
<div style="margin-top:14px;display:flex;flex-direction:column;gap:8px">
|
||||||
<a href="https://gitea.oxpoe.qzz.io/oxpoe/open-isp/wiki" target="_blank" rel="noopener" class="btn btn-p" style="width:100%;display:flex;align-items:center;justify-content:center;gap:8px">
|
<a href="https://gitea.oxpoe.xyz/oxpoe/open-isp/wiki" target="_blank" rel="noopener" class="btn btn-p" style="width:100%;display:flex;align-items:center;justify-content:center;gap:8px">
|
||||||
<i class="bi bi-git"></i> <%= t('admin.lock.get_code','Ambil Kode Aktivasi (Gratis)') %>
|
<i class="bi bi-git"></i> <%= t('admin.lock.get_code','Ambil Kode Aktivasi (Gratis)') %>
|
||||||
</a>
|
</a>
|
||||||
<a href="/admin/sidebar-settings" class="btn btn-g" style="width:100%;display:flex;align-items:center;justify-content:center;gap:8px" onclick="hideLockedMenuNotice()">
|
<a href="/admin/sidebar-settings" class="btn btn-g" style="width:100%;display:flex;align-items:center;justify-content:center;gap:8px" onclick="hideLockedMenuNotice()">
|
||||||
|
|||||||
@@ -43,7 +43,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="card-bd">
|
<div class="card-bd">
|
||||||
<p class="hint" style="margin-top:0">
|
<p class="hint" style="margin-top:0">
|
||||||
<%= t('admin.sb.intro', 'Setiap menu bisa diatur menjadi Tampil, Sembunyikan, atau Kunci. Menu yang dikunci akan meminta password khusus sebelum dibuka.') %>
|
<%= t('admin.sb.intro', 'Setiap menu bisa diatur menjadi Tampil atau Sembunyikan.') %>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<% if (canManageSidebar) { %>
|
<% if (canManageSidebar) { %>
|
||||||
@@ -76,7 +76,7 @@
|
|||||||
<select class="fs" name="menu_state[<%= menu.key %>]">
|
<select class="fs" name="menu_state[<%= menu.key %>]">
|
||||||
<option value="visible" <%= menu.state === 'visible' ? 'selected' : '' %>><%= t('admin.sb.st_visible', 'Tampil') %></option>
|
<option value="visible" <%= menu.state === 'visible' ? 'selected' : '' %>><%= t('admin.sb.st_visible', 'Tampil') %></option>
|
||||||
<option value="hidden" <%= menu.state === 'hidden' ? 'selected' : '' %>><%= t('admin.sb.st_hidden', 'Sembunyikan') %></option>
|
<option value="hidden" <%= menu.state === 'hidden' ? 'selected' : '' %>><%= t('admin.sb.st_hidden', 'Sembunyikan') %></option>
|
||||||
<option value="locked" <%= menu.state === 'locked' ? 'selected' : '' %>><%= t('admin.sb.st_locked', 'Kunci') %></option>
|
|
||||||
</select>
|
</select>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -97,7 +97,7 @@
|
|||||||
<select class="fs" name="menu_state[<%= ch.key %>]">
|
<select class="fs" name="menu_state[<%= ch.key %>]">
|
||||||
<option value="visible" <%= ch.state === 'visible' ? 'selected' : '' %>><%= t('admin.sb.st_visible', 'Tampil') %></option>
|
<option value="visible" <%= ch.state === 'visible' ? 'selected' : '' %>><%= t('admin.sb.st_visible', 'Tampil') %></option>
|
||||||
<option value="hidden" <%= ch.state === 'hidden' ? 'selected' : '' %>><%= t('admin.sb.st_hidden', 'Sembunyikan') %></option>
|
<option value="hidden" <%= ch.state === 'hidden' ? 'selected' : '' %>><%= t('admin.sb.st_hidden', 'Sembunyikan') %></option>
|
||||||
<option value="locked" <%= ch.state === 'locked' ? 'selected' : '' %>><%= t('admin.sb.st_locked', 'Kunci') %></option>
|
|
||||||
</select>
|
</select>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -108,12 +108,9 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="sidebar-settings-save-grid" style="margin-top:16px">
|
<div class="sidebar-settings-save-grid" style="margin-top:16px">
|
||||||
<div class="fg" style="margin:0">
|
<div class="fg" style="margin:0">
|
||||||
<label class="fl"><%= t('admin.sb.pass_label', 'Password Aktivasi (Seikhlasnya)') %></label>
|
|
||||||
<input type="password" class="fc" name="feature_password" placeholder="<%= t('admin.sb.pass_ph', 'Masukkan password aktivasi sebelum menyimpan') %>" required>
|
|
||||||
<div class="hint" style="margin-top:6px"><%= t('admin.sb.pass_hint', 'Perubahan status menu sidebar hanya akan disimpan jika password aktivasi benar.') %></div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="hint" style="align-self:center">
|
<div class="hint" style="align-self:center">
|
||||||
<%= t('admin.sb.no_pass', 'Belum punya kode aktivasi?') %> <a href="/donate" target="_blank" rel="noopener" style="color:var(--primary);font-weight:700;"><i class="bi bi-heart-fill me-1"></i> <%= t('admin.sb.get_donation', 'Dapatkan kode aktivasi GRATIS di halaman Dukungan OPEN-ISP') %></a> <%= t('admin.sb.or_contact', 'atau hubungi') %> <strong><%= featureContactPhone %></strong>.
|
<%= t('admin.sb.no_pass', 'Menu bisa ditampilkan/disembunyikan dari halaman ini.') %> <a href="/donate" target="_blank" rel="noopener" style="color:var(--primary);font-weight:700;"><i class="bi bi-heart-fill me-1"></i> <%= t('admin.sb.get_donation', 'Dukung pengembangan OPEN-ISP') %></a>.
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div style="display:flex;justify-content:flex-end;gap:10px;margin-top:16px;flex-wrap:wrap">
|
<div style="display:flex;justify-content:flex-end;gap:10px;margin-top:16px;flex-wrap:wrap">
|
||||||
@@ -138,12 +135,12 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="card-bd">
|
<div class="card-bd">
|
||||||
<div class="alert alert-s" style="margin-bottom:12px">
|
<div class="alert alert-s" style="margin-bottom:12px">
|
||||||
<i class="bi bi-info-circle"></i> <%= t('admin.sb.note_lock', 'Jika menu berstatus Kunci diklik dari sidebar, sistem menampilkan cara mengambil kode aktivasi GRATIS atau menghubungi') %> <strong><%= featureContactPhone %></strong>.
|
<i class="bi bi-info-circle"></i> <%= t('admin.sb.note_lock', 'Menu berstatus Kunci tidak dapat dibuka sampai diaktifkan dari halaman ini.') %>
|
||||||
</div>
|
</div>
|
||||||
<ul style="margin:0;padding-left:18px;display:grid;gap:8px">
|
<ul style="margin:0;padding-left:18px;display:grid;gap:8px">
|
||||||
<li><%= t('admin.sb.note1', 'Status Sembunyikan akan menghilangkan menu dari sidebar dan menolak akses URL langsung.') %></li>
|
<li><%= t('admin.sb.note1', 'Status Sembunyikan akan menghilangkan menu dari sidebar dan menolak akses URL langsung.') %></li>
|
||||||
<li><%= t('admin.sb.note2', 'Status Kunci tetap menampilkan menu, tetapi tidak bisa dibuka sampai statusnya diubah di halaman ini.') %></li>
|
<li><%= t('admin.sb.note2', 'Status Kunci tetap menampilkan menu, tetapi tidak bisa dibuka sampai statusnya diubah di halaman ini.') %></li>
|
||||||
<li><%= t('admin.sb.note3', 'Perubahan status menu hanya dapat disimpan setelah memasukkan password aktivasi yang benar.') %></li>
|
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -36,8 +36,8 @@
|
|||||||
<h1 style="font-size:22px"><%= t('donate.title','Dukung OPEN-ISP') %></h1>
|
<h1 style="font-size:22px"><%= t('donate.title','Dukung OPEN-ISP') %></h1>
|
||||||
<p class="iso-sub"><%= settings.company_header || 'OPEN-ISP' %> • <%= t('donate.tagline','Donasi sukarela untuk pengembangan aplikasi open source (ISC)') %></p>
|
<p class="iso-sub"><%= settings.company_header || 'OPEN-ISP' %> • <%= t('donate.tagline','Donasi sukarela untuk pengembangan aplikasi open source (ISC)') %></p>
|
||||||
<div style="margin-top:14px;padding:12px 14px;border-radius:14px;background:rgba(173,255,47,.08);border:1px solid rgba(173,255,47,.25);text-align:left;font-size:12.5px;color:#cfe9a0">
|
<div style="margin-top:14px;padding:12px 14px;border-radius:14px;background:rgba(173,255,47,.08);border:1px solid rgba(173,255,47,.25);text-align:left;font-size:12.5px;color:#cfe9a0">
|
||||||
<i class="bi bi-info-circle"></i> <strong><%= t('donate.menu_code_free','Kode aktivasi menu tersedia GRATIS') %></strong> <%= t('donate.free_hint','untuk semua — donasi') %> <strong><%= t('donate.not_required','tidak wajib') %></strong>.
|
<i class="bi bi-info-circle"></i> <strong><%= t('donate.menu_code_free','Semua menu sudah terbuka') %></strong> <%= t('donate.free_hint','— donasi bersifat sukarela dan') %> <strong><%= t('donate.not_required','tidak wajib') %></strong>.
|
||||||
<a href="https://gitea.oxpoe.qzz.io/oxpoe/open-isp/wiki" target="_blank" rel="noopener" style="color:#ADFF2F;font-weight:700;"> <%= t('donate.open_wiki','Buka Wiki') %></a>
|
<a href="https://gitea.oxpoe.xyz/oxpoe/open-isp/wiki" target="_blank" rel="noopener" style="color:#ADFF2F;font-weight:700;"> <%= t('donate.open_wiki','Buka Wiki') %></a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -70,10 +70,10 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="field">
|
<div class="field">
|
||||||
<label for="inputPhone"><i class="bi bi-whatsapp"></i> <%= t('donate.phone','Nomor WhatsApp * (untuk kode aktivasi)') %></label>
|
<label for="inputPhone"><i class="bi bi-whatsapp"></i> <%= t('donate.phone','Nomor WhatsApp') %></label>
|
||||||
<div class="wrap"><i class="bi bi-whatsapp lead-ic"></i>
|
<div class="wrap"><i class="bi bi-whatsapp lead-ic"></i>
|
||||||
<input type="tel" id="inputPhone" class="inp" placeholder="Contoh: 081234567890" required></div>
|
<input type="tel" id="inputPhone" class="inp" placeholder="Contoh: 081234567890" required></div>
|
||||||
<div class="form-note"><%= t('donate.thanks_note','Ucapan terima kasih & kode aktivasi sidebar dikirim ke nomor ini.') %></div>
|
<div class="form-note"><%= t('donate.thanks_note','Ucapan terima kasih dikirim ke nomor ini.') %></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="field">
|
<div class="field">
|
||||||
@@ -105,7 +105,7 @@
|
|||||||
<div id="paymentStatusBox" class="auth-alert info" style="justify-content:center;margin-top:14px">
|
<div id="paymentStatusBox" class="auth-alert info" style="justify-content:center;margin-top:14px">
|
||||||
<div style="text-align:center">
|
<div style="text-align:center">
|
||||||
<div style="display:flex;align-items:center;justify-content:center;gap:8px"><div class="spin-pulse"></div><span style="font-weight:700" id="statusBoxText"><%= t('donate.waiting_payment','Menunggu Pembayaran Masuk…') %></span></div>
|
<div style="display:flex;align-items:center;justify-content:center;gap:8px"><div class="spin-pulse"></div><span style="font-weight:700" id="statusBoxText"><%= t('donate.waiting_payment','Menunggu Pembayaran Masuk…') %></span></div>
|
||||||
<div style="font-size:11.5px;margin-top:4px"><%= t('donate.auto_detect','Sistem otomatis mendeteksi transaksi & mengirim kode aktivasi ke WA Anda.') %></div>
|
<div style="font-size:11.5px;margin-top:4px"><%= t('donate.auto_detect','Sistem otomatis mendeteksi transaksi pembayaran.') %></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -162,7 +162,7 @@
|
|||||||
<span class="badge bp"><i class="bi bi-git"></i> <%= t('donate.code_free','KODE AKTIVASI GRATIS') %></span>
|
<span class="badge bp"><i class="bi bi-git"></i> <%= t('donate.code_free','KODE AKTIVASI GRATIS') %></span>
|
||||||
<span style="font-weight:700;font-size:14px"><%= t('donate.status','Status:') %> <span style="color:var(--warning);font-weight:800" id="statusText"><%= t('donate.waiting_donation','Menunggu Donasi Masuk') %></span></span>
|
<span style="font-weight:700;font-size:14px"><%= t('donate.status','Status:') %> <span style="color:var(--warning);font-weight:800" id="statusText"><%= t('donate.waiting_donation','Menunggu Donasi Masuk') %></span></span>
|
||||||
</div>
|
</div>
|
||||||
<p class="muted" style="font-size:13.5px;margin:0"><i class="bi bi-info-circle" style="color:var(--info)"></i> <%= t('donate.menu_code','Kode aktivasi menu') %> <strong style="color:var(--primary)"><%= t('donate.free','GRATIS') %></strong> di <a href="https://gitea.oxpoe.qzz.io/oxpoe/open-isp/wiki" target="_blank" rel="noopener" style="color:var(--primary)"><%= t('donate.wiki','Wiki OPEN-ISP') %></a>. Donasi bersifat sukarela; jika berdonasi, kode juga otomatis dikirim ke WhatsApp Anda begitu pembayaran terdeteksi.</p>
|
<p class="muted" style="font-size:13.5px;margin:0"><i class="bi bi-info-circle" style="color:var(--info)"></i> <%= t('donate.menu_code','Kode aktivasi menu') %> <strong style="color:var(--primary)"><%= t('donate.free','GRATIS') %></strong> di <a href="https://gitea.oxpoe.xyz/oxpoe/open-isp/wiki" target="_blank" rel="noopener" style="color:var(--primary)"><%= t('donate.wiki','Wiki OPEN-ISP') %></a>. Donasi bersifat sukarela; jika berdonasi, kode juga otomatis dikirim ke WhatsApp Anda begitu pembayaran terdeteksi.</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- AKTIVASI CARD -->
|
<!-- AKTIVASI CARD -->
|
||||||
@@ -229,7 +229,7 @@
|
|||||||
async function generateQris() {
|
async function generateQris() {
|
||||||
if (isPaid) return;
|
if (isPaid) return;
|
||||||
var amt = parseInt(document.getElementById('inputAmount').value, 10) || 50000;
|
var amt = parseInt(document.getElementById('inputAmount').value, 10) || 50000;
|
||||||
var phone = document.getElementById('inputPhone').value.trim() || '081947215703';
|
var phone = document.getElementById('inputPhone').value.trim();
|
||||||
var name = document.getElementById('inputName').value.trim() || 'Hamba Allah';
|
var name = document.getElementById('inputName').value.trim() || 'Hamba Allah';
|
||||||
var notes = document.getElementById('inputNotes').value.trim();
|
var notes = document.getElementById('inputNotes').value.trim();
|
||||||
try {
|
try {
|
||||||
|
|||||||
Reference in New Issue
Block a user