<?xml version="1.0" encoding="utf-8"?>
	<rss version="2.0">
		<channel> 
			<title>Version history CMS Donate Engine</title> 
			<link>https://cde.by/en/news/</link> 
			<description>Here you can see the history of changes in CMS Donate Engine.</description>
			<item>
				<title>v19.1.60</title>
				<description><![CDATA[fix(store): restore globals and init keys, clean up Charset check
- FrontRunner: set $GLOBALS['db'] and $GLOBALS['config'] so legacy
  classes (GameAuth, modelConfirm) can resolve them via `global`
- store.php itemID: init $r['rulette']/lot/chance/sound before resolver
  to silence undefined-key warnings in restContent
- Charset::toUtf8: remove dead `!== false` check on mb_convert_encoding
  (PHP 8 never returns false, only throws)]]></description>
				<files><![CDATA[Total: 4 files (+0, ~4, -0)

www/src/app/
  M FrontRunner.php
  M constants.php
www/src/app/controllers/
  M store.php
www/src/app/helpers/
  M Charset.php]]></files>
				<pubDate>Thu, 01 Oct 2026 15:51:33 +0300</pubDate>
			</item>
			<item>
				<title>v19.1.59</title>
				<description><![CDATA[fix(user): preserve fractional money balance in CurrentUser and PlayerDataRepository
- PlayerDataRepository::getUserDataByUsername: (int) !92 (float) for coins/rub
- CurrentUser::load: (int) !92 (float) for coins/rub
- CurrentUser::getCoins/getRub: return type int !92 float
Fixes loss of fractional balance after discounted purchases.]]></description>
				<files><![CDATA[Total: 8 files (+2, ~6, -0)

www/public/style/gente/js/
  M rullete.js
www/src/app/
  M constants.php
www/src/app/controllers/
  M store.php
www/src/app/helpers/
  A Charset.php
  A SteamForm.php
www/src/app/lib/
  M Discount.php
www/src/app/lib/session/
  M CurrentUser.php
www/src/app/lib/user/
  M PlayerDataRepository.php]]></files>
				<pubDate>Thu, 01 Oct 2026 15:24:33 +0300</pubDate>
			</item>
			<item>
				<title>v19.1.58</title>
				<description><![CDATA[fix(route): login & register
fix(steam): login]]></description>
				<files><![CDATA[Total: 6 files (+0, ~6, -0)

www/src/app/
  M constants.php
www/src/app/Features/Auth/
  M LoginController.php
  M LogoffController.php
  M RegisterController.php
  M SendPasswordController.php
www/src/app/usecases/
  M SteamRegistrationUseCase.php]]></files>
				<pubDate>Wed, 30 Sep 2026 21:37:31 +0300</pubDate>
			</item>
			<item>
				<title>v19.1.57</title>
				<description><![CDATA[fix(store): ui parser cmd]]></description>
				<files><![CDATA[Total: 2 files (+0, ~2, -0)

www/public/style/gente/mods/store/
  M admin_modal_edit_product.js
www/src/app/
  M constants.php]]></files>
				<pubDate>Tue, 29 Sep 2026 14:20:48 +0300</pubDate>
			</item>
			<item>
				<title>v19.1.56</title>
				<description><![CDATA[fix(store): ui parser cmd]]></description>
				<files><![CDATA[Total: 5 files (+0, ~5, -0)

docs/
  M Store.php.md
www/public/style/gente/mods/store/
  M admin_modal_edit_product.js
  M admin_modal_edit_product.tpl
www/src/admin/lib/updater/migrate_mysql/
  M MigrateMySQL19064.php
www/src/app/
  M constants.php]]></files>
				<pubDate>Tue, 29 Sep 2026 14:11:56 +0300</pubDate>
			</item>
			<item>
				<title>v19.1.55</title>
				<description><![CDATA[docs(commit-convention): update
feat(store): affix/NBT modifiers and purchase pipeline refactor
- Affix/NBT middleware pipeline (NBT !92 affix !92 placeholder)
- Bundle item overrides (nbt, affixes) via `!key` merge
- CommandSplitter, CommandInspector, parseCommand endpoint
- Purchase pipeline: Give strategies, Ports, UseCase, Factory
- PlaceholderResolver extracted from Facade
- Command types in UI: number/select/bool]]></description>
				<files><![CDATA[Total: 56 files (+37, ~19, -0)

Most changed directories:
  12   www/src/app/Features/Store/Purchase/Command/
  10   www/src/app/Features/Store/Purchase/Give/
  8   www/src/app/Features/Store/Purchase/Ports/
  6   www/src/app/Features/Store/Purchase/
  4   www/public/style/gente/mods/store/
  3   www/src/app/lib/rcon/
  2   docs/
  1   www/src/app/lib/templates/
  1   www/src/app/lib/sender/
  1   www/src/app/lib/queue/]]></files>
				<pubDate>Tue, 29 Sep 2026 13:42:17 +0300</pubDate>
			</item>
			<item>
				<title>v19.1.50</title>
				<description><![CDATA[feat(store): expiry commands UI, form UX improvements]]></description>
				<files><![CDATA[Total: 7 files (+1, ~6, -0)

www/public/style/gente/mods/store/
  M admin_modal_edit_product.js
  M admin_modal_edit_product.tpl
www/src/admin/lib/updater/migrate_mysql/
  A MigrateMySQL19149.php
www/src/app/
  M constants.php
www/src/app/controllers/
  M store.php
www/src/app/Features/Store/Purchase/
  M PurchaseResolver.php
www/src/app/lib/templates/
  M ImageUrl.php]]></files>
				<pubDate>Fri, 25 Sep 2026 12:54:55 +0300</pubDate>
			</item>
			<item>
				<title>v19.1.48</title>
				<description><![CDATA[deploy(test): for check]]></description>
				<files><![CDATA[Total: 1 files (+0, ~1, -0)

www/src/app/
  M constants.php]]></files>
				<pubDate>Thu, 24 Sep 2026 23:00:11 +0300</pubDate>
			</item>
			<item>
				<title>v19.1.47</title>
				<description><![CDATA[fix(store): escape XSS, RCON-safe placeholders, ImageUrl helper, BundleItems hardening]]></description>
				<files><![CDATA[Total: 20 files (+1, ~19, -0)

www/public/style/gente/mods/store/
  M admin_modal_edit_product.js
  M admin_modal_edit_product.tpl
  M admin_modal_error_product.tpl
  M admin_modal_group_edit.tpl
  M admin_modal_server_edit.tpl
  M admin_modal_source.tpl
  M form_donate.tpl
  M index.tpl
  M modal_bundle.tpl
  M modal_rulet.tpl
  M product_server_group.tpl
  M products_catalog.tpl
www/src/app/
  M constants.php
www/src/app/controllers/
  M store.php
www/src/app/Features/Store/Purchase/
  M BundleItems.php
  M PurchaseResolver.php
www/src/app/lib/
  M Template.php
www/src/app/lib/rcon/
  M Facade.php
  M ValidatePayment.php
www/src/app/lib/templates/
  A ImageUrl.php]]></files>
				<pubDate>Thu, 24 Sep 2026 22:24:00 +0300</pubDate>
			</item>
			<item>
				<title>v19.1.46</title>
				<description><![CDATA[fix(store): keep bundle item fields when switching product types
- addItemPanelWithIndex: always fill hidden price/chance/sound inputs
  regardless of active product mode, so values persist when admin
  toggles between set/switch/roulette in the edit form
- insert handler: merge submitted items with existing serialized items
  by id, preserving fields not present in the current form (cmd/give/lang,
  prices, chance, sound)]]></description>
				<files><![CDATA[Total: 4 files (+0, ~4, -0)

www/public/style/gente/mods/store/
  M admin_modal_edit_product.js
  M modal_bundle.tpl
www/src/app/
  M constants.php
www/src/app/controllers/
  M store.php]]></files>
				<pubDate>Thu, 24 Sep 2026 12:27:15 +0300</pubDate>
			</item>
		</channel>
	</rss>