News:

SMF - Just Installed!

Main Menu

Recent posts

#41
Duyurular ve Sürümler / 1.1.30
Last post by hitsumo - Sep 15, 2026, 03:49 PM
# Anime Tracker 1.1.30

**Yayın tarihi:** 2026-08-23

Bu sürüm siteyi arama motorlarına tanıtır — **ve tanıtmaması gereken
kurulumları da açıkça gizler.** İkisi aynı işin iki yüzü olduğu için birlikte
yapıldı.

Şimdiye kadar sayfaların `<head>` bölümünde yalnızca başlık vardı: açıklama
yok, canonical yok, paylaşım etiketi yok. `robots.txt` yoktu, `sitemap.xml`
yoktu. Yani ne arama motoruna "şu sayfalar var" denebiliyordu, ne de "buraya
hiç bakma" denebiliyordu.

## Önce gizlilik: kendi sunucuna kuranlar için

**Kişisel kurulumlar artık arama motorlarına kapalı.** Tek kullanıcılı
(self-host) modda uygulamanın girişi yoktur — bu tasarım gereğidir, sayfayı
açan herkes o tek kullanıcıdır. Uygulamayı kendi sunucusuna kurup kişisel
listesini tutan biri, bugüne kadar hem herkese açık hem de **arama
motorlarında çıkabilir** durumdaydı. Bu bir SEO eksiği değil, gizlilik
kusuruydu.

Artık indeksleme moda bağlı:

| Kurulum | Davranış |
| --- | --- |
| **Tek kullanıcılı (self-host)** | Her sayfa "indeksleme" der; `robots.txt` her şeyi kapatır; `sitemap.xml` yayımlanmaz |
| **Çok kullanıcılı (online)** | Sayfalar indekslenebilir; site haritası yayımlanır |

Yeni bir ayar eklenmedi — karar zaten var olan `MULTI_USER_MODE` anahtarına
bağlandı. Kişisel bir kurulum, sahibi hiçbir kutucuk keşfetmeden kapalı
olmalı. Fikrini değiştiren `config.php`'de o anahtarı `true` yapar.

## Site haritası (`sitemap.xml`)

Yeni bir `sitemap.xml` adresi var ve içeriği her istekte güncel üretilir.
İçine girenler:

- ana liste sayfası, hakkında ve altı yardım sayfası,
- **her anime kaydının detay sayfası**,
- kronoloji işareti olan animelerin **izleme sırası** sayfası,
- her seri için **bir tane** seri kronolojisi sayfası.

Sitemap'in asıl gerekçesi listenin sayfalanması: liste varsayılan olarak
sayfa başına 10 kayıt gösterir, yani katalog büyüdükçe derindeki animelere
bağlantıyla ulaşmak pratikte imkânsızlaşır. Site haritası her kaydı doğrudan
adresiyle bildirir.

**Katalog büyürse harita kendini böler.** 2000 kayıttan sonra tek dosya
yerine bir "harita indeksi" ve parçalar üretilir; bu, arama motorlarının
beklediği standart yapıdır ve otomatik olur.

**+18 işaretli kayıtlar haritada yer almaz.** Detay sayfası onları zaten
tercih arkasında gizliyor; anonim bir ziyaretçi (ve arama motoru) yalnızca
nötr uyarıyı görür. Yer tutucu döndüren bir adresi listelemenin anlamı yok.

## `robots.txt`

Artık var ve moda göre yazılır. Çok kullanıcılı kurulumda ana sayfalar açık
kalır; giriş, kayıt, hesap, düzenleme, yönetim ve "tıklayınca iş yapan"
adresler kapatılır. Site haritasının adresi de burada bildirilir.

Yandex için ayrı bir bölüm var: liste sayfasının sıralama ve filtre
parametreleri `Clean-param` ile bildiriliyor, böylece aynı listenin onlarca
farklı adresi ayrı sayfa sanılmıyor.

## Sayfa başlıklarına eklenen etiketler

Her sayfaya **açıklama**, **canonical** ve **paylaşım etiketleri** (Open
Graph / Twitter kartı) eklendi. Somut karşılığı:

- **Arama sonucunda** başlığın altında artık anlamlı bir açıklama çıkar.
  Anime detay sayfalarında bu açıklama **katalog konusundan** üretilir.
- **Bir bağlantıyı WhatsApp'a, Discord'a ya da bir foruma yapıştırdığında**
  başlık, açıklama ve **poster** görünen bir kart çıkar; çıplak adres değil.

**Kişisel konu metni bu açıklamalara hiç girmez.** Açıklama yalnızca katalog
konusundan üretilir; kişisel konu senin kendi notundur, meta açıklama ise
tüm dünyaya yayımlanır.

### Canonical: aynı içeriğin tek adresi

- **Liste sayfası:** sıralama, filtre, arama ve sayfa numarası
  parametrelerinin hepsi çıplak liste adresini işaret eder.
- **Seri kronolojisi:** bu sayfa aynı seriyi her üyesi için aynı şekilde
  çizer, yani bir sayfanın birden çok adresi olurdu. Artık seri başına tek
  bir adres asıl kabul ediliyor.
- **İzleme sırası:** görünüm modu (yayın sırası / hikâye sırası) adrese
  yazılsa da asıl adres tektir.

### İndekslenmeyen üç sayfa

**Son Güncellenenler**, **İstatistikler** ve **Ne İzlesem?** bilerek arama
sonuçlarının dışında tutuldu: üçü de her ziyarette değişir, istatistikler
zaten tek kişinin listesini anlatır ve "Ne İzlesem?" sürpriz modunda her
istekte başka bir anime döndürür. Bu sayfalardaki bağlantılar yine takip
edilir — tarama emeği detay sayfalarına gitsin diye.

## Küçük ama önemli bir düzeltme

Olmayan bir anime numarasıyla girilen detay sayfası "bulunamadı" yazıyor ama
sunucu **"her şey yolunda" cevabı** veriyordu. Arama motoru bunu "bu sayfa
var" diye okur ve tek satırlık hata metnini içerik sanar. Artık düzgün bir
"bulunamadı" cevabı dönüyor. Ekranda görünen bir değişiklik yok.

## Yapılandırma: `SITE_URL` (isteğe bağlı)

Arama motorları mutlak adres ister; uygulama ise her yerde göreli bağlantı
kullanır. Adres artık isteğin kendisinden kuruluyor, yani **hiçbir şey
yapmana gerek yok** — alt dizine kurulmuş bir uygulama da doğru adresi
üretir.

Tek istisna: uygulama bir ters vekil ya da CDN arkasındaysa, gelen istek
sitenin gerçek adresini söylemeyebilir. O durumda `config.php`'ye
`SITE_URL` yazılabilir. Örnek yapılandırma dosyasında açıklamasıyla birlikte
duruyor, varsayılan olarak kapalı. Eski `config.php` dosyaları hiç
dokunulmadan çalışmaya devam eder.

## Sürümden sonra yapılacak (koddan bağımsız)

