PluginProbe ʕ •ᴥ•ʔ
Premium Addons for Elementor – Powerful Elementor Templates & Widgets / 4.9.40
Premium Addons for Elementor – Powerful Elementor Templates & Widgets v4.9.40
4.11.79 4.11.78 4.11.77 4.11.76 4.11.75 3.20.5 4.11.69 3.20.6 4.11.7 3.20.7 4.11.70 3.20.8 4.11.71 3.20.9 4.11.72 3.21.1 4.11.73 3.21.2 4.11.74 3.21.3 4.11.8 3.21.4 4.11.9 3.21.5 4.2.0 3.21.6 4.2.1 3.3.0 4.2.2 3.3.1 4.2.3 3.3.2 4.2.4 3.3.3 4.2.5 3.3.4 4.2.6 3.3.5 4.2.7 3.3.6 4.2.8 3.3.7 4.2.9 3.3.8 4.3.0 3.3.9 4.3.1 3.4.0 4.3.2 3.4.1 4.3.3 3.4.2 4.3.4 3.4.3 4.3.5 3.4.4 4.3.6 3.4.5 4.3.7 3.4.6 4.3.8 3.4.7 4.3.9 3.4.8 4.4.0 3.4.9 4.4.1 3.5.0 4.4.2 3.5.1 4.4.3 3.5.2 4.4.4 3.5.3 4.4.5 3.5.4 4.4.6 3.5.5 4.4.7 3.5.6 4.4.8 3.5.7 4.4.9 3.5.8 4.5.0 3.5.9 4.5.1 3.6.0 4.5.2 3.6.1 4.5.3 3.6.2 4.5.4 3.6.3 4.5.5 3.6.4 4.5.6 3.6.5 4.5.7 3.6.6 4.5.8 3.6.7 4.5.9 3.6.8 4.6.0 3.6.9 4.6.1 3.7.0 4.7.0 3.7.1 4.7.1 3.7.2 4.7.2 3.7.3 4.7.3 3.7.4 4.7.4 3.7.5 4.7.5 3.7.6 4.7.6 3.7.7 4.7.7 3.7.8 4.7.8 3.7.9 4.7.9 3.8.0 4.8.0 3.8.1 4.8.1 3.8.2 4.8.10 3.8.3 4.8.11 3.8.4 4.8.2 3.8.5 4.8.3 3.8.6 4.8.4 3.8.7 4.8.5 3.8.8 4.8.6 3.8.9 4.8.7 3.9.0 4.8.8 3.9.1 4.8.9 3.9.2 4.9.0 3.9.3 4.9.0-beta1 3.9.4 4.9.0-beta2 3.9.5 4.9.1 3.9.6 4.9.10 3.9.7 4.9.11 3.9.8 4.9.12 3.9.9 4.9.13 4.0.1 4.9.14 4.0.3 4.9.15 4.0.4 4.9.16 4.0.5 4.9.17 4.0.6 4.9.18 4.0.7 4.9.19 4.0.8 4.9.2 4.0.9 4.9.20 4.1.0 4.9.21 4.1.1 4.9.22 4.1.2 4.9.23 4.1.3 4.9.24 trunk 4.1.4 4.9.25 1.0 4.1.5 4.9.26 1.01 4.1.6 4.9.27 1.02 4.1.7 4.9.28 1.03 4.1.8 4.9.29 1.04 4.1.9 4.9.3 1.05 4.10.0 4.9.30 1.06 4.10.1 4.9.31 1.07 4.10.10 4.9.32 1.08 4.10.11 4.9.33 1.09 4.10.12 4.9.34 2.0 4.10.13 4.9.35 2.0.1 4.10.14 4.9.36 2.0.2 4.10.15 4.9.37 2.0.3 4.10.16 4.9.38 2.0.4 4.10.17 4.9.39 2.0.5 4.10.18 4.9.4 2.0.6 4.10.19 4.9.40 2.0.7 4.10.2 4.9.41 2.0.8 4.10.20 4.9.42 2.0.9 4.10.21 4.9.43 2.1.0 4.10.22 4.9.45 2.1.1 4.10.23 4.9.46 2.1.2 4.10.24 4.9.47 2.1.3 4.10.25 4.9.48 2.1.4 4.10.26 4.9.49 2.1.5 4.10.27 4.9.5 2.1.5-beta1 4.10.28 4.9.50 2.1.6 4.10.29 4.9.51 2.1.7 4.10.3 4.9.52 2.1.8 4.10.30 4.9.53 2.1.9 4.10.31 4.9.54 2.2.0 4.10.32 4.9.55 2.2.1 4.10.33 4.9.56 2.2.2 4.10.34 4.9.57 2.2.3 4.10.35 4.9.6 2.2.4 4.10.36 4.9.7 2.2.5 4.10.37 4.9.8 2.2.6 4.10.38 4.9.9 2.2.7 4.10.39 2.2.8 4.10.4 2.2.9 4.10.40 2.3.0 4.10.41 2.3.1 4.10.42 2.3.2 4.10.43 2.3.3 4.10.44 2.3.4 4.10.45 2.3.5 4.10.46 2.3.6 4.10.47 2.3.7 4.10.48 2.3.8 4.10.49 2.3.9 4.10.5 2.4.0 4.10.50 2.4.1 4.10.51 2.5.0 4.10.52 2.5.1 4.10.53 2.5.2 4.10.54 2.5.3 4.10.55 2.5.4 4.10.56 2.5.5 4.10.57 2.5.6 4.10.58 2.5.7 4.10.59 2.5.8 4.10.6 2.5.9 4.10.60 2.6.0 4.10.61 2.6.1 4.10.62 2.6.2 4.10.63 2.6.3 4.10.64 2.6.4 4.10.65 2.6.5 4.10.66 2.6.6 4.10.67 2.6.7 4.10.68 2.6.8 4.10.69 2.6.9 4.10.7 2.7.0 4.10.70 2.7.1 4.10.71 2.7.2 4.10.72 2.7.3 4.10.73 2.7.4 4.10.74 2.7.5 4.10.75 2.7.6 4.10.76 2.7.7 4.10.77 2.7.8 4.10.78 2.7.9 4.10.79 2.8.0 4.10.8 2.8.1 4.10.80 2.8.2 4.10.81 2.8.3 4.10.82 2.8.4 4.10.83 2.8.5 4.10.84 2.8.6 4.10.85 2.8.7 4.10.86 2.8.8 4.10.87 2.8.9 4.10.88 2.9.0 4.10.89 2.9.1 4.10.9 2.9.2 4.10.90 2.9.3 4.11.0 2.9.4 4.11.1 2.9.5 4.11.10 2.9.6 4.11.11 2.9.7 4.11.12 2.9.8 4.11.13 2.9.9 4.11.14 3.0.0 4.11.15 3.0.1 4.11.16 3.0.2 4.11.17 3.0.3 4.11.18 3.0.4 4.11.19 3.0.5 4.11.2 3.0.6 4.11.20 3.0.7 4.11.21 3.0.8 4.11.22 3.0.9 4.11.23 3.1.0 4.11.24 3.1.1 4.11.25 3.1.2 4.11.26 3.1.3 4.11.27 3.1.4 4.11.28 3.1.5 4.11.29 3.1.6 4.11.3 3.1.7 4.11.30 3.1.8 4.11.31 3.1.9 4.11.32 3.10.0 4.11.33 3.10.1 4.11.34 3.10.2 4.11.35 3.10.3 4.11.36 3.10.4 4.11.37 3.10.5 4.11.38 3.10.6 4.11.39 3.10.7 4.11.4 3.10.8 4.11.40 3.10.9 4.11.41 3.11.0 4.11.42 3.11.1 4.11.43 3.11.2 4.11.44 3.11.3 4.11.45 3.11.4 4.11.46 3.11.5 4.11.47 3.11.6 4.11.48 3.11.7 4.11.49 3.11.8 4.11.5 3.11.9 4.11.50 3.12.0 4.11.51 3.12.1 4.11.52 3.12.2 4.11.53 3.12.3 4.11.54 3.2.0 4.11.55 3.2.1 4.11.56 3.2.2 4.11.57 3.2.3 4.11.58 3.2.4 4.11.59 3.2.5 4.11.6 3.2.6 4.11.60 3.2.7 4.11.61 3.2.8 4.11.62 3.2.9 4.11.63 3.20.0 4.11.64 3.20.1 4.11.65 3.20.2 4.11.66 3.20.3 4.11.67 3.20.4 4.11.68
premium-addons-for-elementor / includes / addons-cross-cp.php
premium-addons-for-elementor / includes Last commit date
compatibility 3 years ago controls 3 years ago pa-display-conditions 3 years ago templates 3 years ago acf-helper.php 3 years ago addons-cross-cp.php 3 years ago addons-integration.php 3 years ago assets-manager.php 3 years ago class-pa-core.php 3 years ago class-premium-template-tags.php 3 years ago helper-functions.php 3 years ago live-editor-modal.php 3 years ago module-base.php 3 years ago pa-nav-menu-walker.php 3 years ago
addons-cross-cp.php
217 lines
1 <?php
2
3 namespace PremiumAddons\Includes;
4
5 use Elementor\Utils;
6 use Elementor\Controls_Stack;
7
8 if ( ! defined( 'WPINC' ) ) {
9 die;
10 }
11
12 /*
13 * Premium Cross Domain Copy Paste Feature
14 */
15 if ( ! class_exists( 'Addons_Cross_CP' ) ) {
16
17 /**
18 * Define Addons_Cross_CP class
19 */
20 class Addons_Cross_CP {
21
22 /**
23 * Class instance
24 *
25 * @var instance
26 */
27 private static $instance = null;
28
29 /**
30 * Initalize integration hooks
31 *
32 * @return void
33 */
34 public function __construct() {
35 add_action( 'wp_ajax_premium_cross_cp_import', array( $this, 'cross_cp_fetch_content_data' ) );
36 }
37
38 /**
39 * Cross copy paste fetch data.
40 *
41 * @since 3.21.1
42 */
43 public static function cross_cp_fetch_content_data() {
44
45 check_ajax_referer( 'premium_cross_cp_import', 'nonce' );
46
47 if ( ! current_user_can( 'edit_posts' ) ) {
48 wp_send_json_error(
49 __( 'Not a valid user', 'premium-addons-for-elementor' ),
50 403
51 );
52 }
53
54 $media_import = isset( $_POST['copy_content'] ) ? wp_unslash( $_POST['copy_content'] ) : ''; // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
55
56 if ( empty( $media_import ) ) {
57 wp_send_json_error( __( 'Empty Content.', 'premium-addons-for-elementor' ) );
58 }
59
60 $media_import = array( json_decode( $media_import, true ) );
61 $media_import = self::cross_cp_import_elements_ids( $media_import );
62 $media_import = self::cross_cp_import_copy_content( $media_import );
63
64 wp_send_json_success( $media_import );
65 }
66
67 /**
68 * Replace media element id with random id.
69 *
70 * @since 3.21.1
71 *
72 * @param object $media_import media to import.
73 */
74 protected static function cross_cp_import_elements_ids( $media_import ) {
75
76 return \Elementor\Plugin::instance()->db->iterate_data(
77 $media_import,
78 function( $element ) {
79 $element['id'] = Utils::generate_random_string();
80 return $element;
81 }
82 );
83
84 }
85
86 /**
87 * Media import copy content.
88 *
89 * @since 3.21.1
90 *
91 * @param object $media_import media to import.
92 */
93 protected static function cross_cp_import_copy_content( $media_import ) {
94
95 return \Elementor\Plugin::instance()->db->iterate_data(
96 $media_import,
97 function( $element_data ) {
98 $element = \Elementor\Plugin::instance()->elements_manager->create_element_instance( $element_data );
99
100 // If the widget/element isn't exist, like a plugin that creates a widget but deactivated.
101 if ( ! $element ) {
102 return null;
103 }
104
105 return self::cross_cp_import_element( $element );
106 }
107 );
108
109 }
110
111 /**
112 * Start element copy content for media import.
113 *
114 * @since 3.21.1
115 *
116 * @param Controls_Stack $element element to import.
117 */
118 protected static function cross_cp_import_element( Controls_Stack $element ) {
119
120 $element_data = $element->get_data();
121 $method = 'on_import';
122
123 if ( method_exists( $element, $method ) ) {
124 // TODO: Use the internal element data without parameters.
125 $element_data = $element->{$method}( $element_data );
126 }
127
128 foreach ( $element->get_controls() as $control ) {
129 $control_class = \Elementor\Plugin::instance()->controls_manager->get_control( $control['type'] );
130
131 // If the control isn't exist, like a plugin that creates the control but deactivated.
132 if ( ! $control_class ) {
133 return $element_data;
134 }
135
136 if ( method_exists( $control_class, $method ) ) {
137
138 if ( 'media' !== $control['type'] && 'hedia' !== $control['type'] && 'repeater' !== $control['type'] ) {
139 $element_data['settings'][ $control['name'] ] = $control_class->{$method}( $element->get_settings( $control['name'] ), $control );
140 } elseif ( 'repeater' === $control['type'] ) {
141 $element_data['settings'][ $control['name'] ] = self::on_import_repeater( $element->get_settings( $control['name'] ), $control );
142 } else {
143 if ( ! empty( $element_data['settings'][ $control['name'] ]['url'] ) ) {
144 $element_data['settings'][ $control['name'] ] = self::on_import_media( $element->get_settings( $control['name'] ) );
145 }
146 }
147 }
148 }
149
150 return $element_data;
151 }
152
153 protected static function on_import_media( $settings ) {
154
155 if ( empty( $settings['url'] ) || false != strpos( $settings['url'], 'placeholder' ) ) {
156 return $settings;
157 }
158
159 $settings = \Elementor\Plugin::$instance->templates_manager->get_import_images_instance()->import( $settings );
160
161 return $settings;
162 }
163
164 protected static function on_import_repeater( $settings, $control_data = array() ) {
165 if ( empty( $settings ) || empty( $control_data['fields'] ) ) {
166 return $settings;
167 }
168
169 $method = 'on_import';
170
171 foreach ( $settings as &$item ) {
172 foreach ( $control_data['fields'] as $field ) {
173 if ( empty( $field['name'] ) || empty( $item[ $field['name'] ] ) ) {
174 continue;
175 }
176
177 $control_obj = \Elementor\Plugin::$instance->controls_manager->get_control( $field['type'] );
178
179 if ( ! $control_obj ) {
180 continue;
181 }
182
183 if ( method_exists( $control_obj, $method ) ) {
184 if ( 'media' !== $field['type'] && 'hedia' !== $field['type'] ) {
185 $item[ $field['name'] ] = $control_obj->{$method}( $item[ $field['name'] ], $field );
186 } else {
187 if ( ! empty( $item[ $field['name'] ]['url'] ) ) {
188 $item[ $field['name'] ] = self::on_import_media( $item[ $field['name'] ] );
189 }
190 }
191 }
192 }
193 }
194
195 return $settings;
196 }
197
198 /**
199 * Returns the instance.
200 *
201 * @since 3.21.1
202 * @return object
203 *
204 * @param array $shortcodes shortcodes.
205 */
206 public static function get_instance( $shortcodes = array() ) {
207
208 if ( ! isset( self::$instance ) ) {
209
210 self::$instance = new self( $shortcodes );
211 }
212
213 return self::$instance;
214 }
215 }
216 }
217