VosCMS Mağaza

Değişiklik günlüğü

v2.8.2 2026-10-12 · 7 gün önce
Güncelleme ve değişiklik geçmişi sayfaları ziyaretçinin dilinde görünür

Nelerin düzeltildiği

  • •Güncelleyici hataları: dosya ve version.json yazma hataları, desteklenmeyen yama ve değişiklik önizlemesi, depoya erişilememesi ve başarılı bağlantı.
  • •Güncelleme sayfası: sunucu yanıt hatası, «N dosya değişti · N commit», tamamlandı, uygulanıyor, iş kaydedildi, zaman aşımı ve geri alma tamamlandı.
  • •İş kaydı bildirimleri: bir güncelleme, yama veya geri alma işinin kuyruğa alındığını bildiren ileti.
  • •Yetkili çalışan (cron) artık ilerleme iletilerini ve başarı ile başarısızlık bildirimlerini doğru dilde bırakıyor.

Değişiklik geçmişi sayfası (`/changelog`)

  • •«5 months ago» gibi göreli zamanlar yalnızca Korece ve İngilizce olarak vardı; artık 13 dilde sunuluyor.

Boş liste iletisi, «YZ çevirisi» işareti, «çeviri yok — KO olarak gösteriliyor» notu ve «yalnızca en son N gösteriliyor» da çevrildi.

  • •Sayfa dili artık yalnızca oturum değeri değil, sitenin gerçekten kullandığı dil üzerinden belirleniyor (?lang=, oturum, çerez, varsayılan dil).

Önceden ilk ziyarette Korece'ye düşülüyor, bu yüzden Japonca ve İngilizce sitelere Korece etiketler karışıyordu.

  • •Uzun tanımlayıcılar ve yollar (boşluksuz metin) artık kartın dışına taşmıyor ve sağdaki yükleme düğmesinin altına girmiyor.

Bilmekte fayda var

  • •Yetkili çalışanın oturum açmış bir kullanıcısı olmadığı için dili de yoktur. İletilerini sitenin varsayılan dilinde yazar.

(Önceden çeviri sistemini başlatmıyordu; bu yüzden updater.write_failed gibi anahtarlar olduğu gibi yazdırılabiliyordu. Çalışan artık onu başlatıyor.)

  • •Sunucu günlükleri (error_log) ve geliştiriciler için hata ayıklama günlükleri operatörler tarafından okunduğundan olduğu gibi bırakıldı.
  • •Kurulu bir sitede güncellemeyi çalıştıran, zaten kurulu olan eski güncelleyicidir; bu nedenle bu iyileştirmeler ilk olarak 2.8.2'ye geçişten sonraki güncellemede görünür.
v2.8.1 2026-10-12 · 7 gün önce
Güçlendirilmiş çok dillilik (uygulama adı, arama verileri, `?lang=`) · güncellemeler bir sitenin kendi çekirdek değişikliklerini korur

Çok dillilik

  • •«Ana ekrana ekle» ve yükleme önerisindeki uygulama adı ile açıklaması artık ziyaretçinin dilinde görünür. Önceden kayıtlı değer (örneğin Japonca) olduğu gibi gösteriliyordu.

Çeviriler rzx_translations içinde pwa.front.name gibi anahtarların altına konur. manifest.php artık yalnızca resmi çıktıya devreder.

  • •Yapılandırılmış veri (JSON-LD): önce ayar değerlerinin çevirilerine bakılır. Site adının da yer aldığı ikinci ekmek kırıntısı öğesi ve tüm dillerde İngilizce görünen «Home» düzeltildi.
  • •İstatistik bileşeni: sayı ve birim (suffix) artık etiket gibi dil başına değer kabul eder. Tek bir değer eskisiyle aynı şekilde çalışır.
  • •Çevrimdışı ekran ve service worker'ın son uyarı metni artık Korece, Japonca ve İngilizce olarak sunuluyor.

Service worker önbellek sürümü v5'ten v6'ya çıktı; böylece uygulamayı zaten kurmuş cihazlar yeni ekranı alır.

  • •İleti aramasındaki «Sonuç bulunamadı» metni doğrudan Korece yazılmıştı; artık 13 dilde sunuluyor.

Arama motorları ve YZ

  • •<meta property="og:locale"> ve alternatif diller (og:locale:alternate) üretilir. Sosyal medyada paylaşıldığında sayfanın hangi dilde olduğunu bildirir.
  • •Kodla çizilen herkese açık sistem sayfaları artık sitemap.xml içinde yer alır (eksikti).
  • •llms.txt dosyasının ilk satırı (site açıklaması) ziyaretçinin dilinde görünür.
  • •Sayfa başına robots ayarı (yönetim ekranında giriş alanı vardı ama hiçbir yer onu okumuyordu) artık gerçekten uygulanır.

Düzeltilen sorunlar

  • •?lang= değeri yalnızca desteklenen diller listesiyle karşılaştırıldıktan sonra kabul edilir. Önceden desteklenmeyen bir değer çerezde bir yıl kalıyor,

daha sonra o dil açıldığında ziyaretçi kendi isteği dışında o ekrana geçebiliyordu. Dil seçici de aynı kurala uyar.

  • •Bileşen oluşturucu: ekranda giriş alanı olmayan dillerin çevirileri her kaydedişte siliniyordu.
  • •Topluluk ileti araması: adlar şifreli saklandığı için hiçbir ad sonuç vermiyordu. Artık önce şifre çözülür, sonra eşleştirilir.

Güncellemeler bir sitenin kendi çekirdek değişikliklerini korur

  • •storage/custom/update-preserve.txt dosyasına satır başına bir yol yazarsanız (# yorumdur, klasörler de olur), güncelleme bu dosyaların üzerine yazmaz.

Siteye özel bir oturum açma kuralı gibi çekirdek dosyalarına doğrudan koyduğunuz şeyleri korumak için kullanın. Mutlak yollar ve .. kabul edilmez,

dosya okunamazsa güncelleme durmaz, varsayılan koruma listesiyle devam eder.

  • •Bilmekte fayda var: güncellemeyi çalıştıran tarafın bu özelliğe zaten sahip olması gerekir. 2.8.1'e geçtikten sonraki güncellemeden itibaren geçerli olur.
v2.8.0 2026-10-12 · 7 gün önce
Klasör ekleyerek ödeme sağlayıcısı (PG) ekleyin · Square desteği

Ne değişti

Ödeme modülünde her sağlayıcı için zaten ayrı bir dosya vardı, ancak «hangi sağlayıcıların bulunduğu» kodun birkaç yerinde yazılıydı.

Yeni bir sağlayıcı eklemek için ödeme yöneticisini, ayarlar sayfasını ve webhook'u değiştirmek gerekiyordu.

  • •Klasörü (gateway.json ile uygulama dosyası) rzxlib/Modules/Payment/Gateways/ içine koyun, çekirdek onu kendiliğinden tanır.

Yönetim ayarları sayfasındaki sağlayıcı seçimi, anahtar alanları ve webhook adresi bu belirtimden üretilir.

  • •Bir site ayarlar sayfasında yine bir sağlayıcı seçer (eskisi gibi). Birden fazla sağlayıcıyı aynı anda kullanma özelliği değildir.
  • •Sağlayıcı ekleme yöntemi docs/PAYMENT_GATEWAYS.md içinde anlatılmıştır.

Square

  • •Kartlı ödeme, iade ve sorgulama, kayıtlı kartlar (yinelenen tahsilat için) ve webhook'lar (imza doğrulamalı) desteklenir.
  • •Kart giriş formu kart sahibi doğrulamasından (SCA) geçer ve başarısız olduğunda nedeni ekranda gösterir. 13 dil.
  • •Yönetim ayarları sayfasında yeni bir «Bağlantı testi» düğmesi var. Test modunda küçük bir ödeme, sorgulama ve iade çalıştırarak

anahtarlarınızın doğru olduğunu doğrular. Gerçek para hareket etmez ve canlı (live) modda çalışmaz.

  • •Square'i seçene kadar hiçbir site için bir şey değişmez.

Mevcut sağlayıcılar (PAY.JP ve Stripe) olduğu gibi kalır

  • •İki sağlayıcının uygulama dosyalarına dokunulmadı. Eski ayarlar (tek anahtar, v2, v3) eskisi gibi okunur.
  • •Belirtim dosyaları herhangi bir nedenle okunamasa bile bir güvenlik ağı PAY.JP ve Stripe'ın eski yöntemle oluşturulmasını sağlar.
  • •Canlı sitelerin gerçek ayarları ve çok sayıda sentetik ayarla eski ve yeni kodu karşılaştırdık ve aynı sağlayıcıyı, aynı modu ve aynı anahtarları seçtiklerini doğruladık

(scripts/test-payment-parity.php).

Ödeme ayarlarını site başına okuma

Tek bir veritabanında her site için ayrı bir ödeme ayarı bulunduğunda, ödeme modülü artık kendi sitesinin ayarını okur.

Önceden hangi sitenin ayarının seçileceği belirsizdi. Bir sitenin kendi ayarı yoksa eskisi gibi çalışır.

Bilmekte fayda var

  • •Ortak bir webhook adresi eklendi (/api/webhook-payment.php?gateway=…). Mevcut PAY.JP ve Stripe webhook adresleri değişmedi.
  • •Ayarlar sayfasındaki sağlayıcı listesi eski sırasını korur; belirtim yoluyla gelen sağlayıcılar sonuna eklenir.
v2.7.17 2026-09-21 · 28 gün önce
Eklenti içerikleri arama ve YZ motorlarına görünür hale geldi

Sorun neydi

Site haritası (sitemap.xml) ve YZ kılavuzu (llms.txt) yalnızca çekirdeğin bildiklerini içeriyordu.

Bir eklentinin kendi sayfalarını eklemesi için tek yol çekirdek dosyalarını doğrudan değiştirmekti ve bu değişiklik

her güncellemede kayboluyordu. Ayrıca çekirdek eklenti tablosunu tahmin ederek okuduğundan, bazı yerlerde sessizce sapmalar oluşuyordu.

  • •Emlak ilanları yalnızca ayrı bir adreste (/properties-sitemap.xml) yayımlanıyordu; hiçbir yer o adrese işaret etmiyorsa

arama motorları bulamıyordu.

  • •Pazar öğeleri, var olmayan bir sütunu arayan bir sorgu yüzünden site haritasında hiç yer almamıştı.

Hata yutuluyordu, bu yüzden kimse fark etmedi.

  • •Bazı siteler işletme adreslerini yanlış biçimde yayımlıyordu; bu da arama motorlarının açıldığında olmayan bir sayfaya çıkan adresleri dizinlemesine yol açıyordu.

Eklentiler artık kendi sayfalarını yayımlıyor

  • •Bir eklenti plugin.json dosyasına seo yazarsa çekirdek bunu okur ve site haritası ile YZ kılavuzuna katar.

Bileşenler, düzenler ve intranet modülleriyle aynı biçimde çalışır ve adresler çakışırsa çekirdek kazanır.

  • •Birden çok dil için adresleri ve dil işaretlerini çekirdek kendisi ekler. Eklentinin yalnızca adreslerini vermesi yeterlidir.
  • •Bozuk tek bir eklenti artık tüm site haritasını çökertmez. Yalnızca o eklentinin payı dışarıda kalır.
  • •Devre dışı bırakılmış eklentilerin adresleri otomatik olarak çıkarılır; devre dışı bir eklentinin sayfaları zaten açılmaz.

Çince alternatif adresler yok sayılıyordu

Site haritası dil işaretini zh_CN olarak yazıyordu, oysa standart zh-CN olduğundan Google o satırı tamamen yok sayıyordu.

Sayfaların kendisi doğru yazılmıştı, yani aynı site iki yerde farklı şeyler söylüyordu.

Basitleştirilmiş ve geleneksel Çince için alternatif adresler artık doğru tanınıyor.

Dile göre YZ kılavuzu

  • •llms.txt yalnızca varsayılan dilde tek bir kopya olarak vardı. Artık ?lang=en gibi dil sürümleri üretiyor.

Öğe adları ve açıklamalar o dilde çıkar, kılavuzun başında da hangi dil sürümü olduğu yazar.

  • •Çok dilli sitelerde YZ yanıt motorları artık bu siteyi her dil bölgesindeki kullanıcıya aktarabilir.

Çalışanlar kendi özlük kartlarını görebiliyor (intranet)

  • •Yalnızca İK görevlilerinin görebildiği özlük kartını artık çalışanın kendisi de görüntüleyebilir. Üstteki profil menüsünden girilir.
  • •Yalnızca görüntülenebilir. Düzeltme isteyip İK görevlisinin onayladığı bir akış hazırlanıyor.
  • •Değerlendirmeler çalışana görünmez. Ödül ve disiplin kayıtları için de aynısı geçerlidir. Ekli belgelerde yalnızca liste görünür.
  • •Adres çubuğunu değiştirerek başkasının kartı açılamaz; kartın kime ait olduğu yalnızca oturum bilgisiyle belirlenir.
  • •Çalışan, kendi özlük bilgilerini kimin görüntülediğini de kontrol edebilir.
v2.7.16 2026-09-21 · 28 gün önce
Forum bağlantılarının temel adresi ve eklenti düzenleri

Forum ekranlarını başka bir kabuğun içinde kullanma

Bir forum ekranındaki tüm bağlantılar tek bir değerden ($boardUrl) üretilir, ancak çekirdek bu değeri her zaman eziyordu.

Bu yüzden forumu intranet gibi bir yönetim ekranının içinde kullananlar, zaten çizilmiş sayfayı karakter karakter değiştirmek zorundaydı.

Çekirdek bir bağlantının biçimini azıcık değiştirse bile her şey sessizce sapıyordu.

  • •Çağıran taraf temel adresi önceden belirlerse o değer kullanılır. Belirlemezse her şey eskisi gibi kalır.
  • •Dişli (forum ayarları) bağlantısı da tek bir yerde belirlenir. Önceden liste, SSS, Soru-Cevap ve bağlantı teması her biri kendi bağlantısını üretiyordu.

Düzenler eklentinin içinde olabilir

  • •Düzenler önce çekirdeğin skins/layouts/ klasöründe, yoksa eklentinin plugins/{id}/skins/layouts/ klasöründe aranır.

Bileşenler ve intranet modülleriyle aynı kuraldır ve adlar çakışırsa çekirdek kazanır.

  • •Eklenti düzenleri yönetim ekranındaki düzen seçicide de görünür.
  • •Şimdiye kadar eklentiye özgü bir düzeni çekirdek klasörüne koymak gerekiyordu. Güncelleme onu silmez,

ancak çekirdek ileride aynı adlı bir düzen yayımlarsa üzerine yazılır ve eklentiyi başka bir siteye taşırken klasörü elle götürmek gerekirdi.

v2.7.15 2026-09-21 · 28 gün önce
Eklentiler intranet modüllerini bildiriyor · tarih girişinde Japon dönem adları

Eklentiler intranet modüllerini kendileri bildiriyor

İntranet ekranlarının (sol menü ve giriş yolları) listesi yalnızca çekirdeğin tek bir ayar dosyasında bulunuyordu.

Bir eklentinin kendi modülünü eklemesi için bir çekirdek dosyasını değiştirmek gerekiyordu ve güncellemede bu değişiklik kayboluyordu.

  • •Bir eklenti plugin.json dosyasına intranet_module yazarsa çekirdek bunu okuyup birleştirir. Menüler ve sistem sayfalarıyla aynı biçimde çalışır.
  • •Değer olarak doğrudan bir dizi yazılabileceği gibi "data/intranet-module.php" gibi bir dosya yolu da yazılabilir.
  • •Adlar çakışırsa çekirdek kazanır. Bir eklenti, varsayılan davranışını değiştirmek için çekirdek modülünü ele geçiremez.
  • •Çekirdekte bu listeyi okuyan beş yerin tümü yeni yönteme geçirildi. Güncelleme ayar dosyasının üzerine yazsa bile eklenti modülleri kalır.

Tarih girişinde Japon dönem adları (和暦)

  • •Japonca ekranlarda tarih alanında bir dönem (令和, 平成, 昭和, 大正, 明治) seçip yıl sayısını girdiğinizde Miladi yıl otomatik dolar.

Doğum tarihi gibi dönem adıyla hatırlanan değerleri her seferinde çevirmeye gerek kalmaz.

  • •Haftanın gününü gösteren alan olduğu gibi bırakıldı.

Forum düzeni ayarı ekrana yansımıyordu

  • •Yönetimde forum başına bir düzen seçilse bile ekranda sitenin varsayılan düzeni görünüyordu.

Kaydedildiği yer ile okunduğu yer farklıydı.

  • •Düzeltme: bir forum kaydedilirken ekranın okuduğu ayara da yazılır.

Mevcut forumlar yeniden kaydedilene kadar şimdiki görünümlerini korur (görünüm birdenbire değişmez).

v2.7.14 2026-09-20 · 29 gün önce
Forumda yazma ve arama normale döndü

Yazılan gönderiler kaydedilmiyordu

  • •Gönderi kaydı başlık sütununu atlıyordu; bu yüzden o sütunun hâlâ bulunduğu sitelerde kayıt başarısız oluyordu.

Ekranda yalnızca «Unexpected end of JSON input» görünüyordu.

  • •Düzeltme: sütun varsa o da doldurulur. Sütunu kaldırmış siteler eskisi gibi çalışır.

Forum araması

  • •Arama eski sütuna bakıyordu; bu yüzden sütunu kaldırmış sitelerde arama sözcüğü girilir girilmez tüm liste açılmıyordu.
  • •Sütunu saklayan sitelerde de bir sorun vardı. Bir gönderi düzenlendiğinde sütun güncellenmiyordu, bu yüzden arama yalnızca düzenleme öncesi metni buluyordu.
  • •Düzeltme: arama çeviri tablosunda yapılır. Artık görüntülenen dili ve çevrilmiş içeriği de bulur.

Listelerde, bileşenlerde ve Sayfam'da gönderiler görünmüyordu

  • •Uygulama alanı sekmeleri bileşeni ve forum ızgarası bileşeni her zaman boş bir liste gösteriyordu (hata içeride yutuluyordu).
  • •Sayfam'daki «Yorumlarım» bölümünde forum yorumları tamamen eksikti.
  • •Bağlantı forumu temasında başlık her zaman boştu.
  • •Düzeltme: hepsi başlığı ve metni artık çeviri tablosundan okur. Küçük resimler de metinden yeniden bulunur.

YZ çevirisi ve yeni kurulum

  • •Gönderilerin YZ çevirisinin özgün metni okurken başarısız olup tüm çeviri işlerinin başarısız olmasına yol açmasını düzelttik.
  • •Yeni kurulumda eklenen örnek gönderilerin özgün dildeki başlık ve metninin çeviri tablosuna girmemesi nedeniyle başlığın boş görünmesini düzelttik.

Diğer

  • •Forum sıralaması «öneriye göre» olarak ayarlandığında listenin açılmamasını düzelttik (var olmayan bir sütuna başvuruluyordu).
v2.7.13 2026-09-20 · 29 gün önce
Yönetim bildirim penceresi daha güvenli · Çok dilli

Başkasının metni bildirim penceresine olduğu gibi giriyordu

Yönetim ekranlarındaki ortak bildirim penceresi (sonuç kutusu) menü başlıklarını, tema adlarını ve sunucudan gelen metinleri sayfaya olduğu gibi yapıştırıyordu.

Bir ada <script> gibi bir şey yazıldığında, başka bir yönetici o ekranı açtığında çalışabiliyordu (depolanmış XSS).

  • •Düzeltildi: penceredeki tüm metinler (başlık, gövde, düğme, onay satırı) eklenmeden önce düz karakter olarak görünecek biçimde dönüştürülüyor.
  • •Veritabanı bağlantısı başarısız olduğunda çıkan uyarı da artık çeviri metnini kullanıyor ve aynı dönüşümden geçiyor.

Pencere düğmeleri her dilde Korece görünüyordu

  • •"Onayla" ve "İptal" JavaScript içinde Korece sabitlenmişti. Artık görüntülenen dilde çıkıyor.

Sunucu geçerli dilin metinlerini hazırlıyor, betik bu değerleri okuyor.

Yönetim metinleri 13 dilde

Tasarım (tema), menü ve sayfa ayarları ekranlarına Korece gömülü metinler çeviri anahtarlarıyla değiştirildi ve 13 dil dolduruldu.

  • •Temalar: yeniden adlandırma, kopyalama ve silme sonuçları; "tema dosyaları ve ayarları kalıcı olarak silinir" onayı; görsel yükleme sonucu
  • •Menüler: sistem sayfasının yalnızca menüden kaldırıldığı bilgisi; "bağlı sayfa (forum) da silinir" onayı
  • •Sayfa ayarları: dosya türü, kaydetme hatası ve yinelenen URL bildirimleri
v2.7.12 2026-09-19 · 1 ay önce
Gizli gönderi koruması · Daha hızlı ilk görüntüleme

Gizli gönderiler listeden sızıyordu

Gizli olarak işaretlenen bir gönderinin başlığı, kapak görseli ve özeti listede görünmeye devam ediyordu. Yalnızca gövde gizliydi.

  • •Düzeltildi: listelerde de başlığı ve önizlemeyi yalnızca yazar, yönetici ya da parolayı giren kişi görür.
  • •Ek dosya adresinden içeriğe göz atma yolu da kapatıldı; ekler artık aynı denetimden geçiyor.
  • •Okuma ekranındaki önceki/sonraki gönderi başlıkları da gizleniyor.
  • •Liste çeken bileşenler (forum kartları, ızgara, sekmeler) gizli gönderileri sorgudan itibaren dışarıda bırakıyor.

İlk ekran geç çiziliyordu

Telefonda ilk harflerin görünmesi uzun sürüyordu. Nedeni yazı tipleriydi.

  • •Yazı tipi CSS'i (Google Fonts 152 KB + Pretendard 29 KB) çizimi durduruyordu.

Artık sayfa önce sistem yazı tipleriyle çiziliyor, web yazı tipleri geldikçe yerini alıyor.

  • •Pretendard yalnızca Korece ekranlarda yükleniyor. Japonca ekranlarda önce Japonca yazı tipi geldiği için yalnızca parçalar indirilip atılıyordu.
  • •İki küçük stil dosyası (yazı boyutu, forum gövdesi) ayrı dosya yerine doğrudan sayfaya gömüldü.
  • •İlk ziyarette ekran önbelleği (service worker) yüzünden belgenin iki kez okunması ortadan kaldırıldı.
  • •Yatay kaydırmalı menünün genişlik hesabı sayfa yüklendikten sonraya ertelendi (önce 0,5 sn donduruyordu).

Arama robotları ve yapay zekânın dil sayfalarını izleyebilmesi için

  • •Dil bağlantıları artık gerçek adreslere (?lang=…) gidiyor. Önceden JavaScript bağlantılarıydı ve tarayıcı robotları izleyemiyordu.

Yönetim ekranları

  • •Sayfa listesinde aynı sayfa dil sayısı kadar satırda görünüyordu; bu satırlar artık tek satırda birleşiyor.
  • •Yalnızca menü başlığını değiştirmek diğer dillerdeki çevirileri siliyordu. Çeviriler artık sadece bağlı sayfa değiştiğinde temizleniyor.
  • •Blogda geçmiş bir saate zamanlanmış yayın olduğu gibi kaydediliyordu; artık uyarı gösteriliyor ve durum değişmiyor (13 dil).

Bildirimler ve metinler

  • •Topluluk mesaj bildirimlerinin konusu Korece sabitlenmişti. Artık alıcının dilinde gönderiliyor.
  • •Çerez bildirim şeridindeki bağlantı metni çok koyuydu; açıldı.

İç düzenleme

  • •Yanlışlıkla iki kopya hâlinde duran yönetim görünüm klasörleri (admin/site/site, admin/components/components) silindi.

Gerçekte kullanılan özgün klasörlerdir. Dağıtım derlemesi de bu klasörleri dışarıda bırakıyor.

v2.7.11 2026-09-13 · 1 ay önce
Özel panolar site haritasından çıkarıldı · Daha iyi e-posta teslimi

Özel panolar site haritasında yer alıyordu

Yalnızca yöneticilerin görebildiği panoların (başvuru kutuları gibi) adresleri bile site haritasına giriyordu.

Arama robotları bu adreslerden yalnızca 403 (Erişim yasak) alıyordu ve özel panoların var olduğu da ortaya çıkıyordu.

  • •Düzeltme: yalnızca üye olmayanların görebildiği panolar eklenir. Ölçüt, liste ve gönderi okuma izni "Herkes" olan panolardır.
  • •Gizli gönderiler ve pano ayarlarında aramadan hariç tutulan (noindex) panolar da çıkarılır.
  • •Bir panoyla aynı adı taşıyan sayfa, pano esas alınarak değerlendirilir; çünkü adresi önce pano alır.
  • •Çok dilli sayfalar da site haritasına eklenir.
  • •Belirli bir sitede yer almasını istemediğiniz sayfaları sitemap_exclude ayarına yazabilirsiniz. llms.txt de aynı ayarı izler.

Gönderilen e — postalar spama düşüyor veya geri dönüyordu

  • •E-postalarda gönderim zamanı (Date) ve benzersiz ileti numarası (Message-ID) eksikti; bu yüzden alıcı sunucular bunları kolayca spam olarak işaretliyordu.

Artık ikisi de ekleniyor ve gövde base64 olarak gönderiliyor. Böylece uzun satırların kesilmesi ve satır başındaki "." yüzünden gövdenin yarıda kalması da önleniyor.

  • •Alıcı adresi gönderenle aynı alan adındaysa (ör. şirket adresine gönderilen bir kopya), o alan adının posta kutusu e-postayı sahtecilik sayıp reddediyordu.

Yalnızca bu durumda e-posta artık SMTP hesabı adresinden gönderiliyor; yanıtlar yine asıl adrese geliyor.

SEO ve yapay zekâ arama ayarları güçlendirildi

  • •Yönetici SEO ayarlarına işletmeci bilgisi (yapılandırılmış veri Organization) alanları eklendi. Değeri olmayan alanlar yayımlanmaz.
  • •Sayfa bazlı SEO ayarları artık gerçekten kullanılıyor ve aynı içerik birden fazla adreste görüntülenebildiğinde standart bir adres (canonical) belirleniyor.
  • •Bing site doğrulama kodu alanı eklendi. ChatGPT araması Bing dizinini kullanır.
  • •Açıklamalar, arama sonuçlarındaki görüntüleme genişliğine göre cümlenin ortasından değil sonundan kısaltılıyor.

Dil gösteriminin düzenlenmesi

  • •404 ekranı her zaman Korece çıkıyordu. Artık görüntülenen dilde (Japonca, Korece veya İngilizce; diğer dillerde İngilizce) çıkıyor.
  • •Bildirim zilinde Korece sabit yazılmış "az önce" ifadesi düzeltildi.
  • •Japonca ekranlar önce Japonca yazı tiplerini kullanıyor. Dile göre yazı tipi yardımcısı her zaman yüklendiği için düzeni kullanmayan ekranlar (paylaşım sayfaları gibi) artık yazı tipi yüzünden durmuyor.
  • •Sayfam'daki "Tercih edilen dil" listesinde metni olmayan dillerin de sıralanması düzeltildi.
  • •Üye olurken görüntülenen ekranın dili tercih edilen dil olarak kaydediliyor (bugüne kadar boş kalıyordu). Parola sıfırlama e-postası da bu dilde gönderiliyor.

Giriş ve oturum açma

  • •Doğum tarihi gibi tarihler artık yıl, ay ve gün olmak üzere üç kutuya giriliyor. Önceden görünüm tarayıcı diline göre değişiyordu.
  • •Bazı temalarda oturum açma ve parola kurtarma sırasında reCAPTCHA doğrulamasının atlanması sorunu düzeltildi.

Ödeme

  • •Her ödeme sağlayıcısı için test anahtarları ve canlı anahtarlar ayrı ayrı saklanıyor. Test modunu yalnızca seçmek yeterli; anahtarlar değiştirilirken artık kaybolmuyor.

Widget'lar

  • •Hero widget'ının düğmesi artık yeni pencerede açılabiliyor.
  • •Widget oluşturucudaki tekrarlanan öğeler de dile göre yazılabiliyor (dünya düğmesi).

Derleme

  • •Yapılandırma dosyaları (.env) ve yedekleri, adı ne olursa olsun dağıtım paketine hiçbir zaman eklenmez.
  • •Düzenleme sırasında kalan yedek dosyalar (.bak, adının arkasına tarih eklenmiş olanlar dâhil) da eklenmez.
  • •Yalnızca merkez operasyonlarında kullanılan betikler (site eşitleme, barındırma, posta sunucusu, koşul güncellemeleri vb.) ve yalnızca dağıtım paketinde bulunmayan eklentilerin kullandığı cron'lar dağıtım paketinden çıkarıldı. Güncelleme, kurulum ve çeviri çalışanları gibi müşteri sitelerinin ihtiyaç duyduğu betikler pakette kalmaya devam ediyor.
  • •Zip oluşturulduktan sonra bir kez daha kontrol ediliyor; içinde yapılandırma veya yedek dosyası varsa yayımlama durduruluyor.
  • •Test betikleri parolaları artık dosyaya yazmıyor, ayarlardan okuyor.
v2.7.10 2026-08-23 · 2 ay önce
Güncellemeden sonra sürüm adı eski kalıyordu

Güncellemeye rağmen sürüm adı ve çıkış tarihi değişmiyordu

Yalnızca numara yükseliyor, başlık önceki sürümünkü olarak kalıyordu.

Yönetici ekranında «2.7.9 · Japonca yazı tipleri · sözleşme yenileme bildirimi…» gibi, numara ile ad birbirini tutmayan bir görünüm vardı.

Yalnızca ekrana bakarak neyin alındığını anlamak mümkün değildi.

  • •Neden: version.json, her müşterinin kendi ayarlarını korumak için bilerek üzerine yazılmayan bir dosyadır.

Bu yüzden güncelleyici onu kendisi doldurur, ancak yalnızca numarayı ve saati değiştiriyor, başlığı ve çıkış tarihini olduğu gibi bırakıyordu.

  • •Düzeltme: yeni sürümün başlığı ve çıkış tarihi artık alınan paketten okunuyor ve birlikte uygulanıyor.

Paketi olmayan kısmi güncellemelerde dağıtım listesinden (manifest.json) okunur.

Müşteriye özel ayarlar (github vb.) olduğu gibi korunur.

Dikkat — bu sürüme yükseltseniz bile ekran hâlâ eski adı gösterebilir. Güncellemeyi çalıştıran,

şu anda kurulu olan sürümün güncelleyicisidir.

2.7.10'u alan sürümden sonraki sürümden itibaren doğru görünecektir.

Derleme denetimi

2.7.8'deki oluşturucu donması (2.7.9'da düzeltildi) gerileme testlerinden olduğu gibi geçmişti.

Çünkü mevcut denetimler yalnızca «dosya var mı · dize içinde mi» diye bakıyordu.

  • •Artık oluşturucuya giren betik gerçekten üretilip sözdizimi denetiminden geçiriliyor (node --check).
  • •Çok satırlı bir dosyayı olduğu gibi bir JS dizesine koyan kod varsa derleme, satır numarası gösterilerek durdurulur.
  • •2.7.8'i yeniden üreten bir dosyayla denedik ve denetimin onu gerçekten yakaladığını doğruladık.
v2.7.9 2026-08-23 · 2 ay önce
Bileşen oluşturucu çalışmıyordu (2.7.8 gerilemesi)

Belirtiler

  • •Paletinde tek bir bileşen bile görünmüyor
  • •Zaten yerleştirilmiş bileşenler tuvale çizilmiyor — içine koyduğunuz video, görsel vb. kaybolmuş gibi görünüyor
  • •Kaydedilemiyor

Neden

2.7.8'de yazı tipi bildirimlerini partials/fonts.php tek yerinde topladık. Ancak oluşturucu önizlemesini yapan yer

bir JS dizesinin tek satırının içindeydi ve 33 satırlık yazı tipi bildirimi olduğu gibi oraya girdi.

Satır bölündüğü anda dize koptu ve oluşturucu betiğinin tamamı daha okunmadan öldü.

Dosyayı tümüyle öldüren türden bir hata olduğundan «bazı işlevler tuhaf» gibi değil, oluşturucunun hiçbir şey yapmaması gibi görünür.

2.7.5 ve öncesinde bu sorun yok.

Nasıl düzelttik

Yazı tipi tanımlarını fonts.php içindeki o tek yerde bıraktık; yalnızca oluşturucuya eklerken çıktıyı tek satıra katlayıp tırnakları işliyoruz.

Yazı tiplerini düzelteceğiniz yer hâlâ tek.

v2.7.8 2026-08-22 · 2 ay önce
Japonca yazı tipleri · sözleşme yenileme bildirimi · 3-D Secure

Varsayılan yazı tipi Japoncaya göre ayarlandı

Şimdiye kadar varsayılan yazı tipi Korecedeki esasa göre belirlenmişti. Ana kullanıcılarımız Japonya tarafında olduğu hâlde ekranlar tuhaf görünüyordu

ve dili değiştirsek de yazı tipi aynı kalıyor, böylece Japonca cümleler Korece bir yazı tipiyle basılıyordu.

  • •Varsayılanlar artık başlıklar için Mincho, gövde metni için Pretendard JP.
  • •Dil ayarları ekranında her dil için ayrı bir yazı tipi belirleyebilirsiniz. Belirlemezseniz o dile uygun varsayılan atanır.
  • •Aynı kural yönetici, üye ve ön yüzün tüm ekranlarına ve tüm görünümlere (default, modern, minimal, shop) uygulanır.

