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

269 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 ultimate_post()->set_css_style( ultimate_post()->get_ID() );
231 }
232
233
234 /**
235 * Set Inline CSS in Head
236 *
237 * @since v.1.0.0
238 * @return NULL
239 */
240 public function add_block_inline_css(){
241 $post_id = ultimate_post()->get_ID();
242 if( $post_id ){
243 $upload_dir_url = wp_get_upload_dir();
244 $upload_css_dir_url = trailingslashit( $upload_dir_url['basedir'] );
245 $css_dir_path = $upload_css_dir_url."ultimate-post/ultp-css-{$post_id}.css";
246
247 // Reusable CSS
248 $reusable_css = '';
249 $reusable_id = ultimate_post()->reusable_id($post_id);
250 foreach ( $reusable_id as $id ) {
251 $reusable_dir_path = $upload_css_dir_url."ultimate-post/ultp-css-{$id}.css";
252 if (file_exists( $reusable_dir_path )) {
253 $reusable_css .= file_get_contents($reusable_dir_path);
254 }else{
255 $reusable_css .= get_post_meta($id, '_ultp_css', true);
256 }
257 }
258
259 if (file_exists( $css_dir_path )) {
260 echo '<style type="text/css">'.file_get_contents($css_dir_path).$reusable_css.'</style>';
261 } else {
262 $css = get_post_meta($post_id, '_ultp_css', true);
263 if($css) {
264 echo '<style type="text/css">'.$css.$reusable_css.'</style>';
265 }
266 }
267 }
268 }
269 }