prefix . 'simple_file_list'; $charset_collate = $wpdb->get_charset_collate(); $sql = "CREATE TABLE $table_name ( id mediumint(9) NOT NULL AUTO_INCREMENT, file_name varchar(255) NOT NULL, file_path varchar(255) NOT NULL, file_url varchar(255) NOT NULL, file_size varchar(20) NOT NULL, file_type varchar(100) NOT NULL, description text, category varchar(100), upload_date datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, user_id bigint(20) NOT NULL, PRIMARY KEY (id) ) $charset_collate;"; require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); dbDelta($sql); // Add default options add_option('sfl_max_files', 10); add_option('sfl_max_size', 64); // in MB (alterado para 64MB) add_option( 'sfl_allowed_types', 'jpg,jpeg,png,tif,pdf,mov,mp4,mp3,zip,doc,docx,xls,xlsx,ppt,pptx' // Adicionadas extensões do Word, Excel e PowerPoint ); } function sfl_deactivate_plugin() { // Clean up if needed } // Enqueue scripts and styles add_action('wp_enqueue_scripts', 'sfl_enqueue_scripts'); function sfl_enqueue_scripts() { wp_enqueue_style('sfl-style', SFL_PLUGIN_URL . 'assets/css/style.css'); wp_enqueue_style('dashicons'); // Adicione esta linha wp_enqueue_script('sfl-script', SFL_PLUGIN_URL . 'assets/js/script.js', array('jquery'), SFL_VERSION, true); // Localize script for AJAX wp_localize_script('sfl-script', 'sfl_ajax', array( 'ajax_url' => admin_url('admin-ajax.php'), 'nonce' => wp_create_nonce('sfl-nonce') )); } // Add admin menu add_action('admin_menu', 'sfl_admin_menu'); function sfl_admin_menu() { add_menu_page( 'Simple File List', 'File List', 'manage_options', 'simple-file-list', 'sfl_admin_page', 'dashicons-media-default', 30 ); add_submenu_page( 'simple-file-list', 'Settings', 'Settings', 'manage_options', 'simple-file-list-settings', 'sfl_settings_page' ); } // Shortcode for frontend display add_shortcode('simple_file_list', 'sfl_display_file_list'); function sfl_display_file_list($atts) { ob_start(); if (is_user_logged_in()) { sfl_render_upload_form(); } sfl_render_file_list(); return ob_get_clean(); } // Handle file upload add_action('wp_ajax_sfl_upload_file', 'sfl_handle_file_upload'); add_action('wp_ajax_nopriv_sfl_upload_file', 'sfl_handle_file_upload'); function sfl_handle_file_upload() { // Verify nonce check_ajax_referer('sfl-nonce', 'security'); if (!is_user_logged_in()) { wp_send_json_error('You must be logged in to upload files.'); } if (!isset($_FILES['sfl_file_upload'])) { wp_send_json_error('No file was uploaded.'); } $file = $_FILES['sfl_file_upload']; $file_name = sanitize_file_name($file['name']); $file_tmp = $file['tmp_name']; $file_size = $file['size']; $file_error = $file['error']; // Check for upload errors if ($file_error !== UPLOAD_ERR_OK) { wp_send_json_error('Upload error: ' . $file_error); } // Check file size $max_size = get_option('sfl_max_size') * 1024 * 1024; // Convert MB to bytes if ($file_size > $max_size) { wp_send_json_error('File size exceeds maximum allowed size.'); } // Check file type $allowed_types = explode(',', get_option('sfl_allowed_types')); $file_ext = strtolower(pathinfo($file_name, PATHINFO_EXTENSION)); if (!in_array($file_ext, $allowed_types)) { wp_send_json_error('File type not allowed.'); } // Generate unique filename if file exists $counter = 1; $original_name = pathinfo($file_name, PATHINFO_FILENAME); $new_file_name = $file_name; while (file_exists(SFL_UPLOAD_DIR . $new_file_name)) { $new_file_name = $original_name . '-' . $counter . '.' . $file_ext; $counter++; } // Move uploaded file if (move_uploaded_file($file_tmp, SFL_UPLOAD_DIR . $new_file_name)) { // Save file info to database global $wpdb; $table_name = $wpdb->prefix . 'simple_file_list'; $data = array( 'file_name' => $new_file_name, 'file_path' => SFL_UPLOAD_DIR . $new_file_name, 'file_url' => SFL_UPLOAD_URL . $new_file_name, 'file_size' => size_format($file_size, 2), 'file_type' => $file_ext, 'description' => sanitize_text_field($_POST['description']), 'category' => sanitize_text_field($_POST['category']), 'user_id' => get_current_user_id() ); $wpdb->insert($table_name, $data); wp_send_json_success('File uploaded successfully.'); } else { wp_send_json_error('Error moving uploaded file.'); } } // Handle file deletion add_action('wp_ajax_sfl_delete_file', 'sfl_handle_file_delete'); function sfl_handle_file_delete() { // Verify nonce and permissions check_ajax_referer('sfl-nonce', 'security'); if (!is_user_logged_in() || !current_user_can('upload_files')) { wp_send_json_error('You do not have permission to delete files.'); } $file_id = intval($_POST['file_id']); global $wpdb; $table_name = $wpdb->prefix . 'simple_file_list'; // Get file info $file = $wpdb->get_row($wpdb->prepare( "SELECT * FROM $table_name WHERE id = %d", $file_id )); if (!$file) { wp_send_json_error('File not found.'); } // Delete file from server if (file_exists($file->file_path)) { unlink($file->file_path); } // Delete record from database $wpdb->delete($table_name, array('id' => $file_id)); wp_send_json_success('File deleted successfully.'); }