Sözleşme yenileme ve ücretsiz dönem sonu bildirimi

Sözleşmenin süresinin dolduğunu ancak geçtikten sonra fark ettiğimiz oluyordu. Yenileme tarihi yaklaştığında artık önceden haber veriliyor.

  • •Yaklaşan yenilemeler ve ücretsiz sağlamanın bitişi tarih gelmeden önce bildirim olarak gösterilir.
  • •Tek satırlık bir cron (cron.d-voscms-contract-notice) ile çalışır ve kurulum rehberine nasıl kaydedileceğini ekledik.

Kartla ödeme

Japon kart şirketlerinin kimlik doğrulamasından (3-D Secure) geçen ödemeler doğrulamayı geçiyor ama tahsilat reddediliyordu.

  • •PAY.jp, kimlik doğrulama için oluşturulan jetonu olduğu gibi bırakırsanız kullanılmasını engeller. Doğrulama geçildikten sonra sunucunun bir bitirme çağrısı yapması gerekir,

ancak o zaman tahsilatta kullanılabilir; işte bu bir adım eksikti.

  • •Müşteri bilgilerinin ödeme şirketi tarafında durup durmadığını önceden denetleme yolunu da açtık — silinmiş bir müşteriyle tahsilat deneyip başarısız olma durumlarını önler.

Bildirim çanı ve iade kuralı metinleri çok dilli

  • •Başlıktaki bildirim çanında «Bildirim yok» ve «dakika önce» gibi Korece olarak sabitlenmiş metinleri dile göre değişir hâle getirdik.
  • •İade kuralı bildirim metninde kalan sabit ifadeleri düzenledik.

Muhasebe

Japon tüzel kişiliğin defterlerine won cinsinden işlemler karışıyor ve toplamlar tutmuyordu.

  • •Defter para biriminden (yen) farklı bir para birimindeki fişler için yevmiye kaydı oluşturulmaz. Kayıt durur ama deftere geçmez.

Dağıtım sürümü düzeni

  • •Düzenleme sırasında oluşan yedek dosyalar dağıtım sürümüyle çıkıyordu (dosyaadı.php.bak.sayı biçiminde).

