# 🎬 Menuboard Slider

PHP 8+ ve MySQL tabanlı, tam ekran otomatik geçişli medya slider sistemi. Kafe, restoran ve perakende mağazaların menü ve promosyon gösteriminde kullanılmak üzere tasarlanmıştır.

## 🌟 Özellikler

- **Tam Ekran Slider**: Fade efekti ile yumuşak geçişler
- **Medya Desteği**: Görsel (JPG, PNG, GIF, WebP) ve Video (MP4, WebM)
- **Admin Paneli**: Kullanıcı dostu yönetim arayüzü
- **Sürükle-Bırak Sıralama**: Slider'ların sırasını kolayca değiştirin
- **Responsive Tasarım**: Mobil, tablet, desktop ve TV ekranlarında uyumlu
- **Çoklu Ekran Desteği**: Farklı ekranlar için farklı içerik gösterin
- **Güvenlik**: SQL Injection, XSS ve CSRF koruması
- **Performans**: Lazy loading ve cache optimizasyonu
- **Otomatik Fullscreen**: TV ekranlarında otomatik tam ekran modu

## 📋 Sistem Gereksinimleri

- **PHP**: 8.0 veya üzeri
- **MySQL**: 5.7 veya üzeri (8.0 önerilir)
- **Web Sunucusu**: Apache (mod_rewrite etkinleştirilmiş) veya Nginx
- **Tarayıcı**: Modern tarayıcılar (Chrome, Firefox, Safari, Edge)

## 🚀 Kurulum

### 1. Dosyaları Sunucuya Yükleyin

```bash
# Proje dosyalarını web sunucusunun root klasörüne yükleyin
# Örneğin: /var/www/html/menuboard/
```

### 2. Veritabanını Oluşturun

```bash
# MySQL komut satırında:
mysql -u root -p < database/schema.sql

# Veya phpMyAdmin aracılığıyla:
# 1. database/schema.sql dosyasını açın
# 2. İçeriğini kopyalayıp phpMyAdmin'de çalıştırın
```

### 3. Konfigürasyonu Ayarlayın

`config/database.php` dosyasını düzenleyin:

```php
define('DB_HOST', 'localhost');      // Veritabanı sunucusu
define('DB_PORT', 3306);              // Veritabanı portu
define('DB_NAME', 'menuboard_slider'); // Veritabanı adı
define('DB_USER', 'root');             // Veritabanı kullanıcısı
define('DB_PASS', '');                 // Veritabanı şifresi
define('APP_URL', 'http://localhost'); // Uygulama URL'si
```

Alternatif olarak, ortam değişkenlerini kullanabilirsiniz:

```bash
export DB_HOST=localhost
export DB_NAME=menuboard_slider
export DB_USER=root
export DB_PASS=your_password
export APP_URL=https://yourdomain.com
```

### 4. Dosya İzinlerini Ayarlayın

```bash
# Upload klasörüne yazma izni verin
chmod 755 uploads/
chmod 755 uploads/sliders/

# Yapılandırma dosyalarını koru
chmod 644 config/database.php
chmod 644 config/security.php
```

### 5. Web Sunucusunu Yapılandırın

#### Apache

`.htaccess` dosyası zaten proje içinde bulunmaktadır. `mod_rewrite` etkinleştirildiğinden emin olun:

```bash
sudo a2enmod rewrite
sudo systemctl restart apache2
```

#### Nginx

```nginx
server {
    listen 80;
    server_name yourdomain.com;
    root /var/www/html/menuboard;
    index index.php;

    location / {
        try_files $uri $uri/ /public/index.php?$query_string;
    }

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    location ~* \.(jpg|jpeg|png|gif|webp|mp4|webm)$ {
        expires 1m;
        add_header Cache-Control "public, immutable";
    }
}
```

## 🔑 Varsayılan Giriş Bilgileri

Kurulum sonrası varsayılan admin hesabı:

- **Kullanıcı Adı**: `admin`
- **Şifre**: `admin123`

⚠️ **Güvenlik Uyarısı**: İlk giriş yaptıktan sonra şifreyi değiştirin!

## 📱 Kullanım

### Admin Paneline Erişim

```
http://yourdomain.com/admin/login.php
```

### Menuboard Sayfası

```
http://yourdomain.com/
```

Belirli ekran için:

```
http://yourdomain.com/?screen=tv1
```

### Admin Paneli Özellikleri

1. **Dashboard**: Genel istatistikler ve son eklenen slider'lar
2. **Slider Yönetimi**: Tüm slider'ları görüntüleyin, düzenleyin, silin
3. **Yeni Slider Ekle**: Görsel veya video yükleyin
4. **Sürükle-Bırak Sıralama**: Slider'ların gösterim sırasını değiştirin
5. **Aktif/Pasif Toggle**: Slider'ları açıp kapatın
6. **Çoklu Ekran Desteği**: Farklı ekranlar için içerik filtreleyin

## 🔒 Güvenlik Özellikleri

### SQL Injection Koruması
- PDO Prepared Statements kullanılır
- Tüm veritabanı sorguları parametreli

### XSS (Cross-Site Scripting) Koruması
- `escapeHtml()` fonksiyonu ile tüm çıktılar escape edilir
- Content Security Policy headers

