JezK
Edit File: inc-avia-download-demo.php
<?php /** * Download demo files from external server * * @since 4.8.2 * @added_by Günter */ if( ! defined( 'AVIA_FW' ) ) { exit( 'No direct script access allowed' ); } global $avia_config; $demo_name = ! empty( $_REQUEST['demo_name'] ) ? stripslashes( $_REQUEST['demo_name'] ) : ''; $demo_full_name = ! empty( $_REQUEST['demo_full_name'] ) ? stripslashes( $_REQUEST['demo_full_name'] ) : ''; $debug_prefix = sprintf( __( 'Demo File Download (%s):', 'avia_framework' ), $demo_full_name ) . ' '; if( defined( 'WP_DEBUG' ) && WP_DEBUG ) { error_log( $debug_prefix . __( 'Download started', 'avia_framework' ) ); } if( empty( $_REQUEST['download_url'] ) || empty( $_REQUEST['import_dir'] ) || empty( $_REQUEST['demo_name'] ) ) { $msg = __( 'To few parameters provided - a download is not possible.', 'avia_framework' ); if( defined( 'WP_DEBUG' ) && WP_DEBUG ) { error_log( $debug_prefix . $msg ); } exit( 'avia_error-' . $msg ); } $tmp_filename = download_url( $_REQUEST['download_url'] ); if( $tmp_filename instanceof WP_Error ) { $msg = __( 'Error accessing file for download:<br /><br />', 'avia_framework' ) . implode( '<br>', $tmp_filename->get_error_messages() ); if( defined( 'WP_DEBUG' ) && WP_DEBUG ) { error_log( $debug_prefix . $msg ); } exit( 'avia_error-' . $msg ); } avia_backend_delete_folder( $_REQUEST['import_dir'] ); if( ! avia_backend_create_folder( $_REQUEST['import_dir'] ) ) { $msg = sprintf( __( 'Unable to create the download folder <pre>%s</pre> for demo files.', 'avia_framework' ), $_REQUEST['import_dir'] ); if( defined( 'WP_DEBUG' ) && WP_DEBUG ) { error_log( $debug_prefix . $msg ); } exit( 'avia_error-' . $msg ); } $zip = new ZipArchive(); if ( ! $zip->open( $tmp_filename ) ) { $msg = __( 'Wasn\'t able to work with Zip Archive', 'avia_framework' ); if( defined( 'WP_DEBUG' ) && WP_DEBUG ) { error_log( $debug_prefix . $msg ); } exit( 'avia_error-' . $msg ); } /* * iOS systems may add system files to zip like _MACOSX. * We check for first files to copy and ignore other files included. * * Files must be located like: * * $demo_name.* * * or * * $demo_name/$demo_name.* * * @since 5.0 */ $imported = array( 'xml' => false, 'txt' => false ); $check1 = $demo_name; $check2 = $demo_name . '/' . $demo_name; for( $i = 0; $i < $zip->numFiles; $i++ ) { try { $source_file = $zip->getNameIndex( $i ); $source_file_check = trim( str_replace( '\\', '/', $source_file ) ); if( 0 !== stripos( $source_file_check, $check1 ) && 0 !== stripos( $source_file_check, $check2 ) ) { continue; } if( false === stripos( $source_file_check, 'xml' ) && false === stripos( $source_file_check, 'txt' ) && false === stripos( $source_file_check, 'php' ) ) { continue; } if( false !== stripos( $source_file_check, 'xml' ) ) { if( $imported['xml'] ) { continue; } $imported['xml'] = true; } else { if( $imported['txt'] ) { continue; } $imported['txt'] = true; } $skip = stripos( $source_file_check, '/' ); if( false === $skip ) { $source_file_name = $source_file_check; } else { $source_file_name = substr( $source_file_check, $skip + 1 ); } $dest_file = trailingslashit( $_REQUEST['import_dir'] ) . $source_file_name; $fp = $zip->getStream( $source_file ); if( ! $fp ) { throw new Exception(); } $ofp = fopen( $dest_file, 'w' ); if( false === $ofp ) { throw new Exception(); } while( ! feof( $fp ) ) { $content = fread( $fp, 8192 ); if( false === $content ) { throw new Exception(); } if( false === fwrite( $ofp, $content ) ) { throw new Exception(); } } fclose( $fp ); fclose( $ofp ); } catch( Exception $ex ) { if( ! empty( $fp ) ) { fclose( $fp ); } if( ! empty( $ofp ) ) { fclose( $ofp ); } $zip->close(); unlink( $tmp_filename ); avia_backend_delete_folder( $_REQUEST['import_dir'] ); $msg = __( 'Wasn\'t able to read demo files from downloaded zip file.', 'avia_framework' ); if( defined( 'WP_DEBUG' ) && WP_DEBUG ) { error_log( $debug_prefix . $msg ); } exit( 'avia_error-' . $msg ); } } $zip->close(); unlink( $tmp_filename );