News:

SMF - Just Installed!

Main Menu

Recent posts

#1
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.
#2
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.
#3
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.
#4
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.
#5
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.
#6
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.
#7
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.
#8
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.
#9
Announcements & Releases / 1.1.24
Last post by hitsumo - Aug 09, 2026, 05:33 AM
# Anime Tracker 1.1.24

**Release date:** 2026-07-30

## Fixed: broken-looking pages after an upgrade

- **Layouts no longer break after a version upgrade.** Style and script
  files were linked with URLs that never changed (`style.css`,
  `js/select_enhance.js`). Because the URL stayed the same, the browser kept
  serving the **old** file from its cache even after an upgrade: new HTML met
  old CSS. That is exactly what produced the broken layout seen right after
  the 1.1.20 deploy.
- **Every local style and script URL now carries a version stamp**
  (`css/base.css?v=1.1.24`). The moment the version changes, so does the
  URL, and the browser has to refetch. No Ctrl+F5, no manual cache clearing
  after an upgrade: the page itself is not cached, so the new HTML arrives on
  the first load, sees the stamped URLs and pulls fresh CSS.
- **This does not make pages slower.** Within one version the URLs are
  stable, so the files stay cacheable indefinitely just as before — they are
  refetched only when the version moves.
- **Stylesheet modules are now linked one by one.** `style.css` is only a
  loader; the real rules live in the eight modules under `css/` and are
  pulled in with `@import`. Stamping the loader alone would not have helped:
  the browser re-reads `style.css`, sees the same unstamped `@import` URLs
  and serves `css/components.css` from cache anyway. Pages now emit one
  stamped link per module, in the loader's exact `@import` order — so the
  visual result is unchanged.

## Fixed: a help page requested a stylesheet that does not exist

- The Help → Time Zone subpage still linked `help.css`, a file that has not
  existed since the 0.6.7 file split; the request 404'd on every load. The
  link is gone. Nothing changes visually — those rules already came from the
  `css/help.css` module.

## How it works (technical)

- New `files/functions/asset_helpers.php`: `asset_version()` reads the stamp
  from `files/version.txt` — **not** from the `settings.version` row, because
  the things being stamped are FILES and must be paired with the file
  version; it also works with no database at all, which the setup pages need.
  The value is validated before use, since it ends up in a URL; anything
  unexpected counts as "no version".
- `asset_styles()` renders a page's whole set of stylesheet links,
  `asset_url()` builds a single asset URL. Both take the calling page's path
  to the `files/` root: empty for pages in the root, `../` for those under
  `admin/` and `help/`.
- **The module list is read from style.css's `@import` lines at runtime.** No
  second list is kept in sync: adding a module still means adding one
  `@import` to `style.css` and nothing else. `style.css` also remains a
  working stylesheet on its own.
- The degraded paths are covered: if `version.txt` cannot be read, the
  asset's own modification time is used as the stamp (so a dev checkout still
  serves fresh files), and if `style.css` cannot be read the page falls back
  to the pre-1.1.24 behavior and links the loader — an unstyled page is never
  a possible outcome.
- The helper is registered in the `functions.php` loader; the three pages
  that do not load it (`setup`, `install`, `ai_notice` and their English
  twins) require the helper directly. It is deliberately self-contained — no
  database, no i18n, no config — so it works before the app is installed.

## Schema / migration

- **No schema change.** The change is entirely in the presentation layer: no
  new table, column or preference. `migration/1.1.24/upgrade.sql` only
  carries the version stamp.
- **No manual work needed on the central catalog server** — the catalog wire
  was not touched.

## Changed / new files

- files/functions/asset_helpers.php (**new** — stamp, asset URLs, module
  list)
- files/functions.php (registers the helper in the loader)
- files/style.css (comment only: notes that the `@import` list is now read
  as the module list too)
- files/help/help_timezone.php (removed the 404ing `../help.css` link)
- Every page with a style/script link in its head (41 files):
  about, account, add_anime, ai_notice, ai_notice_en, anime_details,
  chronology, edit_anime, filler_edit, help, index, install, install_en,
  list_settings, login, logout, manage_genres, manage_tags, pending,
  recent, recommendations, register, request_invite, series_timeline,
  setup, setup_en, statistics; under admin/: admin, admin_capabilities,
  admin_catalog_requests, admin_invites, admin_pending, admin_suggestions,
  admin_sync_example, admin_users; under help/: help_basics,
  help_discovery, help_fields, help_series, help_sync, help_timezone
