PluginProbe
BlockSpare – Gutenberg Blocks for News, Magazine, Blog & Business Websites / trunk
BlockSpare – Gutenberg Blocks for News, Magazine, Blog & Business Websites vtrunk
4.1.0 trunk 1.0.0 1.0.1 1.0.2 1.0.3 1.0.4 1.0.5 1.1.0 1.1.1 1.1.2 1.2.0 1.2.1 1.2.2 1.2.3 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.3.5 2.1.2 2.5.0 2.5.3 2.6.1 All 38 releases
← All changes | inc/init.php +513 -216 2.5.0trunk View file →
@@ -1,239 +1,536 @@
1 1 <?php
2 -
3 - //Exit if directly acess
4 - defined('ABSPATH') or die('No script kiddies please!');
5 2
6 - if(!class_exists('BlockspareInit')){
7 - class BlockspareInit{
8 - /**
9 - * Member Variable
10 - *
11 - * @var instance
12 - */
13 - private static $instance;
3 +/**
4 + * inc/init.php
5 + * @package Blockspare
6 + */
14 7
15 - /**
16 - * Initiator
17 - */
18 - public static function get_instance()
19 - {
20 - if (!isset(self::$instance))
21 - {
22 - self::$instance = new self();
23 - }
24 - return self::$instance;
8 +defined('ABSPATH') or die('No script kiddies please!');
9 +
10 +class Blockspare_Init
11 +{
12 + public function __construct()
13 + {
14 +
15 + // 1. Hooks
16 + add_action('init', [$this, 'blockspare_plugin_init']);
17 + add_action('admin_enqueue_scripts', [$this, 'blockspare_enqueue_editor_assets']);
18 + add_action('customize_controls_enqueue_scripts', [$this, 'blockspare_enqueue_customizer_assets']);
19 + add_action('enqueue_block_assets', [$this, 'blockspare_fb_enqueue_frontend_assets']);
20 +
21 + add_action('wp_enqueue_scripts', [$this, 'blockspare_enqueue_frontend_script']);
22 + add_filter('block_categories_all', [$this, 'blockspare_register_custom_categories'], 10, 2);
23 + add_action('plugins_loaded', [$this, 'blockspare_load_dynamic_blocks']);
24 + add_action('rest_api_init', array($this, 'blockspare_blocks_register_api_endpoints'));
25 + }
26 +
27 + public function blockspare_plugin_init()
28 + {
29 + $this->blockspare_blocks_register_blocks();
30 + //$this->blockspare_fb_enqueue_frontend_assets();
31 + $this->blockspare_load_load_text_domain();
32 + }
33 + // ══════════════════════════════════════════════════════════════════════════
34 + // Helper Functions
35 + // ══════════════════════════════════════════════════════════════════════════
36 + public static function get_post_types()
37 + {
38 + static $cache = null;
39 + if ($cache !== null) return $cache;
40 +
41 + $transient = get_transient('blockspare_post_types');
42 + if ($transient !== false) {
43 + $cache = $transient;
44 + return $cache;
45 + }
46 +
47 +
48 + $args = ['public' => true, 'show_in_rest' => true];
49 + $post_types = get_post_types($args, 'objects');
50 +
51 + $output = [];
52 + foreach ($post_types as $post_type) {
53 + if ($post_type->name === 'attachment') continue;
54 +
55 + $output[] = [
56 + 'value' => $post_type->name,
57 + 'label' => $post_type->label,
58 + ];
59 + }
60 +
61 + set_transient('blockspare_post_types', $output, HOUR_IN_SECONDS);
62 + $cache = apply_filters('aft_blocks_post_types', $output);
63 +
64 + return $cache;
65 + }
66 +
67 + public static function get_taxonomies()
68 + {
69 + static $cache = null;
70 + if ($cache !== null) return $cache;
71 +
72 + $transient = get_transient('blockspare_taxonomies');
73 + if ($transient !== false) {
74 + $cache = $transient;
75 + return $cache;
76 + }
77 +
78 + $post_types = self::get_post_types();
79 + $output = [];
80 +
81 + foreach ($post_types as $post_type) {
82 + $pt = $post_type['value'];
83 + $taxonomies = get_object_taxonomies($pt, 'objects');
84 +
85 + foreach ($taxonomies as $term_slug => $term) {
86 + if (!$term->public || !$term->show_ui) continue;
87 +
88 + $terms = get_terms([
89 + 'taxonomy' => $term_slug,
90 + 'hide_empty' => false,
91 + ]);
92 +
93 + if (!empty($terms) && !is_wp_error($terms)) {
94 + foreach ($terms as $term_item) {
95 + $output[$pt]['terms'][$term_slug][] = [
96 + 'value' => $term_item->term_id,
97 + 'label' => $term_item->name,
98 + ];
99 + }
25 100 }
26 - public function __construct()
27 - {
28 - add_action('init', array($this, 'blockspare_blocks_block_assets' ));
29 - add_action('enqueue_block_editor_assets', array($this,'blockspare_create_block'));
30 - add_action('wp_enqueue_scripts', array($this,'blockspare_load_scripts'));
31 - add_action('plugins_loaded', array($this,'blockspare_blocks_loader'));
32 - add_action( 'rest_api_init', array($this,'blockspare_blocks_register_api_endpoints' ));
33 -
34 -
101 + }
102 +
103 + $output[$pt]['taxonomy'] = $taxonomies;
104 + }
105 +
106 + set_transient('blockspare_taxonomies', $output, HOUR_IN_SECONDS);
107 + $cache = apply_filters('aft_blocks_taxonomies', $output);
108 +
109 + return $cache;
110 + }
111 +
112 + // ══════════════════════════════════════════════════════════════════════════
113 + // 1. Register blocks
114 + // ══════════════════════════════════════════════════════════════════════════
115 + public function blockspare_blocks_register_blocks()
116 + {
117 + $blocks = glob(BLOCKSPARE_PLUGIN_DIR . 'build/block/*/block.json');
118 +
119 + if ($blocks) {
120 + foreach ($blocks as $block) {
121 + register_block_type(dirname($block));
122 + }
123 + }
124 +
125 + wp_enqueue_style(
126 + 'blockspare-fontawesome',
127 + BLOCKSPARE_PLUGIN_URL . 'assets/fontawesome/css/all.css',
128 + [],
129 + BLOCKSPARE_VERSION
130 + );
131 + }
132 +
133 + public function blockspare_enqueue_frontend_script()
134 + {
135 + wp_register_style(
136 + 'slick',
137 + BLOCKSPARE_PLUGIN_URL . 'assets/slick/css/slick.min.css',
138 + array(),
139 + BLOCKSPARE_VERSION
140 + );
141 +
142 + wp_register_script(
143 + 'slick',
144 + BLOCKSPARE_PLUGIN_URL . 'assets/slick/js/slick.min.js',
145 + array('jquery'),
146 + BLOCKSPARE_VERSION,
147 + true
148 + );
149 + global $post;
150 +
151 + if ($post && has_blocks($post->post_content)) {
152 + $content = $post->post_content;
153 +
154 + $hasCarousel = has_block('blockspare/blockspare-carousel', $content);
155 + $hasSlider = has_block('blockspare/blockspare-slider', $content);
156 + $hasMasonry = has_block('blockspare/blockspare-masonry', $content);
157 +
158 + if ($hasCarousel || $hasSlider) {
159 + wp_enqueue_style('slick');
160 + wp_enqueue_script('slick');
161 + }
162 + if ($hasMasonry) {
163 + wp_enqueue_script('jquery-masonry');
164 + }
165 + }
166 +
167 +
168 +
169 +
170 + wp_enqueue_script(
171 + 'block_animation_script',
172 + BLOCKSPARE_PLUGIN_URL . 'dist/block_animation_script.js',
173 + ['jquery'],
174 + BLOCKSPARE_VERSION,
175 + true
176 + );
177 + wp_register_script(
178 + 'block_pagination_script',
179 + BLOCKSPARE_PLUGIN_URL . 'dist/block_pagination_script.js',
180 + ['jquery'],
181 + BLOCKSPARE_VERSION,
182 + true
183 + );
184 + wp_localize_script('block_pagination_script', 'blocsparePagination', array(
185 + 'ajaxurl' => admin_url('admin-ajax.php'),
186 + 'nonce' => wp_create_nonce('blockspare-load-more-nonce'),
187 + ));
188 + }
189 +
190 + // ══════════════════════════════════════════════════════════════════════════
191 + // 2. Editor-only assets
192 + // ══════════════════════════════════════════════════════════════════════════
193 + public function blockspare_enqueue_editor_assets()
194 + {
195 +
196 + global $pagenow;
197 +
198 + // ✅ Prevent unnecessary loading
199 + if (!in_array($pagenow, ['post.php', 'post-new.php', 'widgets.php'])) {
200 + return;
201 + }
202 +
203 + wp_register_script(
204 + 'blockspare-category',
205 + BLOCKSPARE_PLUGIN_URL . 'dist/block_category.js',
206 + [
207 + 'wp-blocks',
208 + 'wp-i18n',
209 + 'wp-element',
210 + 'wp-components',
211 + 'wp-block-editor',
212 + 'wp-api-fetch',
213 + ],
214 + BLOCKSPARE_VERSION,
215 + true
216 + );
217 +
218 + global $pagenow;
219 + $loadscripton = ($pagenow === 'widgets.php' || is_customize_preview());
220 +
221 + wp_add_inline_script(
222 + 'wp-blocks',
223 + 'var blockspare_globals = ' . wp_json_encode($this->blockspare_get_globals()) . ';',
224 + 'before'
225 + );
226 +
227 +
228 + wp_enqueue_script('blockspare-category');
229 +
230 + wp_enqueue_style(
231 + 'blockspare-panel',
232 + BLOCKSPARE_PLUGIN_URL . 'dist/panel.css',
233 + ['wp-edit-blocks'],
234 + BLOCKSPARE_VERSION
235 + );
236 + wp_enqueue_style(
237 + 'blockspare-animation-blocks',
238 + BLOCKSPARE_PLUGIN_URL . 'dist/block_animation.css',
239 + [],
240 + BLOCKSPARE_VERSION
241 + );
242 + if (is_admin()):
243 + wp_enqueue_script(
244 + 'blockspare-design-btn',
245 + BLOCKSPARE_PLUGIN_URL . 'dist/block_design_btn.js',
246 + array('blockspare-category'),
247 + BLOCKSPARE_VERSION,
248 + true
249 + );
250 + endif;
251 +
252 +
253 + wp_localize_script('blockspare-category', 'cbvData', [
254 + 'isLoggedIn' => is_user_logged_in(),
255 + ]);
256 + }
257 +
258 + public function blockspare_enqueue_customizer_assets()
259 + {
260 + global $pagenow;
261 + if (!in_array($pagenow, ['customize.php'])) {
262 + return;
263 + }
264 + // Register globals as a standalone no-file script
265 + wp_register_script(
266 + 'blockspare-globals',
267 + false, // ← no actual JS file
268 + [],
269 + null,
270 + false
271 + );
272 +
273 + wp_add_inline_script(
274 + 'blockspare-globals',
275 + 'var blockspare_globals = ' . wp_json_encode($this->blockspare_get_globals()) . ';'
276 + );
277 +
278 + wp_enqueue_script('blockspare-globals');
279 +
280 + // Also enqueue your category script for the widgets customizer
281 + wp_enqueue_script(
282 + 'blockspare-category',
283 + BLOCKSPARE_PLUGIN_URL . 'dist/block_category.js',
284 + [
285 + 'blockspare-globals', // ← depends on globals, so globals loads first
286 + 'wp-blocks',
287 + 'wp-i18n',
288 + 'wp-element',
289 + 'wp-components',
290 + 'wp-block-editor',
291 + 'wp-api-fetch',
292 + 'wp-plugins',
293 + 'wp-edit-post',
294 + ],
295 + BLOCKSPARE_VERSION,
296 + true
297 + );
298 +
299 + wp_enqueue_style(
300 + 'blockspare-panel',
301 + BLOCKSPARE_PLUGIN_URL . 'dist/panel.css',
302 + ['wp-edit-blocks'],
303 + BLOCKSPARE_VERSION
304 + );
305 + }
306 +
307 + private function blockspare_get_globals(): array
308 + {
309 + $blockspare_priview_img_url = BLOCKSPARE_PLUGIN_URL . 'assets/blockspare-placeholder-img.jpg';
310 + $blockspare_food_img_url = BLOCKSPARE_PLUGIN_URL . 'assets/blockspare-placeholder-img-square.jpg';
311 + $blockspare_promo_img = BLOCKSPARE_PLUGIN_URL . 'assets/banner-promo-1120-wu-1.png';
312 + $date = wp_kses_post(date_i18n(get_option('date_format')));
313 + $date_format = date_i18n(get_option('date_format'), current_time('timestamp'));
314 + $open_design = isset($_GET['blockspare_show_intro']) && $_GET['blockspare_show_intro'] === 'true';
315 + $blockData = '';
316 +
317 + if (isset($_GET['blockspare_create_block'])) {
318 +
319 + $blockName = sanitize_text_field($_GET['blockspare_create_block']);
320 + $blockTitle = sanitize_text_field($_GET['post_title']);
321 +
322 + // Get from template library filter
323 + $filterdata = apply_filters('blockspare_template_library', []);
324 +
325 + foreach ($filterdata as $block) {
326 + if (isset($block['key']) && $block['key'] === $blockName) {
327 + $blockData = $block['content'];
328 + break;
35 329 }
330 + }
36 331
37 - function blockspare_blocks_block_assets(){
38 - wp_enqueue_style(
39 - 'blockspare-blocks-fontawesome-front',
40 - plugins_url('assets/fontawesome/css/all.css', dirname(__FILE__)),
41 - array()
42 - );
43 - // Load the compiled styles.
44 - wp_enqueue_style(
45 - 'blockspare-frontend-block-style-css',
46 - plugins_url('dist/style-blocks.css', dirname(__FILE__)),
47 - array()
48 - );
49 -
50 -
51 - wp_enqueue_style('slick-css', BLOCKSPARE_PLUGIN_URL . 'assets/slick/css/slick.css', array(), '', 'all');
332 + // Get from bs_templates post type if not found
333 + if (empty($blockData) && ! empty($blockTitle)) {
334 +
335 + $templates = get_posts([
336 + 'post_type' => 'bs_templates',
337 + 'post_status' => 'publish',
338 + 'title' => $blockTitle,
339 + 'posts_per_page' => 1,
340 + ]);
341 +
342 + if (! empty($templates)) {
343 + $blockData = $templates[0]->post_content;
52 344 }
345 + }
346 + }
53 347
54 - function blockspare_load_scripts(){
55 - $min = (SCRIPT_DEBUG == true) ? '' : '.min';
56 - wp_enqueue_script('slick-js', BLOCKSPARE_PLUGIN_URL . 'assets/slick/js/slick.js', array('jquery'), '', true);
57 - wp_register_script('countup', BLOCKSPARE_PLUGIN_URL . 'assets/js/countup/jquery.counterup' . $min . '.js', array('waypoint'), true);
58 - wp_enqueue_script('waypoint', BLOCKSPARE_PLUGIN_URL . 'assets/js/countup/waypoints.min.js', array('jquery'), '', true);
59 - wp_enqueue_script('jquery-masonry');
60 - wp_enqueue_script('blockspare-animation', BLOCKSPARE_PLUGIN_URL . 'dist/block_animation.js', array(), '', true);
61 - wp_enqueue_script('blockspare-script', BLOCKSPARE_PLUGIN_URL . 'dist/block_frontend.js', array('jquery', 'waypoint', 'countup'), '', true);
62 - wp_enqueue_script('blockspare-tabs', BLOCKSPARE_PLUGIN_URL . 'dist/block_tabs.js', array('jquery'), '', true);
63 - wp_enqueue_script('blockspare-pagination-js', BLOCKSPARE_PLUGIN_URL . 'dist/block_pagination.js', array(), '', true);
348 + $blockspare_current_wp_version = get_bloginfo('version');
349 + $loadscripton = (isset($GLOBALS['pagenow']) && $GLOBALS['pagenow'] === 'widgets.php') || is_customize_preview();
64 350
65 - wp_localize_script('blockspare-pagination-js', 'blocsparePagination',array(
66 - 'ajaxurl' => admin_url( 'admin-ajax.php' ),
67 - 'nonce'=>wp_create_nonce('blockspare-load-more-nonce')
68 - ));
69 - }
351 + return [
352 + 'srcUrl' => untrailingslashit(plugins_url('/', BLOCKSPARE_BASE_DIR . '/build/')),
353 + 'rest_url' => esc_url(rest_url()),
354 + 'nonce' => wp_create_nonce('wp_rest'),
355 + 'img' => $blockspare_priview_img_url,
356 + 'menu_img_url' => $blockspare_food_img_url,
357 + 'block_key' => '',
358 + 'homeUrl' => home_url(),
359 + 'blogUrl' => get_site_url(),
360 + 'postTypes' => self::get_post_types(),
361 + 'taxonomies' => self::get_taxonomies(),
362 + 'postQueryEndpoint' => 'aft/v1/post-query',
363 + 'config' => '',
364 + 'configuration' => '',
365 + 'settings' => '',
366 + 'bs_date' => $date,
367 + 'promo_img' => $blockspare_promo_img,
368 + 'imagePath' => 'https:raw.githubusercontent.com/afthemes/blockspare-demo-data/master/blocks/new/',
369 + 'open_design' => $open_design,
370 + 'date_format' => $date_format,
371 + 'blockData' => $blockData,
372 + 'template_link' => admin_url('edit.php?post_type=bs_templates'),
373 + 'newTemlateUrl' => admin_url('post-new.php?post_type=bs_templates&blockspare_create_block&blockspare_show_intro=true'),
374 + 'loadscripton' => $loadscripton,
375 + 'wpversion' => (version_compare($blockspare_current_wp_version, '6.6') >= 0) ? 'true' : 'false',
376 + 'inspector_imgs' => BLOCKSPARE_PLUGIN_URL . 'assets/images',
377 + 'upgradeUrl' => 'https://afthemes.com/blockspare-pro/',
378 + 'isPro' => false,
379 + 'allowedFonts' => $this->blockspare_allow_fonts()
380 + ];
381 + }
382 + public function blockspare_allow_fonts()
383 + {
384 + return ['ABeeZee', 'Abel', 'Lato', 'Oswald'];
385 + }
70 386
71 - function blockspare_create_block(){
387 + public function blockspare_fb_enqueue_frontend_assets()
388 + {
389 + wp_enqueue_style(
390 + 'blockspare-fontawesome',
391 + BLOCKSPARE_PLUGIN_URL . 'assets/fontawesome/css/all.css',
392 + [],
393 + BLOCKSPARE_VERSION
394 + );
395 + wp_enqueue_style(
396 + 'blockspare-common-latest-post',
397 + BLOCKSPARE_PLUGIN_URL . 'dist/lates_post_css.css',
398 + [],
399 + BLOCKSPARE_VERSION
400 + );
72 401
73 - $script_dep_path = BLOCKSPARE_BASE_DIR . 'dist/blocks.asset.php';
74 - $script_info = file_exists($script_dep_path) ? include $script_dep_path : array(
75 - 'dependencies' => array() ,
76 - 'version' => BLOCKSPARE_VERSION,
77 - );
78 - if (version_compare(get_bloginfo('version') , '5.8', '<'))
79 - {
80 - $script_dep = array_merge($script_info['dependencies'],array(
81 - 'wp-blocks',
82 - 'wp-i18n',
83 - 'wp-element',
84 - 'wp-components',
85 - 'wp-editor',
86 - 'wp-api-fetch'
87 - ));
88 - }
89 - else
90 - {
91 - $script_dep = $script_info['dependencies'];
92 - }
402 + wp_enqueue_style(
403 + 'blockspare-common-all-blocks',
404 + BLOCKSPARE_PLUGIN_URL . 'dist/common_all_blocks.css',
405 + [],
406 + BLOCKSPARE_VERSION
407 + );
408 + wp_enqueue_style(
409 + 'blockspare-animation-blocks',
410 + BLOCKSPARE_PLUGIN_URL . 'dist/block_animation.css',
411 + [],
412 + BLOCKSPARE_VERSION
413 + );
414 + }
93 415
94 - wp_enqueue_script('blockspare-blocks-block-js', // Handle.
95 - BLOCKSPARE_PLUGIN_URL . 'dist/blocks.js', $script_dep, // Dependencies, defined above.
96 - $script_info['version'], // AFT_PRICING_TABLE_VERSION.
97 - true
98 - // Enqueue the script in the footer.
99 - );
416 + // ══════════════════════════════════════════════════════════════════════════
417 + // 3. Custom block categories
418 + // ══════════════════════════════════════════════════════════════════════════
419 + public function blockspare_register_custom_categories($categories)
420 + {
421 + $custom = [
422 + [
423 + 'slug' => 'blockspare-post',
424 + 'title' => __('Editorial & Content', 'blockspare'),
100 425
101 - if (is_admin()) :
102 - wp_enqueue_style(
103 - 'blockspare-block-edit-style',
104 - BLOCKSPARE_PLUGIN_URL . 'dist/blocks.css',
105 - array('wp-edit-blocks')
106 - );
107 - endif;
108 -
109 -
110 - $blockspare_priview_img_url = BLOCKSPARE_PLUGIN_URL . 'assets/blockspare-placeholder-img.jpg';
111 - $blockspare_food_img_url = BLOCKSPARE_PLUGIN_URL . 'assets/blockspare-placeholder-img-square.jpg';
112 -
113 - $taxonomies = get_categories();
114 - $txnm = array();
115 -
116 - foreach( $taxonomies as $type ) {
117 -
118 -
119 - $txnm[] = array(
120 - 'label' => $type->name,
121 - 'value' => $type->term_id,
122 - );
123 - }
124 -
125 -
126 - wp_localize_script(
127 - 'blockspare-blocks-block-js',
128 - 'blockspare_globals',
129 - array(
130 - 'srcUrl' => untrailingslashit(plugins_url('/', BLOCKSPARE_BASE_DIR . '/dist/')),
131 - 'rest_url' => esc_url(rest_url()),
132 - 'img' => $blockspare_priview_img_url,
133 - 'menu_img_url' => $blockspare_food_img_url,
134 - 'postTypes' => $this->aft_get_post_types(),
135 - 'taxonomies' => $this->aft_get_taxonomies(),
136 - 'postQueryEndpoint'=>'aft/v1/post-query',
137 - 'config' => '',
138 - 'configuration' => '',
139 - 'settings' => '',
140 - )
141 - );
142 - }
426 + ],
427 + [
428 + 'slug' => 'blockspare',
429 + 'title' => __('Business & Layout', 'blockspare'),
143 430
144 - function aft_get_post_types(){
145 - $args = array(
146 - 'public' => true,
147 - 'show_in_rest' => true,
148 - );
149 - $post_types = get_post_types( $args, 'objects' );
150 - $output = array();
151 - foreach ( $post_types as $post_type ) {
152 -
153 - if ( 'attachment' == $post_type->name ) {
154 - continue;
155 - }
156 - $output[] = array(
157 - 'value' => $post_type->name,
158 - 'label' => $post_type->label,
159 - );
160 - }
431 + ],
161 432
162 - return apply_filters( 'aft_blocks_post_types', $output );
163 - }
433 + ];
164 434
165 -
435 + return array_merge($custom, $categories);
436 + }
166 437
167 - function aft_get_taxonomies() {
168 - $post_types = $this->aft_get_post_types();
169 - $output = array();
170 - foreach ( $post_types as $key => $post_type ) {
171 - $taxonomies = get_object_taxonomies( $post_type['value'], 'objects' );
172 - $taxs = array();
173 - foreach ( $taxonomies as $term_slug => $term ) {
174 - if ( ! $term->public || ! $term->show_ui ) {
175 - continue;
176 - }
177 - $taxs[ $term_slug ] = $term;
178 - $terms = get_terms( $term_slug );
179 - $term_items = array();
180 - if ( ! empty( $terms ) ) {
181 - foreach ( $terms as $term_key => $term_item ) {
182 - $term_items[] = array(
183 - 'value' => $term_item->term_id,
184 - 'label' => $term_item->name,
185 - );
186 - }
187 - $output[ $post_type['value'] ]['terms'][ $term_slug ] = $term_items;
188 - }
189 - }
190 - $output[ $post_type['value'] ]['taxonomy'] = $taxs;
191 - }
192 -
193 - return apply_filters( 'aft_blocks_taxonomies', $output );
194 - }
438 + // ══════════════════════════════════════════════════════════════════════════
439 + // 4. Load server-side render files
440 + // ══════════════════════════════════════════════════════════════════════════
441 + public function blockspare_load_dynamic_blocks()
442 + {
443 + $this->load_layout_dependencies();
444 + $this->load_block_includes();
445 + }
195 446
196 - function blockspare_blocks_loader(){
197 -
198 - //Load Gutenberg Block php Files
199 - include(BLOCKSPARE_PLUGIN_DIR . 'inc/other-block/date-time/index.php');
200 - include(BLOCKSPARE_PLUGIN_DIR . '/inc/other-block/social-sharing/index.php');
201 - include(BLOCKSPARE_PLUGIN_DIR . '/inc/latest-post-block/posts-grid/index.php');
202 - include(BLOCKSPARE_PLUGIN_DIR . '/inc/latest-post-block/posts-list/index.php');
203 -
204 - include(BLOCKSPARE_PLUGIN_DIR . '/inc/latest-post-block/posts-express-grid/index.php');
205 -
206 -
207 - include(BLOCKSPARE_PLUGIN_DIR . '/inc/latest-post-block/posts-carousel-grid/index.php');
208 - include(BLOCKSPARE_PLUGIN_DIR . '/inc/latest-post-block/posts-slider/index.php');
209 -
210 - include(BLOCKSPARE_PLUGIN_DIR . '/inc/post-banner/banner-1/index.php');
211 - include(BLOCKSPARE_PLUGIN_DIR . '/inc/post-banner/banner-2/index.php');
212 - include(BLOCKSPARE_PLUGIN_DIR . 'inc/block-posts-config/ajax-pagination.php');
213 - include(BLOCKSPARE_PLUGIN_DIR . 'inc/block-posts-config/class-post-rest-api.php');
214 - include(BLOCKSPARE_PLUGIN_DIR . 'inc/block-posts-config/class-multiauthor-backend.php');
215 - include(BLOCKSPARE_PLUGIN_DIR . 'inc/block-posts-config/class-multiauthor-frontend.php');
216 - include(BLOCKSPARE_PLUGIN_DIR . 'inc/block-posts-config/tax-category.php');
217 - include(BLOCKSPARE_PLUGIN_DIR . 'inc/block-posts-config/class-bs-post.php');
218 - include(BLOCKSPARE_PLUGIN_DIR . 'inc/block-banner/frontend-render/post-banner-config.php');
219 - include(BLOCKSPARE_PLUGIN_DIR . 'inc/block-banner/frontend-render/post-banner-style.php');
220 - include(BLOCKSPARE_PLUGIN_DIR . 'inc/other-block/search/index.php');
221 - include(BLOCKSPARE_PLUGIN_DIR . 'inc/latest-post-block/posts-flash/index.php');
222 - include(BLOCKSPARE_PLUGIN_DIR . 'inc/other-block/popular-tags/index.php');
223 - include(BLOCKSPARE_PLUGIN_DIR . 'inc/page-templates/module.php');
224 - }
447 + private function load_layout_dependencies()
448 + {
449 + if (PHP_VERSION_ID < 50600) {
450 + return;
451 + }
225 452
226 - function blockspare_blocks_register_api_endpoints(){
227 -
228 - $posts_controller = new Aft_Post_Rest_Controller();
229 - $posts_controller->register_routes();
230 -
453 + $layout_files = [
454 + 'inc/layout/class-image-importer.php',
455 + 'inc/layout/functions.php',
456 + 'inc/layout/registry.php',
457 + 'inc/layout/components.php',
458 + 'inc/layout/endpoints.php',
459 + 'inc/layout/save-templates.php',
460 + ];
231 461
232 - }
462 + $this->include_files($layout_files);
463 + }
233 464
465 + private function load_block_includes()
466 + {
467 + $block_files = [
468 + 'inc/rest-api-function.php',
469 + 'inc/latest-post-block/posts-grid/index.php',
470 + 'inc/latest-post-block/posts-carousel-grid/index.php',
471 + 'inc/latest-post-block/posts-slider/index.php',
472 + 'inc/latest-post-block/posts-list/index.php',
473 + 'inc/latest-post-block/posts-flash/index.php',
474 + 'inc/latest-post-block/posts-express-grid/index.php',
475 + 'inc/other-block/date-time/index.php',
476 + 'inc/latest-post-block/posts-popular-tags/index.php',
477 + 'inc/blockspare-functions.php',
478 + 'inc/block-posts-config/class-post-rest-api.php',
479 + 'inc/block-posts-config/class-multiauthor-backend.php',
480 + 'inc/block-posts-config/class-multiauthor-frontend.php',
481 + 'inc/block-posts-config/tax-category.php',
482 + 'inc/block-posts-config/class-bs-post.php',
483 + 'inc/block-posts-config/latest-post-tile-common.php',
484 + 'inc/other-block/social-sharing/index.php',
485 + 'inc/other-block/search/index.php',
486 + 'inc/block-banner/frontend-render/post-category-style.php',
487 + 'inc/block-banner/frontend-render/post-banner-config.php',
488 + 'inc/block-banner/frontend-render/post-banner-style.php',
489 + 'inc/block-posts-config/ajax-pagination.php',
490 +
491 + 'inc/post-banner/banner-1/index.php',
492 + 'inc/post-banner/banner-2/index.php',
493 + 'inc/post-banner/banner-9/index.php',
494 + ];
495 + $this->include_files($block_files);
496 + }
497 +
498 + /**
499 + * Reusable file loader
500 + */
501 + private function include_files($files = [])
502 + {
503 +
504 + foreach ($files as $file) {
505 + $filepath = BLOCKSPARE_PLUGIN_DIR . $file;
506 +
507 + if (file_exists($filepath)) {
508 + include_once $filepath;
509 + }
234 510 }
235 - BlockspareInit::get_instance();
511 + }
512 +
513 + public function blockspare_blocks_register_api_endpoints()
514 + {
515 +
516 + $posts_controller = new Aft_Post_Rest_Controller();
517 + $posts_controller->register_routes();
518 + }
519 +
520 +
521 +
522 + // ══════════════════════════════════════════════════════════════════════════
523 + // 5. Load text domain
524 + // ══════════════════════════════════════════════════════════════════════════
525 + public function blockspare_load_load_text_domain()
526 + {
527 + load_plugin_textdomain(
528 + 'blockspare',
529 + false,
530 + dirname(plugin_basename(BLOCKSPARE_BASE_FILE)) . '/languages'
531 + );
532 + }
236 533 }
237 -
238 -
239 -
534 +
535 +// Initialize the class
536 +new Blockspare_Init();