<?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.2.43</title>
				<description><![CDATA[refactor(rcon,query): add RconClient interface, rename Facade adapters]]></description>
				<files><![CDATA[Total: 31 files (+4, ~25, -2)

www/src/admin/controllers/
  M luckperms.php
  M management.php
  M perm.php
  M query.php
  M rcon.php
  M users.php
www/src/admin/lib/cron/
  M Gifts.php
  M Permissions.php
  M ServerCron.php
  M ServerMonitor.php
www/src/app/
  M constants.php
www/src/app/controllers/
  M bans.php
  M groups.php
  M inv.php
  M myitems.php
  M servers.php
  M shopitems.php
  M teleport.php
  M unban.php
www/src/app/Features/Store/Purchase/
  M PurchaseFactory.php
www/src/app/Features/Store/Purchase/Command/
  M AffixCatalog.php
www/src/app/Features/Store/Purchase/Give/
  M RconGive.php
www/src/app/lib/inventory/protocols/minecraft/
  M RconGiveFromBasket.php
www/src/app/lib/query/
  D Facade.php
  A QueryAdapter.php
www/src/app/lib/queue/
  M Service.php
www/src/app/lib/rcon/
  A RconAdapter.php
  A RconClient.php
www/src/app/lib/server/
  M GameAuth.php
www/tests/Unit/Features/Store/Purchase/Give/
  A RconGiveTest.php]]></files>
				<pubDate>Tue, 13 Oct 2026 18:50:39 +0300</pubDate>
			</item>
			<item>
				<title>v19.2.42</title>
				<description><![CDATA[feat(store): name the server in player-offline message]]></description>
				<files><![CDATA[Total: 5 files (+1, ~4, -0)

www/src/admin/lib/updater/migrate_mysql/
  A MigrateMySQL19241.php
www/src/app/
  M constants.php
www/src/app/Features/Store/Purchase/
  M StorePurchaseService.php
www/src/app/lib/
  M Template.php
www/src/app/lib/rcon/
  M PlaceholderResolver.php]]></files>
				<pubDate>Tue, 13 Oct 2026 08:56:46 +0300</pubDate>
			</item>
			<item>
				<title>v19.2.40</title>
				<description><![CDATA[fix(store): route GiveQueue to RCON, classify placeholder failures, read member fields from main db
GiveType::fromGive mapped GiveQueue to Inventory, so store purchases went
through the wrong delivery path. Placeholder failures were indistinguishable,
surfacing server unavailable for missing Steam. Member fields were read
through the money connection without cache. ValidatePayment duplicated the
identity check.
- GiveType: GiveQueue !92 Rcon
- PlaceholderResolver: PlaceholderKind (Identity/Presence/Runtime/Unknown)
  and a single missingIdentity() preflight
- RconGive: match on PlaceholderKind, no preflight duplication
- StorePurchaseService: take CurrentUser, drop flat fields and ValidatePayment
- MemberDataFactory/memberData: split $mainDb from $moneyDb
- CurrentUser::getServerAuth()
- Frontend: SteamID as placeholder, not value]]></description>
				<files><![CDATA[Total: 28 files (+2, ~24, -2)

www/public/style/gente/js/
  M shop.js
www/public/style/gente/mods/store/
  M admin_modal_edit_product.tpl
  M form_donate.tpl
  M index.tpl
  M product_server_group.tpl
  M products_catalog.tpl
  A script.js
  D script.tpl
www/src/app/
  M constants.php
www/src/app/config/
  M services.php
www/src/app/controllers/
  M lisf.php
  M lisfmarket.php
  M oxide.php
  M oxidemarket.php
www/src/app/Features/Store/Http/
  M StoreApiController.php
  M StoreCatalogController.php
www/src/app/Features/Store/Purchase/
  M StorePurchaseService.php
www/src/app/Features/Store/Purchase/Give/
  M GiveResult.php
  M GiveType.php
  M RconGive.php
www/src/app/lib/
  M MemberDataFactory.php
  M Template.php
  M memberData.php
www/src/app/lib/rcon/
  A PlaceholderKind.php
  M PlaceholderNotResolvedException.php
  M PlaceholderResolver.php
  D ValidatePayment.php
www/src/app/lib/session/
  M CurrentUser.php]]></files>
				<pubDate>Mon, 12 Oct 2026 23:33:43 +0300</pubDate>
			</item>
			<item>
				<title>v19.2.39</title>
				<description><![CDATA[fix(http): return 405 for routing MethodNotAllowedException]]></description>
				<files><![CDATA[Total: 2 files (+0, ~2, -0)

www/src/app/
  M constants.php
www/src/app/Http/
  M RequestHandler.php]]></files>
				<pubDate>Mon, 12 Oct 2026 17:29:18 +0300</pubDate>
			</item>
			<item>
				<title>v19.2.38</title>
				<description><![CDATA[fix(admin): layout alignment and Response support

- restore text-right on #naviButtons for legacy float-based toolbars
- wrap cron navi in d-inline-flex to prevent button collapse
- capture controller return value in AdminRunner and pass Response
  through, matching FrontRunner behaviour]]></description>
				<files><![CDATA[Total: 6 files (+0, ~6, -0)

www/public/style/lte3/
  M admin_layout.tpl
  M admin_pjax.tpl
www/public/style/lte3/views/cron/
  M navi.tpl
www/src/admin/
  M AdminRunner.php
www/src/admin/controllers/
  M cron.php
www/src/app/
  M constants.php]]></files>
				<pubDate>Mon, 12 Oct 2026 07:09:52 +0300</pubDate>
			</item>
			<item>
				<title>v19.2.37</title>
				<description><![CDATA[feat(store): distinguish missing identity from offline player

When the account has neither a Steam id nor a server auth id, the
store cannot identify the player in the game at all, but RconGive
returned playerOffline and the UI asked the user to join the server.
Add GiveResult::identityMissing, return it when both steam and
playerServerAuth are empty, and surface STORE_IDENTITY_MISSING from
the purchase match. playerOffline is now returned only when an
identifier exists but the player is not on the server.]]></description>
				<files><![CDATA[Total: 6 files (+1, ~5, -0)

www/src/admin/lib/updater/migrate_mysql/
  A MigrateMySQL19236.php
www/src/app/
  M constants.php
www/src/app/Features/Store/Purchase/
  M PurchaseResult.php
  M StorePurchaseService.php
www/src/app/Features/Store/Purchase/Give/
  M GiveResult.php
  M RconGive.php]]></files>
				<pubDate>Mon, 12 Oct 2026 06:26:39 +0300</pubDate>
			</item>
			<item>
				<title>v19.2.35</title>
				<description><![CDATA[fix(store): use Steam auth id and drop undefined from purchase POST

StorePurchaseService read $_SESSION[steam_id] (linked profile) instead
of $_SESSION[STEAMID] (Steam auth), so userIsOnline() missed players
who were online.
form_submit_ajax unconditionally read #username_inp, #steam_inp and
#server_auth; .val() returned undefined for absent fields and the
literal undefined went into every purchase request.
Prefer STEAMID when building GiveContext, coalesce the three lookups and ignore the literal undefined on the server side.]]></description>
				<files><![CDATA[Total: 7 files (+0, ~7, -0)

www/public/style/gente/js/
  M shop.js
www/src/app/
  M constants.php
www/src/app/Features/Store/Http/
  M StoreApiController.php
www/src/app/Features/Store/Purchase/
  M StorePurchaseService.php
www/src/app/lib/
  M Template.php
www/src/app/lib/rcon/
  M Facade.php
  M Rcon7dtd.php]]></files>
				<pubDate>Mon, 12 Oct 2026 05:56:32 +0300</pubDate>
			</item>
			<item>
				<title>v19.2.34</title>
				<description><![CDATA[fix(store/give): reject offline RCON delivery instead of silently queueing]]></description>
				<files><![CDATA[Total: 2 files (+0, ~2, -0)

www/src/app/
  M constants.php
www/src/app/Features/Store/Purchase/Give/
  M RconGive.php]]></files>
				<pubDate>Sun, 11 Oct 2026 18:02:44 +0300</pubDate>
			</item>
			<item>
				<title>v19.2.33</title>
				<description><![CDATA[fix(store/purchase): handle player_off and not_deliverable statuses explicitly]]></description>
				<files><![CDATA[Total: 7 files (+1, ~6, -0)

www/src/admin/lib/updater/migrate_mysql/
  A MigrateMySQL19232.php
www/src/app/
  M constants.php
www/src/app/Features/Store/Purchase/
  M PurchaseResult.php
  M StorePurchaseService.php
www/src/app/Features/Store/Purchase/Give/
  M RconGive.php
www/src/app/Features/Store/Purchase/Ports/
  M ProductStock.php
www/src/app/lib/queue/
  M Service.php]]></files>
				<pubDate>Sun, 11 Oct 2026 17:42:08 +0300</pubDate>
			</item>
			<item>
				<title>v19.2.31</title>
				<description><![CDATA[fix(store/give): return player_off for offline player instead of fake ok]]></description>
				<files><![CDATA[Total: 3 files (+0, ~3, -0)

www/src/app/
  M constants.php
www/src/app/Features/Store/Purchase/Give/
  M GiveResult.php
  M RconGive.php]]></files>
				<pubDate>Sun, 11 Oct 2026 15:46:56 +0300</pubDate>
			</item>
		</channel>
	</rss>