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