From 205db53d7ed3592badb34be98a8da4a246135e25 Mon Sep 17 00:00:00 2001 From: oxpoe Date: Thu, 5 Nov 2026 06:29:33 +0700 Subject: [PATCH] fix(ui): link repo ke gitea.oxpoe.xyz, buka semua menu, hapus kontak aktivasi - 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 --- app-customer.js | 2 +- docs/RELEASE_NOTES_v0.5.3.md | 2 +- package.json | 6 +++--- routes/acsPortal.js | 2 +- routes/adminPortal.js | 7 +------ services/sidebarMenuService.js | 16 ++++++++-------- views/admin/partials/sidebar.ejs | 4 ++-- views/admin/sidebar_settings.ejs | 15 ++++++--------- views/donate.ejs | 14 +++++++------- 9 files changed, 30 insertions(+), 38 deletions(-) diff --git a/app-customer.js b/app-customer.js index 70a1d70..91e55eb 100644 --- a/app-customer.js +++ b/app-customer.js @@ -177,7 +177,7 @@ app.use((req, res, next) => { res.locals.serviceNotice = noticeSvc.getServiceNotice(); res.locals.uptimeUrl = getSetting('uptime_url', ''); 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.appVersionName = String(getSetting('app_version_name', 'pickle-lime') || 'pickle-lime'); res.locals.pwaVersion = String(getSetting('pwa_version', '2.0') || '2.0'); diff --git a/docs/RELEASE_NOTES_v0.5.3.md b/docs/RELEASE_NOTES_v0.5.3.md index 3a4dd11..535975b 100644 --- a/docs/RELEASE_NOTES_v0.5.3.md +++ b/docs/RELEASE_NOTES_v0.5.3.md @@ -47,7 +47,7 @@ Rilis ini menggabungkan pembaruan fitur dari repo upstream (`alijayanet/billing- - Kolom API key AI disamarkan di halaman Pengaturan. ## Dokumentasi -- 10 screenshot (desktop + mobile) di `docs/screenshots/`. +- 10 screenshot (desktop + mobile) di `docs/screenshots/` (format WebP, ringan). ## Cara upgrade diff --git a/package.json b/package.json index 830e35f..5c78875 100644 --- a/package.json +++ b/package.json @@ -50,12 +50,12 @@ }, "author": "oxpoe", "license": "ISC", - "homepage": "https://gitea.oxpoe.qzz.io/oxpoe/open-isp#readme", + "homepage": "https://gitea.oxpoe.xyz/oxpoe/open-isp#readme", "repository": { "type": "git", - "url": "git+https://gitea.oxpoe.qzz.io/oxpoe/open-isp.git" + "url": "git+https://gitea.oxpoe.xyz/oxpoe/open-isp.git" }, "bugs": { - "url": "https://gitea.oxpoe.qzz.io/oxpoe/open-isp/issues" + "url": "https://gitea.oxpoe.xyz/oxpoe/open-isp/issues" } } diff --git a/routes/acsPortal.js b/routes/acsPortal.js index 9766216..70ca678 100644 --- a/routes/acsPortal.js +++ b/routes/acsPortal.js @@ -705,7 +705,7 @@ function requireSidebarMenuAccess(menuKey) { } 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'); } diff --git a/routes/adminPortal.js b/routes/adminPortal.js index 4c2d1e6..d6854e0 100644 --- a/routes/adminPortal.js +++ b/routes/adminPortal.js @@ -317,7 +317,7 @@ function requireSidebarMenuAccess(menuKey) { } 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'); } @@ -3989,11 +3989,6 @@ router.get('/sidebar-settings', requireAdminSession, (req, res) => { router.post('/sidebar-settings', requireAdminSession, restrictToAdmin, express.urlencoded({ extended: true }), (req, res) => { 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 success = sidebarMenuSvc.saveMenuStates(menuStates); if (!success) throw new Error('Gagal menyimpan pengaturan sidebar'); diff --git a/services/sidebarMenuService.js b/services/sidebarMenuService.js index dcb97c6..92a05df 100644 --- a/services/sidebarMenuService.js +++ b/services/sidebarMenuService.js @@ -3,7 +3,7 @@ const { getSetting, getSettings, saveSettings } = require('../config/settingsMan 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_CONTACT_PHONE = '081947215703'; +const FEATURE_CONTACT_PHONE = ''; function getFeaturePasswordHash() { return getSetting('feature_password_hash', FEATURE_PASSWORD_HASH); @@ -115,16 +115,16 @@ const DEFAULT_MENU_STATES = { cashiers_reports: STATE_VISIBLE, collector_payments: STATE_VISIBLE, tickets: STATE_VISIBLE, - inventory: STATE_LOCKED, - attendance: STATE_LOCKED, - payroll: STATE_LOCKED, + inventory: STATE_VISIBLE, + attendance: STATE_VISIBLE, + payroll: STATE_VISIBLE, cash_in: STATE_VISIBLE, expenses: STATE_VISIBLE, expense_categories: STATE_VISIBLE, cashier_attendance: STATE_VISIBLE, - technicians: STATE_LOCKED, - cashiers: STATE_LOCKED, - collectors: STATE_LOCKED, + technicians: STATE_VISIBLE, + cashiers: STATE_VISIBLE, + collectors: STATE_VISIBLE, areas: STATE_VISIBLE, update: STATE_VISIBLE, vouchers_discounts: STATE_VISIBLE, @@ -259,7 +259,7 @@ function enrichMenu(menu, states) { locked, hidden, 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)) { out.children = menu.children.map((ch) => enrichMenu(ch, states)); diff --git a/views/admin/partials/sidebar.ejs b/views/admin/partials/sidebar.ejs index d684285..9f394b5 100644 --- a/views/admin/partials/sidebar.ejs +++ b/views/admin/partials/sidebar.ejs @@ -129,7 +129,7 @@ document.addEventListener('DOMContentLoaded', () => { <%= t('common.logout', 'Logout') %>
- + OPEN-ISP BILLING SYSTEM
@@ -163,7 +163,7 @@ document.addEventListener('DOMContentLoaded', () => { <%= t('admin.lock.code_label','Kode aktivasi menu ini') %> GRATIS <%= t('admin.lock.wiki_note','— tanpa perlu donasi untuk membukanya.') %>
- + <%= t('admin.lock.get_code','Ambil Kode Aktivasi (Gratis)') %> diff --git a/views/admin/sidebar_settings.ejs b/views/admin/sidebar_settings.ejs index 2306a60..d59db3c 100644 --- a/views/admin/sidebar_settings.ejs +++ b/views/admin/sidebar_settings.ejs @@ -43,7 +43,7 @@

- <%= 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.') %>

<% if (canManageSidebar) { %> @@ -76,7 +76,7 @@ @@ -97,7 +97,7 @@ @@ -108,12 +108,9 @@
@@ -138,12 +135,12 @@
- <%= t('admin.sb.note_lock', 'Jika menu berstatus Kunci diklik dari sidebar, sistem menampilkan cara mengambil kode aktivasi GRATIS atau menghubungi') %> <%= featureContactPhone %>. + <%= t('admin.sb.note_lock', 'Menu berstatus Kunci tidak dapat dibuka sampai diaktifkan dari halaman ini.') %>
  • <%= t('admin.sb.note1', 'Status Sembunyikan akan menghilangkan menu dari sidebar dan menolak akses URL langsung.') %>
  • <%= t('admin.sb.note2', 'Status Kunci tetap menampilkan menu, tetapi tidak bisa dibuka sampai statusnya diubah di halaman ini.') %>
  • -
  • <%= t('admin.sb.note3', 'Perubahan status menu hanya dapat disimpan setelah memasukkan password aktivasi yang benar.') %>
  • +
diff --git a/views/donate.ejs b/views/donate.ejs index 94b42f7..dbb7ae1 100644 --- a/views/donate.ejs +++ b/views/donate.ejs @@ -36,8 +36,8 @@

<%= t('donate.title','Dukung OPEN-ISP') %>

<%= settings.company_header || 'OPEN-ISP' %> • <%= t('donate.tagline','Donasi sukarela untuk pengembangan aplikasi open source (ISC)') %>

- <%= t('donate.menu_code_free','Kode aktivasi menu tersedia GRATIS') %> <%= t('donate.free_hint','untuk semua — donasi') %> <%= t('donate.not_required','tidak wajib') %>. - <%= t('donate.open_wiki','Buka Wiki') %> + <%= t('donate.menu_code_free','Semua menu sudah terbuka') %> <%= t('donate.free_hint','— donasi bersifat sukarela dan') %> <%= t('donate.not_required','tidak wajib') %>. + <%= t('donate.open_wiki','Buka Wiki') %>
@@ -70,10 +70,10 @@
- +
-
<%= t('donate.thanks_note','Ucapan terima kasih & kode aktivasi sidebar dikirim ke nomor ini.') %>
+
<%= t('donate.thanks_note','Ucapan terima kasih dikirim ke nomor ini.') %>
@@ -105,7 +105,7 @@
<%= t('donate.waiting_payment','Menunggu Pembayaran Masuk…') %>
-
<%= t('donate.auto_detect','Sistem otomatis mendeteksi transaksi & mengirim kode aktivasi ke WA Anda.') %>
+
<%= t('donate.auto_detect','Sistem otomatis mendeteksi transaksi pembayaran.') %>
@@ -162,7 +162,7 @@ <%= t('donate.code_free','KODE AKTIVASI GRATIS') %> <%= t('donate.status','Status:') %> <%= t('donate.waiting_donation','Menunggu Donasi Masuk') %>
-

<%= t('donate.menu_code','Kode aktivasi menu') %> <%= t('donate.free','GRATIS') %> di <%= t('donate.wiki','Wiki OPEN-ISP') %>. Donasi bersifat sukarela; jika berdonasi, kode juga otomatis dikirim ke WhatsApp Anda begitu pembayaran terdeteksi.

+

<%= t('donate.menu_code','Kode aktivasi menu') %> <%= t('donate.free','GRATIS') %> di <%= t('donate.wiki','Wiki OPEN-ISP') %>. Donasi bersifat sukarela; jika berdonasi, kode juga otomatis dikirim ke WhatsApp Anda begitu pembayaran terdeteksi.

@@ -229,7 +229,7 @@ async function generateQris() { if (isPaid) return; 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 notes = document.getElementById('inputNotes').value.trim(); try {