PluginProbe ʕ •ᴥ•ʔ
Premium Addons for Elementor – Powerful Elementor Templates & Widgets / 4.11.34
Premium Addons for Elementor – Powerful Elementor Templates & Widgets v4.11.34
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
controls 8 months ago pa-display-conditions 8 months ago templates 8 months ago acf-helper.php 8 months ago addons-cross-cp.php 8 months ago addons-integration.php 8 months ago assets-manager.php 8 months ago class-pa-core.php 8 months ago class-premium-template-tags.php 8 months ago helper-functions.php 8 months ago live-editor-modal.php 8 months ago module-base.php 8 months ago pa-nav-menu-walker.php 8 months ago papro-promotion.php 8 months ago
addons-cross-cp.php
211 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 * Media import copy content.
87 *
88 * @since 3.21.1
89 *
90 * @param object $media_import media to import.
91 */
92 protected static function cross_cp_import_copy_content( $media_import ) {
93
94 return \Elementor\Plugin::instance()->db->iterate_data(
95 $media_import,
96 function ( $element_data ) {
97 $element = \Elementor\Plugin::instance()->elements_manager->create_element_instance( $element_data );
98
99 // If the widget/element isn't exist, like a plugin that creates a widget but deactivated.
100 if ( ! $element ) {
101 return null;
102 }
103
104 return self::cross_cp_import_element( $element );
105 }
106 );
107 }
108
109 /**
110 * Start element copy content for media import.
111 *
112 * @since 3.21.1
113 *
114 * @param Controls_Stack $element element to import.
115 */
116 protected static function cross_cp_import_element( Controls_Stack $element ) {
117
118 $element_data = $element->get_data();
119 $method = 'on_import';
120
121 if ( method_exists( $element, $method ) ) {
122 // TODO: Use the internal element data without parameters.
123 $element_data = $element->{$method}( $element_data );
124 }
125
126 foreach ( $element->get_controls() as $control ) {
127 $control_class = \Elementor\Plugin::instance()->controls_manager->get_control( $control['type'] );
128
129 // If the control isn't exist, like a plugin that creates the control but deactivated.
130 if ( ! $control_class ) {
131 return $element_data;
132 }
133
134 if ( method_exists( $control_class, $method ) ) {
135
136 if ( 'media' !== $control['type'] && 'hedia' !== $control['type'] && 'repeater' !== $control['type'] ) {
137 $element_data['settings'][ $control['name'] ] = $control_class->{$method}( $element->get_settings( $control['name'] ), $control );
138 } elseif ( 'repeater' === $control['type'] ) {
139 $element_data['settings'][ $control['name'] ] = self::on_import_repeater( $element->get_settings( $control['name'] ), $control );
140 } elseif ( ! empty( $element_data['settings'][ $control['name'] ]['url'] ) ) {
141 $element_data['settings'][ $control['name'] ] = self::on_import_media( $element->get_settings( $control['name'] ) );
142 }
143 }
144 }
145
146 return $element_data;
147 }
148
149 protected static function on_import_media( $settings ) {
150
151 if ( empty( $settings['url'] ) || false != strpos( $settings['url'], 'placeholder' ) ) {
152 return $settings;
153 }
154
155 $settings = \Elementor\Plugin::$instance->templates_manager->get_import_images_instance()->import( $settings );
156
157 return $settings;
158 }
159
160 protected static function on_import_repeater( $settings, $control_data = array() ) {
161 if ( empty( $settings ) || empty( $control_data['fields'] ) ) {
162 return $settings;
163 }
164
165 $method = 'on_import';
166
167 foreach ( $settings as &$item ) {
168 foreach ( $control_data['fields'] as $field ) {
169 if ( empty( $field['name'] ) || empty( $item[ $field['name'] ] ) ) {
170 continue;
171 }
172
173 $control_obj = \Elementor\Plugin::$instance->controls_manager->get_control( $field['type'] );
174
175 if ( ! $control_obj ) {
176 continue;
177 }
178
179 if ( method_exists( $control_obj, $method ) ) {
180 if ( 'media' !== $field['type'] && 'hedia' !== $field['type'] ) {
181 $item[ $field['name'] ] = $control_obj->{$method}( $item[ $field['name'] ], $field );
182 } elseif ( ! empty( $item[ $field['name'] ]['url'] ) ) {
183 $item[ $field['name'] ] = self::on_import_media( $item[ $field['name'] ] );
184 }
185 }
186 }
187 }
188
189 return $settings;
190 }
191
192 /**
193 * Returns the instance.
194 *
195 * @since 3.21.1
196 * @return object
197 *
198 * @param array $shortcodes shortcodes.
199 */
200 public static function get_instance( $shortcodes = array() ) {
201
202 if ( ! isset( self::$instance ) ) {
203
204 self::$instance = new self( $shortcodes );
205 }
206
207 return self::$instance;
208 }
209 }
210 }
211