Files
MyKeyser/admin/settings.php
T

230 lines
13 KiB
PHP

<?php
$adminTitle = 'Site Settings';
include __DIR__.'/admin_header.php';
if (isPost()) {
csrfCheck();
$act = p('_act');
if ($act === 'settings') {
setSetting('site_name', ps('site_name'));
setSetting('site_tagline', ps('site_tagline'));
setSetting('contact_email', ps('contact_email'));
setSetting('registration_enabled',p('registration_enabled','0'));
setSetting('events_require_approval',p('events_require_approval','0'));
setSetting('home_random_interval',p('home_random_interval','2hours') === 'day' ? 'day' : '2hours');
if (array_key_exists('mailgun_domain', $_POST)) {
setSetting('site_base_url', rtrim(ps('site_base_url'), '/'));
setSetting('mailgun_region', p('mailgun_region','us') === 'eu' ? 'eu' : 'us');
setSetting('mailgun_domain', ps('mailgun_domain'));
setSetting('mailgun_from_name', ps('mailgun_from_name') ?: 'Discover Keyser WV');
setSetting('mailgun_from_email', ps('mailgun_from_email'));
setSetting('mailgun_send_mode', p('mailgun_send_mode','html') === 'text' ? 'text' : 'html');
if (p('clear_mailgun_api_key','0') === '1') {
setSetting('mailgun_api_key', '');
} elseif (ps('mailgun_api_key') !== '') {
setSetting('mailgun_api_key', ps('mailgun_api_key'));
}
}
flash('Settings saved!','success');
go('/admin/settings.php');
}
// Change admin password
if ($act === 'change_password') {
$pw = ps('new_password');
$pw2 = ps('confirm_password');
if (strlen($pw) < 6) { flash('Password must be at least 6 characters.','error'); go('/admin/settings.php'); }
if ($pw !== $pw2) { flash('Passwords do not match.','error'); go('/admin/settings.php'); }
qrun("UPDATE users SET password=? WHERE id=?",[password_hash($pw,PASSWORD_BCRYPT),uid()]);
flash('Password updated successfully!','success');
go('/admin/settings.php');
}
}
$regEnabled = setting('registration_enabled','1');
$evtApproval = setting('events_require_approval','1');
$siteName = setting('site_name','Discover Keyser WV');
$siteTagline = setting('site_tagline','The Friendliest City in the U.S.A.');
$contactEmail = setting('contact_email','info@discoverkeyser.com');
$homeRandomInterval = setting('home_random_interval','2hours');
$siteBaseUrl = setting('site_base_url','');
$mailgunRegion = setting('mailgun_region','us');
$mailgunDomain = setting('mailgun_domain','');
$mailgunFromName = setting('mailgun_from_name','Discover Keyser WV');
$mailgunFromEmail = setting('mailgun_from_email','');
$mailgunSendMode = setting('mailgun_send_mode','html');
$mailgunHasKey = setting('mailgun_api_key','') !== '';
$me = qone("SELECT * FROM users WHERE id=?",[uid()]);
?>
<?php adminTitle('Site Settings') ?>
<div class="g2" style="gap:1.5rem">
<!-- General settings -->
<div>
<div class="ibox" style="border-color:var(--gold-d)">
<div class="ibox-title">🌐 GENERAL SETTINGS</div>
<form method="POST"><?=csrfField()?><input type="hidden" name="_act" value="settings">
<div class="fg"><label class="flabel">SITE NAME</label><input type="text" name="site_name" class="finput" value="<?=e($siteName)?>"></div>
<div class="fg"><label class="flabel">SITE TAGLINE</label><input type="text" name="site_tagline" class="finput" value="<?=e($siteTagline)?>"></div>
<div class="fg"><label class="flabel">CONTACT EMAIL</label><input type="email" name="contact_email" class="finput" value="<?=e($contactEmail)?>"></div>
<hr class="divider" style="margin:1rem 0">
<div class="fg">
<label class="flabel">USER REGISTRATION</label>
<div style="display:flex;gap:1rem;margin-top:.4rem">
<label style="display:flex;align-items:center;gap:.4rem;cursor:pointer;font-size:.9rem">
<input type="radio" name="registration_enabled" value="1"<?=$regEnabled==='1'?' checked':''?>>
<span style="color:var(--green-l)">✅ Enabled — users can register</span>
</label>
</div>
<div style="display:flex;gap:1rem;margin-top:.4rem">
<label style="display:flex;align-items:center;gap:.4rem;cursor:pointer;font-size:.9rem">
<input type="radio" name="registration_enabled" value="0"<?=$regEnabled==='0'?' checked':''?>>
<span style="color:var(--red-l)">🔒 Disabled — registration closed</span>
</label>
</div>
<div class="fhint">When disabled, the Sign Up link is hidden and registration page shows a message.</div>
</div>
<div class="fg">
<label class="flabel">EVENT SUBMISSIONS</label>
<div style="margin-top:.4rem">
<label style="display:flex;align-items:center;gap:.4rem;cursor:pointer;font-size:.9rem;margin-bottom:.35rem">
<input type="radio" name="events_require_approval" value="1"<?=$evtApproval==='1'?' checked':''?>>
<span>Require admin approval before events go public</span>
</label>
<label style="display:flex;align-items:center;gap:.4rem;cursor:pointer;font-size:.9rem">
<input type="radio" name="events_require_approval" value="0"<?=$evtApproval==='0'?' checked':''?>>
<span>Auto-approve all submitted events</span>
</label>
</div>
</div>
<div class="fg">
<label class="flabel">HOMEPAGE RANDOM BUSINESS ROTATION</label>
<div style="margin-top:.4rem">
<label style="display:flex;align-items:center;gap:.4rem;cursor:pointer;font-size:.9rem;margin-bottom:.35rem">
<input type="radio" name="home_random_interval" value="2hours"<?=$homeRandomInterval==='2hours'?' checked':''?>>
<span>Refresh the random list every two hours</span>
</label>
<label style="display:flex;align-items:center;gap:.4rem;cursor:pointer;font-size:.9rem">
<input type="radio" name="home_random_interval" value="day"<?=$homeRandomInterval==='day'?' checked':''?>>
<span>Refresh the random list once per day</span>
</label>
</div>
</div>
<button type="submit" class="btn btn-primary">Save Settings</button>
</form>
</div>
<div class="ibox" style="border-color:var(--gold-d)">
<div class="ibox-title">✉️ EMAIL VERIFICATION &amp; MAILGUN</div>
<form method="POST"><?=csrfField()?><input type="hidden" name="_act" value="settings">
<input type="hidden" name="site_name" value="<?=e($siteName)?>">
<input type="hidden" name="site_tagline" value="<?=e($siteTagline)?>">
<input type="hidden" name="contact_email" value="<?=e($contactEmail)?>">
<input type="hidden" name="registration_enabled" value="<?=e($regEnabled)?>">
<input type="hidden" name="events_require_approval" value="<?=e($evtApproval)?>">
<input type="hidden" name="home_random_interval" value="<?=e($homeRandomInterval)?>">
<div class="fg">
<label class="flabel">SITE BASE URL</label>
<input type="url" name="site_base_url" class="finput" value="<?=e($siteBaseUrl)?>" placeholder="https://discoverkeyser.com">
<div class="fhint">Used to build verification links. Leave blank to detect the current host.</div>
</div>
<div class="form-row">
<div class="fg">
<label class="flabel">MAILGUN REGION</label>
<select name="mailgun_region" class="fselect">
<option value="us"<?=$mailgunRegion==='us'?' selected':''?>>US API (api.mailgun.net)</option>
<option value="eu"<?=$mailgunRegion==='eu'?' selected':''?>>EU API (api.eu.mailgun.net)</option>
</select>
</div>
<div class="fg">
<label class="flabel">MAILGUN DOMAIN</label>
<input type="text" name="mailgun_domain" class="finput" value="<?=e($mailgunDomain)?>" placeholder="mg.example.com">
</div>
</div>
<div class="form-row">
<div class="fg">
<label class="flabel">FROM NAME</label>
<input type="text" name="mailgun_from_name" class="finput" value="<?=e($mailgunFromName)?>" placeholder="Discover Keyser WV">
</div>
<div class="fg">
<label class="flabel">FROM EMAIL</label>
<input type="email" name="mailgun_from_email" class="finput" value="<?=e($mailgunFromEmail)?>" placeholder="hello@mg.example.com">
</div>
</div>
<div class="fg">
<label class="flabel">MAILGUN API KEY</label>
<input type="password" name="mailgun_api_key" class="finput" value="" placeholder="<?=$mailgunHasKey?'Key saved - leave blank to keep it':'Enter Mailgun API key'?>">
<div class="fhint"><?=$mailgunHasKey?'An API key is saved. Enter a new key to replace it.':'No API key is saved yet.'?></div>
<?php if($mailgunHasKey): ?>
<label style="display:flex;align-items:center;gap:.45rem;margin-top:.55rem;font-size:.85rem;color:var(--text-m);cursor:pointer">
<input type="checkbox" name="clear_mailgun_api_key" value="1"> Clear saved API key
</label>
<?php endif; ?>
</div>
<div class="fg">
<label class="flabel">EMAIL SEND FORMAT</label>
<div style="margin-top:.4rem">
<label style="display:flex;align-items:center;gap:.4rem;cursor:pointer;font-size:.9rem;margin-bottom:.35rem">
<input type="radio" name="mailgun_send_mode" value="html"<?=$mailgunSendMode==='html'?' checked':''?>>
<span>Designed HTML email with text fallback</span>
</label>
<label style="display:flex;align-items:center;gap:.4rem;cursor:pointer;font-size:.9rem">
<input type="radio" name="mailgun_send_mode" value="text"<?=$mailgunSendMode==='text'?' checked':''?>>
<span>Simple text-only email</span>
</label>
</div>
</div>
<button type="submit" class="btn btn-primary">Save Email Settings</button>
</form>
</div>
</div>
<!-- Admin password change -->
<div>
<div class="ibox" style="border-color:var(--gold-d)">
<div class="ibox-title">🔑 CHANGE YOUR ADMIN PASSWORD</div>
<div class="irow"><span class="irow-i">👤</span><span class="irow-v"><?=e($me['username'])?> <span class="badge badge-gold">ADMIN</span></span></div>
<div class="irow" style="margin-bottom:1rem"><span class="irow-i">📅</span><span class="irow-v">Last login: <?=$me['last_login']?ago($me['last_login']):'—'?></span></div>
<form method="POST"><?=csrfField()?><input type="hidden" name="_act" value="change_password">
<div class="fg"><label class="flabel">NEW PASSWORD *</label><input type="password" name="new_password" class="finput" required autocomplete="new-password"><div class="fhint">Minimum 6 characters.</div></div>
<div class="fg"><label class="flabel">CONFIRM NEW PASSWORD *</label><input type="password" name="confirm_password" class="finput" required autocomplete="new-password"></div>
<button type="submit" class="btn btn-primary">Update Password</button>
</form>
</div>
<!-- DB info -->
<div class="ibox">
<div class="ibox-title">📊 DATABASE INFO</div>
<?php
$counts = [
'Businesses' => qval("SELECT COUNT(*) FROM businesses"),
'Users' => qval("SELECT COUNT(*) FROM users"),
'Reviews' => qval("SELECT COUNT(*) FROM reviews"),
'Events' => qval("SELECT COUNT(*) FROM events"),
'Attractions'=> qval("SELECT COUNT(*) FROM attractions"),
'Alerts' => qval("SELECT COUNT(*) FROM alerts"),
'Reports' => qval("SELECT COUNT(*) FROM reports"),
'Menu Sections'=> qval("SELECT COUNT(*) FROM menu_sections"),
'Menu Items' => qval("SELECT COUNT(*) FROM menu_items"),
];
foreach ($counts as $lbl => $n):
?><div class="irow"><span class="irow-i">📌</span><span class="irow-v" style="display:flex;justify-content:space-between;width:100%"><span><?=e($lbl)?></span><strong style="color:var(--gold)"><?=$n?></strong></span></div><?php endforeach; ?>
<?php if(file_exists(DB_FILE)): ?>
<div class="irow"><span class="irow-i">💾</span><span class="irow-v" style="display:flex;justify-content:space-between;width:100%"><span>DB File Size</span><strong style="color:var(--gold)"><?=number_format(filesize(DB_FILE)/1024,1)?> KB</strong></span></div>
<?php endif; ?>
</div>
</div>
</div>
<?php include __DIR__.'/admin_footer.php'; ?>