PluginProbe
FluentCart A New Era of eCommerce – Faster, Lighter, and Simpler / 1.7.1
FluentCart A New Era of eCommerce – Faster, Lighter, and Simpler v1.7.1
1.7.1 1.7.0 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 All 51 releases
← All changes | app/Hooks/actions.php +80 -0 1.6.2 → 1.7.1 View file →
@@ -25,8 +25,9 @@
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\ShortCodes\OrderReviewShortCode)->register();
29 30
30 31 (new FluentCart\App\Hooks\Handlers\CustomCheckout\CustomCheckout())->register();
31 32
32 33 // Tax Module Init
@@ -36,8 +37,13 @@
36 37
37 38 // Turnstile Module Init
38 39 (new \FluentCart\App\Modules\Turnstile\TurnstileInit())->register(\FluentCart\App\App::getInstance());
39 40
41 +// Reviews Module Init
42 +(new \FluentCart\App\Modules\Reviews\ReviewModule())->register();
43 +
44 +(new \FluentCart\App\Modules\FluentPlayer\FluentPlayerAdminAssets())->register();
45 +
40 46 // Register Pro Gateways Promo
41 47 (new \FluentCart\App\Hooks\Handlers\PromoGatewaysHandler())->register();
42 48
43 49 // Register Addon Gateways
@@ -74,8 +80,9 @@
74 80 \FluentCart\App\Hooks\Handlers\BlockEditors\Buttons\BuyNowButtonBlockEditor::register();
75 81 \FluentCart\App\Hooks\Handlers\BlockEditors\Buttons\AddToCartButtonBlockEditor::register();
76 82
77 83 \FluentCart\App\Hooks\Handlers\BlockEditors\MiniCartBlockEditor::register();
84 +\FluentCart\App\Hooks\Handlers\BlockEditors\Cart\CartBlockEditor::register();
78 85 \FluentCart\App\Hooks\Handlers\BlockEditors\ProductCategoriesListBlockEditor::register();
79 86 \FluentCart\App\Hooks\Handlers\BlockEditors\RelatedProduct\RelatedProductBlockEditor::register();
80 87 \FluentCart\App\Hooks\Handlers\ShortCodes\Buttons\DirectCheckoutShortcode::register();
81 88 \FluentCart\App\Hooks\Handlers\ShortCodes\Buttons\AddToCartShortcode::register();
@@ -100,8 +107,26 @@
100 107 \FluentCart\App\Hooks\Handlers\BlockEditors\StockBlock::register();
101 108 \FluentCart\App\Hooks\Handlers\BlockEditors\SoldOutBadgeBlockEditor::register();
102 109 }
103 110
111 +// Registered whether or not the reviews module is active: the block ships
112 +// inside the Shop App, Product Info and Related Products card templates, so
113 +// an unregistered block would greet the editor with "your site doesn't
114 +// include support for this block" on every card. With the module off it
115 +// stays out of the inserter and renders nothing, in the editor and on the
116 +// page — see ProductRatingBlockEditor.
117 +\FluentCart\App\Hooks\Handlers\BlockEditors\ProductRatingBlockEditor::register();
118 +
119 +if (\FluentCart\Api\ModuleSettings::isActive('reviews') && class_exists(\FluentCart\App\Hooks\Handlers\BlockEditors\ProductReviewsBlockEditor::class)) {
120 + \FluentCart\App\Hooks\Handlers\BlockEditors\ProductReviewsBlockEditor::register();
121 + \FluentCart\App\Hooks\Handlers\BlockEditors\WriteAReviewButtonBlockEditor::register();
122 + \FluentCart\App\Hooks\Handlers\BlockEditors\ProductReviewFormBlockEditor::register();
123 + \FluentCart\App\Hooks\Handlers\BlockEditors\ProductReviewSummaryBlockEditor::register();
124 + \FluentCart\App\Hooks\Handlers\BlockEditors\ProductReviewList\ProductReviewListBlockEditor::register();
125 + \FluentCart\App\Hooks\Handlers\BlockEditors\ProductReviewSummaryGroupBlockEditor::register();
126 + \FluentCart\App\Hooks\Handlers\ShortCodes\ProductReviewsShortCode::register();
127 +}
128 +
104 129 (new \FluentCart\App\Hooks\Cart\CartLoader)->register();
105 130 (new \FluentCart\App\Hooks\Handlers\GlobalPaymentHandler)->register();
106 131
107 132 \FluentCart\App\Http\Routes\WebRoutes::register();
@@ -169,8 +194,63 @@
169 194 do_action('fluent_cart/order_paid_done', $eventData);
170 195
171 196 };
172 197 add_action('fluent_cart/order_paid_async_private_handle', $orderPaidAsyncHandler, 1, 1);
198 +
199 +// The settled half of a review approval — see ReviewApproved::afterDispatch().
200 +// Runs off the request, so it trusts nothing it was told: the review is
201 +// re-read, and only one that is still an approved top-level review is
202 +// announced. Deleted or held back since, nothing fires.
203 +$reviewApprovedAsyncHandler = function ($data) {
204 + $reviewId = (int) \FluentCart\Framework\Support\Arr::get($data, 'review_id');
205 +
206 + if (!$reviewId) {
207 + return;
208 + }
209 +
210 + $review = \FluentCart\App\Models\ProductReview::query()->with('product')->find($reviewId);
211 +
212 + if (!$review || $review->parent_id || $review->status !== \FluentCart\App\Helpers\Status::REVIEW_APPROVED) {
213 + return;
214 + }
215 +
216 + do_action('fluent_cart/review_approved_done', [
217 + 'review' => $review,
218 + 'product' => $review->product,
219 + ]);
220 +};
221 +add_action('fluent_cart/review_approved_async_private_handle', $reviewApprovedAsyncHandler, 1, 1);
222 +
223 +// The settled half of a store reply — see ReviewReplied::afterDispatch().
224 +// Announced only while both halves are published: the reply itself, and the
225 +// review it answers. A reply to a review nobody can see is not a
226 +// conversation the reviewer can be pointed at.
227 +$reviewRepliedAsyncHandler = function ($data) {
228 + $replyId = (int) \FluentCart\Framework\Support\Arr::get($data, 'reply_id');
229 +
230 + if (!$replyId) {
231 + return;
232 + }
233 +
234 + $reply = \FluentCart\App\Models\ProductReview::query()->with('product')->find($replyId);
235 +
236 + if (!$reply || !$reply->parent_id || !$reply->is_admin_reply || $reply->status !== \FluentCart\App\Helpers\Status::REVIEW_APPROVED) {
237 + return;
238 + }
239 +
240 + $review = \FluentCart\App\Models\ProductReview::query()->find((int) $reply->parent_id);
241 +
242 + if (!$review || $review->parent_id || $review->status !== \FluentCart\App\Helpers\Status::REVIEW_APPROVED) {
243 + return;
244 + }
245 +
246 + do_action('fluent_cart/review_replied_done', [
247 + 'reply' => $reply,
248 + 'review' => $review,
249 + 'product' => $reply->product,
250 + ]);
251 +};
252 +add_action('fluent_cart/review_replied_async_private_handle', $reviewRepliedAsyncHandler, 1, 1);
173 253
174 254
175 255 //
176 256 //$app->addAction('fluent_cart/orders_filter_customer', function ($query, $filters) {