Files
roi-theme/wp-content/plugins/wp-ultimate-csv-importer/uploadModules/ZipHandler.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

179 lines
5.8 KiB
PHP
Executable File

<?php
/**
* WP Ultimate CSV Importer plugin file.
*
* Copyright (C) 2010-2020, Smackcoders Inc - info@smackcoders.com
*/
namespace Smackcoders\FCSV;
if ( ! defined( 'ABSPATH' ) )
exit; // Exit if accessed directly
class ZipHandler {
private static $instance = null;
private static $smack_csv_instance = null;
public static function getInstance() {
if (ZipHandler::$instance == null) {
ZipHandler::$instance = new ZipHandler;
ZipHandler::$smack_csv_instance = SmackCSV::getInstance();
return ZipHandler::$instance;
}
return ZipHandler::$instance;
}
/**
* Extracts zip file.
* @param string $path
* @param string $extract_path
* @return string
*/
public function zip_upload($path , $extract_path , $event_key =''){
if (class_exists('ZipArchive')) {
$zip = new \ZipArchive;
$res = $zip->open($path);
if ($res === TRUE) {
$response = $this->wp_csv_importer_generate_content($zip, $extract_path,$event_key);
if($response == "UnSupported File Format"){
//rmdir($extract_path);
unlink($path);
}
} else {
$response = 'Error Occured while extracting zip file.';
}
}else{
$response = 'ZipArchive class not exists';
}
return $response;
}
/**
* Uploads zip file
* @param string $zip
* @param string $dir
* @return string
*/
public function wp_csv_importer_generate_content($zip, $dir,$event_key=''){
$get_upload_dir = wp_upload_dir();
$supported_formats = array('csv', 'xml', 'txt', 'json');
$check_for_extracted_files = false;
for($i = 0; $i < $zip->numFiles; $i++)
{
$filterfiles = $zip->getNameIndex($i);
$file_extension = pathinfo($filterfiles, PATHINFO_EXTENSION);
if (in_array($file_extension, $supported_formats)){
$zip->extractTo($dir,$filterfiles);
chmod($dir , 0777);
$check_for_extracted_files = true;
}
if (!empty($event_key)) {
$files = scandir($dir);
foreach ($files as $file) {
if ($file !== '.' && $file !== '..') {
$old_file_path = $dir . '/' . $file; // Full path of the old file
if (is_file($old_file_path)) { // Ensure it's a file
$file_info = wp_check_filetype($old_file_path); // Check file type
$extension = pathinfo($old_file_path, PATHINFO_EXTENSION); // Get file extension
// Check file type based on extension
$allowed_extensions = ['csv', 'xml', 'xlsx', 'xls', 'tsv'];
if (in_array(strtolower($extension), $allowed_extensions)) {
$random_key = $event_key; // Generate a unique random key
$new_file_name = $random_key; // Save file without extension
$new_file_path = $dir . '/' . $new_file_name; // Update path
// Rename the file securely
if (rename($old_file_path, $new_file_path)) {
// echo "File renamed successfully: $old_file_path to $new_file_path\n";
} else {
// echo "Failed to rename: $old_file_path\n";
}
}
}
}
}
}
}
if($check_for_extracted_files){
$filesAndFoldersPath = array();
$zipExtractFolder = $dir;
$get_upload_dirpath = $get_upload_dir['basedir'];
$get_upload_dirurl = $get_upload_dir['baseurl'];
$filesList = $this->wp_csv_importer_fetch_all_files($zipExtractFolder);
$content = [];
foreach($filesList as $singleFile){
$get_file_name = explode('/',$singleFile);
$c = count($get_file_name);
$temp_file_name = $get_file_name[$c - 1];
$file_extension = pathinfo($temp_file_name, PATHINFO_EXTENSION);
if(empty($file_extension)){
$file_extension = 'xml';
}
if($file_extension == 'xlsx'){
$file_extension = 'csv';
}
$getFileRealPath = explode($get_upload_dirpath,$singleFile);
$getFileRealPath = $get_upload_dirurl.$getFileRealPath[1];
$file_names = array("name"=>'' , "path"=>'');
$file_names['name'] .= $temp_file_name;
$file_names['path'] .= $getFileRealPath;
array_push($content , $file_names);
}
}
else{
$content = "UnSupported File Format";
}
$zip->close();
return $content;
}
/**
* Fetches all files from zip.
* @param string $dir
* @return string
*/
public function wp_csv_importer_fetch_all_files($dir){
$root = scandir($dir);
foreach($root as $value)
{
if($value === '.' || $value === '..')
continue;
if(is_file("$dir/$value")) {
$files[] = "$dir/$value";continue;
}
foreach($this->wp_csv_importer_fetch_all_files("$dir/$value") as $value)
{
$files[] = $value;
}
}
return $files;
}
}