PluginProbe
FluentCart A New Era of eCommerce – Faster, Lighter, and Simpler / 1.6.6
FluentCart A New Era of eCommerce – Faster, Lighter, and Simpler v1.6.6
1.6.6 1.6.5 1.6.4 1.6.3 1.6.2 1.6.1 1.6.0 1.5.4 1.5.5 1.5.3 1.5.2 1.5.1 1.5.0 1.4.2 1.4.1 1.4.0 1.3.28 1.3.27 1.3.26 1.3.25 1.3.23 1.3.22 1.3.21 1.3.20 1.3.19 All 49 releases
← All changes | app/Hooks/actions.php +23 -5 1.3.28 → 1.6.6 View file →
@@ -25,18 +25,21 @@
25 25 (new \FluentCart\App\Hooks\Handlers\RetentionSnapshotHandler)->register();
26 26 (new \FluentCart\App\Hooks\Handlers\ReminderHandler)->register();
27 27
28 28 (new \FluentCart\App\Hooks\Handlers\ShortCodes\ShopAppHandler)->register();
29 -(new \FluentCart\App\Hooks\Handlers\ExportHandler)->register();
30 29
31 30 (new FluentCart\App\Hooks\Handlers\CustomCheckout\CustomCheckout())->register();
32 31
33 32 // Tax Module Init
34 -(new \FluentCart\App\Modules\Tax\TaxModule())->register();
33 +add_action('init', function () {
34 + (new \FluentCart\App\Modules\Tax\TaxModule())->register();
35 +}, 1);
35 36
36 37 // Turnstile Module Init
37 38 (new \FluentCart\App\Modules\Turnstile\TurnstileInit())->register(\FluentCart\App\App::getInstance());
38 39
40 +(new \FluentCart\App\Modules\FluentPlayer\FluentPlayerAdminAssets())->register();
41 +
39 42 // Register Pro Gateways Promo
40 43 (new \FluentCart\App\Hooks\Handlers\PromoGatewaysHandler())->register();
41 44
42 45 // Register Addon Gateways
@@ -73,8 +76,9 @@
73 76 \FluentCart\App\Hooks\Handlers\BlockEditors\Buttons\BuyNowButtonBlockEditor::register();
74 77 \FluentCart\App\Hooks\Handlers\BlockEditors\Buttons\AddToCartButtonBlockEditor::register();
75 78
76 79 \FluentCart\App\Hooks\Handlers\BlockEditors\MiniCartBlockEditor::register();
80 +\FluentCart\App\Hooks\Handlers\BlockEditors\Cart\CartBlockEditor::register();
77 81 \FluentCart\App\Hooks\Handlers\BlockEditors\ProductCategoriesListBlockEditor::register();
78 82 \FluentCart\App\Hooks\Handlers\BlockEditors\RelatedProduct\RelatedProductBlockEditor::register();
79 83 \FluentCart\App\Hooks\Handlers\ShortCodes\Buttons\DirectCheckoutShortcode::register();
80 84 \FluentCart\App\Hooks\Handlers\ShortCodes\Buttons\AddToCartShortcode::register();
@@ -131,13 +135,21 @@
131 135 return;
132 136 }
133 137
134 138 $order = \FluentCart\App\Models\Order::find($orderId);
135 - if (!$order || $order->payment_status !== 'paid' || !$order->getMeta('action_scheduler_id')) {
139 + if (!$order || $order->payment_status !== 'paid') {
136 140 return;
137 141 }
138 142
139 - $order->deleteMeta('action_scheduler_id');
143 + // Claim the run by deleting the meta and branching on the affected-row count.
144 + // The Action Scheduler worker and the receipt-page AJAX nudge
145 + // (IntegrationEventListener::runOrderActionsAjax) can arrive together, so a
146 + // read-then-delete would let both pass the guard and fire order_paid_done
147 + // twice. A single DELETE is atomic: MySQL hands the row to exactly one
148 + // caller, and the loser sees 0 rows and returns.
149 + if (!$order->deleteMeta('action_scheduler_id')) {
150 + return;
151 + }
140 152
141 153 $transaction = \FluentCart\App\Models\OrderTransaction::query()
142 154 ->where('order_id', $order->id)
143 155 ->where('status', \FluentCart\App\Helpers\Status::TRANSACTION_SUCCEEDED)
@@ -160,9 +172,8 @@
160 172 do_action('fluent_cart/order_paid_done', $eventData);
161 173
162 174 };
163 175 add_action('fluent_cart/order_paid_async_private_handle', $orderPaidAsyncHandler, 1, 1);
164 -add_action('fluent_cart/order_paid_ansyc_private_handle', $orderPaidAsyncHandler, 1, 1);
165 176
166 177
167 178 //
168 179 //$app->addAction('fluent_cart/orders_filter_customer', function ($query, $filters) {
@@ -176,8 +187,15 @@
176 187 }
177 188
178 189 \FluentCart\App\Modules\Subscriptions\SubscriptionModule::register();
179 190 \FluentCart\App\Modules\Shipping\ShippingModule::register();
191 +\FluentCart\App\Modules\StoreManagedRenewal\RenewalModule::register();
192 +(new \FluentCart\App\Hooks\Handlers\AttributesHandler())->register();
193 +(new \FluentCart\App\Hooks\Handlers\AdvancedVariationHandler())->register();
194 +
195 +// MCP (Model Context Protocol) — operator AI tools. Ships OFF; enabled in
196 +// Settings → Features & addon → MCP. See MCPInit::boot() for the bootstrap.
197 +\FluentCart\App\Modules\MCP\MCPInit::boot();
180 198
181 199 $app->ready(function () use ($app) {
182 200 \FluentCart\App\Models\Connection\ConnectionManager::connect($this->app);
183 201 });