File: //proc/self/cwd/wp-content/plugins/download-plugin/app/Themes/Base.php
<?php
namespace DPWAP\Themes;
use ZipArchive;
use RecursiveIteratorIterator;
use RecursiveDirectoryIterator;
class Base {
public function setup() {
if ( !current_user_can( 'switch_themes' ) ) return;
// enqueue js and css
add_action( 'admin_enqueue_scripts', array( $this, 'dpwap_load_theme_admin_scripts' ) );
add_action( 'admin_init', array( $this, 'dpwap_theme_download' ) );
}
public function dpwap_load_theme_admin_scripts() {
global $pagenow;
if ( $pagenow == 'themes.php' ) {
wp_register_style( 'dtwap-admin-style', DPWAP_URL.'/assets/css/dtwap-admin.css', array(), DPWAP_VERSION );
wp_enqueue_style( 'dtwap-admin-style' );
wp_register_script( 'dtwap-admin-script', DPWAP_URL.'/assets/js/dtwap-admin.js', array('jquery'), DPWAP_VERSION, true );
wp_enqueue_script( 'dtwap-admin-script' );
wp_localize_script( 'dtwap-admin-script', 'dtwap', array( 'download_title' => __( 'Download', 'download-plugin'), 'dtwap_nonce'=> wp_create_nonce('dtwap-themes') ) );
}
}
/**
* Download theme zip
*
* @package Download Theme
* @since 1.0.0
*/
public function dpwap_theme_download(){
if(!isset($_GET['_wpnonce']) || !wp_verify_nonce($_GET['_wpnonce'],'dtwap-themes')){
return;
}
$themes = wp_get_themes();
if( is_user_logged_in() && current_user_can( 'switch_themes' ) && isset( $_GET['dtwap_download'] ) && !empty( $_GET['dtwap_download'] ) && array_key_exists( $_GET['dtwap_download'], $themes ) ) {
$dtwap_download = sanitize_text_field( $_GET['dtwap_download'] );
$folder_path = get_theme_root( $dtwap_download ).'/'.$dtwap_download;
$root_path = realpath( $folder_path );
$zip = new ZipArchive();
$zip->open( $folder_path.'.zip', ZipArchive::CREATE | ZipArchive::OVERWRITE );
$files = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($root_path),
RecursiveIteratorIterator::LEAVES_ONLY
);
foreach ( $files as $name => $file ) {
if ( !$file->isDir() ) {
$file_path = $file->getRealPath();
$relative_path = substr( $file_path, strlen( $root_path ) + 1 );
$zip->addFile( $file_path, $relative_path );
}
}
$zip->close();
// Download Zip
$zip_file = $folder_path.'.zip';
if ( file_exists( $zip_file ) ) {
header( 'Content-Description: File Transfer' );
header( 'Content-Type: application/octet-stream' );
header( 'Content-Disposition: attachment; filename="'.basename($zip_file).'"' );
header( 'Expires: 0' );
header( 'Cache-Control: must-revalidate' );
header( 'Pragma: public' );
header( 'Content-Length: ' . filesize($zip_file) );
header( 'Set-Cookie:fileLoading=true' );
readfile( $zip_file );
unlink( $zip_file );
exit;
}
}
}
}