<?php namespace Elementor\App\Modules\ImportExport\Runners\Import; use Elementor\Core\Utils\Collection; use Elementor\Core\Utils\Plugins_Manager; use Elementor\Core\Utils\Str; class Plugins extends Import_Runner_Base { /** * @var Plugins_Manager */ private $plugins_manager; public function __construct( $plugins_manager = null ) { if ( $plugins_manager ) { $this->plugins_manager = $plugins_manager; } else { $this->plugins_manager = new Plugins_Manager(); } } public static function get_name() : string { return 'plugins'; } public function should_import( array $data ) { return ( isset( $data['include'] ) && in_array( 'plugins', $data['include'], true ) && ! empty( $data['manifest']['plugins'] ) && ! empty( $data['selected_plugins'] ) ); } public function import( array $data, array $imported_data ) { $plugins = $data['selected_plugins']; $plugins_collection = ( new Collection( $plugins ) ) ->map( function ( $item ) { if ( ! Str::ends_with( $item['plugin'], '.php' ) ) { $item['plugin'] .= '.php'; } return $item; } ); $slugs = $plugins_collection ->map( function ( $item ) { return $item['plugin']; } ) ->all(); $installed = $this->plugins_manager->install( $slugs ); $activated = $this->plugins_manager->activate( $installed['succeeded'] ); $ordered_activated_plugins = $plugins_collection ->filter( function ( $item ) use ( $activated ) { return in_array( $item['plugin'], $activated['succeeded'], true ); } ) ->map( function ( $item ) { return $item['name']; } ) ->all(); $result['plugins'] = $ordered_activated_plugins; return $result; } }