PluginProbe
ShopBuilder – WooCommerce Builder For Elementor / 2.1.12
ShopBuilder – WooCommerce Builder For Elementor v2.1.12
3.4.2 3.4.1 3.4.0 2.0.1 2.0.2 2.0.3 2.1.0 2.1.1 2.1.10 2.1.11 2.1.12 2.1.13 2.1.14 2.1.15 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.1.9 2.2.0 2.2.1 2.2.2 All 63 releases
shopbuilder / app / Controllers / Builder / BuilderCpt.php

BuilderCpt.php in ShopBuilder – WooCommerce Builder For Elementor 2.1.12, at app/Controllers/Builder/BuilderCpt.php

363 lines 12.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Builder Custom post type
4 *
5 * @package RadiusTheme\SB
6 */
7
8 namespace RadiusTheme\SB\Controllers\Builder;
9
10 defined( 'ABSPATH' ) || exit();
11
12 use WP_Query;
13 use RadiusTheme\SB\Helpers\Fns;
14 use RadiusTheme\SB\Helpers\BuilderFns;
15 use RadiusTheme\SB\Traits\SingletonTrait;
16
17 /**
18 * Builder Custom post type
19 */
20 class BuilderCpt {
21 /**
22 * Singleton
23 */
24 use SingletonTrait;
25
26 /**
27 * Final constructor.
28 */
29 private function __construct() {
30 add_action( 'init', [ $this, 'template_builder_post_type' ] );
31 add_filter( 'post_row_actions', [ $this, 'filter_post_row_actions' ], 11, 1 );
32 // Admin column.
33 add_filter( 'manage_edit-' . BuilderFns::$post_type_tb . '_columns', [ $this, 'add_new_columns' ] );
34 add_action( 'manage_' . BuilderFns::$post_type_tb . '_posts_custom_column', [ $this, 'custom_columns' ], 10, 2 );
35 add_filter( 'manage_edit-' . BuilderFns::$post_type_tb . '_sortable_columns', [ $this, 'register_sortable_columns' ] );
36 add_action( 'pre_get_posts', [ $this, 'sortable_columns_query' ] );
37 add_filter( 'template_include', [ $this, 'builder_template' ], 99 );
38
39 add_filter( 'parse_query', [ $this, 'query_filter' ] );
40 // add filter for search.
41 add_action( 'restrict_manage_posts', [ $this, 'add_filter' ] );
42
43 add_action( 'in_admin_header', [ $this, 'remove_all_notices' ], 1000 );
44
45 }
46
47
48 /**
49 * Public function add_filter.
50 * Added search filter for type of template
51 *
52 * @since 1.0.0
53 */
54 public function add_filter() {
55
56 global $typenow;
57
58 if ( BuilderFns::$post_type_tb != $typenow ) {
59 return;
60 }
61 // phpcs:ignore WordPress.Security.NonceVerification.Recommended
62 $selected = isset( $_GET['type'] ) ? sanitize_key( $_GET['type'] ) : '';
63 $builder_page_types = BuilderFns::builder_page_types();
64 ?>
65 <select name="template_type" id="type">
66 <option value="all" <?php selected( 'all', $selected ); ?>><?php esc_html_e( 'Template Type ', 'shopbuilder' ); ?></option>
67 <?php foreach ( $builder_page_types as $key => $value ) { ?>
68 <option value="<?php echo esc_attr( $key ); ?>" <?php selected( $key, $selected ); ?>><?php echo esc_html( $value ); ?></option>
69 <?php } ?>
70 </select>
71 <?php
72
73 }
74
75 /**
76 * Post type function
77 *
78 * @return void
79 */
80 public function template_builder_post_type() {
81 /**
82 * Template Builder Post type
83 */
84 $tb_labels = [
85 'name' => esc_html_x( 'WooCommerce Page Builder', 'Post Type General Name', 'shopbuilder' ),
86 'singular_name' => esc_html_x( 'Templates Builder', 'Post Type Singular Name', 'shopbuilder' ),
87 'menu_name' => esc_html__( 'Templates Builder', 'shopbuilder' ),
88 'name_admin_bar' => esc_html__( 'Templates Builder', 'shopbuilder' ),
89 'archives' => esc_html__( 'WC Page Archives', 'shopbuilder' ),
90 'attributes' => esc_html__( 'Page Attributes', 'shopbuilder' ),
91 'parent_item_colon' => esc_html__( 'Parent Item:', 'shopbuilder' ),
92 'all_items' => esc_html__( 'Templates Builder', 'shopbuilder' ),
93 'add_new_item' => esc_html__( 'Add New Page', 'shopbuilder' ),
94 'add_new' => esc_html__( 'Add New', 'shopbuilder' ),
95 'new_item' => esc_html__( 'New Page', 'shopbuilder' ),
96 'edit_item' => esc_html__( 'Edit Page', 'shopbuilder' ),
97 'update_item' => esc_html__( 'Update Page', 'shopbuilder' ),
98 'view_item' => esc_html__( 'View Page', 'shopbuilder' ),
99 'view_items' => esc_html__( 'View Pages', 'shopbuilder' ),
100 'search_items' => esc_html__( 'Search Pages', 'shopbuilder' ),
101 'not_found' => esc_html__( 'Not found', 'shopbuilder' ),
102 'not_found_in_trash' => esc_html__( 'Not found in Trash', 'shopbuilder' ),
103 'featured_image' => esc_html__( 'Featured Image', 'shopbuilder' ),
104 'set_featured_image' => esc_html__( 'Set featured image', 'shopbuilder' ),
105 'remove_featured_image' => esc_html__( 'Remove featured image', 'shopbuilder' ),
106 'use_featured_image' => esc_html__( 'Use as featured image', 'shopbuilder' ),
107 'insert_into_item' => esc_html__( 'Insert into page', 'shopbuilder' ),
108 'uploaded_to_this_item' => esc_html__( 'Uploaded to this page', 'shopbuilder' ),
109 'items_list' => esc_html__( 'Pages list', 'shopbuilder' ),
110 'items_list_navigation' => esc_html__( 'Pages list navigation', 'shopbuilder' ),
111 'filter_items_list' => esc_html__( 'Filter from list', 'shopbuilder' ),
112 ];
113
114 $tb_args = [
115 'label' => esc_html__( 'Templates Builder', 'shopbuilder' ),
116 'description' => esc_html__( 'Shopbuilder Template', 'shopbuilder' ),
117 'labels' => $tb_labels,
118 'supports' => [ 'title', 'editor', 'elementor', 'author', 'permalink', 'comments' ],
119 'hierarchical' => false,
120 'public' => true,
121 'show_ui' => true,
122 'show_in_menu' => 'rtsb',
123 'show_in_admin_bar' => false,
124 'show_in_nav_menus' => true,
125 'can_export' => true,
126 'has_archive' => false,
127 'rewrite' => [
128 'slug' => 'rtsb-template',
129 'pages' => false,
130 'with_front' => true,
131 'feeds' => false,
132 ],
133 'query_var' => true,
134 'publicly_queryable' => apply_filters( 'rtsb/builder/args/publicly_queryable', true ),
135 'capability_type' => 'product',
136 'show_in_rest' => true,
137 'rest_base' => BuilderFns::$post_type_tb,
138 ];
139
140 $tb_args = apply_filters( 'rtsb/builder/template_args', $tb_args );
141
142 register_post_type( BuilderFns::$post_type_tb, $tb_args );
143
144 // Flash rewrite rules.
145 $this->flush_rewrite_rules();
146
147 }
148
149 /**
150 * Flush rewrite
151 *
152 * @return void
153 */
154 public function flush_rewrite_rules() {
155 if ( get_option( 'shopbuilder_permalinks_flushed', 'no' ) !== 'yes' ) {
156 flush_rewrite_rules();
157 update_option( 'shopbuilder_permalinks_flushed', 'yes' );
158 }
159 }
160
161 /**
162 * Add new columns to the post table
163 *
164 * @param array $columns - Current columns on the list post.
165 */
166 public function add_new_columns( $columns ) {
167 $column_meta = [
168 'type' => esc_html__( 'Template Type', 'shopbuilder' ),
169 'edit_with' => esc_html__( 'Editor Type', 'shopbuilder' ),
170 'set_default' => esc_html__( 'Set as Active', 'shopbuilder' ),
171 ];
172
173 unset( $columns['comments'] );
174
175 $columns = array_merge(
176 array_slice( $columns, 0, 2 ),
177 $column_meta,
178 array_slice( $columns, 2 )
179 );
180
181 return $columns;
182 }
183
184 /**
185 * Display data in new columns
186 *
187 * @param string $column table column.
188 * @param string $post_id Post id.
189 *
190 * @return void
191 */
192 public function custom_columns( $column, $post_id ) {
193 $post_id = absint( $post_id );
194 $types = BuilderFns::builder_page_types();
195 $type = BuilderFns::builder_type( $post_id ) ? BuilderFns::builder_type( $post_id ) : array_key_first( $types );
196
197 switch ( $column ) {
198 case 'type':
199 $the_type = ! empty( $types[ $type ] ) ? esc_html( ucwords( $types[ $type ] ) ) : '';
200 Fns::print_html( apply_filters( 'rtsb/columns/template/types/text', $the_type, $type, $post_id ) );
201 break;
202 case 'edit_with':
203 $edit_by = Fns::page_edit_with( $post_id );
204 echo esc_html( ucfirst( $edit_by ) );
205 break;
206 case 'set_default':
207 $is_set_default = absint( BuilderFns::builder_page_id_by_type( $type ) );
208 $is_published = 'publish' === get_post_status( $post_id );
209 $page_type_for = $type;
210 if ( 'product' === $type ) {
211 $product_ids = apply_filters( 'rtsb/product/page/builder/selected/products', [], $post_id );
212 $set_default = BuilderFns::get_specific_product_as_default( $post_id );
213 if ( ! empty( $product_ids ) && $set_default ) {
214 $is_set_default = $post_id;
215 $page_type_for = 'template-' . $post_id . '-specific-products';
216 }
217 } elseif ( 'archive' === $type ) {
218 $categories_name = apply_filters( 'rtsb/archive/page/builder/selected/categories', [], $post_id );
219 $set_default = BuilderFns::get_specific_category_as_default( $post_id );
220 if ( ! empty( $categories_name ) && $set_default ) {
221 $is_set_default = $post_id;
222 $page_type_for = 'template-' . $post_id . '-specific-category';
223 }
224 }
225 ?>
226 <span class="rtsb-switch-wrapper page-type-<?php echo esc_attr( $page_type_for ); ?>" <?php echo ! $is_published ? 'style="pointer-events: none;"' : null; ?> title="<?php esc_html_e( 'Only publish post can set default ', 'shopbuilder' ); ?>">
227 <label class="rtsb-switch">
228 <?php do_action( 'rtsb/set/default/column/extra/field', $post_id, $type, $is_set_default, $is_published ); ?>
229 <div class="rtsb_template_type" data-template_type="<?php echo esc_attr( $type ); ?>" style='display:none;'></div>
230 <input disabled="disabled" value="<?php echo absint( $post_id ); ?>" class="rtsb_set_default" name="set_default" type="checkbox" <?php echo esc_attr( $post_id === $is_set_default ? 'checked' : '' ); ?> >
231 <span class="rtsb-slider rtsb-round ">
232 <span class="rtsb-loader"></span>
233 </span>
234 </label>
235 </span>
236 <?php
237 break;
238 }
239 }
240
241 /**
242 * Register sortable columns
243 *
244 * @param [type] $columns column list.
245 *
246 * @return array
247 */
248 public function register_sortable_columns( $columns ) {
249 $columns['type'] = 'type';
250
251 return $columns;
252 }
253
254 /**
255 * Meta sortable function.
256 *
257 * @param object $query query object.
258 *
259 * @return void
260 */
261 public function sortable_columns_query( $query ) {
262 if ( ! is_admin() || ! $this->is_current_screen() ) {
263 return;
264 }
265 $orderby = $query->get( 'orderby' );
266 if ( 'type' === $orderby ) {
267 $query->set( 'meta_key', BuilderFns::template_type_meta_key() );
268 $query->set( 'orderby', 'meta_value' );
269 }
270 }
271
272 /**
273 * Check template screen
274 *
275 * @return boolean
276 */
277 public function is_current_screen() {
278 global $pagenow, $typenow;
279
280 return 'edit.php' === $pagenow && BuilderFns::$post_type_tb === $typenow;
281 }
282
283 /**
284 * Manage Template filter by template type
285 *
286 * @param WP_Query $query WordPress main query.
287 *
288 * @return void
289 */
290 public function query_filter( WP_Query $query ) {
291
292 if ( ! is_admin() || ! $this->is_current_screen() || ! empty( $query->query_vars['meta_key'] ) ) {
293 return;
294 }
295 // phpcs:ignore WordPress.Security.NonceVerification.Recommended
296 $type = isset( $_GET['template_type'] ) ? sanitize_key( $_GET['template_type'] ) : '';
297
298 if ( '' != $type && 'all' != $type ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
299 $query->query_vars['meta_key'] = BuilderFns::template_type_meta_key(); // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_key
300 $query->query_vars['meta_value'] = $type; // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_value
301 $query->query_vars['meta_compare'] = '=';
302 }
303 }
304
305 /**
306 * Load Template.
307 *
308 * @param string $template Template File.
309 *
310 * @return string
311 */
312 public function builder_template( $template ) {
313 $builder_page_id = BuilderFns::is_builder_preview() ? get_the_ID() : BuilderFns::builder_page_id_by_page();
314 if ( $builder_page_id ) {
315 $page_template = get_post_meta( $builder_page_id, '_wp_page_template', true );
316 $new_template = RTSB_ABSPATH . 'page-templates/builder-template.php';
317 if ( 'elementor_canvas' === $page_template ) {
318 $new_template = RTSB_ABSPATH . 'page-templates/elementor-canvas.php';
319 } elseif ( 'elementor_header_footer' === $page_template ) {
320 $new_template = RTSB_ABSPATH . 'page-templates/builder-template.php';
321 }
322 if ( file_exists( $new_template ) ) {
323 $template = $new_template;
324 }
325 }
326
327 return $template;
328 }
329
330 /**
331 * Add/Remove edit link in dashboard.
332 *
333 * Add or remove an edit link to the post/page action links on the post/pages list table.
334 *
335 * Fired by `post_row_actions` and `page_row_actions` filters.
336 *
337 * @access public
338 *
339 * @param array $actions An array of row action links.
340 *
341 * @return array An updated array of row action links.
342 */
343 public function filter_post_row_actions( $actions ) {
344 if ( $this->is_current_screen() ) {
345 // unset( $actions['view'] );
346 unset( $actions['inline hide-if-no-js'] );
347 }
348
349 return $actions;
350 }
351
352 /**
353 * Remove admin notices
354 */
355 public function remove_all_notices() {
356 $screen = get_current_screen();
357 if ( 'edit-rtsb_builder' === $screen->id ) {
358 remove_all_actions( 'admin_notices' );
359 remove_all_actions( 'all_admin_notices' );
360 }
361 }
362 }
363