PluginProbe
WP-Stateless – Google Cloud Storage / 3.0.2
WP-Stateless – Google Cloud Storage v3.0.2
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 3.0.2, at lib/classes/compatibility/elementor.php

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