PluginProbe
ShopBuilder – WooCommerce Builder For Elementor / 1.1.2
ShopBuilder – WooCommerce Builder For Elementor v1.1.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 1.1.2, at app/Controllers/Builder/BuilderCpt.php

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