Site haritasının bir işe yaraması için arama motorlarına bildirilmesi
gerekir: Google Search Console, Bing Webmaster (aynı kayıt DuckDuckGo,
Ecosia ve Yahoo'yu da kapsar) ve Yandex Webmaster. Üçüne de **aynı** site
haritası adresi verilir; motor başına ayrı dosya gerekmez. Site sahipliği
doğrulaması **DNS TXT kaydıyla** yapılırsa siteye hiçbir dosya eklenmez —
en temiz yol budur.

## Değişen dosyalar

**Yeni:**

```
files/functions/seo_helpers.php
files/sitemap.php
files/robots.php
files/migration/1.1.30/upgrade.sql (yalnızca sürüm damgası)
```

**Değişen:**

```
files/.htaccess                    (/robots.txt ve /sitemap.xml yönlendirmeleri)
files/functions.php                (yeni yardımcı dosyanın yüklenmesi)
files/config_example.php           (isteğe bağlı SITE_URL)
files/index.php                    (meta + canonical)
files/anime_details.php            (meta + canonical + "bulunamadı" cevabı)
files/chronology.php               (meta + canonical)
files/series_timeline.php          (meta + seri başına tek canonical)
files/about.php, files/help.php    (meta + canonical)
files/help/help_basics.php, help_fields.php, help_sync.php,
files/help/help_discovery.php, help_series.php, help_timezone.php
files/recent.php, files/statistics.php, files/recommendations.php
                                   (indekslenmeme etiketi)
files/lang/tr.php, files/lang/en.php  (11'er yeni metin)
files/version.txt
```

## Dağıtım notu

- `files/functions.php` ile `files/functions/seo_helpers.php` **birlikte**
  yüklenmelidir. Yalnızca sayfalar güncellenirse olmayan bir fonksiyon
  çağrılır ve sayfa açılmaz.
- `files/.htaccess` eski kalırsa `/robots.txt` adresi çalışmaz (sunucu `.txt`
  uzantısını topluca engelliyor); `robots.php` ve `sitemap.php` kendi
  adlarıyla yine açılır.
- Dil dosyaları eski kalırsa açıklama metni yerine anahtar adı görünür —
  zararsız ama çirkin.
- Veritabanı şeması değişmedi; merkez katalog sunucusunda elle yapılacak bir
  iş yok.
- **Dağıtım sunucusunda** iki işlevsel adım her zamanki gibi: yayımlanan
  `version.txt` 1.1.30'a çekilmeli — yoksa "Güncelleme Denetle" hâlâ 1.1.29'u
  son sürüm sanar — ve `updates/1.1.30/anime-tracker-1.1.30.zip` paketi
  yayımlanmalı, yoksa "Güncelle" düğmesi indirme adresinde 404 alır.
- Yükledikten sonra bakılacak tek şey: canlı `config.php`'de çok kullanıcılı
  mod açık olmalı, yoksa site kendini arama motorlarına kapatır.
#42
Duyurular ve Sürümler / 1.1.29
Last post by hitsumo - Sep 15, 2026, 03:48 PM
# Anime Tracker 1.1.29

**Yayın tarihi:** 2026-08-23

İki iş: henüz başlamamış animelerde geri sayım, ve projenin GPL-2.0 lisans
bildirimlerinin eksiksiz hâle getirilmesi. İkincisi tamamen yorum
değişikliğidir — ekranda hiçbir etkisi yok.

## Yenilik: başlamamış animede "ilk bölüme kalan süre"

- **Sorun:** yayını devam eden bir animede detay sayfası "Sonraki Bölüm:
  3 gün 4 saat" diye geri sayıyordu. Henüz **başlamamış** bir animede ise
  yalnızca "Yayın Tarihi: 07.10.2026" yazıyordu — kalan günü takvimden elle
  saymanız gerekiyordu.
- **Oysa gereken her şey zaten kayıtlıydı:** yayın tarihi, yayın saati ve
  yayın saat dilimi. 1.1.28 bu üçünü başlamamış animede hem forma hem detay
  sayfasına getirmişti; eksik olan tek şey bunlardan bir geri sayım
  kurmaktı.
- **Artık kuruyor.** Detay sayfasında yeni bir **İlk Bölüm** satırı çıkıyor:
  *"1. bölüme kalan süre: 45 gün 7 saat"*. Biçim yayını devam eden animedeki
  ile birebir aynı — aynı hesap, aynı görünüm.
- **Liste sayfasında da var.** "Sonraki Bölüm" sütunu başlamamış animelerde
  tire (`-`) gösteriyordu; artık aynı geri sayımı yazıyor.
- **Etiket bilerek "Sonraki Bölüm" değil.** Henüz yayınlanmış bir bölüm
  yokken "sonraki" demek yanıltıcı olurdu.
- **Yayın saati girilmemişse** geri sayım o günün gece yarısına göre
  hesaplanır. Gün sayısı yine doğrudur, yalnızca gün içindeki saat tahminîdir.
- **Yayın tarihi geçmiş ama durum hâlâ "Yayın Başlamadı" ise** satır
  *"Yayın tarihi geçti"* der. Devam eden animedeki "Yeni bölüm yayınlandı"
  mesajı burada yanlış olurdu — henüz hiçbir şey yayınlanmadı; bu, kaydın
  durumunun güncellenmesi gerektiğini söyleyen bir uyarıdır.
- **Hiçbir veri yazılmaz.** Geri sayım her görüntülemede tarihten hesaplanır;
  veritabanına türetilmiş bir değer kaydedilmez.

## Lisans bildirimleri

Bu bölümdeki işin tamamı yorum satırlarıdır; çalışan hiçbir kod etkilenmez.

### Neden

Anime Tracker GPL-2.0 lisanslı ve lisans metninin tam hâli hem depoda
(`LICENSE.txt`) hem kurulan uygulamanın içinde (`files/license.txt`)
duruyordu — yani lisans bakımından eksik bir şey yoktu. Eksik olan, **dosya
başı bildirimlerdi:** 195 kaynak dosyanın 80'inde hiç bildirim yoktu ve
bildirimi olanlar üç ayrı biçimde yazılmıştı.

Bu bir ihlal değildi; GPL-2 dosya başı bildirimi zorunlu kılmaz. Ama aynı
klasörde bildirimli ve bildirimsiz dosyaların yan yana durması, kodu ilk kez
açan birine "acaba bu dosya lisans kapsamı dışında mı?" dedirtir. Açık kaynak
bir projede bu sorunun sorulmaması gerekir.

### Ne değişti

- **Bildirimi olmayan 80 dosyaya kısa bildirim eklendi.** Kullanılan biçim,
  kod tabanında zaten çoğunlukta olan biçim:
 
  ```
  Anime Tracker - <dosyanın başlığı>
  https://www.sicakcikolata.com
  Copyright (C) 2025-2026 Okan Sumer
  Licensed under GNU General Public License v2
  ```
 
  Her dosya kendi yorum sözdizimiyle yazıldı. Dağılım: 60 migration dosyası,
  beş uygulama sayfası (`recent`, `series_timeline`, `statistics`,
  `sync_aired`, `admin_catalog_requests`), `anime_form.js`, dört örnek/şablon
  dosyası, dört paketleme dosyası (Dockerfile, Docker Compose, Docker
  entrypoint, Windows kurulum betiği) ve üç tek kullanımlık CLI betiği.
 
- **21 dosyadaki tam GPL başlığı tek biçime getirildi.** Bu başlıklarda
  FSF şablonunun köşeli parantez yer tutucuları temizlenmemişti —
  `Copyright (C) 2025 [Okan Sumer]` diye duruyordu. Parantezler kalktı,
  girintiler hizalandı. Aynı 21 başlık altı ayrı boşluk varyantına dağılmıştı;
  hepsi tek metne indi. `list_settings.php`'de yorum bloğu yanlışlıkla iki kez
  açılıyordu (`/**` içinde bir `/**` daha), o da düzeldi.
 
- **`db.php`'nin yarım kalan bildirimi tamamlandı.** Garanti reddine kadar
  yazılmıştı ama son paragraf ("lisansın bir kopyasını almış olmalısınız...")
  eksikti. Kod tabanındaki tek yarım bildirim buydu.
 
- **Telif yılı `2025` yerine `2025-2026`.** Proje 2025'te yayımlandı, 2026'da
  geliştirilmeye devam ediyor. README'nin hem Türkçe hem İngilizce lisans
  bölümüne de bir telif satırı eklendi.
 
- **Yazar adı tek yazıma indi.** Kodda iki yazım dolaşıyordu; yorumlar bu
  projede ASCII Türkçe yazıldığı için çoğunluk biçimi seçildi. README bir
  belge olduğu için orada gerçek yazım kullanılıyor.
 

### Değişmeyenler

- `LICENSE.txt` ve `files/license.txt`'ye dokunulmadı — ikisi de tam GPLv2
  metni ve birbirinin aynı. Docker imajı da Windows kurulumu da lisansı
  zaten taşıyordu.
- Windows kurulum sihirbazına lisans onay sayfası eklenmedi. GPL tıklama
  onayı istemez; kurulan dizinde `license.txt` duruyor.
- Hakkında sayfasına görünür bir lisans/garanti metni eklenmedi. Bu ileride
  yapılabilir; bir "bildirim düzeltme" sürümünde sessizce arayüz değiştirmek
  istemedim.

## Doğrulama

**Lisans taramasının** yorum dışında hiçbir şeye dokunmadığı **ölçüldü**,
tahmin edilmedi:

- 331 PHP dosyasının tamamı, yorumları ve boşlukları atılmış hâliyle tarama
  öncesi ve sonrası karşılaştırıldı: **331/331 birebir aynı.**
- Aynı 331 dosya ayrıştırıcıdan geçirildi: 331/331 geçti.
- Tarama yeniden koşuldu: **195/195** kaynak dosyası artık telif ve lisans
  satırı taşıyor (önce 115/195 idi).
- CRLF satır sonu kullanan dosyalarda eklenen satırlar da CRLF ile yazıldı;
  hiçbir dosyanın satır sonu biçimi bozulmadı.

**Geri sayım** ayrıca ölçüldü — hem çalıştığı, hem başka hiçbir şeyi
bozmadığı:

- Tarih hesabı 13 durumda sınandı: gerçek kayıt (07.10.2026 23:45 JST →
  07.10.2026 14:45 UTC), saat girilmemiş kayıt, saat dilimi girilmemiş kayıt,
  geçersiz saat dilimi, İstanbul saati, bozuk tarih, eksik alanlar ve dört
  farklı yayın durumu. 13/13 beklenen sonucu verdi.
- Detay sayfasının yayın bloğu **dosyadan çıkarılan gerçek satırlarla**, beş
  yayın durumu × kronoloji işareti var/yok = 10 durumda render edildi. Sonuç
  1.1.28'in aynı testiyle karşılaştırıldı: **yalnızca "Yayın Başlamadı"
  satırları değişti**, diğer sekiz durum birebir aynı çıktı.
- Aynı test liste sayfasının hücresi için de koşuldu: yedi durumdan
  **yalnızca biri** değişti (başlamamış anime `-` yerine geri sayım),
  altısı aynı.
- Kronoloji düğmesi her durumda **tam bir kez** sayıldı — 1.1.28'de kurulan
  kural bozulmadı.
- Yayını devam eden animenin geri sayımı, yedi girdilik bir matrisle
  1.1.28 ve 1.1.29 dosyalarında ayrı ayrı koşuldu: çıktılar birebir aynı.
- 331 PHP dosyasından tam **beşi** lisans taraması sonrasındaki hâlinden
  anlamlı olarak farklı — bu özelliği taşıyan beş dosya. Kalan 326'sı,
  yorumları atıldığında birebir aynı.

## Şema / migration

- **Şema değişikliği yok.** Yeni tablo, kolon veya tercih eklenmedi — geri
  sayım her görüntülemede hesaplanır, saklanmaz.
  `migration/1.1.29/upgrade.sql` yalnızca sürüm damgası taşır.
- **Merkez katalog veritabanında elle işlem gerekmez** — katalog teline
  dokunulmadı.

## Dağıtım notu

**Uygulama sunucusunda** 195 dosya değişti ama bunların 190'ında değişen tek
şey telif/lisans yorumudur. Geri sayımı getiren beş dosya şunlar ve
**birlikte** yüklenmelidir:

```
files/functions/anime_helpers.php   (hesap + geri sayım metni)
files/anime_details.php             (İlk Bölüm satırı)
files/index.php                     (liste sütunu)
files/lang/tr.php, files/lang/en.php (İlk Bölüm etiketi)
```

Bunlara ek olarak `files/version.txt` ve yeni `files/migration/1.1.29/`
klasörü gerekli. Geri kalan dosyalar kozmetiktir, rahat bir zamanda
yüklenebilir.

**Yarım yükleme uyarısı:** `anime_helpers.php` eski kalırsa detay sayfası
olmayan bir fonksiyonu çağırır ve sayfa açılmaz. Dil dosyaları eski kalırsa
etiket yerine anahtar adı görünür. Yukarıdaki beşli tek parça olarak
düşünülmeli. Diğer 190 dosya arasında böyle bir bağımlılık yoktur.

Eski migration klasörlerinin (`0.5.1` ... `1.1.28`) dosyaları da değişti, ama
bunların uygulama sunucusuna yeniden gitmesi gerekmez: sürüm yöneticisi
yalnızca mevcut sürümden büyük numaralı klasörleri çalıştırır, yani o
dosyalar bir daha hiç okunmaz.

**Dağıtım sunucusunda** (kurulumların güncelleme için baktığı yer) iki
işlevsel adım var: yayımlanan `version.txt` 1.1.29'a çekilmeli — yoksa
"Güncelleme Denetle" hâlâ 1.1.28'i son sürüm sanar — ve
`updates/1.1.29/anime-tracker-1.1.29.zip` paketi yayımlanmalı, yoksa
"Güncelle" düğmesi indirme adresinde 404 alır. Aynı sunucudaki
`catalog.php`, `admin_push.php` ve iki örnek yapılandırma dosyası da değişti
ama onlarda değişen tek şey telif satırı.
#43
Announcements & Releases / 1.1.28
Last post by hitsumo - Aug 09, 2026, 05:39 AM
# Anime Tracker 1.1.28

**Release date:** 2026-08-08

## Fix: the broadcast information section stayed closed on "Not Yet Aired" anime

- **The problem:** the **Broadcast Information** section of the add and edit
  forms (episode interval, broadcast day, broadcast time, broadcast timezone)
  only opened while the status was "Currently Airing". On an anime marked "Not
  Yet Aired" you could neither see nor fill in those four fields.
- **Yet a show that has not started still has a known slot.** An anime is
  announced as "Saturday 23:30" weeks before the season begins; that information
  does not appear on the day it starts airing. AnimeSchedule returns these
  fields for upcoming titles as well.
- **So "Auto Fill" was writing into a place you could not see.** On an upcoming
  anime the button really did fill in the broadcast day and time, and the report
  said so honestly — "broadcast_day *(in a hidden section)*" — but with the
  field off-screen you could neither check nor correct it.
- **The section now opens on "Not Yet Aired" too.** You can fill the fields by
  hand, see what auto-fill brought in, and correct it. By the time the anime
  starts airing and the status flips to "Currently Airing", the data is already
  in place.
- **The anime detail page shows it as well now.** An upcoming anime's detail
  page carries the Broadcast Day and Broadcast Time rows, along with the source
  note. Otherwise the time you entered in the form would be visible nowhere.
- **The "Next Episode" row is deliberately left out.** An upcoming anime's "next
  episode" is its first one, and the Release Date row already carries that.
- **The "(in a hidden section)" note was not removed** — it still applies to the
  cases that really are closed (for example everything but the episode count on
  a finished anime).

## Fix: your personal notes were missing from the detail page

- **The problem:** the **Notes** row on the detail page sat *inside* the
  broadcast information block — that is, behind the "Currently Airing only"
  condition. As a result, a note written on a **finished, upcoming or cancelled**
  anime **never appeared** on its detail page.
- **Nothing was lost.** The note was saved, kept, and editable in the edit form;
  it simply was not rendered on the detail page.
- **The reach was larger than it sounds:** most of a catalog is finished anime,
  so most notes were invisible.
- **It now shows in every status.** A note is personal data and has nothing to do
  with the anime's broadcast status. On airing anime the note's position is
  unchanged.
- **The chronology button appears exactly once in every status** (counted and
  verified while making this fix).

## Fix: three defects in the "External Sites" section

- **The AnimeSchedule button depended on the MyAnimeList link.** On an anime
  where you had entered the AnimeSchedule address but left the MAL box empty,
  the button never appeared. Since 1.1.27 made "enter only the AnimeSchedule
  link" a supported workflow, this had become quite visible. Each button now has
  its own condition.
- **With no address, the button led to the site's home page** (and only did so
  when a MAL link existed). This section lists the links *for this anime*; a
  button that does not take you to the anime's page is noise, not information.
  With no address the button is no longer rendered at all.
