require_block_css(); add_action('rest_api_init', array($this, 'save_block_css_callback')); } // API Routes for save CSS public function save_block_css_callback(){ register_rest_route( 'ultp/v1', '/save_block_css/', array( array( 'methods' => 'POST', 'callback' => array( $this, 'save_block_content_css'), 'permission_callback' => function () { return current_user_can( 'edit_posts' ); }, 'args' => array() ) ) ); register_rest_route( 'ultp/v1', '/get_posts/', array( array( 'methods' => 'POST', 'callback' => array($this, 'get_posts_call'), 'permission_callback' => function () { return current_user_can('edit_posts'); }, 'args' => array() ) ) ); register_rest_route( 'ultp/v1', '/appened_css/', array( array( 'methods' => 'POST', 'callback' => array($this, 'appened_css_call'), 'permission_callback' => function () { return current_user_can('edit_posts'); }, 'args' => array() ) ) ); } public function appened_css_call($server) { $post = $server->get_params(); $css = $post['inner_css']; $post_id = (int) sanitize_text_field($post['post_id']); if( $post_id ){ require_once(ABSPATH . 'wp-admin/includes/file.php'); $filename = "ultp-css-{$post_id}.css"; $dir = trailingslashit(wp_upload_dir()['basedir']).'ultimate-post/'; if(file_exists($dir.$filename)) { $file = fopen($dir.$filename, "a"); fwrite($file, $css); fclose($file); } $get_data = get_post_meta($post_id, '_ultp_css', true); update_post_meta($post_id, '_ultp_css', $get_data.$css); wp_send_json_success(array('success' => true, 'message' => __('Data retrive done', 'ultimate-post'))); }else{ return array('success' => false, 'message' => __('Data not found!!', 'ultimate-post')); } } public function get_posts_call($server) { $post = $server->get_params(); if (isset($post['postId'])) { return array('success' => true, 'data'=> get_post($post['postId'])->post_content, 'message' => __('Data retrive done', 'ultimate-post')); } else { return array('success' => false, 'message' => __('Data not found!!', 'ultimate-post')); } } // Save CSS Action in File public function save_block_content_css($request){ try{ global $wp_filesystem; if ( ! $wp_filesystem ) { require_once( ABSPATH . 'wp-admin/includes/file.php' ); } $params = $request->get_params(); $post_id = (int) sanitize_text_field($params['post_id']); $filename = "ultp-css-{$post_id}.css"; $upload_dir_url = wp_upload_dir(); $dir = trailingslashit($upload_dir_url['basedir']) . 'ultimate-post/'; if ($params['has_block']) { update_post_meta($post_id, '_ultp_active', 'yes'); $ultp_block_css = $this->set_top_css($params['block_css']); WP_Filesystem( false, $upload_dir_url['basedir'], true ); if( ! $wp_filesystem->is_dir( $dir ) ) { $wp_filesystem->mkdir( $dir ); } if ( ! $wp_filesystem->put_contents( $dir . $filename, $ultp_block_css ) ) { throw new Exception(__('CSS can not be saved due to permission!!!', 'ultimate-post')); } update_post_meta($post_id, '_ultp_css', $ultp_block_css); return ['success'=>true, 'message'=>__('Gutenberg Post block css file has been updated.', 'ultimate-post')]; } else { delete_post_meta($post_id, '_ultp_active'); if (file_exists($dir.$filename)) { unlink($dir.$filename); } delete_post_meta($post_id, '_ultp_css'); } }catch(Exception $e){ return [ 'success'=> false, 'message'=> $e->getMessage() ]; } } // Save Import CSS in the top of the File public function set_top_css($get_css = ''){ $css_url = "@import url('https://fonts.googleapis.com/css?family="; $font_exists = substr_count($get_css, $css_url); if ($font_exists){ $pattern = sprintf('/%s(.+?)%s/ims', preg_quote($css_url, '/'), preg_quote("');", '/')); if (preg_match_all($pattern, $get_css, $matches)) { $fonts = $matches[0]; $get_css = str_replace($fonts, '', $get_css); if( preg_match_all( '/font-weight[ ]?:[ ]?[\d]{3}[ ]?;/' , $get_css, $matche_weight ) ){ $weight = array_map( function($val){ $process = trim( str_replace( array( 'font-weight',':',';' ) , '', $val ) ); if( is_numeric( $process ) ){ return $process; } }, $matche_weight[0] ); foreach ( $fonts as $key => $val ) { $fonts[$key] = str_replace( "');",'', $val ).':'.implode( ',',$weight )."');"; } } $fonts = array_unique($fonts); $get_css = implode('', $fonts).$get_css; } } return $get_css; } // Require CSS public function require_block_css(){ $option_data = get_option( 'ultp_options' ); if(!$option_data){ $option_data = ultimate_post()->init_set_data(); } if( isset($option_data['css_save_as']) ){ $save_as = $option_data['css_save_as']; if ($save_as === 'filesystem') { add_action('wp_enqueue_scripts', array($this, 'add_block_css_file')); } else { add_action('wp_head', array( $this, 'add_block_inline_css' ), 100); } } } // Set CSS in File public function add_block_css_file(){ $post_id = get_the_ID(); if( $post_id ){ $upload_dir_url = wp_get_upload_dir(); $upload_css_dir_url = trailingslashit( $upload_dir_url['basedir'] ); $css_dir_path = $upload_css_dir_url . "ultimate-post/ultp-css-{$post_id}.css"; if ( file_exists( $css_dir_path ) ) { $css_dir_url = trailingslashit( $upload_dir_url['baseurl'] ); if (is_ssl()) { $css_dir_url = str_replace('http://', 'https://', $css_dir_url); } $css_url = $css_dir_url . "ultimate-post/ultp-css-{$post_id}.css"; wp_enqueue_style( "ultp-post-{$post_id}", $css_url, array(), ULTP_VER, 'all' ); } else { $css = get_post_meta($post_id, '_ultp_css', true); if( $css ) { wp_enqueue_style("ultp-post-{$post_id}", $css, false, ULTP_VER); } } } } // Set Inline CSS in Head public function add_block_inline_css(){ $post_id = get_the_ID(); if( $post_id ){ $upload_dir_url = wp_get_upload_dir(); $upload_css_dir_url = trailingslashit( $upload_dir_url['basedir'] ); $css_dir_path = $upload_css_dir_url."ultimate-post/ultp-css-{$post_id}.css"; if (file_exists( $css_dir_path )) { echo ''; } else { $css = get_post_meta($post_id, '_ultp_css', true); if($css) { echo ''; } } } } }