PluginProbe
aBlocks – Gutenberg Blocks, User Dashboard Builder, Popup Builder, Form Builder & Animation Builder / 2.8.0
aBlocks – Gutenberg Blocks, User Dashboard Builder, Popup Builder, Form Builder & Animation Builder v2.8.0
2.12.0 2.11.1 2.11.0 2.10.0 2.9.0 2.7.4 2.7.5 2.7.6 2.7.7 2.8.0 2.8.1 2.9.1 trunk 1.0 1.0-beta1 1.0-beta2 1.0-beta3 1.0.1 1.0.2 1.0.3 1.1.0 1.1.1 1.1.2 1.2.0 1.2.1 All 78 releases
ablocks / includes / traits / importer.php

importer.php in aBlocks – Gutenberg Blocks, User Dashboard Builder, Popup Builder, Form Builder & Animation Builder 2.8.0, at includes/traits/importer.php

306 lines 7.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace ABlocks\traits;
4
5 use ABlocks\Helper;
6 use ABlocks\import\ImageParserFactory;
7 use ABlocks\import\WP_Import;
8 use Plugin_Upgrader;
9 use Theme_Upgrader;
10 use WP_Ajax_Upgrader_Skin;
11 use WP_Error;
12
13 trait Importer {
14
15 /**
16 * Check plugin installed and active.
17 *
18 * @param string $slug Plugin Slug.
19 *
20 * @return object
21 */
22 public static function check_plugin( string $slug ): object {
23 $installed = self::get_plugin_name( $slug );
24 if ( is_wp_error( $installed ) ) {
25 return (object) array(
26 'installed' => false,
27 'activated' => false,
28 );
29 }
30
31 if ( is_plugin_active( $installed ) ) {
32 return (object) array(
33 'installed' => true,
34 'activated' => true,
35 );
36 }
37
38 return (object) array(
39 'installed' => true,
40 'activated' => false,
41 );
42 }
43
44 /**
45 * Check theme installed and active.
46 *
47 * @param string $slug Theme Slug.
48 *
49 * @return object
50 */
51 public static function check_theme( string $slug ): object {
52 $installed_themes = wp_get_themes();
53 if ( ! isset( $installed_themes[ $slug ] ) ) {
54 return (object) array(
55 'installed' => false,
56 'activated' => false,
57 );
58 }
59
60 if ( get_template() === $slug ) {
61 return (object) array(
62 'installed' => true,
63 'activated' => true,
64 );
65 }
66
67 return (object) array(
68 'installed' => true,
69 'activated' => false,
70 );
71 }
72
73 /**
74 * Import template from XML file.
75 *
76 * @param string $file_path File path.
77 * @param bool $with_attachments with attachments ?.
78 *
79 * @return true|WP_Error
80 */
81 public static function import_template( string $file_path, bool $with_attachments = true ) {
82 require_once ABSPATH . 'wp-admin/includes/class-wp-importer.php';
83
84 if ( ! file_exists( $file_path ) ) {
85 return new WP_Error(
86 'invalid_file',
87 __( 'Invalid content file location provided!', 'ablocks' ),
88 );
89 }
90
91 // Import the XML file.
92 $importer = new WP_Import();
93 $result = $importer->import( $file_path, $with_attachments );
94
95 // Delete the temporary file if it exists using wp_delete_file.
96 if ( file_exists( $file_path ) && dirname( $file_path ) === sys_get_temp_dir() ) {
97 wp_delete_file( $file_path );
98 }
99
100 if ( is_wp_error( $result ) ) {
101 return $result;
102 }
103
104 return true;
105 }
106
107 public static function remote_to_tmp_file( string $file_url ) {
108 $tmp_file = $file_url;
109 if ( wp_http_validate_url( $file_url ) ) {
110 $tmp_file = download_url( $file_url );
111 if ( is_wp_error( $tmp_file ) ) {
112 return $tmp_file;
113 }
114 }
115 return $tmp_file;
116 }
117
118 /**
119 * Install/Activate Free Plugins.
120 *
121 * @param string $plugin_slug Slug that match on wp.org repo.
122 *
123 * @return true|WP_Error
124 */
125 public static function install_and_active_plugin( string $plugin_slug ) {
126 // Include required WordPress files for plugin management.
127 self::require_dependencies();
128 require_once ABSPATH . 'wp-admin/includes/plugin-install.php';
129
130 // Check if the plugin is already installed.
131 $installed_plugins = get_plugins();
132 foreach ( $installed_plugins as $plugin_file => $plugin_data ) {
133 if ( strpos( $plugin_file, $plugin_slug . '/' ) === 0 ) {
134 $activation = activate_plugin( $plugin_file, false, false, true );
135 if ( is_wp_error( $activation ) ) {
136 return $activation;
137 }
138 return true;
139 }
140 }
141
142 // Get plugin information from WordPress.org
143 $plugin_info = plugins_api('plugin_information', array(
144 'slug' => $plugin_slug,
145 'fields' => array(
146 'sections' => false,
147 'tested' => false,
148 ),
149 ));
150
151 if ( is_wp_error( $plugin_info ) ) {
152 return $plugin_info;
153 }
154
155 // Set up the installer
156 $upgrader = new Plugin_Upgrader( new WP_Ajax_Upgrader_Skin() );
157 $result = $upgrader->install( $plugin_info->download_link );
158
159 if ( is_wp_error( $result ) ) {
160 return $result;
161 }
162
163 // Activate the plugin.
164 $plugin_name = self::get_plugin_name( $plugin_slug );
165 if ( is_wp_error( $plugin_name ) ) {
166 return $plugin_name;
167 }
168
169 if ( ! is_plugin_active( $plugin_name ) ) {
170 $activation = activate_plugin( $plugin_name, false, false, true );
171
172 if ( is_wp_error( $activation ) ) {
173 return $activation;
174 }
175 }
176
177 return true;
178 }
179
180 /**
181 * Install/Activate Free Themes.
182 *
183 * @param string $theme_slug Slug that match on wp.org repo.
184 *
185 * @return true|WP_Error
186 */
187 public static function install_and_active_theme( string $theme_slug ) {
188 // Include required WordPress files for theme management.
189 require_once ABSPATH . 'wp-admin/includes/theme.php';
190 self::require_dependencies();
191
192 // Check if the theme is already installed.
193 $installed_themes = wp_get_themes();
194 if ( isset( $installed_themes[ $theme_slug ] ) ) {
195 switch_theme( $theme_slug );
196 return true;
197 }
198
199 // Fetch theme information from wp.org repo.
200 $theme_info = themes_api('theme_information', array(
201 'slug' => $theme_slug,
202 'fields' => array(
203 'sections' => false,
204 'tested' => false,
205 ),
206 ));
207
208 if ( is_wp_error( $theme_info ) ) {
209 return $theme_info;
210 }
211
212 // Set up the installer.
213 $upgrader = new Theme_Upgrader( new WP_Ajax_Upgrader_Skin() );
214 $result = $upgrader->install( $theme_info->download_link );
215
216 if ( is_wp_error( $result ) ) {
217 return $result;
218 }
219
220 // Activate the theme
221 if ( wp_get_theme( $theme_slug )->exists() ) {
222 switch_theme( $theme_slug );
223 return true;
224 }
225
226 return new WP_Error( 400, 'Theme installed but could not be activated' );
227 }
228
229 /**
230 * Get plugin name from directory name.
231 *
232 * @param string $directory Directory/slug.
233 *
234 * @return WP_Error|string
235 */
236 public static function get_plugin_name( string $directory ) {
237 $plugin_data = get_plugins( '/' . $directory );
238 $plugin_root_file = count( $plugin_data ) > 0 ? array_key_first( $plugin_data ) : false;
239 if ( ! $plugin_root_file ) {
240 return new WP_Error( 400, 'Invalid plugin folder!' );
241 }
242
243 return $directory . '/' . $plugin_root_file;
244 }
245
246 /**
247 * Get theme demos config with raw demo data.
248 *
249 * @return false|array
250 */
251 public static function get_theme_demo_config() {
252 return apply_filters( 'ablocks/register_theme', [
253 'menu_title' => __( 'aBlocks Templates', 'ablocks' ),
254 'page_title' => __( 'aBlocks Templates', 'ablocks' ),
255 'menu_slug' => ABLOCKS_PLUGIN_SLUG . '-demo-import',
256 'preloaded_demo' => true,
257 'preloaded_demo_category' => [], // set blank array for all.
258 'demos' => [],
259 ] );
260 }
261
262 /**
263 * Parse remote images from serialized blocks content.
264 *
265 * @param string $block_content Serialized block content.
266 *
267 * @return string
268 */
269 public static function parse_remote_images( string $block_content ): string {
270 $blocks = parse_blocks( $block_content );
271 $blocks = ImageParserFactory::instance()->parse( $blocks );
272
273 $serialized_blocks = '';
274 foreach ( $blocks as $block ) {
275 $serialized_blocks .= serialize_block( $block );
276 }
277 return $serialized_blocks;
278 }
279
280 /**
281 * Emit a Server-Sent Events message.
282 *
283 * @param mixed $data Data to be JSON-encoded and sent in the message.
284 */
285 public static function emit_sse_message( $data ) {
286 echo "event: message\n";
287 echo 'data: ' . wp_json_encode( $data ) . "\n\n";
288
289 // Extra padding.
290 echo esc_html( ':' . str_repeat( ' ', 2048 ) . "\n\n" );
291
292 flush();
293 }
294
295 /**
296 * Commonly used dependencies here.
297 *
298 * @return void
299 */
300 private static function require_dependencies() {
301 require_once ABSPATH . 'wp-admin/includes/file.php';
302 require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
303 }
304
305 }
306