Ana içeriğe geç

MHM Rentiva v4.26.5: Bayi Paneli Kimlik Kartı ve Mesajlaşma Parite Fix'leri

· 4 dakikalık okuma
MaxHandMade
Maintainer

v4.26.5, bayi paneli üzerinde uzun bir UX cilası seansının meyvelerini taşıyor: sol menünün alt kısmına premium bir kimlik kartı (Gravatar + son giriş), mesajlaşma formunda bayi rezervasyonlarının görünmemesi sorununun çözümü, mesaj listesi kartlarının premium yeniden tasarımı ve beraberinde bir dizi sessiz hata düzeltmesi.

6.0.0 öncesinde yazıldı

Bu yazı, 6.0.0'dan önce çıkmış bir sürümün kaydıdır; 6.0.0 eklentinin içerik tiplerini, taksonomilerini, ayarlarını, meta anahtarlarını ve hook'larını yeniden adlandırdı. Aşağıdaki tanımlayıcılar o sürümlerin gerçekten kullandığı adlardır ve bilerek öyle bırakılmıştır. Güncel adlar ve dönüşüm tablosu için 6.0.7 sürüm yazısına bakın.

👤 Bayi Paneli Kimlik Kartı

Bayi panelinin sol menüsünde daha önce yalnızca kullanıcı adı + "Çıkış Yap" linki vardı. Artık:

  • Gravatar fotoğrafı (40 px, yuvarlak, beyaz çerçeve, yumuşak gölge)
  • Kullanıcının görünen adı (ellipsis ile taşma kontrolü)
  • Son başarılı giriş tarihi ve saati (ör. Son giriş: 15/04/2026 04:57)
  • Çıkış Yap butonu kartın dışına çıktı, tek başına aksiyon oldu; hover durumunda kırmızıya dönüyor.
<?php
$last_login_raw = (string) get_user_meta($user->ID, 'last_login', true);
if ($last_login_raw !== '') {
$ts = strtotime($last_login_raw);
if ($ts) {
echo date_i18n(get_option('date_format') . ' H:i', $ts);
}
}
?>

last_login user meta — okunan ama yazılmayan anahtar

İlginç bir keşif: last_login user meta'sı GDPR/Privacy ve DataRetentionManager kodumuzda zaten okunuyordu — ama hiçbir yerde yazılmıyordu. Yani veri saklama süresi hesaplarında "bu kullanıcı N gündür giriş yapmadı" kararı hep boş değer üzerinden veriliyordu.

v4.26.5 bu boşluğu doldurdu: SessionManager::set_session_timeout() artık wp_login action'ının ikinci parametresini (WP_User $user) alıyor ve current_time('mysql') ile last_login'i güncelliyor.

add_action('wp_login', array(self::class, 'set_session_timeout'), 10, 2);

public static function set_session_timeout($user_login = '', $user = null): void
{
$user_id = ($user instanceof \WP_User) ? (int) $user->ID : get_current_user_id();
if (! $user_id) return;
update_user_meta($user_id, 'mhm_rentiva_last_activity', time());
update_user_meta($user_id, 'last_login', current_time('mysql'));
}

📥 Mesajlaşma: Bayiler Artık Kendi Rezervasyonlarını Görüyor

"Yeni Mesaj" formundaki İlgili Rezervasyon dropdown'u her zaman boş geliyordu — bayi açısından. REST endpoint sadece _mhm_customer_user_id meta'sını sorguluyordu, yani "benim yaptığım rezervasyonlar". Bayinin araçlarına başkalarının yaptığı rezervasyonlar görünmüyordu.

Çözüm: endpoint iki sorgu yapıyor ve sonuçları ID bazında birleştirip tekilleştirerek, post_date DESC sıralıyor:

// Customer-side: rezervasyonu yapan kullanıcı
$customer_query = new WP_Query([
'post_type' => 'vehicle_booking',
'meta_query' => [[
'key' => '_mhm_customer_user_id',
'value' => $user_id,
]],
]);

// Vendor-side: bayinin sahibi olduğu araçlara yapılan rezervasyonlar
$vendor_vehicle_ids = get_posts([
'post_type' => 'vehicle',
'author' => $user_id,
'posts_per_page' => -1,
'fields' => 'ids',
]);
if (!empty($vendor_vehicle_ids)) {
$vendor_query = new WP_Query([
'post_type' => 'vehicle_booking',
'meta_query' => [[
'key' => '_mhm_vehicle_id',
'value' => $vendor_vehicle_ids,
'compare' => 'IN',
]],
]);
}