- **An anime with no links at all still got an empty "External Sites"
  heading.** The section's condition always evaluated to true. It now appears
  only when there is at least one link.
- **The source note under the broadcast time is unchanged** — that is an
  attribution ("where the time came from"), not a link to the anime's page, so
  falling back to the service's home page is the right behaviour there.

## What deliberately did not change

This release fixes the visibility rule of the **broadcast information** section
only. Its neighbours were left exactly as they were:

- **"Aired Episodes" still appears only while the status is "Currently
  Airing".** On an upcoming anime that count is zero by definition, and the
  server already clears the field for every non-airing status.
- **"Broadcast End Date" still appears only on finished, non-single-episode
  works.**
- **The next-episode date is still computed only for airing anime.**
- **Finished anime still show no broadcast day/time at all, and auto-fill still
  never carries those fields for them** (the rule introduced in 1.1.27). There,
  those fields genuinely are meaningless.

## Your data is not affected

The broadcast day, time, timezone and episode interval were **already saved in
every status** — a hidden form section still submits its values. Your notes were
always saved too; what changed is that they are now **displayed**. This release
moves, deletes and converts nothing.

## Also: detail page cleanup

While doing the work above, `anime_details.php` was read end to end. Fixes that
change nothing visible but make the file sturdier:

- **Opening `anime_details.php` with no id** now shows a clean "anime not found"
  instead of emitting a PHP warning first. The same happened with a non-existent
  id.
- **Indentation fixed.** Part of the detail rows started at column zero; they
  were pulled in line with their siblings. The rendered page is byte-identical
  in meaning — verified with a whitespace-insensitive diff.

## Schema / migration

- **No schema change.** No new table, column or preference.
  `migration/1.1.28/upgrade.sql` carries the version stamp only.
- **No manual work on the central catalog server** — the catalog wire was not
  touched.

## Changed / new files

- files/js/anime_form.js (visibility rule: the broadcast section now opens on
  "Not Yet Aired" as well)
