<?php
// modules/profil.php
session_start();
require_once '../config/db.php';
require_once '../config/functions.php';
// Herkes kendi profiline girebilir
yetkiKontrol(['root', 'yonetici', 'mudur', 'vardiya_amiri', 'muhasebe', 'insan_kaynaklari', 'calisan', 'stajyer']);
include '../includes/header.php';
include '../includes/menu.php';
$id = $_SESSION['kullanici_id'];
$mesaj = '';
// Maaş hariç gerekli bilgileri çek
$stmt = $pdo->prepare("SELECT id, ad, soyad, kullanici_adi, rol, email, telefon, tc_no, sgk_no, dogum_tarihi, ise_giris_tarihi, kan_grubu, adres, medeni_durum, cocuk_sayisi, fotograf_yolu, sifre_hash FROM kullanicilar WHERE id = ?");
$stmt->execute([$id]);
$u = $stmt->fetch();
if (!$u) {
session_destroy();
header('Location: ../auth/login.php');
exit;
}
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
csrfKontrol($_POST['csrf_token']);
// Değiştirilebilir alanlar
$email = guvenlik($_POST['email']);
$telefon = telefonFormatla($_POST['telefon']);
$kan_grubu = $_POST['kan_grubu'];
$adres = guvenlik($_POST['adres']);
$dogum_tarihi = $_POST['dogum_tarihi'];
$medeni_durum = $_POST['medeni_durum'];
$cocuk_sayisi = (int)$_POST['cocuk_sayisi'];
// Şifre kontrolü
$eski_sifre = $_POST['eski_sifre'];
$yeni_sifre = $_POST['yeni_sifre'];
if (!password_verify($eski_sifre, $u['sifre_hash'])) {
$mesaj = '<div class="alert alert-danger border-danger border-5 border-start shadow-sm">
<h6 class="alert-heading fw-bold"><i class="fas fa-exclamation-triangle me-2"></i>Hata!</h6>
Mevcut şifreniz yanlış. Değişiklikler kaydedilemedi.
</div>';
goto end_of_post;
}
// Yeni şifre kontrolü
$yeni_sifre_hash = '';
if (!empty($yeni_sifre)) {
if (strlen($yeni_sifre) < 6) {
$mesaj = '<div class="alert alert-danger">Yeni şifre en az 6 karakter olmalıdır.</div>';
goto end_of_post;
}
$yeni_sifre_hash = password_hash($yeni_sifre, PASSWORD_DEFAULT);
}
// Fotoğraf yükleme
$fotograf_yolu = $u['fotograf_yolu'];
if (isset($_FILES['fotograf']) && $_FILES['fotograf']['error'] === UPLOAD_ERR_OK) {
$upload_dir = 'assets/uploads/profil/';
$allowed = ['image/jpeg', 'image/jpg', 'image/png'];
$max_size = 2 * 1024 * 1024; // 2MB
if (!in_array($_FILES['fotograf']['type'], $allowed)) {
$mesaj = '<div class="alert alert-danger">Sadece JPG veya PNG dosyası yüklenebilir.</div>';
goto end_of_post;
}
if ($_FILES['fotograf']['size'] > $max_size) {
$mesaj = '<div class="alert alert-danger">Dosya boyutu 2MB\'ı geçemez.</div>';
goto end_of_post;
}
// Eski fotoğrafı sil
if (!empty($u['fotograf_yolu']) && file_exists('../' . $u['fotograf_yolu'])) {
@unlink('../' . $u['fotograf_yolu']);
}
$ext = pathinfo($_FILES['fotograf']['name'], PATHINFO_EXTENSION);
$yeni_ad = $upload_dir . $id . '_' . time() . '.' . $ext;
$hedef = '../' . $yeni_ad;
if (!is_dir('../' . $upload_dir)) {
mkdir('../' . $upload_dir, 0777, true);
}
if (move_uploaded_file($_FILES['fotograf']['tmp_name'], $hedef)) {
$fotograf_yolu = $yeni_ad;
} else {
$mesaj = '<div class="alert alert-danger">Fotoğraf yüklenirken hata oluştu.</div>';
goto end_of_post;
}
}
// Güncelleme sorgusu
$sql = "UPDATE kullanicilar SET email = ?, telefon = ?, kan_grubu = ?, adres = ?, dogum_tarihi = ?, medeni_durum = ?, cocuk_sayisi = ?, guncellenme_tarihi = NOW()";
$params = [$email, $telefon, $kan_grubu, $adres, $dogum_tarihi, $medeni_durum, $cocuk_sayisi];
if ($fotograf_yolu !== $u['fotograf_yolu']) {
$sql .= ", fotograf_yolu = ?";
$params[] = $fotograf_yolu;
}
if (!empty($yeni_sifre_hash)) {
$sql .= ", sifre_hash = ?";
$params[] = $yeni_sifre_hash;
}
$sql .= " WHERE id = ?";
$params[] = $id;
try {
$pdo->prepare($sql)->execute($params);
// Oturumdaki fotoğrafı güncelle
if ($fotograf_yolu !== $u['fotograf_yolu']) {
$_SESSION['fotograf_yolu'] = $fotograf_yolu;
}
$mesaj = '<div class="alert alert-success border-success border-5 border-start shadow-sm">
<h5 class="alert-heading fw-bold"><i class="fas fa-check-circle me-2"></i>Başarılı!</h5>
Profil bilgileriniz güncellendi.
</div>';
logKaydet($pdo, $id, 'guncelleme', 'Kendi profilini güncelledi.', 'kullanicilar', $id);
// Güncel veriyi tekrar çek
$stmt->execute([$id]);
$u = $stmt->fetch();
} catch (PDOException $e) {
$mesaj = '<div class="alert alert-danger">Veritabanı hatası: ' . htmlspecialchars($e->getMessage()) . '</div>';
}
}
end_of_post:
?>
<!DOCTYPE html>
<html lang="tr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.0/css/all.min.css" rel="stylesheet">
<title>Profil Bilgilerim</title>
<style>
body { background-color: #f8f9fa; }
.card { border: none; border-radius: 1.5rem; overflow: hidden; }
.card-header { background: linear-gradient(135deg, #0d6efd, #0dcaf0); color: white; }
.form-control, .form-select { border-radius: 0.75rem; }
.btn-primary { border-radius: 0.75rem; padding: 0.85rem; font-weight: 600; }
.readonly-bg { background-color: #e9ecef !important; }
.profile-img { max-height: 200px; object-fit: cover; }
@media (max-width: 576px) { .container-fluid { padding: 1rem; } }
</style>
</head>
<body>
<div class="container-fluid py-4 py-md-5">
<div class="row justify-content-center">
<div class="col-12 col-lg-10 col-xl-8">
<h3 class="mb-4 text-center text-primary fw-bold">
<i class="fas fa-user-circle me-2"></i>Profil Bilgilerim
</h3>
<div class="card shadow-lg">
<div class="card-header py-4 text-center">
<h5 class="mb-0 text-white fw-bold">Kişisel Bilgilerinizi Güncelleyin</h5>
</div>
<div class="card-body p-4 p-md-5">
<?php echo $mesaj; ?>
<form method="POST" enctype="multipart/form-data" novalidate>
<input type="hidden" name="csrf_token" value="<?php echo csrfTokenOlustur(); ?>">
<!-- Kimlik Bilgileri (Readonly) -->
<h5 class="mb-4 text-primary"><i class="fas fa-id-card me-2"></i>Kimlik Bilgileri</h5>
<div class="row g-3 mb-4">
<div class="col-md-6">
<label class="form-label fw-semibold">Ad</label>
<input type="text" class="form-control form-control-lg readonly-bg" value="<?php echo htmlspecialchars($u['ad']); ?>" readonly>
</div>
<div class="col-md-6">
<label class="form-label fw-semibold">Soyad</label>
<input type="text" class="form-control form-control-lg readonly-bg" value="<?php echo htmlspecialchars($u['soyad']); ?>" readonly>
</div>
</div>
<div class="row g-3 mb-4">
<div class="col-md-6">
<label class="form-label fw-semibold">Kullanıcı Adı</label>
<input type="text" class="form-control form-control-lg readonly-bg" value="<?php echo htmlspecialchars($u['kullanici_adi']); ?>" readonly>
</div>
<div class="col-md-6">
<label class="form-label fw-semibold">Rol</label>
<input type="text" class="form-control form-control-lg readonly-bg" value="<?php echo ucfirst(str_replace('_', ' ', $u['rol'])); ?>" readonly>
</div>
</div>
<div class="row g-3 mb-4">
<div class="col-md-6">
<label class="form-label fw-semibold">TC Kimlik No</label>
<input type="text" class="form-control form-control-lg readonly-bg" value="<?php echo htmlspecialchars($u['tc_no']); ?>" readonly>
</div>
<div class="col-md-6">
<label class="form-label fw-semibold">SGK Sicil No</label>
<input type="text" class="form-control form-control-lg readonly-bg" value="<?php echo htmlspecialchars($u['sgk_no'] ?? ''); ?>" readonly>
</div>
</div>
<div class="mb-4">
<label class="form-label fw-semibold">İşe Giriş Tarihi</label>
<input type="date" class="form-control form-control-lg readonly-bg" value="<?php echo $u['ise_giris_tarihi']; ?>" readonly>
</div>
<hr class="my-5">
<!-- İletişim ve Kişisel Bilgiler -->
<h5 class="mb-4 text-primary"><i class="fas fa-address-book me-2"></i>İletişim ve Kişisel Bilgiler</h5>
<div class="row g-3 mb-4">
<div class="col-md-6">
<label class="form-label fw-semibold">E-Posta Adresi</label>
<input type="email" name="email" class="form-control form-control-lg" value="<?php echo htmlspecialchars($u['email'] ?? ''); ?>">
</div>
<div class="col-md-6">
<label class="form-label fw-semibold">Telefon</label>
<input type="text" name="telefon" class="form-control form-control-lg" value="<?php echo htmlspecialchars($u['telefon']); ?>" placeholder="05XXXXXXXXX">
</div>
</div>
<div class="mb-4">
<label class="form-label fw-semibold">Adres</label>
<textarea name="adres" class="form-control form-control-lg" rows="3"><?php echo htmlspecialchars($u['adres']); ?></textarea>
</div>
<div class="row g-3 mb-4">
<div class="col-md-4">
<label class="form-label fw-semibold">Doğum Tarihi</label>
<input type="date" name="dogum_tarihi" class="form-control form-control-lg" value="<?php echo $u['dogum_tarihi']; ?>">
</div>
<div class="col-md-4">
<label class="form-label fw-semibold">Kan Grubu</label>
<select name="kan_grubu" class="form-select form-select-lg">
<option value="">Seçiniz</option>
<?php
$kanlar = ['A Rh+', 'A Rh-', 'B Rh+', 'B Rh-', 'AB Rh+', 'AB Rh-', '0 Rh+', '0 Rh-'];
foreach($kanlar as $k):
?>
<option value="<?php echo $k; ?>" <?php echo $u['kan_grubu']==$k?'selected':''; ?>><?php echo $k; ?></option>
<?php endforeach; ?>
</select>
</div>
<div class="col-md-4">
<label class="form-label fw-semibold">Medeni Durum</label>
<select name="medeni_durum" class="form-select form-select-lg">
<option value="">Seçiniz</option>
<?php foreach(['Bekar','Evli','Dul','Boşanmış'] as $d): ?>
<option value="<?php echo $d; ?>" <?php echo $u['medeni_durum']==$d?'selected':''; ?>><?php echo $d; ?></option>
<?php endforeach; ?>
</select>
</div>
</div>
<div class="mb-4">
<label class="form-label fw-semibold">Çocuk Sayısı</label>
<input type="number" name="cocuk_sayisi" class="form-control form-control-lg" min="0" value="<?php echo $u['cocuk_sayisi']; ?>">
</div>
<hr class="my-5">
<!-- Profil Fotoğrafı -->
<h5 class="mb-4 text-primary"><i class="fas fa-image me-2"></i>Profil Fotoğrafı</h5>
<div class="row g-3 align-items-center mb-4">
<?php if (!empty($u['fotograf_yolu'])): ?>
<div class="col-md-4 text-center mb-3">
<label class="form-label fw-semibold">Mevcut Fotoğraf</label><br>
<img src="../<?php echo htmlspecialchars($u['fotograf_yolu']); ?>" class="img-fluid rounded shadow profile-img" alt="Profil Fotoğrafı">
</div>
<?php endif; ?>
<div class="col-md-<?php echo empty($u['fotograf_yolu']) ? '12' : '8'; ?>">
<label class="form-label fw-semibold">Yeni Fotoğraf Yükle</label>
<input type="file" name="fotograf" class="form-control form-control-lg" accept="image/jpeg,image/png">
<div class="form-text">JPG/PNG, maks. 2MB. Boş bırakırsanız değişmez.</div>
</div>
</div>
<hr class="my-5">
<!-- Şifre Değiştirme -->
<h5 class="mb-4 text-primary"><i class="fas fa-lock me-2"></i>Şifre Güncelleme</h5>
<div class="bg-light rounded p-4 border">
<div class="mb-3">
<label class="form-label fw-semibold text-danger">Mevcut Şifre <span class="text-muted small">(Zorunlu - değişiklik için)</span></label>
<input type="password" name="eski_sifre" class="form-control form-control-lg" required placeholder="Değişiklikleri kaydetmek için girin">
</div>
<div class="mb-3">
<label class="form-label fw-semibold">Yeni Şifre <span class="text-muted small">(İsteğe bağlı)</span></label>
<input type="password" name="yeni_sifre" class="form-control form-control-lg" placeholder="En az 6 karakter, değiştirmek istemiyorsanız boş bırakın">
</div>
</div>
<div class="d-grid mt-5">
<button type="submit" class="btn btn-primary btn-lg shadow">
<i class="fas fa-save me-2"></i> Bilgilerimi Güncelle
</button>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<?php include '../includes/footer.php'; ?>
</body>
</html>