Update MegaforBB v1.1.3 — Rebuild & Migrasyon Sistemi
2026-04-22 00:02:37
#1

MegaforBB v1.1.3 — Rebuild & Migrasyon Sistemi

Yayın Tarihi: 21 Nisan 2026Modül: Admin Panel → Araçlar → Yeniden Oluşturma (Rebuild)Konum:Admin Panel → Rebuild


Genel Bakış

MegaforBB'nin Rebuild (Yeniden Oluşturma) sistemi, forum yazılımının tüm içsel sayaçlarını, önbelleklerini, arama indekslerini ve yapısal bütünlüğünü tek bir merkezi panel üzerinden yönetmenizi sağlar. XenForo ve WoltLab Suite'ten ilham alınarak tasarlanmıştır.

Bu sürümle birlikte sisteme Web Tabanlı Veritabanı Migrasyonu ve Composer Paket Yönetimi özellikleri eklenmiştir. Artık güncelleme sonrası SSH erişimine ihtiyaç duymadan, doğrudan admin panelden veritabanı yapı değişikliklerini uygulayabilir ve PHP bağımlılıklarını yönetebilirsiniz.


Rebuild Sistemi — 17 Adım

Rebuild sistemi, forumun tüm veri bütünlüğünü tek tıkla yeniden hesaplayabilen 17 aşamalı bir onarım motorudur. Her adım bağımsız çalışır ve AJAX ile sıralı olarak tetiklenir.

Adım Listesi

#

Adım

Açıklama

1

Sürüm & Dosya Doğrulama

GitHub üzerindeki version.json ile mevcut sürümü karşılaştırır. Dosya manifest'i üzerinden değiştirilmiş, eksik veya beklenmeyen dosyaları tespit eder.

2

Forum Sayaçları

Her forumun topic_count, post_count ve last_post_id değerlerini alt sorgu ile yeniden hesaplar. Soft-deleted kayıtları otomatik hariç tutar.

3

Konu Verileri

Konuların reply_count, first_post_id, last_post_id, last_post_at ve last_post_user_id alanlarını yeniden oluşturur.

4

Beğeni Sayıları

post_likes tablosundan tüm mesajların like_count değerini yeniden toplar.

5

Oy Puanları

post_votes tablosundan mesajların net_votes (yukarı − aşağı) değerini yeniden hesaplar. Soru-Cevap sistemi için kritiktir.

6

İtibar Puanları

Kullanıcıların reputation_positive ve reputation_negative değerlerini user_reputations tablosundan yeniden toplar.

7

Anket Verileri

poll_votes tablosundan her seçeneğin vote_count değerini yeniden hesaplar.

8

Sayfalar Önbelleği

Statik sayfaların (pages_list, pages_active) önbelleklerini geçersiz kılar.

9

Gravatar Getirme

Avatarı olmayan tüm kullanıcılar için e-posta adreslerinden Gravatar URL'si oluşturur ve kaydeder.

10

İzin Temizliği

Silinen rol veya kullanıcılara ait artık (orphan) group_permissions ve content_permissions kayıtlarını temizler.

11

İstatistikler

forum_stats tablosundaki total_topics, total_posts ve total_members değerlerini yeniden hesaplar.

12

Kullanıcı İstatistikleri

Tüm kullanıcı istatistik önbelleklerini temizler, bir sonraki yüklemede taze veri gösterilir.

13

Arama İndeksi

Meilisearch motoru aktifse tüm konuları 100'lü batch'ler halinde yeniden indeksler. Meilisearch yoksa adım atlanır (hata vermez).

14

Site Haritası

sitemap_xml önbelleğini temizler. Bir sonraki /sitemap.xml isteğinde taze veri üretilir.

15

Rota Önbelleği

Derlenmiş rota dosyalarını (routes_core_compiled.php) siler. Bir sonraki istekte otomatik yeniden derlenir.

16

Frontend Build

Tailwind CSS'i yeniden derler (tailwind.build.bat / .sh). Node.js/npx yoksa mevcut CSS dosyası korunur.

17

Önbellek Temizleme

Uygulama önbelleği, dosya önbelleği, Twig view cache ve OPcache'i komple temizler.

Çalışma Mekanizması

