PluginProbe ʕ •ᴥ•ʔ
Elementor Website Builder – more than just a page builder / 3.26.0-beta1
Elementor Website Builder – more than just a page builder v3.26.0-beta1
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 4.1.0-beta1 4.1.0-dev1 4.0.7 4.0.6 4.0.5 4.0.4 4.0.3 3.22.0-dev1 4.0.0-beta3 3.22.0-dev2 4.0.0-beta4 3.22.0-dev3 4.0.0-beta5 3.22.0-dev4 4.0.0-dev1 3.22.0-dev5 4.0.0-dev2 3.22.0-dev6 4.0.0-dev3 3.22.1 4.0.0-dev4 3.22.2 4.0.0-dev5 3.22.3 4.0.1 3.23.0 4.0.2 3.23.0-beta1 3.23.0-beta2 3.23.0-beta3 3.23.0-beta4 3.23.0-beta5 3.23.0-beta6 3.23.0-dev1 3.23.0-dev2 3.23.0-dev3 3.23.0-dev4 3.23.0-dev5 3.23.0-dev6 3.23.1 3.23.2 3.23.3 3.23.4 3.24.0 3.24.0-beta1 3.24.0-beta2 3.24.0-beta3 3.24.0-dev1 3.24.0-dev2 3.24.0-dev3 3.24.1 3.24.2 3.24.3 3.24.4 3.24.5 3.24.6 3.24.7 3.24.8 3.25.0 3.25.0-beta1 3.25.0-beta2 3.25.0-beta3 3.25.0-dev1 3.25.0-dev2 3.25.0-dev3 3.25.1 3.25.10 3.25.11 3.25.2 3.25.3 3.25.4 3.25.5 3.25.6 3.25.7 3.25.8 3.25.9 3.26.0 3.26.0-beta1 3.26.0-beta2 3.26.0-beta3 3.26.0-beta4 3.26.0-beta5 3.26.0-dev1 3.26.0-dev2 3.26.0-dev3 3.26.0-dev4 3.26.0-dev5 3.26.1 3.26.2 3.26.3 3.26.4 3.26.5 3.27.0 3.27.0-beta1 3.27.0-beta2 3.27.0-dev1 3.27.0-dev2 3.27.1 3.27.2 3.27.3 3.27.4 3.27.5 3.27.6 3.27.7 3.28.0 3.28.0-beta1 3.28.0-beta2 3.28.0-beta3 3.28.0-dev1 3.28.0-dev2 3.28.0-dev3 3.28.1 3.28.2 3.28.3 3.28.4 3.29.0 3.29.0-beta1 trunk 3.29.0-beta2 3.0.0 3.29.0-beta3 3.0.1 3.29.0-beta4 3.0.10 3.29.0-dev1 3.0.11 3.29.0-dev2 3.0.12 3.29.0-dev3 3.0.13 3.29.0-dev4 3.0.14 3.29.1 3.0.15 3.29.2 3.0.16 3.3.0 3.0.2 3.3.1 3.0.3 3.30.0 3.0.4 3.30.0-beta1 3.0.5 3.30.0-beta2 3.0.6 3.30.0-beta3 3.0.7 3.30.0-dev1 3.0.8 3.30.0-dev2 3.0.8.1 3.30.0-dev3 3.0.9 3.30.1 3.1.0 3.30.2 3.1.0-beta1 3.30.3 3.1.0-beta2 3.30.4 3.1.0-beta3 3.31.0 3.1.0-beta4 3.31.0-beta1 3.1.0-dev1 3.31.0-beta2 3.1.0-dev2 3.31.0-dev1 3.1.0-dev3 3.31.0-dev2 3.1.1 3.31.1 3.1.2 3.31.2 3.1.3 3.31.3 3.1.4 3.31.4 3.10.0 3.31.5 3.10.0-dev1 3.32.0 3.10.1 3.32.0-beta1 3.10.2 3.32.0-beta2 3.11.0 3.32.0-beta3 3.11.0-beta1 3.32.0-dev1 3.11.0-beta2 3.32.0-dev2 3.11.0-beta3 3.32.0-dev3 3.11.0-dev1 3.32.1 3.11.0-dev2 3.32.2 3.11.0-dev3 3.32.3 3.11.1 3.32.4 3.11.2 3.32.5 3.11.3 3.33.0 3.11.4 3.33.0-beta1 3.11.5 3.33.0-beta2 3.12.0 3.33.0-beta3 3.12.1 3.33.0-beta4 3.12.2 3.33.0-dev1 3.13.0 3.33.0-dev2 3.13.0-beta1 3.33.0-dev3 3.13.0-beta2 3.33.0-dev4 3.13.0-beta3 3.33.1 3.13.0-dev3 3.33.2 3.13.0-dev4 3.33.3 3.13.1 3.33.4 3.13.2 3.33.5 3.13.3 3.33.6 3.13.4 3.34.0 3.14.0 3.34.0-beta1 3.14.0-beta1 3.34.0-beta2 3.14.0-beta2 3.34.0-beta3 3.14.0-beta3 3.34.0-dev1 3.14.0-beta4 3.34.0-dev2 3.14.0-beta5 3.34.1 3.14.1 3.34.2 3.15.0 3.34.3 3.15.1 3.34.4 3.15.2 3.35.0 3.15.3 3.35.0-beta1 3.16.0 3.35.0-beta2 3.16.0-beta3 3.35.0-beta3 3.16.0-beta4 3.35.0-beta4 3.16.0-dev1 3.35.0-dev1 3.16.0-dev2 3.35.0-dev2 3.16.1 3.35.0-dev3 3.16.2 3.35.0-dev4 3.16.3 3.35.1 3.16.4 3.35.2 3.16.5 3.35.3 3.16.6 3.35.4 3.17.0 3.35.5 3.17.0-dev2 3.35.6 3.17.0-dev3 3.35.7 3.17.0-dev4 3.35.8 3.17.1 3.35.9 3.17.2 3.4.0 3.17.3 3.4.0-dev7 3.18.0 3.4.0-dev8 3.18.0-beta1 3.4.0-dev9 3.18.0-beta2 3.4.1 3.18.0-beta3 3.4.2 3.18.0-beta4 3.4.3 3.18.0-dev1 3.4.4 3.18.1 3.4.5 3.18.2 3.4.6 3.18.3 3.4.7 3.19.0 3.4.8 3.19.0-beta1 3.5.0 3.19.0-beta2 3.5.0-beta1 3.19.0-beta3 3.5.0-beta2 3.19.0-beta4 3.5.0-beta3 3.19.0-beta5 3.5.0-beta4 3.19.0-beta6 3.5.0-beta5 3.19.0-dev1 3.5.0-beta7 3.19.0-dev2 3.5.0-beta8 3.19.0-dev3 3.5.0-dev8 3.19.0-dev4 3.5.0-dev9 3.19.0-dev5 3.5.1 3.19.0-dev6 3.5.2 3.19.1 3.5.3 3.19.2 3.5.4 3.19.3 3.5.5 3.19.4 3.5.6 3.2.0 3.6.0 3.2.1 3.6.0-beta1 3.2.2 3.6.0-beta2 3.2.3 3.6.0-beta3 3.2.4 3.6.0-beta4 3.2.5 3.6.0-beta5 3.20.0 3.6.0-dev1 3.20.0-beta1 3.6.0-dev10 3.20.0-beta2 3.6.1 3.20.0-beta3 3.6.2 3.20.0-beta4 3.6.3 3.20.0-dev1 3.6.4 3.20.0-dev2 3.6.5 3.20.0-dev3 3.6.6 3.20.0-dev4 3.6.7 3.20.1 3.6.8 3.20.2 3.7.0 3.20.3 3.7.0-beta1 3.20.4 3.7.0-beta2 3.21.0 3.7.0-beta3 3.21.0-beta1 3.7.0-beta4 3.21.0-beta2 3.7.0-dev1 3.21.0-beta3 3.7.1 3.21.0-dev1 3.7.2 3.21.0-dev2 3.7.3 3.21.0-dev3 3.7.4 3.21.1 3.7.5 3.21.2 3.7.6 3.21.3 3.7.7 3.21.4 3.7.8 3.21.5 3.8.0 3.21.6 3.8.0-beta1 3.21.7 3.8.0-beta2 3.21.8 3.8.0-beta3 3.22.0 3.8.1 3.22.0-beta1 3.9.0 3.22.0-beta2 3.9.1 3.22.0-beta3 3.9.2 3.22.0-beta4 4.0.0 3.22.0-beta5 4.0.0-beta1 3.22.0-beta6 4.0.0-beta2
elementor / includes / managers / image.php
elementor / includes / managers Last commit date
controls.php 1 year ago elements.php 1 year ago icons.php 1 year ago image.php 2 years ago skins.php 3 years ago widgets.php 1 year ago wordpress-widgets.php 1 year ago
image.php
191 lines
1 <?php
2 namespace Elementor;
3
4 use Elementor\Core\Editor\Editor;
5 use Elementor\Core\Utils\Collection;
6
7 if ( ! defined( 'ABSPATH' ) ) {
8 exit; // Exit if accessed directly.
9 }
10
11 /**
12 * Elementor images manager.
13 *
14 * Elementor images manager handler class is responsible for retrieving image
15 * details.
16 *
17 * @since 1.0.0
18 */
19 class Images_Manager {
20
21 /**
22 * Get images details.
23 *
24 * Retrieve details for all the images.
25 *
26 * Fired by `wp_ajax_elementor_get_images_details` action.
27 *
28 * @since 1.0.0
29 * @access public
30 */
31 public function get_images_details() {
32 if ( ! current_user_can( Editor::EDITING_CAPABILITY ) ) {
33 wp_send_json_error( 'Permission denied' );
34 }
35
36 // PHPCS - Already validated by wp_ajax.
37 $items = Utils::get_super_global_value( $_POST, 'items' ) ?? []; // phpcs:ignore WordPress.Security.NonceVerification.Missing
38 $urls = [];
39
40 foreach ( $items as $item ) {
41 $urls[ $item['id'] ] = $this->get_details( $item['id'], $item['size'], $item['is_first_time'] );
42 }
43
44 wp_send_json_success( $urls );
45 }
46
47 /**
48 * Get image details.
49 *
50 * Retrieve single image details.
51 *
52 * Fired by `wp_ajax_elementor_get_image_details` action.
53 *
54 * @since 1.0.0
55 * @access public
56 *
57 * @param string $id Image attachment ID.
58 * @param string|array $size Image size. Accepts any valid image
59 * size, or an array of width and height
60 * values in pixels (in that order).
61 * @param string $is_first_time Set 'true' string to force reloading
62 * all image sizes.
63 *
64 * @return array URLs with different image sizes.
65 */
66 public function get_details( $id, $size, $is_first_time ) {
67 if ( ! class_exists( 'Group_Control_Image_Size' ) ) {
68 require_once ELEMENTOR_PATH . '/includes/controls/groups/image-size.php';
69 }
70
71 if ( 'true' === $is_first_time ) {
72 $sizes = get_intermediate_image_sizes();
73 $sizes[] = 'full';
74 } else {
75 $sizes = [];
76 }
77
78 $sizes[] = $size;
79 $urls = [];
80 foreach ( $sizes as $size ) {
81 if ( 0 === strpos( $size, 'custom_' ) ) {
82 preg_match( '/custom_(\d*)x(\d*)/', $size, $matches );
83
84 $matches[1] = (int) $matches[1];
85 $matches[2] = (int) $matches[2];
86
87 $instance = [
88 'image_size' => 'custom',
89 'image_custom_dimension' => [
90 'width' => $matches[1],
91 'height' => $matches[2],
92 ],
93 ];
94
95 $url = Group_Control_Image_Size::get_attachment_image_src( $id, 'image', $instance );
96
97 $thumbs_path = BFITHUMB_UPLOAD_DIR . '/' . basename( $url );
98
99 $image_meta = wp_get_attachment_metadata( $id );
100
101 // Attach custom image to original.
102 $image_meta['sizes'][ 'elementor_' . $size ] = [
103 'file' => $thumbs_path,
104 'width' => $matches[1],
105 'height' => $matches[2],
106 'mime-type' => get_post_mime_type( $id ),
107 ];
108
109 wp_update_attachment_metadata( $id, $image_meta );
110
111 $urls[ $size ] = $url;
112 } else {
113 $urls[ $size ] = wp_get_attachment_image_src( $id, $size )[0];
114 }
115 }
116
117 return $urls;
118 }
119
120 /**
121 * Get Light-Box Image Attributes
122 *
123 * Used to retrieve an array of image attributes to be used for displaying an image in Elementor's Light Box module.
124 *
125 * @param int $id The ID of the image
126 *
127 * @return array An array of image attributes including `title` and `description`.
128 * @since 2.9.0
129 * @access public
130 */
131
132 public function get_lightbox_image_attributes( $id ) {
133 $attributes = [];
134 $kit = Plugin::$instance->kits_manager->get_active_kit();
135 $lightbox_title_src = $kit->get_settings( 'lightbox_title_src' );
136 $lightbox_description_src = $kit->get_settings( 'lightbox_description_src' );
137 $attachment = get_post( $id );
138
139 if ( $attachment ) {
140 $image_data = [
141 'alt' => get_post_meta( $attachment->ID, '_wp_attachment_image_alt', true ),
142 'caption' => $attachment->post_excerpt,
143 'description' => $attachment->post_content,
144 'title' => $attachment->post_title,
145 ];
146
147 if ( $lightbox_title_src && $image_data[ $lightbox_title_src ] ) {
148 $attributes['title'] = $image_data[ $lightbox_title_src ];
149 }
150
151 if ( $lightbox_description_src && $image_data[ $lightbox_description_src ] ) {
152 $attributes['description'] = $image_data[ $lightbox_description_src ];
153 }
154 }
155
156 return $attributes;
157 }
158
159 private function delete_custom_images( $post_id ) {
160 $image_meta = wp_get_attachment_metadata( $post_id );
161 if ( ! empty( $image_meta ) && ! empty( $image_meta['sizes'] ) ) {
162 ( new Collection( $image_meta['sizes'] ) )
163 ->filter( function ( $value, $key ) {
164 return ( 0 === strpos( $key, 'elementor_custom_' ) );
165 } )
166 ->pluck( 'file' )
167 ->each( function ( $path ) {
168 $base_dir = wp_get_upload_dir()['basedir'];
169 wp_delete_file( $base_dir . '/' . $path );
170 } );
171 }
172 }
173
174 /**
175 * Images manager constructor.
176 *
177 * Initializing Elementor images manager.
178 *
179 * @since 1.0.0
180 * @access public
181 */
182 public function __construct() {
183 add_action( 'wp_ajax_elementor_get_images_details', [ $this, 'get_images_details' ] );
184
185 // Delete elementor thumbnail files on deleting its main image.
186 add_action( 'delete_attachment', function ( $post_id ) {
187 $this->delete_custom_images( $post_id );
188 } );
189 }
190 }
191