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 / Bricks / BricksElementsService.php
surecart / app / src / Integrations / Bricks Last commit date
Concerns 4 months ago Elements 2 months ago scripts 1 year ago BricksDynamicDataService.php 4 months ago BricksElementsService.php 7 months ago BricksServiceProvider.php 1 year ago BricksTemplateService.php 8 months ago
BricksElementsService.php
191 lines
1 <?php
2
3 namespace SureCart\Integrations\Bricks;
4
5 /**
6 * This class handles bricks elements functionality.
7 */
8 class BricksElementsService {
9 /**
10 * Bootstrap the service.
11 *
12 * @return void
13 */
14 public function bootstrap() {
15 // disable core block assets if we are in the bricks editor.
16 if ( isset( $_GET['bricks'] ) && 'run' === $_GET['bricks'] ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
17 add_filter( 'should_load_separate_core_block_assets', '__return_false' );
18 }
19
20 // Register the elements.
21 add_action( 'init', [ $this, 'registerElements' ], 11 );
22
23 // Add template types.
24 add_filter( 'bricks/setup/control_options', [ $this, 'addTemplateTypes' ], 11 );
25
26 // handle the default active template for our post type.
27 add_filter( 'bricks/active_templates', [ $this, 'setDefaultProductTemplate' ], 10, 3 );
28
29 // handle the default active template for our collection.
30 add_filter( 'bricks/active_templates', [ $this, 'setDefaultCollectionTemplate' ], 10, 3 );
31
32 // Remove product page query args for editor.
33 add_filter( 'surecart_product_page_query_args', [ $this, 'removeQueryArgsForEditor' ] );
34 }
35
36 /**
37 * Register the elements.
38 *
39 * @return void
40 */
41 public function registerElements() {
42 if ( ! class_exists( '\Bricks\Elements' ) ) {
43 return;
44 }
45
46 $elements = glob( __DIR__ . '/Elements/**' );
47 foreach ( $elements as $file ) {
48 if ( basename( $file ) === 'Product.php' ) {
49 \Bricks\Elements::register_element( $file );
50 }
51 }
52
53 foreach ( $elements as $file ) {
54 if ( basename( $file ) === 'ProductCard.php' ) {
55 \Bricks\Elements::register_element( $file );
56 }
57 }
58
59 foreach ( $elements as $file ) {
60 if ( basename( $file ) === 'Product.php' ) {
61 continue;
62 }
63 \Bricks\Elements::register_element( $file );
64 }
65 }
66
67 /**
68 * Set the default template for the post type.
69 * This will only apply if the post has not been edited directly by bricks.
70 *
71 * @param array $active_templates Active templates.
72 * @param int $post_id Post ID.
73 * @param string $content_type Content type.
74 *
75 * @return self
76 */
77 public function setDefaultProductTemplate( $active_templates, $post_id, $content_type ) {
78 // Only run my logic on the frontend.
79 if ( ! bricks_is_frontend() ) {
80 return $active_templates;
81 }
82
83 // Return if single post $content_type is not 'content'.
84 if ( 'content' !== $content_type ) {
85 return $active_templates;
86 }
87
88 // Return: Current post type is not our post type.
89 $post_type = get_post_type( $post_id );
90 if ( 'sc_product' !== $post_type ) {
91 return $active_templates;
92 }
93
94 $sc_product_templates = \Bricks\Templates::get_templates_by_type( 'sc_product' );
95
96 $template_ids = [
97 'body' => $sc_product_templates,
98 'sc_product' => $sc_product_templates,
99 ];
100
101 $template_id = \Bricks\Database::find_template_id( $template_ids, 'content', 'sc_product', get_the_ID(), 'single' );
102
103 $active_templates['content'] = $template_id;
104
105 return $active_templates;
106 }
107
108 /**
109 * Set the default template for the post type.
110 * This will only apply if the post has not been edited directly by bricks.
111 *
112 * @param array $active_templates Active templates.
113 * @param int $post_id Post ID.
114 * @param string $content_type Content type.
115 *
116 * @return self
117 */
118 public function setDefaultCollectionTemplate( $active_templates, $post_id, $content_type ) {
119 // Only run my logic on the frontend.
120 if ( ! bricks_is_frontend() ) {
121 return $active_templates;
122 }
123
124 // Return if single post $content_type is not 'content'.
125 if ( 'archive' !== $content_type ) {
126 return $active_templates;
127 }
128
129 if ( ! is_tax( 'sc_collection' ) ) {
130 return $active_templates;
131 }
132
133 if ( ! empty( $active_templates['archive'] ) ) {
134 return $active_templates;
135 }
136
137 $collection_templates = \Bricks\Templates::get_templates_by_type( 'sc_collection' );
138
139 $template_ids = [
140 'body' => $collection_templates,
141 'sc_collection' => $collection_templates,
142 ];
143
144 $template_id = \Bricks\Database::find_template_id( $template_ids, 'content', 'sc_collection', get_the_ID(), 'archive' );
145
146 $active_templates['archive'] = $template_id;
147
148 // Set the post content with the template's content.
149 $active_templates['content'] = $template_id;
150
151 return $active_templates;
152 }
153
154 /**
155 * Add template types to control options
156 *
157 * @param array $control_options Control options.
158 *
159 * @return array
160 */
161 public function addTemplateTypes( $control_options ) {
162 $control_options['templateTypes']['sc_product'] = esc_html__( 'SureCart - Single Product', 'surecart' );
163 $control_options['templateTypes']['sc_collection'] = esc_html__( 'SureCart - Collection Archive', 'surecart' );
164
165 return $control_options;
166 }
167
168 /**
169 * Remove query args for editor.
170 *
171 * @param array $query_args Query arguments.
172 */
173 public function removeQueryArgsForEditor( array $query_args ): array {
174 // Return if bricks is not loaded.
175 if ( ! function_exists( 'bricks_is_frontend' ) || ! function_exists( 'bricks_is_builder_call' ) ) {
176 return $query_args;
177 }
178
179 // Return if not frontend or builder call.
180 if ( bricks_is_frontend() && ! bricks_is_builder_call() ) {
181 return $query_args;
182 }
183
184 if ( isset( $query_args['post__in'] ) ) {
185 unset( $query_args['post__in'] );
186 }
187
188 return $query_args;
189 }
190 }
191