### CSRF (Cross-Site Request Forgery) Koruması
- Token tabanlı CSRF koruması
- Token süresi kontrolü

### Dosya Upload Güvenliği
- MIME type kontrolü
- Dosya uzantısı whitelist
- Maksimum dosya boyutu kontrolü (200MB)
- Güvenli dosya adlandırması (rastgele suffix)
- Upload klasöründe PHP çalışmasını engelle (.htaccess)

### Session Güvenliği
- Session fixation koruması
- HttpOnly ve Secure cookie flags
- Session timeout

## 📊 Veritabanı Şeması

### users Tablosu
```sql
- id: Kullanıcı ID
- username: Kullanıcı adı
- email: E-posta adresi
- password_hash: Şifre (bcrypt)
- is_active: Aktif/Pasif durumu
- created_at: Oluşturma tarihi
- updated_at: Güncelleme tarihi
```

### sliders Tablosu
```sql
- id: Slider ID
- title: Başlık
- media_type: Medya tipi (image/video)
- media_url: Medya dosyasının URL'si
- duration: Görüntüleme süresi (saniye, sadece görsel için)
- sort_order: Gösterim sırası
- is_active: Aktif/Pasif durumu
- screen_key: Ekran anahtarı (çoklu ekran filtrelemesi)
- created_at: Oluşturma tarihi
- updated_at: Güncelleme tarihi
```

## 🎨 Özelleştirme

### Varsayılan Süresi Değiştirme

`admin/add-slider.php` dosyasında:

```php
<input type="number" id="duration" name="duration" value="7" min="1" max="300">
```

`value="7"` değerini istediğiniz saniye cinsinden sürüye değiştirin.

### Maksimum Upload Boyutunu Değiştirme

`config/database.php` dosyasında:

```php
define('MAX_UPLOAD_SIZE', 200 * 1024 * 1024); // 200MB
```

### Desteklenen Medya Türlerini Değiştirme

`config/database.php` dosyasında:

```php
define('ALLOWED_IMAGE_TYPES', ['image/jpeg', 'image/png', 'image/gif', 'image/webp']);
define('ALLOWED_VIDEO_TYPES', ['video/mp4', 'video/webm']);
```

## 🐛 Sorun Giderme

### "Veritabanı bağlantı hatası"

1. Veritabanı sunucusunun çalışıp çalışmadığını kontrol edin
2. Bağlantı bilgilerini (`config/database.php`) doğrulayın
3. Kullanıcı izinlerini kontrol edin

### "Dosya yüklenemedi"

1. `uploads/sliders/` klasörünün yazılabilir olduğunu kontrol edin
2. Dosya boyutunun maksimum sınırı aşmadığını kontrol edin
3. Dosya türünün desteklendiğini kontrol edin

### "Admin paneline erişilemiyor"

1. Session'ın etkinleştirildiğini kontrol edin
2. Cookie'lerin etkinleştirildiğini kontrol edin
3. Tarayıcı konsolunda hata mesajlarını kontrol edin

### "Video oynatılmıyor"

1. Video formatının desteklendiğini kontrol edin (MP4, WebM)
2. Tarayıcının video codec'lerini desteklediğini kontrol edin
3. Tarayıcı konsolunda hata mesajlarını kontrol edin

## 📈 Performans Optimizasyonu

### Görsel Optimizasyonu

Görsel dosyalarını yüklemeden önce optimize edin:

```bash
# ImageMagick kullanarak
convert input.jpg -quality 85 -resize 1920x1080 output.jpg

# Veya online araçları kullanın:
# - TinyPNG
# - Compressor.io
# - Optimizilla
```

### Video Optimizasyonu

Video dosyalarını yüklemeden önce optimize edin:

```bash
# FFmpeg kullanarak
ffmpeg -i input.mp4 -c:v libx264 -crf 23 -c:a aac -b:a 128k output.mp4
```

### Cache Ayarları

`.htaccess` dosyasında cache sürelerini ayarlayın:

```apache
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType video/mp4 "access plus 1 month"
```

## 🔄 Yedekleme

### Veritabanı Yedeklemesi

```bash
# Tüm veritabanını yedekle
mysqldump -u root -p menuboard_slider > backup.sql

# Belirli bir tabloyu yedekle
mysqldump -u root -p menuboard_slider sliders > sliders_backup.sql
```

### Dosya Yedeklemesi

```bash
# Tüm projeyi yedekle
tar -czf menuboard_backup.tar.gz /var/www/html/menuboard/

# Sadece upload klasörünü yedekle
tar -czf uploads_backup.tar.gz /var/www/html/menuboard/uploads/
```

## 📞 Destek ve İletişim

Sorularınız veya sorunlarınız için lütfen iletişime geçin.

## 📄 Lisans

Bu proje MIT Lisansı altında yayınlanmıştır.

## 🎯 Gelecek Özellikler

- [ ] Kullanıcı yönetimi (birden fazla admin)
- [ ] İstatistikler ve analitikler
- [ ] Zamanlı yayınlama (schedule)
- [ ] Tema özelleştirmesi
- [ ] API entegrasyonu
- [ ] Mobil uygulama
- [ ] Canlı yayın desteği

---

**Versiyon**: 1.0.0  
**Son Güncelleme**: 2024  
**Geliştirici**: Menuboard Team
