PYBS (Personel Yönetim Bilgi Sistemi) / modules/personel-duzenle.php
personel-duzenle.php 278 satır • 14.63 KB
<?php
// modules/personel-duzenle.php
session_start();
require_once '../config/db.php';
require_once '../config/functions.php';

// Yetki: Root, Yönetici, Muhasebe, İnsan Kaynakları
yetkiKontrol(['root', 'yonetici', 'muhasebe', 'insan_kaynaklari']);

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

$id = (int)$_GET['id'];
$mesaj = '';

// Mevcut veriyi çek
$stmt = $pdo->prepare("SELECT * FROM kullanicilar WHERE id = ?");
$stmt->execute([$id]);
$k = $stmt->fetch();

if (!$k) die("Kullanıcı bulunamadı.");

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    csrfKontrol($_POST['csrf_token']);

    // Temel Bilgiler
    $ad = guvenlik($_POST['ad']);
    $soyad = guvenlik($_POST['soyad']);
    $email = guvenlik($_POST['email']);
    $kan_grubu = $_POST['kan_grubu'];
    $adres = guvenlik($_POST['adres']);
    
    // Yeni Maaş Alanı
    $aylik_net_maas = (float)$_POST['aylik_net_maas'];
    
    // Telefonu formatla
    $ham_tel = !empty($_POST['telefon']) ? $_POST['telefon'] : '';
    $telefon = telefonFormatla($ham_tel);
    
    // --- Gerekli Alanlar ---
    $ise_giris_tarihi = $_POST['ise_giris_tarihi'];
    
    // DÜZELTME: SQL'den kaldırılan/olmayan alanlar PHP'de de çıkarıldı.
    // bolum_id, unvan ve cinsiyet artık SQL'e dahil edilmeyecek.
    
    $rol = $_POST['rol'];
    $sgk_no = !empty($_POST['sgk_no']) ? guvenlik($_POST['sgk_no']) : NULL;
    $tc_no = guvenlik($_POST['tc_no']);
    $dogum_tarihi = $_POST['dogum_tarihi']; 
    $medeni_durum = $_POST['medeni_durum'];
    $cocuk_sayisi = (int)$_POST['cocuk_sayisi'];
    $isten_cikis_tarihi = !empty($_POST['isten_cikis_tarihi']) ? $_POST['isten_cikis_tarihi'] : NULL;
    
    // FOTOĞRAF İŞLEMLERİ (fotograf_yolu kullanıldı)
    $foto_yolu = $k['fotograf_yolu']; 
    
    // Şifre
    $yeni_sifre = !empty($_POST['yeni_sifre']) ? password_hash($_POST['yeni_sifre'], PASSWORD_DEFAULT) : NULL;

    if (isset($_FILES['fotograf']) && $_FILES['fotograf']['error'] === UPLOAD_ERR_OK) {
        $yukleme_hedefi = yukle($_FILES['fotograf'], 'uploads'); 
        if($yukleme_hedefi) {
            if (!empty($k['fotograf_yolu']) && file_exists('../'.$k['fotograf_yolu'])) {
                 @unlink('../'.$k['fotograf_yolu']);
            }
            $foto_yolu = $yukleme_hedefi;
        } else {
            $mesaj = '<div class="alert alert-danger">Fotoğraf yüklenirken bir hata oluştu.</div>';
            goto end_of_post_logic;
        }
    }

    try {
        // DÜZELTME: SQL Sorgusundan 'bolum_id', 'unvan' ve 'cinsiyet' sütunları KALDIRILDI.
        $sql = "UPDATE kullanicilar SET ad = ?, soyad = ?, email = ?, kan_grubu = ?, adres = ?, aylik_net_maas = ?, 
                ise_giris_tarihi = ?, rol = ?, sgk_no = ?, tc_no = ?, telefon = ?, 
                dogum_tarihi = ?, medeni_durum = ?, cocuk_sayisi = ?, isten_cikis_tarihi = ?"; 
        
        $params = [
            $ad, $soyad, $email, $kan_grubu, $adres, $aylik_net_maas, 
            $ise_giris_tarihi, $rol, $sgk_no, $tc_no, $telefon, 
            $dogum_tarihi, $medeni_durum, $cocuk_sayisi, $isten_cikis_tarihi
        ];
        
        // Şifre Güncellemesi
        if (!empty($yeni_sifre)) {
            $sql .= ", sifre_hash = ?"; 
            $params[] = $yeni_sifre;
        }
        
        // Fotoğraf Güncellemesi
        if ($foto_yolu !== $k['fotograf_yolu']) { 
            $sql .= ", fotograf_yolu = ?"; 
            $params[] = $foto_yolu;
        }

        $sql .= " WHERE id = ?";
        $params[] = $id;

        $stmt_up = $pdo->prepare($sql);
        $stmt_up->execute($params);

        // LOG KAYDI
        logKaydet($pdo, $_SESSION['kullanici_id'], 'guncelleme', "Personel {$k['ad']} {$k['soyad']} bilgileri güncellendi.", 'kullanicilar', $id);

        $mesaj = '<div class="alert alert-success">Personel bilgileri başarıyla güncellendi.</div>';
        
        // Güncel veriyi tekrar çek
        $stmt->execute([$id]);
        $k = $stmt->fetch();

    } catch (PDOException $e) {
        $mesaj = '<div class="alert alert-danger">Veritabanı Hatası: ' . $e->getMessage() . '</div>';
    }

    end_of_post_logic:
}
?>