- files/edit_anime.php (the section's initial state on page load)
- files/anime_details.php (broadcast information shown for upcoming anime too;
  **the notes row moved out of that block** — visible in every status; the
  "External Sites" section fixed; indentation and small hardening)
- files/functions/animeschedule_helpers.php (**comment update only** — the old
  note described a form rule that no longer holds; behaviour is identical)
- files/migration/1.1.28/upgrade.sql (new, version stamp only)
- files/version.txt

`files/add_anime.php` is **unchanged**: on that form the section always starts
closed (the default status is "Not selected") and its visibility is driven
entirely by the script.

## Deployment note

- No new files. `files/js/anime_form.js` and `files/edit_anime.php` must be
  uploaded **together**; if one of them stays behind, the edit form contradicts
  the script on page load (the section starts open and closes on the first
  status change, or the other way round) — an inconsistency that is easy to miss
  and annoying to diagnose.
- `files/anime_details.php` is independent and can be uploaded on its own, but
  keeping it at the same version makes sense: the form opens the time field for
  entry, the detail page displays it.
- The version stamp in asset URLs (`?v=1.1.28`, in place since 1.1.24) refreshes
  the browser cache on its own; there is nothing to do by hand.
#44
Announcements & Releases / 1.1.27
Last post by hitsumo - Aug 09, 2026, 05:38 AM
# Anime Tracker 1.1.27

**Release date:** 2026-08-08

## New: the watched-episode count can now be changed from the anime detail page

- **The "Watched Episodes" row on the detail page now carries (−) and (+)
  buttons.** Until now that number could only be changed from the list page or
  by opening the edit form; while reading an anime's details you had to go back
  to the list just to move one episode forward.
- **Same buttons as in the list.** The same bounds apply: the count never drops
  below 0 and never rises above the total (or, when the total is unknown, the
  aired episode count). At a bound the matching button greys out and stops
  responding.
- **The watch status moves along on its own.** Pressing (+) on a "Plan to Watch"
  anime turns it into "Watching"; reaching the final episode turns it into
  "Watched"; stepping back returns it to "Watching". The coloured status badge
  on the detail page follows immediately — both its text and its colour.
- **No buttons on anime with an unknown episode count.** With neither a total
  nor an aired count there is no ceiling to show, so the row stays a plain
  number as before. Run "Sync" or enter the episode data first.
- **The page refreshes itself a second and a half later.** Three other things on
  the detail page are derived from the watched count: the "Next Episode" row
  (how far behind you are), the chronology alert (watch this after that episode)
  and the finish-date stamp. They have to be re-rendered when the number
  changes, or the page contradicts itself. Pressing repeatedly restarts the
  timer — eight (+) presses cause a single refresh.
- **Half-written text is never discarded.** If you have started filling in any
  box on the page (correction note, chronology marker, episode field) the
  refresh is skipped entirely; the number still updates instantly.

## New: the release date and end date are filled in too

- **"Auto Fill" now fills the Release Date** — whatever the anime's status
  (airing, not yet aired, finished). That field was never auto-filled before.
- **On a finished anime the Broadcast End Date is filled as well**, alongside
  the episode count.
- **Single-episode works (film, special, OVA) get no end date** — for those the
  end date *is* the release date, and the form does not show the field at all.
  What gets filled there is the Release Date. (Example: *Lupin III vs Meitantei
  Conan* — AniList likewise reports the same day for both: 2009-03-27.)
- **When the episode count fills as 1, the end-date section now closes on its
  own.** The form only applied that rule when you typed the number yourself, so
  the section could stay open after an autofill.
- **The dates come from AniList — they are not calculated.** The AnimeSchedule
  anime record has **no end-date field at all**: it carries the first-episode
  date and a broadcast time, but nothing marking the finale. Calculating it as
  "first episode + (episodes−1)×7 days" was possible but **would not be
  correct**: for a series that skipped a week the result quietly drifts. Take
  *Ahiru no Sora*: it started on 2 October 2019 and ran 50 episodes; the
  calculation says 9 September 2020, while the real end was **30 September
  2020** — three weeks out. So the dates are read from the source that actually
  knows: AniList's own date fields.
- **The release date comes from there too, for the same kind of reason.**
  AnimeSchedule has the first episode's *timestamp*, but turning an instant into
  a calendar date can slip by a day for late-night broadcasts (a show announced
  as "Friday at 25:25" actually airs Saturday 01:25). AniList's release date is
  already the settled calendar date, so both dates come from one query.
- **No extra configuration.** The AniList side needs no API key, so this works
  even if you never configured one.
- **It does not matter which link you pasted.** The id needed for matching is
  read from the cross-site links inside the AnimeSchedule response we already
  fetched. So the dates arrive even if you only entered an AniDB link, or
  pressed "Auto Fill" before filling the MAL box. If the response carries no
  such link, the form's MAL link is used instead; with neither, the dates are
  skipped and the rest of the autofill works exactly as before.
- **Only where it means something.** An airing show has no end date yet, and for
  a single-episode release the form does not show the field at all. In those two
  cases no end date is written — the release date still is.
- **On the Add Anime page the broadcast status can now be filled too.** The
  status box starts at "Not selected" — which is the form's empty state, not a
  choice. It used to count as "filled", so Auto Fill could never set the status,
  and the sections that depend on it (broadcast details, end date) never opened.
  Now the status fills and the relevant section opens on its own.

## Fix: on a finished anime, "Auto Fill" claimed to fill fields it had not

- **The problem:** pressing the AnimeSchedule "Auto Fill" button on a finished
  anime reported "Fields filled: 3: broadcast_day, broadcast_timezone,
  total_episodes" while nothing visibly changed on the form. Two of those three
  were not really filled at all:
  - **Broadcast day and timezone are not visible on a finished anime.** That
    whole section only opens for "Currently Airing" — a weekly broadcast slot
    only means something while a show is still airing, and the detail page never
    shows it for a finished anime either. Auto Fill was writing into that hidden
    section and counting it as success.
  - **The timezone already held the value being written.** The field starts at
    "Asia/Tokyo" and the service returns "Asia/Tokyo", so the same value was
    written over itself: nothing changed, yet it still went into the count. That
    entry padded the list every single time.
- **Broadcast day/time/timezone are no longer fetched for a finished anime.**
  For those the fillable thing is the episode count, and the message now says so.
  When there is nothing left to fill it honestly says "no empty fields to fill".
- **Nothing changed for airing or upcoming anime** — broadcast day and time are
  fetched exactly as before.
- **The message now counts only fields that genuinely changed.** If writing a
  value leaves the field exactly as it was, it is no longer called "filled". If
  the value matches none of the form's options (a browser silently ignores such
  an assignment), the field is restored and the message says so. If a field is
  filled but is not on screen at that moment, its name carries an "(in a hidden
  section)" note — so nobody goes hunting for a field the form is not showing.

## Fix: the watch status was written in Turkish on the English interface

- On the English interface, pressing (+) or (−) in the list wrote the updated
  status into the cell **in Turkish** ("Izlendi" and so on) while the rest of
  the page was English. This has been the case since 0.6 and is now fixed — the
  label follows your interface language. Nothing changes for Turkish users.

## How it works (technical)

- The detail page **opens no new write path**: it posts to the same endpoint
  (`update_watched.php`) the list buttons use. The bound rules, the watch-status
  transitions and the permission gate all stay in one place; the detail page is
  simply that endpoint's second client.
- The ceiling is computed with the exact same rule on both pages (total if set,
  else aired, else no ceiling). The server enforces that bound itself — the
  browser-side copy is for appearance only.
- The status badge's **colour** now comes from the server too (a
  `watch_status_css` field was added to the reply), so the status-to-colour
  mapping stays in a single place instead of being copied into the browser.
- Signed-out visitors get no buttons at all; the watched count is personal data
  and the endpoint requires a sign-in anyway.
- The button styles (`.ep-*`) moved out of the embedded style block in
  `index.php` and into `css/components.css`. With the widget now living on two
  pages, two separate copies of those rules would inevitably drift apart. The
  rules moved unchanged; the list page looks exactly as it did.

## Schema / migration

- **No schema change.** No new table, column or preference.
  `migration/1.1.27/upgrade.sql` carries the version stamp only.
- **No manual work on the central catalog server** — the catalog wire was not
  touched. The watched count and watch status are personal data already.

## Changed / new files

- files/anime_details.php (+/- widget and its script on the watched row)
- files/update_watched.php (`watch_status_css` in the reply; language-init fix)
- files/index.php (embedded `.ep-*` style block emptied)
- files/css/components.css (`.ep-*` styles moved here + horizontal variant)
- files/functions/animeschedule_helpers.php (no broadcast data for finished anime)
- files/functions/anilist_import_helpers.php (new helper reading the end date from AniList)
- files/fetch_animeschedule.php (end-date step)
- files/js/anime_form.js (report counts only real changes; MAL link sent to the
  endpoint; "Not selected" treated as empty)
- files/add_anime.php, files/edit_anime.php (two new language keys passed to the script)
- files/lang/tr.php, files/lang/en.php (four new strings)
- files/migration/1.1.27/upgrade.sql (new, version stamp only)
- files/version.txt

## Deployment note

- No new files, but `files/anime_details.php` and `files/css/components.css`
  must be uploaded **together**. If `components.css` is missing, not only the new
  detail-page buttons but **the existing list buttons too** will render unstyled
  — the rules now live there. The version stamp in asset URLs (`?v=1.1.27`,
  in place since 1.1.24) refreshes the browser cache on its own; there is
  nothing to do by hand.
#45
Announcements & Releases / 1.1.26
Last post by hitsumo - Aug 09, 2026, 05:38 AM
# Anime Tracker 1.1.26

**Release date:** 2026-08-05

## New: linking another anime from a synopsis no longer means typing the code

- **Synopsis fields now carry an "Add anime link" button.** Since 1.1.19 a
  synopsis could link to another anime, but the only way to write that link was
  **by hand** — and you had to know the target's MAL number from memory. Now you
  press the button and type the title.
- **It searches the catalog as you type.** Each result shows the title, the
  year, the media type (TV/Film/OVA...) and the MAL number, so remakes and movie
  versions sharing a title can be told apart.
- **The anime you pick is written at the caret.** If you are mid-sentence, the
  link lands exactly there and the rest of the text is untouched. The inserted
  code looks like `[[anime:52991|Sousou no Frieren]]`, labelled with **the title
  you are reading** (whatever your Title Language preference is).
- **Where it appears:** the Turkish and English catalog synopsis on the Add
  Anime page, plus the Turkish and English personal synopsis on the Edit Anime
  page. A read-only synopsis box gets no button.
- **The list only offers anime that can actually be linked.** The shortcode
  addresses its target by MAL number, so a record without one never appears —
  picking it would produce a code that resolves to nothing.
- **Your adult-content preference applies here too.** While adult content is
  hidden, those anime do not appear in the search results, exactly as on the
  listing pages.
- **Typing the code by hand still works.** The picker is only a convenience.

## New: version number on the About page

- The About page now states the installed version ("Version 1.1.26"). Until now
  nothing in the interface told you which version you were running.

## How it works (technical)

- The search runs against a new endpoint, `anime_link_search.php`. It starts at
  two characters, fires ~0.25s after you stop typing rather than on every
  keystroke, and returns at most 12 results. A late answer never overwrites the
  result of a newer query.
- The endpoint is gated at **the weaker of the two hosting pages**: Edit Anime
  requires a moderator, but Add Anime is open to any member, so the endpoint
  requires only a logged-in user. This opens nothing up — every row it returns
  is one the member can already reach through the catalog listing.
- The anime list is **not embedded in the page**. The edit page already ships a
  list for the "Next in Series" box; shipping a second full copy (this time with
  MAL numbers and alternative titles) on every form load would grow the page
  along with the catalog. A search endpoint stays the same size however large
  the catalog gets.
- The search covers both the main title and the alternative titles, with
  main-title matches lifted to the top. A `%` or `_` in what you type is
  searched for literally, not as a wildcard.
- `[`, `]` and `|` are stripped from the label: those are the shortcode's own
  delimiters and would break the code if left in.
- The picker is **progressive enhancement**: if the script fails to load or the
  search errors, the synopsis fields behave exactly as in the previous version.
  Nothing about saving changed.
- The version on the About page is read from `files/version.txt`, not from the
  database version row: the question being answered is which **code** is on the
  server. If the file cannot be read, the line is not printed at all.

## Schema / migration

- **No schema change.** No new table, column or preference.
  `migration/1.1.26/upgrade.sql` carries only the version stamp.
- **No manual action is needed on the central catalog server** — the catalog
  wire was not touched.

## Changed / new files

