← All changes
|
includes/template-library/classes/class-import-images.php
+11
-116
4.3.0-beta3
→
3.0.7
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 | |
| @@ -98,71 +93,30 @@ | ||
| 98 | 93 | * uploads folder, create a new attachment in the database and updates the |
| 99 | 94 | * attachment metadata. |
| 100 | 95 | * |
| 101 | 96 | * @since 1.0.0 |
| 102 | - * @since 3.2.0 New `$parent_post_id` option added | |
| 103 | 97 | * @access public |
| 104 | 98 | * |
| 105 | 99 | * @param array $attachment The attachment. |
| 106 | - * @param int $parent_post_id Optional. | |
| 107 | 100 | * |
| 108 | 101 | * @return false|array Imported image data, or false. |
| 109 | 102 | */ |
| 110 | - 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; | |
| 103 | + public function import( $attachment ) { | |
| 104 | + $saved_image = $this->get_saved_image( $attachment ); | |
| 115 | 105 | |
| 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'] ); | |
| 119 | - } | |
| 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 ); | |
| 106 | + if ( $saved_image ) { | |
| 107 | + return $saved_image; | |
| 108 | + } | |
| 124 | 109 | |
| 125 | - if ( $saved_image ) { | |
| 126 | - return $saved_image; | |
| 127 | - } | |
| 128 | - } | |
| 110 | + // Extract the file name and extension from the url. | |
| 111 | + $filename = basename( $attachment['url'] ); | |
| 129 | 112 | |
| 130 | - // Extract the file name and extension from the url. | |
| 131 | - $filename = basename( $attachment['url'] ); | |
| 113 | + $file_content = wp_remote_retrieve_body( wp_safe_remote_get( $attachment['url'] ) ); | |
| 132 | 114 | |
| 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 | 115 | if ( empty( $file_content ) ) { |
| 144 | 116 | return false; |
| 145 | 117 | } |
| 146 | 118 | |
| 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 | 119 | $upload = wp_upload_bits( |
| 166 | 120 | $filename, |
| 167 | 121 | null, |
| 168 | 122 | $file_content |
| @@ -173,30 +127,23 @@ | ||
| 173 | 127 | 'guid' => $upload['url'], |
| 174 | 128 | ]; |
| 175 | 129 | |
| 176 | 130 | $info = wp_check_filetype( $upload['file'] ); |
| 177 | - | |
| 178 | 131 | if ( $info ) { |
| 179 | 132 | $post['post_mime_type'] = $info['type']; |
| 180 | 133 | } else { |
| 181 | 134 | // For now just return the origin attachment |
| 182 | 135 | return $attachment; |
| 183 | - // return new \WP_Error( 'attachment_processing_error', esc_html__( 'Invalid file type.', 'elementor' ) ); | |
| 136 | + // return new \WP_Error( 'attachment_processing_error', __( 'Invalid file type.', 'elementor' ) ); | |
| 184 | 137 | } |
| 185 | 138 | |
| 186 | - $post_id = wp_insert_attachment( $post, $upload['file'], $parent_post_id ); | |
| 139 | + $post_id = wp_insert_attachment( $post, $upload['file'] ); | |
| 187 | 140 | |
| 188 | - apply_filters( 'elementor/template_library/import_images/new_attachment', $post_id ); | |
| 189 | - | |
| 190 | 141 | // On REST requests. |
| 191 | 142 | if ( ! function_exists( 'wp_generate_attachment_metadata' ) ) { |
| 192 | 143 | require_once ABSPATH . '/wp-admin/includes/image.php'; |
| 193 | 144 | } |
| 194 | 145 | |
| 195 | - if ( ! function_exists( 'wp_read_video_metadata' ) ) { | |
| 196 | - require_once ABSPATH . '/wp-admin/includes/media.php'; | |
| 197 | - } | |
| 198 | - | |
| 199 | 146 | wp_update_attachment_metadata( |
| 200 | 147 | $post_id, |
| 201 | 148 | wp_generate_attachment_metadata( $post_id, $upload['file'] ) |
| 202 | 149 | ); |
| @@ -205,62 +152,10 @@ | ||
| 205 | 152 | $new_attachment = [ |
| 206 | 153 | 'id' => $post_id, |
| 207 | 154 | 'url' => $upload['url'], |
| 208 | 155 | ]; |
| 209 | - | |
| 210 | - if ( ! empty( $attachment['id'] ) ) { | |
| 211 | - $this->_replace_image_ids[ $attachment['id'] ] = $new_attachment; | |
| 212 | - } | |
| 213 | - | |
| 156 | + $this->_replace_image_ids[ $attachment['id'] ] = $new_attachment; | |
| 214 | 157 | 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 | 158 | } |
| 264 | 159 | |
| 265 | 160 | /** |
| 266 | 161 | * Template library import images constructor. |