<div class="container-fluid">
    <div class="row justify-content-center">
        <div class="col-md-10">
            <div class="card-box p-4">
                <h4 class="mb-3 border-bottom pb-2"><i class="fas fa-user-edit text-primary me-2"></i> Personel Düzenle: <?php echo htmlspecialchars($k['ad'].' '.$k['soyad']); ?></h4>
                
                <?php echo $mesaj; ?>

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

                    <h5 class="mt-4 mb-3 text-primary"><i class="fas fa-lock me-2"></i> Giriş Bilgileri</h5>
                    <div class="row mb-3">
                        <div class="col-md-4">
                            <label class="form-label small">Kullanıcı Adı (Giriş İçin) <span class="text-danger">*</span></label>
                            <input type="text" class="form-control" value="<?php echo htmlspecialchars($k['kullanici_adi']); ?>" disabled title="Kullanıcı adı değiştirilemez.">
                        </div>
                        <div class="col-md-4">
                            <label class="form-label small">Şifre (Değiştirmek için) <span class="text-danger">*</span></label>
                            <input type="text" name="yeni_sifre" class="form-control" placeholder="Yeni şifreyi giriniz.">
                            <small class="text-muted">Boş bırakılırsa şifre değişmez.</small>
                        </div>
                        <div class="col-md-4">
                            <label class="form-label small">Sistem Rolü <span class="text-danger">*</span></label>
                            <select name="rol" class="form-select" required>
                                <?php
                                    $roller = ['calisan' => 'Çalışan', 'stajyer' => 'Stajyer', 'vardiya_amiri' => 'Vardiya Amiri', 'yonetici' => 'Yönetici', 'mudur' => 'Müdür', 'muhasebe' => 'Muhasebe', 'insan_kaynaklari' => 'İnsan Kaynakları', 'root' => 'Sistem Yöneticisi'];
                                    foreach($roller as $val => $text):
                                ?>
                                    <option value="<?php echo $val; ?>" <?php echo $k['rol'] == $val ? 'selected' : ''; ?>><?php echo $text; ?></option>
                                <?php endforeach; ?>
                            </select>
                        </div>
                    </div>
                    <hr>

                    <h5 class="mt-4 mb-3 text-primary"><i class="fas fa-user me-2"></i> Kişisel & Kimlik Bilgileri</h5>
                    <div class="row mb-3">
                        <div class="col-md-4">
                            <label class="form-label small">Ad <span class="text-danger">*</span></label>
                            <input type="text" name="ad" class="form-control" value="<?php echo htmlspecialchars($k['ad']); ?>" required>
                        </div>
                        <div class="col-md-4">
                            <label class="form-label small">Soyad <span class="text-danger">*</span></label>
                            <input type="text" name="soyad" class="form-control" value="<?php echo htmlspecialchars($k['soyad']); ?>" required>
                        </div>
                        <div class="col-md-4">
                            <label class="form-label small">TC Kimlik No <span class="text-danger">*</span></label>
                            <input type="text" name="tc_no" class="form-control" value="<?php echo htmlspecialchars($k['tc_no']); ?>" required maxlength="11" pattern="\d{11}" title="11 haneli TC kimlik numarası">
                        </div>
                    </div>

                    <div class="row mb-3">
                        <div class="col-md-4">
                            <label class="form-label small">SGK Sicil No</label>
                            <input type="text" name="sgk_no" class="form-control" value="<?php echo htmlspecialchars($k['sgk_no']); ?>">
                        </div>
                        <div class="col-md-4">
                            <label class="form-label small">Doğum Tarihi <span class="text-danger">*</span></label>
                            <input type="date" name="dogum_tarihi" class="form-control" value="<?php echo $k['dogum_tarihi']; ?>" required>
                        </div>
                        <div class="col-md-4">
                            <label class="form-label small">Kan Grubu</label>
                            <select name="kan_grubu" class="form-select">
                                <option value="">Seçiniz</option>
                                <?php 
                                    $kan_gruplari = ['0 Rh+', '0 Rh-', 'A Rh+', 'A Rh-', 'B Rh+', 'B Rh-', 'AB Rh+', 'AB Rh-'];
                                    foreach($kan_gruplari as $grup): 
                                ?>
                                    <option value="<?php echo $grup; ?>" <?php echo $k['kan_grubu'] == $grup ? 'selected' : ''; ?>>
                                        <?php echo $grup; ?>
                                    </option>
                                <?php endforeach; ?>
                            </select>
                        </div>
                    </div>

                    <div class="row mb-3">
                        <div class="col-md-4">
                            <label class="form-label small">Telefon</label>
                            <input type="tel" name="telefon" class="form-control" value="<?php echo htmlspecialchars($k['telefon']); ?>">
                        </div>
                        <div class="col-md-4">
                            <label class="form-label small">E-Posta Adresi</label>
                            <input type="email" name="email" class="form-control" value="<?php echo htmlspecialchars($k['email']); ?>">
                        </div>
                        <div class="col-md-4">
                            <label class="form-label small">Adres</label>
                            <input type="text" name="adres" class="form-control" value="<?php echo htmlspecialchars($k['adres']); ?>">
                        </div>
                    </div>

                    <hr>

                    <h5 class="mt-4 mb-3 text-primary"><i class="fas fa-dollar-sign me-2"></i> Finansal & Aile Bilgileri</h5>
                    <div class="row mb-3">
                        <div class="col-md-4">
                            <label class="form-label small">Aylık Net Maaş (₺) <span class="text-danger">*</span></label>
                            <input type="number" step="0.01" name="aylik_net_maas" class="form-control" value="<?php echo $k['aylik_net_maas']; ?>" required>
                        </div>
                        <div class="col-md-4">
                            <label class="form-label small">Medeni Hali</label>
                            <select name="medeni_durum" class="form-select">
                                <option value="">Seçiniz</option>
                                <option value="Bekar" <?php echo $k['medeni_durum'] == 'Bekar' ? 'selected' : ''; ?>>Bekar</option>
                                <option value="Evli" <?php echo $k['medeni_durum'] == 'Evli' ? 'selected' : ''; ?>>Evli</option>
                                <option value="Dul" <?php echo $k['medeni_durum'] == 'Dul' ? 'selected' : ''; ?>>Dul</option>
                                <option value="Boşanmış" <?php echo $k['medeni_durum'] == 'Boşanmış' ? 'selected' : ''; ?>>Boşanmış</option>
                            </select>
                        </div>
                        <div class="col-md-4">
                            <label class="form-label small">Çocuk Sayısı</label>
                            <input type="number" name="cocuk_sayisi" class="form-control" min="0" value="<?php echo (int)$k['cocuk_sayisi']; ?>">
                        </div>
                    </div>
                    
                    <h5 class="mt-4 mb-3 text-primary"><i class="fas fa-calendar-alt me-2"></i> Giriş/Çıkış Tarihleri</h5>
                    <div class="row mb-3">
                        <div class="col-md-4">
                            <label class="form-label small">İşe Giriş Tarihi <span class="text-danger">*</span></label>
                            <input type="date" name="ise_giris_tarihi" class="form-control" value="<?php echo $k['ise_giris_tarihi']; ?>" required>
                        </div>
                        <div class="col-md-4">
                            <label class="form-label fw-bold text-danger"><i class="fas fa-calendar-times me-1"></i> İşten Çıkış Tarihi</label>
                            <input type="date" name="isten_cikis_tarihi" class="form-control" value="<?php echo $k['isten_cikis_tarihi']; ?>">
                            <div class="form-text small">Personel ayrıldıysa giriniz. Boşsa çalışıyor demektir.</div>
                        </div>
                    </div>

                    <hr class="my-4">

                    <h5 class="mt-4 mb-3 text-primary"><i class="fas fa-image me-2"></i> Fotoğraf</h5>
                    <div class="row mb-3">
                        <?php if (!empty($k['fotograf_yolu'])): ?> 
                        <div class="col-md-4 mb-3">
                            <label class="form-label small">Mevcut Fotoğraf</label>
                            <div class="border p-2 rounded text-center bg-light">
                                <img src="../<?php echo $k['fotograf_yolu']; ?>" alt="Mevcut Fotoğraf" class="img-fluid rounded" style="max-height: 150px;"> 
                            </div>
                        </div>
                        <?php endif; ?>
                        <div class="col-md-8">
                            <label class="form-label small">Profil Fotoğrafı (Yeni Yükleme)</label>
                            <input type="file" name="fotograf" class="form-control">
                            <div class="form-text small">Maksimum 2MB, JPG/PNG. Değiştirmek istemiyorsanız boş bırakın.</div>
                        </div>
                    </div>
                    
                    <div class="d-grid gap-2 mt-4">
                        <button type="submit" class="btn btn-primary btn-lg"><i class="fas fa-save me-2"></i> Değişiklikleri Kaydet</button>
                        <a href="personel-yonetimi.php" class="btn btn-secondary">İptal / Geri Dön</a>
                    </div>
                </form>
            </div>
        </div>
    </div>
</div>

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