PluginProbe
Post Grid Gutenberg Blocks – PostX / 5.0.41
Post Grid Gutenberg Blocks – PostX v5.0.41
5.0.41 5.0.39 5.0.38 5.0.37 5.0.36 5.0.35 5.0.34 5.0.33 5.0.32 5.0.31 5.0.30 5.0.29 5.0.28 5.0.27 5.0.26 5.0.25 5.0.23 5.0.24 5.0.22 5.0.21 5.0.20 5.0.19 5.0.18 5.0.17 2.1.1 All 238 releases
← All changes | classes/Initialization.php +592 -291 2.1.15.0.41 View file →
@@ -1,330 +1,631 @@
1 1 <?php
2 +
3 +/**
4 + * Initialization Action.
5 + *
6 + * @package ULTP\ULTP_Initialization
7 + * @since v.1.1.0
8 + */
9 +
2 10 namespace ULTP;
3 11
4 -defined('ABSPATH') || exit;
12 +defined( 'ABSPATH' ) || exit;
5 13
6 -class Initialization{
14 +use ULTP\Includes\Durbin\Xpo;
15 +use ULTP\Includes\Notice\Notice;
7 16
8 - private $all_blocks;
17 +/**
18 + * Initialization class.
19 + *
20 + * Handles plugin initialization for Ultimate Post.
21 + *
22 + * @package ULTP\Initialization
23 + * @since 4.0.0
24 + */
25 +class ULTP_Initialization {
9 26
10 - public function __construct(){
11 - $this->compatibility_check();
12 - $this->requires(); // Include Necessary Files
13 - $this->blocks(); // Include Blocks
14 - $this->include_addons(); // Include Addons
27 + /**
28 + * Setup class.
29 + *
30 + * @since 4.0.0
31 + * @return void No return value.
32 + */
33 + public function __construct() {
15 34
16 - add_action('wp_head', array($this, 'popular_posts_tracker_callback'));
17 - add_filter('block_categories', array($this, 'register_category_callback'), 10, 2); // Block Category Register
18 - add_action('after_setup_theme', array($this, 'add_image_size'));
35 + $this->compatibility_check();
36 + $this->requires();
37 + $this->include_addons();
19 38
20 - add_action('enqueue_block_editor_assets', array($this, 'register_scripts_back_callback')); // Only editor
21 - add_action('admin_enqueue_scripts', array($this, 'register_scripts_option_panel_callback')); // Option Panel
22 - add_action('wp_enqueue_scripts', array($this, 'register_scripts_front_callback')); // Both frontend
23 - register_activation_hook(ULTP_PATH.'ultimate-post.php', array($this, 'install_hook'));
24 - add_action( 'activated_plugin', array($this, 'activation_redirect'));
39 + add_filter( 'admin_body_class', array( $this, 'add_admin_body_class' ) ); // add body class in editor.
40 + add_filter( 'body_class', array( $this, 'add_body_class' ) ); // add body class in front end.
25 41
26 - add_action('wp_ajax_ultp_next_prev', array($this, 'ultp_next_prev_callback')); // Next Previous AJAX Call
27 - add_action('wp_ajax_nopriv_ultp_next_prev', array($this, 'ultp_next_prev_callback')); // Next Previous AJAX Call Logout User
28 - add_action('wp_ajax_ultp_filter', array($this, 'ultp_filter_callback')); // Next Previous AJAX Call
29 - add_action('wp_ajax_nopriv_ultp_filter', array($this, 'ultp_filter_callback')); // Next Previous AJAX Call Logout User
30 - add_action('wp_ajax_ultp_pagination', array($this, 'ultp_pagination_callback')); // Page Number AJAX Call
31 - add_action('wp_ajax_nopriv_ultp_pagination',array($this, 'ultp_pagination_callback')); // Page Number AJAX Call Logout User
32 - add_action('wp_ajax_ultp_addon', array($this, 'ultp_addon_callback')); // Next Previous AJAX Call
33 - }
42 + add_action( 'wp', array( $this, 'popular_posts_tracker_callback' ) );
43 + add_action( 'after_setup_theme', array( $this, 'add_image_size' ) );
44 + add_filter( 'block_categories_all', array( $this, 'register_category_callback' ), 999999999, 2 ); // Block Category Register.
34 45
35 - public function compatibility_check(){
36 - require_once ULTP_PATH.'classes/Compatibility.php';
37 - new \ULTP\Compatibility();
38 - }
46 + add_filter( 'safe_style_css', array( $this, 'ultp_handle_safe_style_css' ) ); // support for css used in svg icon.
47 + add_filter( 'wp_kses_allowed_html', array( $this, 'ultp_handle_allowed_html' ), 99, 2 ); // support for svg icon used in list, row, icon block.
39 48
40 - public function register_scripts_option_panel_callback(){
41 - wp_enqueue_style('wp-color-picker');
42 - wp_enqueue_script('wp-color-picker');
43 - wp_enqueue_script('ultp-option-script', ULTP_URL.'assets/js/ultp-option.js', array('jquery'), ULTP_VER, true);
44 - wp_enqueue_style('ultp-option-style', ULTP_URL.'assets/css/ultp-option.css', array(), ULTP_VER);
45 - wp_localize_script('ultp-option-script', 'ultp_option', array(
46 - 'width' => ultimate_post()->get_setting('editor_container'),
47 - 'security' => wp_create_nonce('ultp-nonce'),
48 - 'ajax' => admin_url('admin-ajax.php')
49 - ));
50 - }
49 + add_action( 'enqueue_block_editor_assets', array( $this, 'register_block_scripts_editor_area' ) ); // Only editor.
50 + add_action( 'admin_enqueue_scripts', array( $this, 'register_option_panel_scripts_callback' ) ); // Option Panel.
51 + register_activation_hook( ULTP_PATH . 'ultimate-post.php', array( $this, 'plugin_activation_hook' ) );
52 + add_action( 'activated_plugin', array( $this, 'ultp_plugin_activation' ) ); // Plugin Activation Call.
53 + // new Notice();
54 + }
51 55
52 - public function register_scripts_common(){
53 - wp_enqueue_style('dashicons');
54 - wp_enqueue_style('ultp-slick-style', ULTP_URL.'assets/css/slick.css', array(), ULTP_VER);
55 - wp_enqueue_style('ultp-slick-theme-style', ULTP_URL.'assets/css/slick-theme.css', array(), ULTP_VER);
56 - wp_enqueue_style('ultp-style', ULTP_URL.'assets/css/blocks.style.css', array(), ULTP_VER );
57 - if(is_rtl()){ wp_enqueue_style('ultp-blocks-rtl-css', ULTP_URL.'assets/css/rtl.css', array(), ULTP_VER); }
58 - wp_enqueue_script('ultp-flexmenu-script', ULTP_URL.'assets/js/flexmenu.js', array('jquery'), ULTP_VER, true);
59 - wp_enqueue_script('ultp-slick-script', ULTP_URL.'assets/js/slick.min.js', array('jquery'), ULTP_VER, true);
60 - wp_enqueue_script('ultp-script', ULTP_URL.'assets/js/ultp.js', array('jquery','ultp-flexmenu-script'), ULTP_VER, true);
61 - wp_localize_script('ultp-script', 'ultp_data', array(
62 - 'url' => ULTP_URL,
63 - 'ajax' => admin_url('admin-ajax.php'),
64 - 'security' => wp_create_nonce('ultp-nonce')
65 - ));
66 - }
56 + /**
57 + * Check plugin compatibility.
58 + *
59 + * @since v.1.0.0
60 + * @return void
61 + */
62 + public function compatibility_check() {
63 + require_once ULTP_PATH . 'classes/Compatibility.php';
64 + new \ULTP\Compatibility();
65 + }
67 66
68 - // Backend and Frontend Load script
69 - public function register_scripts_front_callback() {
70 - if ('yes' == get_post_meta(get_the_ID(), '_ultp_active', true)) {
71 - $this->register_scripts_common();
72 - }
73 - }
67 + /**
68 + * Load all required classes.
69 + *
70 + * @since v.1.0.0
71 + * @return void No return value.
72 + */
73 + public function requires() {
74 + require_once ULTP_PATH . 'classes/Styles.php';
75 + require_once ULTP_PATH . 'classes/Options.php';
76 + require_once ULTP_PATH . 'classes/REST_API.php';
77 + require_once ULTP_PATH . 'classes/Caches.php';
78 + require_once ULTP_PATH . 'classes/Importer.php';
79 + require_once ULTP_PATH . 'classes/Dashboard.php';
80 + require_once ULTP_PATH . 'classes/Blocks.php';
81 + new \ULTP\REST_API();
82 + new \ULTP\Options();
83 + new \ULTP\Caches();
84 + new \ULTP\Styles();
85 + new \ULTP\Importer();
86 + new \ULTP\Dashboard();
87 + new \ULTP\Blocks();
74 88
75 - // Only Backend
76 - public function register_scripts_back_callback() {
77 - $this->register_scripts_common();
78 - wp_enqueue_script('ultp-blocks-editor-script', ULTP_URL.'assets/js/editor.blocks.min.js', array('wp-i18n', 'wp-element', 'wp-blocks', 'wp-components', 'wp-editor' ), ULTP_VER, true);
79 - wp_enqueue_style('ultp-blocks-editor-css', ULTP_URL.'assets/css/blocks.editor.css', array(), ULTP_VER);
80 - if(is_rtl()){
81 - wp_enqueue_style('ultp-blocks-editor-rtl-css', ULTP_URL.'assets/css/rtl.css', array(), ULTP_VER);
82 - }
83 -
84 - $import = '';
85 - $options = ultimate_post()->get_setting();
86 -
87 - if (isset($options['hide_import_btn'])) {
88 - if ($options['hide_import_btn']=='yes') {
89 - $import = 'yes';
90 - }
91 - }
89 + require_once ULTP_PATH . 'includes/durbin/class-durbin-client.php';
90 + require_once ULTP_PATH . 'includes/durbin/class-xpo.php';
91 + require_once ULTP_PATH . 'includes/deactive/class-deactive.php';
92 + require_once ULTP_PATH . 'includes/notice/class-notice.php';
93 + require_once ULTP_PATH . 'includes/durbin/class-our-plugins.php';
94 + require_once ULTP_PATH . 'includes/notice/class-wow-shipping-promotion.php';
95 + require_once ULTP_PATH . 'includes/notice/class-wow-revenue-promotion.php';
96 + require_once ULTP_PATH . 'includes/notice/class-wow-addons-promotion.php';
97 + new \ULTP\Includes\Deactive\Deactive();
98 + new \ULTP\Includes\notice\Notice();
99 + new \ULTP\Includes\notice\WowShippingPromotion();
100 + new \ULTP\Includes\notice\WowRevenuePromotion();
101 + new \ULTP\Includes\notice\WowAddonsPromotion();
102 + new \ULTP\Includes\Durbin\OurPlugins();
103 + }
92 104
93 - wp_localize_script('ultp-blocks-editor-script', 'ultp_data', array(
94 - 'url' => ULTP_URL,
95 - 'ajax' => admin_url('admin-ajax.php'),
96 - 'security' => wp_create_nonce('ultp-nonce'),
97 - 'hide_import_btn' => $import,
98 - 'upload' => wp_upload_dir()['basedir'] . '/ultp',
99 - 'license' => get_option('edd_ultp_license_key')
100 - ));
101 - }
105 + /**
106 + * Include all addons from the addons directory.
107 + *
108 + * @since v.1.0.0
109 + * @return void
110 + */
111 + public function include_addons() {
112 + $addons_dir = array_filter( glob( ULTP_PATH . 'addons/*' ), 'is_dir' );
113 + if ( count( $addons_dir ) > 0 ) {
114 + foreach ( $addons_dir as $key => $value ) {
115 + $addon_dir_name = str_replace( dirname( $value ) . '/', '', $value );
116 + $file_name = ULTP_PATH . 'addons/' . $addon_dir_name . '/init.php';
117 + if ( file_exists( $file_name ) ) {
118 + include_once $file_name;
119 + }
120 + }
121 + }
122 + }
102 123
103 - // Fire When Plugin First Install
104 - public function install_hook() {
105 - if (!get_option('ultp_options')) {
106 - ultimate_post()->init_set_data();
107 - }
108 - }
109 124
110 - public function activation_redirect($plugin) {
111 - if( $plugin == 'ultimate-post/ultimate-post.php' ) {
112 - exit(wp_redirect(admin_url('admin.php?page=ultp-settings')));
113 - }
114 - }
125 + /**
126 + * Add admin body class in editor.
127 + *
128 + * @since v.3.1.6
129 + * @param STRING $classes The existing admin body classes.
130 + * @return STRING Modified admin body classes.
131 + */
132 + public function add_admin_body_class( $classes ) {
133 + $classes .= ' postx-admin-page ';
134 + return $classes;
135 + }
115 136
116 - // Require Blocks
117 - public function blocks() {
118 - require_once ULTP_PATH.'blocks/Post_List_1.php';
119 - require_once ULTP_PATH.'blocks/Post_List_2.php';
120 - require_once ULTP_PATH.'blocks/Post_List_3.php';
121 - require_once ULTP_PATH.'blocks/Post_List_4.php';
122 - require_once ULTP_PATH.'blocks/Post_Slider_1.php';
123 - require_once ULTP_PATH.'blocks/Post_Grid_1.php';
124 - require_once ULTP_PATH.'blocks/Post_Grid_2.php';
125 - require_once ULTP_PATH.'blocks/Post_Grid_3.php';
126 - require_once ULTP_PATH.'blocks/Post_Grid_4.php';
127 - require_once ULTP_PATH.'blocks/Post_Grid_5.php';
128 - require_once ULTP_PATH.'blocks/Post_Grid_6.php';
129 - require_once ULTP_PATH.'blocks/Post_Grid_7.php';
130 - require_once ULTP_PATH.'blocks/Heading.php';
131 - require_once ULTP_PATH.'blocks/Image.php';
132 - require_once ULTP_PATH.'blocks/Post_Module_1.php';
133 - require_once ULTP_PATH.'blocks/Post_Module_2.php';
134 - $this->all_blocks['ultimate-post_post-list-1'] = new \ULTP\blocks\Post_List_1();
135 - $this->all_blocks['ultimate-post_post-list-2'] = new \ULTP\blocks\Post_List_2();
136 - $this->all_blocks['ultimate-post_post-list-3'] = new \ULTP\blocks\Post_List_3();
137 - $this->all_blocks['ultimate-post_post-list-4'] = new \ULTP\blocks\Post_List_4();
138 - $this->all_blocks['ultimate-post_post-slider-1'] = new \ULTP\blocks\Post_Slider_1();
139 - $this->all_blocks['ultimate-post_post-grid-1'] = new \ULTP\blocks\Post_Grid_1();
140 - $this->all_blocks['ultimate-post_post-grid-2'] = new \ULTP\blocks\Post_Grid_2();
141 - $this->all_blocks['ultimate-post_post-grid-3'] = new \ULTP\blocks\Post_Grid_3();
142 - $this->all_blocks['ultimate-post_post-grid-4'] = new \ULTP\blocks\Post_Grid_4();
143 - $this->all_blocks['ultimate-post_post-grid-5'] = new \ULTP\blocks\Post_Grid_5();
144 - $this->all_blocks['ultimate-post_post-grid-6'] = new \ULTP\blocks\Post_Grid_6();
145 - $this->all_blocks['ultimate-post_post-grid-7'] = new \ULTP\blocks\Post_Grid_7();
146 - $this->all_blocks['ultimate-post_heading'] = new \ULTP\blocks\Heading();
147 - $this->all_blocks['ultimate-post_image'] = new \ULTP\blocks\Image();
148 - $this->all_blocks['ultimate-post_post-module-1'] = new \ULTP\blocks\Post_Module_1();
149 - $this->all_blocks['ultimate-post_post-module-2'] = new \ULTP\blocks\Post_Module_2();
150 - }
137 + /**
138 + * Add body class in front end.
139 + *
140 + * @since v.3.1.6
141 + * @param ARRAY $classes The existing body classes.
142 + * @return ARRAY Modified body classes.
143 + */
144 + public function add_body_class( $classes ) {
145 + $classes[] = 'postx-page';
146 + return $classes;
147 + }
151 148
152 - // Require Categories
153 - public function requires() {
154 - require_once ULTP_PATH.'classes/Notice.php';
155 - require_once ULTP_PATH.'classes/Styles.php';
156 - require_once ULTP_PATH.'classes/Options.php';
157 - require_once ULTP_PATH.'classes/REST_API.php';
158 - require_once ULTP_PATH.'classes/Caches.php';
159 - new \ULTP\Caches();
160 - new \ULTP\Options();
161 - new \ULTP\Styles();
162 - new \ULTP\Notice();
163 - }
149 + /**
150 + * Post view counter for every post.
151 + *
152 + * @since v.1.0.0
153 + * @param INT $post_id The post ID.
154 + * @return NULL No return value.
155 + */
156 + public function popular_posts_tracker_callback( $post_id ) {
157 + if ( ! is_single() ) {
158 + return;
159 + }
160 + global $post;
161 + $post_id = isset( $post->ID ) ? $post->ID : '';
162 + $isEnable = apply_filters( 'ultp_view_cookies', true );
163 + // add_filter( 'ultp_view_cookies', '__return_false' );
164 + $cookies_disable = ultimate_post()->get_setting( 'disable_view_cookies' );
165 + if ( $post_id && $isEnable && $cookies_disable != 'yes' ) {
166 + $has_cookie = isset( $_COOKIE[ 'ultp_view_' . $post_id ] ) ? sanitize_text_field( $_COOKIE[ 'ultp_view_' . $post_id ] ) : false;
167 + if ( ! $has_cookie ) {
168 + $count = (int) get_post_meta( $post_id, '__post_views_count', true );
169 + update_post_meta( $post_id, '__post_views_count', $count ? (int) $count + 1 : 1 );
170 + setcookie( 'ultp_view_' . $post_id, 1, time() + 86400, COOKIEPATH ); // 1 days cookies
171 + }
172 + }
173 + }
164 174
165 - // Block Categories
166 - public function register_category_callback( $categories, $post ) {
167 - return array_merge(
168 - array(
169 - array(
170 - 'slug' => 'ultimate-post',
171 - 'title' => __( 'Gutenberg Post Blocks', 'ultimate-post' )
172 - )
173 - ), $categories
174 - );
175 - }
175 + /**
176 + * Set image sizes for the plugin.
177 + *
178 + * @since v.1.0.0
179 + * @return void No return value.
180 + */
181 + public function add_image_size() {
182 + $size_disable = ultimate_post()->get_setting( 'disable_image_size' );
183 + if ( $size_disable != 'yes' ) {
184 + add_image_size( 'ultp_layout_landscape_large', 1200, 800, true );
185 + add_image_size( 'ultp_layout_landscape', 870, 570, true );
186 + add_image_size( 'ultp_layout_portrait', 600, 900, true );
187 + add_image_size( 'ultp_layout_square', 600, 600, true );
188 + }
189 + }
176 190
177 - // Post View Post Meta Set
178 - public function popular_posts_tracker_callback($post_id) {
179 - if (!is_single()){ return; }
180 - global $post;
181 - if (empty($post_id)) { $post_id = $post->ID; }
182 - $count = (int)get_post_meta( $post_id, '__post_views_count', true );
183 - update_post_meta($post_id, '__post_views_count', $count ? (int)$count + 1 : 1 );
184 - }
191 + /**
192 + * Block categories initialization.
193 + *
194 + * @since v.1.0.0
195 + * @param ARRAY $categories The block categories.
196 + * @param ARRAY $post The post object.
197 + * @return ARRAY Modified block categories.
198 + */
199 + public function register_category_callback( $categories, $post ) {
200 + $attr = array(
201 + array(
202 + 'slug' => 'ultimate-post',
203 + 'title' => __( 'PostX - Gutenberg Post Blocks', 'ultimate-post' ),
204 + ),
205 + array(
206 + 'slug' => 'postx-site-builder',
207 + 'title' => __( 'PostX Site Builder', 'ultimate-post' ),
208 + ),
209 + );
210 + return array_merge( $attr, $categories );
211 + }
185 212
186 - // Set Image Size
187 - public function add_image_size() {
188 - add_image_size('ultp_layout_landscape_large', 1200, 800, true);
189 - add_image_size('ultp_layout_landscape', 870, 570, true);
190 - add_image_size('ultp_layout_portrait', 600, 900, true);
191 - add_image_size('ultp_layout_square', 600, 600, true);
192 - }
213 + /**
214 + * Add support for CSS to use SVG.
215 + *
216 + * @since 4.0.0
217 + * @param ARRAY $styles The allowed CSS styles.
218 + * @return ARRAY Modified allowed CSS styles.
219 + */
220 + public function ultp_handle_safe_style_css( $styles ) {
221 + if ( ! is_multisite() && ! current_user_can( 'edit_posts' ) ) {
222 + return $styles;
223 + }
224 + return array_merge(
225 + $styles,
226 + array(
227 + 'opacity',
228 + // for SVG gradients.
229 + // 'stop-opacity',
230 + // 'stop-color',
231 + )
232 + );
233 + }
193 234
194 - // Include Addons directory
195 - public function include_addons() {
196 - $addons_dir = array_filter(glob(ULTP_PATH.'addons/*'), 'is_dir');
197 - if (count($addons_dir) > 0) {
198 - foreach( $addons_dir as $key => $value ) {
199 - $addon_dir_name = str_replace(dirname($value).'/', '', $value);
200 - $file_name = ULTP_PATH . 'addons/'.$addon_dir_name.'/init.php';
201 - if ( file_exists($file_name) ) {
202 - include_once $file_name;
203 - }
235 + /**
236 + * Add support for HTML tags to use SVG.
237 + *
238 + * @since 4.0.0
239 + * @param ARRAY $tags The allowed HTML tags.
240 + * @param STRING $context The context for allowed HTML.
241 + * @return ARRAY Modified allowed HTML tags.
242 + */
243 + public function ultp_handle_allowed_html( $tags, $context ) {
244 + if ( 'post' !== $context && ! is_multisite() && ! current_user_can( 'edit_posts' ) ) {
245 + return $tags;
246 + }
247 + if ( ! isset( $tags['svg'] ) ) {
248 + $tags['svg'] = array_merge(
249 + array(
250 + 'xmlns' => true,
251 + // 'xmlns:xlink' => true,
252 + // 'xlink:href' => true,
253 + // 'xml:id' => true,
254 + // 'xlink:title' => true,
255 + // 'xml:space' => true,
256 + 'viewbox' => true,
257 + 'enable-background' => true,
258 + 'version' => true,
259 + 'preserveaspectratio' => true,
260 + 'fill' => true,
261 + )
262 + );
263 + }
264 + if ( ! isset( $tags['path'] ) || ! is_array( $tags['path'] ) ) {
265 + $tags['path'] = array();
266 + }
267 +
268 + $tags['path'] = array_merge(
269 + $tags['path'],
270 + array(
271 + 'd' => true,
272 + 'stroke' => true,
273 + 'stroke-miterlimit' => true,
274 + 'data-original' => true,
275 + 'class' => true,
276 + 'transform' => true,
277 + 'style' => true,
278 + 'opacity' => true,
279 + 'fill' => true,
280 + 'stroke-width' => true,
281 + 'stroke-linecap' => true,
282 + 'stroke-linejoin' => true,
283 + )
284 + );
285 +
286 + if ( ! isset( $tags['g'] ) ) {
287 + $tags['g'] = array(
288 + 'transform' => true,
289 + 'clip-path' => true,
290 + );
291 + }
292 + if ( ! isset( $tags['clippath'] ) ) {
293 + $tags['clippath'] = array();
294 + }
295 + if ( ! isset( $tags['defs'] ) ) {
296 + $tags['defs'] = array();
297 + }
298 + if ( ! isset( $tags['rect'] ) ) {
299 + $tags['rect'] = array(
300 + 'rx' => true,
301 + 'height' => true,
302 + 'width' => true,
303 + 'transform' => true,
304 + 'x' => true,
305 + 'fill' => true,
306 + );
307 + }
308 + if ( ! isset( $tags['circle'] ) ) {
309 + $tags['circle'] = array(
310 + 'cx' => true,
311 + 'cy' => true,
312 + 'transform' => true,
313 + 'r' => true,
314 + );
315 + }
316 + if ( ! isset( $tags['polygon'] ) ) {
317 + $tags['polygon'] = array(
318 + 'points' => true,
319 + );
320 + }
321 + if ( ! isset( $tags['lineargradient'] ) ) {
322 + $tags['lineargradient'] = array(
323 + 'gradienttransform' => true,
324 + 'id' => true,
325 + );
326 + }
327 + if ( ! isset( $tags['stop'] ) ) {
328 + $tags['stop'] = array(
329 + 'offset' => true,
330 + 'stop-color' => true,
331 + 'style' => true,
332 + 'stop-opacity' => true,
333 + );
334 + }
335 + return $tags;
336 + }
337 +
338 + /**
339 + * Plugin activation callback.
340 + *
341 + * @since v.1.1.0
342 + * @param STRING $plugin The plugin file path.
343 + * @return NULL No return value.
344 + */
345 + public function ultp_plugin_activation( $plugin ) {
346 + if ( wp_doing_ajax() ) {
347 + return;
348 + }
349 + if ( $plugin == 'ultimate-post/ultimate-post.php' ) {
350 + if ( wp_doing_ajax() || is_network_admin() || isset( $_GET['activate-multi'] ) || isset( $_POST['action'] ) && 'activate-selected' == $_POST['action'] ) {
351 + return;
204 352 }
353 + if ( ultimate_post()->get_setting( 'init_setup' ) != 'yes' ) {
354 + ultimate_post()->set_setting( 'init_setup', 'yes' );
355 + exit(wp_safe_redirect(admin_url('admin.php?page=ultp-setup-wizard'))); //phpcs:ignore
356 + } else {
357 + exit(wp_safe_redirect(admin_url('admin.php?page=ultp-settings#home'))); //phpcs:ignore
358 + }
205 359 }
206 - }
360 + }
207 361
362 + /**
363 + * Enqueue option panel CSS and JS scripts.
364 + *
365 + * @since v.1.0.0
366 + * @return void No return value.
367 + */
368 + public function register_option_panel_scripts_callback() {
369 + $is_active = ultimate_post()->is_lc_active();
370 + $is_expired = Xpo::is_lc_expired();
208 371
209 - public function ultp_addon_callback() {
210 - if (!wp_verify_nonce($_REQUEST['wpnonce'], 'ultp-nonce') && $local){
211 - return ;
212 - }
213 - $addon_name = sanitize_text_field($_POST['addon']);
214 - $addon_value = sanitize_text_field($_POST['value']);
215 - if ($addon_name) {
216 - $addon_data = ultimate_post()->get_setting();
217 - $addon_data[$addon_name] = $addon_value;
218 - $GLOBALS['wopb_settings'][$addon_name] = $addon_value;
219 - update_option('ultp_options', $addon_data);
220 - }
221 - }
372 + $license_key = Xpo::get_lc_key();
373 + $_page = isset($_GET['page']) ? sanitize_text_field($_GET['page']) : ''; // @codingStandardsIgnoreLine
374 + $post_type = get_post_type();
375 + $is_woocommerce_active = class_exists( 'WooCommerce' ) ? true : false;
222 376
223 - public function ultp_next_prev_callback() {
224 - if (!wp_verify_nonce($_REQUEST['wpnonce'], 'ultp-nonce') && $local){
225 - return ;
226 - }
377 + wp_enqueue_style( 'wp-color-picker' );
378 + wp_enqueue_script( 'wp-color-picker' );
227 379
228 - $paged = sanitize_text_field($_POST['paged']);
229 - $blockId = sanitize_text_field($_POST['blockId']);
230 - $postId = sanitize_text_field($_POST['postId']);
231 - $blockRaw = sanitize_text_field($_POST['blockName']);
232 - $blockName = str_replace('_','/', $blockRaw);
380 + wp_enqueue_script( 'ultp-option-script', ULTP_URL . 'assets/js/ultp-option.js', array( 'jquery' ), ULTP_VER, true );
381 + wp_enqueue_style( 'ultp-option-style', ULTP_URL . 'assets/css/ultp-option.css', array(), ULTP_VER );
382 + wp_localize_script(
383 + 'ultp-option-script',
384 + 'ultp_option_panel',
385 + array(
386 + 'url' => ULTP_URL,
387 + 'version' => ULTP_VER,
388 + 'active' => $is_active,
389 + 'expierd' => $is_expired,
390 + 'security' => wp_create_nonce( 'ultp-nonce' ),
391 + 'ajax' => admin_url( 'admin-ajax.php' ),
392 + 'settings' => ultimate_post()->get_setting(),
393 + 'post_type' => $post_type,
394 + 'saved_template_url' => admin_url( 'admin.php?page=ultp-settings#saved-templates' ),
395 + 'woocommerce' => $is_woocommerce_active,
396 + )
397 + );
233 398
234 - if( $paged && $blockId && $postId && $blockName ) {
235 - $post = get_post($postId);
236 - if (has_blocks($post->post_content)) {
237 - $blocks = parse_blocks($post->post_content);
238 - $this->block_return($blocks, $paged, $blockId, $blockRaw, $blockName);
239 - }
240 - }
241 - }
399 + if ( $post_type == 'ultp_custom_font' ) {
400 + $font_settings = ultimate_post()->get_setting( 'ultp_custom_font' );
401 + if ( $font_settings == 'true' ) {
402 + wp_enqueue_media();
403 + }
404 + }
242 405
243 - public function filter_block_return($blocks, $blockId, $blockRaw, $blockName, $taxtype, $taxonomy) {
244 - foreach ($blocks as $key => $value) {
245 - if($blockName == $value['blockName']) {
246 - if($value['attrs']['blockId'] == $blockId) {
247 - $attr = $this->all_blocks[$blockRaw]->get_attributes(true);
248 - if($taxonomy) {
249 - if($taxtype == 'category'){
250 - $value['attrs']['queryCat'] = json_encode(array($taxonomy));
251 - }elseif($taxtype == 'post_tag'){
252 - $value['attrs']['queryTag'] = json_encode(array($taxonomy));
253 - }
254 - $value['attrs']['queryTax'] = $taxtype;
255 - }
256 - if(isset($value['attrs']['queryNumber'])){
257 - $value['attrs']['queryNumber'] = $value['attrs']['queryNumber'];
258 - }
259 - $attr = array_merge($attr, $value['attrs']);
260 - echo $this->all_blocks[$blockRaw]->content($attr, true);
261 - die();
262 - }
263 - }
264 - if(!empty($value['innerBlocks'])){
265 - $this->filter_block_return($value['innerBlocks'], $blockId, $blockRaw, $blockName, $taxtype, $taxonomy);
266 - }
267 - }
268 - }
406 + /* === Installation Wizard === */
407 + if ( $_page == 'ultp-setup-wizard' ) {
408 + wp_enqueue_script( 'ultp-initial-setup-script', ULTP_URL . 'assets/js/ultp_initial_setup_min.js', array( 'wp-i18n', 'wp-api-fetch', 'wp-api-request' ), ULTP_VER, true );
409 + wp_set_script_translations( 'ultp-initial-setup-script', 'ultimate-post', ULTP_PATH . 'languages/' );
410 + }
269 411
412 + /* === Builder And Setting Pannel === */
413 + if ( get_post_type( get_the_ID() ) == 'ultp_builder' ) {
414 + wp_enqueue_script( 'ultp-conditions-script', ULTP_URL . 'addons/builder/assets/js/conditions.js', array( 'wp-i18n', 'wp-api-fetch', 'wp-components', 'wp-i18n', 'wp-blocks' ), ULTP_VER, true );
415 + wp_localize_script(
416 + 'ultp-conditions-script',
417 + 'ultp_condition',
418 + array(
419 + 'url' => ULTP_URL,
420 + 'active' => $is_active,
421 + 'builder_url' => admin_url( 'admin.php?page=ultp-settings#builder' ),
422 + )
423 + );
424 + wp_set_script_translations( 'ultp-conditions-script', 'ultimate-post', ULTP_PATH . 'languages/' );
425 + }
270 426
271 - public function ultp_filter_callback() {
272 - if (!wp_verify_nonce($_REQUEST['wpnonce'], 'ultp-nonce') && $local){
273 - return ;
274 - }
275 -
276 - $taxtype = sanitize_text_field($_POST['taxtype']);
277 - $blockId = sanitize_text_field($_POST['blockId']);
278 - $postId = sanitize_text_field($_POST['postId']);
279 - $taxonomy = sanitize_text_field($_POST['taxonomy']);
280 - $blockRaw = sanitize_text_field($_POST['blockName']);
281 - $blockName = str_replace('_','/', $blockRaw);
427 + /* === Dashboard === */
428 + if ( $_page == 'ultp-settings' ) {
429 + wp_enqueue_script( 'ultp-dashboard-script', ULTP_URL . 'assets/js/ultp_dashboard_min.js', array( 'wp-i18n', 'wp-api-fetch', 'wp-api-request', 'wp-components', 'wp-blocks' ), ULTP_VER, true );
430 + $user_info = get_userdata( get_current_user_id() );
431 + wp_localize_script(
432 + 'ultp-dashboard-script',
433 + 'ultp_dashboard_pannel',
434 + array_merge(
435 + array(
436 + 'ajax' => admin_url( 'admin-ajax.php' ),
437 + 'security' => wp_create_nonce( 'ultp-nonce' ),
438 + 'url' => ULTP_URL,
439 + 'active' => $is_active,
440 + 'expierd' => $is_expired,
441 + 'license' => $license_key,
442 + 'settings' => ultimate_post()->get_setting(),
443 + 'addons_settings' => apply_filters( 'ultp_settings', array() ),
444 + 'builder_url' => admin_url( 'admin.php?page=ultp-settings#builder' ),
445 + 'version' => ULTP_VER,
446 + 'setup_wizard_link' => admin_url( 'admin.php?page=ultp-setup-wizard' ),
447 + 'is_free' => ! $is_active,
448 + 'user_email' => wp_get_current_user()->user_email,
449 + 'home_url' => home_url(),
450 + 'generalDiscount' => get_transient( 'ultp_generalDiscount' ),
451 + 'helloBar' => Notice::get_hellobar_config(),
452 + 'userInfo' => array(
453 + 'name' => $user_info->first_name ? $user_info->first_name . ( $user_info->last_name ? ' ' . $user_info->last_name : '' ) : $user_info->user_login,
454 + 'email' => $user_info->user_email,
455 + ),
456 + ),
457 + Xpo::get_wow_products_details()
458 + )
459 + );
460 + wp_set_script_translations( 'ultp-dashboard-script', 'ultimate-post', ULTP_PATH . 'languages/' );
461 + }
462 + }
282 463
283 - if( $taxtype ) {
284 - $post = get_post($postId);
285 - if (has_blocks($post->post_content)) {
286 - $blocks = parse_blocks($post->post_content);
287 - $this->filter_block_return($blocks, $blockId, $blockRaw, $blockName, $taxtype, $taxonomy);
288 - }
289 - }
290 - }
464 + /**
465 + * Enqueue backend CSS and JS scripts for the block editor.
466 + *
467 + * @since v.1.0.0
468 + * @return void No return value.
469 + */
470 + public function register_block_scripts_editor_area() {
471 + ultimate_post()->register_scripts_common();
472 + $is_expired = Xpo::is_lc_expired();
473 + global $pagenow;
474 + $depends = 'wp-editor';
475 + if ( $pagenow === 'widgets.php' ) {
476 + $depends = 'wp-edit-widgets';
477 + }
478 + wp_enqueue_script( 'ultp-blocks-editor-script', ULTP_URL . 'assets/js/editor.blocks.js', array( 'wp-i18n', 'wp-element', 'wp-blocks', 'wp-components', $depends ), ULTP_VER, true );
479 + wp_enqueue_style( 'ultp-blocks-editor-css', ULTP_URL . 'assets/css/blocks.editor.css', array(), ULTP_VER );
480 + if ( is_rtl() ) {
481 + wp_enqueue_style( 'ultp-blocks-editor-rtl-css', ULTP_URL . 'assets/css/rtl.css', array(), ULTP_VER );
482 + }
483 + $is_active = ultimate_post()->is_lc_active();
484 + $post_type = get_post_type();
291 485
292 - public function ultp_pagination_callback() {
293 - if (!wp_verify_nonce($_REQUEST['wpnonce'], 'ultp-nonce') && $local) {
294 - return ;
295 - }
486 + // Custom Font Support Added
487 + $font_settings = ultimate_post()->get_setting( 'ultp_custom_font' );
488 + $custom_fonts = array();
489 + if ( $font_settings == 'true' ) {
490 + $args = array(
491 + 'post_type' => 'ultp_custom_font',
492 + 'post_status' => 'publish',
493 + 'numberposts' => -1,
494 + 'order' => 'ASC',
495 + );
496 + $posts = get_posts( $args );
497 + if ( $posts ) {
498 + foreach ( $posts as $post ) {
499 + setup_postdata( $post );
500 + $font = get_post_meta( $post->ID, '__font_settings', true );
296 501
297 - $paged = sanitize_text_field($_POST['paged']);
298 - $blockId = sanitize_text_field($_POST['blockId']);
299 - $postId = sanitize_text_field($_POST['postId']);
300 - $blockRaw = sanitize_text_field($_POST['blockName']);
301 - $blockName = str_replace('_','/', $blockRaw);
502 + if ( $font ) {
503 + array_push(
504 + $custom_fonts,
505 + array(
506 + 'title' => $post->post_title,
507 + 'font' => $font,
508 + )
509 + );
510 + }
511 + }
512 + wp_reset_postdata();
513 + }
514 + }
302 515
303 - if($paged) {
304 - $post = get_post($postId);
305 - if (has_blocks($post->post_content)) {
306 - $blocks = parse_blocks($post->post_content);
307 - $this->block_return($blocks, $paged, $blockId, $blockRaw, $blockName);
308 - }
309 - }
310 - }
516 + wp_localize_script(
517 + 'ultp-blocks-editor-script',
518 + 'ultp_data',
519 + array(
520 + 'url' => ULTP_URL,
521 + 'ajax' => admin_url( 'admin-ajax.php' ),
522 + 'security' => wp_create_nonce( 'ultp-nonce' ),
523 + 'hide_import_btn' => ultimate_post()->get_setting( 'hide_import_btn' ),
524 + 'premium_link' => Xpo::generate_utm_link(),
525 + 'license' => $is_active ? Xpo::get_lc_key() : '',
526 + 'active' => $is_active,
527 + 'archive' => ultimate_post()->is_archive_builder(),
528 + 'settings' => ultimate_post()->get_setting(),
529 + 'post_type' => $post_type == 'premade' ? 'ultp_builder' : $post_type, // premade used for ultp.wpxpo.com
530 + 'date_format' => get_option( 'date_format' ),
531 + 'time_format' => get_option( 'time_format' ),
532 + 'blog' => get_current_blog_id(),
533 + 'affiliate_id' => apply_filters( 'ultp_affiliate_id', false ),
534 + 'category_url' => admin_url( 'edit-tags.php?taxonomy=category' ),
535 + 'disable_image_size' => ultimate_post()->get_setting( 'disable_image_size' ),
536 + 'dark_logo' => get_option( 'ultp_site_dark_logo' ) ? get_option( 'ultp_site_dark_logo' ) : false,
537 + 'builder_url' => admin_url( 'admin.php?page=ultp-settings#builder' ),
538 + 'custom_fonts' => $custom_fonts,
539 + 'expierd' => $is_expired,
540 + )
541 + );
542 + wp_set_script_translations( 'ultp-blocks-editor-script', 'ultimate-post', ULTP_PATH . 'languages/' );
543 + }
311 544
312 545
313 - public function block_return($blocks, $paged, $blockId, $blockRaw, $blockName) {
314 - foreach ($blocks as $key => $value) {
315 - if($blockName == $value['blockName']) {
316 - if($value['attrs']['blockId'] == $blockId) {
317 - $attr = $this->all_blocks[$blockRaw]->get_attributes(true);
318 - $attr['paged'] = $paged;
319 - $attr = array_merge($attr, $value['attrs']);
320 - echo $this->all_blocks[$blockRaw]->content($attr, true);
321 - die();
322 - }
323 - }
324 - if(!empty($value['innerBlocks'])){
325 - $this->block_return($value['innerBlocks'], $paged, $blockId, $blockRaw, $blockName);
326 - }
327 - }
328 - }
329 -
330 -}
546 + /**
547 + * Fire when plugin is first installed.
548 + *
549 + * @since v.1.0.0
550 + * @return void No return value.
551 + */
552 + public function plugin_activation_hook() {
553 + $data = get_option( 'ultp_options', array() );
554 + $currentDate = new \DateTime();
555 + $currentDate->setTime( 0, 0, 0, 0 );
556 + $init_data = array(
557 + 'preloader_style' => 'style1',
558 + 'preloader_color' => '#037fff',
559 + 'container_width' => '1140',
560 + 'hide_import_btn' => '',
561 + 'disable_image_size' => '',
562 + 'disable_view_cookies' => '',
563 + 'disable_google_font' => '',
564 + 'ultp_templates' => 'true',
565 + 'ultp_elementor' => 'true',
566 + 'ultp_table_of_content' => 'true',
567 + 'ultp_builder' => 'true',
568 + 'ultp_dynamic_content' => 'true',
569 + 'ultp_custom_font' => 'true',
570 + 'ultp_chatgpt' => 'true',
571 + 'post_grid_1' => 'yes',
572 + 'post_grid_2' => 'yes',
573 + 'post_grid_3' => 'yes',
574 + 'post_grid_4' => 'yes',
575 + 'post_grid_5' => 'yes',
576 + 'post_grid_6' => 'yes',
577 + 'post_grid_7' => 'yes',
578 + 'post_list_1' => 'yes',
579 + 'post_list_2' => 'yes',
580 + 'post_list_3' => 'yes',
581 + 'post_list_4' => 'yes',
582 + 'post_module_1' => 'yes',
583 + 'post_module_2' => 'yes',
584 + 'post_slider_1' => 'yes',
585 + 'post_slider_2' => 'yes',
586 + 'heading' => 'yes',
587 + 'image' => 'yes',
588 + 'taxonomy' => 'yes',
589 + 'wrapper' => 'yes',
590 + 'news_ticker' => 'yes',
591 + 'accordion' => 'yes',
592 + 'star_rating' => 'yes',
593 + 'youtube_gallery' => 'yes',
594 + 'builder_advance_post_meta' => 'yes',
595 + 'builder_archive_title' => 'yes',
596 + 'builder_author_box' => 'yes',
597 + 'builder_post_next_previous' => 'yes',
598 + 'builder_post_author_meta' => 'yes',
599 + 'builder_post_breadcrumb' => 'yes',
600 + 'builder_post_category' => 'yes',
601 + 'builder_post_comment_count' => 'yes',
602 + 'builder_post_comments' => 'yes',
603 + 'builder_post_content' => 'yes',
604 + 'builder_post_date_meta' => 'yes',
605 + 'builder_post_excerpt' => 'yes',
606 + 'builder_post_featured_image' => 'yes',
607 + 'builder_post_reading_time' => 'yes',
608 + 'builder_post_social_share' => 'yes',
609 + 'builder_post_tag' => 'yes',
610 + 'builder_post_title' => 'yes',
611 + 'builder_post_view_count' => 'yes',
612 + 'save_version' => wp_rand( 1, 1000 ),
613 + 'activated_date' => $currentDate->getTimestamp(),
614 + );
615 + if ( empty( $data ) ) {
616 + update_option( 'ultp_options', $init_data );
617 + $GLOBALS['ultp_settings'] = $init_data;
618 + } else {
619 + foreach ( $init_data as $key => $single ) {
620 + if ( ! isset( $data[ $key ] ) ) {
621 + $data[ $key ] = $single;
622 + }
623 + }
624 + update_option( 'ultp_options', $data );
625 + $GLOBALS['ultp_settings'] = $data;
626 + }
627 + if ( ! get_transient( 'wpxpo_installation_date' ) ) {
628 + set_transient( 'wpxpo_installation_date', 'yes', 5 * DAY_IN_SECONDS ); // 5 Days Notice
629 + }
630 + }
631 +}