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

270 lines 7.3 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 }
78
79
80 /**
81 * Save Import CSS in the top of the File
82 *
83 * @since v.1.0.0
84 * @param OBJECT | Request Param of the REST API
85 * @return ARRAY/Exception | Array of the Custom Message
86 */
87 public function appened_css_call($server) {
88 $post = $server->get_params();
89 $css = $post['inner_css'];
90 $post_id = (int) sanitize_text_field($post['post_id']);
91 if( $post_id ){
92 require_once(ABSPATH . 'wp-admin/includes/file.php');
93 $filename = "ultp-css-{$post_id}.css";
94 $dir = trailingslashit(wp_upload_dir()['basedir']).'ultimate-post/';
95 if(file_exists($dir.$filename)) {
96 $file = fopen($dir.$filename, "a");
97 fwrite($file, $css);
98 fclose($file);
99 }
100 $get_data = get_post_meta($post_id, '_ultp_css', true);
101 update_post_meta($post_id, '_ultp_css', $get_data.$css);
102 wp_send_json_success(array('success' => true, 'message' => __('Data retrive done', 'ultimate-post')));
103 }else{
104 return array('success' => false, 'message' => __('Data not found!!', 'ultimate-post'));
105 }
106 }
107
108
109 /**
110 * Save Import CSS in the top of the File
111 *
112 * @since v.1.0.0
113 * @param OBJECT | Request Param of the REST API
114 * @return ARRAY/Exception | Array of the Custom Message
115 */
116 public function get_posts_call($server) {
117 $post = $server->get_params();
118 if (isset($post['postId'])) {
119 return array('success' => true, 'data'=> get_post($post['postId'])->post_content, 'message' => __('Data retrive done', 'ultimate-post'));
120 } else {
121 return array('success' => false, 'message' => __('Data not found!!', 'ultimate-post'));
122 }
123 }
124
125
126 /**
127 * Save Import CSS in the top of the File
128 *
129 * @since v.1.0.0
130 * @param OBJECT | Request Param of the REST API
131 * @return ARRAY/Exception | Array of the Custom Message
132 */
133 public function save_block_content_css($request){
134 try{
135 global $wp_filesystem;
136 if ( ! $wp_filesystem ) {
137 require_once( ABSPATH . 'wp-admin/includes/file.php' );
138 }
139
140 $params = $request->get_params();
141 $post_id = (int) sanitize_text_field($params['post_id']);
142 $filename = "ultp-css-{$post_id}.css";
143 $upload_dir_url = wp_upload_dir();
144 $dir = trailingslashit($upload_dir_url['basedir']) . 'ultimate-post/';
145
146 if ($params['has_block']) {
147 update_post_meta($post_id, '_ultp_active', 'yes');
148 $ultp_block_css = $this->set_top_css($params['block_css']);
149 WP_Filesystem( false, $upload_dir_url['basedir'], true );
150 if( ! $wp_filesystem->is_dir( $dir ) ) {
151 $wp_filesystem->mkdir( $dir );
152 }
153 if ( ! $wp_filesystem->put_contents( $dir . $filename, $ultp_block_css ) ) {
154 throw new Exception(__('CSS can not be saved due to permission!!!', 'ultimate-post'));
155 }
156 update_post_meta($post_id, '_ultp_css', $ultp_block_css);
157 return ['success'=>true, 'message'=>__('PostX css file has been updated.', 'ultimate-post')];
158 } else {
159 delete_post_meta($post_id, '_ultp_active');
160 if (file_exists($dir.$filename)) {
161 unlink($dir.$filename);
162 }
163 delete_post_meta($post_id, '_ultp_css');
164 return ['success' => true, 'message' => __('Data Delete Done', 'ultimate-post')];
165 }
166 }catch(Exception $e){
167 return [ 'success'=> false, 'message'=> $e->getMessage() ];
168 }
169 }
170
171
172 /**
173 * Save Import CSS in the top of the File
174 *
175 * @since v.1.0.0
176 * @param STRING | CSS (STRING)
177 * @return STRING | Generated CSS
178 */
179 public function set_top_css($get_css = ''){
180 $css_url = "@import url('https://fonts.googleapis.com/css?family=";
181 $font_exists = substr_count($get_css, $css_url);
182 if ($font_exists){
183 $pattern = sprintf('/%s(.+?)%s/ims', preg_quote($css_url, '/'), preg_quote("');", '/'));
184 if (preg_match_all($pattern, $get_css, $matches)) {
185 $fonts = $matches[0];
186 $get_css = str_replace($fonts, '', $get_css);
187 if( preg_match_all( '/font-weight[ ]?:[ ]?[\d]{3}[ ]?;/' , $get_css, $matche_weight ) ){
188 $weight = array_map( function($val){
189 $process = trim( str_replace( array( 'font-weight',':',';' ) , '', $val ) );
190 if( is_numeric( $process ) ){
191 return $process;
192 }
193 }, $matche_weight[0] );
194 foreach ( $fonts as $key => $val ) {
195 $fonts[$key] = str_replace( "');",'', $val ).':'.implode( ',',$weight )."');";
196 }
197 }
198 $fonts = array_unique($fonts);
199 $get_css = implode('', $fonts).$get_css;
200 }
201 }
202 return $get_css;
203 }
204
205
206 /**
207 * Enqueue CSS in HEAD or as a File
208 *
209 * @since v.1.0.0
210 * @return NULL
211 */
212 public function require_block_css(){
213 $save_as = ultimate_post()->get_setting('css_save_as');
214 $save_as = $save_as ? $save_as : '';
215 if ($save_as === 'filesystem') {
216 add_action('wp_enqueue_scripts', array($this, 'add_block_css_file'));
217 } else {
218 add_action('wp_head', array( $this, 'add_block_inline_css' ), 100);
219 }
220 }
221
222
223 /**
224 * Set CSS as File
225 *
226 * @since v.1.0.0
227 * @return NULL
228 */
229 public function add_block_css_file(){
230 $post_id = get_the_ID();
231 ultimate_post()->set_css_style($post_id);
232 }
233
234
235 /**
236 * Set Inline CSS in Head
237 *
238 * @since v.1.0.0
239 * @return NULL
240 */
241 public function add_block_inline_css(){
242 $post_id = get_the_ID();
243 if( $post_id ){
244 $upload_dir_url = wp_get_upload_dir();
245 $upload_css_dir_url = trailingslashit( $upload_dir_url['basedir'] );
246 $css_dir_path = $upload_css_dir_url."ultimate-post/ultp-css-{$post_id}.css";
247
248 // Reusable CSS
249 $reusable_css = '';
250 $reusable_id = ultimate_post()->reusable_id($post_id);
251 foreach ( $reusable_id as $id ) {
252 $reusable_dir_path = $upload_css_dir_url."ultimate-post/ultp-css-{$id}.css";
253 if (file_exists( $reusable_dir_path )) {
254 $reusable_css .= file_get_contents($reusable_dir_path);
255 }else{
256 $reusable_css .= get_post_meta($id, '_ultp_css', true);
257 }
258 }
259
260 if (file_exists( $css_dir_path )) {
261 echo '<style type="text/css">'.file_get_contents($css_dir_path).$reusable_css.'</style>';
262 } else {
263 $css = get_post_meta($post_id, '_ultp_css', true);
264 if($css) {
265 echo '<style type="text/css">'.$css.$reusable_css.'</style>';
266 }
267 }
268 }
269 }
270 }