File: /home/muratemr/theotto.tr/admin/settings.php
<?php
/**
* admin/settings.php
* Site Ayarları
*/
declare(strict_types=1);
require_once __DIR__ . '/../includes/db.php';
require_once __DIR__ . '/../includes/auth.php';
require_once __DIR__ . '/../includes/csrf.php';
require_once __DIR__ . '/../includes/functions.php';
require_permission('settings');
$page_title = 'Site Ayarları';
$active_menu = 'settings';
$settings = [];
$rows = db_rows("SELECT `key`, `value` FROM site_settings");
foreach ($rows as $r) {
$settings[$r['key']] = $r['value'];
}
require_once __DIR__ . '/../includes/admin_layout.php';
?>
<div class="d-flex justify-content-between align-items-center mb-4">
<h4 class="mb-0"><i class="bi bi-gear-fill me-2 text-warning"></i>Site Ayarları</h4>
</div>
<div class="row g-4">
<!-- Genel Bilgiler -->
<div class="col-md-6">
<div class="card h-100">
<div class="card-header">
<i class="bi bi-image me-2"></i>Site Logosu
</div>
<div class="card-body">
<?php
$logo_url = $settings['site_logo'] ?? '';
?>
<?php if ($logo_url): ?>
<div class="mb-3 text-center p-3" style="background:rgba(0,0,0,0.3);border-radius:8px">
<img src="<?= e($logo_url) ?>" alt="Logo"
style="max-height:80px;max-width:100%;object-fit:contain">
<div class="mt-2">
<button type="button" class="btn btn-outline-danger btn-sm" onclick="removeLogo()">
<i class="bi bi-trash me-1"></i>Logoyu Kaldır
</button>
</div>
</div>
<?php else: ?>
<div class="mb-3 text-center p-3" style="background:rgba(0,0,0,0.2);border-radius:8px;border:2px dashed rgba(255,255,255,0.15)">
<i class="bi bi-image text-muted d-block mb-1" style="font-size:32px"></i>
<span class="text-muted small">Logo yüklenmemiş — site adı gösteriliyor</span>
</div>
<?php endif; ?>
<div class="mb-3">
<label class="form-label">Logo Yükle</label>
<input type="file" id="logoFile" accept="image/*" class="form-control">
<div class="form-text" style="color:rgba(255,255,255,0.5)">
PNG, JPG, SVG, WEBP — Önerilen: şeffaf arka planlı PNG, maks 2MB
</div>
</div>
<div id="logoPreviewWrap" style="display:none" class="mb-3 text-center p-3" style="background:rgba(0,0,0,0.3);border-radius:8px">
<div class="text-muted small mb-1">Önizleme:</div>
<img id="logoPreview" src="" alt="Önizleme"
style="max-height:80px;max-width:100%;object-fit:contain">
</div>
<button type="button" class="btn btn-warning w-100" onclick="uploadLogo()">
<i class="bi bi-upload me-1"></i>Logo Yükle & Kaydet
</button>
<div id="logoStatus" class="mt-2" style="font-size:12px"></div>
</div>
</div>
</div>
<!-- Genel Bilgiler (ayrı col) -->
<div class="col-12 col-md-8">
<div class="card h-100">
<div class="card-header">
<i class="bi bi-info-circle me-2"></i>Genel Bilgiler
</div>
<div class="card-body">
<div class="mb-3">
<label class="form-label">Restoran Adı</label>
<input type="text" class="form-control" id="restaurant_name"
value="<?= e($settings['restaurant_name'] ?? '') ?>">
</div>
<div class="mb-3">
<label class="form-label">Adres</label>
<textarea class="form-control" id="address" rows="2"><?= e($settings['address'] ?? '') ?></textarea>
</div>
<div class="mb-3">
<label class="form-label">Telefon</label>
<input type="text" class="form-control" id="phone"
value="<?= e($settings['phone'] ?? '') ?>">
</div>
<div class="mb-3">
<label class="form-label">WhatsApp Numarası</label>
<input type="text" class="form-control" id="whatsapp"
value="<?= e($settings['whatsapp'] ?? '') ?>"
placeholder="905320000000">
<div class="form-text">Başında 90 ile, rakam olarak girin.</div>
</div>
<div class="mb-3">
<label class="form-label">Menü Linki</label>
<input type="text" class="form-control" id="menu_link"
value="<?= e($settings['menu_link'] ?? '') ?>"
placeholder="https://... veya #menu">
</div>
</div>
</div>
</div>
<!-- Hero & Sosyal Medya -->
<div class="col-md-6">
<div class="card h-100">
<div class="card-header">
<i class="bi bi-layout-text-window me-2"></i>Hero & Sosyal Medya
</div>
<div class="card-body">
<div class="mb-3">
<label class="form-label">Hero Başlık</label>
<input type="text" class="form-control" id="hero_title"
value="<?= e($settings['hero_title'] ?? '') ?>">
</div>
<div class="mb-3">
<label class="form-label">Hero Alt Başlık</label>
<input type="text" class="form-control" id="hero_subtitle"
value="<?= e($settings['hero_subtitle'] ?? '') ?>">
</div>
<div class="mb-3">
<label class="form-label">Hakkımızda Metni</label>
<textarea class="form-control" id="about_text" rows="3"><?= e($settings['about_text'] ?? '') ?></textarea>
</div>
<hr class="border-secondary">
<div class="mb-3">
<label class="form-label"><i class="bi bi-facebook me-1 text-primary"></i>Facebook URL</label>
<input type="url" class="form-control" id="facebook"
value="<?= e($settings['facebook'] ?? '') ?>">
</div>
<div class="mb-3">
<label class="form-label"><i class="bi bi-instagram me-1 text-danger"></i>Instagram URL</label>
<input type="url" class="form-control" id="instagram"
value="<?= e($settings['instagram'] ?? '') ?>">
</div>
<div class="mb-3">
<label class="form-label"><i class="bi bi-twitter-x me-1"></i>Twitter/X URL</label>
<input type="url" class="form-control" id="twitter"
value="<?= e($settings['twitter'] ?? '') ?>">
</div>
</div>
</div>
</div>
</div>
<div class="mt-4 text-end">
<button class="btn btn-warning btn-lg px-5" onclick="saveSettings()">
<i class="bi bi-check-lg me-2"></i>Ayarları Kaydet
</button>
</div>
<script>
function saveSettings() {
const keys = [
'restaurant_name','address','phone','whatsapp','menu_link',
'hero_title','hero_subtitle','about_text','facebook','instagram','twitter'
];
const data = { action: 'save' };
keys.forEach(k => {
const el = document.getElementById(k);
if (el) data[k] = el.value.trim();
});
apiPost('/api/admin/settings.php', data).then(r => {
if (r.success) showToast(r.message, 'success');
else showToast(r.message, 'error');
});
}
</script>
<?php require_once __DIR__ . '/../includes/admin_layout_end.php'; ?>
<script>
// Logo önizleme
document.getElementById('logoFile').addEventListener('change', function() {
var file = this.files[0];
if (!file) return;
var reader = new FileReader();
reader.onload = function(e) {
document.getElementById('logoPreview').src = e.target.result;
document.getElementById('logoPreviewWrap').style.display = '';
};
reader.readAsDataURL(file);
});
async function uploadLogo() {
var file = document.getElementById('logoFile').files[0];
if (!file) { showToast('Önce bir dosya seçin.', 'error'); return; }
var formData = new FormData();
formData.append('logo', file);
formData.append('action', 'upload');
var status = document.getElementById('logoStatus');
status.textContent = 'Yükleniyor...';
status.style.color = 'rgba(255,255,255,0.6)';
try {
var res = await fetch('/api/admin/logo_upload.php', {
method: 'POST',
headers: { 'X-CSRF-Token': CSRF_TOKEN, 'X-Requested-With': 'XMLHttpRequest' },
body: formData
});
var data = await res.json();
if (data.success) {
showToast('Logo yüklendi.', 'success');
setTimeout(function() { location.reload(); }, 800);
} else {
status.textContent = 'Hata: ' + data.message;
status.style.color = '#dc3545';
}
} catch(e) {
status.textContent = 'Bağlantı hatası.';
status.style.color = '#dc3545';
}
}
async function removeLogo() {
confirmAction('Logo kaldırılsın mı? Site adı gösterilmeye başlanır.', async function() {
var res = await apiPost('/api/admin/logo_upload.php', { action: 'remove' });
if (res.success) {
showToast('Logo kaldırıldı.', 'success');
setTimeout(function() { location.reload(); }, 700);
} else {
showToast(res.message, 'error');
}
});
}
</script>