- files/migration/1.1.24/upgrade.sql (new, version stamp only)
- files/version.txt

## Deployment note

- `files/functions/asset_helpers.php` is a **new** file and is loaded on
  every page through `functions.php`. If it does not reach the server, pages
  die on the first helper call — so verify the file upload is complete for
  this release.
- The contents of `css/` and `js/` are unchanged; the stamp rides in the URL,
  so those files need no edits.
#10
Announcements & Releases / 1.1.23
Last post by hitsumo - Aug 09, 2026, 05:32 AM
 # Anime Tracker 1.1.23

**Release date:** 2026-07-26

## New: "Air Date" tab on the Series Chronology

- **The series chronology page now has two tabs.** "Chain Order" is the
  view you already know: it follows the Next in Series links hop by hop.
  The new "Air Date" tab lists **every** anime sharing the series name,
  ordered by first air/release date — TV series show their start–end range
  (day.month.year), films and specials show their single premiere date.
- **Why?** The chain view depends on hand-made links: one missing link
  splits the list in two, and a catalog-imported anime is always born
  unlinked. A linear chain also cannot express overlapping broadcast
  periods — films premiering while a TV series is still airing are the
  typical case. The Air Date tab never looks at the chain, so neither
  problem can touch it: a missing link cannot split it, and date ranges
  show the overlaps as they really were.
- **Entries without a date** sink to the end of the list with a "no date"
  label — they never masquerade as the start of the series.
- **The tab choice is remembered for the session:** switch to Air Date on
  one series and another series' chronology opens on that tab too; your
  saved default is never overwritten.

## New: a persistent default in List Settings

- List Settings → General Settings gains a "Series Chronology View"
  preference: which tab the page opens in by default — Chain Order (the
  default, matching the old behavior) or Air Date. It is an exact twin of
  the Chronology View preference (1.1.15): the on-page tabs switch
  temporarily without overwriting it. This preference affects only you.

## New: the button now opens from the series name too

- The "Series Chronology" button on the detail page used to appear only on
  anime already in a chain (having a Next in Series link). It now also
  appears on an anime that **has never been chained but shares its series
  name with other entries** — a catalog-imported anime that nobody has
  linked yet joins its series' timeline immediately through the Air Date
  tab.

## Fixed: adult titles were unmasked on the series chronology

- A user with the adult-content preference off could see the plain title of
  an adult-flagged chain member on the series chronology — every other
  related-anime card in the app has masked these with a neutral placeholder
  since 1.1.2, but this page had been left out. Both tabs now apply the
  same mask: the card stays, the title does not leak; opted-in users keep
  seeing the real title.

## How it works (technical)

- The Air Date tab is fed by a single query over `series_name`, ordered by
  `release_date` (NULLs last). The chain walk, the card template and the
  progress/status badges are shared by both tabs.
- Tab selection follows the 1.1.15 chronology-mode pattern: ephemeral
  session choice > saved per-user default > Chain Order. The persistent
  preference is stored in the `user_pref` table as `series_timeline_mode`;
  the tabs are plain in-page links — only List Settings writes the
  persistent value.
- An anime without a series name shows no Air Date tab; the page draws the
  chain exactly as before.

## Schema / migration

- **No schema change.** The new preference is a row in the existing
  `user_pref` key-value table; every column used already existed.
  `migration/1.1.23/upgrade.sql` carries only the version stamp.
- **No manual action is needed on the central catalog server** — the change
  is purely presentational.

## Changed / new files

- files/series_timeline.php (tabs, air-date view, adult mask)
- files/anime_details.php (Series Chronology button opens from the series name too)
- files/list_settings.php (Series Chronology View preference)
- files/set_series_timeline_mode.php (new, endpoint writing the persistent preference)
- files/functions/series_helpers.php (mode resolution + air-date query)
- files/lang/tr.php, files/lang/en.php (new strings)
- files/migration/1.1.23/upgrade.sql (new, version stamp only)
- files/version.txt