PluginProbe
Post Grid Gutenberg Blocks – PostX / 2.5.4
Post Grid Gutenberg Blocks – PostX v2.5.4
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.5.4, at classes/Styles.php

369 lines 10.7 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_posts/',
52 array(
53 array(
54 'methods' => 'POST',
55 'callback' => array($this, 'get_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_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 update_post_meta($post_id, '_ultp_active', 'yes');
193 $ultp_block_css = $this->set_top_css($params['block_css']);
194
195 // Preview Check
196 if ($params['preview']) {
197 set_transient('_ultp_preview_'.$post_id, $ultp_block_css , 60*60);
198 return ['success' => true];
199 }
200
201 WP_Filesystem( false, $upload_dir_url['basedir'], true );
202 if( ! $wp_filesystem->is_dir( $dir ) ) {
203 $wp_filesystem->mkdir( $dir );
204 }
205 if ( ! $wp_filesystem->put_contents( $dir . $filename, $ultp_block_css ) ) {
206 throw new Exception(__('CSS can not be saved due to permission!!!', 'ultimate-post'));
207 }
208 update_post_meta($post_id, '_ultp_css', $ultp_block_css);
209 return ['success'=>true, 'message'=>__('PostX css file has been updated.', 'ultimate-post')];
210 } else {
211 delete_post_meta($post_id, '_ultp_active');
212 if (file_exists($dir.$filename)) {
213 unlink($dir.$filename);
214 }
215 delete_post_meta($post_id, '_ultp_css');
216 return ['success' => true, 'message' => __('Data Delete Done', 'ultimate-post')];
217 }
218 }catch(Exception $e){
219 return [ 'success'=> false, 'message'=> $e->getMessage() ];
220 }
221 }
222
223
224 /**
225 * Save Import CSS in the top of the File
226 *
227 * @since v.1.0.0
228 * @param STRING | CSS (STRING)
229 * @return STRING | Generated CSS
230 */
231 public function set_top_css($get_css = ''){
232 $css_url = "@import url('https://fonts.googleapis.com/css?family=";
233 $font_exists = substr_count($get_css, $css_url);
234 if ($font_exists){
235 $pattern = sprintf('/%s(.+?)%s/ims', preg_quote($css_url, '/'), preg_quote("');", '/'));
236 if (preg_match_all($pattern, $get_css, $matches)) {
237 $fonts = $matches[0];
238 $get_css = str_replace($fonts, '', $get_css);
239 if( preg_match_all( '/font-weight[ ]?:[ ]?[\d]{3}[ ]?;/' , $get_css, $matche_weight ) ){
240 $weight = array_map( function($val){
241 $process = trim( str_replace( array( 'font-weight',':',';' ) , '', $val ) );
242 if( is_numeric( $process ) ){
243 return $process;
244 }
245 }, $matche_weight[0] );
246 foreach ( $fonts as $key => $val ) {
247 $fonts[$key] = str_replace( "');",'', $val ).':'.implode( ',',$weight )."');";
248 }
249 }
250 $fonts = array_unique($fonts);
251 $get_css = implode('', $fonts).$get_css;
252 }
253 }
254 return $get_css;
255 }
256
257
258 /**
259 * Enqueue CSS in HEAD or as a File
260 *
261 * @since v.1.0.0
262 * @return NULL
263 */
264 public function require_block_css(){
265 $save_as = ultimate_post()->get_setting('css_save_as');
266 $save_as = $save_as ? $save_as : '';
267 if (isset($_GET['preview_id']) && isset($_GET['preview_nonce'])) {
268 add_action('wp_head', array( $this, 'add_block_inline_css' ), 100);
269 } else if ($save_as === 'filesystem') {
270 add_action('wp_enqueue_scripts', array($this, 'add_block_css_file'));
271 } else {
272 add_action('wp_head', array( $this, 'add_block_inline_css' ), 100);
273 }
274
275 add_action('wp_enqueue_scripts', array($this, 'postx_global_css'));
276 add_action('admin_enqueue_scripts', array($this, 'postx_global_css'));
277 }
278
279 /**
280 * Set Global Color Codes
281 *
282 * @since v.1.0.0
283 * @return NULL
284 */
285 public function postx_global_css() {
286 // Preset CSS
287 $global = get_option('postx_global', []);
288 $custom_css = ':root {
289 --preset-color1: '.(isset($global['presetColor1'])?$global['presetColor1']:'#037fff').';
290 --preset-color2: '.(isset($global['presetColor2'])?$global['presetColor2']:'#026fe0').';
291 --preset-color3: '.(isset($global['presetColor3'])?$global['presetColor3']:'#071323').';
292 --preset-color4: '.(isset($global['presetColor4'])?$global['presetColor4']:'#132133').';
293 --preset-color5: '.(isset($global['presetColor5'])?$global['presetColor5']:'#34495e').';
294 --preset-color6: '.(isset($global['presetColor6'])?$global['presetColor6']:'#787676').';
295 --preset-color7: '.(isset($global['presetColor7'])?$global['presetColor7']:'#f0f2f3').';
296 --preset-color8: '.(isset($global['presetColor8'])?$global['presetColor8']:'#f8f9fa').';
297 --preset-color9: '.(isset($global['presetColor9'])?$global['presetColor9']:'#ffffff').';
298 }';
299 wp_register_style( 'wpxpo-global-style', false );
300 wp_enqueue_style( 'wpxpo-global-style' );
301 wp_add_inline_style( 'wpxpo-global-style', $custom_css );
302 }
303
304 /**
305 * Set CSS as File
306 *
307 * @since v.1.0.0
308 * @return NULL
309 */
310 public function add_block_css_file() {
311 ultimate_post()->set_css_style( ultimate_post()->get_ID() );
312 }
313
314
315 /**
316 * Set Inline CSS in Head
317 *
318 * @since v.1.0.0
319 * @return NULL
320 */
321 public function add_block_inline_css(){
322 $post_id = ultimate_post()->get_ID();
323 if( $post_id ){
324 $upload_dir_url = wp_get_upload_dir();
325 $upload_css_dir_url = trailingslashit( $upload_dir_url['basedir'] );
326 $css_dir_path = $upload_css_dir_url."ultimate-post/ultp-css-{$post_id}.css";
327
328 // Reusable CSS
329 $reusable_css = '';
330 $reusable_id = ultimate_post()->reusable_id($post_id);
331 foreach ( $reusable_id as $id ) {
332 $reusable_dir_path = $upload_css_dir_url."ultimate-post/ultp-css-{$id}.css";
333 if (file_exists( $reusable_dir_path )) {
334 $reusable_css .= file_get_contents($reusable_dir_path);
335 } else {
336 $reusable_css .= get_post_meta($id, '_ultp_css', true);
337 }
338 }
339 if (isset($_GET['preview_id']) && isset($_GET['preview_nonce'])) {
340 $css = get_transient('_ultp_preview_'.$post_id, true);
341 if (!$css) {
342 $css = get_post_meta($post_id, '_ultp_css', true);
343 }
344 if ($css) {
345 if ($reusable_css) {
346 $css = $this->set_top_css($css.$reusable_css);
347 }
348 echo '<style type="text/css">'.$css.'</style>';
349 }
350 } else if (file_exists( $css_dir_path )) {
351 $css = file_get_contents($css_dir_path);
352 if ($reusable_css) {
353 $css = $this->set_top_css($css.$reusable_css);
354 }
355 if ($css) {
356 echo '<style type="text/css">'.$css.'</style>';
357 }
358 } else {
359 $css = get_post_meta($post_id, '_ultp_css', true);
360 if ($reusable_css) {
361 $css = $this->set_top_css($css.$reusable_css);
362 }
363 if ($css) {
364 echo '<style type="text/css">'.$css.'</style>';
365 }
366 }
367 }
368 }
369 }