BuyButton.php
3 months ago
CartMenuIcon.php
5 months ago
CollectionTag.php
1 year ago
CollectionTags.php
1 year ago
Media.php
1 year ago
PriceChoiceTemplate.php
1 year ago
PriceChooser.php
4 months ago
PriceData.php
1 year ago
Product.php
4 months ago
ProductCard.php
10 months ago
ProductContent.php
10 months ago
ProductData.php
1 year ago
ProductLineItemNote.php
10 months ago
ProductQuickAddButton.php
10 months ago
ProductReviewAverageRatingStars.php
4 months ago
ProductReviewAverageRatingValue.php
4 months ago
ProductReviewBreakdown.php
4 months ago
ProductReviewContent.php
4 months ago
ProductReviewList.php
2 months ago
ProductReviewRating.php
4 months ago
ProductReviewTotalRating.php
4 months ago
ProductReviews.php
4 months ago
Quantity.php
10 months ago
SaleBadge.php
1 year ago
SelectedPriceAdHocAmount.php
1 year ago
VariantPill.php
6 months ago
VariantPills.php
1 year ago
ProductReviewContent.php
127 lines
| 1 | <?php |
| 2 | |
| 3 | namespace SureCart\Integrations\Bricks\Elements; |
| 4 | |
| 5 | use SureCart\Integrations\Bricks\Concerns\ConvertsBlocks; |
| 6 | |
| 7 | if ( ! defined( 'ABSPATH' ) ) { |
| 8 | exit; // Exit if accessed directly. |
| 9 | } |
| 10 | |
| 11 | /** |
| 12 | * Product Review Content element. |
| 13 | * |
| 14 | * This is a conditional wrapper element that only renders its children |
| 15 | * when reviews exist for the current product. Similar to the Gutenberg |
| 16 | * `surecart/product-reviews` block. |
| 17 | */ |
| 18 | class ProductReviewContent extends \Bricks\Element { |
| 19 | use ConvertsBlocks; |
| 20 | |
| 21 | /** |
| 22 | * Element category. |
| 23 | * |
| 24 | * @var string |
| 25 | */ |
| 26 | public $category = 'SureCart Elements'; |
| 27 | |
| 28 | /** |
| 29 | * Element name. |
| 30 | * |
| 31 | * @var string |
| 32 | */ |
| 33 | public $name = 'surecart-product-review-content'; |
| 34 | |
| 35 | /** |
| 36 | * Element block name. |
| 37 | * |
| 38 | * @var string |
| 39 | */ |
| 40 | public $block_name = 'surecart/product-reviews'; |
| 41 | |
| 42 | /** |
| 43 | * Element icon. |
| 44 | * |
| 45 | * @var string |
| 46 | */ |
| 47 | public $icon = 'ti-layout-placeholder'; |
| 48 | |
| 49 | /** |
| 50 | * This is nestable. |
| 51 | * |
| 52 | * @var bool |
| 53 | */ |
| 54 | public $nestable = true; |
| 55 | |
| 56 | /** |
| 57 | * Get element label. |
| 58 | * |
| 59 | * @return string |
| 60 | */ |
| 61 | public function get_label() { |
| 62 | return esc_html__( 'Product Review Content', 'surecart' ); |
| 63 | } |
| 64 | |
| 65 | /** |
| 66 | * Get nestable children. |
| 67 | * |
| 68 | * @return array |
| 69 | */ |
| 70 | public function get_nestable_children() { |
| 71 | // Default empty - users can add any content they want inside. |
| 72 | return []; |
| 73 | } |
| 74 | |
| 75 | /** |
| 76 | * Set controls. |
| 77 | * |
| 78 | * @return void |
| 79 | */ |
| 80 | public function set_controls() { |
| 81 | $this->controls['info_notice'] = [ |
| 82 | 'tab' => 'content', |
| 83 | 'type' => 'info', |
| 84 | 'content' => sprintf( |
| 85 | '<strong>%s</strong><br><br>%s', |
| 86 | esc_html__( 'Conditional Visibility Wrapper', 'surecart' ), |
| 87 | esc_html__( 'This wrapper conditionally hides its contents when no reviews exist for the product. Place your review summary elements (Average Rating, Stars, Breakdown, etc.) inside this wrapper. Do not remove this element if you want conditional visibility.', 'surecart' ) |
| 88 | ), |
| 89 | ]; |
| 90 | } |
| 91 | |
| 92 | /** |
| 93 | * Render element. |
| 94 | * |
| 95 | * @return void |
| 96 | */ |
| 97 | public function render() { |
| 98 | // In editor mode, always render children for preview. |
| 99 | if ( $this->is_admin_editor() ) { |
| 100 | $output = "<div {$this->render_attributes( '_root' )}>"; |
| 101 | $output .= \Bricks\Frontend::render_children( $this ); |
| 102 | $output .= '</div>'; |
| 103 | echo $output; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped |
| 104 | return; |
| 105 | } |
| 106 | |
| 107 | // On frontend, check if reviews exist before rendering. |
| 108 | $product = sc_get_product(); |
| 109 | |
| 110 | // No product - don't render. |
| 111 | if ( empty( $product ) || empty( $product->total_reviews ) ) { |
| 112 | return; |
| 113 | } |
| 114 | |
| 115 | // Reviews are not enabled - don't render. |
| 116 | if ( ! apply_filters( 'surecart/review_form/enabled', $product->reviews_enabled ) ) { |
| 117 | return; |
| 118 | } |
| 119 | |
| 120 | $output = "<div {$this->render_attributes( '_root' )}>"; |
| 121 | $output .= \Bricks\Frontend::render_children( $this ); |
| 122 | $output .= '</div>'; |
| 123 | |
| 124 | echo $output; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped |
| 125 | } |
| 126 | } |
| 127 |