* @since 1.50.0 */ namespace AdvancedAds\Importers; use WP_Error; use AdvancedAds\Utilities\WordPress; use AdvancedAds\Utilities\Conditional; use AdvancedAds\Framework\Utilities\Params; use AdvancedAds\Framework\Interfaces\Integration_Interface; defined( 'ABSPATH' ) || exit; /** * Importers Manager. */ class Manager implements Integration_Interface { /** * Importer history option key. * * @var string */ const HISTORY_OPTION_KEY = '_advads_importer_history'; /** * Hold all registered importers * * @var array */ private $importers = []; /** * Hold message to display on page * * @var string|WP_Error */ private $message = false; /** * Hook into WordPress. * * @return void */ public function hooks(): void { $this->register_importers(); add_action( 'admin_init', [ $this, 'handle_action' ] ); } /** * Get importers * * @return array */ public function get_importers(): array { return $this->importers; } /** * Handle importing * * @return void */ public function handle_action(): void { // Early bail!! if ( ! Conditional::user_cap( 'advanced_ads_edit_ads' ) ) { return; } $action = WordPress::current_action(); if ( 'advads_import' === $action && check_admin_referer( 'advads_import' ) ) { $importer = Params::post( 'importer' ); $importer = $this->importers[ $importer ]; $this->message = $importer->import(); } if ( 'advads_export' === $action && check_admin_referer( 'advads_export' ) ) { $exporter = new Plugin_Exporter(); $this->message = $exporter->download_file(); } if ( 'advads_import_delete' === $action && check_admin_referer( 'advads_import_delete' ) ) { $this->rollback_import(); } } /** * Rollback import * * @return void */ private function rollback_import(): void { $session_key = Params::get( 'session_key' ); $session_data = $this->delete_session_history( $session_key ); if ( ! $session_data ) { return; } $importer = $this->get_importer( $session_data['importer_id'] ); $importer->rollback( $session_key ); $this->message = __( 'History deleted successfully.', 'advanced-ads' ); } /** * Register importers * * @return void */ private function register_importers(): void { $this->register_importer( Tutorials::class ); $this->register_importer( Google_Sheet::class ); $this->register_importer( Ad_Inserter::class ); $this->register_importer( Ads_WP_Ads::class ); $this->register_importer( Amp_WP_Ads::class ); $this->register_importer( Quick_Adsense::class ); $this->register_importer( WP_Quads::class ); $this->register_importer( XML_Importer::class ); $this->register_importer( Api_Ads::class ); } /** * Register custom type. * * @param string $classname Type class name. * * @return void */ public function register_importer( $classname ): void { $importer = new $classname(); $this->importers[ $importer->get_id() ] = $importer; } /** * Get the registered importer * * @param string $id Importer to get. * * @return mixed|bool */ public function get_importer( $id ) { return $this->importers[ $id ] ?? false; } /** * Display any message * * @return void */ public function display_message(): void { // Early bail!! if ( empty( $this->message ) ) { return; } if ( is_array( $this->message ) ) { foreach ( $this->message as $message ) { $type = $message[0] ?? 'success'; $message = $message[1] ?? ''; ?>