Update MegaforBB — Düzeltme Özeti / Fix Summary
2026-06-21 15:45:05
#1

Tarih / Date: 21 Haziran 2026 / June 21, 2026


Türkçe

1. Admin panel — Varsayılan dil değişmiyordu

Dosya:App/Controllers/AdminLanguageController.php

Sorun:“Set as Default” (Varsayılan yap) butonuna basıldığında başarı bildirimi geliyordu ancak dil listesinde varsayılan dil rozeti ve buton durumu değişmiyordu.

Neden:

  • setDefault() yalnızca settings tablosundaki default_locale değerini güncelliyordu.

  • Admin dil listesi, veritabanındaki languages.is_default sütununu doğrudan okuyordu.

  • Bu iki kaynak senkronize değildi.

Çözüm:

  • Dil listesinde is_default, artık settings.default_locale değerine göre hesaplanıyor.

  • setDefault() çağrıldığında languages tablosundaki is_default bayrakları da güncelleniyor.

  • Varsayılan dil silme kontrolü, ayar tablosundaki default_locale değerine göre yapılıyor.

  • Çeviri düzenleme sayfasında varsayılan dil kaynağı Language::getDefault() yerine settings.default_locale olarak düzeltildi.


2. Admin panel — Cron sayfasındaki alakasız WoltLab metni

Dosyalar:

  • Inc/Template/admin/default/views/cronjobs/index.html.twig

  • Inc/Lang/tr.php

  • Inc/Lang/en.php

  • App/Controllers/AdminCronjobsController.php (yorum satırı)

Sorun:Cronjobs sayfasında “Zamanlanmış görevler (WoltLab karşılaştırması)” başlığı ve docs/CRON_JOBS_REPORT.md referansı vardı. Bu içerik MegaforBB projesiyle ilgili değildi.

Çözüm:

  • WoltLab karşılaştırma metni kaldırıldı.

  • Rapor dosyası referansı kaldırıldı (docs/CRON_JOBS_REPORT.md projede zaten yoktu).

  • Başlık için yeni dil anahtarı eklendi: admin.cronjobs.tasks_title

    • TR: Zamanlanmış görevler

    • EN: Scheduled tasks


3. Admin panel — Manuel cron çalıştırma hatası

Dosya:App/Controllers/AdminCronjobsController.php

Sorun:“Tüm cronu çalıştır” butonuna basıldığında şu hata görülüyordu:

Request failed (timeout or connection error). Run cron from command line: php public/cron.php

Hosting ortamında ise php-fpm8.4 kullanım yardım metni dönüyordu.

Neden:

  • Eski kod cron’u HTTP ile kendi kendine çağırıyordu (file_get_contents).

  • Yerel ortamda (Laragon) veya paylaşımlı hostingde bu yöntem sık sık başarısız oluyordu:

    • app.url yanlış domain’e işaret edebiliyordu

    • allow_url_fopen kapalı olabiliyordu

    • Sunucunun kendine HTTP isteği atması timeout’a yol açabiliyordu

  • Linux hostinglerde PHP_BINARY çoğu zaman php-fpm8.4 olur; bu binary cron script’ini çalıştırmaz, FPM yardım metnini basar.

Not: Bu sorun, hostingte cron job zamanlanmamış olmasından kaynaklanmaz. Panel butonu crontab’dan bağımsız çalışmalıdır.

Çözüm:

  • Cron önce CLI ile çalıştırılıyor: php public/cron.php token=...

  • CLI mümkün değilse HTTP fallback devreye giriyor.

  • HTTP fallback URL’si artık mevcut isteğin host’unu kullanıyor (app.url yerine).

  • php-fpm binary’si tespit edilip atlanıyor; yerine /usr/bin/php8.4, /usr/bin/php, cPanel yolları vb. aranıyor.

  • Yanlışlıkla FPM help çıktısı gelirse HTTP fallback’e geçiliyor.

Hosting cron önerisi (ayrı konu):Otomatik çalışması için hosting panelinden crontab eklenmelidir:

*/5 * * * * /usr/bin/php8.4 /path/to/public/cron.php token=CRON_TOKENINIZ

Değiştirilen dosyalar (özet)

Dosya

Değişiklik

App/Controllers/AdminLanguageController.php

