File: /home/muratemr/theotto.tr/admin/customer_tags.php
<?php
/**
* admin/customer_tags.php
*/
declare(strict_types=1);
$page_title = 'Müşteri Etiketleri';
$active_menu = 'customer_tags';
require_once __DIR__ . '/../includes/db.php';
require_once __DIR__ . '/../includes/auth.php';
require_once __DIR__ . '/../includes/functions.php';
require_once __DIR__ . '/../includes/csrf.php';
require_permission('customer_tags');
require_once __DIR__ . '/../includes/admin_layout.php';
$tags = db_rows("
SELECT ct.*, COUNT(c.id) AS customer_count
FROM customer_tags ct
LEFT JOIN customers c ON c.tag_id = ct.id
GROUP BY ct.id
ORDER BY ct.is_default DESC, ct.name ASC
");
?>
<div class="d-flex justify-content-between align-items-center mb-3">
<h5 class="mb-0 text-gold"><i class="bi bi-tags me-2"></i>Müşteri Etiketleri</h5>
<?php if (is_admin()): ?>
<button class="btn btn-gold btn-sm" onclick="openAddModal()">
<i class="bi bi-plus-lg me-1"></i>Yeni Etiket
</button>
<?php endif; ?>
</div>
<div class="card">
<div class="card-body p-0">
<div class="table-responsive">
<table class="table table-hover mb-0">
<thead>
<tr>
<th>Etiket Adı</th>
<th>İndirim</th>
<th>Otomatik Not</th>
<th>Varsayılan</th>
<th>Müşteri</th>
<th>İşlemler</th>
</tr>
</thead>
<tbody>
<?php foreach ($tags as $t): ?>
<tr>
<td><?= e($t['name']) ?></td>
<td>
<?= $t['discount_rate'] > 0
? '<span class="badge bg-success">%' . $t['discount_rate'] . '</span>'
: '<span class="text-muted">—</span>' ?>
</td>
<td class="fs-12 text-muted"><?= $t['auto_note'] ? e(mb_strimwidth($t['auto_note'],0,50,'...')) : '—' ?></td>
<td>
<?= $t['is_default']
? '<span class="badge bg-gold text-dark" style="background:var(--gold)!important">Varsayılan</span>'
: '' ?>
</td>
<td><span class="badge bg-secondary"><?= $t['customer_count'] ?></span></td>
<td>
<?php if (is_admin()): ?>
<button class="btn btn-sm btn-outline-secondary btn-action" onclick="openEditModal(<?= htmlspecialchars(json_encode($t)) ?>)" title="Düzenle">
<i class="bi bi-pencil"></i>
</button>
<?php if (!$t['is_default'] && !$t['customer_count']): ?>
<button class="btn btn-sm btn-outline-danger btn-action" onclick="deleteTag(<?= $t['id'] ?>)" title="Sil">
<i class="bi bi-trash"></i>
</button>
<?php elseif ($t['is_default']): ?>
<span class="fs-12 text-muted ms-1" title="Varsayılan etiket silinemez"><i class="bi bi-lock"></i></span>
<?php elseif ($t['customer_count']): ?>
<span class="fs-12 text-muted ms-1" title="Bağlı müşteri var"><i class="bi bi-lock"></i></span>
<?php endif; ?>
<?php if (!$t['is_default']): ?>
<button class="btn btn-sm btn-outline-gold btn-action" style="border-color:var(--gold);color:var(--gold)" onclick="setDefault(<?= $t['id'] ?>)" title="Varsayılan Yap">
<i class="bi bi-star"></i>
</button>
<?php endif; ?>
<?php endif; ?>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
</div>
</div>
<!-- Etiket Modalı -->
<div class="modal fade" id="tagFormModal" tabindex="-1">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h6 class="modal-title" id="tagFormTitle">Yeni Etiket</h6>
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
</div>
<div class="modal-body">
<input type="hidden" id="tagId" value="">
<div class="mb-3">
<label class="form-label">Etiket Adı *</label>
<input type="text" id="tagName" class="form-control" placeholder="Örn: VIP, Düzenli Müşteri...">
</div>
<div class="mb-3">
<label class="form-label">İndirim Oranı</label>
<select id="tagDiscount" class="form-select">
<option value="0">İndirim yok</option>
<option value="5">%5</option>
<option value="10">%10</option>
<option value="15">%15</option>
<option value="20">%20</option>
<option value="25">%25</option>
</select>
</div>
<div class="mb-3">
<label class="form-label">Otomatik Not</label>
<textarea id="tagAutoNote" class="form-control" rows="3" placeholder="Bu etiket atandığında müşteri notuna otomatik eklenecek metin..."></textarea>
<div class="form-text" style="color:rgba(255,255,255,0.55)">Boş bırakılabilir. Etiket atanınca tarih ile birlikte müşteri notuna eklenir.</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary btn-sm" data-bs-dismiss="modal">İptal</button>
<button type="button" class="btn btn-gold btn-sm" id="tagSaveBtn">Kaydet</button>
</div>
</div>
</div>
</div>
<script>
function openAddModal() {
document.getElementById('tagId').value = '';
document.getElementById('tagName').value = '';
document.getElementById('tagDiscount').value = '0';
document.getElementById('tagAutoNote').value = '';
document.getElementById('tagFormTitle').textContent = 'Yeni Etiket';
openModal('tagFormModal');
}
function openEditModal(tag) {
document.getElementById('tagId').value = tag.id;
document.getElementById('tagName').value = tag.name;
document.getElementById('tagDiscount').value = tag.discount_rate;
document.getElementById('tagAutoNote').value = tag.auto_note || '';
document.getElementById('tagFormTitle').textContent = 'Etiket Düzenle';
openModal('tagFormModal');
}
document.getElementById('tagSaveBtn').addEventListener('click', async () => {
const id = document.getElementById('tagId').value;
const name = document.getElementById('tagName').value.trim();
if (!name) { showToast('Etiket adı zorunludur.', 'error'); return; }
const res = await apiPost('/api/admin/customer_tags.php', {
action: id ? 'update' : 'create',
id,
name,
discount_rate: document.getElementById('tagDiscount').value,
auto_note: document.getElementById('tagAutoNote').value,
});
if (res.success) {
closeModal('tagFormModal');
showToast(res.message, 'success');
setTimeout(() => location.reload(), 800);
} else {
showToast(res.message, 'error');
}
});
async function deleteTag(id) {
if (!confirm('Bu etiketi silmek istiyor musunuz?')) return;
const res = await apiPost('/api/admin/customer_tags.php', { action: 'delete', id });
if (res.success) {
showToast('Silindi.', 'success');
setTimeout(() => location.reload(), 800);
} else {
showToast(res.message, 'error');
}
}
async function setDefault(id) {
const res = await apiPost('/api/admin/customer_tags.php', { action: 'set_default', id });
if (res.success) {
showToast('Varsayılan güncellendi.', 'success');
setTimeout(() => location.reload(), 800);
} else {
showToast(res.message, 'error');
}
}
</script>
<?php require_once __DIR__ . '/../includes/admin_layout_end.php'; ?>