PluginProbe
Post Grid Gutenberg Blocks – PostX / 2.7.6
Post Grid Gutenberg Blocks – PostX v2.7.6
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 2.1.2 All 237 releases
ultimate-post / classes / Styles.php

Styles.php in Post Grid Gutenberg Blocks – PostX 2.7.6, at classes/Styles.php

376 lines 11.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Styles Add and Style REST API Action.
4 *
5 * @package ULTP\Styles
6 * @since v.1.0.0
7 */
8 namespace ULTP;
9
10 defined('ABSPATH') || exit;
11
12 /**
13 * Styles class.
14 */
15 class Styles {
16
17 /**
18 * Setup class.
19 *
20 * @since v.1.0.0
21 */
22 public function __construct() {
23 $this->require_block_css();
24 add_action('rest_api_init', array($this, 'save_block_css_callback'));
25 }
26
27
28 /**
29 * REST API Action
30 *
31 * @since v.1.0.0
32 * @return NULL
33 */
34 public function save_block_css_callback() {
35 register_rest_route(
36 'ultp/v1',
37 '/save_block_css/',
38 array(
39 array(
40 'methods' => 'POST',
41 'callback' => array( $this, 'save_block_content_css'),
42 'permission_callback' => function () {
43 return current_user_can( 'edit_posts' );
44 },
45 'args' => array()
46 )
47 )
48 );
49 register_rest_route(
50 'ultp/v1',
51 '/get_reusable_posts/',
52 array(
53 array(
54 'methods' => 'POST',
55 'callback' => array($this, 'get_reusable_posts_call'),
56 'permission_callback' => function () {
57 return current_user_can('edit_posts');
58 },
59 'args' => array()
60 )
61 )
62 );
63 register_rest_route(
64 'ultp/v1',
65 '/appened_css/',
66 array(
67 array(
68 'methods' => 'POST',
69 'callback' => array($this, 'appened_css_call'),
70 'permission_callback' => function () {
71 return current_user_can('edit_posts');
72 },
73 'args' => array()
74 )
75 )
76 );
77 register_rest_route(
78 'ultp/v1',
79 '/action_option/',
80 array(
81 array(
82 'methods' => 'POST',
83 'callback' => array($this, 'global_settings_action'),
84 'permission_callback' => function () {
85 return current_user_can('edit_posts');
86 },
87 'args' => array()
88 )
89 )
90 );
91 }
92
93
94 /**
95 * Get and Set PostX Global Settings
96 *
97 * @since v.2.4.24
98 * @param OBJECT | Request Param of the REST API
99 * @return ARRAY | Array of the Custom Message
100 */
101 public function global_settings_action($server) {
102 $post = $server->get_params();
103 if (isset($post['type'])) {
104 if ($post['type'] == 'set') {
105 update_option('postx_global', $post['data']);
106 return ['success' => true];
107 } else {
108 return ['success' => true, 'data' => get_option('postx_global', [])];
109 }
110 } else {
111 return ['success' => false];
112 }
113 }
114
115 /**
116 * Save Import CSS in the top of the File
117 *
118 * @since v.1.0.0
119 * @param OBJECT | Request Param of the REST API
120 * @return ARRAY/Exception | Array of the Custom Message
121 */
122 public function appened_css_call($server) {
123 global $wp_filesystem;
124 if (! $wp_filesystem ) {
125 require_once( ABSPATH . 'wp-admin/includes/file.php' );
126 }
127 $post = $server->get_params();
128 $css = $post['inner_css'];
129 $post_id = (int) sanitize_text_field($post['post_id']);
130 if ($post_id) {
131 $upload_dir_url = wp_upload_dir();
132 $filename = "ultp-css-{$post_id}.css";
133 $dir = trailingslashit($upload_dir_url['basedir']).'ultimate-post/';
134 update_post_meta($post_id, '_wopb_css', $css);
135 WP_Filesystem( false, $upload_dir_url['basedir'], true );
136 if (! $wp_filesystem->is_dir( $dir ) ) {
137 $wp_filesystem->mkdir( $dir );
138 }
139 if (! $wp_filesystem->put_contents( $dir . $filename, $css ) ) {
140 throw new Exception(__('CSS can not be saved due to permission!!!', 'ultimate-post' ));
141 }
142 wp_send_json_success(array('success' => true, 'message' => __('Data retrive done', 'ultimate-post')));
143 } else {
144 return array('success' => false, 'message' => __('Data not found!!', 'ultimate-post'));
145 }
146 }
147
148
149 /**
150 * Save Import CSS in the top of the File
151 *
152 * @since v.1.0.0
153 * @param OBJECT | Request Param of the REST API
154 * @return ARRAY/Exception | Array of the Custom Message
155 */
156 public function get_reusable_posts_call($server) {
157 $post = $server->get_params();
158 if (isset($post['postId'])) {
159 return array('success' => true, 'data'=> get_post($post['postId'])->post_content, 'message' => __('Data retrive done', 'ultimate-post'));
160 } else {
161 return array('success' => false, 'message' => __('Data not found!!', 'ultimate-post'));
162 }
163 }
164
165
166 /**
167 * Save Import CSS in the top of the File
168 *
169 * @since v.1.0.0
170 * @param OBJECT | Request Param of the REST API
171 * @return ARRAY/Exception | Array of the Custom Message
172 */
173 public function save_block_content_css($request) {
174 try{
175 global $wp_filesystem;
176 if (! $wp_filesystem ) {
177 require_once( ABSPATH . 'wp-admin/includes/file.php' );
178 }
179 $params = $request->get_params();
180 $post_id = sanitize_text_field($params['post_id']);
181 if ($post_id == 'ultp-widget' && $params['has_block']) {
182 update_option($post_id, $params['block_css']);
183 return ['success' => true, 'message' => __('Widget CSS Saved', 'ultimate-post')];
184 }
185
186 $post_id = (int) $post_id;
187 $filename = "ultp-css-{$post_id}.css";
188 $upload_dir_url = wp_upload_dir();
189 $dir = trailingslashit($upload_dir_url['basedir']) . 'ultimate-post/';
190
191 if ($params['has_block']) {
192 // Set Saving ID for Clean Cache
193 ultimate_post()->set_setting('save_version', rand(1, 1000));
194
195 update_post_meta($post_id, '_ultp_active', 'yes');
196 $ultp_block_css = $this->set_top_css($params['block_css']);
197
198 // Preview Check
199 if ($params['preview']) {
200 set_transient('_ultp_preview_'.$post_id, $ultp_block_css , 60*60);
201 return ['success' => true];
202 }
203
204 WP_Filesystem( false, $upload_dir_url['basedir'], true );
205 if (! $wp_filesystem->is_dir( $dir ) ) {
206 $wp_filesystem->mkdir( $dir );
207 }
208 if (! $wp_filesystem->put_contents( $dir . $filename, $ultp_block_css ) ) {
209 throw new Exception(__('CSS can not be saved due to permission!!!', 'ultimate-post'));
210 }
211 update_post_meta($post_id, '_ultp_css', $ultp_block_css);
212 return ['success'=>true, 'message'=>__('PostX css file has been updated.', 'ultimate-post')];
213 } else {
214 delete_post_meta($post_id, '_ultp_active');
215 if (file_exists($dir.$filename)) {
216 unlink($dir.$filename);
217 }
218 delete_post_meta($post_id, '_ultp_css');
219 return ['success' => true, 'message' => __('Data Delete Done', 'ultimate-post')];
220 }
221 }catch(Exception $e) {
222 return [ 'success'=> false, 'message'=> $e->getMessage() ];
223 }
224 }
225
226
227 /**
228 * Save Import CSS in the top of the File
229 *
230 * @since v.1.0.0
231 * @param STRING | CSS (STRING)
232 * @return STRING | Generated CSS
233 */
234 public function set_top_css($get_css = '') {
235 $css_url = "@import url('https://fonts.googleapis.com/css?family=";
236 $font_exists = substr_count($get_css, $css_url);
237 if ($font_exists) {
238 $pattern = sprintf('/%s(.+?)%s/ims', preg_quote($css_url, '/'), preg_quote("');", '/'));
239 if (preg_match_all($pattern, $get_css, $matches)) {
240 $fonts = $matches[0];
241 $get_css = str_replace($fonts, '', $get_css);
242 if (preg_match_all( '/font-weight[ ]?:[ ]?[\d]{3}[ ]?;/' , $get_css, $matche_weight )) {
243 $weight = array_map( function($val) {
244 $process = trim( str_replace( array( 'font-weight',':',';' ) , '', $val ) );
245 if (is_numeric( $process )) {
246 return $process;
247 }
248 }, $matche_weight[0] );
249 foreach ( $fonts as $key => $val ) {
250 $fonts[$key] = str_replace( "');",'', $val ).':'.implode( ',',$weight )."');";
251 }
252 }
253 $fonts = array_unique($fonts);
254 $get_css = implode('', $fonts).$get_css;
255 }
256 }
257 return $get_css;
258 }
259
260
261 /**
262 * Enqueue CSS in HEAD or as a File
263 *
264 * @since v.1.0.0
265 * @return NULL
266 */
267 public function require_block_css() {
268 $save_as = ultimate_post()->get_setting('css_save_as');
269 $save_as = $save_as ? $save_as : '';
270 if (isset($_GET['preview_id']) && isset($_GET['preview_nonce'])) {
271 add_action('wp_head', array( $this, 'add_block_inline_css' ), 100);
272 } else if ($save_as === 'filesystem') {
273 add_action('wp_enqueue_scripts', array($this, 'add_block_css_file'));
274 } else {
275 add_action('wp_head', array( $this, 'add_block_inline_css' ), 100);
276 }
277
278 add_action('wp_enqueue_scripts', array($this, 'postx_global_css'));
279 add_action('admin_enqueue_scripts', array($this, 'postx_global_css'));
280 }
281
282 /**
283 * Set Global Color Codes
284 *
285 * @since v.1.0.0
286 * @return NULL
287 */
288 public function postx_global_css() {
289 // Preset CSS
290 $global = get_option('postx_global', []);
291 $custom_css = ':root {
292 --preset-color1: '.(isset($global['presetColor1'])?$global['presetColor1']:'#037fff').';
293 --preset-color2: '.(isset($global['presetColor2'])?$global['presetColor2']:'#026fe0').';
294 --preset-color3: '.(isset($global['presetColor3'])?$global['presetColor3']:'#071323').';
295 --preset-color4: '.(isset($global['presetColor4'])?$global['presetColor4']:'#132133').';
296 --preset-color5: '.(isset($global['presetColor5'])?$global['presetColor5']:'#34495e').';
297 --preset-color6: '.(isset($global['presetColor6'])?$global['presetColor6']:'#787676').';
298 --preset-color7: '.(isset($global['presetColor7'])?$global['presetColor7']:'#f0f2f3').';
299 --preset-color8: '.(isset($global['presetColor8'])?$global['presetColor8']:'#f8f9fa').';
300 --preset-color9: '.(isset($global['presetColor9'])?$global['presetColor9']:'#ffffff').';
301 }';
302 wp_register_style( 'wpxpo-global-style', false );
303 wp_enqueue_style( 'wpxpo-global-style' );
304 wp_add_inline_style( 'wpxpo-global-style', $custom_css );
305 }
306
307 /**
308 * Set CSS as File
309 *
310 * @since v.1.0.0
311 * @return NULL
312 */
313 public function add_block_css_file() {
314 ultimate_post()->set_css_style( ultimate_post()->get_ID() );
315 ultimate_post()->set_css_style( get_the_ID() ); // Only for the Builder
316 }
317
318
319 /**
320 * Set Inline CSS in Head
321 *
322 * @since v.1.0.0
323 * @return NULL
324 */
325 public function add_block_inline_css() {
326 $this->set_inline_css_style(ultimate_post()->get_ID());
327 $this->set_inline_css_style(get_the_ID()); // Only for the Builder
328 }
329 public function set_inline_css_style($post_id) {
330 if ($post_id) {
331 $upload_dir_url = wp_get_upload_dir();
332 $upload_css_dir_url = trailingslashit( $upload_dir_url['basedir'] );
333 $css_dir_path = $upload_css_dir_url."ultimate-post/ultp-css-{$post_id}.css";
334
335 // Reusable CSS
336 $reusable_css = '';
337 $reusable_id = ultimate_post()->reusable_id($post_id);
338 foreach ( $reusable_id as $id ) {
339 $reusable_dir_path = $upload_css_dir_url."ultimate-post/ultp-css-{$id}.css";
340 if (file_exists( $reusable_dir_path )) {
341 $reusable_css .= file_get_contents($reusable_dir_path);
342 } else {
343 $reusable_css .= get_post_meta($id, '_ultp_css', true);
344 }
345 }
346 if (isset($_GET['preview_id']) && isset($_GET['preview_nonce'])) {
347 $css = get_transient('_ultp_preview_'.$post_id, true);
348 if (!$css) {
349 $css = get_post_meta($post_id, '_ultp_css', true);
350 }
351 if ($css) {
352 if ($reusable_css) {
353 $css = $this->set_top_css($css.$reusable_css);
354 }
355 echo ultimate_post()->set_inline($css);
356 }
357 } else if (file_exists( $css_dir_path )) {
358 $css = file_get_contents($css_dir_path);
359 if ($reusable_css) {
360 $css = $this->set_top_css($css.$reusable_css);
361 }
362 if ($css) {
363 echo ultimate_post()->set_inline($css);
364 }
365 } else {
366 $css = get_post_meta($post_id, '_ultp_css', true);
367 if ($reusable_css) {
368 $css = $this->set_top_css($css.$reusable_css);
369 }
370 if ($css) {
371 echo ultimate_post()->set_inline($css);
372 }
373 }
374 }
375 }
376 }