<?xml version="1.0" encoding="utf-8"?>
	<rss version="2.0">
		<channel> 
			<title>История коммерческой редакции CMS Donate Engine</title> 
			<link>https://cde.by/ru/news/</link> 
			<description>Здесь Вы можете ознакомиться с историей изменений в CMS Donate Engine.</description>
			<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
with "", 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>
			<item>
				<title>v19.2.30</title>
				<description><![CDATA[fix(store/give): fail explicitly on unresolved placeholders
PlaceholderResolver previously treated empty placeholder values
('', '0', null) as absent and let them slip through to str_ireplace,
so commands like "tele %crossid% ..." reached the game server with
literal tokens and the game replied "player not found".
- add PlaceholderNotResolvedException with the missing placeholder list
- collect unresolved placeholders before substitution and throw
  instead of emitting a half-built command
- catch it separately in RconGive and return GiveResult::notDeliverable
  instead of misleading serverOffline
- persist the failure via PurchaseLog::writePlaceholderFailure]]></description>
				<files><![CDATA[Total: 9 files (+1, ~8, -0)

www/public/style/lte3/views/rcon/
  M list.tpl
www/src/admin/controllers/
  M cron.php
www/src/app/
  M constants.php
www/src/app/Features/Store/Purchase/Give/
  M GiveResult.php
  M RconGive.php
www/src/app/Features/Store/Purchase/Ports/
  M LogStoreAdapter.php
  M PurchaseLog.php
www/src/app/lib/rcon/
  A PlaceholderNotResolvedException.php
  M PlaceholderResolver.php]]></files>
				<pubDate>Sun, 11 Oct 2026 15:35:38 +0300</pubDate>
			</item>
			<item>
				<title>v19.2.29</title>
				<description><![CDATA[feat(cron): add same_type queue delivery mode
- QueueService: MODE_SAME_TYPE + runSameTypeWithConnections()
- ServerMonitor: match three modes (strict/same_type/any)
- cron.php + panel.tpl: select with three options
- MigrateMySQL19228: QUEUE_DELIVERY_* translations (up/down)]]></description>
				<files><![CDATA[Total: 12 files (+4, ~8, -0)

www/public/style/lte3/
  M admin_ajax.tpl
  M admin_layout.tpl
  A admin_pjax.tpl
www/public/style/lte3/views/cron/
  A navi.tpl
  A panel.tpl
www/src/admin/controllers/
  M cron.php
www/src/admin/lib/cron/
  M ServerMonitor.php
www/src/admin/lib/updater/migrate_mysql/
  A MigrateMySQL19227.php
www/src/app/
  M constants.php
www/src/app/Features/Store/Purchase/Give/
  M RconGive.php
www/src/app/lib/
  M Template.php
www/src/app/lib/queue/
  M Service.php]]></files>
				<pubDate>Sun, 11 Oct 2026 11:58:14 +0300</pubDate>
			</item>
			<item>
				<title>v19.2.26</title>
				<description><![CDATA[fix(confirm): remove double ['c'] offset in generate()
`$cN = database_columns['c']` already unwraps the section, but
generate() accessed `$cN['c']['table']`  14 null !92 "Incorrect table
name ''". remove()/get() are correct; only generate() had the bug.]]></description>
				<files><![CDATA[Total: 2 files (+0, ~2, -0)

www/src/app/
  M constants.php
www/src/app/models/Confirm/
  M modelConfirm.php]]></files>
				<pubDate>Sat, 10 Oct 2026 18:55:11 +0300</pubDate>
			</item>
			<item>
				<title>v19.2.25</title>
				<description><![CDATA[refactor(store): migrate templates to {url} Smarty function
- 12 templates migrated from {'fn'|cfg}store/... to {url name=...}
- StoreModalController: drop action/url_delete assigns
- POST /store/itemID-N replaces POST /store + itemID in body
- admin_modal_group_edit: use route names instead of URL concat]]></description>
				<files><![CDATA[Total: 15 files (+0, ~15, -0)

www/public/style/gente/js/
  M shop.js
www/public/style/gente/mods/store/
  M admin_modal_delete.tpl
  M admin_modal_edit_product.tpl
  M admin_modal_group_edit.tpl
  M admin_modal_server_edit.tpl
  M admin_modal_source.tpl
  M index.tpl
  M modal_bundle.tpl
  M modal_footer_price.tpl
  M modal_rulet.tpl
  M product_server_group.tpl
  M products_catalog.tpl
www/public/style/lte3/views/management/
  M list.tpl
www/src/app/
  M constants.php
www/src/app/Features/Store/Http/
  M StoreModalController.php]]></files>
				<pubDate>Sat, 10 Oct 2026 08:20:38 +0300</pubDate>
			</item>
			<item>
				<title>v19.2.24</title>
				<description><![CDATA[test(deploy): check migration]]></description>
				<files><![CDATA[Total: 2 files (+0, ~2, -0)

.vscode/
  M settings.json
www/src/app/
  M constants.php]]></files>
				<pubDate>Sat, 10 Oct 2026 07:44:58 +0300</pubDate>
			</item>
			<item>
				<title>v19.2.23</title>
				<description><![CDATA[build 19.2.23 test]]></description>
				<files><![CDATA[Total: 1 files (+0, ~0, -0)

./
   ]]></files>
				<pubDate>Sat, 10 Oct 2026 07:24:47 +0300</pubDate>
			</item>
		</channel>
	</rss>