PluginProbe
WP-Stateless – Google Cloud Storage / 2.2.0
WP-Stateless – Google Cloud Storage v2.2.0
4.4.3 2.1.7 2.1.8 2.1.9 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.2.7 2.3.0 2.3.1 2.3.2 3.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.2.0 3.2.1 3.2.2 All 62 releases
wp-stateless / lib / classes / compatibility / elementor.php

elementor.php in WP-Stateless – Google Cloud Storage 2.2.0, at lib/classes/compatibility/elementor.php

184 lines 8.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Plugin Name: Elementor Page Builder
4 * Plugin URI: https://wordpress.org/plugins/elementor/
5 *
6 * Compatibility Description: Ensures compatibility with Elementor.
7 *
8 * @Todo add manual sync to sync all elementor css file to GCS.
9 *
10 */
11
12 namespace wpCloud\StatelessMedia {
13
14 if(!class_exists('wpCloud\StatelessMedia\Elementor')) {
15
16 class Elementor extends ICompatibility {
17 protected $id = 'elementor';
18 protected $title = 'Elementor Page Builder';
19 protected $constant = 'WP_STATELESS_COMPATIBILITY_ELEMENTOR';
20 protected $description = 'Ensures compatibility with Elementor Page Builder. Sync css files generated by Elementor.';
21 protected $plugin_file = 'elementor/elementor.php';
22 protected $non_library_sync = true;
23
24 public function module_init($sm){
25 add_filter( 'set_url_scheme', array($this, 'sync_rewrite_url'), 10, 3 );
26 add_action( 'elementor/core/files/clear_cache', array($this, 'delete_elementor_files') );
27 add_action( 'save_post', array($this, 'delete_css_files'), 10, 3 );
28 add_action( 'deleted_post', array($this, 'delete_css_files') );
29 add_filter( "elementor/settings/general/success_response_data", array($this, 'delete_global_css'), 10, 3 );
30 // return file names
31 add_filter( 'sm:sync::nonMediaFiles', array($this, 'sync_non_media_files') );
32 add_action( 'sm::pre::sync::nonMediaFiles', array($this, 'filter_css_file'), 10, 2 );
33
34 }
35
36 /**
37 * Sync local elementor files to GCS.
38 */
39 public function sync_rewrite_url($url, $scheme, $orig_scheme){
40 try{
41 if(strpos($url, 'elementor/') !== false){
42 $wp_uploads_dir = wp_get_upload_dir();
43 $name = str_replace($wp_uploads_dir['baseurl'] . '/', '', $url);
44 if($name != $url){
45 $name = apply_filters( 'wp_stateless_file_name', $name);
46 do_action('sm:sync::syncFile', $name, $wp_uploads_dir['basedir'] . '/' . $name);
47 $url = ud_get_stateless_media()->get_gs_host() . '/' . $name;
48 }
49 }
50
51 }
52 catch(Exception $e){
53 // @todo maybe log the exception.
54 }
55 // We are in filter so need to return the passed value.
56 return $url;
57 }
58
59 /**
60 * To regenerate/delete files click Regenerate Files in
61 * Elementor >> Tools >> General >> Regenerate CSS
62 * All files will be deleted from GCS.
63 * And will be copied to GCS again on next page view.
64 */
65 public function delete_elementor_files(){
66 do_action('sm:sync::deleteFiles', 'elementor/');
67 }
68
69 /**
70 * Delete GCS file on update/delete post.
71 */
72 public function delete_css_files( $post_ID, $post = null, $update = null ){
73
74 if($update || current_action() === 'deleted_post'){
75 $wp_uploads_dir = wp_get_upload_dir();
76
77 $post_css = new \Elementor\Core\Files\CSS\Post( $post_ID );
78
79 // elementor/ css/ 'post-' . $post_id . '.css'
80 $name = $post_css::UPLOADS_DIR . $post_css::DEFAULT_FILES_DIR . $post_css->get_file_name();
81 $name = apply_filters( 'wp_stateless_file_name', $name);
82 do_action('sm:sync::deleteFile', $name);
83
84 // $meta = $post_css->update();
85
86 // sync_file($name, $absolutePath, $forced = false);
87 // here $forced = 2 mean Force to overwrite on GCS
88 // do_action('sm:sync::syncFile', $name, $wp_uploads_dir['basedir'] . '/' . $name, 2);
89
90 // Removing status so that file will be generated next time.
91 // $meta = $post_css->get_meta();
92 // $meta['status'] = '';
93 // update_post_meta($post_ID, $post_css::META_KEY, $meta);
94
95 }
96 }
97
98 /**
99 * Delete elementor global css file when global style is updated on Elementor Editor.
100 *
101 */
102 public function delete_global_css($success_response_data, $id, $data){
103 try{
104 $post_css = new \Elementor\Core\Files\CSS\Global_CSS( 'global.css' );
105 // elementor/ css/ 'global.css'
106 $name = $post_css::UPLOADS_DIR . $post_css::DEFAULT_FILES_DIR . $post_css->get_file_name();
107 $name = apply_filters( 'wp_stateless_file_name', $name);
108 do_action('sm:sync::deleteFile', $name);
109 }
110 catch(Exception $e){
111 // @todo maybe log the exception.
112 }
113 // We are in filter so need to return the passed value.
114 return $success_response_data;
115 }
116
117 /**
118 *
119 */
120 public function sync_non_media_files($files){
121 $wp_uploads_dir = wp_get_upload_dir();
122 $base_dir = wp_normalize_path($wp_uploads_dir['basedir'] . '/');
123 $dir = $base_dir . \Elementor\Core\Files\CSS\Post::UPLOADS_DIR . \Elementor\Core\Files\CSS\Post::DEFAULT_FILES_DIR;
124 $file_list = list_files($dir);
125
126 foreach($file_list as $file){
127 $files[] = str_replace($base_dir, '', wp_normalize_path($file));
128 }
129 return $files;
130 }
131
132 /**
133 * @param $content
134 * @return mixed
135 */
136 public function filter_css_file( $name, $absolutePath ) {
137
138 if ( $upload_data = wp_upload_dir() && file_exists($absolutePath)) {
139 try{
140 $content = file_get_contents($absolutePath);
141
142 if ( !empty( $upload_data['baseurl'] ) && !empty( $content ) ) {
143 $baseurl = preg_replace('/https?:\/\//','',$upload_data['baseurl']);
144 $root_dir = trim( ud_get_stateless_media()->get( 'sm.root_dir' ), '/ ' ); // Remove any forward slash and empty space.
145 $root_dir = !empty( $root_dir ) ? $root_dir . '/' : '';
146 $image_host = ud_get_stateless_media()->get_gs_host() . $root_dir;
147 $file_ext = ud_get_stateless_media()->replaceable_file_types();
148
149 preg_match_all( '/(https?:\/\/'.str_replace('/', '\/', $baseurl).')\/(.+?)('.$file_ext.')/i', $content, $matches);
150 if(!empty($matches)){
151 foreach($matches[0] as $key => $match){
152 $id = attachment_url_to_postid($match);
153 if(!empty($id)){
154 Utility::add_media(null, $id, true);
155 }
156 }
157 }
158
159 $content = preg_replace( '/(https?:\/\/'.str_replace('/', '\/', $baseurl).')\/(.+?)('.$file_ext.')/i', $image_host.'/$2$3', $content);
160 file_put_contents($absolutePath, $content);
161 preg_match('/post-(\d+).css/', $name, $match);
162
163 if(!empty($match[1])){
164 $_elementor_css = get_post_meta($match[1], '_elementor_css', true);
165 if(!empty($_elementor_css)){
166 $_elementor_css['time'] = time();
167 }
168 }
169 }
170 }
171 catch(Exception $e){
172
173 }
174
175 }
176 }
177
178
179 }
180
181 }
182
183 }
184