PYBS (Personel Yönetim Bilgi Sistemi) / Ramsa/modules/profil.php
profil.php 256 satır • 13.58 KB
<?php
// modules/profil.php
session_start();
require_once '../config/db.php';
require_once '../config/functions.php';

// Yetki: Herkes kendi profilini görebilir
yetkiKontrol(['root', 'yonetici', 'mudur', 'vardiya_amiri', 'muhasebe', 'insan_kaynaklari', 'calisan', 'stajyer']);

include '../includes/header.php';
include '../includes/menu.php';

$id = $_SESSION['kullanici_id'];
$mesaj = '';

// 1. MEVCUT VERİLERİ ÇEK
$stmt = $pdo->prepare("SELECT * FROM kullanicilar WHERE id = ?");
$stmt->execute([$id]);
$u = $stmt->fetch();

if (!$u) {
    session_destroy();
    echo "<script>location.href='../auth/login.php';</script>";
    exit;
}

// --- POST İŞLEMİ (GÜNCELLEME) ---
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    csrfKontrol($_POST['csrf_token']);

    // Değiştirilebilir Alanlar
    $email = guvenlik($_POST['email']);
    $telefon = telefonFormatla($_POST['telefon']);
    $adres = guvenlik($_POST['adres']);
    $kan_grubu = $_POST['kan_grubu'];
    $medeni_durum = $_POST['medeni_durum'];
    $cocuk_sayisi = (int)$_POST['cocuk_sayisi'];
    
    // Şifreler
    $eski_sifre = $_POST['eski_sifre'];
    $yeni_sifre = $_POST['yeni_sifre'];
    
    // Güvenlik Kontrolü
    if (!password_verify($eski_sifre, $u['sifre_hash'])) {
        $mesaj = '<div class="alert alert-danger"><i class="fas fa-exclamation-triangle me-2"></i> Mevcut şifrenizi yanlış girdiniz.</div>';
    } else {
        // Fotoğraf Yükleme
        $foto_yolu = $u['fotograf_yolu']; 
        
        if (isset($_FILES['fotograf']) && $_FILES['fotograf']['error'] === UPLOAD_ERR_OK) {
            $izin_verilenler = ['jpg', 'jpeg', 'png'];
            $ext = strtolower(pathinfo($_FILES['fotograf']['name'], PATHINFO_EXTENSION));
            
            if (in_array($ext, $izin_verilenler)) {
                $on_ek = $u['tc_no'] ? $u['tc_no'] : $u['kullanici_adi'];
                $yeni_ad = $on_ek . '_' . time() . '.' . $ext;
                $hedef_klasor = '../assets/uploads/';
                $hedef_dosya = $hedef_klasor . $yeni_ad;
                
                if (!is_dir($hedef_klasor)) mkdir($hedef_klasor, 0777, true);
                
                if (move_uploaded_file($_FILES['fotograf']['tmp_name'], $hedef_dosya)) {
                    if (!empty($u['fotograf_yolu']) && file_exists('../'.$u['fotograf_yolu']) && strpos($u['fotograf_yolu'], 'default') === false) {
                        @unlink('../'.$u['fotograf_yolu']);
                    }
                    $foto_yolu = 'assets/uploads/' . $yeni_ad;
                }
            }
        }

        // Veritabanı Güncelleme
        $sql = "UPDATE kullanicilar SET email=?, telefon=?, adres=?, kan_grubu=?, medeni_durum=?, cocuk_sayisi=?, fotograf_yolu=?";
        $params = [$email, $telefon, $adres, $kan_grubu, $medeni_durum, $cocuk_sayisi, $foto_yolu];
        
        if (!empty($yeni_sifre)) {
            if (strlen($yeni_sifre) < 6) {
                $mesaj = '<div class="alert alert-danger">Yeni şifre en az 6 karakter olmalı.</div>';
                goto form_goster;
            }
            $sql .= ", sifre_hash=?";
            $params[] = password_hash($yeni_sifre, PASSWORD_DEFAULT);
        }
        
        $sql .= " WHERE id=?";
        $params[] = $id;
        
        try {
            $pdo->prepare($sql)->execute($params);
            
            if ($foto_yolu != $u['fotograf_yolu']) {
                $_SESSION['fotograf_yolu'] = $foto_yolu;
            }

            logKaydet($pdo, $id, 'guncelleme', 'Kullanıcı profilini güncelledi.', 'kullanicilar', $id);
            $mesaj = '<div class="alert alert-success"><i class="fas fa-check-circle me-2"></i> Profil başarıyla güncellendi.</div>';
            
            // Verileri tazele
            $stmt->execute([$id]);
            $u = $stmt->fetch();
        } catch (PDOException $e) {
            $mesaj = '<div class="alert alert-danger">Veritabanı Hatası: ' . $e->getMessage() . '</div>';
        }
    }
}