[Tümünü Çalıştır] → AJAX POST /rebuild/run (step=version_integrity)
                   → AJAX POST /rebuild/run (step=forums)
                   → AJAX POST /rebuild/run (step=topics)
                   → ... (sıralı, bir önceki bitince sonraki başlar)
                   → AJAX POST /rebuild/run (step=cache)
                   → Tamamlandı
  • Her adım bağımsız bir POST isteğidir

  • CSRF token koruması (admin_rebuild) ile güvence altındadır

  • Sonuçlar JSON formatında döner: { success, step, message, count, level }

  • Her adımın yanında ikon durumu güncellenir (⏳ → ✅ / ❌)

  • İşlem etkilenen kayıt sayısını (count) gösterir


Composer Paket Yönetimi

SSH erişimi olmadan doğrudan panel üzerinden PHP bağımlılıklarını yönetmenizi sağlar.

Özellikler

Özellik

Detay

Desteklenen İşlemler

composer install ve composer update

Güvenlik

Kullanıcı girdisi shell'e asla aktarılmaz. Sadece sabit komut parametreleri (--no-dev, --optimize-autoloader, --no-interaction) kullanılır

Composer Keşfi

Sırasıyla kontrol eder: proje kökü composer.phar → Admin ayarındaki özel yol → Laragon dizini → Sistem PATH (/usr/local/bin/composer)

PHP Binary

PHP_BINARYPHP_BINDIR/usr/bin/php → fallback php

Çalıştırma

proc_open ile bypass_shell modu (güvenli)

Zaman Aşımı

PHP: set_time_limit(300), JS: 5 dakika AbortController

Çıktı

Terminal benzeri siyah ekranda gerçek zamanlı stdout+stderr gösterimi

Güvenlik Kontrolleri

  1. CSRF Token — Her istek admin_rebuild token ile doğrulanır

  2. proc_open Kontrolüdisable_functions listesinde proc_open veya exec varsa işlem reddedilir

  3. Sabit Komut — Shell injection riski sıfır (kullanıcı girdisi parametre olarak aktarılmaz)

  4. Ortam İzolasyonuCOMPOSER_HOME proje içindeki Content/storage/cache olarak ayarlanır


Veritabanı Migrasyonu (YENİ ✨)

Bu sürümle eklenen en önemli özellik: SSH erişimi olmadan admin panelden veritabanı migrasyonlarını çalıştırma.

Ne İşe Yarar?

Forum güncellemelerinde yeni tablolar, sütunlar veya yapısal değişiklikler geldiğinde, bunların veritabanına uygulanması gerekir. Daha önce bu işlem sadece CLI (php Forecor/bin/migrate.php) ile yapılabiliyordu. Artık:

  • ✅ SSH erişimi gerekmez

  • ✅ Paylaşımlı hosting kullanıcıları doğrudan panelden çalıştırabilir

  • ✅ Hangi migrasyonların çalıştığını ve hangilerinin beklediğini görebilirsiniz

  • ✅ İşlem sonucu terminal benzeri çıktıda detaylı gösterilir

Butonlar

Buton

Açıklama

Durumu Kontrol Et

App/Database/migrations klasöründeki tüm dosyaları tarar ve hangilerinin çalıştığını, hangilerinin beklediğini listeler

Migrasyonları Çalıştır

Bekleyen tüm migrasyonları sırasıyla uygular. Onay dialogu gösterir

Teknik Mimari

Admin Panel → [Migrasyonları Çalıştır]
  ↓
POST /admin/rebuild/run-migrations
  ↓
AdminRebuildController::runMigrations()
  ↓
1. CSRF token kontrolü
2. migrations tablosu yoksa oluştur (CREATE TABLE IF NOT EXISTS)
3. App/Database/migrations/ dizinini tara
4. migrations tablosundaki kayıtlarla karşılaştır
5. Bekleyen dosyaları sırayla çalıştır
6. Her başarılı migrasyon → migrations tablosuna kaydet (batch tracking)
7. JSON sonuç dön → UI'de göster

Desteklenen Migration Formatları

Sistem iki farklı migration formatını otomatik tanır:

Format 1 — Array Closure (PDO parametreli):

return [
    'up' => function (\PDO $pdo) {
        $pdo->exec("CREATE TABLE ...");
    },
    'down' => function (\PDO $pdo) {
        $pdo->exec("DROP TABLE ...");
    },
];

Format 2 — Anonim Sınıf (Eloquent Schema Builder):

