PluginProbe
ShopBuilder – WooCommerce Builder For Elementor / 2.0.2
ShopBuilder – WooCommerce Builder For Elementor v2.0.2
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.0.2, at app/Controllers/Builder/BuilderCpt.php

361 lines 12.0 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 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 $post_id = absint( $post_id );
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 $page_type_for = $type;
209 if ( 'product' === $type ) {
210 $product_ids = apply_filters( 'rtsb/product/page/builder/selected/products', [], $post_id );
211 $set_default = BuilderFns::get_specific_product_as_default( $post_id );
212 if ( ! empty( $product_ids ) && $set_default ) {
213 $is_set_default = $post_id;
214 $page_type_for = 'template-' . $post_id . '-specific-products';
215 }
216 } elseif ( 'archive' === $type ) {
217 $categories_name = apply_filters( 'rtsb/archive/page/builder/selected/categories', [], $post_id );
218 $set_default = BuilderFns::get_specific_category_as_default( $post_id );
219 if ( ! empty( $categories_name ) && $set_default ) {
220 $is_set_default = $post_id;
221 $page_type_for = 'template-' . $post_id . '-specific-category';
222 }
223 }
224 ?>
225 <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' ); ?>">
226 <label class="rtsb-switch">
227 <?php do_action( 'rtsb/set/default/column/extra/field', $post_id, $type, $is_set_default, $is_published ); ?>
228 <div class="rtsb_template_type" data-template_type="<?php echo esc_attr( $type ); ?>" style='display:none;'></div>
229 <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' : '' ); ?> >
230 <span class="rtsb-slider rtsb-round ">
231 <span class="rtsb-loader"></span>
232 </span>
233 </label>
234 </span>
235 <?php
236 break;
237 }
238 }
239
240 /**
241 * Register sortable columns
242 *
243 * @param [type] $columns column list.
244 *
245 * @return array
246 */
247 public function register_sortable_columns( $columns ) {
248 $columns['type'] = 'type';
249
250 return $columns;
251 }
252
253 /**
254 * Meta sortable function.
255 *
256 * @param object $query query object.
257 *
258 * @return void
259 */
260 public function sortable_columns_query( $query ) {
261 if ( ! is_admin() || ! $this->is_current_screen() ) {
262 return;
263 }
264 $orderby = $query->get( 'orderby' );
265 if ( 'type' === $orderby ) {
266 $query->set( 'meta_key', BuilderFns::template_type_meta_key() );
267 $query->set( 'orderby', 'meta_value' );
268 }
269 }
270
271 /**
272 * Check template screen
273 *
274 * @return boolean
275 */
276 public function is_current_screen() {
277 global $pagenow, $typenow;
278
279 return 'edit.php' === $pagenow && BuilderFns::$post_type_tb === $typenow;
280 }
281
282 /**
283 * Manage Template filter by template type
284 *
285 * @param \WP_Query $query WordPress main query.
286 *
287 * @return void
288 */
289 public function query_filter( \WP_Query $query ) {
290
291 if ( ! is_admin() || ! $this->is_current_screen() || ! empty( $query->query_vars['meta_key'] ) ) {
292 return;
293 }
294 $type = isset( $_GET['template_type'] ) ? sanitize_key( $_GET['template_type'] ) : '';
295
296 if ( '' != $type && 'all' != $type ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
297 $query->query_vars['meta_key'] = BuilderFns::template_type_meta_key(); // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_key
298 $query->query_vars['meta_value'] = $type;
299 $query->query_vars['meta_compare'] = '=';
300 }
301 }
302
303 /**
304 * Load Template.
305 *
306 * @param string $template Template File.
307 *
308 * @return string
309 */
310 public function builder_template( $template ) {
311 $builder_page_id = BuilderFns::is_builder_preview() ? get_the_ID() : BuilderFns::builder_page_id_by_page();
312 if ( $builder_page_id ) {
313 $page_template = get_post_meta( $builder_page_id, '_wp_page_template', true );
314 $new_template = RTSB_ABSPATH . 'page-templates/builder-template.php';
315 if ( 'elementor_canvas' === $page_template ) {
316 $new_template = RTSB_ABSPATH . 'page-templates/elementor-canvas.php';
317 } elseif ( 'elementor_header_footer' === $page_template ) {
318 $new_template = RTSB_ABSPATH . 'page-templates/builder-template.php';
319 }
320 if ( file_exists( $new_template ) ) {
321 $template = $new_template;
322 }
323 }
324
325 return $template;
326 }
327
328 /**
329 * Add/Remove edit link in dashboard.
330 *
331 * Add or remove an edit link to the post/page action links on the post/pages list table.
332 *
333 * Fired by `post_row_actions` and `page_row_actions` filters.
334 *
335 * @access public
336 *
337 * @param array $actions An array of row action links.
338 *
339 * @return array An updated array of row action links.
340 */
341 public function filter_post_row_actions( $actions ) {
342 if ( $this->is_current_screen() ) {
343 // unset( $actions['view'] );
344 unset( $actions['inline hide-if-no-js'] );
345 }
346
347 return $actions;
348 }
349
350 /**
351 * Remove admin notices
352 */
353 public function remove_all_notices() {
354 $screen = get_current_screen();
355 if ( 'edit-rtsb_builder' === $screen->id ) {
356 remove_all_actions( 'admin_notices' );
357 remove_all_actions( 'all_admin_notices' );
358 }
359 }
360 }
361