PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 4.6.3
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v4.6.3
4.6.3 4.6.2 4.6.1 4.6.0 4.5.1 4.5.0 4.4.2 4.4.1 4.4.0 4.3.3 4.3.2 4.3.1 4.3.0 4.2.3 4.2.2 4.2.1 1.0.3 1.0.4 1.0.5 1.0.6 1.1.0 1.1.1 1.1.10 1.1.11 1.1.12 1.1.13 1.1.14 1.1.15 1.1.16 1.1.17 1.1.18 1.1.19 1.1.2 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 1.1.8 1.1.9 1.10.0 1.10.1 1.10.2 1.10.3 1.10.4 1.11.0 1.11.1 1.11.2 1.2.0 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.4.0 1.4.1 1.4.2 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.7.0 1.7.1 1.7.2 1.8.0 1.8.1 1.8.2 1.8.3 1.8.4 1.8.5 1.9.0 1.9.1 1.9.2 1.9.3 1.9.4 1.9.5 2.0.0 2.0.1 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.10.0 2.10.1 2.11.0 2.11.1 2.11.2 2.11.3 2.11.4 2.12.0 2.13.0 2.14.0 2.14.1 2.15.0 2.15.1 2.16.0 2.16.1 2.16.2 2.16.3 2.17.0 2.17.1 2.17.2 2.18.0 2.19.0 2.19.2 2.19.3 2.19.4 2.2.0 2.2.1 2.20.0 2.20.1 2.20.2 2.20.3 2.20.4 2.20.5 2.20.6 2.21.0 2.22.0 2.22.1 2.23.0 2.24.0 2.25.0 2.25.1 2.25.2 2.26.0 2.27.0 2.27.1 2.28.0 2.29.0 2.29.1 2.29.2 2.29.3 2.29.4 2.3.0 2.3.1 2.30.0 2.31.0 2.31.1 2.31.2 2.31.3 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.40.0 2.40.1 2.5.0 2.5.1 2.5.2 2.6.0 2.6.1 2.6.2 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.8.2 2.8.3 2.8.4 2.9.0 3.0.0 3.0.0-RC1 3.0.0-RC2 3.0.0-beta1 3.0.0-beta2 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.10.0 3.10.1 3.11.0 3.12.0 3.13.0 3.13.1 3.13.2 3.13.3 3.13.4 3.14.0 3.15.0 3.15.1 3.15.2 3.15.3 3.15.4 3.15.5 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.16.6 3.16.7 3.16.8 3.17.0 3.17.1 3.17.2 3.17.3 3.17.4 3.17.5 3.17.6 3.18.0 3.19.0 3.19.1 3.19.2 3.2.0 3.2.1 3.2.2 3.20.0 3.20.1 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.4.3 3.5.0 3.5.1 3.5.2 3.5.3 3.6.0 3.6.1 3.6.2 3.7.0 3.7.1 3.7.2 3.7.3 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.9.0 4.0.0 4.0.1 4.0.2 4.0.3 trunk 4.1.0 0.2.19.1 4.1.1 1.0.0 4.2.0 1.0.1 1.0.2
surecart / app / src / Integrations / Bricks / Elements / Media.php
surecart / app / src / Integrations / Bricks / Elements Last commit date
BuyButton.php 4 months ago CartMenuIcon.php 6 months ago CollectionTag.php 1 year ago CollectionTags.php 1 year ago Media.php 5 days ago PriceChoiceTemplate.php 1 year ago PriceChooser.php 5 months ago PriceData.php 1 year ago Product.php 5 months ago ProductCard.php 10 months ago ProductContent.php 11 months ago ProductData.php 1 year ago ProductLineItemNote.php 10 months ago ProductQuickAddButton.php 10 months ago ProductReviewAverageRatingStars.php 5 months ago ProductReviewAverageRatingValue.php 5 months ago ProductReviewBreakdown.php 5 months ago ProductReviewContent.php 5 months ago ProductReviewList.php 2 months ago ProductReviewRating.php 5 months ago ProductReviewTotalRating.php 5 months ago ProductReviews.php 5 months ago Quantity.php 11 months ago SaleBadge.php 1 year ago SelectedPriceAdHocAmount.php 1 year ago VariantPill.php 7 months ago VariantPills.php 1 year ago
Media.php
242 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 * Media element.
13 */
14 class Media extends \Bricks\Element {
15 use ConvertsBlocks; // we have to use a trait since we can't extend the surecart class.
16
17 /**
18 * Element category.
19 *
20 * @var string
21 */
22 public $category = 'SureCart Elements';
23
24 /**
25 * Element name.
26 *
27 * @var string
28 */
29 public $name = 'surecart-product-media';
30
31 /**
32 * Element block name.
33 *
34 * @var string
35 */
36 public $block_name = 'surecart/product-media';
37
38 /**
39 * Element icon.
40 *
41 * @var string
42 */
43 public $icon = 'ti-layout-slider-alt';
44
45 /**
46 * Get element label.
47 *
48 * @return string
49 */
50 public function get_label() {
51 return esc_html__( 'Product media', 'surecart' );
52 }
53
54 /**
55 * Enqueue scripts and styles.
56 *
57 * @return void
58 */
59 public function enqueue_scripts() {
60 wp_enqueue_style( 'surecart-image-slider' );
61 }
62
63 /**
64 * Set controls.
65 *
66 * @return void
67 */
68 public function set_controls() {
69 $this->controls['desktop_gallery'] = [
70 'tab' => 'content',
71 'label' => esc_html__( 'Display Mode', 'surecart' ),
72 'type' => 'select',
73 'options' => [
74 'slider' => esc_html__( 'Slider View', 'surecart' ),
75 'gallery' => esc_html__( 'Gallery View', 'surecart' ),
76 ],
77 'inline' => true,
78 'fullAccess' => true,
79 'default' => 'slider',
80 ];
81
82 $this->controls['auto_height'] = [
83 'tab' => 'content',
84 'label' => esc_html__( 'Auto height', 'surecart' ),
85 'type' => 'checkbox',
86 'inline' => true,
87 'fullAccess' => true,
88 'default' => true,
89 'required' => [
90 [ 'desktop_gallery', '=', 'slider' ],
91 ],
92 ];
93
94 $this->controls['lightbox'] = [
95 'tab' => 'content',
96 'label' => esc_html__( 'Enlarge on click', 'surecart' ),
97 'type' => 'checkbox',
98 'inline' => true,
99 'fullAccess' => true,
100 'default' => true,
101 ];
102
103 $this->controls['height'] = [
104 'tab' => 'content',
105 'label' => esc_html__( 'Height', 'surecart' ),
106 'type' => 'number',
107 'units' => true,
108 'default' => '310px',
109 'placeholder' => '310px',
110 'required' => [
111 [ 'auto_height', '!=', true ],
112 [ 'desktop_gallery', '=', 'slider' ],
113 ],
114 'fullAccess' => true,
115 ];
116
117 $this->controls['max_image_width'] = [
118 'tab' => 'content',
119 'label' => esc_html__( 'Max image width', 'surecart' ),
120 'type' => 'number',
121 'units' => true,
122 'placeholder' => esc_html__( 'Unlimited', 'surecart' ),
123 ];
124
125 $this->controls['gallery_spacing'] = [
126 'tab' => 'content',
127 'label' => esc_html__( 'Gallery Spacing', 'surecart' ),
128 'type' => 'number',
129 'units' => true,
130 'default' => '1rem',
131 'placeholder' => '1rem',
132 'css' => [
133 [
134 'property' => 'gap',
135 'selector' => '&.sc-image-gallery .swiper-wrapper',
136 ],
137 [
138 'property' => 'margin-bottom',
139 'selector' => '&.sc-image-gallery .swiper-wrapper .swiper-slide',
140 ],
141 ],
142 'required' => [
143 [ 'desktop_gallery', '=', 'gallery' ],
144 ],
145 ];
146
147 $this->controls['thumbnails_per_page'] = [
148 'tab' => 'content',
149 'label' => esc_html__( 'Thumbs per page', 'surecart' ),
150 'type' => 'number',
151 'default' => 5,
152 'min' => 2,
153 'max' => 12,
154 'placeholder' => 5,
155 'required' => [
156 [ 'desktop_gallery', '=', 'slider' ],
157 ],
158 ];
159
160 $this->controls['show_thumbs'] = [
161 'tab' => 'content',
162 'label' => esc_html__( 'Show Thumbnails', 'surecart' ),
163 'type' => 'checkbox',
164 'inline' => true,
165 'fullAccess' => true,
166 'default' => true,
167 'required' => [
168 [ 'desktop_gallery', '=', 'slider' ],
169 ],
170 ];
171 }
172
173 /**
174 * Render element.
175 *
176 * @return void
177 */
178 public function render() {
179 $product = sc_get_product();
180 $settings = $this->settings;
181 $thumbnails_per_page = max( 2, min( 12, ! empty( $settings['thumbnails_per_page'] ) ? (int) $settings['thumbnails_per_page'] : 5 ) );
182 $desktop_gallery = ! empty( $settings['desktop_gallery'] ) ? $settings['desktop_gallery'] : 'slider';
183
184 if ( $this->is_admin_editor() ) {
185 if ( 'gallery' === $desktop_gallery ) {
186 $content = '<div class="sc-image-gallery"><div class="swiper swiper-initialized"><div class="swiper-wrapper">';
187 for ( $i = 0; $i < 3; $i++ ) {
188 $content .= '<div class="swiper-slide">';
189 $content .= '<img src="' . esc_url( trailingslashit( \SureCart::core()->assets()->getUrl() ) . 'images/placeholder.jpg' ) . '"';
190 $content .= ' style="' . ( ! empty( $this->settings['max_image_width'] ) ? 'max-width:' . esc_attr( $this->settings['max_image_width'] ) : '' ) . '"';
191 $content .= ' alt="' . esc_attr( get_the_title() ) . '" />';
192 $content .= '</div>';
193 }
194 $content .= '</div></div></div>';
195 $content .= '<div class="bricks-element-placeholder" data-type="info" draggable="false"><i class="ti-layout-slider-alt"></i><div class="placeholder-inner"><div class="placeholder-description">' . __( 'The accurate preview for this element is only available on frontend due to compatibility issues.', 'surecart' ) . '</div></div></div>';
196 } else {
197 $content = '<div class="sc-image-slider"><div class="swiper swiper-initialized"><div class="swiper-wrapper">';
198 $content .= '<div class="swiper-slide"><img src="' . esc_url( trailingslashit( \SureCart::core()->assets()->getUrl() ) . 'images/placeholder.jpg' ) . '"';
199 $content .= ' style="' . ( ! empty( $this->settings['max_image_width'] ) ? 'max-width:' . esc_attr( $this->settings['max_image_width'] ) : '' ) . '"';
200 $content .= ' alt="' . esc_attr( get_the_title() ) . '" /></div>';
201 $content .= '</div><div class="swiper-button-prev"></div><div class="swiper-button-next"></div></div>';
202
203 if ( ! empty( $this->settings['show_thumbs'] ) ) {
204 $content .= '<div class="sc-image-slider__thumbs"><div class="swiper swiper-initialized"><div class="swiper-wrapper sc-has-' . $thumbnails_per_page . '-thumbs">';
205 for ( $i = 0; $i < $thumbnails_per_page; $i++ ) {
206 $content .= '<div class="swiper-slide">';
207 $content .= '<img src="' . esc_url( trailingslashit( \SureCart::core()->assets()->getUrl() ) . 'images/placeholder.jpg' ) . '"';
208 $content .= ' alt="' . esc_attr( get_the_title() ) . '" />';
209 $content .= '</div>';
210 }
211 $content .= '</div></div></div>';
212 }
213 $content .= '</div>';
214 $content .= '<div class="bricks-element-placeholder" data-type="info" draggable="false"><i class="ti-layout-slider-alt"></i><div class="placeholder-inner"><div class="placeholder-description">' . __( 'The accurate preview for this element is only available on frontend due to compatibility issues.', 'surecart' ) . '</div></div></div>';
215 }
216
217 echo $this->preview( // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
218 $content,
219 '',
220 'figure'
221 );
222
223 return;
224 }
225
226 $auto_height = 'gallery' === $desktop_gallery ? true : ! empty( $settings['auto_height'] );
227 $height = ! $auto_height ? ( ! empty( $settings['height'] ) ? $settings['height'] : '310px' ) : '';
228
229 echo $this->html( // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
230 [
231 'auto_height' => $auto_height,
232 'height' => $height,
233 'lightbox' => (bool) ! empty( $this->settings['lightbox'] ),
234 'width' => esc_html( $this->settings['max_image_width'] ?? null ),
235 'thumbnails_per_page' => $thumbnails_per_page,
236 'desktop_gallery' => 'gallery' === $desktop_gallery,
237 'show_thumbnails' => (bool) ! empty( $this->settings['show_thumbs'] ),
238 ]
239 );
240 }
241 }
242