Files
roi-theme/wp-content/plugins/thrive-ultimatum/thrive-dashboard/inc/design-packs/class-export.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

249 lines
4.9 KiB
PHP
Executable File

<?php
/**
* Thrive Themes - https://thrivethemes.com
*
* @package thrive-dashboard
*/
namespace TVE\Dashboard\Design_Packs;
use Exception;
use ZipArchive;
if ( ! defined( 'ABSPATH' ) ) {
exit; // Silence is golden!
}
/**
* Handle the export of each item type
*/
class Export {
const DEFAULT_NAME = 'thrive-design-pack-archive';
const EXPORT_SUFFIX = 'tve_exp_';
/**
* Name of the archive
*
* @var
*/
public $zip_filename;
/**
* Path of the archive
*
* @var
*/
public $zip_path;
/**
* Keeps the umask
*
* @var
*/
private $umask;
/**
* The archive where the export will be saved
*
* @var ZipArchive
*/
public $zip;
/**
* Exported item data
*
* @var
*/
public $item_id;
public $item_type;
public $item_name;
/**
* @throws Exception
*/
public function __construct( $zip_filename, $ensure_filename = true ) {
$this->set_zip_name( $zip_filename, $ensure_filename );
$this->open_zip();
}
/**
* Open the export zip archive
*
* @throws Exception
*/
public function open_zip() {
require_once( ABSPATH . 'wp-admin/includes/file.php' );
WP_Filesystem();
$this->umask = umask( 0 );
$this->zip = new ZipArchive();
if ( $this->zip->open( $this->zip_path, ZipArchive::CREATE ) !== true ) {
throw new Exception( 'Could not create zip archive' );
}
}
/**
* Close the archive and returns the url
*
* @return string
* @throws Exception
*/
public function close_archive() {
try {
if ( ! $this->zip->close() ) {
throw new Exception( 'Could not write the zip file' );
}
} catch ( Exception $e ) {
throw new Exception( $e->getMessage() );
}
umask( $this->umask );
return Main::get_exported_dir_url() . $this->zip_filename;
}
/**
* Get the exported name of an item
*
* @param $name
*
* @return string
*/
public function get_item_export_name( $name ) {
$name = htmlspecialchars_decode( $name );
return $name . ' ' . uniqid( static::EXPORT_SUFFIX );
}
/**
* Handle an item export
*
* @param $id
* @param $type
*
* @return mixed
* @throws Exception
*/
public function export_item( $id, $type ) {
$this->set_item_data( $id, $type );
$fn = 'export_' . $type;
if ( ! method_exists( $this, $fn ) ) {
$fn = 'export_content';
}
$item_data = $this->{$fn}( $id );
$this->write_archive( $item_data );
return $this->close_archive();
}
/**
* Set the item data
*
* @param $id
* @param $type
*
* @return void
*/
public function set_item_data( $id, $type ) {
$this->item_id = $id;
$this->item_type = $type;
if ( $type === 'skin' ) {
$term = get_term( $id );
$this->item_name = $this->get_item_export_name( $term->name );
} else {
$_REQUEST['post_id'] = $id;
$_POST['post_id'] = $id;
$_GET['post_id'] = $id;
$_REQUEST['id'] = $id;
$_POST['id'] = $id;
$_GET['id'] = $id;
$this->item_name = $this->get_item_export_name( htmlspecialchars_decode( get_the_title( $id ) ) );
}
}
/**
* Add a file to the archive
*
* @param $content_data
*
* @return void
*/
public function write_archive( $content_data ) {
if ( $this->zip->locateName( $this->item_type . '/' ) !== false ) {
$this->zip->addEmptyDir( $this->item_type );
}
$config = [];
/**
* If files exists use it
*/
if ( $this->zip->locateName( Main::CFG_NAME ) !== false ) {
$config = json_decode( $this->zip->getFromName( Main::CFG_NAME ), true );
}
/**
* Add each item to the archive's config
*/
$config[ $this->item_type ] = $config[ $this->item_type ] ?? [];
$config[ $this->item_type ][] = $this->item_name;
$this->zip->addFromString( Main::CFG_NAME, json_encode( $config ) );
if ( ! empty( $content_data['path'] ) ) {
$this->zip->addFile( $content_data['path'], $this->item_type . '/' . $this->item_name . '.zip' );
}
}
/**
* Export a page/post
*
* @throws Exception
*/
public function export_content( $id ) {
return ( new \TCB_Content_Handler() )->export( $id, $this->item_name );
}
/**
* Export a landing page
*
* @throws Exception
*/
public function export_landing_page( $id ) {
return ( new \TCB_Landing_Page_Transfer() )->export( $id, $this->item_name );
}
/**
* @throws Exception
*/
public function export_skin( $id ) {
return ( new \Thrive_Transfer_Export( $this->item_name ) )->export( 'skin', $id );
}
/**
* Set the name of the archive
*
* @param $name
* @param bool $ensure_filename - if true the name will be sanitized & suffixed with date
*
* @return void
*/
public function set_zip_name( $name, bool $ensure_filename = true ) {
if ( $ensure_filename ) {
$name = sanitize_file_name( $name );
$name = $name ?: static::DEFAULT_NAME;
$this->zip_filename = str_replace( ' ', '-', $name ) . '-' . gmdate( 'Y-m-d-H-i-s' ) . '.zip';
} else {
$this->zip_filename = $name;
}
$this->zip_path = Main::get_exported_dir_path() . $this->zip_filename;
}
}