Files
roi-theme/wp-content/plugins/advanced-ads/includes/importers/class-manager.php
root a22573bf0b Commit inicial - WordPress Análisis de Precios Unitarios
- WordPress core y plugins
- Tema Twenty Twenty-Four configurado
- Plugin allow-unfiltered-html.php simplificado
- .gitignore configurado para excluir wp-config.php y uploads

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-03 21:04:30 -06:00

235 lines
5.0 KiB
PHP
Executable File

<?php
/**
* Importers Manager.
*
* @package AdvancedAds
* @author Advanced Ads <info@wpadvancedads.com>
* @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] ?? '';
?>
<div class="notice notice-<?php echo esc_attr( $type ); ?>">
<p><?php echo $message; // phpcs:ignore ?></p>
</div>
<?php
}
return;
}
$type = 'success';
$message = $this->message;
if ( is_wp_error( $this->message ) ) {
$type = 'error';
$message = $this->message->get_error_message();
}
?>
<div class="notice notice-<?php echo $type; // phpcs:ignore ?>">
<p><?php echo $message; // phpcs:ignore ?></p>
</div>
<?php
}
/**
* Add row to session history
*
* @param string $importer_id Importer id.
* @param string $key Session key.
* @param int $count Ad and Placement created.
*
* @return void
*/
public function add_session_history( $importer_id, $key, $count ): void {
$history = get_option( self::HISTORY_OPTION_KEY, [] );
$history[ $key ] = [
'importer_id' => $importer_id,
'session_key' => $key,
'count' => $count,
'created_at' => wp_date( 'U' ),
];
update_option( self::HISTORY_OPTION_KEY, $history );
}
/**
* Delete row from session history
*
* @param string $key Session key.
*
* @return array|bool
*/
public function delete_session_history( $key ) {
$return = false;
$history = get_option( self::HISTORY_OPTION_KEY, [] );
if ( isset( $history[ $key ] ) ) {
$return = $history[ $key ];
unset( $history[ $key ] );
update_option( self::HISTORY_OPTION_KEY, $history );
}
return $return;
}
}