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

323 lines
9.9 KiB
PHP
Executable File

<?php
/******************************************************************************************
* Copyright (C) Smackcoders. - All Rights Reserved under Smackcoders Proprietary License
* Unauthorized copying of this file, via any medium is strictly prohibited
* Proprietary and confidential
* You can contact Smackcoders at email address info@smackcoders.com.
*******************************************************************************************/
namespace Smackcoders\FCSV;
if ( ! defined( 'ABSPATH' ) )
exit; // Exit if accessed directly
class SingleImportExport {
private static $singlecsv_instance = null;
public function __construct() {
add_action('wp_ajax_handle_export_csv', array($this,'export_single_post_as_csv'));
add_action('wp_ajax_handle_import_csv', array($this,'import_single_post_as_csv'));
}
public static function getInstance() {
if (SingleImportExport::$singlecsv_instance == null) {
SingleImportExport::$singlecsv_instance = new SingleImportExport;
return SingleImportExport::$singlecsv_instance;
}
return SingleImportExport::$singlecsv_instance;
}
public static function import_single_post_as_csv() {
if (!is_user_logged_in() || !current_user_can('manage_options')) {
wp_send_json_error(['message' => 'Unauthorized access.'], 403);
return;
}
check_ajax_referer('smack-ultimate-csv-importer', 'securekey');
if (empty($_FILES['file']) || $_FILES['file']['error'] !== UPLOAD_ERR_OK) {
wp_send_json_error(['message' => 'File upload error.']);
return;
}
$file_name = sanitize_file_name($_FILES['file']['name']);
$file_tmp = $_FILES['file']['tmp_name'];
$file_info = wp_check_filetype_and_ext($file_tmp, $file_name, ['csv' => 'text/csv']);
if (!$file_info['ext'] || $file_info['ext'] !== 'csv') {
wp_send_json_error(['message' => 'Invalid file type. Only CSV files are allowed.']);
return;
}
$upload = wp_upload_dir();
$upload_dir = $upload['basedir'];
if (is_user_logged_in() && current_user_can('administrator'))
{
$upload_dir = $upload_dir . '/smack_uci_uploads/imports/';
if (!is_dir($upload_dir)) {
wp_mkdir_p($upload_dir);
chmod($upload_dir, 0755);
$index_php_file = $upload_dir . 'index.php';
if (!file_exists($index_php_file)) {
$file_content = '<?php' . PHP_EOL . '?>';
file_put_contents($index_php_file, $file_content);
}
}
}
if ($mode != 'CLI') {
chmod($upload_dir, 0777);
}
$upload_dir_path = $upload_dir. $file_name;
if (!is_dir($upload_dir_path)) {
wp_mkdir_p( $upload_dir_path);
}
chmod($upload_dir_path, 0777);
$csv_file = $upload_dir_path.'/'.$file_name;
if(move_uploaded_file($_FILES['file']['tmp_name'], $csv_file)){
if (($handle = fopen($csv_file, 'r')) !== false) {
$headers = fgetcsv($handle, 1000, ',');
while (($row = fgetcsv($handle, 1000, ',')) !== false) {
$data = array_combine($headers, $row);
foreach ($data as $key => $value) {
if (strpos($key, 'core_') === 0) {
$post_data[str_replace('core_', '', $key)] = $value;
}
}
$post_id = wp_insert_post($post_data);
if (!is_wp_error($post_id)) {
// Set meta data
foreach ($data as $key => $value) {
if (strpos($key, 'meta_') === 0 && $value !== '') {
$meta_key = substr($key, 5);
if ($meta_key === '_elementor_data') {
update_post_meta($post_id, $meta_key, wp_slash($value));
} elseif (in_array($meta_key, [
'_elementor_css',
'_elementor_page_assets',
'_elementor_controls_usage'
], true)) {
$maybe_array = @unserialize($value);
if ($maybe_array !== false || $value === 'b:0;') {
update_post_meta($post_id, $meta_key, $maybe_array);
} elseif (is_array($value)) {
update_post_meta($post_id, $meta_key, $value);
} else {
update_post_meta($post_id, $meta_key, [$value]);
}
} elseif ($meta_key === '_elementor_element_cache') {
$decoded = json_decode($value, true);
if (json_last_error() === JSON_ERROR_NONE) {
update_post_meta($post_id, $meta_key, $decoded);
} else {
update_post_meta($post_id, $meta_key, $value);
}
} else {
update_post_meta($post_id, $meta_key, sanitize_text_field($value));
}
}
}
// Set terms
if (!empty($data['terms_data'])) {
$terms = json_decode($data['terms_data'], true);
foreach ($terms as $term) {
$parent_id = 0;
// Handle parent term if necessary
if (!empty($term['parent']) && is_taxonomy_hierarchical($term['taxonomy'])) {
$parent_term = get_term($term['parent'], $term['taxonomy']);
$parent_id = $parent_term ? $parent_term->term_id : 0;
}
if (!empty($term['term_name'])) {
// Check if the term already exists
$existing_term = get_term_by('name', $term['term_name'], $term['taxonomy']);
if ($existing_term) {
// Assign the existing term to the post
wp_set_object_terms($post_id, [$existing_term->term_id], $term['taxonomy'], true);
} else {
// Insert the term if it doesn't exist
$term_id = wp_insert_term($term['term_name'], $term['taxonomy'], [
'slug' => $term['term_slug'],
'parent' => $parent_id,
]);
if (!is_wp_error($term_id)) {
// Assign the newly created term to the post
wp_set_object_terms($post_id, [$term_id['term_id']], $term['taxonomy'], true);
}
}
}
}
}
// Set featured image
if (!empty($data['core_featured_image'])) {
$attachment_id = attachment_url_to_postid($data['core_featured_image']);
if ($attachment_id) {
set_post_thumbnail($post_id, $attachment_id);
}
}
}
}
fclose($handle);
}
$response['success'] = true;
$response['message'] = 'Inserted Post '. $post_id;
$response['redirect_link'] = get_edit_post_link( $post_id, true );
wp_redirect($response['redirect_link']);
echo wp_json_encode($response);
wp_die();
}
}
public static function export_single_post_as_csv() {
if (!is_user_logged_in() || !current_user_can('manage_options')) {
wp_send_json_error(['message' => 'Unauthorized access.'], 403);
return;
}
check_ajax_referer('smack-ultimate-csv-importer', 'securekey');
global $wpdb;
$post_id = intval($_POST['post_id']);
$post = get_post($post_id);
if (!is_user_logged_in() || !current_user_can('manage_options')) {
wp_send_json_error(['message' => 'Unauthorized access.']);
return;
}
if (!$post_id || get_post_status($post_id) !== 'publish') {
wp_send_json_error(['message' => 'Invalid or unpublished post ID.']);
wp_die();
}
// Open output stream
header('Content-Type: text/csv; charset=UTF-8');
header('Content-Disposition: attachment; filename=post-data-' . $post_id . '.csv');
$meta_keys = $wpdb->get_col(
$wpdb->prepare("SELECT DISTINCT meta_key FROM {$wpdb->postmeta} WHERE post_id = %d", $post_id)
);
// Fetch taxonomies
$taxonomies = get_object_taxonomies($post->post_type);
// Headers
$headers = array_merge(
['core_post_title', 'core_post_content', 'core_post_name', 'core_post_excerpt', 'core_post_status', 'core_post_type', 'core_featured_image', 'core_ping_status', 'core_comment_status','core_post_format','core_post_author', 'core_post_date', 'core_post_parent', 'core_menu_order','core_wp_page_template' ],
array_map(fn($meta) => "meta_$meta", $meta_keys),
['terms_data']
);
// Core data
$featured_image = wp_get_attachment_url(get_post_thumbnail_id($post_id));
$row = [
'core_post_title' => $post->post_title,
'core_post_content' => $post->post_content,
'core_post_name' => $post->post_name,
'core_post_excerpt' => $post->post_excerpt,
'core_post_status' => $post->post_status,
'core_post_type' => $post->post_type,
'core_featured_image' => $featured_image ?: '',
'core_ping_status' => $post->ping_status,
'core_comment_status' => $post->comment_status,
'core_post_format' => $post->post_format,
'core_post_author' => get_the_author_meta('display_name', $post->post_author),
'core_post_date' => $post->post_date,
'core_post_parent' => $post->post_parent,
'core_menu_order' => $post->menu_order,
'core_wp_page_template' => $post->wp_page_template
];
// Meta data
foreach ($meta_keys as $meta_key) {
$meta_value = get_post_meta($post_id, $meta_key, true);
if (is_array($meta_value) || is_object($meta_value)) {
$meta_value = wp_json_encode($meta_value, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
}
$row["meta_$meta_key"] = $meta_value;
}
// Terms data
$terms_data = [];
foreach ($taxonomies as $taxonomy) {
$terms = wp_get_object_terms($post_id, $taxonomy);
foreach ($terms as $term) {
$term_meta = get_term_meta($term->term_id);
$terms_data[] = [
'taxonomy' => $taxonomy,
'term_name' => $term->name,
'term_slug' => $term->slug,
'parent' => $term->parent,
'term_meta' => $term_meta,
];
}
}
$row['terms_data'] = json_encode($terms_data);
if (is_user_logged_in() && current_user_can('administrator'))
{
$upload_dir = ABSPATH . 'wp-content/uploads/smack_uci_uploads/exports/';
if (!is_dir($upload_dir))
{
wp_mkdir_p($upload_dir);
}
$base_dir = wp_upload_dir();
$upload_url = $base_dir['baseurl'] . '/smack_uci_uploads/exports/';
chmod($upload_dir, 0777);
}
$file_path = $upload_dir. $post_id . '.csv';
$output = fopen($file_path, 'w');
fputcsv($output, $headers);
fputcsv($output, $row);
fclose($output);
$response['success'] = true;
$upload_url = $base_dir['baseurl'] . '/smack_uci_uploads/exports/';
$fileURL = $upload_url . $post_title. $post_id . '.csv';
$response['file_path'] = $fileURL;
echo wp_json_encode($response);
wp_die();
}
}