return new class () {
    public function up(): void
    {
        Capsule:😖chema()->create('tablename', function (Blueprint $table) {
            $table->increments('id');
            // ...
        });
    }
    public function down(): void
    {
        Capsule:😖chema()->dropIfExists('tablename');
    }
};

Runner her iki formatı ReflectionMethod / ReflectionFunction ile otomatik algılar ve uygun şekilde çalıştırır.

Migrations Tablosu Yapısı

CREATE TABLE migrations (
    id         INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    migration  VARCHAR(255) NOT NULL,      -- Dosya adı (uzantısız)
    batch      INT UNSIGNED NOT NULL DEFAULT 1,  -- Grup numarası
    ran_at     DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    UNIQUE KEY uq_migration (migration)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  • batch: Her çalıştırma oturumu ayrı bir batch numarası alır (rollback için)

  • migration: Dosya adı ile eşleşme (duplicate kontrolü)

  • Tablo yoksa ilk çalıştırmada otomatik oluşturulur

Güvenlik

Katman

Detay

CSRF

admin_rebuild token ile korunur

SQL Injection

Kullanıcı girdisi SQL'e dahil edilmez. Sadece App/Database/migrations/ içindeki güvenilir PHP dosyaları çalıştırılır

Hata İzolasyonu

Her migrasyon bağımsız try-catch içinde çalışır. Biri başarısız olursa diğerleri etkilenmez

Zaman Aşımı

PHP: set_time_limit(300) (5 dakika), JS: AbortController ile 5 dakika

Yetki

Admin panele erişim gerektiren rota. Sadece admin kullanıcılar erişebilir

Mevcut Migration Dosyaları (43 adet)

Sistem şu anda App/Database/migrations/ dizininde 43 migration dosyası barındırmaktadır:

Dönem

Örnek Migrasyonlar

Adet

2025-01

Arama tabloları, soft delete, etiketler, veri aktarım tabloları, duyurular

8

2026-02

Kullanıcı aktiviteleri, iletişim, soru-cevap, S3 depolama, dil sistemi, 2FA, davetiyeler, spam koruması, sansür, emojiler, özel mesajlar, SEF URL

17

2026-03

Profil yorumları, tercihleri, zamanlanmış yayın, makale kategorileri, dokümantasyon, PM iyileştirmeleri, bildirim şablonları, prefix sistemi, yanıt zinciri

14

2026-04

Son IP kaydı, RSS içe aktarım, bildirimler, Idelist sistemi

4

Kullanıcı Arayüzü

Migrasyon kartı, Rebuild sayfasında Composer kartının hemen altında yer alır:

  • "Durumu Kontrol Et" — Mavi outline buton, sol tarafta

  • "Migrasyonları Çalıştır" — Primary outline buton, sağ tarafta

  • Terminal Çıktısı — Siyah arka planlı, monospace font, scrollable alan

  • Sonuç Mesajı — Başarı (yeşil) veya hata (kırmızı) alert kutusu

  • Loading Modal — İşlem sırasında tam ekran spinner (kapatılamaz)


Değişen Dosyalar

Dosya

Değişiklik

App/Controllers/AdminRebuildController.php

runMigrations() metodu ve getMigrationFiles() helper eklendi

Inc/Template/admin/default/views/rebuild/index.html.twig

Migration HTML kartı, loading modal ve JavaScript handler eklendi

Route/admin.php

POST /rebuild/run-migrations rotası eklendi

Route/web.php

POST /rebuild/run-migrations rotası eklendi

Inc/Lang/tr.php

13 yeni Türkçe dil anahtarı eklendi

Inc/Lang/en.php

13 yeni İngilizce dil anahtarı eklendi


Çoklu Dil Desteği

Tüm arayüz metinleri Türkçe ve İngilizce olarak mevcuttur:

Anahtar

Türkçe

English

migration_title

Veritabanı Migrasyonu

Database Migration

migration_check_status

Durumu kontrol et

Check status

migration_run

Migrasyonları çalıştır

Run migrations

migration_no_pending

Bekleyen migrasyon yok. Veritabanı güncel.

No pending migrations. Database is up to date.

migration_success

:count migrasyon başarıyla uygulandı.

:count migration(s) applied successfully.

migration_run_confirm

Bekleyen veritabanı migrasyonları çalıştırılacak. Devam edilsin mi?

Pending database migrations will be executed. Continue?


Genel Güvenlik Özeti

Rebuild sisteminin tüm bileşenleri aşağıdaki güvenlik katmanlarıyla korunmaktadır:

  1. Kimlik Doğrulama — Tüm rotalar admin middleware arkasında

  2. CSRF Koruması — Her AJAX isteğinde admin_rebuild token doğrulanır

  3. Shell Injection Koruması — Kullanıcı girdisi hiçbir zaman shell komutlarına aktarılmaz

  4. SQL Injection Koruması — Migration dosyaları güvenilir kaynak olarak değerlendirilir; harici girdi SQL'e dahil edilmez

  5. Hata İzolasyonu — Her adım ve her migrasyon bağımsız try-catch bloklarında çalışır

  6. Zaman Aşımı — Hem sunucu (PHP) hem istemci (JS AbortController) tarafında 5 dakika limit

  7. Exec Kontrolüdisable_functions listesi kontrol edilir, kapalıysa bilgilendirici hata mesajı döner


Notlar

  • Güncelleme sonrası ilk iş olarak Admin → Rebuild → Migrasyonları Çalıştır butonuna tıklamanız önerilir

  • "Bekleyen migrasyon yok" mesajı aldıysanız veritabanınız zaten günceldir

  • Hata durumunda terminal çıktısında hangi migration dosyasının sorun yaşadığını görebilirsiniz

  • Migration işlemi idempotent'tir: aynı migrasyon birden fazla kez çalışmaz

  • migrations tablosu ilk kullanımda otomatik oluşturulur, manuel tablo oluşturmanız gerekmez

Yazdığımız şeyler bizi temsil eder, Efendilik iyidir.
2026-04-23 16:24:59
#2

@MegaAI Bunun forum projesine faydası nedir ?

Burada benim imzam olması gerekiyormuş öyle söylüyorlar.
2026-04-23 16:25:06
#3
Merhaba kaan, MegaforBB v1.1.3 güncellemesi ile gelen Rebuild ve Migrasyon sistemi, forum projesinin veri yönetimini büyük ölçüde kolaylaştırıyor. Bu özellikler sayesinde: 1. Forumun içsel sayaçları ve önbellekleri tek bir panelden yönetilebiliyor. 2. Veritabanı migrasyonları, SSH erişimi olmadan doğrudan admin panelden yapılabiliyor, bu da kullanıcılar için erişimi kolaylaştırıyor. 3. Güvenlik ve hata yönetimi katmanları ile sistemin güvenliği artırılıyor. Sonuç olarak, bu güncellemeler forumun performansını ve yönetilebilirliğini önemli ölçüde iyileştiriyor. İlk yapılacak adım, admin panelinden migrasyonları çalıştırmak olacaktır.
2026-04-23 16:26:30
#4

peki desteklenen migrasyon formatarını anlatır mısın ? @MegaAI

Burada benim imzam olması gerekiyormuş öyle söylüyorlar.
2026-04-23 16:26:36
#5
Desteklenen migrasyon formatları iki ana türde sunulmaktadır: 1. **Array Closure (PDO parametreli)**: Bu format, bir dizi döndürerek `up` ve `down` fonksiyonları tanımlar. `up` fonksiyonu veritabanında yapılacak değişiklikleri, `down` fonksiyonu ise bu değişikliklerin geri alınmasını sağlar. Örnek kullanım: ```php return [ 'up' => function (\PDO $pdo) { $pdo->exec("CREATE TABLE ..."); }, 'down' => function (\PDO $pdo) { $pdo->exec("DROP TABLE ..."); }, ]; ``` 2. **Anonim Sınıf (Eloquent Schema Builder)**: Bu format, bir sınıf döndürerek `up` ve `down` metodlarını tanımlar. Eloquent Schema Builder kullanarak daha karmaşık veritabanı yapıları oluşturmak için uygundur. Örnek kullanım: ```php return new class () { public function up(): void { Capsule:😖chema()->create('tablename', function (Blueprint $table) { $table->increments('id'); // ... }); } public function down(): void { Capsule:😖chema()->dropIfExists('tablename'); } }; ``` Her iki format da sistem tarafından otomatik olarak algılanır ve uygun şekilde çalıştırıl...
Please Login or Register.
Currently 1 people reading this topic. (1 guest(s))