PYBS (Personel Yönetim Bilgi Sistemi) / Ramsa/modules/sistem-ayarlari.php
sistem-ayarlari.php 136 satır • 6.09 KB
<?php
// modules/sistem-ayarlari.php
session_start();
require_once '../config/db.php';
require_once '../config/functions.php';

// Yetki Kontrolü: Yalnızca Root erişebilir
yetkiKontrol(['root']);

// Hata gösterimlerini kapatıyoruz
error_reporting(0);
ini_set('display_errors', 0);

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

$mesaj = '';

// Ayarları Kaydet
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['onaylandi'])) {
    csrfKontrol($_POST['csrf_token']);
    
    foreach ($_POST as $key => $val) {
        if ($key != 'csrf_token' && $key != 'onaylandi') {
            // Varsa güncelle, yoksa ekle (site_ayarlari tablosu)
            $sql = "INSERT INTO site_ayarlari (ayar_anahtari, ayar_degeri) VALUES (?, ?) 
                    ON DUPLICATE KEY UPDATE ayar_degeri = ?";
            
            // Güvenlik: Sadece izin verilen ayarları temizleyip kaydedelim
            $temiz_val = guvenlik($val);
            $pdo->prepare($sql)->execute([$key, $temiz_val, $temiz_val]);
        }
    }
    
    // Log Kaydı
    logKaydet($pdo, $_SESSION['kullanici_id'], 'guncelleme', "Sistem ayarları güncellendi.", 'site_ayarlari', 0);
    
    $mesaj = '<div class="alert alert-success shadow-sm"><i class="fas fa-check-circle me-2"></i> Ayarlar başarıyla güncellendi.</div>';
}

// Mevcut Ayarları Çek
// Veritabanından verileri çekme (Hata yakalama kaldırıldı, çünkü loglamayla çözüldü)
$ayarlar_db = $pdo->query("SELECT ayar_anahtari, ayar_degeri FROM site_ayarlari")->fetchAll(PDO::FETCH_KEY_PAIR);
?>

<div class="container-fluid">
    <div class="row justify-content-center">
        <div class="col-md-8">
            <div class="card border-0 shadow-sm mt-4">
                <div class="card-header bg-white py-3 border-bottom">
                    <h5 class="mb-0 fw-bold text-primary"><i class="fas fa-cogs me-2"></i> Sistem Yapılandırması</h5>
                </div>
                <div class="card-body p-4">
                    <?php echo $mesaj; ?>
                    
                    <div class="alert alert-info border-start border-info border-4 small">
                        <i class="fas fa-info-circle me-2"></i> Bu ayarlar tüm sistem genelinde puantaj hesaplamalarını ve mesai kurallarını etkiler.
                    </div>

                    <form method="POST" id="ayarFormu">
                        <input type="hidden" name="csrf_token" value="<?php echo csrfTokenOlustur(); ?>">
                        
                        <div class="mb-4">
                            <label class="form-label fw-bold">Haftalık Çalışma Günü</label>
                            <select name="haftalik_calisma_gunu" class="form-select bg-light">
                                <option value="5" <?php echo ($ayarlar_db['haftalik_calisma_gunu'] ?? '5') == '5' ? 'selected' : ''; ?>>5 Gün (Pazartesi - Cuma)</option>
                                <option value="6" <?php echo ($ayarlar_db['haftalik_calisma_gunu'] ?? '5') == '6' ? 'selected' : ''; ?>>6 Gün (Pazartesi - Cumartesi)</option>
                            </select>
                            <div class="form-text">Puantaj hesaplanırken hafta tatili buna göre belirlenir.</div>
                        </div>

                        <div class="mb-4">
                            <label class="form-label fw-bold">Günlük Standart Mesai</label>
                            <div class="input-group">
                                <input type="number" name="gunluk_mesai_saati" class="form-control bg-light" step="0.5" value="<?php echo $ayarlar_db['gunluk_mesai_saati'] ?? '9'; ?>">
                                <span class="input-group-text">Saat</span>
                            </div>
                            <div class="form-text">Standart bir iş gününün kaç saat olduğu (Örn: 9 veya 7.5).</div>
                        </div>

                        <div class="d-grid">
                            <button type="button" class="btn btn-primary btn-lg shadow-sm" data-bs-toggle="modal" data-bs-target="#onayModal">
                                <i class="fas fa-save me-2"></i> Ayarları Güncelle
                            </button>
                        </div>
                    </form>
                </div>
            </div>
        </div>
    </div>
</div>

<div class="modal fade" id="onayModal" tabindex="-1" aria-labelledby="onayModalLabel" aria-hidden="true">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header bg-warning text-dark">
                <h5 class="modal-title" id="onayModalLabel"><i class="fas fa-exclamation-triangle me-2"></i> Onay Gerekiyor</h5>
                <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Kapat"></button>
            </div>
            <div class="modal-body">
                <p><strong>DİKKAT:</strong> Sistem ayarlarını değiştirmek tüm bordro ve puantaj hesaplamalarını etkileyecektir.</p>
                <p>Bu ayarları kaydetmek istediğinizden **Emin misiniz**?</p>
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">İptal Et</button>
                <button type="button" class="btn btn-warning text-dark fw-bold" onclick="onaylaVeGonder()">
                    <i class="fas fa-check me-1"></i> Evet, Eminim (Güncelle)
                </button>
            </div>
        </div>
    </div>
</div>

<script>
function onaylaVeGonder() {
    // Hidden input'u forma ekle
    const form = document.getElementById('ayarFormu');
    const input = document.createElement('input');
    input.type = 'hidden';
    input.name = 'onaylandi';
    input.value = '1';
    form.appendChild(input);
    
    // Modalı kapat (isteğe bağlı)
    const modalElement = document.getElementById('onayModal');
    const modalInstance = bootstrap.Modal.getInstance(modalElement);
    modalInstance.hide();
    
    // Formu gönder
    form.submit();
}

// Bootstrap 5 modal'ı kullanabilmek için Footer'daki Bootstrap JS'nin yüklendiğinden emin olun.
</script>

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