- files/anime_link_search.php (new — search endpoint)
- files/js/synopsis_link.js (new — link picker)
- files/about.php (version line)
- files/add_anime.php (synopsis fields marked, language keys, script)
- files/edit_anime.php (synopsis fields marked, language keys, script)
- files/css/components.css (picker styles)
- files/lang/tr.php, files/lang/en.php
- files/migration/1.1.26/upgrade.sql (new, version stamp only)
- files/version.txt

## Deployment note

- There are two **new** files: `files/anime_link_search.php` and
  `files/js/synopsis_link.js`. They must be uploaded **together with**
  `add_anime.php`, `edit_anime.php` and `css/components.css`; if one is missing
  the button either never appears or its search does not work. A missing piece
  does not break the synopsis box — the code can still be typed by hand.
#46
Announcements & Releases / 1.1.25
Last post by hitsumo - Aug 09, 2026, 05:37 AM
# Anime Tracker 1.1.25

**Release date:** 2026-08-02

## New: "Other Chain" tabs on the Series Chronology

- **The other chains of a series are now visible on the page.** One series
  name can hold more than one chain: in Ghost in the Shell the feature
  films are one chain and the SAC TV series are an entirely different one.
  Until now the page drew only the chain containing **the anime you opened
  it from**; the sole way to reach another chain was to navigate to an
  anime already inside it. If you did not know the series, nothing told
  you how many chains existed.
- **Next to Chain Order and Air Date, the tab bar now gains one tab for
  every chain other than your own:** "Other Chain 1", "Other Chain 2"... Hover
  a tab and it tells you how many anime that chain holds. Click it and the
  chain is drawn on the same page, in the same layout.
- **The count is not configured, it is derived.** On every visit the page
  scans the records sharing the series name and finds the chains. Build a
  new chain (or break a link) and the tab list updates itself on the next
  visit.
- **The order is stable:** "Other Chain 1" is the earliest-dated chain and
  the rest follow. Whichever anime you view the series from, the chains
  keep the same order — only the chain you are currently inside drops out
  of the list, because that one is the "Chain Order" tab.
- **A single unlinked record is not a chain** (the threshold is 2 anime).
  Otherwise every standalone film sharing the series name would spawn its
  own tab. Those records already appear on the Air Date tab, in date order.
- **Your saved tab preference is left alone.** Switching to another chain
  is an ephemeral view: it touches neither the "Series Chronology View"
  preference in List Settings nor your session's Chain/Air Date choice.
  Open another anime's chronology and the page comes back on that anime's
  own chain.

## How it works (technical)

- Chain discovery is derived from existing data: the members of the series
  name group are scanned in first-air-date order, each one is walked
  backwards along `next_in_series` to find the chain start, the chain is
  walked forward once and its members are marked. Since the remaining
  members of a walked chain are skipped, every chain enters the list once.
- The chain walk (backwards and forwards) moved out of
  `series_timeline.php` into `series_helpers.php`. The chain the page draws
  and the chain discovery finds now come from the same code, so the two
  copies can no longer drift apart. The walk itself is unchanged — cycle
  guard included.
- The selection travels as `?chain=<start_id>` and is **never written to
  the session**. The value may only be the start of a chain found within
  the same series name group; anything else is silently ignored and the
  page falls back to your own chain.
- The other-chain view is always chain order: "Air Date" spans the whole
  series and never narrows to a single chain.
- The tab label does **not** carry the title of the chain's first anime;
  the tooltip states only the anime count. That keeps the adult-content
  mask from leaking into the tab bar.
- An anime with no series name shows no tab bar at all; the page draws the
  chain exactly as before.

## Schema / migration

- **No schema change.** No new table, column or preference; the chains are
  derived from the existing `next_in_series` + `series_name` data.
  `migration/1.1.25/upgrade.sql` carries only the version stamp.
- **No manual action is needed on the central catalog server** — the
  catalog wire was not touched.

## Changed / new files

- files/series_timeline.php (other-chain tabs, `chain` parameter)
- files/functions/series_helpers.php (chain walk moved here + chain
  discovery)
- files/lang/tr.php, files/lang/en.php ("Other Chain %d" label)
- files/migration/1.1.25/upgrade.sql (new, version stamp only)
- files/version.txt

## Deployment note

- There are no new files, but `files/series_timeline.php` and
  `files/functions/series_helpers.php` must be uploaded **together**: the
  chain walk moved from the page into the helper, so updating only one of
  them leaves the page calling an undefined function.
#47
Duyurular ve Sürümler / 1.1.28
Last post by hitsumo - Aug 09, 2026, 05:36 AM
# Anime Tracker 1.1.28

**Yayın tarihi:** 2026-08-08

## Düzeltme: "Yayın Başlamadı" durumunda yayın bilgileri bölümü açılmıyordu

- **Sorun:** anime ekleme ve düzenleme formundaki **Yayın Bilgileri** bölümü
  (bölüm aralığı, yayın günü, yayın saati, yayın saat dilimi) yalnızca "Yayın
  Devam Ediyor" durumunda açılıyordu. Durumu "Yayın Başlamadı" olan bir animede
  bu dört alanı ne görebiliyor ne de doldurabiliyordunuz.
- **Oysa henüz başlamamış bir dizinin yayın günü ve saati bellidir.** Bir anime
  sezon başlamadan haftalar önce "cumartesi 23:30" diye duyurulur; bu bilgi
  yayın başladığı gün ortaya çıkmaz. AnimeSchedule da bu alanları henüz
  başlamamış animeler için döndürür.
- **Bu yüzden "Otomatik Doldur" görünmeyen bir yere yazıyordu.** Henüz
  başlamamış bir animede düğmeye bastığınızda yayın günü ve saati gerçekten
  yazılıyor, mesaj da bunu dürüstçe "broadcast_day *(gizli bölümde)*" diye
  bildiriyordu — ama alan ekranda olmadığı için ne kontrol edebiliyor ne de
  düzeltebiliyordunuz.
- **Artık bölüm "Yayın Başlamadı" durumunda da açılıyor.** Alanları elle
  doldurabilir, otomatik doldurmanın getirdiğini görebilir ve düzeltebilirsiniz.
  Anime yayına başlayıp durumu "Yayın Devam Ediyor" olduğunda bu bilgiler
  zaten hazır olur.
- **Anime detay sayfası da artık gösteriyor.** Henüz başlamamış bir animenin
  detayında Yayın Günü ve Yayın Saati satırları görünüyor — kaynak notuyla
  birlikte. Yoksa formda girdiğiniz saati hiçbir yerde göremezdiniz.
- **"Sonraki Bölüm" satırı bilinçli olarak dışarıda.** Henüz başlamamış bir
  animenin "sonraki bölüm"ü ilk bölümüdür ve onu zaten Yayın Tarihi satırı
  taşır.
- **"(gizli bölümde)" notu kaldırılmadı** — hâlâ gerçekten kapalı olan durumlar
  (örneğin tamamlanmış animede bölüm sayısı dışındaki alanlar) için yerinde
  duruyor.

## Düzeltme: kişisel notlarınız detay sayfasında görünmüyordu

- **Sorun:** detay sayfasındaki **Notlar** satırı, yayın bilgileri bloğunun
  *içinde* duruyordu — yani "yalnızca Yayın Devam Ediyor" koşuluna takılıydı.
  Sonuç: **tamamlanmış, henüz başlamamış veya iptal edilmiş** bir animeye
  yazdığınız not detay sayfasında **hiç görünmüyordu.**
- **Notunuz kaybolmuş değildi.** Kaydediliyor, düzenleme formunda duruyor ve
  orada değiştirilebiliyordu; yalnızca detay sayfasında basılmıyordu.
- **Etkisi sanılandan büyüktü:** bir katalogun büyük çoğunluğu tamamlanmış
  animedir, yani notların çoğu görünmüyordu.
- **Artık her durumda görünüyor.** Not kişisel bir veridir ve animenin yayın
  durumuyla hiçbir ilgisi yoktur. Yayını devam eden animelerde notun yeri
  değişmedi.
- **Kronoloji düğmesi her durumda tam bir kez çıkıyor** (bu düzeltme sırasında
  ayrıca sayılarak doğrulandı).

## Düzeltme: "Dış Siteler" bölümündeki üç kusur

- **AnimeSchedule düğmesi, MyAnimeList bağlantısına bağlıydı.** AnimeSchedule
  adresini girdiğiniz ama MAL kutusunu boş bıraktığınız bir animede düğme hiç
  çıkmıyordu. 1.1.27'den beri "yalnızca AnimeSchedule bağlantısı girmek"
  desteklenen bir kullanım olduğu için bu iyice görünür olmuştu. Artık her
  düğmenin kendi koşulu var.
- **Adres yokken düğme sitenin ana sayfasına gidiyordu** (üstelik bunu yalnızca
  MAL bağlantısı varsa yapıyordu). Bu bölüm *bu animeye ait* bağlantıları
  listeler; sizi animenin sayfasına götürmeyen bir düğme bilgi değil gürültü.
  Adres yoksa düğme artık hiç basılmıyor.
- **Hiç bağlantısı olmayan animede boş bir "Dış Siteler" başlığı çıkıyordu.**
  Bölümün koşulu her zaman doğru sonuç veriyordu. Artık en az bir bağlantı
  varsa görünüyor.
- **Yayın saatinin altındaki kaynak notu değişmedi** — orası "saat bilgisi
  nereden geldi" diyen bir kaynak belirtmesi, animenin sayfasına giden bir
  düğme değil; adres yoksa servisin ana sayfasına gitmesi doğru davranış.

## Değişmeyen kurallar