Hariç tutma kuralı yalnızca .bak dosyalarını süzüyor, sayı eklenmiş adları kaçırıyordu. Artık .bak., .orig ve *~ de engelleniyor.

  • •THEVOS AI hizmetinin satış materyallerini (fiyat tablosu, paket hesabı, ödeme uyum cron'u) dağıtım sürümünden çıkardık.

Bunları okuyan her şey zaten çıkarılmıştı, dolayısıyla dağıtımda kimsenin kullanmadığı dosyalardı.

v2.7.7 2026-08-10 · 2 ay önce
Yeni kurulumda çıkan iki uyarı

«DB migration gerekli»

039_ai_knowledge_base, NaitoWork X mağaza danışmanlığı AI'sının tablolarını oluşturur,

ama dağıtım sürümüne olduğu gibi girip çıkıyordu. Üstelik bu dosyanın son satırı

ALTER TABLE rzx_shop_inquiries ADD COLUMN IF NOT EXISTS ai_meta ...

rzx_shop_inquiries, vos-store eklentisinin oluşturduğu bir tablodur.

Dağıtım sürümünde vos-store yok — çekirdek, var olmayan bir eklentinin tablosunu değiştirmeye çalışıyordu.

Bu yüzden her yeni kurulumda: 4 tablo oluşuyor, son satırda başarısız oluyor → sonuna kadar gidilemediği için

«uygulandı» olarak kaydedilmiyor → afiş kalıcı olarak görünüyor ve tıklayınca aynı yerde yine başarısız oluyor.

AI danışmanlığını (RAG) dağıtımdan tümüyle çıkardık:

039 · rzxlib/Core/AI/{Knowledge,Embedding,Generate} ·

scripts/{ai-kb-ingest,ai-rag-test,cron-ai-consult,hanesbot-ingest}.php

AI çevirisi (rzxlib/Core/AI/Translation) kalıyor. O, ücretli vos-ai eklentisinin
motorudur ve muhasebe ile barındırma gibi «motor çekirdekte durur, özelliği eklenti açar» kuralını izler.

«1 eklenti doğrulanmamış durumda (vos

Çekirdek, «lisanssız da kullanılan dahili eklentiler» listesini tutuyor ve bu liste eskimişti.

Kodun dahili bildiği | vos-autoinstall · vos-marketplace |

Gerçekte dahili çıkan | vos-autoinstall · vos-community |

vos-marketplace dağıtımdan çıktı ve yerine vos-community girdi,

ama yalnızca bu liste düzeltilmedi. Dahil edip sonra dahili olduğunu bilmediğimiz için uyarı verdik.

Aynı şey bir daha olmasın diye

Neden, dahili listesinin iki yerde yazılı olması —

derleme betiğinin hariç tutma listesi ve LicenseStatus::BUNDLE_PLUGINS.

Derlemeye bir karşılaştırma adımı ekledik. İkisi birbirinden ayrılırsa zip oluşturulmaz ve derleme durur.

Bu, insanların hatırlaması gereken bir şey değildir.

v2.7.6 2026-08-10 · 2 ay önce
Forumlarda yazma düğmesi · çok dilli başlıklar · kurulumda migration

Forumlarda yazma düğmesi görünmüyordu

Q&A ve FAQ'da yazma yetkisi olanların bile düğmesi yoktu. İki neden vardı.

  • •Yöneticiler engelleniyordu — yazma yetkisine bakılırken önce üye olup olmadığı soruluyor, yöneticiye ancak ondan sonra bakılıyordu.

Yöneticiler users içinde olmadığından ilk kapıda takılıyordu. Sırayı değiştirdik; yöneticiler önce geçiyor.

  • •Hiç yazı yokken düğme de kayboluyordu — düğme listenin içinde olduğundan,

sayfa «yazı yok» görünümüne geçince düğme de onunla birlikte kayboluyordu. İlk yazacak kişi yazamıyordu.

Düğmeyi listenin dışına çıkardık.

  • •FAQ doğrudan admin_id değerine bakıyordu — forum ayarlarındaki yazma yetkisini yok sayıyordu.

Forum başlıkları ve alt başlıkları başka bir dilde görünüyordu

Korece bir ekranda yalnızca alt başlığın Japonca görünmesi sorunu.

  • •Çeviriler hiç okunmuyordu. Başlık ve alt başlık, görünüm ayarlarında tek bir dize olarak saklanırken,

çeviriler ayrıca rzx_translations içinde duruyor. Ekran yalnızca kayıtlı dizeyi olduğu gibi basıyordu.

  • •Forumlar arasında ayrım yoktu. Çeviri anahtarı skin_config.subtitle_text olduğundan Q&A ve FAQ

aynı gözü paylaşıyordu. Birini düzenlemek diğerini de değiştiriyordu.

Bunu board.{forum numarası}.{öğe} olarak ayırdık.

  • •Dil belirlenmeden önce gövde çiziliyordu. Çekirdek önce gövdeyi üretip başlığı sonradan ekliyor,

oysa dil başlıkta belirleniyordu. Kararı gövde tarafına taşıyarak önce verilmesini sağladık.

Kurulumda çekirdek migration'ları eksik kalıyordu

install-core.php, database/migrations klasörüne hiç bakmıyordu.

Yeni kurulan sitede bazı tablolar en baştan yoktu ve o özellik sonradan açıldığında çöküyordu.

Sessizce atlanan migration sorunu (2.7.4'ün devamı)

2.7.4'te tek satırlık yorumlar (--) ele alınmıştı, ancak çok satırlı yorumlar (/ /) kalmıştı.

Bu blok içindeki noktalı virgül dosyayı tek parça hâline getiriyor, böylece tek bir satır bile çalışmıyor

ve yine de «uygulandı» olarak kaydediliyordu. Gerçek zararı doğruladık — bazı kurulumlarda 9 tablo tümüyle eksikti.

Bir dizenin içindeki -- ya da /* yorum değildir. Yorumları, tırnakları sayarak siliyoruz.

Diğer

  • •Alışveriş başlığı — kategori açılır menüsünün en üstüne «Tüm kategoriler» ekledik.

İçeri girip gezinmek isteyenin gidecek yeri yoktu.

  • •Bileşen oluşturucu — yinelenen öğelerin (repeater) düzenlenmesi ayrı bir dosyaya bölündü.
  • •İntranet kenar çubuğu — muhasebe metni artık üç koldan (salon, online mağaza, genel işletme) hepsinde aranıyor.

Yalnızca birine bakıldığı için başka bir muhasebe kullanıldığında menüde ham anahtar görünüyordu.

  • •Sayfam — pano düzenlendi.
  • •Ücretli eklenti raporu — lisans denetimi artık açık olan ücretli eklentileri de gönderiyor.

Yalnızca kurulup açılmamış olanlar gönderilmez — para yalnızca açık olanlara bağlanır.

v2.7.5 2026-08-05 · 3 ay önce
Yalnızca merkeze ait sistem sayfaları dağıtım sürümünden kaldırıldı

Yalnızca merkeze ait sayfalar dağıtım sürümüyle dışarı çıkıyordu

config/system-pages.php dağıtım sürümüne olduğu gibi girdiğinden, bir müşterinin kurulumundaki yönetici «Sistem sayfaları» bölümünde

tıklanabilen ama arkasında hiçbir şey olmayan altı menü oluşmuştu.

ÇıkarılanNeden

📥 downloads | Dağıtım sürümü indirmeleri — yalnızca merkez dağıtır |

📋 changelog | Merkezin ürün geçmişidir |

📧 contact | Müşteriler bunu bir bileşenle kendileri oluşturur (sistem sayfası değildir) |

💼 recruit · 💃 casts | Yalnızca gece işleri portalı (NaitoWork X) için |

🎟 coupons | Pazaryeri eklentisi sağlar |

  • •Derleme adımı [4e/8] eklendi (strip-system-pages.php). Kaldırdıktan sonra sözdizimi php -l ile denetlenir —

bu dosya bozulursa tüm yönetici ekranı çöker.

  • •Dağıtım sürümünde kalan sistem sayfaları sekizdir: home · terms · privacy · data-policy ·

refund-policy · hosting-terms · tokushoho · funds-settlement

Eklenti sistem sayfaları

  • •site.pages.blog metni 13 dile eklendi.

Bir eklenti sistem sayfası kaydetse bile çekirdekte bunun için metin yoksa site.pages.blog ekranda olduğu gibi görünür.

  • •(vos-blog'un kendi plugin.json dosyasındaki düzeltme pazaryeri üzerinden çıkar — dağıtım sürümünde olmayan bir eklentidir)

Zaten kurulu siteler

Yönetici «Sistem sayfaları» bölümünde kullanmadığınız bir öğe görünürse config/system-pages.php içinden ilgili bloğu silin.

Sayfa içeriği (rzx_page_contents) silinmez — yalnızca listeden kaybolur.

v2.7.4 2026-08-05 · 3 ay önce
Sessizce atlanan migration'lar

① Yorumla başlayan migration'lar tümüyle atlanıyordu

  • •DatabaseMigrator::splitSql() içindeki bir yorum «yorumları kaldırdıktan sonra böl» diyordu, ancak

gerçekte yalnızca noktalı virgülden bölüyordu.

  • •Bir SQL dosyasının ilk satırı -- açıklama ise dosyanın tamamı tek bir parça olur,

yürütme kısmındaki str_starts_with($stmt, '--') tarafından yakalanır ve tek bir ifade bile çalışmaz.

  • •0 ifade çalıştığında hata da 0 olur; bu yüzden success sayılır ve uygulanmış olarak kaydedilir.

Kayıt bir kez oluşunca bir daha çalışmaz, böylece tablo sonsuza dek eksik kalır.

  • •Zarar, -- ile başlayan tüm dosyaları kapsıyordu. Ölçüm: 9 dosyanın 6'sı 0 ifade çalıştırdı, 2'si kısmen çalıştırdı.
  • •Artık bölmeden önce -- ve # satır yorumları ile / / blokları kaldırılıyor.

Bir dizgenin içindeki -- ise dokunulmadan bırakılır ('a -- b' gibi bir değer kesilirse veri bozulur).

② Yeni kurulum artımlı migration'ları hiç çalıştırmıyordu

  • •Kurulum betiği yalnızca migrations/core ve migrations/migrations dizinlerini çalıştırıyordu

ve en üst düzeydeki database/migrations/*.sql dosyalarını atlıyordu. Güncelleyici ise tam tersine yalnızca en üst düzeyi izler.

  • •Bu yüzden yeni kurulumda 034 ile 042 en baştan yoktu ve sonraki sürüm gelene kadar boş kalıyordu.
  • •Kurulum sırasında artık en üst düzey de çalıştırılıyor ve uygulanmış olarak kaydediliyor (ilk güncelleme aynılarını bir daha çalıştırmasın diye).

Zaten kurulu siteler

Lütfen Yönetici → Ayarlar → Güncelleme altında bir kez Migration'ları çalıştır düğmesine basın.

Yanlış kaydedilenler yeniden çalışmaz; bu yüzden bir tablo boşsa aşağıdakiyle kontrol edebilirsiniz.

SELECT migration FROM rzx_migrations;      -- kayıtlı
SHOW TABLES LIKE 'rzx_home_notices';       -- gerçek
v2.7.3 2026-08-05 · 3 ay önce
Dağıtım sürümü eklenti düzeni · alışveriş başlığı · Sayfam bakiyesi

Dağıtım sürümünden çıkarılanlar

  • •vos-cp (hizmet kontrol paneli) ve vos-shopping (çevrimiçi mağaza) dağıtım sürümüne bindirilip gidiyordu.

İkisi de yeni yapılmış eklentilerdi ve dışlama listesinde yer almıyorlardı, hepsi bu.

  • •vos-cp, THEVOS'un kendi hizmetleri için bir paneldir. Bir müşterinin kurulumunda bulunması için hiçbir neden yok
  • •vos-shopping hâlâ geliştirme aşamasında (v0.1.0) ve kural, eklentilerin pazaryerinden satın alınması
  • •vos-review da çıkarıldı — aynı nedenle (sahibinin talimatı).
  • •Dağıtım sürümüne giren eklentiler yalnızca ikidir: vos-community ve vos-autoinstall.

Geri kalan her şey pazaryerinden alınır.

Çekirdeğe eklenenler

  • •İki katmanlı alışveriş başlığı (skins/layouts/shop) — tüm kategorilerin açılır menüsü, arama, sepet önizlemesi ve

oturum açtıktan sonra avatar menüsü. Kategori açılır menüsünün en üstüne, geri dönüş yolu olsun diye «Tüm kategoriler» koyduk

  • •Sayfam'da kazanılan puan, mağaza kredisi ve üye seviyesi gösterilir. Adlar sizin ayarladığınız değerleri kullanır
  • •Eklenti bileşeni desteği — bir eklenti widgets/ klasörü koyarsa çekirdek oluşturucu onu otomatik tanır
  • •Posta kodu ile adres arama ortak bileşeni — sipariş formu ve üye bilgileri aynısını kullanır
  • •Yönetici üst çubuğunda bildirim zili
  • •Yönetim konsolu menü gruplarının düzenlenmesi (config/intranet-modules.php)
  • •Bileşen oluşturucunun yinelenen alan (repeater) desteği

Düzeltilenler

  • •Çok dilli giriş alanlarının özgün verilerin üzerine yazması sorunu
  • •Mağaza kredisi defterinin kaydındaki bir hata
  • •Dağıtım sürümü güncellemesinin barındırma sayfalarını 404'e çevirmesi sorunu

Kurulu sürümlerde kontrol edilecekler

Eski bir dağıtım sürümüyle kurulup yalnızca güncelleme almış sitelerde, kullanılmayan eklentilerin klasörleri kalır

(güncelleme eklenti klasörlerini silmez). Yönetici → Eklentiler altında kurulu değil olarak görünen her şey,

plugins/ içinden klasörüyle birlikte silinebilir.

v2.7.2 2026-07-26 · 3 ay önce
Hizmet başvurusu yönlendirmesinin düzenlenmesi (çekirdeğin yeniden derlenmesi)

Changed

  • •Hizmet başvurusu URL'lerinin birleşik yönlendirmesi — /service/hosting, /service/mail ve /service/domain → 302 ile /service/order adresine (özel başvuru sayfaları hazır olana kadar ziyaretçiler birleşik başvuru sayfasına yönlendirilir ve daha sonra özel sayfalarla değiştirilebilir).

Notes

  • •2.7.1'in çekirdek düzeltmeleri (çok dilli hreflang, güncelleyicinin sessiz hatalarının önlenmesi, fiyat /pricing sayfasının /service/order ile birleştirilmesi) 2.7.1 paketine zaten doğru biçimde dahil edilmişti. 2.7.2, bunun üzerine hizmet başvurusu yönlendirmesinin düzenlenmesini ekleyen bir yeniden derlemedir.
  • •Dağıtım sürümü ilke olarak yalnızca saf çekirdeği içerir (ücretli ve dikey sektör eklentileri hariç). Merkez siteler (voscms.com ve thevos.jp) dağıtım sürümünün kendi kendine güncellenmesinin hedefi değildir; kaynak koddan/git'ten dağıtılır.
v2.7.1 2026-07-25 · 3 ay önce
Çok dilli SEO hreflang · güncelleyicinin kararlılığı · fiyatlandırma düzeni

SEO

  • •Çok dilli hreflang — sayfa başına kendine başvuran canonical + desteklenen diller için otomatik hreflang, ?lang=xx ile dil başına dizinleme, varsayılan dilin ?lang değerinin yalın URL'ye 301 ile normalleştirilmesi ve genişletilmiş sitemap.

Fixed

  • •Güncelleyicinin sessiz hataları düzeltildi — çekirdek dosyalarının veya version.json'un yazılamaması artık istisna olarak ele alınıyor. Uygulama yetersiz izin gibi nedenlerle başarısız olduğunda, yanlış bir «SUCCESS» yerine açık bir hata ve otomatik geri alma elde edersiniz.
  • •Fiyat sayfasında çok dilli bir alanın htmlspecialchars'a dizi olarak geçirilmesinden kaynaklanan 500 çökmesine karşı koruma sağlandı.

Changed

  • •Form başına reCAPTCHA v3 anahtarı genişletildi (blog_comment ve diğerleri).
  • •Ayarlardaki «Sahip konsolu bildirimleri» sekmesi yalnızca vos-store etkin olduğunda gösterilir.
  • •Fiyat sayfası /pricing, /service/order ile birleştirildi (301) ve «Sınırsız sistem» planı yalnızca yöneticiye özeldir.
v2.7.0 2026-06-27 · 4 ay önce
Dağıtım sürümü saf bir çekirdeğe indirildi + bileşenler ve ayarlar büyük ölçüde güçlendirildi

Dağıtım içeriği

  • •Dağıtım sürümü saf bir çekirdeğe indirildi — yalnızca 3 çekirdek eklenti (vos-autoinstall, vos-community, vos-review) dahil edildi. Dikey sektör eklentileri (gece işleri / salon / POS), bileşenler ve tema (story) tamamen hariç tutuldu. Yaş doğrulama ve çerez afişi gibi genel amaçlı işlevler çekirdeğe (rzxlib) ait olduğundan dahildir.

Added/Changed (çekirdek bileşenleri)

  • •location-map — anahtarsız gömmeyi (map_embed) destekleyerek API anahtarı bağımlılığını ortadan kaldırır ve harita dilini locale'e bağlar
  • •practice-tabs (uygulama alanı sekmeleri) — yeni bir dahili bileşen
  • •Genel sayfa genişliği ayarı (widget_page_width) — bileşen/belge sayfalarının genişliğini birleştirir
Dahil edilmeyen (bundled:false) siteye özgü bileşenler (hero-slideshow, overlap-cards, office-intro, page-hero, content-head, consult-cta, board-grid, clients-logos, forumun profil teması) çekirdek dağıtım sürümüne dahil değildir.

Removed

  • •Ön ödemeli bileşenler (prepaid-charge, prepaid-pass, prepaid-purchase) — vos-prepaid dahil edilmediği için dağıtımdan çıkarıldı

Added (ayarlar ve çekirdek)

  • •Yaş doğrulama kapısı çekirdeğin genel ayarına yükseltildi
  • •Çerez onay afişinin arka plan saydamlığının ayarlanması
  • •Dil başına logo görselleri
  • •İşletme bilgilerine banka hesap bilgileri + banka havalesi bildirimi
  • •Ödeme ekranında «Kabul edilen kartlar» bildirimi (marka simgeleri) + yönetici ayarı

Fixed

  • •Sayfa başlıklarının ve alt başlıklarının ziyaretçinin diline yerelleştirilmesi (page-scoped db_trans) ve content_width'in uygulanmaması düzeltildi
  • •Bileşenlerde/yönetimde/sayfalarda çok sayıda hata düzeltmesi ve 13 dilde eklemeler
v2.6.24 2026-06-02 · 5 ay önce
Güncellemede orphan (silinmiş kaynak dosyaları) otomatik temizliği

Added

  • •Eskimiş dosyaların otomatik temizliği — tam paket zip'iyle üzerine yazan bir güncelleme, kaynaktan kaldırılmış dosyaları silemediğinden, kurulu sürümlerde kalıntılar (orphan) kalıyordu (örneğin bir yeniden düzenlemede bölünüp kaldırılan tek parça settings.php, eski kurulumlarda duruyordu). Bunları temizlemek için açık liste tabanlı bir mekanizma ekledik.
  • •config/obsolete-files.php — silinecek yolların birikimli listesi (birkaç sürümü atlayan kurulumlar da tek seferde temizlenir).
  • •Güncelleyicinin applyUpdate() çağrısından hemen sonra cleanupObsoleteFiles() listedeki dosyaları güvenle unlink eder. Korunan hedeflere (.env, storage vb.), yol kaçışlarına ve dizinlere asla dokunmaz.
  • •İlk kayıt: resources/views/admin/settings.php.
v2.6.23 2026-06-02 · 5 ay önce
Pano «Sistem ayarları» bağlantısının düzeltilmesi

Fixed

  • •Pano «Sistem ayarları» bağlantısı — hızlı eylemlerdeki bağlantı, ayrılıp kaldırılmış eski /settings yolunu gösteriyor ve yanlış (yedek) bir sayfaya gidiyordu. Ayarların giriş noktası /settings/general olarak düzeltildi. (2.6.22 derlemesinden sonra gözden kaçan kısım.)
v2.6.22 2026-06-02 · 5 ay önce
Migration çalıştırırken CSRF ve kayıt hatalarının düzeltilmesi

Fixed

  • •Panodaki «DB migration gerekli» afişi — CSRF token invalid — yeniden deneme düğmesi /update-api.php (run_migrations) adresine CSRF belirteci göndermiyordu, bu yüzden 419 ile reddediliyordu. Artık $_SESSION['csrf_token'] garanti edilir ve hem başlıkta hem gövdede gönderilir.
  • •Migration çalıştırıldıktan sonra bile afişin kaybolmaması — DatabaseMigrator::recordMigration bir batch sütunu ve patch_ önekini varsayıyordu; bu yüzden kurulu tür şemada (migration/version/executed_at) kayıt INSERT'i başarısız oluyor, önek de dosya adı eşleştirmesini bozuyordu. Gerçek sütunlara uygun olarak dosya adı olduğu gibi kaydedilecek şekilde düzeltildi. (2.6.20 güncellemesinde migration'ların yalnızca «OK» günlüğü bırakıp uygulanmamasının nedeni buydu.)
v2.6.21 2026-06-02 · 5 ay önce
Kurulu olmayan intranet modüllerinin yollarında ham lang anahtarlarının görünmesinin düzeltilmesi

Fixed

  • •Yönetici yetki yönetimi gibi çekirdek sayfaların kenar çubuğunda ham anahtarlar — intranet layout'u yalnızca config/intranet-modules.php içindeki route_prefixes ile etkinleştirildiğinden, ilgili eklentisi olmayan sitelerde (örneğin vos-salon kurulu olmayan) çekirdek sayfa /staff/admins salon intranet kenar çubuğuyla çiziliyor ve salon.intranet., salon.section. anahtarları ham metin olarak görünüyordu. Düzeltildi.
  • •Ortak bir yardımcı resolve_intranet_module() eklendi — intranet yalnızca modülün lang kaynakları (eklenti) gerçekten kuruluysa etkinleştirilir; kurulu değilse çekirdeğin admin-sidebar'ına geri dönülür.
  • •_head.php / admin-sidebar.php içindeki yinelenen algılama mantığı yardımcıda birleştirildi. Eklentinin kurulu olduğu sitelerde (salon, store vb.) davranış değişmez.
v2.6.20 2026-06-02 · 5 ay önce
Puan/seviye/grup şemasının uzlaştırılması (seviye kaydetme hatası çözüldü)

Fixed

  • •Puan seviyesi kaydetme hatası — yönetici puan modülünde bir seviyeyi kaydederken Unknown column 'group_id' hatasıyla başarısız olma sorunu düzeltildi. Neden, core/004 ile migrations/019(v190) arasındaki point_levels/member_points şema çakışmasıydı (019'daki CREATE TABLE IF NOT EXISTS mevcut bir tabloya yeni sütun ekleyemiyordu).
  • •migration 034_point_system_schema_reconcile (en üst düzey, güncellemede otomatik uygulanır):
  • •point_levels — group_id eklendi, name için varsayılan değer verildi ve level üzerine benzersiz dizin kondu (upsert çalışsın diye).
  • •member_points — point/balance/total_accumulated/level eklendi.
  • •Hepsi additive (veri kaybı yok), mevcut sütunlara ve kullanıcılara (vos-prepaid gibi) etkisi yok.
v2.6.19 2026-06-01 · 5 ay önce
3 ön ödemeli satın alma bileşeni + çok dilli ürün adları ve görseller + bileşen oluşturucu palet yüksekliği düzeltmesi

Added

  • •3 satın alma bileşeni — bir entegre olanı (prepaid-purchase, gösterilecekler seçilebilir: hepsi / yalnızca yükleme / yalnızca bilet) + yalnızca yükleme olanı (prepaid-charge) + yalnızca bilet olanı (prepaid-pass). Tek bir ortak bileşen purchase-widget.php 3 bileşeni de çalıştırır (sıfır tekrar), $ppOnly filtresiyle dallanır.
  • •Ürün arka plan görseli — yönetici ürün ekleme/düzenleme modalında sürükle-bırak yükleme (tıklayarak yükleme de), arka plan Sayfam'a ve bileşen kartlarına uygulanır. Migration 003 image_url.
  • •Ürün adının çok dilli girişi + YZ çevirisi — ortak multilang-modal yeniden kullanılır (dünya düğmesi), rzx_translations üzerine kaydedilir ve prepaid_name() ile ziyaretçinin dilinde gösterilir. YZ çevirisi çekirdeğin /api/translations uç noktasını yeniden kullanır.
  • •Ödeme formuna kart sahibi adı giriş alanı eklendi (PAY.jp'nin createToken çağrısına iletilir).
  • •Manuel yüklemede müşteri seçimi — doğrudan user_id girmekten ad/telefon/e-postaya göre otomatik tamamlamalı aramaya geçildi (customer_search eylemi). Müşteri durumu listesi de user_id karması yerine müşterinin adını + e-postasını gösterir.
  • •Etkin anahtarı — ürün etkin onay kutusu bir anahtara dönüştürüldü.

Changed

  • •Satın alma kutusu 4 sütun — ürün kartı ızgarası duyarlı 2→3→4 (lg:grid-cols-4) oldu ve bileşen genişliğindeki sabit max-w-3xl kaldırıldı → yerleştirme kapsayıcısının genişliğine uyar.

Fixed

  • •Bileşen oluşturucu paleti ve mega menü yüksekliği — oluşturucu satır yüksekliği calc(100vh - 88px) olarak sabitlendi; böylece soldaki kategoriler ve açılır menü ekran yüksekliğinin tamamını otomatik kaplıyor ve mega menü öğelerinin üst üste binmesi giderildi.
v2.6.18 2026-05-31 · 5 ay önce
Duyuru gönderim formunda URL doğrulaması + kullanıcı dostu giriş

Added

  • •api/broadcast.php içinde link doğrulaması — şema eksikse başına otomatik https:// eklenir (example.com → https://example.com); filter_var FILTER_VALIDATE_URL testini geçemezse field: 'link' hatasıyla 400 döndürülür; 500 karakteri aşanlar reddedilir.
  • •İstemci tarafında gerçek zamanlı doğrulama — type="url", inputmode="url", ve yazar yazmaz:
  • •Şema eksik → emerald çerçeve + ✓ + «Gönderim sırasında otomatik tamamlanır: …» bilgisi
  • •Ana bilgisayar adında nokta (.) yok veya biçim bozuk → red çerçeve + ⚠ + «Geçerli bir URL biçimi değil»
  • •Geçerli → emerald çerçeve + ✓ + «Geçerli bir URL»
  • •İstemci de göndermeden önce tamamlar → önizleme ile gerçekten gönderilen gövdenin eşleşmesi garanti edilir.

Added

  • •Bölüm başlıkları: ✉ İleti yazma / 📡 Gönderim kanalları — görsel gruplama + açıklama metni.
  • •Karakter sayaçları (başlık 0/255, gövde 0/2000) — otomatik renkler: %70 ve üzerinde amber, %90 ve üzerinde red.
  • •İleti önizleme kutusu (noktalı kenarlık) — başlık, gövde ve bağlantının birleşiminin LINE'da nasıl görüneceğini gerçek zamanlı çizer + toplam karakter sayacı n/5000 (4500'ü aşarsa red).
  • •Her alan için yardım metni:
  • •Başlık: «Hem üyenin ileti kutusunda hem de LINE bildiriminde görünür»
  • •Gövde: «Gövdeye bir URL yazarsanız otomatik kısaltılır ve tıklamalar izlenir»
  • •Bağlantı: «Gövdenin sonuna bir satır boşluk bırakılarak otomatik eklenir. Gövdeye de yazarsanız iki kez görünür, dikkat edin»
  • •Bağlantı girişinin sağındaki durum simgesi (absolute) — ✓ / ⚠ hemen gösterilir.

Added

🔗 URL doğrulama kuralları (yeni 5. bölüm):

  • •http:// / https:// ile başlamalıdır → tıklama izleme belirtecine dönüştürülür
  • •Eksik şema otomatik tamamlanır
  • •Noktası olmayan veya biçimi bozuk ana bilgisayar adları reddedilir
  • •500 karakter sınırı
  • •Örnek kutusu: ✓ https://voscms.com/event / ✓ example.com/page → otomatik tamamlandı / ✗ asdfasdf (ana bilgisayar adında nokta yok)

Notes

  • •Canlı (voscms-com) ve salon eşitlendi. API, arayüz ve i18n hemen geçerli olur.
  • •13 dilde i18n: community.broadcast.guide_url_, section_message, section_channels*, subject_hint, body_hint, link_hint, link_{invalid,autofixed,valid}, preview_{title,empty}.
v2.6.17 2026-05-30 · 5 ay önce
Duyuru gönderim sayfasının sağına zamanlanmış gönderim kılavuz kutusu

Added

  • •/theadmin/community/broadcast yerleşim değişikliği — önceki tek kart lg:grid-cols-3 ile bölündü. Ana gönderim formu soldaki 2 sütunu (lg:col-span-2) kaplıyor, sağdaki 1 sütuna yeni bir kılavuz kutusu eklendi (<aside>, sticky top-4).
  • •6 bölümlük kılavuz içeriği:

1. 📅 Zamanlanmış gönderim nedir? — gelecekteki bir zamanda otomatik gönderim; gece, hafta sonu ve etkinliklerde kullanılabilir

2. 🛠 Nasıl kullanılır — 4 adım (hedefi seç → LINE'ı işaretle → zamanlamayı işaretle → gönder), numaralı rozetli arayüz

3. ⏱ Gönderim doğruluğu — 5 dakikalık cron aralığının açıklaması + bir örnek kutusu (10:00 → 10:00 ile 10:05 arası)

4. 🆚 Hemen ve zamanlanmış karşılaştırması — iki modun davranış farkı kart biçiminde

5. 📋 Kuyrukta bekleyenleri kontrol etme — /history?status=queued adresine kısayol düğmesi

6. ⚠ Dikkat edilecekler — en az 30 saniye ilerisi olmalı, uygulama içi/push zamanlanamaz, cron olmayan barındırmada çalışmaz, arayüzden iptal desteklenmez

  • •İndigo gradyan arka plan (from-indigo-50 to-blue-50) — kılavuz kutusu ana karttan görsel olarak ayrışırken ona yumuşak biçimde uyum sağlar.
  • •13 dilde i18n — yaklaşık 20 adet community.broadcast.guide_* anahtarı (ko/en/ja/de/es/fr/id/mn/ru/tr/vi/zh_CN/zh_TW).
v2.6.16 2026-05-30 · 5 ay önce
Sayfam'da locale ayar arayüzü + gönderim geçmişi özet kartları (CTR/variant/locale)

Added

  • •/mypage/settings sayfasına «Tercih edilen dil» kartı eklendi — 14 seçenekli bir select (otomatik / 13 dil). Kaydedildiğinde rzx_users.locale UPDATE edilir ve $_SESSION['locale'] hemen uygulanır.
  • •Auth::loginUser hook'u — oturum açıldığında $user['locale'] varsa ve oturum locale'i boşsa otomatik doldurulur. Kullanıcı oturum sırasında elle değiştirdiyse o değer öncelikli olarak korunur.
  • •13 dilde i18n — auth.settings.language.{title,description,label,auto,hint,save,success,error_invalid,error_save} (ko/en/ja/de/es/fr/id/mn/ru/tr/vi/zh_CN/zh_TW).
  • •Değişiklikten sonra arayüz bir sonraki sayfadan itibaren üyenin dilinde gösterilir ve yönetici otomatik gönderim kuralına messages_by_locale tanımladıysa o üyeye uyan gövde LINE ile gönderilir.

Added

/theadmin/community/broadcast/history sayfasının üstüne 3 yeni kart (mevcut 4 kartın ardından):

1. Genel tıklama oranı (CTR) — SUM(rzx_broadcast_clicks.click_count) / SUM(rzx_line_broadcasts.recipient_count WHERE status='sent') × 100. Büyük yazılı emerald.

2. A/B testi (son 30 gün) — variant IS NOT NULL olan gönderimler için variant başına alıcı, tıklama ve CTR. CTR'si daha yüksek olan variant emerald ile vurgulanır.

3. Locale'e göre dağılım (son 30 gün) — yalnızca source='auto_rule' AND messages_by_locale IS NOT NULL olan gönderimlerde, kuralın messages_by_locale JSON anahtarları ile broadcast gövdesinin ilk 30 karakteri karşılaştırılarak locale eşleştirilir → locale başına alıcı/tıklama/CTR. ksort ile sıralanır.

  • •13 dilde i18n: community.broadcast.stat_{ctr_title,ctr_breakdown,variant_title,variant_hint,locale_title,locale_hint,empty}.

Notes

  • •voscms-com ve salon ağaçlarının eşitlenmesi tamamlandı. Yeni DB sütunu yoktur (hepsi zaten Step 4 migration 008/009/010 içinde yer alıyordu).
  • •Locale eşleştirme mantığı gövdenin ilk 30 karakterini karşılaştırır — değişken değiştirmeden sonra gövde eşleşirse aynı locale grubunda sayılır. Gövde çok kısaysa veya tamamen değişken değiştirmeyle doluyorsa eşleşme oranı düşebilir (ileride broadcast satırına doğrudan bir locale sütunu eklenebilir).
v2.6.15 2026-05-30 · 5 ay önce
Çok dilli yönlendirme (Step 4-C) + otomatik LINE gönderiminin 4 aşaması tamamlandı

Added

  • •migration 010 — rzx_auto_broadcast_rules.messages_by_locale JSON NULL + rzx_users.locale VARCHAR(10) NULL + idx_locale dizini.
  • •AutoBroadcaster::lineUserIdsWithLocale — LINE userId ile üye locale çiftlerini sorgular. users.locale sütunu olmayan ortamlar lineUserIds'e geri döner.
  • •AutoBroadcaster::pickLocaleMessage — öncelik: üyenin user.locale değeri → sitenin varsayılan locale'i (rzx_settings.locale) → JSON'un ilk anahtarı (hepsi ıskalarsa null → A gövdesine geri dönüş).
  • •AutoBroadcaster::fire — messages_by_locale varsa her üye için locale'ine uyan gövde kullanılır; yoksa A/B variant'ı; o da yoksa tek A. locale, variant ve varsayılan aynı gövdeyi verirse tek grup olarak multicast ile gönderilir (verimlilik).
  • •Yönetici kural modalı — <details> ile açılan «Çok dilli yönlendirme etkin» ve doğrudan JSON girişi. Pretty-print ile gösterilir. invalid_locale_json doğrulaması.
  • •13 dilde i18n — community.automation.locale_{toggle,placeholder,hint} + fields.messages_by_locale + error.invalid_locale_json (ko/en/ja/de/es/fr/id/mn/ru/tr/vi/zh_CN/zh_TW).

Notes

  • •LINE gönderim altyapısının 1 ile 4 arasındaki adımları tamamlandı (2.6.9 ile 2.6.15 arası):

1. Step 1 — CTA · utility stack · manuel gönderim · seviyeye göre audience · çoklu seçim (7872c4b, 7c94a55, c4a3325)

2. Step 2 — Üye gruplarının otomatik sınıflandırılması (b24979c)

3. Step 3 — Olay tabanlı otomatik gönderim kuralları (60d47cd) + zamanlanmış gönderim cron'u (8cf02ad)

4. Step 4 — Tıklama takibi (79c99a84) + A/B testi (86e19b0b) + çok dilli yönlendirme (bu sürüm)

  • •Migration 010 canlıya (voscms.com) uygulandı. users.locale yeni bir sütundur — tüm mevcut üyeler NULL'dur (sitenin varsayılan locale'i kullanılır → önceki davranışla aynı).
  • •Üyelerin kendi tercih ettikleri locale'i doğrudan ayarlayabildiği Sayfam arayüzü bir sonraki kilometre taşıdır.
  • •Önerilen cron kayıtları: /5 /usr/bin/php8.3 /var/www/voscms-com/scripts/process-scheduled-broadcasts.php, 0 3 /usr/bin/php8.3 /var/www/voscms-com/scripts/recalculate-member-grades.php.
v2.6.14 2026-05-30 · 5 ay önce
A/B testi (Step 4-B)

Added

  • •migration 009 — rzx_auto_broadcast_rules.message_template_b TEXT NULL, rzx_line_broadcasts.variant CHAR(1) NULL, rzx_broadcast_clicks.variant CHAR(1) NULL + (source_rule_id, variant) dizini.
  • •AutoBroadcaster::fire — message_template_b boş değilse LINE userId'leri crc32 mod 2 ile 50:50 olarak A/B'ye böler. Her variant için gönderim geçmişi önceden INSERT edilir (logQueued) → belirteç wrap → multicast → finalize. Aynı kullanıcı tekrarlanan gönderimlerde her zaman aynı variant'ı alır (karma tutarlılığı).
  • •Yönetici kural modalı — <details> ile açılan «A/B testi etkin» seçeneği ve variant B girişi. Varsayılan basit tek gönderimdir, A/B açıkça seçilen bir tercihtir.
  • •ClickTracker — variant meta verisini iletir. broadcast_clicks.variant sütunu varsa INSERT sırasında doldurulur. Yoksa yedek yol uygulanır (migration 009'un uygulanmadığı ortamlarla uyumlu).
  • •logQueued yedek yolu — variant sütunu olmayan ortamlarda da (migration 009 uygulanmadığında) çalışır.
  • •13 dilde i18n — community.automation.ab_{toggle,placeholder,hint} (ko/en/ja/de/es/fr/id/mn/ru/tr/vi/zh_CN/zh_TW).

Notes

  • •migration 009'un 3 ALTER ifadesi canlıda (voscms.com) ayrı ayrı çalıştırıldı. Mevcut kuralların message_template_b değeri NULL'dur (tek gönderim davranışı korunur).
  • •Kuralı düzenle → «A/B testi etkin» açılır alanına variant B'yi gir → yalnızca kaydet, bir sonraki tetiklenmeden itibaren A/B dağıtımı otomatik yapılır.
v2.6.13 2026-05-30 · 5 ay önce
Gönderilen iletilerdeki URL'lerin tıklama takibi (Step 4-A)

Added

  • •migration 008 (rzx_broadcast_clicks) — token (8 karakterlik base62, UNIQUE), broadcast_id, source_rule_id, original_url (2048), click_count, last_clicked_at, last_user_agent. Aynı (broadcast_id, original_url) bileşimi için belirteç yeniden kullanılır.
  • •ClickTracker sınıfı — wrap($pdo, $siteId, $body, $meta) gövdedeki http/https URL'lerini düzenli ifadeyle çıkarır → INSERT veya yeniden kullanım → bunları /t/{token} ile değiştirir. consume($pdo, $token, $ua) bir belirteci özgün URL'ye çevirir ve click_count değerini artırır.
  • •/t/{token} rotası (index.php:330) — düzenli ifade yönlendiricisine girer. ClickTracker::consume → özgün URL'ye 302 yönlendirme, yoksa 404. URL belirteci doğrulaması ([A-Za-z0-9]{4,16}).
  • •Otomatik gönderim kurallarıyla entegrasyon — AutoBroadcaster::fire(), gönderimden hemen önce logQueued → broadcast_id edinme → ClickTracker::wrap → multicast → finalizeBroadcast sırasıyla çalışır. Belirteç ↔ broadcast_id bağlantısı garanti edilir.
  • •Manuel gönderimle entegrasyon — api/broadcast.php içinde, hemen gönderim metni birleştirildikten sonra wrap yapılır. scripts/process-scheduled-broadcasts.php içinde kuyruktan gönderimden hemen önce wrap yapılır (broadcast_id bilinir).
  • •Takip alan adı ayarı — önce rzx_settings.click_track_domain, yoksa APP_URL. Kısa bir alan adı (örneğin s.voscms.com) mümkündür.

Notes

  • •Migration 008 canlıya (voscms.com) uygulandı.
  • •wrap/consume entegrasyon testi: gövdedeki 2 URL → 8 karakterlik 2 belirteç INSERT edildi → consume çağrıldığında özgün URL döndü ve click_count düzgün biçimde arttı.
v2.6.12 2026-05-30 · 5 ay önce
LINE gönderimini zamanlama + cron kuyruk işleme (Step 3-B)

Added

  • •migration 007 (rzx_line_broadcasts): scheduled_at DATETIME NULL ve processed_at DATETIME NULL sütunları + (status, scheduled_at) dizini. scheduled_at NULL = hemen gönder (eskisi gibi), gelecekteki bir zaman = kuyruk.
  • •scripts/process-scheduled-broadcasts.php — cron giriş noktası. status='queued' AND scheduled_at <= NOW() AND processed_at IS NULL olan 50 öğeyi alır → processed_at = NOW() ile hemen kilitler (işlem) → audience çözümler (all / grade_N, broadcast.php ile aynı) → LineMessenger multicast'i 500'lük birimlerle yapar → sonuçla status güncellenir. Önerilen cron aralığı: /5 *.
  • •broadcast.php arayüzü: [Gönderimi zamanla] onay kutusu + datetime-local girişi. İşaretlendiğinde varsayılan değer geçerli zaman + 1 saattir (kullanıcının yerel saati). İşaretlenmezse veya boş bırakılırsa eskisi gibi hemen gönderilir. Yalnızca LINE kanalı zamanlanabilir (uygulama içi ve push hemen kalır).
  • •api/broadcast.php: scheduled_at POST parametresini işler. Gelecekteki bir zaman (> NOW + 30s) ve send_line ise LINE API'sini çağırmadan yalnızca rzx_line_broadcasts (status='queued', scheduled_at) INSERT eder ve yanıtta scheduled: true, scheduled_at döndürür.
  • •13 dilde i18n: community.broadcast.schedule_{label,enable,hint,success} (ko/en/ja/de/es/fr/id/mn/ru/tr/vi/zh_CN/zh_TW).

Fixed

  • •INSERT sütunları, rzx_line_broadcasts tablosunun gerçek şemasına (title, body, audience varchar(20), recipient_count, status enum(queued|sent|failed)) uyacak şekilde düzeltildi. Önceden var olmayan sütun adlarıyla (message_text, recipients_count, sent_count, failed_count, audience_value, partial) INSERT deneniyor, yedek yol bile başarısız oluyordu; bu yüzden otomatik gönderim geçmişi eksikti.

Notes

  • •Migration 007 canlıya (voscms.com) uygulandı. dry-run ile pickup değerinin 0 öğe olduğu doğrulandı.
  • •Canlı (voscms-com) ve salon ağaçlarının eşitlenmesi tamamlandı. .env hariç tutuldu.
  • •cron kaydı barındırma işletme tarafının kararıdır (gerekirse /5 * /usr/bin/php8.3 /var/www/voscms-com/scripts/process-scheduled-broadcasts.php).
v2.6.11 2026-05-30 · 5 ay önce
Olay tabanlı otomatik LINE gönderim kuralları (Step 3-A)

Added

  • •Otomatik gönderim kuralı tablosu (rzx_auto_broadcast_rules) — migration 005_auto_broadcast_rules.sql. Kurallar site_id başına yalıtılmıştır; trigger_type / trigger_filter (JSON) / audience (all|grade_X|custom) / message_template / is_enabled / fired_count / last_fired_at sütunları vardır.
  • •AutoBroadcaster dağıtıcısı (rzxlib/Core/Notification/AutoBroadcaster.php) — statik giriş noktası AutoBroadcaster::fire($triggerType, $ctx). Etkin kurallarla eşleştirme → şablon değişkenlerini yerine koyma ({{title}}, {{url}}, {{author}}, {{board_name}}, {{site_name}}) → audience çözümleme (broadcast.php ile aynı mantık; is_default seviyesinde NULL üyeler otomatik dahil edilir) → rzx_user_social_accounts üzerinden LINE userId sorgulama → 500'lük birimlerle multicast → geçmişi rzx_line_broadcasts içine kaydetme → kural istatistiklerini güncelleme.
  • •Yeni forum gönderileri için otomatik gönderim hook'u (api-posts.php:184) — bir gönderinin INSERT'inden hemen sonra (özel gönderiler hariç) AutoBroadcaster::fire('board_post', [post_id, board_id, title, url, author, board_name]) çağrılır. Gönderim başarısız olsa bile gönderi yanıtı etkilenmez.
  • •Yönetici kural yönetim sayfası (/theadmin/community/automation) — kart ızgarası arayüzü. Kural CRUD'u + aç/kapat anahtarı + tetikleyici başına renk rozeti (board_post=blue, review_created=amber, reservation_created=green). Tetikleyici / filtre (JSON) / hedef seviye / ileti şablonu bir modalda düzenlenir.
  • •rzx_line_broadcasts için kaynak izleme sütunları — migration 006_line_broadcasts_add_source.sql. source ('manual' | 'auto_rule') + source_rule_id (INT) + bir dizin. Otomatik gönderim geçmişi, aynı tabloda manuel gönderimden ayırt edilebilir.
  • •plugin.json içinde rota ve migration kaydı — community/automation rotası ve 003'ten sonra 004/005/006 migration'ları belirtildi.
  • •13 dilde i18n — tüm community.automation.* anahtarları (ko/en/ja/de/es/fr/id/mn/ru/tr/vi/zh_CN/zh_TW). Tetikleyici etiketleri, alanlar, ipuçları, başarı/hata iletileri ve varsayılan şablonlar.

Notes

  • •005/006 migration'ları canlıya (voscms.com) uygulandı. Henüz kural kaydedilmedi.
  • •Canlı (voscms-com) ve salon ağaçlarının eşitlenmesi tamamlandı. .env hariç tutuldu.
  • •Step 3-B (zamanlanmış gönderim scheduled_at + cron) bir sonraki kilometre taşıdır.
v2.6.10 2026-05-30 · 5 ay önce
Üye seviyesinin otomatik sınıflandırılması + kayıtta varsayılan seviye + yönetici yeniden hesaplama düğmesi

Added

  • •Kayıtta varsayılan seviyenin otomatik atanması (rzxlib/Core/Auth/Auth.php::register()) — üye kaydından hemen sonra rzx_member_grades içinde is_default=1 olan seviye sorgulanır ve yeni üyenin grade_id değeri anında doldurulur. member_grades tablosu olmayan sitelerde (eski veya yapılandırılmamış) try-catch ile sessizce atlanır. Mevcut NULL üyeler ayrı bir yeniden hesaplama betiği veya düğmesiyle doldurulur.
  • •CLI seviye yeniden hesaplama betiği (scripts/recalculate-member-grades.php) — rzx_payments ödeme toplamı + rzx_reservations rezervasyon sayısı (yalnızca tablo varsa) esas alınarak seviyeleri sort_order DESC sırasıyla dolaşır ve karşılanabilecek en yüksek seviyeyle eşleştirir. Kuralı ayarlanmamış seviyeler (min_spent=0 AND min_reservations=0) otomatik atlanır — yalnızca açık kuralı olan seviyeler terfi adayıdır. Koşulları karşılamayan üyeler varsayılana geri döner.
  • •Seçenekler: --dry-run (gerçek UPDATE olmadan simülasyon), --user-id=UUID (yalnızca belirli bir üye).
  • •cron örneği: 0 3 * /usr/bin/php8.3 /var/www/voscms/scripts/recalculate-member-grades.php
  • •Yönetici «Şimdi yeniden hesapla» düğmesi (/theadmin/members/groups) — eylem çubuğuna zümrüt tonunda bir düğme eklendi. Tıklanınca onay modalı → AJAX action=recalculate_grades → sonuç (hedef/terfi/düşüş/yeni) bildirimi → otomatik yenileme. Betikle aynı mantığı satır içi içerdiği için PHP CLI yetkisi olmayan ortamlarda da çalışır.
  • •13 dilde i18n — yeni members.groups.recalculate* anahtarları (ko/en/ja/de/es/fr/id/mn/ru/tr/vi/zh_CN/zh_TW): recalculate, recalculate_hint, confirm_recalculate, recalculate_stat.{total,upgraded,downgraded,fallback}, success.recalculated, error.{no_grades,no_default_grade}.

Notes

  • •Canlıda (voscms.com) --dry-run → gerçek çalıştırma → kurallar güçlendirildikten sonra yeniden çalıştırma doğrulandı. grade_id NULL olan 5 üyenin tümü Normal (varsayılan) seviyesine doğru atandı. VIP/Gold/Silver için kural ayarlanmadığından kural eklenene kadar 0 üyede kalır (kasıtlı).
  • •Canlı (voscms-com) ve salon ağaçlarının eşitlenmesi tamamlandı. .env hariç tutuldu.
v2.6.9 2026-05-30 · 5 ay önce
LINE arkadaş ekleme CTA'sı + entegre Utility Stack + LINE duyuru gönderimi

Added

  • •Üyelere yönelik LINE arkadaş ekleme CTA bileşeni (resources/views/components/line-friend-cta.php) — 5 variant (card / button / bar / side-tab / bubble) × 6 konum (bottom-right/bottom-left/bottom-center/top-right/middle-right/middle-left) × 3 boyut, kullanıcı tanımlı renkler, gösterim gecikmesi ve 24 saat boyunca «kapatmayı hatırla» (localStorage).
  • •Değiştirilebilir ayar arayüzü — /theadmin/settings/message-api içindeki LINE kanal kartının altında yeni bir «LINE arkadaş ekleme CTA'sı» bölümü. Basic ID, etkinleştirme anahtarı, variant radyo düğmeleri, position seçimi, boyut, renk seçici ve delay girişi.
  • •5 düzende otomatik gösterim — skins/layouts/{default,modern,minimal,modern-copy-260413}/footer.php dosyasından otomatik include edilir. Ödeme, hizmet başvurusu ve kurulum akışı sayfalarında otomatik olarak atlanır.

Added

  • •Yeni bileşen resources/views/components/utility-floating-stack.php — thevos.jp'deki cameron_plugin tasarım deseni (sağ kenarda 80×80 kare stack + 1px boşluk + her simge için vurgu rengi). Konum, boyut ve rengi operatör ayarlayabilir.
  • •İki mod bir arada — utility_stack_mode = separate (varsayılan, her CTA tek başına) / unified (PWA + LINE birlikte tek stack olarak gösterilir). Entegre modda LINE CTA'nın 5 variant'ının otomatik gösterimi devre dışı bırakılır, PWA kurulum modalının otomatik tetikleyicileri (setTimeout/DOMContentLoaded afişi) de devre dışı kalır; modal yalnızca stack içindeki PWA simgesine tıklanınca açılır.
  • •Gelecekte doğal genişleme — öğe kaydı deseniyle (Kakao kanalı, WhatsApp, bülten aboneliği, karanlık mod anahtarı vb.) başka öğeler yalnızca ayar anahtarı eklenerek stack'e katılabilir.
  • •Otomatik satır sonu garantisi — satır içi CSS word-break: break-all; overflow-wrap: anywhere; max-width: 72px, Tailwind flex alt öğelerinin genişlik sınırını aşar. CJK etiketleri de kutu içinde doğal biçimde alt satıra geçer.
  • •13 dilde i18n — resources/lang/{13 locale}/messaging.php içinde line_cta. grubu (22 anahtar) ve utility_stack. grubu (12 anahtar). Japonca ve Çincede anlam sınırlarındaki boşluklar (örneğin «アプリとして インストール») doğal satır sonu konumlarını garanti eder.

Added

  • •LineMessenger::broadcast(messages) + broadcastText(text) — tüm arkadaşlara toplu gönderir (en fazla 5 ileti nesnesi; LINE gönderim kotasından alıcı sayısı × ileti sayısı kadar düşülür).
  • •LineMessenger::multicast(userIds[], messages) — belirtilen en fazla 500 userId'ye gönderir (grup bazlı gönderim altyapısı).
  • •/theadmin/community/broadcast arayüzü iyileştirmesi — «LINE arkadaşlarına da gönder» onay kutusu (yeşil afiş) eklendi. Anlık bildirim gönderiminden bağımsız olarak LINE arkadaşlarına otomatik multicast/broadcast gönderir.
  • •Üye seviyesine göre gönderim — rzx_member_grades dinamik olarak yüklenir ve seviye başına radyo seçenekleri otomatik görünür (renk noktası + slug + canlı sayaç). audience biçimi grade_<id>'dir.
  • •grade_id IS NULL olan üyeler is_default=1 seviyesine otomatik dahil edilir — kayıtta seviyenin otomatik atanmadığı sitelerde bile NULL üyeler varsayılan seviyenin sayacına ve gönderimine doğal olarak dahil olur.
  • •rzx_line_broadcasts gönderim geçmişi tablosu — site_id yalıtımı, method (broadcast/multicast), audience, title/body, recipient_count, line_request_id, api_status/error, status. Gönderimde otomatik INSERT edilir.
  • •audience=all iken broadcast, aksi halde multicast otomatik seçilir — hedef kullanıcılardan user_social_accounts.line_friend=1 olanların LINE userId'lerini toplar ve 500'lük parçalar halinde gönderir.
  • •Genişlik birleştirildi — broadcast.php içinde max-w-3xl → max-w-7xl (diğer yönetim sayfalarıyla uyumlu).
  • •13 dilde i18n — send_line_label/desc ve audience_grade_group anahtarları eklendi.

Changed

  • •resources/views/admin/dashboard.php — başlık yorumu / pageTitle yedeği / RezlyX v... güncelleme bildirimi afişi tümüyle «VosCMS» olarak düzeltildi.
  • •resources/views/admin/partials/admin-topbar.php — başlık yorumu düzeltildi.

Fixed

  • •storage/.update_cache eski current: "2.6.4" önbelleğini tutuyordu, bu yüzden v2.6.8'e güncellendikten sonra bile panoda «Yeni güncelleme var» afişi görünüyordu — önbellek silindikten sonra bir sonraki istekte otomatik yeniden hesaplanır.
  • •dev → canlı birikmiş değişiklikler eşitlenmemişti — bu oturumun dışında install-core.php (#1~#7 kusur yamaları) ve version.json gibi çok sayıda dosya da canlıya eşitlenmemiş kalıntıydı. dev, rsync ile tek seferde canlıya eşitlendi (342 dosya değişti + 196 yeni, 6,3MB, kullanıcı verileri, .env, storage/, uploads/, vendor/ ve .git/ hariç).

Documentation

  • •docs/LINE_FRIEND_CTA_DESIGN_GUIDE.md — Part 3 (entegre Utility Floating Stack'in gerçek uygulaması), Part 4 (Phase 1 gönderim işletiminin gerçek uygulaması), Part 5 (dış kullanıcı senaryoları — çoklu seçimli gönderimin değer analizi) ve Part 6 (Phase 2~4 gelecek yol haritası) eklendi. Yaklaşık 631 satırdan 920 satıra.

Regression Test

  • •utility-floating-stack.php ile 5 line-friend-cta variant partial dosyasının varlığını doğrular.
  • •LineMessenger::broadcast/multicast yöntemlerinin varlığını doğrular.
  • •plugins/vos-community/migrations/004_line_broadcasts.sql göç dosyasının varlığını doğrular.
  • •13 dilde messaging.utility_stack. + community.broadcast.send_line_ anahtarlarının varlığını doğrular.
  • •dashboard.php / admin-topbar.php içinde RezlyX kalıntısı olmadığını otomatik doğrular.
v2.6.8 2026-05-29 · 5 ay önce
Pazaryeri Lisans Birleştirme + Yetkisiz Kurulum Tespit Panosu + Marka Düzeltmesi

Fixed

  • •vos-market lisans tablosu konsolidasyonu — 6 API dosyası yanlış {$pfx}vos_licenses tablosunu sorguluyordu, bu da her ödemede 500 "Server error" oluşmasına neden oluyordu. Tüm lisans doğrulama artık tek master vcs_licenses (vos-license-server tarafından yönetilir) yönlendirildi.
  • •sync.php'de doğrulanmamış master kayıt güvenlik açığı kaldırıldı — Önceki kod, vos_key doğrulamadan vos_licenses'a UPSERT yapıyordu, bu da herkesin basit bir POST ile keyfi lisans anahtarlarını master'a otomatik kaydetmesine izin veriyordu. Takip artık mevcut rzx_mkt_sync_reports (per-item) tarafından yönetiliyor.
  • •migrations/007 kullanımdan kaldırıldı — Yanlış tasarlanmış migration artık no-op (SELECT 1), neden ve değişiklik geçmişi yorumlarda.

Added

  • •4 istatistik kartı — İzlenen Siteler / Dikkat Gerektiren Siteler / Çoklu Alan Lisansları / Pasif 30+ gün.
  • •İhlal sekmesi (ürün seviyesi satır gösterimi) — Hangi ücretli widget'ın hangi alan adında lisanssız kurulduğunu bir bakışta görün. Fiyat, sürüm, vos_key ve son görülme tarihi gösterilir.
  • •Çoklu alan sekmesi — Tek bir lisans anahtarının birden fazla alan adından bildirildiği durumlar.
  • •Pasif sekme — 30+ gündür senkronizasyon sinyali olmayan siteler.
  • •Rafine edilmiş ihlal tanımı — unknown_product ve ücretsiz öğeler hariç tutulur. Yalnızca pazaryerinde kayıtlı ücretli ürünlerin lisanssız durumdaki olanları ihlal sayılır.
  • •Sahip alan adları beyaz listesi — settings.mkt_owner_domains JSON dizisinde saklanan operatör alan adları otomatik olarak sayımlardan hariç tutulur.
  • •13 dilde i18n — Yan menü, kartlar, sekmeler ve yardım metinleri tam çevrildi.

Changed

  • •settings/system/updates — Kurulu sürüm ve son sürüm kartları "VosCMS vX.Y.Z" olarak düzeltildi.
  • •updates/ajax.php — DB adı fallback ve User-Agent düzeltildi.

Regression Test

  • •vos-market 6 dosyasında vos_licenses SQL artığı olmadığını otomatik doğrular
  • •sync.php'deki INSERT güvenlik açığı regresyonunu tespit eder
  • •migrations/007'nin no-op durumunun korunduğunu doğrular
  • •Güncelleme ekranı 3 dosyasında RezlyX artığı olmadığını otomatik doğrular
v2.6.7 2026-05-29 · 5 ay önce
Kurulum sihirbazının güvenli hale getirilmesi ve otomatik regresyon testlerinin getirilmesi

Fixed

  • •site_url değerinin otomatik tohumlanması — Kurulum sihirbazı kullanıcının girdiği siteUrl değerini yalnızca .env içindeki APP_URL'ye yazıyor, veritabanındaki rzx_settings.site_url alanına yazmıyordu; bu yüzden yeni kurulan sitenin site_url'ye bağlı tüm özellikleri (otomatik kurulum, SEO, e-posta bağlantıları vb.) bozuluyordu. install-core.php içindeki $settings dizisine site_url eklenerek giderildi.
  • •rzx_site_domains tablosuna otomatik kayıt — Kurulum sihirbazı mevcut kurulum alan adını site_domains tablosuna otomatik eklemiyordu; bu yüzden SiteRouter alan adını tanıyamıyordu. Kurulan alan adı artık site_id=1 primary olarak otomatik INSERT ediliyor.
  • •.env içindeki MARKET_API_URL değerinin otomatik yazılması — Yeni kurulumda .env içinde pazar API adresi bulunmadığından InstallerService çağrı hedefini bulamıyordu. Artık varsayılan https://market.voscms.com/api/market değeri otomatik yazılıyor (tek lisans ana kaydı işletimi).
  • •Pazar kurulum API'sinde tablo adı yazım hatası — vos-market/views/api/item/install.php lisans doğrularken var olmayan rzx_vos_licenses tablosunu sorguluyordu; bu yüzden tüm otomatik kurulumlar «Server error» (HTTP 500) yanıtı veriyordu. Gerçek tablo olan vcs_licenses (lisans ana kaydı, önek olmadan sabit) olarak düzeltildi.
  • •widgets/plugins/themes dizinleri için izinlerin otomatik ayarlanması — Kurulumdan sonra PHP-FPM kullanıcısı bu dizinlere yazamıyor ve otomatik kurulum sessizce başarısız oluyordu. Kurulum sihirbazı artık setgid ve grup yazma iznini otomatik veriyor (dış ortam çeşitliliğine karşı PHP çalışma grubu otomatik algılanıyor).
  • •install-handler.php içinde çok aşamalı yedek yöntem — Çok siteli ortamda site_url sorgusu site_id filtresi olmadan LIMIT 1 kullandığından kararsızdı. SiteRouter → site_id=1'e geri dönüş → $_SERVER['HTTP_HOST'] şeklindeki 3 aşamalı yedek yöntem, her ortamda alan adının tanınmasını garanti eder.

Added

  • •InstallerService::installTheme() — type=theme ürününün theme.json dosyasını okur ve requires içindeki plugin/widget/skin öğelerini özyinelemeli olarak kurar. 13 dil doğrulamasını ve tekrarlanabilirliği (zaten kurulu öğeler atlanır) garanti eder.
  • •runPostInstall — Tema kurulumundan hemen sonra post_install/settings.json / boards.json / pages.json tohumlarını otomatik çalıştırır; sayfalar, bileşen yerleşimi ve varsayılan ayarlar tek seferde otomatik kurulur.
  • •13 dilin zorunlu kılınması (REQUIRED_LOCALES) — Çok dilli nesneler (name, description, sayfa title, bileşen config.title vb.) ancak 13 anahtarın tümünü içerirse resmen geçer. Eksik yerel ayarlar için uyarı verilir.
  • •vcs_licenses ana kaydının teke indirilmesi — Tüm lisans verme ve doğrulama işlemleri canlı pazar (market.voscms.com) üzerinden yönetilir. dev ve test ortamları da aynı ana kaydı kullanır.

Added

  • •Bu 6 kusurun otomatik doğrulanması — Kurulum sihirbazının tohum mantığı + dizin izinleri + pazar API'si + lisans sunucusuna erişilebilirlik + InstallerService'in theme dalı + install-handler'ın çok aşamalı yedek yöntemi gibi toplam 13 madde.
  • •build-voscms.sh içinde otomatik çalışan kanca — Derlemenin sonunda otomatik çağrılır. Tek bir FAIL bile olursa çıkış kodu 0 dışında olur ve dağıtım engellenir. Aynı kusur sonraki bir derlemede yeniden ortaya çıksa bile hemen yakalanır.

Documentation

  • •docs/theme-package/THEME_PACKAGE_SPEC.md — VosCMS tema paketi standardını (theme.json) tanımlar. Salon entegre tema örneğini, ayrıntılı post_install şemasını ve 13 dil kuralını içerir.
v2.6.6 2026-05-27 · 5 ay önce
Yinelenen güncelleme yedeklerinin önlenmesi

Fixed

  • •Güncelleme yedekleri: sürüm başına yalnızca bir tane tutulur — Backup::createFull() artık yeni yedek oluşturmadan önce aynı sürümün mevcut yedeğini siliyor. Aynı sürümde güncelleme veya geri almanın tekrarlanması yedek listesinde o sürümün yinelenenlerinin birikmesine yol açıyordu; bu sorun giderildi (yalnızca güncellemeden hemen önceki en son durum korunur).
v2.6.5 2026-05-27 · 5 ay önce
Güncelleme sisteminin düzenlenmesi (tek kanal, oturum/izinler, dağıtım sürümünün onarımı)

Fixed

  • •Dağıtım sürümünde eksik olan update-api.php geri getirildi — Derleme betiği, güncelleme arka ucu olan update-api.php dosyasını yanlışlıkla «dev dosyası» saydı ve dağıtım sürümünden sildi. Sonuç olarak tüm kurulu dağıtımların güncelleme sekmesi «File not found» diyerek çalışmaz durumdaydı. Derleme dışı bırakmasından çıkarıldı ve artık dağıtım sürümüne doğru biçimde dahil ediliyor.
  • •Oturum açma oturumunun tanınmaması (Unauthorized) düzeltildi — update-api.php varsayılan oturum kayıt yoluna (/var/lib/php/sessions) bakıyordu; artık index.php ile aynı storage/sessions yolunu kullanıyor. Yönetici olarak oturum açılmışken bile çıkan Unauthorized hatası giderildi.

Changed

  • •Core güncellemeleri tek kanal olarak yalnızca kendi dağıtım manifestini kullanır — update-api.php içindeki GitHub etiketi, belirteç ve tanılama kalıntıları kaldırıldı (check'in manifest sonucunu GitHub etiketiyle ezdiği yol kapatıldı). Pazaryerinde Core yoktur (yalnızca eklentiler).
  • •Güvenlik güçlendirildi — update-api.php dosyasına CSRF doğrulaması ve ana (sahip) yetki denetimi eklendi.
  • •Güncelleme koruma listesi düzenlendi — skins ve config koruma listesinden çıkarıldı. applyUpdate yalnızca kopyaladığı için dağıtım zip'indeki çekirdek temalar ve config güncellenir, zip'te olmayan müşteri özel dosyaları ise korunur.

Changed

  • •Yinelenen «Güncellemeleri denetle» düğmesi kaldırıldı — sayfa açıldığında en son sürüm otomatik denetlenir.
  • •Geçici bir hatada yedek listesinin kaybolması düzeltildi → bölüm korunur ve boş durumda gösterilir.
  • •Hata durumunda Unauthorized gibi ham iletiler yerine «Şu anda en son sürümü kullanıyorsunuz» bildirimi gösterilir.
v2.6.4 2026-05-26 · 5 ay önce
Topluluk bahsetme menüsü i18n · Pano yazar bağlantısı + /changelog render ve çoklu dil iyileştirmeleri

Added

  • •13 dilli um bölümü eklendi — vos-community/lang/{locale}.php tüm yereller (ko·en·ja·de·es·fr·id·mn·ru·tr·vi·zh_CN·zh_TW): follow·following·message·block·unblock·report·report_about·report_reason/detail/placeholder·reason_spam/harassment/inappropriate/other·report_submit/sent/failed·msg_title/placeholder/send/sent/failed·block/unblock_confirm·block/unblock_done·cancel·failed·network_error
  • •user-mention-menu.php tam i18n — PHP HTML'deki tüm sabit kodlanmış Korece, __('community.um.*') ile değiştirildi; JS çalışma zamanı dizeleri UM_LANG = <?= json_encode(...) ?> ile PHP nesnesi olarak yayımlanır, umT(key, name) yardımcısı :name yer tutucusunu değiştirir
  • •Bahsetme menüsü misafirlere açıldı — community-overlays.php koruma yapısı yeniden düzenlendi: admin/API yolları tamamen engellendi, user-mention-menu ise misafirler için bile dahil edildi (takip/şikayet girişe yönlendirir); sayfa eylemi ve username korumaları yalnızca oturum açmış kullanıcılara özel kaldı

Changed

  • •boardPreloadUsers(array $rows) eklendi (board/_init.php) — user_id listesini tek bir IN sorgusuyla toplu yükler, $GLOBALS['_boardUserCache'] paylaşımlı önbelleği ile
  • •boardAuthorMention() genişletildi — data-user-username·data-user-avatar öznitelikleri eklendi (story URL'sini /story/{username} tam olarak bağlar, avatar görselini gösterir). Ön yükleme önbelleği HIT'ini tercih eder, kaçırma durumunda lazy tekil sorguya başvurur
  • •board/list.php·board/read.php·skins/board/qna/_list-full.php — N+1 sorgularını önlemek için render öncesi boardPreloadUsers() çağrılır

Fixed

  • •Görüntü ayrıştırıcı genişletildi (resources/views/system/changelog/index.php) — kod çitleri (``), tablolar (|...|), markdown bağlantıları (text), #### alt başlıklar ve yatay çizgiler (---`) için render eklendi. Bu sözdizimini kullanan önceki sürümlerin (2.4.1·2.3.8·2.3.7 vb.) ham markdown olarak görünme sorunu giderildi
  • •Sürüm bazlı locale yedeği — tüm listeyi tek bir dilde getirmekten sürüm bazına (mevcut yerel → en → ko) geçildi. Artık her sürüm herhangi bir dilde görünür ve henüz çevrilmemiş sürümler bir yedek dil rozeti gösterir
  • •Blok sınırı hizalaması (rzxlib/Core/Changelog/ChangelogParser.php) — tarihsiz bir ## [Unreleased] başlığının önceki sürüme (ör. 1.5.0) emilmesi, her ## [ konumunda blokları ayırarak engellendi
v2.6.3 2026-05-25 · 5 ay önce
Dağıtım indirme istatistikleri · Hero widget ayrımı · Sürükle-bırak oluşturucu

Added

  • •Geçiş 056 dist_downloads tablosu (site_id·version·ip·user_agent·referrer·utm_*·is_bot·created_at)
  • •İndirme uç noktası api/dist-download.php — statik /download/*.zip doğrudan bağlantısı yerine istekler bunun üzerinden geçerek sürüm/gün/kaynak (referrer·UTM) bazında istatistik kaydeder ve ardından 302 yönlendirir. Bot UA'ları ayrı sayılır; sürüm beyaz listesi (path-traversal'a karşı güvenli)
  • •Yönetici istatistik sayfası resources/views/admin/dist-downloads.php (yalnızca master, 13 dil) — özet kartları (toplam/bugün/7g/30g), sürüm bazında çubuklar, günlük eğilim (30g), İlk 10 kaynak, UTM. Kendi SVG/CSS grafikleri (harici kütüphane yok)
  • •download-hero widget'ının indirme bağlantısı sayaç uç noktasına değiştirildi
  • •"İndirme İstatistikleri" yönetici menüsü eklendi (config/admin-menu.php, yalnızca master)

Added

  • •hero-cta-text — üst metin (yazma) alanı. Varsayılan değerler canlı hero-cta2 içeriğiyle aynıdır (13 dil); kullanıcı ayarları önceliklidir
  • •hero-cta-button — indirme düğmesi (en son sürümü otomatik algılar + indirmeleri sayar, ayar gerektirmez) artı isteğe bağlı pazar yeri düğmesi (boş bırakılırsa tek düğme)
  • •Ayar formu etiketleri ve varsayılanları 13 dilde (oluşturucu getLabel nesne desteği)
  • •İndirme düğmesinin rengi/arka planı hero-cta2 ile birleştirildi (#2563eb)

Added

  • •Widget eklemek için bir palet kartını tuvale sürükleyin (SortableJS pull:'clone' grubu + tuval onAdd'inde gerçek blokla değiştirme). Mevcut tıkla-ekle ve ↑↓/tutamaç sıralamasıyla birlikte çalışır
  • •Sürükleme sırasında açılır pencere açık kalır + tuval bırakma bölgesi vurgusu (wb-drop-active)

Changed

  • •Widget'lar arasındaki sayfa sarmalayıcı boşluğu kaldırıldı (type-widget.php py-2 → 0)
  • •Senkron yorum AI çevirisi kararlı hale getirildi — nginx fastcgi_read_timeout 150s (forum vhost) · PHP-FPM request_terminate_timeout 150 · set_time_limit 150, OllamaProvider keep_alive 30 dk (model bellekte kalır, soğuk yüklemeleri ortadan kaldırır)
  • •Message API ve Sosyal Giriş sekmelerine Webhook URL ve Redirect URI için kopyalama düğmeleri eklendi (13 dil, güvenli olmayan bağlam için yedekli)
v2.6.2 2026-05-14 · 5 ay önce
Ödeme Vergisi Otomasyonu, Form Dallanması ve Sistem Sayfaları SSOT

Added

  • •Migrasyon 036 — partner_earnings / payouts tablosuna withholding_tax · consumption_tax · tax_basis sütunları
  • •Migrasyon 037 — payouts tablosuna fx_rate · fx_amount · fx_currency sütunları (USD'ye çevrilen transfer kayıtları)
  • •Migrasyon 038 — vcs_developers.paypal_email sütunu
  • •Yardımcı rzxlib/Core/Helpers/MarketTax::calculate() — Japonya standart kesinti modeli

· Satış fiyatı vergiler dahildir (税込); platform KDV'yi doğrudan NTA'ya öder

· freelance → %10,21 stopaj kesintisi / invoice_eligible → alım vergisi kredisi / no_invoice → KDV ödenmez

· Kategori veya veri girişi yoksa → freelance zorla uygulanır (muhafazakâr: az ödeme iade edilebilir, fazla ödeme geri alınamaz)

  • •scripts/market-tax-backfill.php dolgu betiği — mevcut earnings/payouts yeniden hesaplanır (status='paid' korunur, --dry-run desteklenir)
  • •Ödeme 5 parçalı gösterim: gelir → komisyon → KDV kesintisi → stopaj (freelance) → net ödeme
  • •rzx_mkt_settings yeni anahtarları: min_payout_amount · consumption_tax_rate · default_commission_rate (her yerde settings önceliklidir; sabit kodlanmış fallback kaldırıldı)

Added

  • •/theadmin/market/partners/payouts ödeme modalı — prompt() × 2 + alert() → tek modal

· vcs_developers JOIN ile banka/şube/hesap sahibi/hesap numarası/işletme türü/T numarası otomatik ön doldurma (prefill; PII enc: otomatik şifre çözme)

· 5 parçalı otomatik hesaplama + Japonya hukuki dayanak çipleri (freelance_withholding vb.) + madde referansı (§204, fatura sistemi)

· Sayfa içi toast bildirimi; modal kapanır ve otomatik yeniden yüklenir

  • •İşletim ülkesi dışındaki hesaplar için otomatik USD dönüşümü (Migrasyon 037)

· Frankfurter API otomatik döviz kuru (depolama önbelleği TTL 24 saat) + yönetici manuel geçersiz kılma (banka TTS)

· method=paypal otomatik seçimi

· Yabancılar için: banka hesabı kartı gizlenir, PayPal e-posta kartı görüntülenir (bank_country == site_country)

  • •Geliştirici tarafından ödeme tutarı belirleme (/mypage/developer/earnings)

· Toplam bakiye → tutar girişi + tam tutar düğmesi + minimum tutar doğrulaması

· Satış geçmişi için 5 parçalı sütunlar, ödeme bilgi kutusu (işletme türüne göre uygulanan vergi kanunu)

  • •Ödeme geçmişinde USD dönüşümü ve döviz kuru yardımcı bilgisi (yönetici ve geliştirici ekranı)
  • •Satış trendi grafiği SVG çubuk grafik ile değiştirildi (div çubuklarının görünürlük sorununu çözdü)

Added

  • •tax_review_status tabanlı kilitleme politikası (geliştirici profili)

· not_submitted / rejected → düzenlenebilir

· pending / approved → düzenleme kilidi (asma kilit + uyarı)

· rejected → düzenlenebilir + "kaydedildiğinde inceleme kuyruğuna girer" ipucu

· Sunucu taraflı koruma: HTTP 423 Locked (arayüz atlatmayı engeller)

  • •update.php kısmi güncelleme güvenliği — yalnızca gönderilen alanların dinamik UPDATE'i (önceki: gönderilmeyen alanlarda NULL riski olan tam üzerine yazma)
  • •Resmi doğrulama sitesi bağlantısı (yönetici doğrulama ekranı + geliştirici profili)

· 🇯🇵 NTA tüzel kişi numarası yayın sitesi (https://www.houjin-bangou.nta.go.jp/)

· 🇯🇵 NTA nitelikli fatura düzenleyicileri yayın sitesi (https://www.invoice-kohyo.nta.go.jp/regno-search/)

· 🇰🇷 Kore Hometax işletme kaydı durumu sorgulama

· İşletme numarası/T numarası yanında tek tıkla kopyalama düğmesi

Added

  • •Yeni kayıt (/mypage/developer) — ülke seçimi formun en üstüne taşındı, işletim ülkesi karşılaştırma rehberi eklendi

· country == site_country → 🏠 yurt içi form (işletme türü / banka hesabı)

· country != site_country → 🌐 yabancı form (otomatik freelance + zorunlu PayPal e-posta)

· Alpine.js isDomestic getter, OPERATING_COUNTRY global sabiti

  • •Profil düzenleme (/mypage/developer/profile) — aynı yapı ([feedback_admin_user_parity] kuralı)

· Yabancılar: işletme bölümü gizlenir; ödeme bilgisi = yalnızca PayPal e-posta

· Uyruk kilitli (değişiklik için yönetime başvurun), üstte mod çipi

  • •Kayıt API'si sunucu taraflı zorlama — yabancılar için PayPal e-posta zorunlu, freelance zorunlu uygulanır, işletme/hesap değerleri göz ardı edilir

Added

  • •page.php token otomatik değişimi — tüm sistem sayfalarına toplu uygulandı

· {{COMPANY_NAME}} {{COMPANY_ADDRESS}} {{COMPANY_PHONE}} {{COMPANY_EMAIL}} {{COMPANY_REG_NUMBER}} {{COMPANY_REPRESENTATIVE}}

· {{SITE_NAME}} {{SITE_URL}} {{DOMAIN}}

· Yöneticinin business_ veya site_ settings değerlerinden otomatik eşleme

· Özel page_title / page_subtitle da token değişiminden geçer

  • •{{DOMAIN}} öncelik sırası — official_domain (şartlar ve politikalar için resmi alan adı) → site_url host

· Geliştirme sunucusu vos.21ces.com'da bile şartlar içeriğinde voscms.com görüntülenmeye devam eder

Added

  • •rzx_page_contents içindeki terms / privacy (her biri 13 satır) tamamen değiştirildi — RezlyX rezervasyon platformu şartları → VosCMS ücretsiz yazılım şartları
  • •18 maddelik kullanım şartları: amaç · tanımlar · yayın ve revizyon · tamamlayıcı kurallar · sözleşme kurulumu · gizlilik · bildirimler · şirket yükümlülükleri · kullanıcı yükümlülükleri · hizmet sunumu · değişiklikler · kullanım kısıtlamaları · lisans (ücretsiz kullanım) · veri sahipliği ve saklama · yayın telif hakları · sorumluluk reddi (AS-IS) · tazminat · uyuşmazlık çözümü
  • •10 maddelik gizlilik politikası: işleme amacı · kategoriler · saklama süreleri · üçüncü tarafa aktarım ve görev · veri sahibi hakları · güvenlik önlemleri · çerezler · koruma sorumlusu · ihlal tazminatı (PPC) · değişiklikler
  • •Japonya hukuku + Fukuoka İlçe Mahkemesi münhasır yargı yetkisi, APPI §33·§34·§35 atıflarıyla
  • •Şirket bilgileri token kullanır → yöneticide yapılan tek bir düzenleme şartları ve politikayı otomatik senkronize eder
  • •Japonca sürüm asıl metin; 13 dilde anadili resmi çeviriler
  • •Şirket bilgisi kartı — yalnızca 3 öğe: resmi ad, adres ve telefon (kayıt değişikliğinde şart revizyonu yükünden kaçınmak için temsilci/ad kaldırıldı)
  • •Saklama betikleri: scripts/voscms-terms-update.php · scripts/voscms-privacy-update.php

Fixed

  • •/theadmin/site/menus içindeki menus-api.php, vos'tan 99 satır geride kaldığı için menü kaydedilirken/düzenlenirken doğrulama ve çeviri atlanıyordu
  • •menus-api.php vos → market senkronizasyonu:

· mn_link_target_exists() — kısayol (bağlantı) menüleri yalnızca hedef sayfanın (sistem sayfası · rzx_page_contents) varlığı doğrulandıktan sonra kaydedilir

· Menü ID yeniden kullanım koruması — yeni ID'ler için eski rzx_translations.menu_item.{id}.* otomatik temizlenir

· Çeviri INSERT yöntemi: INSERT IGNORE → INSERT … ON DUPLICATE KEY UPDATE (üzerine yazma izni verir)

· title·url değiştiğinde: eski çevirilerin tamamen temizlenmesi + sistem sayfasıyla eşleşmede (config/system-pages.php) çevirilerin otomatik yeniden kaydı

  • •sync-to-market.sh INCLUDES'a 4 adet admin/site/menus*.php dosyası eklendi

Fixed

  • •rzx_contact_messages tablosu eksikti → 041_create_contact_messages.sql migrasyonu eklendi (IF NOT EXISTS, mevcut vos'ta etkisiz)
  • •contact-messages.php çift düzen sorunu — _head.php zaten sidebar+topbar çıktısı veriyordu ancak view doğrudan tekrar include ettiğinden <body> iki kez ve main iç içe oluşuyordu. vos deseni (baş = _head 1 kez, ayak = _foot 1 kez) uyarınca düzeltildi

Added

  • •Migrasyon 040 040_create_developer_platform.sql — 7 tablo toplu oluşturma: vcs_developers + vcs_developer_earnings/payouts/activity/notes + vcs_review_queue + rzx_mp_items (IF NOT EXISTS, ALTER 030~038 uygulandıktan sonra nihai şema)

· vos.21ces.com'daki vcs_developers CREATE TABLE migrasyonu olmaksızın yalnızca dump'ta mevcuttu — sonradan oluşturulan sitelerde ALTER 030 hatasını çözdü

  • •mypage/profile-sidebar.php senkronizasyonu — eski rzx_mkt_partners sorgusu → yeni vcs_developers sorgusu (hesabım sayfasında geliştirici etkinliği entegrasyonu)
  • •market index.php rota yaması (manuel, tam sync'ten kaçınmak için):

· /developer/ → /mypage/developer/ 301 yönlendirme (login/dashboard/my-items/submit/earnings/profile/logout eşleme)

· mypage/developer/{register|items|items/new|earnings|profile} + mypage/developer/items/{N} + mypage/developer/items/{N}/edit rotaları

  • •040 migrasyonu + profile-sidebar.php sync-to-market.sh INCLUDES'a eklendi
  • •market DB otomatik yedek (storage/backups/market-YYYYMMDD-HHMMSS/market_vos.sql) 040 uygulanmadan önce alındı

Added

  • •market.21ces.com şartları üçüncü taraf işletmeli marketplace modelini izler; VosCMS ücretsiz yazılım şartlarından ayrıdır
  • •18 maddelik şartlar (marketplace işletim kurallarını yansıtır):

· Md. 8: satış sözleşmesi alıcı–geliştirici arasında kurulur; şirket ödeme ve teslimat aracısı

· Md. 9: dijital ürünler için 4 iade istisnası (indirmeden önce · açıklama uyuşmazlığı 7 gün · kötü amaçlı yazılım onayı · sistem hatası) — Japonya Özel Ticaret İşlemleri Kanunu §15-2 açıklama gerekliliklerini karşılar

· Md. 10: açık komisyon yüzdesi yok ("ayrı yayınlanan oran" referansı; şart revizyonu olmadan oran ayarlanabilir)

· Md. 10: Gelir Vergisi Kanunu §204'e göre Japonya %10,21 stopajı; T numarası sahipleri için KDV marketplace tarafından doğrudan NTA'ya ödenir; işletim ülkesi dışındaki hesaplar → USD-PayPal transferi

· Md. 14: geliştirici bireysel şartları önceliklidir — platform işlemleri (ödeme, ödeme, iade prosedürü) hariç

· Md. 17: tazminat üst sınırı: önceki 6 ay toplam komisyon/ödeme

· Md. 18: Japonya hukuku + Fukuoka İlçe Mahkemesi münhasır yargı yetkisi

  • •12 maddelik gizlilik politikası (üç taraflı marketplace perspektifinden):

· Veri kategorileri — ortak / alıcılar / geliştiriciler (ortak) / Japonya'da ikamet edenler / yurt dışında ikamet edenler / teslimat: 6 kategori

· Saklama süreleri — üyeler 1 yıl · işlemler 7 yıl · ödemeler/stopajlar 7 yıl · kimlik doğrulama 5 yıl · loglar 6 ay · sorgular 3 yıl

· Veri işleyiciler — Stripe · KOMOJU · PayPal · Frankfurter · SendGrid · NTA açıkça belirtildi

· Uluslararası aktarımlar — ABD (PayPal/Stripe/SendGrid) · AB (döviz kurları) · diğer ülkeler (yerel ödeme geçidi/banka) açıkça belirtildi

  • •Betikler: scripts/market-terms-update.php · scripts/market-privacy-update.php (UPSERT — önce UPDATE; satır yoksa INSERT)
  • •market DB güncellendi (terms/privacy, rzx_page_contents'te her biri 13 satır), page-i18n çok dilli başlıklar ve alt başlıklar da uygulandı

Added

  • •Skin ayarı eşleme eksikliği düzeltildi (page_title · page_subtitle) — ayarlar ekranındaki değerler sayfada görünmüyordu
  • •Eksik _page-title-bg.php kısmi yeniden oluşturuldu (nginx error log'undaki include uyarısı giderildi)
  • •title_bg_type'a color seçeneği eklendi + title_bg_color alanı — resim/video boş olduğunda otomatik renk fallback
  • •content_bg=transparent olduğunda beyaz kart kutusu fallback kaldırıldı (max-w-5xl içeriğinin kart içinde dar görünmesi düzeltildi)
  • •--page-content-width CSS değişkeni otomatik çıktısı — "Bu sayfa hakkında" işlem çubuğu (vos-community) gibi dışarıdan include edilen bileşenler sayfanın content_width ile aynı genişlikte hizalanır

Fixed

  • •Ödeme sayfasında PDOException — rzx_mkt_partners'ta bulunmayan p.currency sütun referansı kaldırıldı
  • •Satış trendi grafiği görünmüyor sorunu — div çubuklarının % yüksekliği ortama göre neredeyse 0px oluyordu → SVG viewBox tabanlı grafikle değiştirildi (minimum 4px görünürlük sağlandı)
v2.6.1 2026-05-13 · 5 ay önce
Geliştirici Portalı Genişletme · Marketplace Admin i18n · Genel Sayfa Etkileşimi

Added

  • •Geliştirici sayfam öğe detay ekranı (/mypage/developer/items/{id}) — istatistikler, sürüm geçmişi, indirme eğilimleri
  • •Geliştirici öğe düzenleme ekranı (/mypage/developer/items/{id}/edit) — items-new ile aynı 3 sekmeli arayüz, mevcut değerler önceden doldurulmuş, yeni ZIP yükleme ayrı bir akışla yapılır
  • •Yeni API: /api/developer/item-update — name(JSON), short/desc(JSON), tags(JSON), price, license, repo/demo URL, bağımlılıklar, minimum sürüm, icon, screenshots günceller
  • •Yeni API: /api/developer/request-payout — ödeme talebi
  • •Yeni API: /api/developer/update-bank — kendi hesap bilgilerini güncelleme
  • •Yeni API: /api/developer/issue-reply — Q&A yanıtı gönderme (geliştiricinin kendi yanıt kanalı)
  • •Admin geliştirici detay ekranı (/theadmin/developers/show) — işletme/hesap/belge kartı + belge inceleme (onay/red) modu
  • •Kayıt ve girişte e-posta doğrulama (/verify-email) güçlendirildi + Auth::register'da company alanı kaydedildi
  • •13 dil resmi çeviri anahtarları eklendi (show_edit_btn, items_edit_*, items_back_detail, api_updated, vb.)

Added

  • •Widget içinde doğrudan yorum, sorun ve Q&A gönderme formları gösteriliyor (ayrı sayfaya geçiş gerekmiyor)
  • •Yalnızca alıcılar gönderebilir — alıcı olmayanlar formu görür ancak gönderim sırasında bilgilendirme mesajı alır
  • •Q&A yanıtları iş parçacığını (yanıtlara yanıt) destekler — DB migrasyonu 035 (parent_reply_id)
  • •Yeni API'ler: /plugins/vos-market/views/api/item/post-issue.php, post-reply.php, post-review.php
  • •Core rzxlib/Core/Helpers/Notifications.php — bildirim yardımcısı (DB migrasyonu 034 ile eşleşir)

Added

  • •Tüm ekranlara tam 13 dil desteği uygulandı: /theadmin/market/licenses, sync, orders, settings, submissions, partners/payouts, items
  • •Marketplace ayarlar ekranı — "Partner" etiketi "Developer" olarak birleştirildi (yalnızca görünür metin; değişken adları uyumluluk için korundu)
  • •Marketplace öğe adı girişi paylaşılan çok dilli giriş modalını kullanıyor — name_json 13 dilde eş zamanlı düzenleniyor
  • •plugins/vos-market/lang/* — yeni eklenti düzeyinde dil havuzu
  • •resources/lang/*/marketplace.php — 13 dilin tamamı kendi dillerinde çevrildi (i18n tam çeviri kuralına uygun)

Added

  • •033_developer_notes_activity.sql — geliştirici başına notlar ve etkinlik günlüğü
  • •034_notifications.sql — rzx_notifications tablosu (kullanıcı bildirimleri)
  • •035_issue_reply_thread.sql — rzx_mkt_issue_replies.parent_reply_id sütunu eklendi (iş parçacıklı yanıtlar)

Fixed

  • •/Market?item={slug} slug eksik — items-show'da özel tek sütun sorgusuyla düzeltildi
  • •Öğe güncelleme API'sindeki icon_url sütun adı gerçek icon sütun adına düzeltildi
  • •Marketplace ayarlar sayfası boş — rzx_mkt_settings için eksik migrasyon 005 uygulandı
v2.6.0 2026-05-06 · 6 ay önce
Üye Kullanıcı Adı · vos-story Eklentisi · Hesabım Yeniden Tasarımı · Harici Görsel Yansıtma · Hosting Ayarları Entegrasyonu

Added

  • •VARCHAR(12) users.username + UsernameValidator (en az 6 karakter, özel karakter kısıtlaması)
  • •Giriş sonrası ilk ziyarette kapı modalı (AJAX /api/username-set)
  • •13 dil için resmi çeviriler (İngilizce geri dönüş kaldırıldı)

Added

  • •/profile/{uuid} → /story/{username} 301 yönlendirme
  • •Bağlam menüsü etiketi "Profili Görüntüle" → "Hikayeyi Görüntüle" olarak değiştirildi

Added

  • •Çekirdekten ayrıştırılan vos-story eklentisi — /story/{username} sayfasına özel
  • •Facebook tarzı başlık + 5 sabit sekme (Tümü / Bilgi / Fotoğraflar / Takipçiler / Takip edilenler)
  • •Gönderi CRUD + SNS akışı (vos_story_posts, body_format = text/html)
  • •TEXT/EDIT değiştirici + Summernote entegrasyonu
  • •Görsel ekler (birden fazla) + Fotoğraflar sekme ızgarası
  • •Beğeni + yorum sistemi
  • •Story skin sistemi (skins/story/default) + kullanıcı başına jeton (/mypage/story)
  • •Admin politika sayfası (/admin/vos-story/policy)
  • •Sayfa eylem çubuğu: i18n + konum (ana içerik sonu) + içerik genişliği jetonu
  • •2:1 ızgara (yalnızca içerik alanı) — sağ taraf: reklamlar + arkadaşlar (Takipçiler/Takip edilenler sekmeleri)
  • •Başlık eylem düğmeleri — yalnızca simge ([Story Ayarlarım] / [Profili Düzenle] / [Takip et])

Added

  • •D-1: 4 menülü kenar çubuğu (Pano / Hikaye / Hesap / Mesajlar)
  • •D-2-A: Yeni pano — 8 durum kartı + 8 sekme navigasyonu + hesap bilgisi sekmesi
  • •D-2-B: Kaydedilenler / Gelen kutusu / Arkadaşlar sekmeleri (her birinde "Tümünü Görüntüle" bağlantısı)
  • •D-2-C: Kaydedilen / Gönderilerim / Yorumlarım sekmeleri (pano + Story + sayfa birleşik)
  • •D-2-D: Otomatik giriş (remember tokens) yönetimi

Added

  • •Ortak yardımcı rzx_mirror_external_images() — cURL + SSRF koruması + GD yeniden boyutlandırma
  • •E-1: Kaydedilen anlık görüntü yakalama + harici görsel emilimi
  • •E-2: Story gönderisi oluşturulurken emilim (story_attachments kaynak sütunu)
  • •E-3: Pano gönderisi oluşturulurken emilim
  • •E-4: Sayfa içeriği oluşturulurken emilim
  • •Görsel işaretleme: data-source-original, data-source-mirrored

Added

  • •Hosting yönetim kenar çubuğu — son [Ayarlar] girişi, hizmet talep sayfasının 4 sekmesine (general/domain/hosting/addons) yönlendirir
  • •İade politikası → Sistem Ayarları → Genel → ayrı kart (vergi ayarlarından izole edildi)
  • •rzx_settings.refund_policy tekli anahtar depolaması
  • •13 dil için settings.refund.* anahtarları

Added

  • •Geçiş 009: page_contents.created_by / updated_by sütunları
  • •Tüm sayfa düzenleme ekranlarında (admin/customer/system) otomatik kaydediliyor

Added

  • •Gönderi sayısı — pano gönderileri için ayrı rzx_translations yapısını tanıyor (board_post.{id}.title)

Added

  • •Hosting başına depolama kotası / uyarı eşiği / politika (block/notify/none) için yönetici ayarları
  • •Hesabım sayfasında kullanım halka grafiği
  • •scripts/db-quota-monitor.php arka plan monitörü

Added

  • •VosCMS yeniden kurulum düğmesi — yönetici hosting sekmesi
  • •Hosting [Durum] değişikliği eylemi + günlük
  • •"Sunucu Bağlantı Bilgileri Ayarları" düzenleme formu kaldırıldı (gereksiz bilgi açığa çıkmasını engeller)

Fixed

  • •Kaydedilen add_scrap ağ hatası — vos-story API dosyası require çakışması
  • •Kaydetme kartı — ana hat + sil/düzenle simgeleri (çöp kutusu)
  • •Gönderi sayısı ile liste arasındaki uyumsuzluk (eksik durum filtresi)
  • •nick_name eşleşmesi kaldırıldı (user_id NULL olan seed verilerinin yanlış tanınmasını önler)
  • •Hesabım Story menüsü konumu — top → main (eklenti otomatik tanıma)
  • •Story menü simgesi çekirdek formatında (tam <path> etiketi)
  • •Eklenti sekmesi settings SELECT'te key sütununun eksikliği (iki bölüm gizlendi)
  • •hosting_status eylemi 500 — yardımcı işlev tanımı konumu
  • •Sayfa eylem çubuğu — içerik genişliği jetonu uygulandı
  • •Yeni bir gönderi yayınlandığında mevcut gönderilerin kaybolduğu hata (akış anında güncelleme)
v2.5.0 2026-05-01 · 6 ay önce
Domain Ekleme Modalı + Muhasebe Defteri + Eklenti Faturalandırma + Danışmanlık Altyapısı

Added

  • •Hosting detayı → Domain sekmesi → + Domain Ekle butonu → modal
  • •Seçenekler: ücretsiz alt alan adı / yeni kayıt / mevcut domain bağlama
  • •WHOIS araması (/api/domain-check.php yeniden kullanıldı) + TLD bazında fiyat gösterimi
  • •Ödeme: kayıtlı kart (hosting PAY.JP müşterisini yeniden kullanarak) veya yeni kart (PAY.JP Elements)
  • •%10 tüketim vergisi otomatik ayrımı (ara toplam / vergi / toplam)
  • •Ödeme tamamlandığında hosting sub metadata.added_domains[] içine ekle (ayrı sub oluşturulmaz)
  • •Otomatik iade güvenlik ağı — DB işleme hatasında PAY.JP taksiti otomatik iade edilir

Added

  • •Başlangıç~bitiş tarihi + Kontrol butonu (DNS A/CNAME → kendi bölgemiz veya Cloudflare IP aralığıyla eşleşme)
  • •Otomatik yenileme geçişi + Yenileme talep butonu (domain başına)
  • •registrar_pending / manual_attach_pending: kontrol butonu → "Beklemede" rozeti
  • •"Eklenen Domain" mor rozeti

Added

  • •Hosting yönetim kenar çubuğu: 2. öğe yeni eklendi
  • •Birleşik liste: type='domain' sub + hosting sub.added_domains[] hepsi kronolojik sırayla gösterilir
  • •İstatistik kartları (toplam/beklemede/tamamlandı) + filtreler (durum/seçenek/arama)
  • •Eylemler: [Kayıtlı Olarak İşaretle] / [İptal İşle] (iptal sırasında: PAY.JP iadesi + iade satırı INSERT)
  • •Kullanıcı adı otomatik şifre çözme

Added

  • •Hosting yönetim kenar çubuğu: 3. öğe yeni eklendi
  • •rzx_payments tabanlı işlem defteri — gelir/iade/net gelir/vergi istatistik kartları
  • •Japonya tüketim vergisi beyanı için otomatik net tutar hesaplama (vergili fiyat → net = total × 100/110, vergi = total × 10/110)
  • •Son 12 ay trend tablosu + işlem defteri tablosu + filtreler/sayfalama

Added

  • •Sayfam eklenti sekmesi: "Başvurulabilir" bölümü (iş e-postası otomatik hariç tutulur)
  • •Fiyata göre eylemler:
  • •Ücretsiz (kurulum desteği): admin bildirimi + order_logs
  • •Teklif (özelleştirme): "Teklif İste"
  • •Sabit yinelenen (1 yıl teknik destek): kart ödeme modalı (_addon-pay-modal.php)
  • •Ödeme tamamlandığında addon sub otomatik oluşturulur + payments kaydı
  • •Zaten aktif sub etiketiyle eşleşme: başvuru butonu otomatik devre dışı
  • •install_info satırı sağında [Admin'e Git / Siteye Git] butonları

Added

  • •DB şeması: uk_payment_order UNIQUE kaldırıldı → uk_payment_key (charge_id) UNIQUE ile değiştirildi
  • •Sipariş başına birden fazla ödeme satırına izin verildi (hosting + domain + eklenti birikimli)
  • •İade sırasında: ödenen satır değişmez, ayrı iade satırı INSERT (status='refund', muhasebe bütünlüğü)
  • •Japonya 7 yıllık saklama yükümlülüğü + PAY.JP satıcı itiraz yanıt standardı karşılandı

Added

  • •composer require minishlink/web-push
  • •Admin/supervisor için VAPID tabanlı push gönderme yardımcısı
  • •Süresi dolmuş endpoint otomatik temizleme + rzx_push_messages'a otomatik kayıt
  • •Çağrı noktaları: pay_domain (domain ödemesi tamamlandı), service-order (domain kayıt talebi), request_addon

Added

  • •Kendi bölge alt alan adı otomatik eşleşme (wildcard CNAME tanınır)
  • •Cloudflare IPv4 15 CIDR aralığı eşleşmesi (proxy yanıtında)
  • •"already_refunded" yanıtı başarı olarak işlenir (PAY.JP zaten iade etmişse)

Added

  • •Alt sorgu rzx_payments toplamlarını sorgular (paid − refunded)
  • •Hosting temel ödemesi + domain ekleme + eklenti ödemesi birikimli görünüm

Added

  • •admin_cancel_addon — sub status='cancelled' + PG iadesi + iade satırı INSERT
  • •PG yönlendirme: ödeme satırının gateway sütununa göre (PG değişikliği sonrası da güvenli)

Removed

  • •Japonya 7 yıllık saklama yükümlülüğü + PAY.JP itiraz yanıt politikasına göre admin UI'daki tüm "sil" butonları kaldırıldı
  • •Çöp kutusu ikonu + adminDeleteAddon JS + admin_delete_addon API + 13 dilde 4 etiket hepsi kaldırıldı
  • •Yalnızca "İptal" kullanılır — veri satırları asla silinmez (DELETE)

Fixed

  • •Translator yer tutucu iki nokta üst üste öneki çakışması — [':count' => N] → ['count' => N] toplu düzeltildi
  • •PayjpGateway::refund() metadata[refund_reason] PAY.JP tarafından reddedildi → refund_reason olarak değiştirildi
  • •service-manage.php admin izin kontrolü — role === 'admin' → role IN ('admin','supervisor') 5 eylemde düzeltildi
  • •Hizmet siparişi domain sekmesi: iade sonrası muhasebe kartı negatif gösteriyor → SQL mantığı düzeltildi (status='paid' / 'refund' ayrı toplam)

Added

  • •ssh.21ces.com Cloudflare Tunnel kayıtlı (Public Hostname: SSH → localhost:22)
  • •Harici PC: cloudflared access ssh --hostname ssh.21ces.com veya ~/.ssh/config'de ProxyCommand
  • •Sunucu tarafı: PermitRootLogin no, thevos anahtarı kayıtlı
v2.4.3 2026-04-29 · 6 ay önce
VosCMS Otomatik Kurulum + Hosting Hesabım Yedekleme / phpMyAdmin

Added

HostingProvisioner.php installVoscms() artık zip dağıtımının ardından install-core.php'yi step 3 → step 4 sırasıyla çağırıyor (daha önce yalnızca step 2):

  • •Yeni runInstallCoreSteps() — _db POST geri dönüşü kullanarak oturum bypass + .installed işaretçisi doğrulama
  • •Yeni callInstallCore() — HTTP loopback (port 80, Cloudflare edge SSL kullanımı; rate limit durumunda origin sertifikası yokluğunu ele alma)
  • •Yeni appendHostingEnv() — install-core.php .env'i üzerine yazdıktan sonra HOSTING_* değişkenlerini yeniden enjekte etme
  • •Kurulum tamamlandığında welcome.html otomatik silme (VosCMS index.php'nin öncelikli çalışması için)
  • •Ödeme akışı service-order.php:567-576 — kurulum başarılı olduğunda addon metadata'ya install_completed_at ve install_admin_url otomatik kayıt (hesabım sekmesi görüntüleme tetikleyicisi)

Added

admin/service-orders/detail.php:175-260 + partials/addon.php:

  • •Ek hizmetler sekmesindeki "Kurulum Desteği" addon'unda iki düğme:
  • •VosCMS Kur (mor) — install_info var ve install_completed_at yokken
  • •Yönetici Sayfası (yeşil) — kurulum tamamlandıktan sonra admin URL'yi yeni sekmede aç
  • •API aksiyonu admin_run_voscms_install — HostingProvisioner.installVoscms() doğrudan çağrısı, DB kimlik bilgisi metadata.server.db veya müşteri .env geri dönüşü
  • •Başarı durumunda: addon metadata + voscms_installed order_log kaydı

Added

customer/mypage/service-partials/hosting.php:

  • •🟢 Site Yedekleme düğmesi — service-manage.php?action=request_backup (yeni)
  • •mysqldump → DB dump + zip paketleme (public_html, .env, sql)
  • •İmzalı indirme URL'si (HMAC, 10 dakika geçerli) — api/backup-download.php yeni
  • •7 günden eski yedekler otomatik temizleme
  • •🟣 phpMyAdmin Aç — https://pma.voscms.com/?lang=<user_locale> yeni sekmede
  • •nginx vhost: pma.voscms.com.conf yeni (Cloudflare Tunnel *.voscms.com wildcard ile otomatik yönlendirme)
  • •Kullanıcının kendi DB kimlik bilgileriyle giriş
  • •DB bağlantı bilgilerini gösterme (host / DB adı / kullanıcı / şifre toggle)
  • •13 dil i18n: btn_site_backup, btn_open_phpmyadmin, confirm_site_backup, backup_in_progress, backup_ready, f_password, password_notice, f_protocol

Added

customer/mypage/service-partials/_setup-monitor.php:

  • •Hosting kurulum → VosCMS otomatik kurulum adımlarını ayırma
  • •system_imported siparişler (yöneticinin kendi kaydettiği sistem hosting, ör. vos.21ces.com) anında etkinleştirilir — izleme kutusu gösterilmez
  • •13 dil yeni i18n: setup_step_voscms_install

Changed

rsync exclude eklemeleri:

  • •5 dahili eklenti (hosting müşteri sitelerine girmemeli):
  • •vos-developer, vos-hosting, vos-license-server, vos-market, vos-salon
  • •7 reservation migrasyon SQL'i (hosting müşterileri rezervasyon sistemi kurmuyor):
  • •001_create_reservation_tables.sql, 011_seed_service_translations.sql, 012_seed_service_translations_p2.sql, 013_add_source_to_reservations.sql, 014_add_payment_status_to_reservations.sql, 015_create_reservation_core.sql (yeni), 016_alter_reservation_services.sql, 024_reservations_bundle_columns.sql

dev dosyaları silme eklemeleri:

  • •admin/ dizini (offline.html artığı) — boş dizin nginx dizin indeksleme ile 403 oluşturuyor, yalnızca root /offline.html sw.js tarafından referans alınıyor
  • •Temel kodlama → obfuscate.php (eski ionCube EVAL çalışma zamanında takılıyordu, USE_IONCUBE=1 olduğunda yalnızca ionCube)

Changed

001_create_base_tables.sql'ün hem base hem reservation tablolarını tek dosyada oluşturduğu yapının ayrılması:

  • •Değiştirildi: 001_create_base_tables.sql — yalnızca 5 çekirdek tablo (rzx_admins, rzx_users, rzx_member_grades, rzx_settings, rzx_migrations) + çekirdek seed'ler (member_grades varsayılan, settings varsayılan)
  • •Yeni: 015_create_reservation_core.sql — 9 rezervasyon tablosu (rzx_categories, rzx_services, rzx_service_options, rzx_reservations, rzx_payments, rzx_point_transactions, rzx_business_hours, rzx_holidays, rzx_staff_positions, rzx_staff) + rezervasyon seed'leri (business_hours, point_*)

Hosting dağıtım build'inde 015 hariç tutulur → rzx_reservations oluşturulmaz → admin/dashboard.php:25-27'de $hasReservations = false → takvim otomatik gösterilmez.

Rezervasyon sistemi kullanan siteler (voscms.com, RezlyX vb.) her iki SQL dosyasını da uygular → değişiklik yok.

Changed

config/templates/nginx-vhost.conf.tpl + HostingProvisioner addHttpsToVhost():

  • •Eski: port 80 (HTTPS yönlendirme) + port 443 (gerçek içerik) → Cloudflare Tunnel + 80→443 yönlendirme ile sonsuz döngü oluşuyordu
  • •Yeni: 80/443 birleşik tek server bloğu, aynı içerik sunuluyor, yönlendirme yok
  • •fastcgi_read_timeout 60s → 300s (toplu INSERT'lerde nginx zaman aşımını önler)

Changed

  • •provision-hosting.php (CLI backfill aracı): hosting abonelik metadata'sını otomatik güncelleme (hosting_provisioned, server.{ftp,db,env}) — daha önce yalnızca service-order.php'deki _autoProvisionHosting çalışıyordu
  • •5 dahili eklenti + admin/ dizininin otomatik kaldırılması

Added

Yeni scripts/install-cli.php:

  • •Hosting provisioning sonrası install-core.php otomatik çağrısı backfill
  • •DB kimlik bilgileri: subscription metadata öncelikli, yoksa müşteri docroot'undaki .env geri dönüşü
  • •Kullanım: sudo -u www-data php scripts/install-cli.php --order=<ORDER>
  • •Başarı durumunda: addon metadata'ya install_completed_at otomatik kaydı + order_logs'a voscms_installed aksiyonu

Fixed

  • •Kart ödeme dalında _autoProvisionHosting() çağrısının eksikliği — eklendi
  • •Ödeme metadata'sındaki install_info.admin_pw düz metin olarak görünüyordu → hesabım ve yönetici tarafında toggle (👁) deseni birleştirildi

Migration Notes

  • •Harici hosting müşterileri: ayrıca bir işlem gerekmiyor. voscms-2.4.3.zip build'i temiz zip kullanıyor.
  • •Ana site (voscms.com): değişiklik yok (rezervasyon SQL'inin her iki dosyası da uygulanıyor).
  • •Mevcut hosting müşterileri (dwhahn vb.): temiz yeniden kurulum için deprovision + reprovision önerilir (ayrımdan sonra yeni zip uygulama).
  • •Manuel temizlik: /etc/nginx/sites-available/pma.voscms.com.conf yeni eklendi — doğrudan ana sisteme deploy edilmeli (rsync dışı).
v2.4.2 2026-04-29 · 6 ay önce
Hosting Otomasyonu Ödeme Hook'u + Aktivite Günlüğü i18n

Added

service-order.php dosyasında ödeme tamamlanır tamamlanmaz çağrılır:

  • •Yeni fonksiyon _autoProvisionHosting($pdo, $prefix, $orderId, $orderNumber) — ödeme işleminin dışında çalışır (VT bütünlüğü izole edilmiştir; başarısız olsa bile siparişin kendisi etkilenmez)
  • •Yalnızca domain_option = 'free' anında kurulur (Cloudflare alt alan adı — DNS otomatik kaydı zaten tamamlandığından hemen mümkündür)
  • •new (alan adı satın alındıktan sonra NS değişikliği bekleniyor) / existing (mevcut alan adı NS değişikliği bekleniyor) deferred durumundadır — yönetici, alan adı etkinleştirme anında ayrıca tetikler
  • •'install' eklentisinde install_info varsa voscms dosyaları dağıtılır + .env otomatik oluşturulur (install-core.php'nin adım adım oturum akışının (2–5. adımlar) otomasyonu, voscms kurulum pipeline'ının tamamen yeniden tasarlanmasını gerektiren büyük bir çalışmadır — Faz 5'e ertelendi; kullanıcı ödeme sonrası https://<alan-adı>/install.php adresine erişir → .env'e önceden enjekte edilmiş VT bilgileriyle sihirbazı tamamlar)
  • •ftp/db/env bilgileri hosting aboneliğinin metadata.server alanına otomatik kaydedilir → Hesabım hosting sekmesinde otomatik görüntülenir (UI değişikliği gerekmez)
  • •order_logs eylemleri: hosting_provisioned / hosting_provision_skipped / hosting_provision_deferred / hosting_provision_failed

Çağrı sırası: ödeme commit → _autoProvisionHosting() → _autoProvisionMailDomain()

Added

Yönetici hizmet siparişi detay sayfasındaki (detail.php:498-528) $actionLabels 8'den 31 girişe genişletildi. Aktivite günlüğünde ham eylem kodlarının (ör. mail_account_added) görünmesi sorunu düzeltildi.

Yeni eklenen eylem eşlemeleri:

  • •Posta: mail_account_added/deleted, mail_address_changed, mail_provisioned/_skipped/_failed, mail_domain_migrated/activated, bizmail_upgrade_request
  • •Hosting: hosting_provisioned, hosting_provision_skipped/deferred/failed, hosting_deprovisioned
  • •Eklentiler: admin_add_storage_addon, admin_delete_addon, storage_addon_paid/requested
  • •Sistem: customer_notified, setup_email_sent, server_info_updated, bulk_extended, manual_capacity_period_fix

Eylem başına renk anlamları: green (tamamlandı/olumlu), amber (beklemede/uyarı), red (başarısız/silindi), blue (bilgi/bildirim), violet (yönetici/özel), zinc (nötr).

23 i18n anahtarı — services.admin_orders.act_* — ko/ja/en dillerine eklendi (operatör sayfası). Diğer 10 dil İngilizce fallback kullanır.

Changed

Hosting otomatik sağlanması sırasında VosCMS otomatik kurulumu yalnızca dosya dağıtımı + .env otomatik oluşturma işlemini gerçekleştirir. install-core.php'nin adım adım oturum akışının (2–5. adımlar) otomasyonu, voscms kurulum pipeline'ının tamamen yeniden tasarlanmasını gerektirdiğinden Faz 5'e ertelendi. Ödeme sonrası kullanıcı https://<alan-adı>/install.php adresine erişir → VT bilgileri .env'e önceden enjekte edilmiş hâlde sihirbazı tamamlar.

installVoscms() dönüş değeri değiştirildi — artık install_url + note mesajı döndürüyor.

v2.4.1 2026-04-29 · 6 ay önce
Hosting Sanallaştırma Otomatik Provizyon (Aşama 1–3)

Added

HostingProvisioner.php — Hosting siparişinde otomatik kurulum yapan ana sınıf. 9 adımlı işlem (hata durumunda ters sırada geri alma):

  • •Linux kullanıcısı oluşturma (vos_<order_number>, 32 karakter sınırı içinde, büyük/küçük harf korunarak)
  • •Dizin yapısı: /var/www/customers/<order>/{public_html,logs,tmp} (chmod 750/2775/750/1770)
  • •Disk kotası (setquota -u <user> <soft> <hard>, hard = soft × 1.1)
  • •Dizin çakışma denetimi: mevcut nginx vhost / reserved_subdomains ile çakışma varsa reddeder
  • •1,9 TB SSD /var/www bağlama (ext4 + noatime + usrquota,grpquota)
  • •Merkezi sudoers (/etc/sudoers.d/voscms-hosting-provisioner) — www-data, useradd/setquota/nginx gibi root komutlarını NOPASSWD ile çalıştırır
  • •Komut başına argüman deseni kısıtlaması (vos_, /var/www/customers/, *.conf) — visudo doğrulamasını geçer

CLI aracı scripts/provision-hosting.php:

php provision-hosting.php SVC260428AE7476 hotel.com 1GB
php provision-hosting.php --order SVC260428AE7476           # otomatik DB araması
php provision-hosting.php --deprovision SVC260428AE7476 hotel.com
php provision-hosting.php --install-voscms <order> <domain> <capacity>

Şablonlar config/templates/:

  • •nginx-vhost.conf.tpl — HTTP + ACME challenge konumu + kullanıcı başına FPM soketi
  • •welcome.html.tpl — aktivasyon karşılama sayfası

Added

Her hosting PHP'yi kendi kullanıcısı altında çalıştırır (siteler arası güvenlik ihlalini önler) + Cloudflare proxy'sinin arkasında bile SSL otomatik olarak düzenlenir.

config/templates/php-fpm-pool.conf.tpl:

  • •user = vos_<order> / group = www-data — UID yalıtımı
  • •listen = /var/run/php/<order>.sock — kullanıcı başına soket
  • •pm = ondemand — düşük trafikli hosting için bellek açısından verimli
  • •php_admin_value[open_basedir] — erişim yalnızca site dizini + /tmp + /usr/share/php ile sınırlı
  • •disable_functions — exec, passthru, shell_exec, system, proc_open, popen, pcntl_exec
  • •session.save_path / upload_tmp_dir — kullanıcı dizinine yalıtıldı
  • •env: HOSTING_ORDER / HOSTING_USER / HOSTING_DOMAIN

Let's Encrypt SSL — Cloudflare DNS-01 challenge:

  • •python3-certbot-dns-cloudflare eklentisi
  • •/etc/letsencrypt/cloudflare/credentials.ini (root 0600, .env'den CLOUDFLARE_API_TOKEN)
  • •Cloudflare proxy / dış erişilebilirlikten bağımsız olarak düzenlenir
  • •HTTPS sunucu bloğu otomatik eklenir (TLS 1.2/1.3, güçlü şifre, HSTS, X-Frame-Options, X-Content-Type-Options)
  • •HTTP → HTTPS 301 otomatik yönlendirme
  • •certbot.timer günde iki kez otomatik yeniler (zaten etkin)

Added

Her hosting siparişi için DB + kullanıcı yalıtımı.

  • •hosting_admin MySQL hesabı (bir kez oluşturulur, ALL PRIVILEGES + GRANT OPTION) — yalnızca DB yönetimi için
  • •DB adı/kullanıcı = vos_<order> (Linux kullanıcı adıyla aynı)
  • •Şifre: 32 hex rastgele (bin2hex(random_bytes(16)))
  • •GRANT ALL PRIVILEGES ON vos_<order>.* TO vos_<order>@localhost — yalnızca kendi DB'sine erişim
  • •Yalıtım doğrulaması: diğer hosting DB / voscms_prod erişimi Access denied 1044 döndürür

VosCMS otomatik kurulum (installVoscms() — --install-voscms ile veya addon'da install_info olduğunda tetiklenir):

  • •En son voscms-dist/voscms-X.Y.Z.zip paketini açar → public_html
  • •.env otomatik oluşturur: APP_KEY=base64:<32 bayt> / DB bilgisi / HOSTING_ORDER enjekte edilmiş
  • •İzinler: vos_:www-data, .env chmod 640
  • •install-core.php'yi başsız çağırır (şu anda 301 yönlendirme sorunu var, Aşama 4 ile birlikte çözülecek)

Verified

provision DEMO260429FULL demo07.21ces.com 1GB --install-voscms:

  • •✅ Kullanıcı vos_DEMO260429FULL (UID yalıtımı, www-data grubu)
  • •✅ Disk kotası 1GB soft / 1,05GB hard
  • •✅ PHP-FPM pool kendi soketi
  • •✅ nginx vhost (HTTP + HTTPS, HSTS)
  • •✅ Let's Encrypt SSL (/etc/letsencrypt/live/demo07.21ces.com/)
  • •✅ MySQL DB vos_DEMO260429FULL + kullanıcı (yalıtım doğrulandı)
  • •✅ VosCMS 2.3.9 dosyaları + .env dağıtıldı

deprovision: Tüm kaynaklar temizce kaldırıldı (kullanıcı/home/DB/FPM pool/nginx/SSL).

v2.4.0 2026-04-29 · 6 ay önce
Barındırma Otomasyonu Altyapısı + Takvim Faturalandırması + Posta Sistemi Tamamlandı

Added

Sektörün standart yıllık faturalama yöntemi (kayıt tarihinden bir yıl sonraki aynı tarihe kadar) yerine artık takvim ay sonu kapanışı (bir sonraki ayın 1'inden bitiş ayının son gününe kadar) kullanılıyor. Aynı ay kaydolan kullanıcılar aynı bitiş tarihini paylaştığından cron toplu işleme ve muhasebe kapanışı basitleşiyor. Japonya barındırma standardı (月末締め翌月1日請求) modeli.

  • •VT: rzx_subscriptions.billing_start DATETIME NULL sütunu eklendi (normal faturalama başlangıç tarihi)
  • •Yardımcılar: _proratedFirstAmount (aylık birim ÷ 30 × kalan gün), _calendarBillingStart (bir sonraki ayın 1'i), _calendarExpires (son gün 23:59:59)
  • •Sipariş formu: hosting_prorated barındırma ödeme kalemlerine otomatik ekleniyor (örn. 4/2 kayıt, 12 ay ¥1.000/ay → ilk ay ¥967 + 12 ay normal ¥12.000 = ¥12.967)
  • •Alan adları yıllık faturalamayı korur (1 yıllık kayıt döngüsü); barındırma, posta, bakım ve eklentiler takvim faturalaması kullanır
  • •service-order.php'deki -1 second → -1 day işlemi de birleştirildi
  • •Ek hizmetler (fazladan web depolama) da aynı günlük hesaplama + normal N aylık toplamı kullanır, barındırma bitiş tarihiyle otomatik senkronize edilir

Added

ConoHa VPS (133.117.72.149) üzerinde Postfix + Dovecot + Rspamd + Roundcube + OpenDKIM + Let's Encrypt kurulumu. mail-tester 10/10, FCRDNS doğrulandı. Siparişte otomatik alan adı kurulumu.

  • •Otomatik DNS kaydı (CloudflareDns.php) — A / MX / SPF / DKIM / DMARC 5 kaydı tek seferde
  • •DKIM anahtarı oluşturma — mx1 SSH rspamadm dkim_keygen (özel ed25519 anahtarı storage/keys/mailsync_ed25519, www-data sahibi, 0700)
  • •3 modlu sağlama (MailDomainProvisioner.php): free (alt alan adı anında) / new (alan adı satın alındı, yönetici aktivasyonu) / existing (NS değişiklik kılavuzu). Durum makinesi: existing_pending / new_pending / active
  • •Parola: SHA512-CRYPT ({SHA512-CRYPT}$6$...) — Dovecot uyumlu tek yönlü hash. Eski enc: (encrypt işlevi) parolalar için migrasyon betiği: scripts/migrate-mail-passwords.php
  • •mx1 senkronizasyon cron'u (scripts/mail-sync-to-mx1.php) — voscms_prod → mx1 mail_lookup virtual_users her 5 dakikada bir. Posta işlemlerinden hemen sonra arka plan senkronizasyonu için anlık tetikleyici (triggerMailSyncToMx1()) da eklendi
  • •Cron otomatik kaydı: /etc/cron.d/voscms-mail-sync
  • •Bildirimler: yönetici (sağlama gerekli) / müşteri (posta hazır) HTML posta şablonları (MailNotifier.php)

Added

Temel posta / iş postası barındırmayla birlikte yönetiliyor. Aynı adresin hem posta aboneliğinde hem de barındırma meta verilerinde saklanıp kullanıcı arayüzünde çift görüntülenmesi sorunu düzeltildi (tek doğruluk kaynağı: posta aboneliği).

  • •Web posta düğmesi — Roundcube ?_user=adres GET parametresiyle kullanıcı adı ön doldurma, target="_blank". URL önceliği: metadata.mail_server.webmail_url → WEBMAIL_URL env → varsayılan https://mail.voscms.com/
  • •E-posta değiştirme düğmesi — yazım hatası düzeltme amaçlı. Alan adı sabittir; yalnızca yerel bölüm değişir. Aynı siparişin tüm posta + barındırma meta verileri senkronize edilir
  • •Yineleme giderme mantığı (mail.php) — _seenAddresses her adresi yalnızca bir kez gösterir, posta aboneliği önceliklidir
  • •service-detail.php'deki sanal barındırma → posta dönüşümü yalnızca gerçek bir posta aboneliği olmadığında çalışır (geriye dönük uyumluluk)
  • •service-order.php artık yeni kayıtlarda hosting metadata.mail_accounts kaydetmiyor (posta aboneliği tek kaynaktır)

Added

Hesabım ek hizmetler sekmesinde barındırma depolama satın alma. PAY.JP müşteri kaydı + chargeCustomer.

  • •Modal: depolama seçimi (1 GB / 3 GB / 5 GB) + kart bilgisi girişi (payjp.js v2 Elements)
  • •Kart kaydet / başka kartla öde / kayıtlı karta dön — geçiş
  • •Süresi dolmuş/reddedilen kartların otomatik algılanması (expired_card, card_declined, invalid_* vb. PAY.JP hata kodları) → kart formu otomatik açılır + kılavuz başlığı
  • •Kart sahibi adı giriş alanı eklendi (addon-card-holder) — müşteri meta verisi olarak saklanır, token'a aktarılmaz (PAY.JP v2 Elements name seçeneğini desteklemiyor)
  • •Portal deseni: document.body.appendChild() ile transform kısıtlı konteynerlerin dışına çıkarak tam viewport'u kaplama (z-[9999])
  • •Yeni müşteri oluşturulduktan sonra ücretlendirme başarısız olursa otomatik iade + müşteri silme (sahipsiz kayıt önleme)
  • •hosting metadata.extra_storage[] biriktirilir; barındırma sekmesindeki depolama göstergesi toplam değeri gösterir

Added

StarServer ve diğer Japon barındırma sağlayıcılarının standart şartlarına atıfla 14 madde (tanımlar, başvuru, ücretler, otomatik yenileme, iptal, hizmet, yedekleme, yasak kullanım, askıya alma, bakım, gizlilik, sorumluluk, değişiklikler, yetki alanı) yapılandırıldı. Takvim faturalandırması + ilk ay günlük hesaplama + iptal sırasında kullanılmayan ayların iade politikası belirtildi.

  • •Sistem sayfası kaydı: config/system-pages.php hosting-terms slug, 🖥️ indigo
  • •Sayfa düzenleyici eşlemesi: pages-document.php — pageMetaMap['hosting-terms']
  • •VT tabanı: ja (ana) / ko / en — 3 dil (rzx_page_contents)
  • •i18n: site.pages.hosting_terms + hosting_terms_edit (editor_title/desc)

Added

  • •4 sekme her zaman görünür (detail.php) — barındırma/alan adı/posta/eklenti. Veri yoksa boş durum mesajı (empty_*) gösterilir
  • •Ek hizmetler sekmesi — + Depolama Ekle düğmesi (yönetici ücretsiz tahsis modalı; kapasite seçildiğinde anında aktif addon aboneliği oluşturulur, billing_amount=0, expires=barındırma bitiş tarihi) + öğe başına çöp kutusu/silme düğmesi (soft delete status=cancelled, hosting metadata.extra_storage[] dizisinden kaldırılır)
  • •Liste — başvurucu görüntüleme iyileştirmesi (index.php) — supervisor/admin rolündeki sistem yöneticisi siparişleri user.name + mor alt başlık Süper yönetici: [email protected] biçiminde gösterilir (eski şifreli applicant_name'in FKzGx9SE7xG/2 gibi değerlerde şifre çözme hatasını atlar)
  • •Sipariş oluşturma düğmesi (+ New Order) — yalnızca arayüz, işlevsellik sonradan eklenecek
  • •i18n 13 dil: role_supervisor, role_admin, btn_create_order, empty_, btn_add_storage_addon, btn_delete_addon, modal_add_storage_, confirm_, alert_ ve 20'den fazla anahtar

Added

  • •subdomain-check.php — VT (reserved_subdomains) önceliği + Cloudflare API yedek. JS checkSubdomain() sunucuyu çağırır ve sonucu yansıtır
  • •service-order.php'de ödeme hemen öncesi sunucu taraflı yeniden doğrulama — istemci tarafı atlamayı önler
  • •reserved_subdomains otomatik içe aktarma — Cloudflare bölgesinden 11 mevcut kayıt (vos/bestatech/bt/dev/ec430/ec431/salon/ssh/test/thevos/ai.21ces.com)
  • •Menü INSERT IGNORE hata düzeltmesi (menus-api.php):
  • •add_menu_item: INSERT'ten hemen sonra eski çevirileri temizle + INSERT ... ON DUPLICATE KEY UPDATE ile üzerine yaz
  • •update_menu_item: title/url değişikliğini algıla, eski 13 çeviriyi sil + sistem sayfasıysa yeniden kaydet
  • •rename_menu_item: başlık değiştiğinde eski çevirileri temizle
  • •Eski menünün (id=38, "VosCMS Tanıtımı") çok dilli çevirilerinin yeni barındırma kullanım koşulları menüsünü gösterdiği regresyon düzeltildi

Added

Şu akış oluşturuldu: hizmet siparişi → ödeme tamamlandı → otomatik posta alan adı sağlama → müşteri bildirimi.

  • •service-order.php'ye _autoProvisionMailDomain() çağrısı eklendi — ödeme işleminin dışında çalışır (VT bütünlüğü izolasyonu)
  • •VT: rzx_reserved_subdomains (zone, subdomain, record_type, reserved_by, reason) — kullanılabilirlik önbelleği
  • •DKIM anahtarı otomatik oluşturulur, metadata.mail_provision'a mode/origin/domain/zone/subdomain/provisioned_at olarak kaydedilir
  • •Sağlama modu UI dallanması (service-detail.php): pending / new_pending / existing_pending — sekmeler gizlenir, yalnızca izleme gösterilir (_setup-monitor.php); sekmeler yalnızca active durumunda görünür

Fixed

PHP'nin $arr['key'] ?? [] ifadesi geçici bir değer döndürdüğünden &$ref özgün diziyi etkilemiyor. change_mail_password / change_mail_address başarı yanıtı döndürüyordu ancak metadata UPDATE'in etkisi yoktu — parola ve adres değişiklikleri sessizce başarısız oluyordu.

  • •İndeks tabanlı doğrudan güncelleme desenine geçildi: foreach ($arr as $i => $item) { $arr[$i]['k'] = ... }
  • •service-order.php'deki yeni posta parolası kaydı da encrypt() (çift yönlü) yerine mail_password_hash() (SHA512-CRYPT) kullanacak şekilde değiştirildi

Fixed

  • •Ödeme özeti parlak floresan yeşil → daha temiz renk: text-green-400 → text-green-600 dark:text-green-400 (7 konum)
  • •Alt alan adı kullanılabilirlik yanıt mesajında i18n anahtarı eksik (order.php'deki PHP→JS i18n eşlemesi + :fqdn yer tutucusu birleştirildi)
  • •Bitiş tarihi hesabı düzeltildi: +N months -1 second (aynı gün) → +N months -1 day (tam 1 gün önce) → sonunda takvim yönteminde birleştirildi

Database

  • •rzx_subscriptions.billing_start DATETIME NULL eklendi (dev + prod)
  • •rzx_reserved_subdomains tablosu (Cloudflare bölge çakışma önbelleği)
  • •rzx_page_contents hosting-terms (ja/ko/en) ile dolduruldu
v2.3.9 2026-04-27 · 6 ay önce
Hizmet Siparişi i18n + 3 Bölgeli Menü Sistemi

Added

6 alandaki (domain, hosting, eklentiler, başvuran, ödeme, özet) ve ödeme tamamlama sayfasındaki tüm metinler 13 dile çevrildi. JS tarafındaki alert/modal metinleri PHP'den var I18N = {...} + t(key, replace) yardımcı deseni ile enjekte edilir.

  • •Konum: plugins/vos-hosting/lang/{13 locales}/services.php — services.order.* 200'den fazla anahtar
  • •Sayfam hizmet detayı: services.detail.* 70'den fazla anahtar, service-detail.php
  • •Admin sipariş yönetimi: services.admin_orders.* 115'ten fazla anahtar, admin/service-orders/
  • •DB'de saklanan Korece etiketler (hosting planları, bakım, eklentiler) _localizeLabel($sub) closure ile ayar ID'ye eşlenerek db_trans() uygulandı → sayfam ve admin tarafında tutarlı işleme

Added

Ödeme düğmesine tıklandığında sipariş ayrıntıları (domain/plan/eklentiler/başvuran/koşullar) doğrulanır ve özet modal görüntülenir → kullanıcı onaylar → ödeme devam eder. Boş alt alan adı kaydı gibi hataları önler.

  • •order.js — showOrderConfirmModal(), closeOrderConfirmModal(), confirmAndPay()
  • •Ödeme tamamlandıktan sonra kalan modal katmanlarının kaldırılması güçlendirildi (DOM silme + body/documentElement overflow sıfırlama)

Added

Eklentilerde "Kurulum Desteği" (_id='install') işaretlendiğinde admin ID/e-posta/şifre/site adı için bir form görünür. Şifre maskelenmiş + göz simgesi geçişi + "kurulumdan sonra değiştir" bildirimi. Değerler abonelik meta verilerinde install_info olarak saklanır ve sayfamda/adminde gösterilir.

  • •Giriş: _addons.php
  • •Görüntüleme: sayfam/admin partials/addon.php (mavi arka plan kutusu + şifre geçişi)

Added

Eklentiler sekmesine bağlı not, sipariş (rzx_orders.admin_notes) düzeyine taşındı. Eklenti olup olmadığından bağımsız olarak sağdaki etkinlik günlüğünün üstünde her zaman 7 satırlık textarea olarak görüntülenir. AJAX update_order_memo eylemi eklendi.

Added

Çekirdek menüleri eklenti menülerinden görsel olarak ayırmak için section alanı (top/main/bottom, varsayılan main) tanıtıldı. Bölgeler arasına otomatik olarak ayırıcı eklenir; bir bölgede görüntülenebilir menü yoksa ayırıcı dahil tüm bölge atlanır.

Admin kenar çubuğu:

  • •top: Kontrol Paneli / Üye Yönetimi / Site Yönetimi / Otomatik Yükleyici (vos-autoinstall)
  • •main: VosCMS Lisansı (vos-license-manager) / Hosting Yönetimi (vos-hosting)
  • •bottom: Eklentiler / Ayarlar
  • •Değişiklikler: config/admin-menu.php, admin-sidebar.php

Sayfam kenar çubuğu:

  • •top: Kontrol Paneli / Profil / Mesajlar
  • •main: Hizmetler (vos-hosting otomatik eklendi) — diğer eklentiler giriş eklediğinde otomatik birikir
  • •bottom: Ayarlar / Şifre / Hesap Silme / Çıkış
  • •Değişiklikler: config/mypage-menu.php, mypage-sidebar.php

Eklenti menüsü kaydı: plugin.json'daki menus.admin / menus.mypage girişlerindeki section + position alanları bölgeyi belirtir. services menüsü çekirdek mypage-menu.php'den → vos-hosting/plugin.json'a taşındı (otomatik kayıt).

Added

Lisans doğrulama API'si ve geliştirici portalı API'si çekirdekte olduğundan, tüm voscms sitelerine dağıtıldığında dışarıya açık kalıyordu. Her iki API, yeni bir genel merkez özel eklentisine ayrıldı.

  • •vos-license-server (scope: hq_only): 7 lisans uç noktası taşındı (check, register, verify, stats, updates, register-plugin, _init)
  • •vos-developer (scope: hq_only): 7 geliştirici portalı uç noktası taşındı (register, login, submit, my-items, earnings, update-version, _init)
  • •api/_plugin_dispatch.php — çekirdek wrapper, dispatch öncesi rzx_plugins.is_active kontrolü yapar; inaktifse 404 döner
  • •Çekirdek /api/license/.php ve /api/developer/.php yalnızca wrapper'ı korur (harici uyumluluk sağlanır)
  • •/api/notices.php'ye HQ_HOSTS env beyaz listesi eklendi (yalnızca HQ voscms.com etki alanından yanıt verir)
  • •Derleme betiği (build-voscms.sh) zaten api/license, api/developer, api/notices.php ve vos-license-manager'ı hariç tutar

Fixed

  • •Hosting sözleşme bitiş tarihi +1 gün hatası (+12 months → +12 months -1 second) — subscription/free/paid/bank 4 yerde uygulandı
  • •Kurumsal e-posta: 2 veya daha fazla eklenemiyor (seçici X düğmesini yakalıyordu)
  • •Sipariş özeti: ek depolama alanı toplanmıyor (storage select'te name özelliği eksikti)
  • •Hosting planı etiketi yerelleştirilmedi — service_hosting_plans._id'nin db_trans() ile eşleştirilmesiyle çözüldü
v2.3.8 2026-04-25 · 6 ay önce
Pano çok dil desteği tamamlandı + FAQ/Q&A skinleri

Added

_init.php artık rzx_translations'dan board.{id}.{title|description|header_content|footer_content|seo_keywords|seo_description} için doğrudan sorgulama yapıyor (mevcut yerel ayar → en → kaynak). list/read/write/settings dahil tüm sayfalarda $board[$field] otomatik olarak çevrilmiş değerle dolduruluyor. Pano ayarlar sayfasındaki "← Geri" butonu da aynı mekanizmayla otomatik çevriliyor.

Sorun panosunun (id=6) title + header_content alanları için 13 dil seed'i — HTML yapısı korunarak yalnızca metin çevriliyor, işlem aşaması rozetleri de her dilde gösteriliyor. Seed scriptleri: scripts/seed_issue_i18n.php + scripts/seed_issue_i18n_data.php.

Added

rzx_board_extra_vars tanımlarının (etiket/açıklama/seçenekler/varsayılan değer) 13 dile çevirisi. 4 alan × 13 = 52 satır.

  • •ExtraVarRenderer::renderAll($vars, $values, $mode, $boardId) — boardId argümanı eklendi, applyDefTranslations() tek sorguda tüm var çevirilerini toplu yüklüyor.
  • •ExtraVarRenderer::getOptionLabel($boardId, $varName, $value) — liste görünümleri için tek seçenek çevrilmiş etiket araması (statik önbellek).
  • •renderStatusBadge($value, $size, $displayLabel = null) — renk kaynak (ko) eşlemesini kullanıyor, yalnızca metin çevriliyor → tüm dillerde tutarlı renk (alındı = gül, çözüldü = zümrüt).
  • •select/radio/checkbox: value=kaynak / label=çevrilmiş deseni. Gönderi kaydedilirken her zaman kaynak değer saklanarak veri uyumluluğu sağlanıyor.
  • •Çağırıcı güncellemeleri: read.php, write.php, _list-row.php, varsayılan skinin _list-card/_list-webzine/_list-gallery.

Sorun panosunun status ek değişkeni için 13 dil seed'i: scripts/seed_ev_status_i18n.php.

Added

extra_var_get API'si, db_trans() aracılığıyla mevcut yerel ayar için çevrilmiş değerleri localized nesnesi olarak döndürüyor. JS modalı localized.title || ev.title'ı öncelikli gösteriyor → Japonca modunda modal açıldığında otomatik olarak "処理ステージ" görünüyor.

extra_var_update yerel ayara göre dallanıyor:

  • •Kaynak yerel ayar (ko) → tüm kaynak satırı güncelle (mevcut davranış)
  • •Kaynak dışı yerel ayar (ja/en/…) → yalnızca meta (var_type/izinler/3 onay kutusu) kaynağa kaydedilir; 4 çeviri alanı (title/description/options/default_value) mevcut yerel ayarla rzx_translations'a kaydedilir → kaynak bütünlüğü garanti edildi

Ek değişken listesindeki görünen adlar da db_trans('board_ev.{boardId}.{varName}.title') kullanıyor.

Added

Ek değişken düzenleme modalının "Düzenleme izni" bölümü (etiket/açılır menü seçenekleri/yardım metni) 13 dil lang dosyasına ayrıldı. Yeni anahtarlar: site.boards.ev_permission, ev_perm_all, ev_perm_member, ev_perm_admin, ev_permission_help.

Added

Ek değişken düzenleme modalındaki "Seçenekler" alanı için çift yönlü normalleştirme:

  • •Modal yükleme: DB JSON dizisini (["a","b","c"]) textarea'da göstermek için satır sonu formatına dönüştürüyor (talimatlara uygun)
  • •Kayıt API: ev_normalize_options() yardımcısı satır sonu veya JSON girişini kabul ederek tutarlı şekilde JSON dizisi olarak kaydediyor. Satır sonu girişinin daha önce NULL olarak kaydedildiği hata düzeltildi.

Added

Sorun/duyuru dışındaki içerik desenleri için iki yeni skin.

FAQ (skins/board/faq/) — gönderi = soru, gövde = yanıt. Arama çubuğu, kategori filtresi ve sayfalama içeriyor. Başlık alanı görüntüleme geçişi, çok dilli başlık/alt başlık, arka plan (resim/video/yok) desteği, bindirme opaklık ayarı. v1.0.1.

Q&A (skins/board/qna/) — gönderi = soru (başlık+gövde), yorum = yanıt. Yanıtsız rozeti, ilk öğe otomatik genişler, ağaç sıralı (parent_id/depth) yorum görünümü. Yanıtların yanıtları girintili + "↳ Yanıt" etiketli (en üst seviye = "A."). Satır içi düzenleme/yanıt formu (yalnızca yazar/admin düzenleyebilir, perm_comment izniyle yanıt verilebilir). v1.0.0.

Her iki skin için ortak: yönetici ayarları dişli çark simgesi arama çubuğunun sağ altına yerleştirildi (başlık alanından ayrıldı). boardSkinFile() _list-full.php önceliğiyle çalışıyor.

Added

api-comments.php'ye update eylemi eklendi. Yalnızca comment.user_id == mevcut kullanıcı veya admin düzenleyebilir. Karakter sayısı doğrulamasından sonra content + updated_at güncelleniyor.

Added

Düzen ayarlarının copyright alanındaki {year} belirteci, oluşturma sırasında otomatik olarak geçerli yılla değiştiriliyor. DB, orijinali ({year} ile birlikte) sakladığından her yıl manuel güncelleme gerekmiyor. Uygulandığı yerler: default/minimal/modern/base-footer.php. 4 layout.json dosyasındaki telif hakkı açıklaması 13 dile genişletildi, {year} kullanım talimatları her yerel dilde gösteriliyor.

default/minimal altbilgilerinde $_lc['copyright']'ın yok sayıldığı hata da düzeltildi — düzen ayarı değeri artık gerçekten oluşturuluyor.

Added

menu_item.38.title için 13 dil seed'i (VosCMS Tanıtımı / About VosCMS / VosCMSについて / Über VosCMS / Acerca de VosCMS / À propos de VosCMS / Tentang VosCMS / VosCMS-ийн тухай / О VosCMS / VosCMS Hakkında / Giới thiệu VosCMS / 关于 VosCMS / 關於 VosCMS).

Added

Her işlem aşaması için bir örnek + 1 mevcut çözüldü = toplam 4. Her gönderinin başlığı/içeriği 13 dile çevrildi (104 satır).

AşamaBaşlık (ko)Durum
Alındı[Hata] Mobil hamburger menü X butonu çalışmıyorYeni
İnceleniyor[Özellik isteği] Yorum yazıldığında gönderi yazarına e-posta bildirimiYeni
Devam ediyor[Performans] Pazar yeri detay sayfasının ilk yükleme hızını iyileştirYeni
ÇözüldüPanodaki bir gönderiye eklenen resim gövdeye eklendi...Mevcut

Mevcut post 34 (birikmiş Tailwind satır içi stilli test gönderisi) silindi.

Fixed

customer/board/list.php 167. satırda rzx_admin_icons yardımcısını require ediyordu, ancak 161. satırdaki skin dosyası include'u return ile çıkıyordu — bu durum FAQ/Q&A skinlerinde rzx_admin_icons() çağrısında 500 hatasına neden oluyordu. require_once skin include'unun üstüne taşındı.

v2.3.7 2026-04-25 · 6 ay önce
AutoInstall UX Integrated Overhaul

Changed

Eski /marketplace adının kalan referansları kaldırıldı. Arama formunun /marketplace'e GET göndererek dashboard'a yönlendirmesine neden olan hata düzeltildi (arama/sıralama/filtre değişikliklerinde sayfa terk ediliyordu). browse.php, item-detail.php, item-submit.php, purchases.php ve assets/js/marketplace.js'nin tamamı /autoinstall'a yönlendirildi.

Added

install.php Adım 4'te admin yolu giriş alanının altına sarı bir ipucu + gerçek zamanlı URL önizleme + genişletilebilir "Neden değiştirmeliyim?" kılavuzu eklendi. Herkesin anlayabileceği dilde 3 neden sunuldu: otomatik saldırı girişimleri (kaba kuvvet), güvenlik açığı taraması ve güçlü parolaların sınırları. 13 dilin tamamına uygulandı.

Added

install.php'deki kurulum tamamlama adımında vos-autoinstall eklentisi otomatik olarak kaydedilir ve etkinleştirilir (PluginManager::install() doğrudan çağrılarak). Kullanıcılar, ayrı bir kurulum adımı olmadan yönetici paneline girdikten hemen sonra marketplace'i kullanabilir.

Added

market.21ces.com/api/market/catalog ve /item'a ?locale=xx parametre desteği eklendi. name, description, short_description, cat_name için çok dilli JSON, sunucu tarafından tek bir dize olarak döndürülür (geri dönüş: istenen locale → en → ilk değer). VosCMS tarafındaki tüm json_decode + locale fallback yineleme mantığı kaldırıldı (browse.php, item-detail.php, _components/item-card.php).

Added

Dosya tabanlı marketplace API yanıt önbelleğinin TTL'si PluginManager ayarlarına entegre yönetim altına alındı. Sabit kodlu 30 dakika → varsayılan 5 dakika, 1/5/10/30/60 dakika seçenekleri. https://vos.21ces.com/theadmin/settings/general marketplace önbellek bölümü ile /theadmin/autoinstall/settings aynı ayarı okur ve yazar, otomatik senkronize olur. AutoInstall sayfası ve genel ayarlar sayfasına anlık önbellek yenileme düğmesi eklendi. TTL değiştiğinde mevcut önbellek otomatik geçersiz kılınır.

Added

Marketplace admin ile aynı veri türü / kısa açıklama / slug / Product Key / minimum VosCMS ve PHP sürümü / partner / fiyat / lisans tablosu başlıktan hemen sonra gösterilir. İçerik alanını genişletmek için sol:sağ içerik oranı 2:1'den 3:1'e değiştirildi.

Added

Detay sayfasının inceleme sekmesinin sağ üstüne "İnceleme Yaz" düğmesi. Yıldız puanı / takma ad / metin giriş modalı → VosCMS API → marketplace POST /api/market/item/review'e aktarılır. VosCMS lisans anahtarı + alan adı otomatik eklenir, alan adı başına bir gönderim sınırı, alıcılar otomatik olarak is_verified=1 alır. İncelemeler marketplace DB'sinde (rzx_mkt_reviews) status='pending' olarak kaydedilir ve operatör onayından sonra yayınlanır. Yeni GET /api/market/item/reviews?slug=... uç noktası yalnızca onaylı incelemeleri döndürür. Alan adı kısmen maskelenerek gösterilir (mys***.com).

Added

Önceki Yalnızca ücretsiz onay kutusu → Tümü / Ücretsiz / Ücretli 3 yönlü geçişe genişletildi. Market catalog API'sine paid=1 parametresi eklendi (i.price>0). Arama çubuğundan ayrılıp görünüm geçiş alanının önüne taşındı, sıralama seçiciyle birlikte bir başlık araç çubuğuna entegre edildi.

Changed

Arama girişi kenarlığı border-2 border-emerald-300, soldaki arama simgesinde yeşil arka plan kutusu, arama düğmesi bg-emerald-500. Yalnızca anahtar kelime girişi bırakılarak arama çubuğu basitleştirildi; sıralama ve filtre özellikleri içerik başlığına taşındı.

Changed

DurumGörünüm
ÜcretsizKur + İndir
Ücretli (satın alınmadı)Satın Al (marketplace PAY.JP ödeme modalı)
Ücretli (satın alındı)Kur + İndir
Zaten kurulu"Kuruldu"

Aynı dallanma 4 liste sayfası görünümüne (liste/webzine/kart/ızgara) uygulandı. Satın alınan slug seti sayfa girişinde bir kez sorgulanır ve yeniden kullanılır. Ödeme, PAY.JP faturalaması + lisans düzenlemesini gerçekleştiren marketplace POST /api/market/item/purchase tarafından işlenir.

Changed

  • •Görünüm stili geçişi: metin etiketleri kaldırıldı → yalnızca simgeler + title / aria-label (erişilebilirlik korundu)
  • •Tür rozeti: bg-<color>-100 açık arka plan → bg-zinc-900/85 backdrop-blur-sm koyu yarı saydam + renkli metin (görüntüler üzerinde okunabilirlik artırıldı)
  • •Ekran görüntüleri bölümü: başlıktan hemen sonra → sekme içeriğinin altına taşındı, marketplace gibi (n) sayısı gösterilir
  • •Detay sayfasındaki dark:prose-invert çalışmıyordu → CDN Tailwind'e typography eklentisi eklendi
  • •Detay sayfası açıklama alanı: marketplace admin ile aynı yaklaşım — HTML işaretlemesi olduğu gibi işlenir, yalnızca <script>/<iframe>/<style>/onXX gibi tehlikeli öğeler kaldırılır

Fixed

  • •PAY.JP kart formu giriş kabul etmiyor: gizli durumda önceden bağlandığı için iframe 0px olarak çiziliyordu. Geç başlatma + requestAnimationFrame ile bağlama ile düzeltildi
  • •Widget küçük resmi eksik: marketplace DB'sinde 28 widget kayıtlı ancak /var/www/market/widgets/'a yalnızca 12 ücretsiz widget kopyalanmış. 14 eksik widget senkronize edildi. Catalog/item API'sine screenshots için mutlak URL dönüşümü + var olmayan dosyaların otomatik filtrelenmesi eklendi
  • •Bundle eklenti yetkisiz uyarısı: vos-autoinstall unauthorizedPlugins olarak yakalanıyordu. LicenseStatus.php'ye BUNDLE_PLUGINS = ['vos-autoinstall', 'vos-marketplace'] sabiti eklendi, active()/fromCache()/canUsePlugin() genelinde filtreleme uygulandı. Aynı işlem lisans sunucusu verify.php'ye de uygulandı
  • •Widget tekrar ekleme olasılığı: install.php tohumlaması yalnızca INSERT IGNORE kullandı, ancak rzx_page_widgets'ta UNIQUE kısıtlaması olmadığından tekrar mümkündü. Tohumlamada INSERT öncesi DELETE FROM page_widgets WHERE page_slug='home' olarak değiştirildi (forum widget'ları gibi kasıtlı tekrar durumları olduğundan DB UNIQUE kısıtlaması eklenmedi)

Migration Notes

  • •vos-autoinstall eklentisi menüsü/rotaları/göçleri yeni kurulumlarda otomatik etkinleşir (mevcut kurulumların yönetici panelinden bir kez etkinleştirmesi gerekir)
  • •Marketplace API önbelleği varsayılan TTL: 30 dakika → 5 dakika (fiyat/içerik değişikliklerinin daha hızlı yansıması için)
  • •vos-autoinstall.cache_ttl eklenti ayarı yenidir
v2.3.6 2026-04-21 · 6 ay önce
Marketplace API Canlı Entegrasyonu

Changed

  • •browse.php: yerel DB sorgusundan market.21ces.com/api/market/catalog adresine canlı API çağrısına geçildi
  • •item-detail.php: yerel DB'den /api/market/item ve /api/market/item/versions API çağrılarına geçildi
  • •CatalogClient.php: API temel URL'si /api/v1 → /api/market olarak değiştirildi, yanıt alanı items[] → data[] olarak hizalandı

Fixed

Sorun: market.21ces.com/index.php içindeki düzen uygulama bloğunda $__noLayout = true durumu eksikti; bu nedenle tüm eklenti API rotaları (api/market/*) HTTP 200 + boş yanıt dönüyordu.

Düzeltme: index.php sonuna elseif ($__pageFile && $__noLayout) { include $__pageFile; } eklendi. api/market/catalog, api/market/item, api/market/updates/check vb. artık düzgün çalışıyor.

Added

plugins/vos-market/views/api/catalog.php dosyasına sort, free ve featured parametreleri eklendi; yanıt alanları genişletildi (sale_price, rating_avg, is_featured vb.).

Added

mpApiFetch() yardımcısı: 30 dakikalık TTL dosya önbelleğiyle marketplace sunucusuna yapılan istekleri en aza indirir. API yanıt hatası durumunda hata afişi gösterir.

v2.3.5 2026-04-21 · 6 ay önce
Otomatik lisans kayıt mantığı tamamlandı

Fixed

Sorun: AdminRouter'da $licenseClient = new LicenseClient() örneği oluşturulup otomatik kayıt denendiğinde, $_ENV['LICENSE_KEY'] güncellemesi örneğin dahili $this->licenseKey'ine yansımıyordu — bu nedenle aynı istek içinde check() çağrısı hâlâ unregistered döndürüyordu.

Changed

  • •check()'e girildiğinde $this->licenseKey boşsa hemen /api/license/register çağrılır
  • •Başarı durumunda: $this->licenseKey güncelle + $_ENV['LICENSE_KEY'] güncelle + .env dosyasını kaydet, ardından verify adımına geç
  • •Yalnızca başarısızlık durumunda (sunucu yanıt yok) unregistered döndür
  • •Yeni saveKeyToEnv() yöntemi: boş bir LICENSE_KEY= satırını (başarısız install.php durumu) gerçek anahtarla değiştirir; geçerli bir anahtar zaten varsa atlar

Etki

  • •install.php olmadan manuel kurulum yapan kullanıcılar → ilk yönetici erişiminde lisans otomatik olarak kaydedilir
  • •Eski sürümden güncelleyen kullanıcılar (LICENSE_KEY yok) → güncellemeden sonra ilk yönetici erişiminde otomatik kayıt
  • •Kontrol panelindeki "Lisans kayıtlı değil" mesajı artık yalnızca lisans sunucusunun kendisi erişilemez olduğunda görünür
v2.3.4 2026-04-20 · 6 ay önce
İçerik Kirliliğini Temizleme + Kart CSS Kaldırma

Fixed

database/seeds/legal_pages.php seed dosyasında Tailwind CSS değişkenleri (--tw-scale-x, --tw-pan-x vb., 400+), her <h1>/<h2>/<p> etiketinin style="" özniteliğine satır içi olarak gömülüydü. Her kurulumda bu kirlilik veritabanına yayılarak terms ve privacy sayfalarını şişirdi (özellikle privacy/ko 128KB'ye ulaştı; normal 2KB'dir).

  • •database/seeds/legal_pages.php: 442KB → 131KB (%70 azalma, sözdizimi geçerli)
  • •Geliştirme veritabanındaki 26 kirlenmiş satır temizlendi: 1,04MB → 56KB (988KB kaldırıldı, −%95)
  • •Yeni scripts/clean-inline-styles.php — style="... --tw-* ..." için toplu temizleme aracı (sorun tekrarlarsa yeniden kullanılabilir)

Changed

.board-content CSS'i, her belge sayfasını "h2'yi kart başlığı, h2+p'yi kart gövdesi olarak" zorla dönüştüren kurallar içeriyordu. Bu, doğrudan Tailwind ile tasarlanan sayfaların (örn. Brand) hero yapısını bozuyordu.

  • •103 satır kart blok kuralı kaldırıldı (149 → 45 satır)
  • •Kalan kurallar: temel tipografi (p/h·/blockquote/code/ul/ol/table), OG bağlantı kartı, karanlık mod metin geçersiz kılma
  • •Sonuç: Brand sayfasının orijinal tasarımı yeniden sağlandı (sol mavi çizgili h2, ortalanmış hero vb.)
  • •Yasal belgeler (terms/privacy vb.) için standart <h1><h2><p> tipografisi yeterlidir — kart stili gereksiz bir süslemeydi
v2.3.3 2026-04-20 · 6 ay önce
Sayfa Çeviri Yapısının Geri Alınması (Tek Tabloya Dönüş)

Changed

Karar arka planı: 2.3.1'de sayfa içeriği Korece orijinal için rzx_page_contents ve Korece dışı için rzx_translations olarak ayrılmış, 2.3.2'de ise editörde ayrı bir kayıt yolu eklenmiştir. Ancak tasarım gözden geçirildiğinde iki tablonun yapısının özünde aynı (slug/key + locale + content) olduğu ve şu maliyetleri yarattığı görüldü:

  • •Korece orijinal metin her iki tabloda çift depolanıyor (db_trans fallback zinciri yansıtması için)
  • •Editör kayıt mantığı ko vs. ko olmayan için dal gerektiriyor
  • •Sayfa yönetim arayüzünde locale durumunun gösterilmesi iki tablo JOIN'i gerektiriyor
  • •Asıl gerekçe ("AI çeviri boru hattı entegre kuyruğu") da pratik değer taşımıyor; uzun sayfa gövdesi HTML (10 KB) ile kısa UI dizesi (20 bayt) farklı iş akışları (parçalara bölme, etiket koruma vb.) gerektirdiğinden entegrasyon değeri düşük

Geri yüklenen yapı: tek rzx_page_contents tablosu, locale başına 1 satır (özgün tasarım)

Migration

  • •rzx_translations.page.{slug}.title/content × 7 slug × 12 ko olmayan locale (168 satır) → rzx_page_contents'e geri yüklendi
  • •rzx_translations'dan tüm page.* anahtarları silindi (234 satır)
  • •Hedefler: Brand, terms, privacy, refund-policy, tokushoho, funds-settlement, data-policy
  • •Geliştirme ve üretim veritabanlarının her ikisine de uygulandı

Changed

  • •resources/views/admin/site/pages-edit-content.php — ko/ko olmayan dallanma kaldırıldı, sade UPSERT
  • •resources/views/admin/site/pages-document.php — aynı
  • •resources/views/customer/page.php — db_trans('page.*.title/content') kaldırıldı, doğrudan page_contents'ten okuma (fallback zinciri locale → en → ko korundu)
  • •resources/views/admin/site/pages.php — sayfa listesi başlıkları da doğrudan page_contents.title'den okunuyor

Kept

rzx_translations tablosunun kendisi korunuyor — şu amaçlarla kullanılmaya devam ediyor:

  • •Panolar (board_post.{id}.title/content)
  • •Arayüz dizeleri (menu.*, ayar etiketleri)
  • •Sayfa SEO meta verisi (page.{slug}.browser_title|meta_keywords|meta_description) — kısa dizeler, burası uygun

İlke: kısa arayüz/meta dizeleri → rzx_translations; uzun sayfa gövdesi içeriği → rzx_page_contents, her veri türünün özelliğine göre ayrı depolama.

v2.3.2 2026-04-20 · 6 ay önce
Sayfa editöründe çeviri DB kaydetme mantığının uyumlaştırılması

Changed

2.3.1'de sayfa içeriği kaydetme yapısı orijinal ko (rzx_page_contents) + çeviri DB (rzx_translations) olarak taşındıktan sonra, yönetici editörü tüm yerel ayarları yalnızca rzx_page_contents'e INSERT/UPDATE etmeye devam ediyordu — bu durum göç formatıyla uyumsuzluğa ve render tarafındaki db_trans() sorgu hatalarına yol açıyordu. Bu sürüm bunu düzeltiyor.

Dallanma kuralları (kaynak yerel ayar = $_ENV['DEFAULT_LOCALE'] ?? 'ko'):

localekayıt hedefi
ko (kaynak)rzx_page_contents + rzx_translations'a yansıtma (db_trans() geri dönüşü için)
en/ja/zh_CN/...yalnızca rzx_translations (page.{slug}.title, page.{slug}.content)

Kaynak dışı yerel ayar kaydedilirken rzx_page_contents'te kaynak satır yoksa otomatik olarak bir stub satırı oluşturulur (menü/ayar bağlantılarını korumak için). is_active kaynak satıra tek biçimde uygulanır.

Changed

Kaynak dışı yerel ayar düzenleme sayfası açılırken:

1. Önce rzx_translations'tan page.{slug}.title/content + locale sorgulanır

2. Bulunamazsa eski rzx_page_contents satırına geri dönülür (göç sırasında atlanan sayfalar için uyumluluk)

Kaynak yerel ayar için önceki gibi yalnızca rzx_page_contents kullanılır.

Changed

  • •Sayfa silme: aynı zamanda rzx_translations WHERE lang_key LIKE 'page.{slug}.%' de silinir
  • •Slug değişikliği: rzx_translations.lang_key'de page.{old_slug}. → page.{new_slug}. toplu UPDATE
v2.3.1 2026-04-20 · 6 ay önce
Page Translation DB Migration + UI Cleanup + Logo Assets

Changed

rzx_page_contents'te her locale için tam içerik satırı depolayan önceki yaklaşım, orijinal ko + çeviri DB'si (rzx_translations) yönteminde birleştirildi. Forum (board_post.*) depolama formatıyla yapısal tutarlılık sağlandı.

Hedef 7 sayfa: Brand, terms, privacy, refund-policy, tokushoho, funds-settlement, data-policy

Before:

rzx_page_contents
├── Brand / ko  (tam içerik)
├── Brand / en  (tam içerik)
├── ... (13 locale satırı)

After:

rzx_page_contents
└── Brand / ko  (1 orijinal satır)

rzx_translations
├── page.Brand.title   × 13 locale (ko dahil)
└── page.Brand.content × 13 locale

Göç sonuçları:

  • •rzx_page_contents: 7 slug × 12 ko-dışı satır = 84 satır silindi
  • •rzx_translations: 7 slug × 13 locale × (title + content) = 182 satır taşındı
  • •Geliştirme ve üretim DB'sine uygulandı, render doğrulaması geçti (ko/en vb. için locale başına doğru görüntüleme onaylandı)

Changed

  • •Başlıktaki "Yeni Sayfa" düğmesi kaldırıldı — işlevsiz bir yer tutucuydu. Sayfalar tek doğru kaynak olarak menü yönetiminden oluşturulur.
  • •Çöp 🗑 simgesi + AJAX işleyici + deleteUserPage() JS kaldırıldı — menü silindiğinde sayfalar da birlikte temizlenir, bu nedenle bağımsız sayfa silme yolu gereksizdir. Hatalı silmelerden kaynaklanan kırık menülerin önüne geçer.
  • •Korundu: ayarlar ⚙ · düzenle ✏ · önizleme 👁 simgeleri

Fixed

  • •Ayarlar > Site > Logo Resmi yükleme hatası: storage/logos/ alt dizininin mevcut olmaması nedeniyle move_uploaded_file() sessizce başarısız oluyordu. Yükleme işleyicisine otomatik alt dizin oluşturma eklendi + geliştirme ve üretim sunucularında dizin oluşturuldu (www-data:www-data, 775).
  • •Düzen logosu önceliği geri yüklendi: kısaca "site ayarları önce" olarak ters çevrildi, ardından "düzene özgü logo" gereksinimiyle eşleşmek üzere düzen > site yedek olarak geri yüklendi. Düzende logo belirtilmemişse site logosu otomatik kullanılır.
  • •Hedef: skins/layouts/{default, minimal, modern, modern-copy-260413}/header.php ve footer.php

Fixed

  • •bi-guide / logo-guide slug'ları için yalnızca ilk oluşturulan satır tutuldu (id=186, 187), yinelenen id=193, 194 silindi
  • •Geliştirme ve üretime uygulandı. Menü API'sindeki yinelenen INSERT hatası v2.3.0'da düzeltilmişti

Added

/var/www/_upload/ konumunda logo kaynakları oluşturuldu — gerektiğinde üretime yükleyin:

Simge (yalnızca işaret)

  • •voscms-logo-color-{256,512,1024}.png · renkli (deep·ocean·sky·ocean + merkez deep)
  • •voscms-logo-mono-{256,512,1024}.png · sky tek renk + opaklık 1/0.7/0.48/0.7 degradesi

Yatay kelime işareti (başlık için) — 820×256 oranı

  • •voscms-wordmark-{128h,256h,512h}.png · açık (Vos deep + CMS gri)
  • •voscms-wordmark-dark-{128h,256h,512h}.png · koyu (Vos sky + CMS slate-300)

Dikey kelime işareti (uygulama simgesi / OG görseli için) — 360×420 oranı

  • •voscms-stacked-light-{256h,512h,1024h}.png
  • •voscms-stacked-dark-{256h,512h,1024h}.png

Tüm SVG orijinalleri korundu. Yüklü librsvg2-bin, rsvg-convert CLI'yi sağlar. OKLCH renk desteği sorunu hex'e dönüştürülmüş sürümle (voscms-logo-mono-hex.svg) çözüldü.

v2.3.0 2026-04-20 · 6 ay önce
Sayfa Ayarları Sekme Yeniden Yapılandırması + Changelog Sistemi

Added

  • •DB tablosu rzx_changelog — sürüm × locale başına bağımsız kayıtlar, translation_source (original/ai/manual) + source_hash takibi
  • •Ayrıştırıcı RzxLib\Core\Changelog\ChangelogParser — Keep a Changelog standardı + dahili bölüm beyaz listesi (Infrastructure/Internal/Refactor/Chore/Docs/Test özeldir)
  • •İçe Aktarıcı ChangelogImporter — idempotent birleştirme, manuel çeviri koruması, content_hash üzerinden değişiklik tespiti
  • •CLI betiği scripts/import-changelog.php — --file --locale --dry-run --silent seçenekleri, SemVer ön-sürüm desteği (2.1.1-hotfix)
  • •Çeviri arayüzü RzxLib\Core\Translate\{TranslatorInterface, NullTranslator, TranslatorFactory} — Gemma 4 (ai.21ces.com) GPU hazır olduktan sonra config/translator.php dosyasındaki driver değiştirilerek etkinleştirilir
  • •Sistem sayfası /changelog kaydedildi (config/system-pages.php), ön uç görünüm resources/views/system/changelog/index.php
  • •Özel skin skins/page/changelog/skin.json — kart stilleri (filled/outlined/flat), bölüm başına renkler, sürüm rozeti, tarih formatı, göreli zaman gösterimi, dahili bölüm görünürlük geçişi
  • •Düzenleme sayfası /changelog/edit ayrıldı — MD yükleme önizlemesi, çok dilli kapsam matrisi, sürüm başına geçiş ve silme, AI çeviri düğmesi (yakında)
  • •Dağıtım otomasyonu — deploy-voscms.sh dosyasına 1.5/5 Changelog import adımı eklendi: ko + 12 locale .md dosyalarını otomatik algılar ve birleştirir
  • •Çeviri anahtarı site.pages.changelog 13 locale için eklendi

Changed

  • •Sekme sırası yeniden düzenlendi: [Temel Bilgi] [İzinler] [Gelişmiş] [Skin] — sistem sayfaları sona kendi sekmelerini ekleyebilir
  • •settings_tabs şeması tanıtıldı (config/system-pages.php) — sistem sayfaları üst düzey sekme dizisi tanımlar; her giriş key/label/icon/view ile dinamik olarak işlenir. Eski settings_view alt include mirası kaldırıldı
  • •İlke belirlendi: Ayarlar = görünüm + işlevsellik / Düzenleme = veri — yükleme, sürüm, çeviri gibi veri yönetimi arayüzleri /changelog/edit sayfasına ayrıldı
  • •MERGE kaydetme stratejisi — save_settings işleyicisi mevcut ayarlarla birleştirir. Sekmeler ayrılmış olsa bile diğer sekme verileri silinmez
  • •saveSettings() JS — yalnızca DOM'da mevcut olan alanları gönderir. Bazı alanların bölünmüş sekme ortamında işlenmediği durumlarda güvenlidir
  • •Layout/skin kart konumu — Temel Bilgi sekmesine geri taşındı (kullanıcı geri bildirimi uygulandı). Skin sekmesi yalnızca skin.json değişkenlerinden sorumludur
  • •Sayfa genişliği tekrarı kaldırıldı — Temel Bilgi sekmesindeki page_width alanı silindi (skin'in content_width değerine entegre edildi)
  • •service/order ikincil sekme düzleştirmesi — config/service-settings-tabs.php dosyasındaki general/domain/hosting/addons, settings_tabs yapısına taşındı ve üst düzey sekme olarak yükseltildi

Changed

  • •/{slug}/settings ve /{slug}/edit artık config/system-pages.php dosyasını da tanıyor — önceden yalnızca rzx_page_contents VT'ye bakılıyor ve sistem sayfaları 404 veriyordu. Şimdi sorgulama sırası: VT → config
  • •edit_view alanı eklendi — sistem sayfaları için düzenleme görünümü dosya yolunu doğrudan belirtir. /{slug}/edit tıklandığında ilgili görünüm doğrudan dahil edilir (yönetici yönlendirme atlaması kaldırıldı)
  • •pages-settings.php yedek mekanizması — VT kaydı olmayan sistem sayfaları artık $pageData'yı config'den oluşturur; sayfa yönetim listesine yönlendirmeyi engeller
  • •Yönetici simgesi URL'si birleştirildi — /{slug}/settings ve /{slug}/edit standart ön uç URL'sini kullanır

Fixed

  • •menus-api.php: external sayfa türü için INSERT öncesi yineleme denetimi eksikliği düzeltildi — menü iki kez kaydedildiğinde rzx_page_contents tablosunda yinelenen satır oluşmasını önlüyor
  • •Menü silindiğinde external türü + widget page_contents temizliğinin atlanması düzeltildi — yalnız kalan kayıtların oluşmasını engeller

Fixed

  • •Başlık arka planı (title_bg_type, title_bg_image, title_bg_video, title_bg_overlay, title_text_color), show_title, show_breadcrumb, custom_css, custom_header_html, custom_footer_html — tüm standart sayfa skin değişkenleri artık genel görünüme yansıtılıyor
  • •_page-title-bg.php parçalı şablonu artık $_contentWidth değişkenini kabul ediyor — başlık alanı içerik genişliğini takip ediyor
  • •Yönetici simgesi başlıktan ayrıldı — içerik alanının sağ üstüne bağımsız olarak yerleştirildi; show_title=0 olsa bile her zaman görünür
  • •Başlık alanının üstüne 20px üst boşluk eklendi (arka plan düzeni dengesi)

Added

  • •site.pages.contact çeviri anahtarı 13 locale için eklendi (ko/en/ja/zh_CN/zh_TW/de/es/fr/id/mn/ru/tr/vi) — önceki eksiklik giderildi
  • •Sayfa yönetim sistemi kılavuzu docs/PAGE_ADMIN_GUIDE.md — sekme yapısı, şema, yönlendirme, izinler ve genişletme yöntemleri belgelendi
v2.2.2 2026-04-19 · 6 ay önce
İstatistik Widget'ı İyileştirmeleri + Yönetici Başlığı Düzeltmesi

Added

  • •Her öğe için sayı, sonek, etiket (çok dilli), simge ve renk alanları
  • •Yönetici widget oluşturucuda öğelerin ekleme/düzenleme/silme desteği (stat_items türü için yeni düzenleme arayüzü)
  • •16 simge türü (users, chart, star, heart, check-circle, clock, calendar, globe, shield, lightning, trophy, cart, dollar, building, chat) + 10 renk seçeneği
  • •Görünüme girişte sayım animasyonu — IntersectionObserver + easeOutCubic 1.4s
  • •Yalnızca sayısal değerler sayılır (24/7 gibi dizeler olduğu gibi gösterilir), virgüllü biçimlendirme ve ondalıklar korunur
  • •widget.json v1.1.0 → v1.2.0

Fixed

  • •admin_name'in enc: ön ekiyle kaydedilip şifre çözülmeden görüntülendiği sorun düzeltildi
  • •Avatar sorgusunun var olmayan staff tablosunu LEFT JOIN yaptığı sorun düzeltildi — artık admin_id = users.id birleşik yapısına uygun şekilde rzx_users.profile_image doğrudan sorgulanıyor
  • •Göreli yollu avatarlara otomatik olarak baseUrl ön eki ekleniyor
v2.2.1 2026-04-19 · 6 ay önce
URL Yakalama (Küçük Resim / Ekran Görüntüsü)

Added

  • •Tüm pano genelindeki her <input type="url"> alanının (genişletilmiş değişken url türü dahil) yanına [Küçük Resim Al] [Ekran Görüntüsü Al] düğmeleri otomatik olarak eklenir
  • •Küçük resim: 1280×960 yerel render → 800×600 çıkış (ilk ekran görünümü)
  • •Ekran görüntüsü: 1280×tam_sayfa yerel render → 800×küçültülmüş çıkış (tam kaydırma sayfası, gerçek sayfa yüksekliği)
  • •Adım adım ilerleme çubuğu arayüzü — Sunucuya bağlan → Sayfayı yükle → Ekranı yakala → Görüntü oluştur → Dosyayı kaydet → Yanıt bekle
  • •Yakalanan küçük resmin otomatik olarak öne çıkan görsel atanması — board_files.is_primary=1 olarak işaretlenir, board-showcase widget'ı öncelikli kullanır
  • •Yeni rota /board/api/url-capture?type={thumbnail|screenshot}&url=... + api-url-capture.php proxy
  • •/board/api/files'a set_primary eylemi eklendi — mevcut eklerden birini öne çıkan görsel olarak belirler

Changed

  • •Ek resim sorgusu ORDER BY is_primary DESC, id ASC — yakalanan küçük resimler önce gösterilir
  • •Gönderi oluşturulurken öne çıkan dosya indeksini belirtmek için primary_file_pos parametresi sunucuya iletilir
v2.2.0 2026-04-18 · 6 ay önce
Marketplace Ayrımı

Changed

  • •Marketplace ürün ayrımı: plugins/vos-marketplace/ eklentisinin paylaştığı işlevsellik bağımsız bir ürün olarak ayrıldı → github.com/THEVOSjp/Marketplace yeni depo, market.21ces.com üzerinde bağımsız dağıtım
  • •Eklenti yalnızca "müşteri tarafı kullanıcı arayüzü (keşfetme, satın alma, yükleme, lisanslama)" işlevini korur — veriler, satıcılar ve ödemeler yalnızca marketplace sunucusu tarafından yönetilir
  • •Core tarafı API entegrasyon noktaları güncellendi

Added

  • •Dil seçiminin ardından modal gösterimi — .env + VT + storage/uploads/ yedeklemesi gerekliliği + APP_KEY kaybında şifre çözmenin mümkün olmadığı uyarısı
  • •İki adımlı onay: onay kutusu + onayla düğmesi (koşulsuz yükleme yasak)
  • •13 dil için tam çeviri eklendi (backup_title/body/item_env/db/uploads/warn/check/confirm/cancel)

Added

  • •scripts/register-widgets-to-marketplace.php — 28 dosya tabanlı widget'ı rzx_mp_items'a toplu kayıt eder

Changed

  • •plugins/vos-marketplace/src/CatalogClient.php — varsayılan API URL'si https://market.21ces.com/api/v1 olarak değiştirildi, fetchItem() yolu güncellendi, checkUpdates() sorgu biçimi güncellendi
  • •plugins/vos-marketplace/plugin.json — marketplace_api_url varsayılan değeri güncellendi
  • •rzxlib/Core/Modules/WidgetLoader.php — küçük resim URL'sine ?v={mtime} önbellek temizleyici eklendi (Cloudflare immutable önbelleği için)

Fixed

  • •widgets/feature-tour/widget.json — alan temizliği yapıldı
  • •Bazı widget küçük resimleri yenilendi (staff, testimonials, feature-tour, shop-map, shop-ranking, stylebook)
v2.1.5 2026-04-17 · 6 ay önce

Added

  • •contact-info (v0.1.0) — iletişim kartı (adres/telefon/e-posta/çalışma saatleri + resim + küçük harita)
  • •location-map (v0.1.0) — yatay harita (Google Maps + altta 3 sütunlu bilgi, genişlik ayarlanabilir)

Added

  • •Öğe gönderme sayfasının komple yeniden düzenlenmesi — 3 sekme (temel bilgi / sürüm / satış)
  • •Lisans (GPL/LGPL/BSD/MIT/CC/PD/ticari), depo URL'si, demo URL'si, bağımlı eklentiler, banner resmi
  • •Sürüm geçmişi, satış bilgileri (genel/ücretli toggle, indirim fiyatı/bitiş tarihi), UX iyileştirmeleri

Added

  • •Geliştirici menüsü (ID:20) 13 dilde, Hero CTA description/typing_words 12 dilde tamamlandı

Changed

  • •Widget adı ayrımı netleştirildi (harita / iletişim kartı), page.php'ye fullWidthTypes eklendi
  • •contact-form kategorisi → yalnızca etiket (kod kaldırıldı, widget ayarları düzenlenebilir)

Fixed

  • •board-contents/board-showcase: file_type → mime_type
  • •boards-api: eksik is_shown_in_list + options JSON kısıtlaması
  • •contact-form POST: ob tampon tam temizleme
  • •Hero CTA: typing_words/description \n çift kaçış

DB Changes

  • •rzx_mp_items: license, repo_url, demo_url eklendi
  • •rzx_board_extra_vars: is_shown_in_list eklendi
  • •rzx_contact_messages: yeni tablo
v2.1.4 2026-04-17 · 6 ay önce

Added

  • •download-hero widget — yazılım indirme sayfası (version.json ile canlı entegrasyon, 4 yerleşik dil, temel özellikler / sistem gereksinimleri / sürüm geçmişi)
  • •/downloads sayfası — widget tipi sistem sayfası, 13 dil menü çevirisi, is_system=1
  • •contact-form widget (v0.1.0) — özel 1:1 soru formu widget'ı (misafirler için uygun, kategori seçimi, honeypot spam koruması, AJAX gönderimi)
  • •contact-info widget — iletişim bilgisi görüntüleme widget'ı
  • •location-map widget — konum haritası widget'ı
  • •rzx_send_mail() paylaşılan yardımcı — rzxlib/Core/Helpers/mail.php dosyasına yeni SMTP posta gönderme işlevi eklendi
  • •rzx_contact_messages tablosu — soruları depolamak için DB tablosu
  • •/contact sayfası — widget tipi sistem sayfası, 13 dil menü çevirisi

Fixed

  • •Sistem sayfası silme koruması — sistem sayfası menüden kaldırıldığında sayfa içeriği/widget'lar korunur (yalnızca menü öğesi kaldırılır)
  • •menus-api.php: DB is_system + config/system-pages.php slug üzerinden çift kontrol
  • •menus-js.php: sistem sayfası silindiğinde "Yalnızca menüden kaldırılacak" uyarısı gösterir
  • •Sistem sayfası menüsü çok dilli — bir sistem sayfası menüye eklendiğinde, site.pages.* çeviri anahtarlarından 13 dil etiketi otomatik kaydedilir
  • •İndirmeler sayfası çevirisi — 13 dil için site.pages.downloads çevirileri eklendi

Changed

  • •Ana sayfa hero — İndir düğmesi → /download/voscms-latest.zip üzerinden doğrudan indirme, sürüm v2.1.1 olarak güncellendi
  • •Auth.php — sendSmtpMail yerine önce paylaşılan rzx_send_mail() yardımcısını çağırır (geri dönüş korunur)
  • •index.php — mail.php yardımcısının otomatik yüklenmesi eklendi
v2.1.3 2026-04-17 · 6 ay önce

Changed

  • •Barındırma sekmesi — özet kart + kullanım ilerleme çubuğu + FTP/VT bağlantı bilgileri tablosu (yönetici yapılandırdığında otomatik görüntülenir)
  • •Alan adı sekmesi — alan adı kartı + ana ayar + ad sunucusu bilgileri tablosu (yönetici yapılandırdığında otomatik görüntülenir)
  • •Mail sekmesi — posta sunucusu bilgileri (IMAP/SMTP) + hesap başına kart + satır içi şifre değiştirme
  • •Bakım sekmesi — bilgi kartı + planlanan tarih + iş geçmişi (yönetici kaydettiğinde otomatik görüntülenir)
  • •Ek hizmetler sekmesi — birleşik kart düzeni
  • •Yönetici kısmi ile aynı bilgi yapısında birleştirme (yönetici metadata'ya girer → hesabıma otomatik yansır)

Changed

  • •Etkinlik günlüğü alanı 1/3'ten 1/5 oranına küçültüldü
  • •Yönetici alan adı sekmesindeki NS varsayılan değer hard-coding kaldırıldı (Cloudflare API entegrasyonuna hazırlık)

Changed

  • •Sağlama iş akışı tamamen yenilendi: önce alt alan adı → satın alınan alan adı sonradan bağlanıyor
  • •Sağlama ID kuralı: alt alan adı veya satın alınan alan adının SLD'si
  • •Cloudflare wildcard tüneli kullanıldı (alt alan adı A kaydı eklemeye gerek yok)
  • •Sunucu 2 disk yapılandırması değiştirildi: NVMe 256 GB + SSD 2 TB + HDD 8 TB üç disk düzeni
v2.1.2 2026-04-16 · 6 ay önce

Added

  • •Hizmet sınıflandırma sistemi — service_class sütunu eklendi (recurring/one_time/free), completed_at tek seferlik hizmetler için tamamlanma tarihi
  • •Profilim hizmet detayı — /mypage/services/{order} türe göre sekme yönetimi (hosting/alan adı/posta/bakım/ek hizmetler)
  • •Hizmet yönetimi API — api/service-manage.php (otomatik yenileme geçişi, yenileme talebi, ana alan adı ayarı, posta şifresi değişimi)
  • •Yönetici sipariş yönetimi — /admin/service-orders sipariş listesi + detay sayfası, tek seferlik durum modalı (alındı/işlemde/beklemede/iptal edildi/tamamlandı)
  • •Yönetici menüsü — kenar çubuğuna "Hizmet Siparişleri" menüsü eklendi (position: 65)

Added

  • •phone-display — telefon numarası gösterim bileşeni (sunucu taraflı format_phone() yardımcısı), JS bağımlılığı yok
  • •format_phone() — PHP uluslararası telefon numarası biçimlendirme işlevi (Kore/Japonya/ABD/Çin/İngiltere/Fransa/Almanya/Avustralya vb.)
  • •Ücretsiz alan adı kurulumu — yönetici ayarlarında ücretsiz alt alan adı listesi yönetimi (service_free_domains), çoklu alan adı seçimi desteği

Fixed

  • •Eksik ücretsiz hizmet abonelikleri — ücretsiz siparişlerde alan adı/ek/bakım vb. için abonelik kaydı oluşturulmuyordu → tüm hizmetleri toplu oluşturacak şekilde yeniden düzenlendi
  • •Ödeme bölümündeki hüküm onayı — ücretsiz siparişlerde hüküm onay kutusu ödeme bölümüyle birlikte gizleniyordu → bölümün dışına taşındı
  • •updateSubmitButton isFree tespiti — btn.closest('form') NULL → document.querySelector ile düzeltildi
  • •Yönetici kenar çubuğu aktif göstergesi — $adminPath tanımsız olduğu için tüm menüler pasif görünüyordu → değişken bildirimi eklendi
  • •Profilim avatarı — services.php/service-detail.php dosyalarında use Auth + $user = Auth::user() eksikti
  • •Ek hizmet tek seferlik kontrolü — yönetici ayarlarındaki one_time bayrağı artık sipariş sırasında service_class'a doğru şekilde yansıtılıyor
  • •Tek seferlik hizmetin başlangıç durumu — active yerine pending (alındı) olarak oluşturulacak şekilde değiştirildi

Changed

  • •Sipariş API yeniden yapılandırması — 3 ödeme yolundaki (ücretsiz/kart/banka transferi) abonelik oluşturma kodu, $subscriptionData + _insertSubscriptions() ortak işlevinde birleştirildi
  • •Hizmet listesi UI — satır içi genişletme → kart bağlantısı + ayrı detay sayfası
  • •Telefon numarası gösterimi — profil/üye listesi/personel listesine format_phone() uygulandı
  • •Ücretsiz alan adının dinamikleştirilmesi — .21ces.net sabit kod → yönetici ayarları değerine referans
v2.1.1-hotfix 2026-04-16 · 6 ay önce

Fixed

  • •Footer menüsü 404 hataları — rzx_page_contents tablosunda hukuki belge sayfalarının (terms, privacy, refund-policy, data-policy, tokushoho, funds-settlement) verilerinin eksik olması → test DB'den geri yüklendi
  • •Widget oluşturucusunda resim/video yükleme hatası — ön uç sarıcı (page-widget-builder.php) üzerinden gönderilen FormData POST'unun AJAX işleyicisine iletilmemesi sorunu düzeltildi (dosya yükleme koşulu eklendi + ob_end_clean/exit işlemi)
  • •Yükleme dizini izinleri — storage/uploads/widgets/ sahibi www-data olarak değiştirildi, PHP-FPM yazma erişimi sağlandı

Added

  • •Hizmet talebi menüsü çok dilli — rzx_translations tablosuna 13 dil için menu_item.19.title çevirileri eklendi
  • •Hero CTA widget çok dilli — Dev sayfası hero banner'ının title, subtitle ve button text alanlarına 13 dil çevirisi uygulandı
  • •Yükleme durumu önizlemesi — resim/video yüklerken görsel geri bildirim eklendi: işleniyor (spinner), başarılı (onay işareti) ve başarısız (hata mesajı)
v2.1.1 2026-04-12 · 6 ay önce

Added

  • •Adım 0 dil seçim ekranı — kurulum başlamadan önce 13 dil arasından seçim; tüm arayüz o andan itibaren seçilen dilde görüntülenir
  • •Kurulum çeviri dosyaları ayrıldı — resources/lang/install.php (13 dil × 45 dize)
  • •Üye seviyesi çok dilli — Normal/Silver/Gold/VIP 13 dilde otomatik oluşturuldu

Added

  • •config/admin-menu.php — çekirdek yönetici menüsü bir yapılandırma dosyasına ayrıldı (Çekirdek güncellemelerinde korunur)
  • •admin-sidebar.php yeniden düzenlendi — 731 satır sabit kodlu → ~200 satır dinamik renderer (config + plugin.json tabanlı)
  • •vos-shop plugin.json — sabit kodlu menü menus.admin formatına taşındı

Added

  • •Kaydırmalı menü — mobil: avatar+ad geçiş çubuğu → sol kaydırmalı katman (300ms ease-out)
  • •Solma kararma arka planı — arka plana tıklayarak veya X düğmesiyle kapatın; body kaydırması kilitlendi

Added

  • •force_locale — varsayılan dili zorunlu uygula (?lang=xx parametresi kullanıcı değişikliğine izin verir)
  • •default_language — install.php ↔ Translator yapılandırma anahtarı birleştirildi
  • •URL parametresi — ?lang=xx önce algılanır, oturum/çereze kaydedilir

Fixed

  • •FAQ teması uygulanmadı — migrasyon SQL'i install.php'den önce varsayılan pano için basit bir INSERT çalıştırdığından INSERT IGNORE sessizce görmezden gelindi; düzeltildi
  • •translations tablosunda source_locale eksik — çekirdek migrasyonunda sütun eksik → db_trans() tamamen başarısız → kullanıcı bilgileri/menü/i18n görüntülenemedi; düzeltildi
  • •Ayarlar sekmesi kenar çubuğu aktif göstergesi — route_prefix özelliği eklenerek ayarlar menüsünün tüm ayarlar alt-rotalarında aktif kalması sağlandı
  • •Kurulum oturumu kalıntı hatası — .env olmayan yeni bir kurulumda eski PHP oturumu Adım 0'ın atlanmasına yol açıyordu; düzeltildi
  • •nginx 403 — admin/ fiziksel dizini ile rota çakışması düzeltildi (try_files $uri/ kaldırıldı)
  • •Gizleme betiğinde sürüm sabit kodlu — obfuscate.php artık sürümü version.json'dan dinamik olarak okuyor

Changed

  • •Grid/board-contents widget çok dilli görünüm — rzx_translations araması eklendi (geçerli locale → İngilizce geri dönüş)
  • •Site sektör kategorileri — 15'ten 26'ya genişletildi (eklenenler: kurumsal, alışveriş merkezi, hukuk, muhasebe, BT, medya vb.; 13 dil)
  • •Grid widget ayarları — grid-section render.php yerel hücre türüne (board-list) değiştirildi; 13 dilli başlık
  • •Adım 4 dil seçimi — 5'ten 13 dile genişletildi; kurulum diliyle önceden dolduruldu
  • •Saat dilimi seçimi — 13 dil kullanıcı bölgelerini kapsayan 12 saat dilimine genişletildi
v1.26.0 2026-04-01 · 7 ay önce

Added

  • •Hizmet seçim ekranının üstünde paket (set) hizmetler 3 sütun halinde gösteriliyor — bireysel hizmetlerden görsel olarak ayırt etmek için amber renk teması
  • •SET rozeti, etkinlik indirimi etiketi, dahil edilen hizmet adları, paket fiyatı, orijinal fiyat üstü çizili, indirim oranı gösterimi
  • •Paket seçimi tüm dahil hizmetleri otomatik seçer (fiyat paket fiyatı olarak hesaplanır)
  • •Pakete dahil hizmetler tek tek açılıp kapatılamaz (yanlış fiyat hesabını önler)
  • •Atama modu: personel başına paket filtrelemesi için rzx_staff_bundles tablosu
  • •bundles parametresi onay sayfasına iletildi
  • •Çok dilli destek: paketle ilgili kiosk çeviri anahtarları 13 dil için eklendi

Added

  • •Görünüm geçiş düğmeleri — üst çubukta [Ay] [Hafta] [Gün] geçişi (aktif durum: mavi)
  • •Haftalık görünüm — sol dikey = haftanın günü, üst yatay = zaman ekseni
  • •Yatay kaydırma, rezervasyon blokları zaman çubuğu olarak görüntülenir
  • •Şerit algoritması: zaman çakışmasını algılar ve otomatik olarak aşağı yerleştirir, satır yüksekliği değişken
  • •Sol kenar çubuğu ↔ ızgara dikey kaydırma senkronize edildi
  • •Günlük görünüm — yatay = zaman ekseni, dikey = şeritler (haftalık görünümle aynı yöntem)
  • •Çalışma saatlerine dayalı zaman aralığı — business_hour_start/business_hour_end ayarlarına dayalı; aralık dışı rezervasyonlar için otomatik genişler
  • •Boş hücre tıklamasında zaman aktarımı — haftalık/günlük görünümde X koordinatı tıklaması → 15 dakikalık birim zaman hesaplama → rezervasyon modalının başlangıç zamanı otomatik doldurulur
  • •Üst gezinti çubuğu sabitlendi — overflow-x-hidden + sticky uygulandı; yatay kaydırma sırasında görünüm alanında kalır

Added

  • •Yönetici > Ayarlar > Genel — iş başlangıç/bitiş saati ayar arayüzü eklendi
  • •business_hour_start, business_hour_end DB ayar anahtarları
  • •Takvimin haftalık/günlük görünümündeki varsayılan zaman aralığına uygulandı

Fixed

  • •POS add-service eksik alanları — start_time, end_time, staff_id, designation_fee, notes iletimi eklendi (önceden: sunucu tarafında zaman sabit kodlanmış, personel/notlar eksik)
  • •end_time gece yarısı geçmesinin önlenmesi — ReservationHelper, start-service API ve rezervasyon formu calcEnd() içinde % 24 → min(23:59) üst sınırı uygulandı
  • •POS kullanımda belirleme gece yarısı geçişi işleme — CustomerBasedAdapter, end_time < start_time durumunu gece yarısı geçişi olarak işler
  • •Rezervasyon paketi doğrulaması — yalnızca paket seçildiğinde (bireysel hizmet olmadan) rezervasyon oluşturulmasına izin verecek şekilde düzeltildi

Changed

  • •Sekme adı değişiklikleri: Kabul / Kabul Listesi / Rezervasyonlar
  • •Kabul Listesi: walk_in, pos, kiosk, admin kaynakları — tüm durumlar gösteriliyor
  • •Rezervasyonlar: phone, online kaynakları — tüm durumlar gösteriliyor
  • •Sıralama düzeni: Bekliyor → Onaylandı → Kullanımda → Tamamlandı → Gelmedi → İptal edildi; aynı durum içinde zamana göre sıralandı
  • •Tamamlandı/İptal edildi/Gelmedi satırları: opacity-50 ile soluklaştırıldı, atanmamış rozet gösterildi

Changed

  • •Tamamlandı rozeti: gri → yeşil olarak değiştirildi
  • •İptal edildi/gelmedi rozetleri eklendi (sayı 0 ise gizlendi)

Added

  • •Kart altı: bekleme durumundaki kartlara gelmedi düğmesi eklendi (yasak simgesi), iptal düğmesi kırmızıya çevrildi
  • •Detay modalı: pending ve confirmed durumlar için gelmedi eylem düğmesi gösterildi
  • •Grup toplu gelmedi: POS.noShowAllServices() işlevi eklendi

Fixed

  • •Rezervasyon detay geri gezintisi — <a href="/reservations"> → history.back(), önceki sayfaya döner
  • •Çok dilli: takvim görünümü geçişi (ay/hafta/gün), paket, çalışma saatleri ile ilgili anahtarlar 13 dil için eklendi
v1.25.0 2026-04-01 · 7 ay önce

Architecture

  • •POS bağımsız bir eklenti yapısına ayrıldı
  • •resources/views/admin/reservations/pos-*.php → resources/views/admin/pos/ dizinine taşındı
  • •POS özelliği pos/ dizininin varlığına göre otomatik olarak etkinleştirilir/devre dışı bırakılır (is_dir() kontrolü)
  • •Kenar çubuğu menüsü: pos/ dizini yoksa POS menüsü otomatik gizlenir
  • •index.php yönlendirme: pos/ dizini yoksa POS rotaları devre dışı bırakılır
  • •pos/_init.php → rezervasyon ortak _init.php'ye devreder (DB, kimlik doğrulama, i18n paylaşımlı)
  • •API uç noktaları reservations/_api.php'de kalır (geriye dönük uyumluluk garanti edilir)

Added

  • •Birleşik ödeme modalı — puan + nakit + kart eş zamanlı kullanımı (birleşik ödeme)
  • •Puan: bakiye sorgulama, manuel giriş veya tüm tutarı kullanma
  • •Nakit: tutar girişi
  • •Kart: tutar girişi + "kalan bakiyeyi kullan" otomatik doldurma düğmesi
  • •Taksit: peşin / 2–12 ay seçimi
  • •Gerçek zamanlı toplam, para üstü ve eksik tutar otomatik hesaplama
  • •Stripe kart ödemelerinde nakit/puanlar yalnızca kart ödemesi başarılı olduktan sonra işlenir (iptal durumunda güvenli)
  • •Hizmet detay modalı — puan görüntüleme
  • •Üye puan bakiyesi başlık alanında her zaman gösterilir (bakiye 0 olsa bile gösterilir)
  • •Hizmet detay modalı — personel rozeti iyileştirmesi
  • •Atanmış/belirlenen rozet personel adından önce gösterilir (önceden: adın altında)
  • •Makbuz/yazdırma düğmesi konumunun değiştirilmesi
  • •Müşteri detay bölümünün üstüne taşındı, makbuz (sol) + yazdırma (sağ)
  • •Yazdırma işlevi iyileştirmesi
  • •Harici bir sayfa açmak yerine geçerli hizmet detay modalının içeriğini yazdırır

Changed

  • •Kart düzeni — grid tabanlı → flex-wrap sabit boyutlu kartlar
  • •Sabit kart boyutu: varsayılan 320×240px (küçük: 260×200, büyük: 380×280)
  • •Kart boyutları ekran genişliğiyle değişmez; otomatik satır kaydırma
  • •Kart ödeme modalı — genişlik 1030px, yükseklik 800px olarak genişletildi

Fixed

  • •API cross-origin hatası çözüldü
  • •$baseUrl .env'deki APP_URL'e sabit kodlanmıştı ve diğer host/HTTPS'den erişimde fetch başarısız oluyordu
  • •Kontrol paneli: fetch URL'si göreli yola değiştirildi (/update-api.php)
  • •Rezervasyon _init.php: $baseUrl boş dizeye değiştirildi, böylece tüm fetch'ler göreli yol kullanır
  • •Cloudflare HTTPS proxy ortamında karma içerik sorunu tamamen çözüldü
  • •DB migrasyonu yürütme hatası — "Failed to fetch" çözüldü (cross-origin sorunu)
  • •Stripe birleşik ödeme iptali sırasında nakit ön işlem hatası
  • •Önce: nakit önce işleniyordu → kart ödemesi iptal edildiğinde nakit zaten uygulanmıştı
  • •Sonra: nakit/puanlar yalnızca Stripe kart ödemesi başarılı olduktan sonra işlenir

i18n

  • •pos_pay_after_points — puan uygulandıktan sonraki tutar
  • •pos_pay_proceed — ödemeye devam et
  • •pos_pay_remainder — kalan bakiyenin tamamını kullan
  • •pos_pay_installment — taksit
  • •pos_pay_lump_sum — peşin ödeme
  • •pos_pay_months — ay
  • •pos_pay_total_pay — toplam
  • •pos_pay_short — eksik
  • •show_receipt — makbuz
  • •show_print — yazdır
v1.18.0 2026-03-29 · 7 ay önce

Added

  • •Çok dilli tarih biçimlendirme işlevi — formatReservationDate($dateString, $locale)
  • •13 dil desteği (ko, en, ja, zh_CN, zh_TW, de, es, fr, id, mn, ru, tr, vi)
  • •Rezervasyon detay sayfasında tarih ve haftanın gününü otomatik olarak yerelleştirir
  • •Yedek: desteklenmeyen locale'ler → İngilizce format

Changed

  • •Rezervasyon detay sayfasının çok dilli işlenmesi
  • •Hizmet adı, personel adı ve paket adı yerelleştirildi (DB translations tablosuna dayalı)
  • •Tarih biçimlendirme işlevi entegre edildi
  • •Ödeme durumu etiketi yerelleştirildi (payment_status alanı)
  • •Ödeme durumu çok dilli desteği
  • •Tüm dil dosyalarına (11 dil) payment bölümü eklendi
  • •Ödenmedi, ödendi, kısmi ödeme, iade edildi çevirileri

Fixed

  • •Rezervasyon detay sayfası: yerelleştirilmeyen personel ve hizmet adları artık doğru şekilde görüntüleniyor
  • •Ödeme durumu etiketi: yalnızca Korece gösterildiği sorun giderildi
  • •_tr() işlevine dayalı çok dilli işleme birleştirildi

Layout & UI

  • •Sayfa genişliği birleştirildi (max-w-5xl → max-w-7xl)
  • •Pano sayfaları (liste, okuma, yazma): max-w-5xl → max-w-7xl
  • •Harici sayfa (page.php): varsayılan değer ve DB ayar değerleri güncellendi
  • •Rezervasyon detayı / rezervasyon sorgulama / personel sayfaları: DB ayar değerleri güncellendi
  • •Sonuç: tüm sayfa genişlikleri rezervasyon sayfasıyla aynı hale getirildi

Documentation

  • •COMPONENT_MANUAL.md'ye formatReservationDate() için ayrıntılı belgeleme eklendi
  • •Desteklenen diller ve format tablosu
  • •Kullanım örnekleri ve iç yapı
  • •Notlar ve ilgili işlevler
v1.16.0 2026-03-23 · 7 ay önce

Added

  • •Mobil alt menü çubuğu — Personel / Rezervasyonlar / Ana Sayfa / Giriş (veya Hesabım) / Kayıt / Daha Fazla, mevcut sayfa vurgulamasıyla
  • •Mobil "Daha Fazla" paneli — ana menü + Hesabım / Çıkış
  • •Düzen/skin ayarları gerçek anlamda uygulandı — site_layout, site_page_skin, site_board_skin, site_member_skin → rendering'e yansıtıldı
  • •no_layout parametresi — düzen olmadan yalnızca içerik (önizleme amaçlı)
  • •Çeviri anahtarları eklendi — common.nav.staff, common.nav.more (13 dil)

Fixed

  • •Üye sayfalarına düzen uygulandı (login/register/forgot/reset): skin <main> öğesi ayıklanarak yinelenen başlık kaldırıldı
  • •Üye skin'inde ImageCropper/ProfilePhotoCropper çift bildirim hatası düzeltildi
  • •Menü yükleyici include_once sorunu: skin closure içinde önce yüklendiğinde base-header menüsünün kaybolması sorunu düzeltildi
  • •apple-mobile-web-app-capable kullanımdan kaldırıldı → mobile-web-app-capable (8 dosya)
  • •Mobil cihazlarda başlık giriş/kayıt düğmeleri gizlendi (alt menü çubuğuyla değiştirildi)
  • •Alt menü çubuğu için iOS safe-area desteği

Changed

  • •Üye sayfaları kendi düzeninden varsayılan düzene taşındı (login/register/forgot/reset)
  • •Alt footer boşluğu kaldırıldı (mobil menü çubuğu sabit konumlandırma kullanıyor)
v1.15.3 2026-03-22 · 7 ay önce

Added

  • •Düzen ayrıntı ayarları paneli — SkinConfigRenderer tabanlı ayarlar formunun AJAX ile yüklenmesi
  • •Düzen menü ayarları — layout.json'ın menus bölümü → DB sitemaps açılır listesinin otomatik oluşturulması
  • •SkinConfigRenderer sekme desteği — vars'a tab özelliği eklenince sekme UI'si otomatik oluşur
  • •SkinConfigRenderer yeniden yapılandırma — birleşik renderVar() tek metodu, renderFormFlat/renderFormWithTabs ayrımı, ortak renderDependsOnJs
  • •layout.json uzantıları — menus (GNB/FNB), 14 vars (başlık/logo/renk/altbilgi/özel), 13 dil
  • •Düzen önizleme entegrasyonu — "Devre Dışı" seçilince ?no_layout=1 ile düzensiz önizleme gösterilir

Fixed

  • •Düzen yönetimi menüsü sorgusu: rzx_menus → rzx_sitemaps tablo adı düzeltildi
  • •Orta panel genişliği ayarı + aksiyon bağlantısı whitespace-nowrap

Pending

  • •Düzen/skin ayar değerlerinin gerçek sayfa oluşturmaya uygulanması (sonraki oturum)
v1.15.2 2026-03-22 · 7 ay önce

Added

  • •Düzen yönetimi sayfası — 3 panelli yapı: sol önizleme+menü, sağ tema listesi, ayrıntı ayarlar paneli
  • •Her tema öğesi için: küçük resim + ayrıntı ayarlar/kopya oluştur/sil eylem bağlantıları
  • •"Devre dışı bırak" / "Başka tema yükle" seçenekleri
  • •4 kategorili kayıt: düzen, sayfa, pano, üye (site_layout, site_page_skin, site_board_skin, site_member_skin)

Changed

  • •"Tasarım yönetimi" → "Düzen yönetimi" olarak yeniden adlandırıldı (13 dil: admin.php + site.php)
v1.15.1 2026-03-22 · 7 ay önce

Changed

  • •15 site yönetim sayfası → paylaşımlı _head.php başlığı uygulandı
  • •Panolar: boards, boards-create, boards-edit, boards-trash
  • •Menü: menus
  • •Tasarım: design
  • •Sayfalar: pages, pages-settings, pages-edit-content, pages-document, pages-compliance, pages-widget-builder
  • •Widget'lar: widgets, widgets-create, widgets-marketplace
  • •Embed modu sayfaları (boards-edit, pages-settings, pages-edit-content) _head.php'yi yalnızca embed dışı modda uygular
  • •Tüm yönetici sayfası başlığı/düzeni birleştirmesi tamamlandı
v1.15.0 2026-03-22 · 7 ay önce

Added

  • •Sistem widget modülü — 4 widget: staff (personel tanıtımı), booking (rezervasyon yap), lookup (rezervasyon sorgula), cta001 (rezervasyon eylem çağrısı banner'ı)
  • •Sistem sayfaları — staff, booking, lookup DB'ye kaydedildi (is_system=1) + yönlendirme (/staff, /booking, /lookup)
  • •Widget tabanlı sayfa render — staff/booking/lookup sayfaları widget yerleştirildiğinde widget render eder, yerleştirilmediğinde eski render'a döner
  • •Widget otomatik DB kaydı — syncToDatabase() çağrısıyla widget dizini eklendiğinde otomatik kaydolur
  • •Widget kategorisi system — 13 dile çevrildi (widgets.categories + widget_builder.cat)
  • •Sayfa listesi birleştirme — sistem sayfası döngü render + birleşik dişli/düzenle/önizleme ikon seti
  • •Admin sayfa başlığı birleştirme — $pageSubTitle + $pageSubDesc (_head.php aracılığıyla ortak çıktı)
  • •Çeviri anahtarları eklendi — staff.admins, staff.attendance.report/stats, points.description vb.

Fixed

  • •Widget builder'da page_slug = 'home' sabit kodlu → $_GET['slug'] dinamik işleme
  • •Widget builder AJAX save/preview home sabit kodlu → dinamik $pageSlug
  • •Widget builder önizleme URL → dinamik $pageSlug (ana sayfa sabit → her sayfa için)
  • •Widget preview_widget'ta eksik WidgetLoader require — düzeltildi
  • •Hizmet kartı görünümü resim yolu (/storage/ öneki)
  • •Kiosk ayarları genişliği max-w-3xl → %100 birleştirildi
  • •POS başlığı "Rezervasyon Yönetimi" → "POS" olarak yeniden adlandırıldı

Changed

  • •10 personel yönetim + 4 üye yönetim sayfası → ortak _head.php başlığı uygulandı
  • •Kiosk/bundle sayfaları _head.php uygulandı
  • •Kiosk dil ayarları grid → flex-wrap duyarlı
  • •Sayfa listesi: sistem sayfaları veri güdümlü döngüyle render edildi
v1.14.1 2026-03-22 · 7 ay önce

Added

  • •Sayfa skin sekmesi — skin temel bilgileri + genişletilmiş değişken ayarları (SkinConfigRenderer tabanlı)
  • •Tüm sayfa türlerine skin uygulandı — skin ayarları document/widget/external için eşit şekilde geçerli
  • •Başlık arka plan sistemi — resim/video arka planı + katman + metin rengi (ortak partial _page-title-bg.php)
  • •depends_on sistemi — skin.json'da alanlar arası bağımlılık bildirimsel tanımı, renderer JS'yi otomatik oluşturur (checkbox/radio desteği)
  • •Skin dosyası yükleme — multipart ile resim/video yükleme (storage/skins/page/{skin}/)
  • •Kart tarzı düzen/skin seçici — modül bilgi sekmesinde küçük resim kart UI'ye değiştirildi
  • •SEO sistemi — SEO yardımcısı, başlık kalıbı, OG/Twitter meta etiketleri, içerik çıkarma
  • •OG Image yükleme — URL girişi + dosya yükleme + önizleme
  • •Ortak sonuç modalı — birleşik kaydetme başarı/hata modal UI'si (13 dil desteği)
  • •Hizmet kart görünümü — tam arka plan resimli kart + tablo/kart geçiş düğmesi
  • •Hizmetlerde sürükle-bırak sıralama — her iki görünümde sıra değiştirme + VT kaydı
  • •Rezervasyon personel atama/seçimi — rezervasyon detayında 2 düğme (ata/seç)
  • •Rezervasyon kaynağı UI'si — telefon rezervasyonu / walk-in / çevrimiçi seçimi
  • •Telefon rezervasyonu ayarları — hizmet temel ayarlarında etkinleştir/devre dışı bırak toggle'ı
  • •Güvenlik başlıkları — X-Frame-Options + CSP frame-ancestors
  • •PAGE_SYSTEM.md — sayfa sistemi geliştirme belgesi
  • •PRD_OrderSystem.md — masa sipariş sistemi planlama belgesi
  • •PRD_KioskSystem.md — kiosk sistemi planlama belgesi

Fixed

  • •Favicon VT ayarı uygulandı (ön yüz / yönetici / skin düzeni — 4 yer)
  • •Dashboard göç URL'si window.location.origin → $baseUrl (alt dizin ortamları)
  • •Sayfa ayarları embed modu API URL'si → admin yolu doğrudan belirtildi
  • •Sonuç modalı i18n: API yanıtı yerine sayfa oluşturmada yerel mesajlar kullanılır
  • •Skin sekmesinde boş skin değeri geri dönüşü ("" → default)
  • •pages-settings.php'de php://input çift tüketim sorunu çözüldü

Changed

  • •Kiosk / kiosk ayarları / bundle sayfaları → paylaşımlı _head.php başlığı uygulandı
  • •Skin ayarları JSON → FormData (multipart) aktarımına değiştirildi (dosya yükleme desteği)
  • •SkinConfigRenderer'a $baseUrl parametresi eklendi (resim/video önizleme)
  • •13 dil skin çevirileri (skin.json + site.php + common.php)
v1.13.0 2026-03-21 · 7 ay önce

Added

  • •Sayfa sistemi tamamlandı — menüden belge/widget/harici sayfalar oluşturulduğunda otomatik sayfa oluşturma
  • •Dinamik sayfa oluşturucu — page.php (belge→HTML, widget→WidgetRenderer, harici→iframe/include)
  • •Sayfa ortam ayarları — 3 sekme (temel / düzen & skin / SEO), page_config_{slug} JSON olarak kaydedilir
  • •Sayfa içeriği düzenleme — dile göre başlık & içerik düzenleme, slug değiştirme, tür değiştirme, silme
  • •Dinamik sayfa yönetim listesi — kullanıcı sayfaları DB'den otomatik yüklenir, türe göre ikonlar & rozetler
  • •Ön yüz yönetici ikonları — dişli (ayarlar) + düzenle (içerik) ayrı ayrı gösterilir
  • •Harici sayfa iframe'i — yükleme başarısız olduğunda "yeni pencerede aç" rehberi görüntülenir
  • •Dahili PHP/HTML dosyaları — include ile RezlyX düzeni içinde render edilir

Fixed

  • •Menü kısayol URL'si #menu_{id} → gerçek menü URL'sini kaydeder
  • •Menü düzenleme, oluşturma sırasındakiyle aynı kısayol UI yapısını gösterir
  • •Menü kaydı kısayol URL'sini yansıtır (formMenuType → panel görünürlük temeli)
  • •13 dil için menü çevirileri eklendi (12 menü öğesi × 13 dil)
  • •Sayfa belge editörü çeviri anahtarı yolu düzeltildi (admin.site.pages. → site.pages.)

Changed

  • •DB rzx_page_contents'e page_type sütunu eklendi (document/widget/external)
  • •Menü silindiğinde ilgili sayfa + çeviri verileri de birlikte silinir
v1.12.5 2026-03-21 · 7 ay önce

Fixed

  • •Menü kısayol URL'si düzeltildi — artık #menu_{id} yerine gerçek menü URL'si kaydediliyor
v1.12.4 2026-03-21 · 7 ay önce

Fixed

  • •Skin ayarları liste türü uygulanmıyor — localStorage önbelleğinin skin ayarlarının üzerine yazması sorunu düzeltildi
  • •Stil değiştirme izin verilmediğinde yalnızca skin ayarları kullanılır; izin verildiğinde localStorage önceliklidir
  • •Checkbox gizli alanlarının çift gönderimi kaldırıldı (işaretlenmemiş durum artık JS'de işleniyor)
v1.12.3 2026-03-20 · 7 ay önce

Fixed

  • •İngilizce/Japonca için eksik pano çeviri anahtarları düzeltildi (source_locale, reply, style, board_settings vb.)
  • •Kategori adları için çok dilli geri dönüş uygulandı (locale → en → orijinal)
  • •Pano listesi gövde metni için çok dilli destek (webzine/kart/galeri önizlemeleri)
v1.12.2 2026-03-20 · 7 ay önce

Fixed

  • •Pano listesi gövdesi çok dilli geri dönüşü — çevrilmiş gövde webzine/kart/galeri önizlemelerine uygulandı (yerel → en → orijinal)
  • •Üretimdeki eksik skin dosyaları — FTP üzerinden skins/default/board/ dizini oluşturuldu ve skin.json/küçük resim yüklendi
v1.12.1 2026-03-20 · 7 ay önce

Fixed

  • •Üretimde skin ayarları görüntülenmiyor — tam dosya senkronizasyonu yeniden düzenlendi
  • •CLAUDE.md + BOARD_SYSTEM.md dosya yapısı tamamen güncellendi
v1.12.0 2026-03-20 · 7 ay önce

Added

  • •Skin ayarları sistemi tamamlandı — skin.json tabanlı dinamik form oluşturma + gerçek panolara uygulandı
  • •Bölüm gruplandırması (temel / liste / bağlantılar / tasarım / başlık arka planı / özel)
  • •radio ve video giriş türleri eklendi
  • •Resim/video dosyası yükleme (FormData multipart)
  • •Resim/video silme özelliği
  • •Skin bilgi tablosu (yazar / URL / e-posta / tarih / sürüm / küçük resim)
  • •Başlık arka plan resmi/videosu — arka plan türü, yükseklik, overlay saydamlığı ve metin rengi ayarları
  • •4 liste düzeni stili — liste / webzine / galeri / kart; skin dosyaları ayrıldı + geçersiz kılma desteği
  • •Galeri: tam resim kapak + üzerine gelindiğinde slayt animasyonu
  • •Webzine: küçük resim + başlık + önizleme + meta bilgi kartı
  • •Duyuru gönderileri üst listeye ayrıldı (_list-notices.php)
  • •Skin ayarları uygulandı — primary_color, border_radius, posts_per_row, allow_style_switch, show_category, bağlı pano, Font Awesome, özel CSS/HTML
  • •skin.json varsayılan değer otomatik birleştirme — DB'ye kayıt olmasa da skin.json varsayılanları uygulanır

Fixed

  • •skin_config DB'ye kaydedilmiyor (boards-api.php güncelleme işlemi skin_config içermiyordu)
  • •Skin kaydetme URLSearchParams → FormData (multipart) olarak değiştirildi (dosya yüklemeyi desteklemek için)
  • •$_POST['skin_config'] dizisi için otomatik ayrıştırma desteği eklendi
v1.11.3 2026-03-20 · 7 ay önce

Fixed

  • •Gönderi detay sayfasında önceki/sonraki gönderi başlıkları için çok dilli geri dönüş uygulandı (locale → en → orijinal)
v1.11.2 2026-03-20 · 7 ay önce

Fixed

  • •Pano listesi başlığı çok dilli geri dönüşü — tüm yerel ayarlarda çeviriler sorgulanıyor (yalnızca Korece kısıtlaması kaldırıldı), kaynak dili dikkate alan İngilizce geri dönüş
v1.11.1 2026-03-20 · 7 ay önce

Fixed

  • •OG kartları için tek URL algılama iyileştirildi — <font> / <span> gibi satır içi etiketlerin içindeki URL'ler artık blok üst öğeye kadar izlenerek doğru şekilde işleniyor
v1.11.0 2026-03-20 · 7 ay önce

Added

  • •URL otomatik bağlantı — pano gönderisi gövdesinde/editöründe URL'leri otomatik algılar → <a> etiketlerine dönüştürür
  • •OG bağlantı önizleme kartı — SNS banner formatı (küçük resim + başlık + açıklama + alan adı) kartı otomatik oluşturulur
  • •Editör: URL gir/yapıştır + Enter → OG API çağrısı → kart ekleme
  • •Gövde: bağımsız URL bağlantısı → otomatik olarak OG kartına dönüştürülür
  • •OgFetcher modülü — OG/Twitter Card metadata çıkarımı, favicon, otomatik kodlama işleme
  • •OG API — /board/api/og uç noktası
  • •board-autolink.js — birleşik otomatik bağlantı + OG kartı JS (base-header'dan global yükleme)
v1.10.2 2026-03-20 · 7 ay önce

Fixed

  • •Editör/içerik görsel hizalaması — Tailwind preflight'ın img { display: block } kuralını geçersiz kılma
  • •board-content.css ortak CSS oluşturuldu (editör + içerik görüntüleme birleştirildi)
  • •base-header.php üzerinden global olarak yüklendi (tüm frontend sayfaları)
  • •multilang-modal.php dosyasına global editör stilleri eklendi (tüm yönetici Summernote örnekleri)
  • •Pano içeriğinden prose sınıfı kaldırıldı; editörün satır içi stilleri artık %100 korunuyor

Changed

  • •CLAUDE.md'de pano içeriği stil kuralları belgelendi (board-content sınıfı zorunlu)
v1.10.1 2026-03-20 · 7 ay önce

Fixed

  • •Pano kategorisi eklenirken çok dilli modalda önceki kategori verilerinin yüklenmesi hatası düzeltildi (benzersiz geçici langKey oluşturulur)
  • •Migrasyon 021'e comment_max_depth için varsayılan değer 3 eklendi
v1.10.0 2026-03-20 · 7 ay önce

Added

  • •Pano genişletilmiş değişkenleri — ExtraVarRenderer bileşen modülü (15 tür: tür başına input/display render)
  • •Genişletilmiş değişken çoklu dil — genişletilmiş değişken değerlerinin dile göre bağımsız depolanması (rzx_translations entegrasyonu, geri dönüş zinciri)
  • •Pano gönderileri çok dilli ayrı depolama — orijinal dilde düzenleme doğrudan board_posts'a kaydeder; diğer diller çevirileri rzx_translations'a kaydeder
  • •Pano gönderisi okuma geri dönüş zinciri — başlık/gövde/genişletilmiş değişkenleri sırayla görüntüler: mevcut locale → en → orijinal
  • •İç içe yanıtlar — 3 seviye derinlikte iç içe yorum desteği, özyinelemeli ağaç sıralama, satır içi yanıt formu
  • •Yorum beğenme/beğenmeme — yorum başına beğeni düğmesi + API
  • •Pano ayarlarına ön uç erişimi — admin dişli simgesi → /board/{slug}/settings ön uç düzeni
  • •Pano admin başlık bağlantısı — admin pano listesinde başlığa tıklamak o panoya gider

Fixed

  • •Pano API admin izin kontrolü: $currentUser['role'] → $_SESSION['admin_id'] (4 dosya güncellendi)
  • •Orijinal dil bildirimi yalnızca yazar/admin'e gösterilir
  • •Pano ayarları embed modu sekme bağlantısı ön uç URL'sini destekler

Changed

  • •DB rzx_board_posts'a extra_vars JSON sütunu eklendi
  • •comment_max_depth varsayılan değeri 0 → 3 olarak değiştirildi
  • •Yorum eylem çubuğu birleştirildi (beğen/beğenme/yanıtla/sil simgeleri)
v1.9.4 2026-03-20 · 7 ay önce

Added

  • •Varsayılan pano verileri — Duyurular, Soru-Cevap, SSS ve Serbest pano migrasyonları (020_default_boards_v193.sql)
v1.9.3 2026-03-20 · 7 ay önce

Added

  • •Üye grubu sıfırlama — varsayılan verilerle (7 grup + 13 dil çevirisi) başlatma
  • •Puan ayarları sıfırlama — yapılandırma değerlerini / seviye puanlarını / grup bağlantılarını varsayılanlara geri yükleme (üye bakiyeleri etkilenmez)
  • •Üye grubu çok dilli — grup adı / fayda açıklamasına rzx_multilang_input() ortak bileşen uygulandı
  • •Üye grubu sürükle ve bırak — SortableJS kart sıralaması + otomatik kaydetme

Fixed

  • •Üye grubu kartı çeviri görüntüleme yerel ayara göre (kart görünümü + düzenleme modalı)
  • •Üye grubu çok dilli çeviri verisi bozulması düzeltildi (PHP UTF-8 yeniden kaydetme)
  • •Puan modülü ayarları pano sütun adı düzeltildi (board_name → title)
  • •Puan üye listesi harmanlama çakışması çözüldü (utf8mb4_unicode_ci olarak birleştirildi)
  • •Üretim VT geçişi (019_point_system_v190.sql)
v1.9.0 2026-03-20 · 7 ay önce

Added

  • •Ödül puanı (kredi) yönetim sistemi — 3 sekme yapısı (Temel Ayarlar / Modül Ayarları / Üye Puanları Listesi)
  • •3 alanlı puan yapısı — point (etkinlik puanları), balance (ödeme kredisi), total_accumulated (birikmiş puanlar, seviye hesabının temeli)
  • •Birikmiş puan ağırlıklandırması — ayrı ödeme ağırlığı / etkinlik ağırlığı, ödeme yapan müşterilere tercihli seviye atlama
  • •Puan değişimi — puan → kredi dönüşümü (oran, birim, minimum puan yapılandırılabilir)
  • •17 puan verme/kesme kategorisi — Rhymix ile aynı yapı (silme sırasında geri alma, zaman sınırı, duyurular hariç)
  • •Modül ayarları — her pano için 15 puan öğesini ayrı ayrı yapılandırma
  • •Üye puanları listesi — 4 sütun (puan/kredi/birikmiş/seviye), arama, bireysel düzenleme
  • •Seviye puanları — formül tabanlı hesaplama, maksimum seviyenin dinamik ayarlanması, grup bağlantısı
  • •Puan sistemi belgeleri — POINT_SYSTEM.md ayrıntılı tasarım belgesi
  • •Üye grubu sürükle ve bırak — SortableJS ile kart sırasını değiştirme + otomatik kaydetme
  • •Üye grubu çok dil desteği — rzx_multilang_input() ortak bileşeni grup adı/avantaj açıklamasına uygulandı
  • •Üye grubu başlangıç verileri — 7 grup × 13 dil çok dilli çeviri verileri

Changed

  • •rzx_member_points veritabanına balance, total_accumulated sütunları eklendi
  • •rzx_point_levels.group_id INT'ten CHAR(36)'ya değiştirildi (UUID uyumlu)
  • •rzx_point_levels, rzx_member_points collation'ı utf8mb4_unicode_ci olarak birleştirildi
  • •Paket sayfa düzeni güncellendi (sidebar-main-content → flex-1 ml-64 gösterge paneli deseni)
  • •Paket sayfası para birimi $config['currency'] → $siteSettings['service_currency'] düzeltildi
  • •Hizmet süresi select → input number + datalist olarak değiştirildi
  • •CLAUDE.md'ye çok dilli giriş arayüzü kuralları eklendi (rzx_multilang_input zorunlu kullanım)
v1.8.3 2026-03-20 · 7 ay önce

Added

  • •Bundle ayrıntı yönetim sayfası — bireysel bundle temel bilgilerini düzenleme, kapak görseli yükleme, hizmet bileşimini düzenleme, personel bağlama, aktif/pasif geçiş
  • •Etkinlik indirimi — bundle başına etkinlik fiyatı, dönem (başlangıç/bitiş), etiket ayarları; dönem içinde otomatik etkinleşir
  • •Bundle listesi kart tasarımı — ızgara kart düzeni, resim başlığı, etkinlik/indirim rozeti, aşağıya sabitlenmiş eylem çubuğu
  • •Önerilen paket arka plan görseli — müşteri personel detay sayfasındaki bundle kartlarında kapak görseli arka planı + gradyan katmanı
  • •Hizmet süresi doğrudan girişi — select → sayı girişi (5–480 dak, 5 dakika adımlar) + datalist öneri listesi

Changed

  • •DB rzx_service_bundles'a sütunlar eklendi: event_price, event_start, event_end, event_label
  • •Bundle listesi API'sine total_duration ve etkinlik sütunları eklendi
  • •Çeviri dosyaları (ko, en, ja): bundle ayrıntı yönetimi + etkinlik indirimi anahtarları eklendi
v1.8.1 2026-03-19 · 7 ay önce

Added

  • •POS ayarlar sayfası — kart boyutu, resim/fiyat/telefon görünümü, opaklık, varsayılan sekme, otomatik yenileme, uyarı sesi, personel ataması zorunlu, otomatik atama
  • •POS ayarları uygulandı — kart boyutu/resim/fiyat/telefon/opaklık/otomatik yenileme/varsayılan sekme POS'a yansıtıldı
  • •Personel otomatik atama — POS ayarlarında etkinleştirildiğinde, kiosk check-in sırasında otomatik atama yapılır (hizmeti verebilen + en az aynı günlük rezervasyon)
  • •POS kart personel rozeti — atandı/atanmadı göstergesi; atanmamışsa devam et butonu devre dışı
  • •POS hizmet resim arka planı — hizmet detay modalının başlık + müşteri alanında temsili hizmet resmi arka planı
  • •Personel is_visible — liste görünürlüğünü kontrol eder; gizli personel rezervasyonlar/POS/kiosk'tan dışlanır
  • •Personel kart banner'ı — admin personel kartında banner resmi + durum rozeti
  • •Kiosk otomatik atama — staff_id=NULL ile check-in; atama POS'ta admin tarafından yapılır

Fixed

  • •POS personel ataması: atama sonrası hizmet listesi hemen güncellenir (önbellek önleme)
  • •Personel atama API parametresi düzeltildi (reservation_id → reservation_ids[])
  • •Üretimdeki birden fazla eksik tablo/sütun düzeltildi (migrasyon 018 güçlendirildi)
  • •Admin çıkış rotası eklendi
  • •Kiosk ön kimlik doğrulama rotası yerleşimi
v1.7.0 2026-03-18 · 7 ay önce

Added

  • •Temel düzen sistemi — layouts/base-header.php + base-footer.php, index.php'de ob_start otomatik uygulanır, tüm müşteri sayfaları için ortak üst bilgi/alt bilgi
  • •Pano ön yüzü — liste, ayrıntı, yazma/düzenleme sayfaları, Summernote düzenleyici, sürükle & bırak dosya ekleri
  • •Pano kısa URL'leri — /board/ öneki olmadan /free, /notice/3 vb. sayfalara erişim; DB slug otomatik eşleşmesi
  • •Rezervasyon sorgulama sayfası — /lookup kısa URL'si, rezervasyon numarası / e-posta / telefon ile arama
  • •Rezervasyon detay sayfası — /booking/detail/{numara}, personel karşılama balonu, hizmet/ödeme/iptal bilgileri
  • •Rezervasyon iptal sayfası — /booking/cancel/{numara}, iptal nedeni girişi
  • •Hesabım rezervasyon detayı — /mypage/reservations/{id}, kenar çubuğu + ayrıntılı bilgiler
  • •Çok dilli pano — original_locale (ilk taslak dili) + source_locale (geçerli içerik dili), geri dönüş zinciri (source → en → original)
  • •Personel karşılama mesajları — greeting_before (işlem öncesi) + greeting_after (işlem sonrası), çok dilli, rezervasyon durumuna göre görüntülenir
  • •Yönetici profil açılır menüsü — profil fotoğrafı/baş harfler + ad + ana sayfa / hesabım / çıkış bağlantıları
  • •Müşteri üst bilgisindeki yönetici bağlantısı — yönetici olarak oturum açıldığında açılır menüde yönetici paneli bağlantısı görünür

Changed

  • •Tüm müşteri sayfaları için birleşik düzen (bireysel HTML yapıları kaldırıldı, LayoutManager otomatik uygulandı)
  • •Pano kategori görüntüleme koşulu show_category'den hide_categories'e değiştirildi
  • •Pano URL'si varsayılan olarak /board/free'den kısa URL /free'ye değiştirildi
  • •Yönetici üst çubuğundaki "Admin" ifadesi gerçek oturum adı + profil fotoğrafıyla değiştirildi

Fixed

  • •rzx_users.role sütunu eksik → yönetici tespiti artık $_SESSION['admin_id'] tabanlı
  • •rzx_users.nick_name sütunu eksik → name + Encryption şifre çözme kullanılıyor
  • •rzx_staff.profile_image → avatar sütun adına düzeltildi
  • •Service modelinde category_id int→string tür dönüşümü
  • •E-posta/telefon ile rezervasyon arama düz metin araması kullanıyor (veriler şifrelenmemiş)
v1.6.1 2026-03-18 · 7 ay önce

Added

  • •6 pano yönetici sekmesi — Temel ayarlar, Kategori yönetimi, Ek değişkenler, İzinler, Ek ayarlar, Skin
  • •Temel ayarlar sekmesinin birleştirilmesi — Temel bilgi + SEO + Düzen seçimi + Skin seçimi + Görüntüleme + Liste + Gelişmiş (katlanabilir/açılabilir)
  • •Ortak bileşenler — 8 components/board/section-*.php dosyası (basic, seo, layout-select, skin-select, display, list, advanced, js), oluşturma/düzenleme sayfalarında yeniden kullanılabilir
  • •Çok dilli giriş bileşeni — rzx_multilang_input() işlevi, metin/editör modları, satır içi küre butonu
  • •Gelişmiş kategori yönetimi — ağaç yapısı (parent_id), düzenleme modalı (ad/yazı tipi rengi/açıklama/izin verilen gruplar/genişlet/varsayılan kategori), SortableJS sürükle-sırala, üye derecelerinin DB'den dinamik yüklenmesi
  • •Ek değişkenler sekmesi — rzx_board_extra_vars tablosu, 15 giriş tipi (text_multilang, textarea_multilang, textarea_editor dahil), çok dilli destek, sürükle-sırala
  • •İzinler sekmesi — Erişim izinleri (all/member/grade:*/admin_staff/admin), modül yöneticisi (paylaşılan kullanıcı arama, profil fotoğrafı, izin kapsamı), bildirim maili bilgisi
  • •Ek ayarlar sekmesi — Entegre pano, belgeler (geçmiş/öneri/şikayet), yorumlar (adet/derinlik/onay/öneri/şikayet), WYSIWYG editörü (izin matrisi), dosyalar (indirme grubu), beslemeler (RSS kamuya açık/telif hakkı)
  • •Skin sistemi — skin.json formatı, SkinConfigRenderer, "multilang": true desteği, skin bilgi kartı
  • •Düzen sistemi — layout.json formatı, temel ayarlarda kart seçimi
  • •Paylaşılan kullanıcı arama — user-search.php bileşeni, şifreleme/şifre çözme, profil fotoğrafı, her yerde yeniden kullanılabilir
  • •Modül yöneticisi — rzx_board_admins tablosu, gönderi/yorum/ayar izinleri, bildirim aboneliği
  • •Gelişmiş ayarların genişletilmesi — yöneticiyi anonimden hariç tut, Data URL kısıtlaması, Unicode kötüye kullanımı, gönderi/yorum koruması (yorum sayısı/yanıt sayısı/süre), süper yönetici koruması, gönderen e-posta adresi
  • •Geçiş anahtarı UI — tüm evet/hayır öğeleri geçiş anahtarına dönüştürüldü (temel + ek ayarlar)
  • •Çeviri anahtarları — yaklaşık 300 anahtar, 13 dil

Fixed

  • •Çöp kutusu SQL hatası — LIMIT ? bağlama dizesi → tam sayı değişmezi
  • •Summernote oluşturulmuyor — jQuery/Summernote JS yükleme + modal görüntülendikten sonra başlatma
  • •Harmanlama hatası — board_admins JOIN sırasında COLLATE utf8mb4_unicode_ci açıkça belirtildi
  • •Katla/aç çalışmıyor — toggleSection işlevi önce <head>'de tanımlandı

Changed

  • •Bağımsız sekmeler (liste/gelişmiş) → temel ayarlar sekmesine katla/aç ile entegre edildi
  • •Skin seçimi → temel ayarlar sekmesine taşındı; skin sekmesi yalnızca ayarları gösterir
  • •Yönetici e-postası → gelişmiş ayarlarda "Gönderen e-posta adresi" olarak değiştirildi
  • •Modül yöneticisi → izinler sekmesine taşındı
  • •"Listede kategoriyi göster" → kategori ayarlarından kaldırıldı, skin başına ayarlara devredildi
  • •"Listede kategoriyi göster" → kategori ayarlarından kaldırıldı, skin başına ayarlara devredildi
  • •Yazma izni verilen gruplar → sabit kodlama yerine rzx_member_grades tablosundan dinamik yükleme
v1.6.0 2026-03-17 · 7 ay önce

Added

  • •Çok dilli geri dönüş sistemi: db_trans() içinde yerleşik geri dönüş zinciri (yapılandırılan dil → en → varsayılan dil → source_locale → herhangi bir çeviri)
  • •Pano ayarlarında çok dilli düğme: temel ayarlar sekmesindeki 6 alana çok dilli (küre) düğmesi eklendi
  • •Pano ön görünümünde çok dilli geri dönüş: _init.php'de başlık, açıklama, SEO, header/footer için çok dilli uygulama
  • •Widget çok dilli geri dönüş: WidgetRenderer::t(), tBtn() boş dize işleme iyileştirildi
  • •PWA çeviri anahtarları eklendi (13 dil: admin.pwa.update_available, update, later)

Fixed

  • •Features widget boş kart sorunu: ?? operatörü boş dizeyi "" geçerli değer olarak işliyordu → !empty() tabanlı geri dönüşle düzeltildi
  • •Üretimdeki Mixed Content hatası: APP_URL http→https düzeltildi + JS protokolü otomatik düzeltme
v1.5.2 2026-03-17 · 7 ay önce

Added

  • •POS hizmet geçmişinden hizmet silme özelliği (silme düğmesi + API + anlık DOM güncellemesi)
  • •13 dil için hizmet silme çeviri anahtarları eklendi
v1.5.0 2026-03-17 · 7 ay önce

Added

  • •Kiosk karşılama sistemi: hizmet onayı → müşteri bilgileri → rezervasyon oluşturma → sıra numarası verme
  • •Personel uygunluk rozeti: kiosk personel seçiminde meşgul/uygun durumunu gerçek zamanlı gösterir
  • •Uluslararası telefon numarası modülü: kiosk karşılama formuna phone-input bileşeni uygulandı
  • •Rezervasyon örnek veri seed'i: database/seed_reservations.php (POS/kiosk/çevrimiçi 10 kayıt)
  • •Kiosk ortak dosyaları ayrıldı (_styles.php, _bg.php, _scripts.php)
  • •13 dile 11 kiosk çeviri anahtarı eklendi

Changed

  • •Kiosk hizmet seçimi: personel becerisine dayalı filtreleme (atama modu)
  • •Kiosk kategori sekmeleri ortalandı

Fixed

  • •Üretimde yönetici girişi yapılamıyor (parola karması bozulması — bash $ değişken değiştirme sorunu)
  • •Güncelleme sistemi kararlılığı: koruma listesi genişletildi, sağlık kontrolü, VT sürüm senkronizasyonu
  • •Tek sürüm kaynağı birleştirildi (version.json → index.php, otomatik VT senkronizasyonu)
VosCMS Mağaza
Ana Sayfa Home 마켓플레이스 개발자 포털 Notice Free Board Q&A FAQ
Giriş Yap Kayıt Ol
Türkçe
한국어 English 日本語 中文(中国) 中文(臺灣) Deutsch Español Français Монгол Русский Türkçe Tiếng Việt Bahasa Indonesia