PluginProbe
Elementor Website Builder – more than just a page builder / 3.4.0-dev9
Elementor Website Builder – more than just a page builder v3.4.0-dev9
4.3.1 4.3.0 4.3.0-beta3 4.3.0-beta2 4.3.0-beta1 4.2.4 4.2.3 4.2.2 4.2.1 4.2.0 4.1.5 4.2.0-beta2 4.2.0-dev2 4.2.0-beta1 4.1.4 4.1.3 4.1.2 4.1.1 4.1.0 4.1.0-beta3 4.1.0-dev3 4.0.9 4.1.0-beta2 4.1.0-dev2 4.0.8 All 454 releases
← All changes | includes/template-library/classes/class-import-images.php +9 -102 4.3.0-beta2 → 3.4.0-dev9 View file →
@@ -1,12 +1,7 @@
1 1 <?php
2 2 namespace Elementor\TemplateLibrary\Classes;
3 3
4 -use Elementor\Core\Common\Modules\Ajax\Module as Ajax;
5 -use Elementor\Core\Files\Uploads_Manager;
6 -use Elementor\Plugin;
7 -use Elementor\Utils;
8 -
9 4 if ( ! defined( 'ABSPATH' ) ) {
10 5 exit; // Exit if accessed directly.
11 6 }
12 7
@@ -102,67 +97,30 @@
102 97 * @since 3.2.0 New `$parent_post_id` option added
103 98 * @access public
104 99 *
105 100 * @param array $attachment The attachment.
106 - * @param int $parent_post_id Optional.
101 + * @param int $parent_post_id Optional
107 102 *
108 103 * @return false|array Imported image data, or false.
109 104 */
110 105 public function import( $attachment, $parent_post_id = null ) {
111 - if ( isset( $attachment['tmp_name'] ) ) {
112 - // Used when called to import a directly-uploaded file.
113 - $filename = $attachment['name'];
114 - $file_content = false;
106 + if ( ! empty( $attachment['id'] ) ) {
107 + $saved_image = $this->get_saved_image( $attachment );
115 108
116 - // security validation in case the tmp_name has been tampered with
117 - if ( is_uploaded_file( $attachment['tmp_name'] ) ) {
118 - $file_content = Utils::file_get_contents( $attachment['tmp_name'] );
109 + if ( $saved_image ) {
110 + return $saved_image;
119 111 }
120 - } else {
121 - // Used when attachment information is passed to this method.
122 - if ( ! empty( $attachment['id'] ) ) {
123 - $saved_image = $this->get_saved_image( $attachment );
112 + }
124 113
125 - if ( $saved_image ) {
126 - return $saved_image;
127 - }
128 - }
114 + // Extract the file name and extension from the url.
115 + $filename = basename( $attachment['url'] );
129 116
130 - // Extract the file name and extension from the url.
131 - $filename = basename( $attachment['url'] );
117 + $file_content = wp_remote_retrieve_body( wp_safe_remote_get( $attachment['url'] ) );
132 118
133 - $request = wp_safe_remote_get( $attachment['url'] );
134 -
135 - // Make sure the request returns a valid result.
136 - if ( is_wp_error( $request ) || ( ! empty( $request['response']['code'] ) && 200 !== (int) $request['response']['code'] ) ) {
137 - return false;
138 - }
139 -
140 - $file_content = wp_remote_retrieve_body( $request );
141 - }
142 -
143 119 if ( empty( $file_content ) ) {
144 120 return false;
145 121 }
146 122
147 - $filetype = wp_check_filetype( $filename );
148 -
149 - // If the file type is not recognized by WordPress, exit here to avoid creation of an empty attachment document.
150 - if ( ! $filetype['ext'] ) {
151 - return false;
152 - }
153 -
154 - if ( 'svg' === $filetype['ext'] ) {
155 - // In case that unfiltered-files upload is not enabled, SVG images should not be imported.
156 - if ( ! Uploads_Manager::are_unfiltered_uploads_enabled() ) {
157 - return false;
158 - }
159 -
160 - $svg_handler = Plugin::$instance->uploads_manager->get_file_type_handlers( 'svg' );
161 -
162 - $file_content = $svg_handler->sanitizer( $file_content );
163 - }
164 -
165 123 $upload = wp_upload_bits(
166 124 $filename,
167 125 null,
168 126 $file_content
@@ -173,9 +131,8 @@
173 131 'guid' => $upload['url'],
174 132 ];
175 133
176 134 $info = wp_check_filetype( $upload['file'] );
177 -
178 135 if ( $info ) {
179 136 $post['post_mime_type'] = $info['type'];
180 137 } else {
181 138 // For now just return the origin attachment
@@ -184,10 +141,8 @@
184 141 }
185 142
186 143 $post_id = wp_insert_attachment( $post, $upload['file'], $parent_post_id );
187 144
188 - apply_filters( 'elementor/template_library/import_images/new_attachment', $post_id );
189 -
190 145 // On REST requests.
191 146 if ( ! function_exists( 'wp_generate_attachment_metadata' ) ) {
192 147 require_once ABSPATH . '/wp-admin/includes/image.php';
193 148 }
@@ -211,56 +166,8 @@
211 166 $this->_replace_image_ids[ $attachment['id'] ] = $new_attachment;
212 167 }
213 168
214 169 return $new_attachment;
215 - }
216 -
217 - /**
218 - * Import local file.
219 - *
220 - * Import a local file directly to WordPress media library.
221 - * Used for importing files that are already downloaded locally (e.g., from extracted ZIP).
222 - *
223 - * @since 3.33.0
224 - * @access public
225 - *
226 - * @param string $local_file_path The local file path.
227 - * @param int $parent_post_id Optional. Parent post ID.
228 - *
229 - * @return false|array Imported image data, or false on failure.
230 - */
231 - public function import_local_file( $local_file_path, $parent_post_id = null ) {
232 - global $wp_filesystem;
233 -
234 - if ( ! $wp_filesystem->exists( $local_file_path ) ) {
235 - return false;
236 - }
237 -
238 - if ( ! function_exists( 'media_handle_sideload' ) ) {
239 - require_once ABSPATH . 'wp-admin/includes/media.php';
240 - }
241 -
242 - if ( ! function_exists( 'wp_generate_attachment_metadata' ) ) {
243 - require_once ABSPATH . 'wp-admin/includes/image.php';
244 - }
245 -
246 - $file_array = [
247 - 'name' => basename( $local_file_path ),
248 - 'tmp_name' => $local_file_path,
249 - ];
250 -
251 - $attachment_id = media_handle_sideload( $file_array, $parent_post_id );
252 -
253 - if ( is_wp_error( $attachment_id ) ) {
254 - return false;
255 - }
256 -
257 - apply_filters( 'elementor/template_library/import_images/new_attachment', $attachment_id );
258 -
259 - return [
260 - 'id' => $attachment_id,
261 - 'url' => wp_get_attachment_url( $attachment_id ),
262 - ];
263 170 }
264 171
265 172 /**
266 173 * Template library import images constructor.