Bu sürüm yalnızca **yayın bilgileri** bölümünün görünürlük kuralını düzeltir.
Ona komşu bölümler bilerek olduğu gibi bırakıldı:

- **"Yayınlanan Bölüm Sayısı" hâlâ yalnızca "Yayın Devam Ediyor" durumunda
  görünür.** Henüz başlamamış bir animede yayınlanan bölüm sayısı tanımı gereği
  sıfırdır; sunucu bu alanı devam eden olmayan her durumda zaten temizler.
- **"Yayın Bitiş Tarihi" hâlâ yalnızca tamamlanmış ve tek bölümlük olmayan
  yapımlarda görünür.**
- **Sonraki bölüm tarihi hâlâ yalnızca devam eden animede hesaplanır.**
- **Tamamlanmış animede yayın günü/saati hâlâ hiç gösterilmiyor ve otomatik
  doldurmada hiç getirilmiyor** (1.1.27'de gelen kural). Orada bu alanlar
  gerçekten anlamsızdır.

## Veriniz etkilenmez

Yayın günü, saati, saat dilimi ve bölüm aralığı **zaten her durumda
kaydediliyordu** — gizli bir form bölümü de değerlerini gönderir. Notlarınız da
öteden beri kaydediliyordu; değişen, **gösterilmeleri.** Bu sürüm hiçbir veriyi
taşımaz, silmez veya dönüştürmez.

## Ayrıca: detay sayfası temizliği

Yukarıdaki işler sırasında `anime_details.php` baştan sona gözden geçirildi.
Görünürde bir şey değiştirmeyen ama dosyayı sağlamlaştıran düzeltmeler:

- **Adres çubuğuna `anime_details.php` (id'siz) yazıldığında** sayfa artık
  düzgünce "anime bulunamadı" diyor; eskiden önce PHP uyarısı üretiyordu.
  Var olmayan bir id ile girildiğinde de aynı şey oluyordu.
- **Girinti düzeltildi.** Detay satırlarının bir bölümü satır başından
  başlıyordu, kardeşlerinin hizasına çekildi. Üretilen sayfa birebir aynı —
  boşluk yok sayılarak alınan farkla doğrulandı.

## Şema / migration

- **Şema değişikliği yok.** Yeni tablo, kolon veya tercih eklenmedi.
  `migration/1.1.28/upgrade.sql` yalnızca sürüm damgası taşır.
- **Merkez katalog sunucusunda elle işlem GEREKMEZ** — katalog teline
  dokunulmadı.

## Değişen / yeni dosyalar

- files/js/anime_form.js (görünürlük kuralı: yayın bilgileri bölümü artık
  "Yayın Başlamadı" durumunda da açılır)
- files/edit_anime.php (bölümün sayfa açılışındaki ilk hâli)
- files/anime_details.php (yayın bilgileri başlamamış animede de gösterilir;
  **notlar satırı bloğun dışına taşındı** — her durumda görünür; "Dış Siteler"
  bölümü düzeltildi; girinti ve küçük sağlamlaştırmalar)
- files/functions/animeschedule_helpers.php (**yalnızca yorum güncellemesi** —
  eski açıklama artık geçerli olmayan form kuralını anlatıyordu; davranış aynı)
- files/migration/1.1.28/upgrade.sql (yeni, yalnızca sürüm damgası)
- files/version.txt

`files/add_anime.php` **değişmedi**: o formda bölüm daima kapalı başlar
(varsayılan durum "Seçim Yapılmadı") ve görünürlüğünü tamamen betik yönetir.

## Dağıtım notu

- Yeni dosya yok. `files/js/anime_form.js` ile `files/edit_anime.php`
  **birlikte** yüklenmelidir; biri eski kalırsa düzenleme formu sayfa
  açılışında betikle çelişir (bölüm açık başlayıp ilk durum değişikliğinde
  kapanır ya da tersi). Göze çarpmayan, teşhisi can sıkıcı bir tutarsızlık olur.
- `files/anime_details.php` bağımsızdır, tek başına da yüklenebilir; ama formla
  aynı sürümde olması anlamlıdır — form saati girmeyi açar, detay onu gösterir.
- Tarayıcı önbelleğini 1.1.24'ten beri kullanılan sürüm damgası (`?v=1.1.28`)
  kendisi tazeler; elle bir şey yapmanız gerekmez.
#48
Duyurular ve Sürümler / 1.1.27
Last post by hitsumo - Aug 09, 2026, 05:35 AM
# Anime Tracker 1.1.27

**Yayın tarihi:** 2026-08-08

## Yeni: İzlenen bölüm sayısı artık anime detay sayfasından da değiştirilebiliyor

- **Detay sayfasındaki "İzlenen Bölüm" satırına (−) ve (+) düğmeleri geldi.**
  Şimdiye kadar bu sayıyı yalnızca liste sayfasından ya da düzenleme formunu
  açarak değiştirebiliyordunuz; bir animenin detayına bakarken bölüm ilerletmek
  için listeye geri dönmek gerekiyordu.
- **Listedeki düğmelerin aynısı.** Aynı sınırlar geçerli: sayı 0'ın altına
  inmez, toplam (ya da toplam bilinmiyorsa yayınlanan) bölüm sayısının üstüne
  çıkmaz. Sınıra gelindiğinde ilgili düğme sönükleşir ve tıklanamaz olur.
- **İzleme durumu kendiliğinden ilerler.** "İzlenme Planlandı" bir animede (+)
  basmak durumu "İzleniyor" yapar; son bölüme geldiğinizde "İzlendi" olur;
  geri aldığınızda tekrar "İzleniyor"a döner. Detay sayfasındaki renkli durum
  rozeti bunu anında yansıtır — hem yazısı hem rengi değişir.
- **Toplam bölüm sayısı bilinmeyen animelerde düğmeler çıkmaz.** Ne toplam ne
  de yayınlanan bölüm bilgisi varsa gösterilecek bir tavan yoktur; satır eskisi
  gibi düz sayı olarak görünür. Önce "Senkronize Et" ya da bölüm bilgisini
  girin.
- **Sayfa bir buçuk saniye sonra kendini tazeler.** Detay sayfasında izlenen
  bölüm sayısına bağlı üç yer daha var: "Sonraki Bölüm" satırı (kaç bölüm
  geride kaldınız), kronoloji uyarısı (şu bölümden sonra şunu izleyin) ve
  izlemeyi bitirme damgası. Sayı değişince bunların da yenilenmesi gerekir,
  yoksa sayfa kendisiyle çelişir. Arka arkaya basarsanız sayaç sıfırlanır —
  sekiz kez (+) basmak tek bir tazeleme yapar.
- **Yarım kalmış yazınız silinmez.** Sayfada doldurmaya başladığınız bir kutu
  varsa (düzeltme önerisi, kronoloji işareti, bölüm kutusu) tazeleme hiç
  yapılmaz; sayı yine de anında güncellenir.

## Yeni: Yayın tarihi ve bitiş tarihi de otomatik geliyor

- **"Otomatik Doldur" artık Yayın Tarihi alanını da dolduruyor** — animenin
  durumu ne olursa olsun (devam eden, henüz başlamamış, tamamlanmış). Bu alan
  şimdiye kadar hiç otomatik dolmuyordu.
- **Tamamlanmış animede ayrıca Yayın Bitiş Tarihi doluyor.** Bölüm sayısının
  yanı sıra bitiş tarihi de kendiliğinden geliyor.
- **Tek bölümlük yapımlarda (film, özel, OVA) bitiş tarihi gelmez** — çünkü
  öyle bir yapımda bitiş tarihi yayın tarihinin kendisidir ve form bu alanı
  zaten göstermez. Orada dolan şey Yayın Tarihi'dir. (Örnek: *Lupin III vs
  Meitantei Conan* — AniList'te de başlangıç ve bitiş aynı gün: 27.03.2009.)
- **Bölüm sayısı 1 olarak dolduğunda bitiş tarihi bölümü kendiliğinden
  kapanıyor.** Eskiden form bu kuralı yalnızca siz sayıyı elle yazdığınızda
  uyguluyordu; otomatik doldurma sonrası bölüm açık kalabiliyordu.
- **Tarihler AniList'ten geliyor, hesaplanmıyor.** AnimeSchedule'ın anime
  kaydında bitiş tarihi diye bir alan **yok** — ilk bölüm tarihi ve yayın saati
  var, finali işaretleyen bir şey yok. Tarihi "ilk bölüm + (bölüm sayısı−1)×7
  gün" diye hesaplamak mümkündü ama **doğru olmazdı:** arasında hafta atlayan
  bir seride sonuç sessizce kayar. Örnek: *Ahiru no Sora* 2 Ekim 2019'da
  başlayıp 50 bölüm sürdü; hesap 9 Eylül 2020 derdi, gerçek bitiş **30 Eylül
  2020**. Üç hafta fark. Bu yüzden tarihler, gerçekten bilen kaynaktan —
  AniList'in kendi tarih alanlarından — okunuyor.
- **Yayın tarihi de aynı yerden, aynı sebeple.** AnimeSchedule'da ilk bölümün
  zamanı var, ama o bir *an*; takvim gününe çevirmek gece yarısından sonra
  yayınlanan animelerde bir gün kaymaya açık (Japonya'da "Cuma 25:25" denen
  yayın aslında cumartesi 01:25'tir). AniList'in yayın tarihi zaten bu
  hesaplaşması yapılmış takvim günü olduğu için ikisi tek sorguda oradan
  alınıyor.
- **Ek bir ayar gerekmiyor.** AniList tarafı API anahtarı istemez; anahtarınız
  olmasa bile bu alan çalışır.
- **Hangi bağlantıyı girdiğiniz önemli değil.** Eşleşme için gereken numara,
  AnimeSchedule'ın zaten çektiğimiz cevabındaki site bağlantılarından okunur.
  Yani yalnızca AniDB bağlantısı girmiş olsanız da, ya da MAL kutusunu
  doldurmadan "Otomatik Doldur"a bassanız da tarihler gelir. Cevapta böyle bir
  bağlantı yoksa formdaki MAL bağlantısına bakılır; o da yoksa tarihler
  atlanır ve geri kalan doldurma aynen çalışır.
- **Yalnızca anlamlı olduğu yerde.** Devam eden bir animede bitiş tarihi zaten
  yoktur; tek bölümlük yapımda ise form bu alanı göstermez. Bu iki durumda
  bitiş tarihi yazılmaz — yayın tarihi ise her durumda yazılır.
- **Anime Ekle sayfasında yayın durumu da artık dolabiliyor.** Durum kutusu
  "Seçim Yapılmadı" ile başlar; bu bir seçim değil, formun boş hâlidir. Eskiden
  "dolu" sayıldığı için otomatik doldurma durumu hiç ayarlayamıyor, dolayısıyla
  duruma bağlı bölümler (yayın bilgileri, bitiş tarihi) hiç açılmıyordu. Artık
  durum da doluyor ve ilgili bölüm kendiliğinden açılıyor.

## Düzeltme: Tamamlanmış animede "Otomatik Doldur" doldurmadığı alanları doldurdum diyordu

- **Sorun:** yayını tamamlanmış bir animede AnimeSchedule "Otomatik Doldur"
  düğmesine basınca "Alan dolduruldu: 3: broadcast_day, broadcast_timezone,
  total_episodes" yazıyor, ama formda gözle görülür bir değişiklik olmuyordu.
  Üç alandan ikisi gerçekte doldurulmamış sayılırdı:
  - **Yayın günü ve saat dilimi, tamamlanmış animede formda görünmez.** Yayın
    bilgileri bölümü yalnızca "Yayın Devam Ediyor" durumunda açılır — çünkü
    haftalık yayın günü yalnızca devam eden bir yayın için anlamlıdır ve
    tamamlanmış animede detay sayfasında da hiç gösterilmez. Otomatik doldurma
    bu gizli bölüme yazıp bunu başarı olarak sayıyordu.
  - **Saat dilimi zaten yazacağı değerdeydi.** Alan "Asia/Tokyo" ile başlar ve
    servisten gelen değer de "Asia/Tokyo"dur; yani üstüne aynı değer yazılıyor,
    hiçbir şey değişmiyor, ama sayaca yine de giriyordu. Bu madde her seferinde
    gereksiz yere listeye ekleniyordu.
- **Artık tamamlanmış anime için yayın günü/saati/dilimi hiç getirilmiyor.**
  Bu animelerde doldurulabilecek şey bölüm sayısıdır; mesaj da bunu söylüyor.
  Doldurulacak bir şey kalmadıysa dürüstçe "doldurulacak boş alan bulunamadı"
  yazıyor.
- **Devam eden ve henüz başlamamış animelerde hiçbir şey değişmedi** — yayın
  günü ve saati eskisi gibi getiriliyor.
- **Mesaj artık yalnızca gerçekten değişen alanları sayıyor.** Bir alan
  yazıldıktan sonra değeri hiç değişmediyse "dolduruldu" denmiyor. Değer
  formdaki seçeneklerden hiçbirine uymuyorsa (tarayıcı böyle bir atamayı sessizce
  yok sayar) alan eski haline döndürülüyor ve bu durum mesajda belirtiliyor.
  Bir alan doluyor ama o an ekranda görünmüyorsa, adının yanında "(gizli
  bölümde)" notu çıkıyor — böylece kimse formda olmayan bir alanı aramıyor.

## Düzeltme: İngilizce arayüzde izleme durumu Türkçe yazılıyordu

- İngilizce arayüz kullanırken listede (+) ya da (−) düğmesine bastığınızda,
  durum hücresine güncellenen değer **Türkçe** yazılıyordu ("Izlendi" gibi) —
  sayfanın geri kalanı İngilizceyken. 0.6'dan beri süren bu davranış düzeltildi;
  artık arayüz diliniz neyse o yazılıyor. Türkçe kullanıyorsanız sizin için
  değişen bir şey yok.

## Nasıl çalışıyor (teknik)

- Detay sayfası **yeni bir kayıt yolu açmaz**: listedeki düğmelerle aynı ucu
  (`update_watched.php`) kullanır. Sınır kuralları, izleme durumu geçişleri ve
  yetki kapısı tek bir yerde durmaya devam eder; detay sayfası aynı ucun ikinci
  müşterisidir.
- Tavan hesabı iki sayfada birebir aynı kuralla yapılır (toplam varsa toplam,
  yoksa yayınlanan, ikisi de boşsa tavan yok). Sunucu bu sınırı kendisi de
  zorlar — tarayıcıdaki hesap yalnızca görünüm içindir.
- Durum rozetinin **rengi** de sunucudan gelir (cevaba `watch_status_css`
  alanı eklendi). Böylece durum adı ile renk eşlemesi tek bir yerde kalır,
  tarayıcı tarafında ikinci bir kopyası tutulmaz.
- Giriş yapmamış ziyaretçiye düğmeler hiç basılmaz; izlenen bölüm kişisel
  veridir ve uç zaten giriş ister.
- Düğme stilleri (`.ep-*`) `index.php` içindeki gömülü stil bloğundan
  `css/components.css`'e taşındı. Widget artık iki sayfada birden durduğu için
  iki ayrı kopya stilin zamanla birbirinden ayrılması kaçınılmazdı. Kurallar
  aynen taşındı, liste sayfasının görünümü değişmedi.

## Şema / migration

- **Şema değişikliği yok.** Yeni tablo, kolon veya tercih eklenmedi.
  `migration/1.1.27/upgrade.sql` yalnızca sürüm damgası taşır.
- **Merkez katalog sunucusunda elle işlem GEREKMEZ** — katalog teline
  dokunulmadı. İzlenen bölüm ve izleme durumu zaten kişisel veridir.

## Değişen / yeni dosyalar

- files/anime_details.php (izlenen bölüm satırına +/- widget'ı ve betiği)
- files/update_watched.php (cevaba `watch_status_css`; dil başlatma düzeltmesi)
- files/index.php (gömülü `.ep-*` stil bloğu boşaltıldı)
- files/css/components.css (`.ep-*` stilleri buraya taşındı + yatay varyant)
- files/functions/animeschedule_helpers.php (tamamlanmış animede yayın
  bilgisi taşınmıyor)
- files/functions/anilist_import_helpers.php (AniList'ten bitiş tarihi okuyan
  yeni yardımcı)
- files/fetch_animeschedule.php (bitiş tarihi adımı)
- files/js/anime_form.js (rapor yalnız gerçek değişimi sayar; MAL bağlantısı
  uca gönderilir; "Seçim Yapılmadı" boş sayılır)
- files/add_anime.php, files/edit_anime.php (iki yeni dil anahtarı betiğe geçirildi)
- files/lang/tr.php, files/lang/en.php (dört yeni metin)
- files/migration/1.1.27/upgrade.sql (yeni, yalnızca sürüm damgası)
- files/version.txt

## Dağıtım notu

- Yeni dosya yok, ama `files/anime_details.php` ile `files/css/components.css`
  **birlikte** yüklenmelidir. `components.css` eksik kalırsa yalnızca detaydaki
  yeni düğmeler değil, **listedeki eski düğmeler de** stilsiz görünür — kurallar
  artık orada duruyor. Tarayıcı önbelleğini 1.1.24'ten beri kullanılan sürüm
  damgası (`?v=1.1.27`) kendisi tazeler; elle bir şey yapmanız gerekmez.
#49
Duyurular ve Sürümler / 1.1.26
Last post by hitsumo - Aug 09, 2026, 05:35 AM
# Anime Tracker 1.1.26

**Yayın tarihi:** 2026-08-05

## Yeni: Konu metnine anime bağlantısı eklemek artık elle yazılmıyor

- **Konu kutularının altına "Anime bağlantısı ekle" düğmesi geldi.** 1.1.19'dan
  beri bir konu metninin içinden başka bir animeye bağlantı verilebiliyordu,
  ama bunun tek yolu kısa kodu **elle yazmaktı** — üstelik hedef animenin MAL
  numarasını ezbere bilmeniz gerekiyordu. Artık düğmeye basıp anime adını
  yazmanız yeterli.
- **Yazdıkça katalogda arıyor.** Çıkan listede her animenin adı, yılı, türü
  (TV/Film/OVA...) ve MAL numarası görünür — aynı adı taşıyan yeniden çevrimler
  ile film sürümlerini birbirinden ayırabilmeniz için.
- **Seçtiğiniz anime imlecin durduğu yere yazılır.** Cümlenin ortasındaysanız
  bağlantı tam oraya girer; metnin geri kalanına dokunulmaz. Eklenen kod
  `[[anime:52991|Sousou no Frieren]]` biçimindedir ve etiket olarak
  **sizin okuduğunuz başlık** kullanılır (Başlık Dili tercihiniz neyse o).
- **Nerede var:** Anime Ekle sayfasında Türkçe ve İngilizce katalog konusu;
  Anime Düzenle sayfasında bunlara ek olarak Türkçe ve İngilizce kişisel konu
  alanları. Salt okunur konu kutusunda düğme çıkmaz.
- **Listede yalnızca gerçekten bağlanabilecek animeler var.** Kısa kod hedefini
  MAL numarasıyla adresler; numarası olmayan bir kayıt bu listeye girmez, çünkü
  seçilseydi hiçbir yere gitmeyen bir kod üretirdi.
- **+18 tercihiniz burada da geçerli.** Yetişkin içeriği gizliyken o animeler
  arama sonucunda çıkmaz — tıpkı liste sayfalarında olduğu gibi.
- **Elle yazmak hâlâ mümkün.** Yardımcı yalnızca bir kolaylıktır; kodu eskisi
  gibi kendiniz de yazabilirsiniz.

## Yeni: Hakkında sayfasında sürüm numarası

- Hakkında sayfası artık kurulu sürümü yazıyor ("Sürüm 1.1.26"). Şimdiye kadar
  hangi sürümde olduğunuzu arayüzün hiçbir yerinden öğrenemiyordunuz.

## Nasıl çalışıyor (teknik)

- Arama, yeni bir uç üzerinden yapılır: `anime_link_search.php`. Sorgu en az
  iki karakterden başlar, her tuş vuruşunda değil yazmayı bıraktıktan ~0,25
  saniye sonra gider ve en çok 12 sonuç döner. Geç gelen bir cevap, daha yeni
  bir sorgunun sonucunun üzerine yazmaz.
- Uç, formu barındıran **iki sayfanın zayıf olanına** göre kapılıdır: Anime
  Düzenle moderatör ister, Anime Ekle ise her üyeye açıktır, o yüzden uç
  "giriş yapmış olmak" ister. Bu bir açılış değildir — dönen her kayıt üyenin
  zaten katalog listesinden görebildiği bir kayıttır.
- Anime listesi sayfaya **gömülmez**. Düzenleme sayfası "Sıradaki Anime"
  kutusu için zaten bir liste taşıyor; ikinci bir tam kopyayı (bu kez MAL
  numaraları ve alternatif adlarla) her form açılışında göndermek sayfayı
  katalogla birlikte büyütürdü. Arama ucu ise katalog ne kadar büyürse büyüsün
  aynı boyutta kalır.
- Arama hem ana başlıkta hem alternatif adlarda yapılır; ana başlıktan
  eşleşenler listenin başına çıkar. Aradığınız metinde `%` veya `_` geçse bile
  bunlar joker karakter sayılmaz, harfi harfine aranır.
- Etiket olarak yazılan başlıktan `[`, `]` ve `|` karakterleri temizlenir:
  bunlar kısa kodun kendi ayraçlarıdır ve bırakılsalardı kod bozulurdu.
- Yardımcı **salt ilerlemeci geliştirmedir**: betik yüklenmezse ya da arama
  hata verirse konu kutuları önceki sürümdeki gibi çalışmaya devam eder.
  Kaydetme yolunda hiçbir değişiklik yoktur.
- Hakkında sayfasındaki sürüm `files/version.txt` dosyasından okunur, veri
  tabanındaki sürüm satırından değil: sorulan şey sunucudaki **kodun**
  sürümüdür. Dosya okunamazsa satır hiç basılmaz.

## Şema / migration

- **Şema değişikliği yok.** Yeni tablo, kolon veya tercih eklenmedi.
  `migration/1.1.26/upgrade.sql` yalnızca sürüm damgası taşır.
- **Merkez katalog sunucusunda elle işlem GEREKMEZ** — katalog teline
  dokunulmadı.

## Değişen / yeni dosyalar

- files/anime_link_search.php (yeni — arama ucu)
- files/js/synopsis_link.js (yeni — bağlantı seçici)
- files/about.php (sürüm satırı)
- files/add_anime.php (konu kutuları işaretlendi, dil anahtarları, betik)
- files/edit_anime.php (konu kutuları işaretlendi, dil anahtarları, betik)
- files/css/components.css (seçici stilleri)
- files/lang/tr.php, files/lang/en.php
- files/migration/1.1.26/upgrade.sql (yeni, yalnızca sürüm damgası)
- files/version.txt

## Dağıtım notu

- İki **yeni** dosya var: `files/anime_link_search.php` ve
  `files/js/synopsis_link.js`. Bunlar `add_anime.php`, `edit_anime.php` ve
  `css/components.css` ile **birlikte** yüklenmelidir; biri eksik kalırsa düğme
  ya hiç çıkmaz ya da araması çalışmaz. Eksiklik konu kutusunu bozmaz — kod
  elle yazılmaya devam edilebilir.
#50
Duyurular ve Sürümler / 1.1.25
Last post by hitsumo - Aug 09, 2026, 05:34 AM
# Anime Tracker 1.1.25

**Yayın tarihi:** 2026-08-02

## Yeni: Seri Kronolojisi'nde "Diğer Zincir" sekmeleri

- **Bir serideki diğer zincirler artık sayfada görünüyor.** Bir seri adı
  altında birden çok zincir olabilir: Koukaku Kidoutai'de sinema filmleri
  bir zincir, SAC dizileri bambaşka bir zincirdir. Sayfa bugüne kadar
  yalnızca **açtığınız animenin** içinde bulunduğu zinciri çiziyordu;
  diğerine ulaşmanın tek yolu o zincirdeki bir animeye gitmekti. Seriyi
  tanımıyorsanız kaç zincir olduğunu görmenin hiçbir yolu yoktu.
- **Sekme çubuğuna, Zincir Sırası ve Yayın Tarihi'nin yanına, kendi
  zinciriniz dışındaki her zincir için bir sekme ekleniyor:** "Diğer
  Zincir 1", "Diğer Zincir 2"... Sekmenin üzerinde beklerseniz o zincirin
  kaç anime taşıdığı görünür. Tıklayınca zincir aynı sayfada, aynı
  düzende çizilir.
- **Sayı elle ayarlanmaz, kendiliğinden çıkar.** Sayfa her açılışta seri
  adını taşıyan kayıtları tarayıp zincirleri bulur. Yeni bir zincir
  kurduğunuzda (ya da bir halkayı kopardığınızda) sekme listesi bir
  sonraki açılışta kendini günceller.
- **Sıralama sabittir:** "Diğer Zincir 1" en eski tarihli zincirdir,
  sonrakiler onu izler. Aynı seriye hangi animeden bakarsanız bakın
  zincirlerin sırası aynı kalır — yalnızca o an içinde bulunduğunuz
  zincir listeden çıkar, çünkü o zaten "Zincir Sırası" sekmesidir.
- **Hiçbir yere bağlanmamış tek kayıt zincir sayılmaz** (eşik 2 anime).
  Yoksa seri adını paylaşan her bağımsız film ayrı bir sekme üretirdi. O
  kayıtlar zaten "Yayın Tarihi" sekmesinde, tarih sırasında duruyor.
- **Kalıcı sekme tercihiniz bozulmaz.** Diğer bir zincire geçmek geçici
  bir görünümdür: Liste Ayarları'ndaki "Seri Kronolojisi Görünümü"
  tercihine de, oturumdaki Zincir/Yayın Tarihi seçiminize de dokunmaz.
  Başka bir animenin kronolojisini açtığınızda sayfa yine o animenin
  kendi zinciriyle gelir.

## Nasıl çalışıyor (teknik)

- Zincir keşfi mevcut veriden türetilir: seri adı grubundaki kayıtlar ilk
  gösterim tarihine göre taranır, her kayıt için `next_in_series`
  bağlantısı geriye doğru yürünüp zincirin başı bulunur, zincir bir kez
  ileri yürünür ve üyeleri işaretlenir. Aynı zincirin diğer üyeleri
  atlandığı için her zincir listeye bir kez girer.
- Zincir yürüyüşü (geri ve ileri) `series_timeline.php` içinden
  `series_helpers.php`'ye taşındı. Sayfanın çizdiği zincir ile keşfin
  bulduğu zincir artık aynı koddan gelir; iki kopyanın birbirinden
  ayrışma ihtimali kalmadı. Yürüyüşün davranışı değişmedi — döngü koruması
  dahil.
- Seçim `?chain=<başlangıç_id>` ile taşınır ve **oturuma yazılmaz**.
  Değer yalnızca aynı seri adı grubunda bulunmuş bir zincirin başlangıcı
  olabilir; başka her değer sessizce yok sayılır ve sayfa kendi zincirine
  döner.
- Diğer zincir görünümü daima zincir sırasıdır: "Yayın Tarihi" bütün
  seriyi kapsar, tek bir zincire daralmaz.
- Sekme etiketinde zincirin ilk animesinin adı **yazılmaz**; ipucu metni
  yalnızca anime sayısını söyler. Böylece +18 maskesi sekme çubuğundan
  sızmaz.
- Seri adı olmayan animede sekme çubuğu hiç çıkmaz, sayfa eskisi gibi
  yalnızca zinciri çizer.

## Şema / migration

- **Şema değişikliği yok.** Yeni tablo, kolon veya tercih eklenmedi;
  zincirler var olan `next_in_series` + `series_name` verisinden
  türetilir. `migration/1.1.25/upgrade.sql` yalnızca sürüm damgası taşır.
- **Merkez katalog sunucusunda elle işlem GEREKMEZ** — katalog teline
  dokunulmadı.

## Değişen / yeni dosyalar

- files/series_timeline.php (diğer zincir sekmeleri, `chain` parametresi)
- files/functions/series_helpers.php (zincir yürüyüşü buraya taşındı +
  zincir keşfi)
- files/lang/tr.php, files/lang/en.php ("Diğer Zincir %d" etiketi)
- files/migration/1.1.25/upgrade.sql (yeni, yalnızca sürüm damgası)
- files/version.txt

## Dağıtım notu

- Yeni dosya yoktur, ancak `files/series_timeline.php` ile
  `files/functions/series_helpers.php` **birlikte** yüklenmelidir: zincir
  yürüyüşü sayfadan yardımcıya taşındı, yalnızca biri güncellenirse sayfa
  tanımsız fonksiyon hatası verir.