form_goster:
?>

<div class="container-fluid">
    <div class="row g-4">
        
        <div class="col-12 col-md-4 col-lg-3">
            <div class="card border-0 shadow-sm text-center mb-4">
                <div class="card-body p-4">
                    <div class="position-relative d-inline-block mb-3">
                        <img src="../<?php echo !empty($u['fotograf_yolu']) ? htmlspecialchars($u['fotograf_yolu']) : 'assets/img/default-user.png'; ?>" 
                             class="rounded-circle border border-4 border-light shadow-sm" 
                             style="width: 140px; height: 140px; object-fit: cover;"
                             alt="Profil Resmi">
                    </div>
                    <h5 class="fw-bold mb-1"><?php echo htmlspecialchars($u['ad'] . ' ' . $u['soyad']); ?></h5>
                    <div class="text-muted small mb-3"><?php echo strtoupper(str_replace('_', ' ', $u['rol'])); ?></div>
                    
                    <ul class="list-group list-group-flush text-start small">
                        <li class="list-group-item d-flex justify-content-between px-0">
                            <span class="text-muted">TC No:</span>
                            <span>
                                <?php echo (!empty($u['tc_no']) && strlen($u['tc_no']) >= 11) ? substr($u['tc_no'], 0, 2).'*******'.substr($u['tc_no'], -2) : '-'; ?>
                            </span>
                        </li>
                        <li class="list-group-item d-flex justify-content-between px-0">
                            <span class="text-muted fw-bold">SGK No:</span>
                            <span class="fw-bold text-dark"><?php echo !empty($u['sgk_no']) ? htmlspecialchars($u['sgk_no']) : '-'; ?></span>
                        </li>
                        <li class="list-group-item d-flex justify-content-between px-0">
                            <span class="text-muted">İşe Giriş:</span>
                            <span class="fw-bold text-primary"><?php echo tarihTurkce($u['ise_giris_tarihi']); ?></span>
                        </li>
                    </ul>
                </div>
            </div>
        </div>

        <div class="col-12 col-md-8 col-lg-9">
            <div class="card border-0 shadow-sm">
                <div class="card-header bg-white py-3 border-bottom">
                    <h5 class="mb-0 text-primary"><i class="fas fa-user-edit me-2"></i> Bilgilerimi Güncelle</h5>
                </div>
                <div class="card-body p-4">
                    
                    <?php echo $mesaj; ?>
                    
                    <div class="alert alert-warning border-0 shadow-sm mb-4">
                        <div class="d-flex">
                            <div class="me-3">
                                <i class="fas fa-info-circle fa-2x"></i>
                            </div>
                            <div class="small">
                                <strong>Bilgilendirme:</strong><br>
                                Bilgilerinizde hata var ve değişiklik yapamıyorsanız, lütfen <strong>İnsan Kaynakları</strong>, <strong>Muhasebe</strong> ya da <strong>Yönetim</strong> ile irtibat kurunuz.
                            </div>
                        </div>
                    </div>

                    <form method="POST" enctype="multipart/form-data">
                        <input type="hidden" name="csrf_token" value="<?php echo csrfTokenOlustur(); ?>">

                        <h6 class="text-muted text-uppercase small fw-bold mb-3 border-bottom pb-2">Resmi & Kimlik Bilgileri (Değiştirilemez)</h6>
                        <div class="row g-3 mb-4">
                            <div class="col-12 col-md-6">
                                <label class="form-label small text-muted">TC Kimlik No</label>
                                <input type="text" class="form-control bg-light" value="<?php echo (!empty($u['tc_no']) && strlen($u['tc_no']) >= 11) ? substr($u['tc_no'],0,2).'*******'.substr($u['tc_no'],-2) : ''; ?>" disabled>
                            </div>
                            <div class="col-12 col-md-6">
                                <label class="form-label small text-muted">SGK Sicil No</label>
                                <input type="text" class="form-control bg-light fw-bold" value="<?php echo !empty($u['sgk_no']) ? htmlspecialchars($u['sgk_no']) : '-'; ?>" disabled>
                            </div>
                            <div class="col-12 col-md-6">
                                <label class="form-label small text-muted">İşe Giriş Tarihi</label>
                                <input type="text" class="form-control bg-light fw-bold" value="<?php echo tarihTurkce($u['ise_giris_tarihi']); ?>" disabled>
                            </div>
                            <div class="col-12 col-md-6">
                                <label class="form-label small text-muted">Doğum Tarihi</label>
                                <input type="text" class="form-control bg-light" value="<?php echo tarihTurkce($u['dogum_tarihi']); ?>" disabled>
                            </div>
                        </div>

                        <h6 class="text-muted text-uppercase small fw-bold mb-3 border-bottom pb-2">İletişim & Kişisel (Düzenlenebilir)</h6>
                        <div class="row g-3 mb-4">
                            <div class="col-12 col-md-6">
                                <label class="form-label small fw-bold">E-Posta</label>
                                <input type="email" name="email" class="form-control" value="<?php echo htmlspecialchars($u['email'] ?? ''); ?>">
                            </div>
                            <div class="col-12 col-md-6">
                                <label class="form-label small fw-bold">Telefon</label>
                                <input type="text" name="telefon" class="form-control" value="<?php echo htmlspecialchars($u['telefon'] ?? ''); ?>">
                            </div>
                            <div class="col-12 col-md-4">
                                <label class="form-label small fw-bold">Medeni Durum</label>
                                <select name="medeni_durum" class="form-select">
                                    <option value="">Seçiniz</option>
                                    <?php foreach(['Bekar','Evli','Dul','Boşanmış'] as $d) echo "<option value='$d' ".($u['medeni_durum']==$d?'selected':'').">$d</option>"; ?>
                                </select>
                            </div>
                            <div class="col-12 col-md-4">
                                <label class="form-label small fw-bold">Çocuk Sayısı</label>
                                <input type="number" name="cocuk_sayisi" class="form-control" min="0" value="<?php echo (int)$u['cocuk_sayisi']; ?>">
                            </div>
                            <div class="col-12 col-md-4">
                                <label class="form-label small fw-bold">Kan Grubu</label>
                                <select name="kan_grubu" class="form-select">
                                    <option value="">Seçiniz</option>
                                    <?php foreach(['A+','A-','B+','B-','AB+','AB-','0+','0-'] as $g) echo "<option value='$g' ".($u['kan_grubu']==$g?'selected':'').">$g</option>"; ?>
                                </select>
                            </div>
                            <div class="col-12">
                                <label class="form-label small fw-bold">Adres</label>
                                <textarea name="adres" class="form-control" rows="2"><?php echo htmlspecialchars($u['adres'] ?? ''); ?></textarea>
                            </div>
                        </div>

                        <div class="row mb-4">
                            <div class="col-12">
                                <label class="form-label small fw-bold">Profil Fotoğrafı</label>
                                <input type="file" name="fotograf" class="form-control" accept="image/*">
                                <div class="form-text">JPG, JPEG veya PNG formatında yükleyebilirsiniz.</div>
                            </div>
                        </div>

                        <div class="p-3 bg-light rounded border border-danger border-opacity-25">
                            <h6 class="text-danger small fw-bold mb-3"><i class="fas fa-lock me-1"></i> Onay & Güvenlik</h6>
                            <div class="row g-3">
                                <div class="col-12 col-md-6">
                                    <label class="form-label fw-bold text-danger small">Mevcut Şifre (Zorunlu)</label>
                                    <input type="password" name="eski_sifre" class="form-control" required placeholder="Değişiklikleri kaydetmek için girin">
                                </div>
                                <div class="col-12 col-md-6">
                                    <label class="form-label fw-bold small">Yeni Şifre (Opsiyonel)</label>
                                    <input type="password" name="yeni_sifre" class="form-control" placeholder="Değiştirmek istemiyorsanız boş bırakın">
                                </div>
                            </div>
                        </div>

                        <div class="d-grid mt-4">
                            <button type="submit" class="btn btn-primary btn-lg shadow-sm">
                                <i class="fas fa-save me-2"></i> Bilgilerimi Güncelle
                            </button>
                        </div>
                    </form>
                </div>
            </div>
        </div>
    </div>
</div>

<?php include '../includes/footer.php'; ?>