|
| 1 | +<p align="center"> |
| 2 | + <img src="varliklar/belediye-logo.svg" width="80" alt="Silivri Belediyesi"> |
| 3 | +</p> |
| 4 | + |
| 5 | +<h1 align="center">SECAP Portalı</h1> |
| 6 | + |
| 7 | +<p align="center"> |
| 8 | + <strong>Silivri Belediyesi — Sürdürülebilir Enerji ve İklim Eylem Planı Takip Sistemi</strong> |
| 9 | +</p> |
| 10 | + |
| 11 | +<p align="center"> |
| 12 | + <img src="https://img.shields.io/badge/PHP-7.4+-8892BF?style=flat-square&logo=php&logoColor=white" alt="PHP 7.4+"> |
| 13 | + <img src="https://img.shields.io/badge/MySQL-5.7+-4479A1?style=flat-square&logo=mysql&logoColor=white" alt="MySQL 5.7+"> |
| 14 | + <img src="https://img.shields.io/badge/Bootstrap-5.3-7952B3?style=flat-square&logo=bootstrap&logoColor=white" alt="Bootstrap 5.3"> |
| 15 | + <img src="https://img.shields.io/badge/Lisans-Kurum%20İçi-red?style=flat-square" alt="Lisans"> |
| 16 | +</p> |
| 17 | + |
| 18 | +--- |
| 19 | + |
| 20 | +## Hakkında |
| 21 | + |
| 22 | +SECAP Portalı, Silivri Belediyesi'nin **Covenant of Mayors** (Belediye Başkanları Sözleşmesi) kapsamında hazırladığı Sürdürülebilir Enerji ve İklim Eylem Planı'nın (SECAP) takibini sağlayan kurum içi web uygulamasıdır. |
| 23 | + |
| 24 | +Sistem; SECAP eylemlerinin tanımlanması, müdürlüklere atanması, ilerleme verilerinin toplanması, KPI takibi, kanıt dosyası yönetimi ve Excel/PDF raporlama süreçlerini tek bir merkezden yönetir. |
| 25 | + |
| 26 | +### Temel Özellikler |
| 27 | + |
| 28 | +| Modül | Açıklama | |
| 29 | +|-------|----------| |
| 30 | +| **Eylem Yönetimi** | SECAP eylemlerini oluşturma, düzenleme, müdürlüklere atama ve durum takibi | |
| 31 | +| **Veri Toplama** | Müdürlüklerden periyodik veri girişi toplama ve onay mekanizması | |
| 32 | +| **KPI İzleme** | Her eylem için özel KPI tanımlama ve ilerleme ölçümü | |
| 33 | +| **Faaliyet Kayıtları** | Eylemler altında faaliyet oluşturma ve kanıt dosyası ekleme | |
| 34 | +| **Veri Onay Sistemi** | Admin tarafından gelen verilerin onay/red süreç yönetimi | |
| 35 | +| **Veri İzleme** | Grafik tabanlı veri izleme ve trend analizi (Chart.js) | |
| 36 | +| **Raporlama** | Excel ve PDF formatında detaylı rapor dışa aktarımı | |
| 37 | +| **Bildirim Sistemi** | Kullanıcılara otomatik ve manuel bildirim gönderimi | |
| 38 | +| **Denetim Günlüğü** | Tüm sistem işlemlerinin kayıt altına alınması | |
| 39 | +| **Yedekleme** | Veritabanı yedekleme ve geri yükleme | |
| 40 | +| **Çöp Kutusu** | Soft-delete ile silinen kayıtları geri yükleme | |
| 41 | +| **Oturum Yönetimi** | Aktif oturumları izleme ve uzaktan sonlandırma | |
| 42 | + |
| 43 | +--- |
| 44 | + |
| 45 | +## Mimari |
| 46 | + |
| 47 | +``` |
| 48 | +secap-portal/ |
| 49 | +│ |
| 50 | +├── index.php # Giriş noktası → kontrol merkezine yönlendirir |
| 51 | +├── giris.php # Oturum açma ekranı |
| 52 | +├── kontrol-merkezi.php # Ana panel (dashboard) |
| 53 | +│ |
| 54 | +├── uygulama/ # Çekirdek katman (web erişimine kapalı) |
| 55 | +│ ├── baslat.php # Bootstrap — tüm bağımlılıkları yükler |
| 56 | +│ ├── php7-uyumluluk.php # PHP 7.4 polyfill (str_starts_with vb.) |
| 57 | +│ ├── ayarlar/ # Yapılandırma sınıfları |
| 58 | +│ │ ├── kimlik-dogrulama.php # Auth sınıfı, oturum, brute-force koruması |
| 59 | +│ │ ├── uygulama-ayarlari.php # AppConfig — host/proxy yapılandırması |
| 60 | +│ │ └── veritabani.php # Database — PDO singleton bağlantısı |
| 61 | +│ ├── parcalar/ # Tekrar kullanılabilir UI bileşenleri |
| 62 | +│ │ ├── cop-kutusu-modal.php # Geri yükleme onay modalı |
| 63 | +│ │ └── yardim-merkezi.php # Kapsamlı kullanım kılavuzu (data-driven) |
| 64 | +│ ├── yardimcilar/ # Servis katmanı |
| 65 | +│ │ ├── bildirim-servisi.php # NotificationService — bildirim motoru |
| 66 | +│ │ ├── cop-kutusu-servisi.php # TrashService — soft-delete yönetimi |
| 67 | +│ │ ├── csrf.php # CSRF token üretimi ve doğrulaması |
| 68 | +│ │ ├── denetim-kaydi.php # AuditLog — tüm işlem kayıtları |
| 69 | +│ │ ├── dogrulayici.php # Validator — form veri doğrulama |
| 70 | +│ │ ├── excel-aktarim.php # Excel export (XML Spreadsheet 2003) |
| 71 | +│ │ ├── istek-korumasi.php # RequestGuard — trusted host kontrolü |
| 72 | +│ │ ├── istemci-ip.php # ClientIp — proxy arkası IP tespiti |
| 73 | +│ │ ├── mesaj.php # Flash — tek seferlik bildirim mesajları |
| 74 | +│ │ ├── pdf-rapor.php # PDF rapor oluşturma motoru |
| 75 | +│ │ └── v2-yardimcilari.php # Genel yardımcı fonksiyonlar |
| 76 | +│ └── yerlesim/ # Ana şablon |
| 77 | +│ ├── ust.php # Header, sidebar navigasyon, bildirim zili |
| 78 | +│ └── alt.php # Footer, sidebar JS, bildirim polling |
| 79 | +│ |
| 80 | +├── yonetim/ # Admin paneli (16 sayfa) |
| 81 | +│ ├── eylemler.php # SECAP eylem listesi ve filtreleme |
| 82 | +│ ├── eylem-formu.php # Eylem oluşturma/düzenleme formu |
| 83 | +│ ├── faaliyet-formu.php # Faaliyet oluşturma formu |
| 84 | +│ ├── kpi-formu.php # KPI tanımlama ve düzenleme |
| 85 | +│ ├── veri-onay.php # Gelen verileri onaylama/reddetme |
| 86 | +│ ├── veri-izleme.php # Grafik tabanlı veri izleme |
| 87 | +│ ├── disa-aktar.php # Excel/PDF rapor dışa aktarım |
| 88 | +│ ├── kullanicilar.php # Kullanıcı listesi ve yönetimi |
| 89 | +│ ├── kullanici-formu.php # Kullanıcı oluşturma/düzenleme |
| 90 | +│ ├── operasyon.php # Operasyon merkezi (toplu işlemler) |
| 91 | +│ ├── denetim-gunlugu.php # İşlem denetim geçmişi |
| 92 | +│ ├── yedekler.php # Veritabanı yedek yönetimi |
| 93 | +│ ├── oturumlar.php # Aktif oturum izleme |
| 94 | +│ ├── cop-kutusu.php # Silinen kayıtları geri yükleme |
| 95 | +│ └── yardim.php # Kullanım kılavuzu |
| 96 | +│ |
| 97 | +├── mudurluk/ # Müdürlük paneli (5 sayfa) |
| 98 | +│ ├── eylemlerim.php # Müdürlüğe atanmış eylemler |
| 99 | +│ ├── veri-girisi.php # Periyodik veri giriş formu |
| 100 | +│ ├── veri-gecmisim.php # Geçmiş veri girişleri |
| 101 | +│ ├── faaliyet-ekle.php # Faaliyet oluşturma |
| 102 | +│ └── yardim.php # Kullanım kılavuzu |
| 103 | +│ |
| 104 | +├── varliklar/ # Statik dosyalar (public) |
| 105 | +│ ├── stiller/arayuz.css # Ana stil dosyası (Türkçe class isimleri) |
| 106 | +│ ├── fontlar/ # Lokal fontlar (Manrope, Outfit) |
| 107 | +│ ├── kutuphaneler/ # Bootstrap 5, Bootstrap Icons, Chart.js |
| 108 | +│ └── gorseller/ # Görseller |
| 109 | +│ |
| 110 | +└── depolama/ # Dinamik dosyalar (web erişimine kapalı) |
| 111 | + ├── gecici-dosyalar/ # Geçici yükleme alanı |
| 112 | + ├── kanit-dosyalari/ # Kanıt belgeleri (yıl/ay bazlı) |
| 113 | + └── sistem-yedekleri/ # Veritabanı yedekleri |
| 114 | +``` |
| 115 | + |
| 116 | +--- |
| 117 | + |
| 118 | +## Gereksinimler |
| 119 | + |
| 120 | +| Bileşen | Minimum | Önerilen | |
| 121 | +|---------|---------|----------| |
| 122 | +| PHP | 7.4 | 8.1+ | |
| 123 | +| MySQL / MariaDB | 5.7 / 10.3 | 8.0 / 10.6+ | |
| 124 | +| Web Sunucusu | Apache 2.4 veya IIS 10 | — | |
| 125 | + |
| 126 | +**PHP Eklentileri:** `pdo_mysql`, `mbstring`, `json`, `session` |
| 127 | + |
| 128 | +> PHP 8.x ile tam uyumludur. `uygulama/php7-uyumluluk.php` dosyası PHP 7.4 ortamlar için `str_starts_with`, `str_ends_with`, `str_contains` polyfill'lerini sağlar. |
| 129 | +
|
| 130 | +--- |
| 131 | + |
| 132 | +## Kurulum |
| 133 | + |
| 134 | +### 1. Dosyaları Yükleyin |
| 135 | + |
| 136 | +```bash |
| 137 | +git clone https://github.com/dusova/silivribel-secap-portal.git |
| 138 | +``` |
| 139 | + |
| 140 | +### 2. Ortam Ayarlarını Yapılandırın |
| 141 | + |
| 142 | +```bash |
| 143 | +cp ornek-ortam-ayarlari.php ortam.php |
| 144 | +``` |
| 145 | + |
| 146 | +`ortam.php` dosyasını düzenleyin: |
| 147 | + |
| 148 | +```php |
| 149 | +return [ |
| 150 | + 'DB_HOST' => 'localhost', |
| 151 | + 'DB_PORT' => '3306', |
| 152 | + 'DB_NAME' => 'secap_portal', |
| 153 | + 'DB_USER' => 'kullanici', |
| 154 | + 'DB_PASS' => 'sifre', |
| 155 | + 'DB_CHARSET' => 'utf8mb4', |
| 156 | + |
| 157 | + 'BASE_PATH' => '', // Alt dizinde ise: '/secap' |
| 158 | + 'PRODUCTION' => true, // Canlıda true |
| 159 | + 'APP_DEBUG' => false, // Canlıda false |
| 160 | +]; |
| 161 | +``` |
| 162 | + |
| 163 | +### 3. Veritabanını Oluşturun |
| 164 | + |
| 165 | +SQL şemasını veritabanınıza import edin. |
| 166 | + |
| 167 | +### 4. Web Sunucusunu Yapılandırın |
| 168 | + |
| 169 | +**Apache:** `.htaccess` dosyası otomatik çalışır. `mod_rewrite` aktif olmalıdır. |
| 170 | + |
| 171 | +**IIS:** `web.config` dosyası otomatik çalışır. URL Rewrite modülü kurulu olmalıdır. |
| 172 | + |
| 173 | +### 5. Dizin İzinlerini Ayarlayın |
| 174 | + |
| 175 | +```bash |
| 176 | +chmod 755 depolama/ |
| 177 | +chmod 755 depolama/gecici-dosyalar/ |
| 178 | +chmod 755 depolama/kanit-dosyalari/ |
| 179 | +chmod 755 depolama/sistem-yedekleri/ |
| 180 | +``` |
| 181 | + |
| 182 | +--- |
| 183 | + |
| 184 | +## Kullanıcı Rolleri |
| 185 | + |
| 186 | +Sistem üç katmanlı bir yetkilendirme yapısına sahiptir: |
| 187 | + |
| 188 | +| Rol | Erişim | Açıklama | |
| 189 | +|-----|--------|----------| |
| 190 | +| **Süper Admin** | Tüm sistem | Kullanıcı yönetimi, yedekleme, denetim günlüğü, oturum yönetimi, operasyon merkezi | |
| 191 | +| **İklim Admin** | Eylem ve veri yönetimi | Eylem oluşturma, veri onaylama, raporlama, KPI tanımlama | |
| 192 | +| **Müdürlük** | Kendi eylemleri | Atanmış eylemlere veri girişi, faaliyet oluşturma, kendi geçmişini görme | |
| 193 | + |
| 194 | +--- |
| 195 | + |
| 196 | +## Güvenlik |
| 197 | + |
| 198 | +| Önlem | Detay | |
| 199 | +|-------|-------| |
| 200 | +| **CSRF Koruması** | Tüm POST formlarında token doğrulaması | |
| 201 | +| **Brute-Force Koruması** | Başarısız giriş denemelerinde IP/kullanıcı bazlı geçici kilitleme | |
| 202 | +| **Oturum Güvenliği** | HttpOnly cookie, session fixation koruması, tek oturum politikası | |
| 203 | +| **XSS Koruması** | Tüm çıktılarda `htmlspecialchars()` ile encoding | |
| 204 | +| **SQL Injection** | PDO prepared statements ile parametrik sorgular | |
| 205 | +| **Dizin Koruması** | `uygulama/` ve `depolama/` dizinleri web erişimine kapalı | |
| 206 | +| **Güvenlik Başlıkları** | CSP, X-Frame-Options, X-Content-Type-Options, Referrer-Policy | |
| 207 | +| **Dosya Erişim Engeli** | `.sql`, `.env`, `.log`, `.md`, `.bak` uzantıları ve hassas dosyalar engellenmiş | |
| 208 | +| **Trusted Host** | İsteğe bağlı host whitelist ile domain kısıtlaması | |
| 209 | +| **Denetim Kaydı** | Tüm CRUD işlemleri, giriş/çıkış ve yetki değişiklikleri loglanır | |
| 210 | + |
| 211 | +--- |
| 212 | + |
| 213 | +## Teknoloji Altyapısı |
| 214 | + |
| 215 | +| Katman | Teknoloji | |
| 216 | +|--------|-----------| |
| 217 | +| **Backend** | Vanilla PHP (framework'süz, sınıf tabanlı mimari) | |
| 218 | +| **Veritabanı** | MySQL / MariaDB, PDO | |
| 219 | +| **Frontend** | Bootstrap 5.3, Bootstrap Icons, Chart.js | |
| 220 | +| **Tipografi** | Manrope (UI), Outfit (başlıklar) — lokal woff2 | |
| 221 | +| **Sunucu** | Apache (.htaccess) veya IIS (web.config) desteği | |
| 222 | +| **Dış Bağımlılık** | Yok — tüm kütüphaneler lokal, offline çalışır | |
| 223 | + |
| 224 | +--- |
| 225 | + |
| 226 | +## Kod Yapısı |
| 227 | + |
| 228 | +Proje tamamen **Türkçe isimlendirme** kullanır: |
| 229 | + |
| 230 | +- **Dosya isimleri:** `kontrol-merkezi.php`, `eylem-formu.php`, `veri-onay.php` |
| 231 | +- **Dizin isimleri:** `uygulama/`, `varliklar/`, `yonetim/`, `mudurluk/`, `depolama/` |
| 232 | +- **CSS class'ları:** `uygulama-kapsayici`, `ust-cubuk`, `istatistik-karti`, `rozet-planli` |
| 233 | +- **CSS değişkenleri:** `--arkaplan-govde`, `--renk-vurgu`, `--yazi-birincil`, `--kenar-acik` |
| 234 | +- **HTML ID'leri:** `kenar-cubugu`, `ana-icerik`, `kenarDaraltBtn` |
| 235 | +- **URL yolları:** `/kontrol-merkezi`, `/yonetim/eylemler`, `/mudurluk/veri-girisi` |
| 236 | + |
| 237 | +> Bootstrap ve üçüncü parti kütüphane class isimleri (card, btn, badge, d-flex vb.) İngilizce olarak korunmuştur. |
| 238 | +
|
| 239 | +--- |
| 240 | + |
| 241 | +## Ekran Görüntüleri |
| 242 | + |
| 243 | +> Ekran görüntüleri eklenecek. |
| 244 | +
|
| 245 | +--- |
| 246 | + |
| 247 | +## Lisans |
| 248 | + |
| 249 | +Bu yazılım **T.C. Silivri Belediyesi Bilgi İşlem Müdürlüğü** tarafından kurum içi kullanım amacıyla geliştirilmiştir. Tüm hakları saklıdır. |
| 250 | + |
| 251 | +--- |
| 252 | + |
| 253 | +<p align="center"> |
| 254 | + <sub>Silivri Belediyesi Bilgi İşlem Müdürlüğü tarafından 💚 ile geliştirilmiştir.</sub> |
| 255 | +</p> |
0 commit comments