🎨 Premium Mesaj Listesi Kartları

Mesaj listesi kartları düz beyaz kutulardan premium tasarıma geçti:

  • Gradyan arka plan (#ffffff → #fafbff)
  • Mor pill ID rozeti (#4F46E5 arka plan, #eef2ff içi)
  • Turuncu gradient "YENİ" etiketi (#f59e0b → #f97316, box-shadow amber glow)
  • Hover durumunda kartın sol kenarında indigo aksan bar belirip, kart 2 px yukarı kalkıyor
  • Okunmamış state için amber arka plan + sol aksan bar
  • Mobil breakpoint altında padding + tipografi otomatik uyarlanıyor

🗂️ .hidden — Eksik Olduğunu Fark Etmediğimiz Kural

Mesajlar sayfasının şablonunda üç görünüm var:

  1. Mesaj listesi
  2. Konuşma (thread) görünümü
  3. Yeni mesaj formu

Şablonda bu üçü başlangıçta class="hidden" ile gizlenmeye çalışılıyordu — ama .hidden CSS kuralı hiçbir yerde tanımlanmamıştı. Sonuç: üçü de aynı anda display: block ile render oluyordu. Kullanıcı aşağı scroll edince üst üste yığılmış panel karmaşası görüyordu.

Çözüm bir CSS utility:

.mhm-messages-section .hidden,
.mhm-messages-section .thread-reply.hidden,
.mhm-messages-section .new-message-form.hidden,
.mhm-messages-section .message-thread.hidden {
display: none !important;
}

Artık üç görünüm mutually exclusive: hangisi aktifse o görünüyor, diğerleri gizli.

🔁 Konuşma Tekrar Açıldığında Birikmeyen Butonlar

Bir thread kapatılıp tekrar açıldığında "Mesajı Kapat" butonu ve "Bu konuşma kapatıldı" uyarı afişi DOM'a tekrar append ediliyordu — stale elementler silinmeden. Sonuç: aynı threadi iki kez açarsanız iki tane "Mesajı Kapat" butonu görüyordunuz.

// Yeniden render öncesi stale elementleri kaldır
$('#message-thread .close-thread-btn').remove();
$('#message-thread .thread-closed-notice').remove();

🔣 Mojibake Kutusu ve Translation Fix'leri

  • templates/account/messages.php içindeki "İletilere dön" metninin önündeki ok () UTF-8 double-encoded gelmişti (↠gibi görünüyordu) ve bir stray C1 control byte (0xC2 0x90) şablonda kaldı. Çözüm: <span aria-hidden="true">&larr;</span> HTML entity + PowerShell script ile C1 byte stripping.
  • Türkçe .po dosyasında "Booking Association" etiketi "Rezervasyon Derneği" (Booking Society) olarak çevrilmişti 😄 — düzeltildi: "İlgili Rezervasyon".

📦 Filemtime Cache Busting

Bu seansta iki kez "tarayıcı cache'i eski CSS/JS'i tutuyor" döngüsüne girdik. Bundan sonra olmaması için asset enqueue'larında filemtime versiyonlama:

$customer_messages_css_ver = file_exists($path)
? MHM_RENTIVA_VERSION . '.' . filemtime($path)
: MHM_RENTIVA_VERSION;
wp_enqueue_style('mhm-customer-messages', $url, [], $customer_messages_css_ver);

Plugin versiyonu aynı kalsa da dosya her değiştiğinde ?ver=4.26.5.1744742822 gibi unique bir query string oluşuyor — tarayıcı eski dosyayı asla servislemiyor.

✅ Testler

720 tests, 2601 assertions, 6 skipped — tam yeşil. Regresyon yok.

İndirin

  • GitHub Release v4.26.5 v4.26.5
  • ZIP asset: mhm-rentiva.4.26.5.zip (2.61 MB, 764 dosya)

Sıradaki minor versiyon (v4.27.0) bayi rapor ve itiraz sistemine ayrılmış durumda — rezervasyon, ceza ve araç raporları için birleşik bir altyapı.