PYBS (Personel Yönetim Bilgi Sistemi)
<?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'; ?>
DEMO SÜRÜMÜDÜR TAM SÜRÜM İÇİN İLETİŞİM KURUN
📖 PYBS (Personel Yönetim Bilgi Sistemi) Kullanım Kılavuzu
🚀 Proje Tanımı
PYBS, personel bilgilerini, izinleri, maaş bordrolarını ve performans değerlendirmelerini merkezi ve dijital bir platformda yönetmek için tasarlanmış kapsamlı bir Personel Yönetim Bilgi Sistemi'dir. Amacımız, İnsan Kaynakları (İK) süreçlerini otomatikleştirerek verimliliği artırmak ve veri tutarlılığını sağlamaktır.
✨ Temel Özellikler
Personel Yönetimi: Çalışanların kişisel, iletişim ve görev bilgilerini kaydetme/güncelleme.
İzin Yönetimi: Çalışanların izin taleplerini oluşturma, onaylama/reddetme ve kalan izin haklarını takip etme.
Performans Değerlendirme: Yöneticilerin ve çalışanların performans hedeflerini belirlemesi ve değerlendirmeleri kaydetmesi.
Bordro Entegrasyonu: Maaş ve avans bilgilerini kaydetme ve bordro çıktılarını oluşturma (Harici sistemlerle entegrasyon potansiyeli).
Raporlama: İK yöneticileri için özet ve detaylı personel, izin ve bordro raporları oluşturma.
💻 Son Kullanıcı Kullanımı🔑 Giriş Yapma
Demo için kullanıcı adı : test.test
Demo için şifre : 123456
Demo hesabında root / yonetici vb yetki yoktur.
Tam sürüm için iletişime geçin.
Sistem "Ramsa Makine" tarafından aktif olarak kullanılmaktadır
Meta Veri (Özet)
İşyeri çalışanlarının maaş, fazla mesai ve puantaj ile bordro takip, kontrol ve raporlama sistemi