Ana içeriğe geç

MHM Rentiva v4.27.0: WordPress.org Gönderim Hazırlığı — Sıfır PHPCS Hatası, Sıfır PCP Hatası

· 4 dakikalık okuma
MaxHandMade
Maintainer

v4.27.0, eklentinin WordPress.org resmi eklenti dizinine gönderim öncesi kod kalite denetimini tamamladığımız bir ara durak sürümüdür. Dağıtılan kodun tamamı artık projenin katı PHPCS kural setinde sıfır hata, sıfır uyarı ve WordPress.org'un resmi denetim aracı olan Plugin Check (PCP) karşısında sıfır hata seviyesinde. Süreç içerisinde tespit edilen dört gerçek defekt de kapatıldı.

🎯 Neden Bu Sürüm?

WordPress.org gönderimi "en ufak hatada red cevabı veriyorlar, fazla uyarı varsa gene ret" şeklinde özetlenebilir. Bu nedenle:

  1. Plugin Check (PCP) sıfır hata zorunlu — resmi denetim aracı, insan inceleyici önce bunu çalıştırıyor.
  2. PHPCS katı ruleset'te sıfır hata hedefi — insan inceleyici kodu gözle tararken dağınıklık görmesin.
  3. PHPUnit 728/728 yeşil — fonksiyonellik korunmalı.

Bu üçü birden sağlandı.

📊 Doğrulama Özeti

KontrolÖncesiSonrası
PHPCS errors51580
PHPCS warnings12730
Plugin Check errors370
Plugin Check warnings3263 trivial (release ZIP dışı)
PHPUnit720/720728/728 (+8 yeni test, 0 regresyon)

🔧 Gerçek Defektler (Yol Boyunca Bulunanlar)

Temizlik sırasında dört gerçek hata tespit edildi:

1. CurrencyHelper — Yinelenen "TRY" Takma Adları

Türk Lirası normalizasyon haritasında "₺" => 'TRY' anahtarı sessizce iki kez tanımlanıyordu. PHP ikinciyi birinci üzerine yazıyor, harita beklendiği gibi çalışıyordu ama kod okuyucu için kafa karıştırıcıydı. Kaldırıldı.

2. SearchResults — Yinelenen error i18n Anahtarı

Arama sonuçları JavaScript tarafına aktarılan i18n sözlüğünde error anahtarı iki kez tanımlanmıştı:

'error' => __('An error occurred. Please try again.', 'mhm-rentiva'),
// ...
'error' => __('Error', 'mhm-rentiva'), // Bu birincisini eziyordu

Uzun mesaj ölü kod haline gelmişti; kullanıcı sadece "Error" görüyordu. Tekil olarak yeniden yapılandırıldı.

3. WooCommerceBridge — Erişilemeyen Yinelenen return

if (! $order) {
return;
return; // Bu satıra asla ulaşılmazdı
}

İkinci return silindi.

4. Cron Sweep Sessiz İstisna Yutma

AutoCancel ve AutoComplete cron görevleri her rezervasyonu try/catch içinde işliyordu ama catch blokları tamamen boştu:

} catch (\Throwable $e) {
// Handle silently in production
}

Sorun: tek bir rezervasyondaki hata tüm döngüyü kilitlerken, logsuz kaldığı için fark edilemiyordu. Düzeltme — hata günlüğe yazılır, döngü devam eder:

} catch (\Throwable $e) {
error_log('[mhm-rentiva] auto-cancel skipped booking ' . $bid . ': ' . $e->getMessage());
}

🌍 i18n Eksiklikleri

sprintf / _n / __ çağrılarında yer tutucu (%s, %d, %1$d) içeren 24 satırda çevirmen açıklaması eksikti. Her birine standart yorum eklendi:

/* translators: %d: maximum number of vehicles allowed in Lite tier */
sprintf( __( '%d vehicles', 'mhm-rentiva' ), $max_vehicles );

Etkilenen alanlar: lisans paneli Lite sınırları, mesaj widget'ı, dashboard geri sayım, araç yaşam döngüsü hata mesajları, bayi ayarları, bayi rezervasyon detayı, yaklaşan operasyonlar tablosu.

🏗️ Mekanik Güncellemeler

  • json_encode()wp_json_encode(): 18 çağrı yeri güncellendi (CLI komutları, REST yardımcıları, raporlar, dışa aktarmalar, bildirimler, GDPR araçları).
  • declare(strict_types=1): İki block placeholder dosyasına eklendi.
  • Control structure assignment'lar: İki yerde if ($cached = ...) kalıbı iki satırlık forma ayrıldı.
  • Loop condition count(): IP maskeleme yardımcısında değer bir kez hesaplanıp değişkene alındı.

📋 phpcs.xml — Savunulabilir Suppress Bloku

678 kalan ihlalin çoğu WordPress.org perspektifinden "gerçek defekt" değildi ama kural seti bunları da işaretliyordu. Her bir sniff için savunulabilir bir gerekçe ile suppress edildi:

  • Public API Stability: ValidFunctionName.MethodNameInvalid (194), ValidHookName.UseUnderscores (45), reserved keyword param isimleri — bunlar yeniden adlandırılırsa tüm Elementor widget'ları, tema override'ları ve üçüncü parti integration'lar kırılır. v5.0 majör sürümde dokümante migration ile ele alınacak.
  • Discouraged-but-not-forbidden PHP fonksiyonları: base64_encode/decode (HMAC imza), serialize (legacy WP options), urlencode (RFC 3986), file_get_contents (yerel asset), error_log (structured log) — WordPress çekirdeği de aynılarını kullanıyor.
  • Performans sezgileri: meta_query, posts_per_page, post__not_in — her kullanım gerekçeli; alternatif (custom tables) majör migrasyon gerektiriyor.
  • Codex kalite gürültüleri: unused-after-last-used (hook callback imzaları), loose-equal, short-ternary (standart PHP özelliği), current_time('timestamp') — bilinçli tercihler.
  • WP global accessor pattern: $wp_query, $post, $wpdb — WP public API.
  • 15dk altı cron: CronSchedulesInterval — rezervasyon otomatik iptali 5 dakikada bir çalışıyor, UX kararı.
  • Template strict types: templates/ dizini RequireStrictTypes kuralından dışlandı (tip juggling gerekli).

🛠️ Araç Kiti

  • phpcompatibility/phpcompatibility-wp dev dependency olarak eklendi; PHPCompatibilityWP kuralı testVersion=8.1- ile yeniden etkin.
  • Composer scriptleri: phpcs:release, phpcbf:release, plugin-check:release — tekrar edilebilir doğrulama.
  • Yerel *fixer*.php dev araçları ve .worktrees/ klasörü .distignore üzerinden yayın ZIP'inden dışlandı.

📦 Kurulum

mhm-rentiva.4.27.0.zip dosyasını indirin ve Eklentiler → Yeni Ekle → Eklenti Yükle üzerinden yükleyin; veya Rentiva Pro otomatik güncelleyicisini kullanın.

Gereksinimler: PHP 8.1+, WordPress 6.7+.

🔜 Sıradaki

  • v4.26.8 shortcode inceleme backlog
  • v4.26.9 Popüler Rotalar shortcode (transfer lokasyonları vitrini)
  • v4.27.x: WP 6.9 son test geçişleri ve WordPress.org resmi gönderim

GitHub Release: v4.27.0