PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 3.0.0-beta1
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v3.0.0-beta1
4.7.0 4.6.6 4.6.5 4.6.4 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 / BlockLibrary / ProductSelectedPriceMigrationService.php
surecart / app / src / BlockLibrary Last commit date
BlockAnchorSupportService.php 2 years ago BlockPatternsService.php 2 years ago BlockService.php 2 years ago BlockServiceProvider.php 2 years ago BlockStylesService.php 2 years ago BlockValidationService.php 2 years ago CartMenuIconMigrationService.php 2 years ago CartMigrationService.php 2 years ago FormModeSwitcherService.php 2 years ago ProductCollectionBadgesMigrationService.php 2 years ago ProductListMigrationService.php 2 years ago ProductListService.php 2 years ago ProductPriceChoicesMigrationService.php 2 years ago ProductSelectedPriceMigrationService.php 2 years ago ProductVariantsMigrationService.php 2 years ago URLParamService.php 2 years ago
ProductSelectedPriceMigrationService.php
223 lines
1 <?php
2
3 namespace SureCart\BlockLibrary;
4
5 /**
6 * Provide the migration service for the product price block.
7 */
8 class ProductSelectedPriceMigrationService {
9 /**
10 * Attributes
11 *
12 * @var array
13 */
14 public array $attributes = array();
15
16 /**
17 * Block.
18 *
19 * @var object
20 */
21 public ?object $block = null;
22
23 /**
24 * Block HTML.
25 *
26 * @var string
27 */
28 public string $block_html = '';
29
30 /**
31 * Constructor
32 *
33 * @param array $attributes Attributes.
34 * @param object $block Block.
35 */
36 public function __construct( $attributes = array(), $block = null ) {
37 $this->attributes = $attributes;
38 $this->block = $block;
39 }
40
41 /**
42 * Get content alignment
43 *
44 * @return string
45 */
46 public function getContentAlignment() {
47 return $this->attributes['alignment'] ?? 'left';
48 }
49
50 /**
51 * Render the sales badge.
52 *
53 * @return void
54 */
55 public function renderSalesBadge() {
56 $badge_attributes = array(
57 'text' => $this->attributes['sale_text'] ?? __( 'Sale', 'surecart' ),
58 'style' => array(
59 'border' => array(
60 'radius' => '15px',
61 ),
62 'typography' => array(
63 'fontSize' => '12px',
64 ),
65 'layout' => array(
66 'selfStretch' => 'fit',
67 'flexSize' => null,
68 ),
69 ),
70 );
71
72 $this->block_html .= '<!-- wp:surecart/product-sale-badge ' . wp_json_encode( $badge_attributes ) . ' /-->';
73 }
74
75 /**
76 * Render the price scratch amount, selected price and sales badge.
77 *
78 * @return void
79 */
80 public function renderAmountLine() {
81 $scratch_block_attributes = array_merge(
82 $this->attributes,
83 array(
84 'style' => array(
85 'typography' => array(
86 'textDecoration' => 'line-through',
87 'fontSize' => '24px',
88 'lineHeight' => '1.4',
89 ),
90 'color' => array(
91 'text' => $attributes['textColor'] ?? '#8a8a8a',
92 ),
93 ),
94 )
95 );
96 $amount_block_attributes = array_merge(
97 $this->attributes,
98 array(
99 'style' => array(
100 'typography' => array(
101 'fontSize' => '24px',
102 'lineHeight' => '1.4',
103 ),
104 'color' => array(
105 'text' => $attributes['textColor'] ?? '#8a8a8a',
106 ),
107 ),
108 )
109 );
110
111 $interval_block_attributes = array_merge(
112 $this->attributes,
113 array(
114 'style' => array(
115 'typography' => array(
116 'fontSize' => '18px',
117 'lineHeight' => '1.8',
118 ),
119 'color' => array(
120 'text' => $attributes['textColor'] ?? '#8a8a8a',
121 ),
122 ),
123 )
124 );
125
126 $this->block_html .= '<!-- wp:group {"style":{"spacing":{"blockGap":"0.5em"}},"layout":{"type":"flex","flexWrap":"nowrap","justifyContent":"' . $this->getContentAlignment() . '","verticalAlignment":"bottom"}} -->';
127 $this->block_html .= '<div class="wp-block-group">';
128 $this->block_html .= '<!-- wp:surecart/product-selected-price-scratch-amount ' . wp_json_encode( $scratch_block_attributes ) . ' /-->';
129 $this->block_html .= '<!-- wp:surecart/product-selected-price-amount ' . wp_json_encode( $amount_block_attributes ) . ' /-->';
130 $this->block_html .= '<!-- wp:surecart/product-selected-price-interval ' . wp_json_encode( $interval_block_attributes ) . ' /-->';
131
132 $this->renderSalesBadge();
133 $this->block_html .= '</div>';
134 $this->block_html .= '<!-- /wp:group -->';
135 }
136
137 /**
138 * Render selected price trial and fees.
139 *
140 * @return void
141 */
142 public function renderSelectedPriceTrialAndFees() {
143 $child_block_attributes = array_merge(
144 $this->attributes,
145 array(
146 'style' => array(
147 'color' => array(
148 'text' => $attributes['textColor'] ?? '#8a8a8a',
149 ),
150 'elements' => array(
151 'link' => array(
152 'color' => array(
153 'text' => $attributes['textColor'] ?? '#8a8a8a',
154 ),
155 ),
156 ),
157 ),
158 )
159 );
160
161 $this->block_html .= '<!-- wp:group {"style":{"spacing":{"blockGap":"0.5em"}},"layout":{"type":"flex","flexWrap":"wrap","justifyContent":"' . $this->getContentAlignment() . '"}} -->';
162 $this->block_html .= '<div class="wp-block-group" >';
163 $this->block_html .= '<!-- wp:surecart/product-selected-price-trial ' . wp_json_encode( $child_block_attributes ) . ' /-->';
164 $this->block_html .= '<!-- wp:surecart/product-selected-price-fees ' . wp_json_encode( $child_block_attributes ) . ' /-->';
165 $this->block_html .= '</div>';
166 $this->block_html .= '<!-- /wp:group -->';
167 }
168
169 /**
170 * Render the price.
171 *
172 * @return void
173 */
174 public function renderPrice() {
175 $group_attributes = array(
176 'style' => array(
177 'spacing' => $this->attributes['style']['spacing'] ?? array(
178 'blockGap' => '0px',
179 ),
180 ),
181 );
182
183 if ( ! empty( $this->attributes['backgroundColor'] ) ) {
184 $group_attributes['backgroundColor'] = $this->attributes['backgroundColor'];
185 }
186
187 if ( ! empty( $this->attributes['style']['color']['background'] ) ) {
188 $group_attributes['style']['color']['background'] = $this->attributes['style']['color']['background'];
189 }
190
191 $group_block = parse_blocks( '<!-- wp:group ' . wp_json_encode( $group_attributes ) . ' -->' ) [0] ?? null;
192 $group_styles = sc_get_block_styles( true, $group_block );
193 $group_classnames = $group_styles['classnames'] ?? '';
194 $group_css = $group_styles['css'] ?? '';
195
196 $this->block_html .= '<!-- wp:group ' . wp_json_encode( $group_attributes ) . ' -->';
197 $this->block_html .= '<div class="wp-block-group ' . $group_classnames . '" style="' . $group_css . '">';
198 $this->renderAmountLine();
199 $this->renderSelectedPriceTrialAndFees();
200 $this->block_html .= '</div>';
201 $this->block_html .= '<!-- /wp:group -->';
202 }
203
204 /**
205 * Render blocks.
206 *
207 * @return string
208 */
209 public function doBlocks() {
210 return do_blocks( $this->block_html );
211 }
212
213 /**
214 * Render the new price.
215 *
216 * @return string
217 */
218 public function render() {
219 $this->renderPrice();
220 return $this->doBlocks();
221 }
222 }
223