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