PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 4.5.0
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v4.5.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 / Elementor / ElementorTemplatesService.php
surecart / app / src / Integrations / Elementor Last commit date
Conditions 1 year ago Documents 1 year ago DynamicTags 4 months ago Widgets 2 months ago assets 4 months ago ElementorBlockAdapterService.php 4 months ago ElementorCoreBlockStylesService.php 1 year ago ElementorDocumentsService.php 1 year ago ElementorDynamicTagsService.php 1 year ago ElementorEditorService.php 1 year ago ElementorFseScriptLoaderService.php 1 year ago ElementorServiceProvider.php 8 months ago ElementorShortcodeService.php 1 year ago ElementorTemplatesService.php 4 months ago ElementorWidgetsService.php 8 months ago
ElementorTemplatesService.php
222 lines
1 <?php
2
3 namespace SureCart\Integrations\Elementor;
4
5 /**
6 * Class to handle elementor templates.
7 */
8 class ElementorTemplatesService {
9 /**
10 * Templates directory path.
11 *
12 * @var string
13 */
14 private $templates_dir;
15
16 /**
17 * Constructor.
18 */
19 public function __construct() {
20 $this->templates_dir = SURECART_PLUGIN_DIR . '/templates/elementor/';
21 }
22
23 /**
24 * Get template configuration data by filename.
25 *
26 * @param string $filename Template filename without extension.
27 * @return array Template configuration including name, image, and any other properties.
28 */
29 private function get_template_config( $filename ): array {
30 $templates_config = [
31 'surecart-single-product-left' => [
32 'name' => __( 'Product Form (Left)', 'surecart' ),
33 'image' => 'single-product-template-left.png',
34 'type' => 'product-form',
35 'widget_name' => 'surecart-product',
36 'priority' => 10,
37 'hidden' => false,
38 ],
39 'surecart-single-product-right' => [
40 'name' => __( 'Product Form (Right)', 'surecart' ),
41 'image' => 'single-product-template-right.png',
42 'type' => 'product-form',
43 'widget_name' => '', // No widget will be registered for this template.
44 'priority' => 20,
45 'hidden' => false,
46 ],
47 'surecart-product-card' => [
48 'name' => __( 'Product Card', 'surecart' ),
49 'image' => 'product-card-template.png',
50 'type' => 'product-card',
51 'widget_name' => 'surecart-product-card',
52 'priority' => 30,
53 'hidden' => false,
54 ],
55 'surecart-product-pricing' => [
56 'name' => __( 'Product Pricing', 'surecart' ),
57 'image' => '',
58 'type' => 'others',
59 'widget_name' => 'surecart-product-pricing',
60 'priority' => 40,
61 'hidden' => true,
62 ],
63 'surecart-product-reviews' => [
64 'name' => __( 'Product Reviews', 'surecart' ),
65 'image' => '',
66 'type' => 'others',
67 'widget_name' => 'surecart-product-reviews',
68 'priority' => 50,
69 'hidden' => true,
70 ],
71 'surecart-product-rating' => [
72 'name' => __( 'Product Rating', 'surecart' ),
73 'image' => '',
74 'type' => 'others',
75 'widget_name' => 'surecart-product-rating',
76 'priority' => 60,
77 'hidden' => true,
78 ],
79 ];
80
81 // Get config or create default.
82 $config = $templates_config[ $filename ] ?? [
83 'name' => ucwords( str_replace( [ 'surecart-', '-' ], [ '', ' ' ], $filename ) ),
84 'image' => '',
85 'type' => 'others',
86 'priority' => 999,
87 'hidden' => false,
88 ];
89
90 // Process the image URL.
91 $config['image'] = esc_url_raw(
92 trailingslashit( \SureCart::core()->assets()->getUrl() ) .
93 'images/elementor/' . $config['image']
94 );
95
96 return $config;
97 }
98
99 /**
100 * Get all templates from the templates directory.
101 *
102 * @return array
103 */
104 public function get_templates(): array {
105 $templates = [];
106 $files = glob( $this->templates_dir . '*.json' );
107
108 if ( ! $files ) {
109 return $templates;
110 }
111
112 foreach ( $files as $file ) {
113 $filename = basename( $file, '.json' );
114
115 // Skip files that aren't templates.
116 if ( strpos( $filename, 'surecart-' ) !== 0 ) {
117 continue;
118 }
119
120 // Get template key.
121 $template_key = $filename;
122
123 // Get template configuration.
124 $config = $this->get_template_config( $filename );
125
126 // Get the template content.
127 $template_content = $this->get_template_from_file( $filename . '.json' );
128
129 if ( ! empty( $template_content ) ) {
130 $templates[ $template_key ] = array_merge(
131 $config,
132 [ 'content' => $template_content ]
133 );
134 }
135 }
136
137 $templates = $this->sort_templates_by_priority( $templates );
138
139 return apply_filters( 'sc_elementor_templates', $templates );
140 }
141
142 /**
143 * Sort templates by priority.
144 *
145 * @param array $templates The templates to sort.
146 * @return array Sorted templates.
147 */
148 private function sort_templates_by_priority( array $templates ): array {
149 uasort(
150 $templates,
151 function ( $a, $b ) {
152 return ( $a['priority'] ?? 999 ) <=> ( $b['priority'] ?? 999 );
153 }
154 );
155
156 return $templates;
157 }
158
159 /**
160 * Get Elementor template from file.
161 *
162 * @param string $file_name The file name.
163 *
164 * @return array
165 */
166 public function get_template_from_file( string $file_name ) {
167 try {
168 $template_path = $this->templates_dir . $file_name;
169 $template_content = file_get_contents( $template_path ); // phpcs:ignore
170
171 return isset( $template_content ) ? json_decode( $template_content, true ) : [];
172 } catch ( \Throwable $th ) {
173 error_log( 'Error while reading the template file: ' . $th->getMessage() );
174 return [];
175 }
176 }
177
178 /**
179 * Check if the current page/template is rendered by Elementor and contains SureCart product template.
180 *
181 * @return bool
182 */
183 public function isRenderedWithElementor(): bool {
184 if ( ! class_exists( 'Elementor\Plugin' ) ) {
185 return false;
186 }
187
188 // If has custom page template, means its rendering from SureCart template, not with Elementor.
189 if ( ! empty( get_post_meta( get_the_ID(), '_wp_page_template', true ) ) ) {
190 return false;
191 }
192
193 return $this->hasActiveSureCartElementorTemplate();
194 }
195
196 /**
197 * Check if surecart-product Elementor template is active.
198 *
199 * @return bool
200 */
201 public function hasActiveSureCartElementorTemplate(): bool {
202 $templates = get_posts(
203 [
204 'post_type' => 'elementor_library',
205 'meta_query' => [
206 [
207 'key' => '_elementor_template_type',
208 'value' => 'surecart-product',
209 ],
210 [
211 'key' => '_elementor_edit_mode',
212 'value' => 'builder',
213 ],
214 ],
215 'posts_per_page' => 1,
216 ]
217 );
218
219 return ! empty( $templates );
220 }
221 }
222