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

348 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 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 }
348