Varsayılan dil senkronizasyonu

App/Controllers/AdminCronjobsController.php

CLI cron çalıştırma, php-fpm düzeltmesi

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

WoltLab metni temizlendi

Inc/Lang/tr.php

admin.cronjobs.tasks_title eklendi

Inc/Lang/en.php

admin.cronjobs.tasks_title eklendi


English

1. Admin panel — Default language did not change

File:App/Controllers/AdminLanguageController.php

Issue:Clicking “Set as Default” showed a success notification, but the default badge and button state in the language list did not update.

Cause:

  • setDefault() only updated default_locale in the settings table.

  • The admin language list read languages.is_default directly from the database.

  • These two sources were out of sync.

Fix:

  • is_default in the list is now derived from settings.default_locale.

  • setDefault() also updates is_default flags in the languages table.

  • Default-language delete protection now uses settings.default_locale.

  • The translation edit page now uses settings.default_locale instead of Language::getDefault().


2. Admin panel — Irrelevant WoltLab text on cron page

Files:

  • Inc/Template/admin/default/views/cronjobs/index.html.twig

  • Inc/Lang/tr.php

  • Inc/Lang/en.php

  • App/Controllers/AdminCronjobsController.php (comment only)

Issue:The Cronjobs page showed “Scheduled tasks (WoltLab comparison)” and a reference to docs/CRON_JOBS_REPORT.md. This content was unrelated to MegaforBB.

Fix:

  • Removed WoltLab comparison text.

  • Removed report file reference (docs/CRON_JOBS_REPORT.md did not exist in the project).

  • Added new language key: admin.cronjobs.tasks_title

    • TR: Zamanlanmış görevler

    • EN: Scheduled tasks


3. Admin panel — Manual cron run failure

File:App/Controllers/AdminCronjobsController.php

Issue:Clicking “Run full cron” showed:

Request failed (timeout or connection error). Run cron from command line: php public/cron.php

On shared hosting, the output was the php-fpm8.4 usage/help text instead.

Cause:

  • The old code triggered cron via HTTP self-request (file_get_contents).

  • This often fails on local (Laragon) or shared hosting environments:

    • app.url may point to the wrong domain

    • allow_url_fopen may be disabled

    • Self HTTP requests can time out

  • On Linux hosting, PHP_BINARY is often php-fpm8.4, which does not run PHP scripts — it prints FPM help instead.

Note: This is not caused by missing crontab scheduling. The admin button should work independently of server cron.

Fix:

  • Cron runs via CLI first: php public/cron.php token=...

  • Falls back to HTTP if CLI is unavailable.

  • HTTP fallback URL now uses the current request host (not app.url).

  • Detects and skips php-fpm binary; searches for CLI paths such as /usr/bin/php8.4, /usr/bin/php, cPanel paths, etc.

  • If FPM help output is detected, falls back to HTTP.

Recommended hosting cron (separate topic):For automatic execution, add a crontab entry in your hosting panel:

*/5 * * * * /usr/bin/php8.4 /path/to/public/cron.php token=YOUR_CRON_TOKEN

Changed files (summary)

File

Change

App/Controllers/AdminLanguageController.php

Default language sync

App/Controllers/AdminCronjobsController.php

CLI cron execution, php-fpm fix

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

Removed WoltLab text

Inc/Lang/tr.php

Added admin.cronjobs.tasks_title

Inc/Lang/en.php

Added admin.cronjobs.tasks_title


Test checklist / Test listesi

#

TR

EN

1

Admin → Diller → farklı dil “Varsayılan yap” → rozet güncellenmeli

Admin → Languages → Set as Default → badge should update

2

Admin → Cronjobs → WoltLab metni görünmemeli

Admin → Cronjobs → no WoltLab text

3

Admin → Cronjobs → “Tüm cronu çalıştır” → CRON BASARIYLA TAMAMLANDI çıktısı

Admin → Cronjobs → Run full cron → success output

4

Hosting crontab ayrıca yapılandırılmalı (otomatik çalışma için)

Configure hosting crontab separately (for automatic runs)

Yazdığımız şeyler bizi temsil eder, Efendilik iyidir.
Please Login or Register.
Currently 1 people reading this topic. (1 guest(s))