<?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.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>
			<item>
				<title>v19.2.22</title>
				<description><![CDATA[build 19.2.22 test]]></description>
				<files><![CDATA[Total: 1 files (+0, ~0, -0)

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