get_charset_collate(); // SQL to create necessary tables $sql = " CREATE TABLE {$wpdb->prefix}sige_place ( id MEDIUMINT(9) NOT NULL AUTO_INCREMENT, place TINYTEXT NOT NULL, comments TEXT NOT NULL, PRIMARY KEY (id) ) $charset_collate; CREATE TABLE {$wpdb->prefix}sige_speakers ( id MEDIUMINT(9) NOT NULL AUTO_INCREMENT, research_degree VARCHAR(50) NOT NULL, full_name TINYTEXT NOT NULL, email VARCHAR(100) NOT NULL, institution TINYTEXT NOT NULL, PRIMARY KEY (id) ) $charset_collate; CREATE TABLE {$wpdb->prefix}sige_event_names ( id MEDIUMINT(9) NOT NULL AUTO_INCREMENT, acronym VARCHAR(50) NOT NULL, name TINYTEXT NOT NULL, responsible_for TINYTEXT NOT NULL, PRIMARY KEY (id) ) $charset_collate; CREATE TABLE {$wpdb->prefix}sige_meta_keys ( id MEDIUMINT(9) NOT NULL AUTO_INCREMENT, meta_key VARCHAR(255) NOT NULL, status TINYINT(1) NOT NULL DEFAULT 0, PRIMARY KEY (id), UNIQUE KEY meta_key (meta_key) ) $charset_collate; CREATE TABLE {$wpdb->prefix}sige_activities ( id MEDIUMINT(9) NOT NULL AUTO_INCREMENT, name TINYTEXT NOT NULL, description TEXT NOT NULL, start_date DATE NOT NULL, start_time TIME NOT NULL, end_date DATE NOT NULL, end_time TIME NOT NULL, type VARCHAR(50) NOT NULL, modality VARCHAR(50) NOT NULL, status VARCHAR(50) NOT NULL, curriculum TEXT NOT NULL, comment TEXT NOT NULL, place_id MEDIUMINT(9) NOT NULL, speaker_id MEDIUMINT(9) NOT NULL, event_name_id MEDIUMINT(9), security_credential VARCHAR(20) NOT NULL, chair TINYTEXT NOT NULL, target_audience VARCHAR(50) NOT NULL, attendance_control ENUM('yes', 'no') NOT NULL DEFAULT 'no', PRIMARY KEY (id), KEY place_id (place_id), KEY speaker_id (speaker_id), KEY event_name_id (event_name_id), CONSTRAINT fk_place FOREIGN KEY (place_id) REFERENCES {$wpdb->prefix}sige_place(id) ON DELETE CASCADE, CONSTRAINT fk_speaker FOREIGN KEY (speaker_id) REFERENCES {$wpdb->prefix}sige_speakers(id) ON DELETE CASCADE, CONSTRAINT fk_event_name FOREIGN KEY (event_name_id) REFERENCES {$wpdb->prefix}sige_event_names(id) ON DELETE SET NULL ) $charset_collate; CREATE TABLE {$wpdb->prefix}sige_enrollments ( id MEDIUMINT(9) NOT NULL AUTO_INCREMENT, activity_id MEDIUMINT(9) NOT NULL, user_id BIGINT(20) UNSIGNED NOT NULL, enrollment_date DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL, status VARCHAR(50) NOT NULL, PRIMARY KEY (id), FOREIGN KEY (activity_id) REFERENCES {$wpdb->prefix}sige_activities(id) ON DELETE CASCADE, FOREIGN KEY (user_id) REFERENCES {$wpdb->prefix}users(ID) ON DELETE CASCADE ) $charset_collate; CREATE TABLE {$wpdb->prefix}sige_cancellation_record ( id MEDIUMINT(9) NOT NULL AUTO_INCREMENT, activity_id MEDIUMINT(9) NOT NULL, user_id BIGINT(20) UNSIGNED NOT NULL, date_of_cancelation DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL, reasons VARCHAR(50) NULL, PRIMARY KEY (id), FOREIGN KEY (activity_id) REFERENCES {$wpdb->prefix}sige_activities(id) ON DELETE CASCADE, FOREIGN KEY (user_id) REFERENCES {$wpdb->prefix}users(ID) ON DELETE CASCADE ) $charset_collate; CREATE TABLE {$wpdb->prefix}sige_activity_notices ( id MEDIUMINT(9) NOT NULL AUTO_INCREMENT, type VARCHAR(50) NOT NULL, notice TEXT NOT NULL, PRIMARY KEY (id) ) $charset_collate; CREATE TABLE {$wpdb->prefix}sige_display_options ( id MEDIUMINT(9) NOT NULL AUTO_INCREMENT, field_name VARCHAR(50) NOT NULL, display TINYINT(1) NOT NULL DEFAULT 1, PRIMARY KEY (id) ) $charset_collate; CREATE TABLE {$wpdb->prefix}sige_enrollment_button_style ( button_action VARCHAR(50) NOT NULL, button_label VARCHAR(50) NOT NULL, background_color VARCHAR(7) NOT NULL, font_size VARCHAR(10) NOT NULL, font_family VARCHAR(100) NOT NULL, font_weight VARCHAR(10) NOT NULL, PRIMARY KEY (button_action) ) $charset_collate; CREATE TABLE {$wpdb->prefix}sige_enrollment_status_style ( status_action VARCHAR(50) NOT NULL, status_label VARCHAR(50) NOT NULL, font_color VARCHAR(7) NOT NULL, font_size VARCHAR(10) NOT NULL, font_family VARCHAR(100) NOT NULL, font_weight VARCHAR(10) NOT NULL, PRIMARY KEY (status_action) ) $charset_collate; CREATE TABLE {$wpdb->prefix}sige_email_messages ( id MEDIUMINT(9) NOT NULL AUTO_INCREMENT, email_sender VARCHAR(100) NOT NULL, email_subject VARCHAR(255) NOT NULL, email_message TEXT NOT NULL, status_action VARCHAR(50) NOT NULL, PRIMARY KEY (id), FOREIGN KEY (status_action) REFERENCES {$wpdb->prefix}sige_enrollment_status_style(status_action) ON DELETE CASCADE ) $charset_collate; CREATE TABLE {$wpdb->prefix}sige_enrollment_attendance_control ( id MEDIUMINT(9) NOT NULL AUTO_INCREMENT, enrollment_id MEDIUMINT(9) NOT NULL, attended ENUM('yes', 'no') DEFAULT NULL, PRIMARY KEY (id), FOREIGN KEY (enrollment_id) REFERENCES {$wpdb->prefix}sige_enrollments(id) ON DELETE CASCADE ) $charset_collate; "; require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); dbDelta($sql); // Insert default display options $default_options = [ 'Notices', 'Speaker', 'Curriculum Vitae', 'Data', 'Place', 'Enrollment Status', 'Comment', 'Security Credential', 'Target Audience', 'Chair' ]; foreach ($default_options as $option) { if (!$wpdb->get_var($wpdb->prepare("SELECT COUNT(*) FROM {$wpdb->prefix}sige_display_options WHERE field_name = %s", $option))) { $wpdb->insert("{$wpdb->prefix}sige_display_options", ['field_name' => $option, 'display' => 1]); } } // Insert default button styles $default_styles = [ ['button_action' => 'request_enrollment', 'button_label' => 'Request Enrollment', 'background_color' => '#0073aa', 'font_size' => '14px', 'font_family' => 'Arial, sans-serif', 'font_weight' => 'normal'], ['button_action' => 'cancel_enrollment', 'button_label' => 'Cancel Enrollment', 'background_color' => '#ac1226', 'font_size' => '14px', 'font_family' => 'Arial, sans-serif', 'font_weight' => 'normal'] ]; foreach ($default_styles as $style) { $wpdb->insert("{$wpdb->prefix}sige_enrollment_button_style", $style); } // Insert default status styles $default_status_styles = [ ['status_action' => 'Not Requested', 'status_label' => 'Not Requested', 'font_color' => '#000000', 'font_size' => '14px', 'font_family' => 'Arial, sans-serif', 'font_weight' => 'normal'], ['status_action' => 'Enrollment Canceled by User', 'status_label' => 'Enrollment Canceled by User', 'font_color' => '#ac1226', 'font_size' => '14px', 'font_family' => 'Arial, sans-serif', 'font_weight' => 'normal'], ['status_action' => 'Under Analysis', 'status_label' => 'Under Analysis', 'font_color' => '#0073aa', 'font_size' => '14px', 'font_family' => 'Arial, sans-serif', 'font_weight' => 'normal'], ['status_action' => 'Approved', 'status_label' => 'Approved', 'font_color' => '#008000', 'font_size' => '14px', 'font_family' => 'Arial, sans-serif', 'font_weight' => 'normal'], ['status_action' => 'Waiting List', 'status_label' => 'Waiting List', 'font_color' => '#CC9900', 'font_size' => '14px', 'font_family' => 'Arial, sans-serif', 'font_weight' => 'normal'], ['status_action' => 'Not Approved', 'status_label' => 'Not Approved', 'font_color' => '#bc97cd', 'font_size' => '14px', 'font_family' => 'Arial, sans-serif', 'font_weight' => 'normal'] ]; foreach ($default_status_styles as $style) { $wpdb->insert("{$wpdb->prefix}sige_enrollment_status_style", $style); } // Insert default email messages $default_email_messages = [ ['email_sender' => get_bloginfo('admin_email'), 'email_subject' => 'Not Requested', 'email_message' => 'Your enrollment status is Not Requested.', 'status_action' => 'Not Requested'], ['email_sender' => get_bloginfo('admin_email'), 'email_subject' => 'Enrollment Canceled by User', 'email_message' => 'Your enrollment has been canceled by user.', 'status_action' => 'Enrollment Canceled by User'], ['email_sender' => get_bloginfo('admin_email'), 'email_subject' => 'Under Analysis', 'email_message' => 'Your enrollment is under analysis.', 'status_action' => 'Under Analysis'], ['email_sender' => get_bloginfo('admin_email'), 'email_subject' => 'Approved', 'email_message' => 'Your enrollment has been approved.', 'status_action' => 'Approved'], ['email_sender' => get_bloginfo('admin_email'), 'email_subject' => 'Waiting List', 'email_message' => 'You have been placed on the waiting list.', 'status_action' => 'Waiting List'], ['email_sender' => get_bloginfo('admin_email'), 'email_subject' => 'Not Approved', 'email_message' => 'Your enrollment has not been approved.', 'status_action' => 'Not Approved'] ]; foreach ($default_email_messages as $message) { $wpdb->insert("{$wpdb->prefix}sige_email_messages", $message); } // Ensure wp_usermeta has specified meta_keys $required_meta_keys = [ 'forca', 'full_name', 'posto', 'militar', 'instituição', 'nacionalidade', 'efetivo_dcta', 'cidade', 'estado', 'areaatividadeprincipal', 'setordeatuacao', 'cargofuncao', 'ehativa', 'circulo hierárquico', 'telefone', 'passaporte', 'pais', 'formacao_academica', 'regiao_do_brasil' ]; foreach ($required_meta_keys as $meta_key) { if (!$wpdb->get_var($wpdb->prepare("SELECT meta_key FROM {$wpdb->prefix}usermeta WHERE meta_key = %s", $meta_key))) { $wpdb->insert("{$wpdb->prefix}usermeta", ['meta_key' => $meta_key, 'meta_value' => '']); } } // Check if the JSON file with saved data exists and restore data if available $json_file_path = plugin_dir_path(__FILE__) . 'sige_events_data.json'; if (file_exists($json_file_path)) { $json_data = json_decode(file_get_contents($json_file_path), true); if ($json_data) { $tables_to_replace = [ 'sige_enrollment_status_style', 'sige_email_messages', 'sige_enrollment_button_style', 'sige_display_options', 'sige_activities', 'sige_enrollments', 'sige_cancellation_record', 'sige_enrollment_attendance_control' ]; // Restore the non-replacement tables first foreach ($json_data as $table => $records) { if (!in_array($table, $tables_to_replace)) { foreach ($records as $record) { $wpdb->insert("{$wpdb->prefix}$table", $record); } } } // Restore the replacement tables last foreach ($tables_to_replace as $table) { if (isset($json_data[$table])) { foreach ($json_data[$table] as $record) { $wpdb->replace("{$wpdb->prefix}$table", $record); } } } } } } function sige_events_uninstall() { global $wpdb; // Export data to JSON file before dropping tables $tables = [ 'sige_activity_notices', 'sige_display_options', 'sige_enrollment_button_style', 'sige_meta_keys', 'sige_email_messages', 'sige_enrollment_status_style', 'sige_event_names', 'sige_place', 'sige_speakers', 'sige_activities', 'sige_enrollments', 'sige_cancellation_record', 'sige_enrollment_attendance_control' ]; $data = []; // Save non-replacement tables first foreach ($tables as $table) { if (!in_array($table, ['sige_activities', 'sige_enrollments', 'sige_enrollment_attendance_control','sige_cancellation_record'])) { $data[$table] = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}$table", ARRAY_A); } } // Save replacement tables last foreach (['sige_activities', 'sige_enrollments', 'sige_enrollment_attendance_control','sige_cancellation_record'] as $table) { $data[$table] = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}$table", ARRAY_A); } $json_file_path = plugin_dir_path(__FILE__) . 'sige_events_data.json'; file_put_contents($json_file_path, json_encode($data)); // Drop the tables $wpdb->query("DROP TABLE IF EXISTS {$wpdb->prefix}sige_activity_notices"); $wpdb->query("DROP TABLE IF EXISTS {$wpdb->prefix}sige_display_options"); $wpdb->query("DROP TABLE IF EXISTS {$wpdb->prefix}sige_enrollment_button_style"); $wpdb->query("DROP TABLE IF EXISTS {$wpdb->prefix}sige_meta_keys"); $wpdb->query("DROP TABLE IF EXISTS {$wpdb->prefix}sige_email_messages"); $wpdb->query("DROP TABLE IF EXISTS {$wpdb->prefix}sige_enrollment_status_style"); $wpdb->query("DROP TABLE IF EXISTS {$wpdb->prefix}sige_enrollment_attendance_control"); $wpdb->query("DROP TABLE IF EXISTS {$wpdb->prefix}sige_enrollments"); $wpdb->query("DROP TABLE IF EXISTS {$wpdb->prefix}sige_cancellation_record"); $wpdb->query("DROP TABLE IF EXISTS {$wpdb->prefix}sige_activities"); $wpdb->query("DROP TABLE IF EXISTS {$wpdb->prefix}sige_event_names"); $wpdb->query("DROP TABLE IF EXISTS {$wpdb->prefix}sige_place"); $wpdb->query("DROP TABLE IF EXISTS {$wpdb->prefix}sige_speakers"); } add_action('admin_menu', 'addAdminPageContent'); function addAdminPageContent() { add_menu_page('SIGE Events', 'SIGE Events', 'manage_options', 'sige-events', 'SigeEventmenuPage', 'dashicons-wordpress'); add_submenu_page('sige-events', 'Dashboard', 'Dashboard', 'manage_options', 'dashboard-submenu', 'dashboardSubmenuPage'); add_submenu_page('sige-events', 'Available Activities', 'Available Activities', 'manage_options', 'available-activities-submenu', 'availableActivitiesSubmenuPage'); add_submenu_page('sige-events', 'Enrollment Control', 'Enrollment Control', 'manage_options', 'enrollment-submenu', 'enrollmentSubmenuPage'); add_submenu_page('sige-events', 'Attendance Control', 'Attendance Control', 'manage_options', 'attendance-control-submenu', 'attendanceControlSubmenuPage'); add_submenu_page('sige-events', 'Settings', 'Settings', 'manage_options', 'settings-submenu', 'settingsSubmenuPage'); } function SigeEventmenuPage() { echo '
'; echo '

Welcome to Sige Events

'; // Main Purpose Section echo '
'; echo '

Main Purpose

'; echo '

Sige Events is a comprehensive plugin designed to facilitate the management of enrollments for short courses and events. It offers a user-friendly interface and a variety of features that help administrators efficiently handle all aspects of event management.

'; echo '

Key Features:

'; echo ''; echo '

This plugin is an ideal solution for institutions, organizations, or individuals who need a reliable and efficient system to manage their educational or informational events.

'; echo '
'; // End Main Purpose Section // Development Team Section echo '
'; echo '

Development Team

'; echo '

The development of Sige Events was a collaborative effort involving the following contributors:

'; echo ''; echo '
'; // End Development Team Section // Shortcode Usage Section echo '
'; echo '

Shortcode Usage

'; echo '

To display the open activities on any page or post, use the following shortcode:

'; echo '[open_activities]'; echo '

To display the enrollments on any page or post, use the following shortcode:

'; echo '[enrollments]'; echo '

To manage attendance control on any page or post, use the following shortcode:

'; echo '[frontend_attendance_control]'; echo '

To generate the QR CODE for user purpose, use the following shortcode:

'; echo '[userbadge_qr_code]'; echo '
'; // End Shortcode Usage Section // Available Functions Section echo '
'; echo '

Available Functions and Their Purposes

'; echo ''; echo '
'; // End Available Functions Section echo '
'; } // Add this CSS to your plugin to apply the styles function sige_events_admin_styles() { echo ''; } add_action('admin_head', 'sige_events_admin_styles'); function dashboardSubmenuPage() { echo '

Dashboard

Content for the Dashboard submenu page.

'; } function availableActivitiesSubmenuPage() { global $wpdb; if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['new_activity'])) { $name = sanitize_text_field($_POST['activity_name']); $description = sanitize_textarea_field($_POST['activity_description']); $start_date = sanitize_text_field($_POST['start_date']); $start_time = sanitize_text_field($_POST['start_time']); $end_date = sanitize_text_field($_POST['end_date']); $end_time = sanitize_text_field($_POST['end_time']); $type = sanitize_text_field($_POST['activity_type']); $modality = sanitize_text_field($_POST['activity_modality']); $status = sanitize_text_field($_POST['activity_status']); $curriculum = esc_url_raw($_POST['curriculum']); $comment = sanitize_textarea_field($_POST['comment']); $place_id = intval($_POST['place']); $speaker_id = intval($_POST['speaker']); $event_name_id = intval($_POST['event_name']); $security_credential = sanitize_text_field($_POST['security_credential']); $chair = sanitize_text_field($_POST['chair']); $target_audience = sanitize_text_field($_POST['target_audience']); $attendance_control = sanitize_text_field($_POST['attendance_control']); if (strtotime($end_date) < strtotime($start_date)) { echo '

The end date cannot be before the start date.

'; } else { $wpdb->insert( "{$wpdb->prefix}sige_activities", [ 'name' => $name, 'description' => $description, 'start_date' => $start_date, 'start_time' => $start_time, 'end_date' => $end_date, 'end_time' => $end_time, 'type' => $type, 'modality' => $modality, 'status' => $status, 'curriculum' => $curriculum, 'comment' => $comment, 'place_id' => $place_id, 'speaker_id' => $speaker_id, 'event_name_id' => $event_name_id, 'security_credential' => $security_credential, 'chair' => $chair, 'target_audience' => $target_audience, 'attendance_control' => $attendance_control ] ); } } if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['update_activity'])) { $id = intval($_POST['activity_id']); $name = sanitize_text_field($_POST['activity_name']); $description = sanitize_textarea_field($_POST['activity_description']); $start_date = sanitize_text_field($_POST['start_date']); $start_time = sanitize_text_field($_POST['start_time']); $end_date = sanitize_text_field($_POST['end_date']); $end_time = sanitize_text_field($_POST['end_time']); $type = sanitize_text_field($_POST['activity_type']); $modality = sanitize_text_field($_POST['activity_modality']); $status = sanitize_text_field($_POST['activity_status']); $curriculum = esc_url_raw($_POST['curriculum']); $comment = sanitize_textarea_field($_POST['comment']); $place_id = intval($_POST['place']); $speaker_id = intval($_POST['speaker']); $event_name_id = intval($_POST['event_name']); $security_credential = sanitize_text_field($_POST['security_credential']); $chair = sanitize_text_field($_POST['chair']); $target_audience = sanitize_text_field($_POST['target_audience']); $attendance_control = sanitize_text_field($_POST['attendance_control']); if (strtotime($end_date) < strtotime($start_date)) { echo '

The end date cannot be before the start date.

'; } else { $wpdb->update( "{$wpdb->prefix}sige_activities", [ 'name' => $name, 'description' => $description, 'start_date' => $start_date, 'start_time' => $start_time, 'end_date' => $end_date, 'end_time' => $end_time, 'type' => $type, 'modality' => $modality, 'status' => $status, 'curriculum' => $curriculum, 'comment' => $comment, 'place_id' => $place_id, 'speaker_id' => $speaker_id, 'event_name_id' => $event_name_id, 'security_credential' => $security_credential, 'chair' => $chair, 'target_audience' => $target_audience, 'attendance_control' => $attendance_control ], ['id' => $id] ); $redirect_url = admin_url('admin.php?page=available-activities-submenu'); echo ''; exit; } } if (isset($_GET['delete_activity'])) { $id = intval($_GET['delete_activity']); $wpdb->delete("{$wpdb->prefix}sige_activities", ['id' => $id]); } $edit_activity = null; if (isset($_GET['edit_activity'])) { $edit_id = intval($_GET['edit_activity']); $edit_activity = $wpdb->get_row("SELECT * FROM {$wpdb->prefix}sige_activities WHERE id = $edit_id"); } $places = $wpdb->get_results("SELECT id, place FROM {$wpdb->prefix}sige_place"); $speakers = $wpdb->get_results("SELECT id, full_name FROM {$wpdb->prefix}sige_speakers"); $event_names = $wpdb->get_results("SELECT id, name FROM {$wpdb->prefix}sige_event_names"); echo '

Available Activities

'; if ($edit_activity) { echo ''; echo ''; } else { echo ''; } echo '
Activity Name Activity Description
Start Date Start Time
End Date End Time
Activity Type Activity Modality
Subscription Status Place
Speaker Event Name
Chair Curriculum
Security Credential Target Audience
Attendance Control Comment
'; $activities = $wpdb->get_results(" SELECT a.*, p.place, s.full_name as speaker, e.name as event_name FROM {$wpdb->prefix}sige_activities a LEFT JOIN {$wpdb->prefix}sige_place p ON a.place_id = p.id LEFT JOIN {$wpdb->prefix}sige_speakers s ON a.speaker_id = s.id LEFT JOIN {$wpdb->prefix}sige_event_names e ON a.event_name_id = e.id "); if ($activities) { $types = ['Presentation', 'Short-course', 'Lecture', 'Workshop', 'Others']; $modalities = ['Online', 'In-person', 'Hybrid', 'Others']; $statuses = ['Open', 'Closed', 'Not applicable']; if ($activities) { echo '
'; } echo '

Existing Activities

'; echo '
'; echo ''; foreach ($activities as $activity) { echo ''; } echo '
Activity Name Activity Description Start Date Start Time End Date End Time Type Modality Status Place Speaker Event Name Chair Curriculum Security Credential Target Audience Attendance Control Comment
' . esc_html($activity->name) . ' ' . esc_html($activity->description) . ' ' . esc_html($activity->start_date) . ' ' . esc_html($activity->start_time) . ' ' . esc_html($activity->end_date) . ' ' . esc_html($activity->end_time) . ' ' . esc_html($activity->type) . ' ' . esc_html($activity->modality) . ' ' . esc_html($activity->status) . ' ' . esc_html($activity->place) . ' ' . esc_html($activity->speaker) . ' ' . esc_html($activity->event_name) . ' ' . esc_html($activity->chair) . ' ' . esc_html($activity->curriculum) . ' ' . esc_html($activity->security_credential) . ' ' . esc_html($activity->target_audience) . ' ' . esc_html($activity->attendance_control) . ' ' . esc_html($activity->comment) . ' Edit Delete
'; echo ''; } } function enrollmentSubmenuPage() { global $wpdb; $current_user = wp_get_current_user(); $user_id = $current_user->ID; // Define the additional meta keys $additional_meta_keys = [ 'forca', 'full_name', 'posto', 'militar', 'instituição', 'nacionalidade', 'efetivo_dcta', 'cidade', 'estado', 'areaatividadeprincipal', 'setordeatuacao', 'cargofuncao', 'ehativa', 'circulo_hierárquico', 'pais', 'formacao_academica', 'regiao_do_brasil' ]; // Handle saving additional features selection if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['additional_features'])) { $selected_meta_keys = array_intersect($additional_meta_keys, $_POST['additional_features']); update_user_meta($user_id, 'selected_additional_features', $selected_meta_keys); } else { $selected_meta_keys = get_user_meta($user_id, 'selected_additional_features', true); if (!$selected_meta_keys) { $selected_meta_keys = []; } } // Handle status update if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['apply_status']) && isset($_POST['selected_enrollments'])) { $new_status = sanitize_text_field($_POST['new_status']); $selected_enrollments = array_map('intval', $_POST['selected_enrollments']); if (!empty($selected_enrollments)) { foreach ($selected_enrollments as $enrollment_id) { $updated = $wpdb->update( "{$wpdb->prefix}sige_enrollments", ['status' => $new_status], ['id' => $enrollment_id] ); if ($updated === false) { echo '

Error updating enrollment ID ' . $enrollment_id . '.

'; } } echo '

Enrollment status updated successfully.

'; } else { echo '

Please select at least one enrollment.

'; } } // Fetch enrollments with additional meta data if selected $meta_selects = ''; $meta_joins = ''; foreach ($selected_meta_keys as $meta_key) { $meta_selects .= ", um_$meta_key.meta_value as $meta_key"; $meta_joins .= " LEFT JOIN {$wpdb->prefix}usermeta um_$meta_key ON um_$meta_key.user_id = u.ID AND um_$meta_key.meta_key = '$meta_key'"; } $query = " SELECT e.*, a.name as activity_name, u.user_email $meta_selects FROM {$wpdb->prefix}sige_enrollments e LEFT JOIN {$wpdb->prefix}sige_activities a ON e.activity_id = a.id LEFT JOIN {$wpdb->prefix}users u ON e.user_id = u.ID $meta_joins "; $enrollments = $wpdb->get_results($query); // Display additional features form echo '

Additional Features

'; echo ''; echo ''; // Display the enrollments table echo '

Existing Enrollments

'; echo '
'; echo '
'; echo ''; echo ''; echo ''; foreach ($selected_meta_keys as $meta_key) { echo ''; } echo ''; if ($enrollments) { foreach ($enrollments as $enrollment) { $row_style = ''; $checkbox_disabled = ''; if ($enrollment->status == 'Enrollment Canceled by User') { $row_style = 'style="background-color: #f38d8d;"'; $checkbox_disabled = 'disabled'; } elseif ($enrollment->status == 'Waiting List') { $row_style = 'style="background-color: #e3db69;"'; } elseif ($enrollment->status == 'Approved') { $row_style = 'style="background-color: green;"'; } elseif ($enrollment->status == 'Not Approved') { $row_style = 'style="background-color: #bc97cd;"'; } elseif ($enrollment->status == 'Under Analysis') { $row_style = 'style="background-color: #5ecac7;"'; } $formatted_date = date('d-m-Y', strtotime($enrollment->enrollment_date)); echo ""; foreach ($selected_meta_keys as $meta_key) { echo ''; } echo ''; } } else { echo ''; } echo '
Select All Activity Name User Email Enrollment Date Status' . ucfirst(str_replace('_', ' ', $meta_key)) . '
{$enrollment->activity_name} {$enrollment->user_email} $formatted_date {$enrollment->status}' . esc_html($enrollment->$meta_key) . '
No enrollments found
'; if ($enrollments) { echo '
'; echo '
'; } echo '
'; echo '
'; // Add the color legend echo '

Legend:

'; echo '
Enrollment Canceled by User Waiting List Approved Not Approved Under Analysis
'; echo ''; } // Function to display Email Options content function emailSettingsSubmenuPage() { global $wpdb; if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['save_email_settings'])) { $id = intval($_POST['id']); $email_sender = sanitize_email($_POST['email_sender']); $email_subject = sanitize_text_field($_POST['email_subject']); $email_message = wp_kses_post($_POST['email_message']); // Use wp_kses_post to allow basic HTML $wpdb->update( "{$wpdb->prefix}sige_email_messages", [ 'email_sender' => $email_sender, 'email_subject' => $email_subject, 'email_message' => $email_message ], ['id' => $id] ); echo '

Email settings saved successfully.

'; } $email_messages = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}sige_email_messages", ARRAY_A); $status_actions = array_column($email_messages, 'status_action', 'id'); echo '

Email Settings

'; echo ''; // Default values for the form fields $default_email_sender = $email_messages[0]['email_sender']; $default_email_subject = $email_messages[0]['email_subject']; $default_email_message = $email_messages[0]['email_message']; echo '
Choose Status Action
Email Sender
Email Subject
Email Message
'; echo ''; } function export_activities_to_csv() { if (isset($_POST['export_activities_csv'])) { global $wpdb; $activities = $wpdb->get_results(" SELECT a.*, p.place, s.full_name as speaker, e.name as event_name FROM {$wpdb->prefix}sige_activities a LEFT JOIN {$wpdb->prefix}sige_place p ON a.place_id = p.id LEFT JOIN {$wpdb->prefix}sige_speakers s ON a.speaker_id = s.id LEFT JOIN {$wpdb->prefix}sige_event_names e ON a.event_name_id = e.id "); if ($activities) { $filename = "activities_" . date('Ymd_His') . ".csv"; header('Content-Type: text/csv'); header('Content-Disposition: attachment;filename=' . $filename); $output = fopen('php://output', 'w'); // Set the column headers fputcsv($output, array( 'Activity Name', 'Description', 'Start Date', 'Start Time', 'End Date', 'End Time', 'Type', 'Modality', 'Status', 'Speaker', 'Curriculum', 'Place', 'Event Name', 'Security Credential', 'Chair', 'Target Audience' )); // Output each row of the data foreach ($activities as $activity) { fputcsv($output, array( $activity->name, $activity->description, $activity->start_date, $activity->start_time, $activity->end_date, $activity->end_time, $activity->type, $activity->modality, $activity->status, $activity->speaker, $activity->curriculum, $activity->place, $activity->event_name, $activity->security_credential, $activity->chair, $activity->target_audience )); } fclose($output); exit; } } } add_action('admin_init', 'export_activities_to_csv'); function enqueue_jquery_ui() { wp_enqueue_script('jquery-ui-tabs'); wp_enqueue_style('jquery-ui-css', 'https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css'); } add_action('wp_enqueue_scripts', 'enqueue_jquery_ui'); function enqueue_datatables_assets_admin() { wp_enqueue_script('jquery'); wp_enqueue_script('datatables-js', 'https://cdn.datatables.net/1.10.21/js/jquery.dataTables.min.js', array('jquery'), null, true); wp_enqueue_style('datatables-css', 'https://cdn.datatables.net/1.10.21/css/jquery.dataTables.min.css'); wp_enqueue_script('datatables-fixedcolumns-js', 'https://cdn.datatables.net/fixedcolumns/3.3.3/js/dataTables.fixedColumns.min.js', array('datatables-js'), null, true); wp_enqueue_style('datatables-fixedcolumns-css', 'https://cdn.datatables.net/fixedcolumns/3.3.3/css/fixedColumns.dataTables.min.css'); } add_action('admin_enqueue_scripts', 'enqueue_datatables_assets_admin'); function enqueue_datatables_assets_frontend() { wp_enqueue_script('jquery'); wp_enqueue_script('datatables-js', 'https://cdn.datatables.net/1.10.21/js/jquery.dataTables.min.js', array('jquery'), null, true); wp_enqueue_style('datatables-css', 'https://cdn.datatables.net/1.10.21/css/jquery.dataTables.min.css'); wp_enqueue_script('datatables-fixedcolumns-js', 'https://cdn.datatables.net/fixedcolumns/3.3.3/js/dataTables.fixedColumns.min.js', array('datatables-js'), null, true); wp_enqueue_style('datatables-fixedcolumns-css', 'https://cdn.datatables.net/fixedcolumns/3.3.3/css/fixedColumns.dataTables.min.css'); } add_action('wp_enqueue_scripts', 'enqueue_datatables_assets_frontend'); function enqueue_html5_qrcode_script() { wp_enqueue_script('html5-qrcode', 'https://unpkg.com/html5-qrcode@2.3.8/html5-qrcode.min.js', [], null, true); } add_action('admin_enqueue_scripts', 'enqueue_html5_qrcode_script'); add_action('wp_enqueue_scripts', 'enqueue_html5_qrcode_script'); function frontendDisplayOpenActivities() { if (!is_user_logged_in()) { return '

You must be logged in to view the available activities.

'; } global $wpdb; $current_user_id = get_current_user_id(); // Fetch the required meta keys from wp_sige_meta_keys excluding specific keys $required_meta_keys = $wpdb->get_col(" SELECT meta_key FROM {$wpdb->prefix}sige_meta_keys WHERE status = 1 AND meta_key NOT IN ('militar', 'forca', 'posto', 'efetivo_dcta', 'ehativa', 'circulo hierárquico') "); // Check if all required meta keys are filled $user_meta = get_user_meta($current_user_id); $missing_keys = []; foreach ($required_meta_keys as $meta_key) { if (empty($user_meta[$meta_key][0])) { $missing_keys[] = $meta_key; } } // Check if 'militar' meta key is set to '1', if so, check additional meta keys if (!empty($user_meta['militar'][0]) && $user_meta['militar'][0] == '1') { $additional_keys = ['forca', 'posto', 'efetivo_dcta', 'ehativa', 'circulo hierárquico']; foreach ($additional_keys as $key) { if (empty($user_meta[$key][0])) { $missing_keys[] = $key; } } } if (!empty($missing_keys)) { echo '

You need to update your profile information to view the available activities. Please make sure all required fields are filled out.

'; echo ''; return ''; } $current_year = date('Y'); // Handle form submission if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['action']) && isset($_POST['activity_id'])) { $activity_id = intval($_POST['activity_id']); $action = sanitize_text_field($_POST['action']); if ($action == 'request_enrollment') { $existing_enrollment = $wpdb->get_var($wpdb->prepare(" SELECT id FROM {$wpdb->prefix}sige_enrollments WHERE activity_id = %d AND user_id = %d ", $activity_id, $current_user_id)); if ($existing_enrollment) { $wpdb->update( "{$wpdb->prefix}sige_enrollments", ['status' => 'Under Analysis'], ['id' => $existing_enrollment] ); } else { $wpdb->insert( "{$wpdb->prefix}sige_enrollments", [ 'activity_id' => $activity_id, 'user_id' => $current_user_id, 'enrollment_date' => current_time('mysql'), 'status' => 'Under Analysis' ] ); } } elseif ($action == 'cancel_enrollment') { $reason = isset($_POST['cancel_reason']) ? sanitize_text_field($_POST['cancel_reason']) : ''; if (!empty($reason)) { $wpdb->insert( "{$wpdb->prefix}sige_cancellation_record", [ 'activity_id' => $activity_id, 'user_id' => $current_user_id, 'reasons' => $reason, 'date_of_cancelation' => current_time('mysql') ] ); } $wpdb->update( "{$wpdb->prefix}sige_enrollments", ['status' => 'Enrollment Canceled by User'], [ 'activity_id' => $activity_id, 'user_id' => $current_user_id ] ); } // Reload the page to show updated status echo ''; exit; } $activities = $wpdb->get_results($wpdb->prepare(" SELECT a.*, p.place, s.full_name as speaker, e.name as event_name FROM {$wpdb->prefix}sige_activities a LEFT JOIN {$wpdb->prefix}sige_place p ON a.place_id = p.id LEFT JOIN {$wpdb->prefix}sige_speakers s ON a.speaker_id = s.id LEFT JOIN {$wpdb->prefix}sige_event_names e ON a.event_name_id = e.id WHERE (a.status = 'Open' OR a.status = 'Closed') AND YEAR(a.start_date) = %d AND a.attendance_control = 'yes' ", $current_year)); if (empty($activities)) { return '

No open activities available for this year.

'; } $display_options = $wpdb->get_results("SELECT field_name, display FROM {$wpdb->prefix}sige_display_options", OBJECT_K); // CSS for tabbed interface and active tab highlighting echo ''; ob_start(); echo '
'; echo ''; foreach ($event_names as $index => $event_name) { $active_class = $index == 0 ? 'active' : ''; echo '
'; $event_activities = array_filter($activities, function($activity) use ($event_name) { return $activity->event_name == $event_name->name; }); if (empty($event_activities)) { echo '

No open activities available for this event.

'; } else { foreach (['Presentation', 'Short-course', 'Lecture', 'Workshop', 'Others'] as $type_name) { $grouped_activities = array_filter($event_activities, function($activity) use ($type_name) { return $activity->type == $type_name; }); if (!empty($grouped_activities)) { $notice = $wpdb->get_var($wpdb->prepare("SELECT notice FROM {$wpdb->prefix}sige_activity_notices WHERE type = %s", $type_name)); echo '

' . $type_name . '

'; if ($display_options['Notices']->display) { echo '

Notices

'; echo '

' . ($notice ? esc_html($notice) : 'No notice available for this type.') . '

'; } foreach ($grouped_activities as $activity) { $formatted_start_date = date('d-m-Y', strtotime($activity->start_date)); $formatted_end_date = date('d-m-Y', strtotime($activity->end_date)); $end_date = $activity->end_date == $activity->start_date ? '' : ' to ' . $formatted_end_date; $enrollment_status_action = $wpdb->get_var($wpdb->prepare(" SELECT status FROM {$wpdb->prefix}sige_enrollments WHERE activity_id = %d AND user_id = %d ", $activity->id, $current_user_id)); if (!$enrollment_status_action) { $enrollment_status_action = 'Not Requested'; } echo '

' . esc_html($activity->type) . ': ' . $activity->name . '

'; if ($display_options['Comment']->display) { echo '

Comment: ' . esc_html($activity->comment) . '

'; } if ($display_options['Speaker']->display) { echo '

Speaker: ' . $activity->speaker . '

'; } if ($display_options['Curriculum Vitae']->display) { echo '

Curriculum Vitae: ' . esc_url($activity->curriculum) . '

'; } if ($display_options['Data']->display) { echo '

Data: ' . esc_html($formatted_start_date) . $end_date . '

'; } if ($display_options['Place']->display) { echo '

Place: ' . esc_html($activity->place) . '

'; } if ($display_options['Security Credential']->display) { echo '

Security Credential: ' . esc_html($activity->security_credential) . '

'; } if ($display_options['Target Audience']->display) { echo '

Target Audience: ' . esc_html($activity->target_audience) . '

'; } if ($display_options['Chair']->display) { echo '

Chair: ' . esc_html($activity->chair) . '

'; } // Display the activity status echo '

Activity Status: ' . esc_html($activity->status) . '

'; if ($activity->status != 'Not applicable' && $display_options['Enrollment Status']->display) { $status_style = $wpdb->get_row($wpdb->prepare(" SELECT * FROM {$wpdb->prefix}sige_enrollment_status_style WHERE status_action = %s ", $enrollment_status_action)); $font_color = $status_style->font_color; $font_size = $status_style->font_size; $font_family = $status_style->font_family; $font_weight = $status_style->font_weight; $status_label = $status_style->status_label; echo '

Enrollment Status: ' . esc_html($status_label) . '

'; } if ($activity->status != 'Closed') { // Determine button label, action, and style if ($enrollment_status_action == 'Not Requested' || $enrollment_status_action == 'Enrollment Canceled by User') { $button_action = 'request_enrollment'; } elseif ($enrollment_status_action == 'Under Analysis' || $enrollment_status_action == 'Waiting List' || $enrollment_status_action == 'Approved') { $button_action = 'cancel_enrollment'; } if ($enrollment_status_action != 'Not Approved') { // Get button styles $button_style = $wpdb->get_row($wpdb->prepare(" SELECT * FROM {$wpdb->prefix}sige_enrollment_button_style WHERE button_action = %s ", $button_action)); $button_label = $button_style->button_label; $button_background_color = $button_style->background_color; $button_font_size = $button_style->font_size; $button_font_family = $button_style->font_family; $button_font_weight = $button_style->font_weight; echo '
'; } } echo '
'; } } } echo '
'; } } echo '
'; echo ''; echo ''; echo ''; return ob_get_clean(); } add_shortcode('open_activities', 'frontendDisplayOpenActivities'); function displayMainOptions() { echo '

Main Options

Content for Main Options tab.

'; } function displayDashboardOptions() { echo '

Dashboard Options

Content for Dashboard Options tab.

'; } function displayActivityOptions() { global $wpdb; echo '

Activity Options

'; // Wrap all sections in a single div for unified scroll echo '
'; // Places Options if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['save_place'])) { $place = sanitize_text_field($_POST['place']); $comments = sanitize_textarea_field($_POST['comments']); $place_id = isset($_POST['place_id']) ? intval($_POST['place_id']) : 0; if ($place_id > 0) { $wpdb->update( "{$wpdb->prefix}sige_place", ['place' => $place, 'comments' => $comments], ['id' => $place_id] ); $redirect_url = admin_url('admin.php?page=settings-submenu&tab=activity_options'); echo ''; exit; } else { $wpdb->insert( "{$wpdb->prefix}sige_place", ['place' => $place, 'comments' => $comments] ); } echo '

Place saved successfully.

'; } if (isset($_GET['edit_place'])) { $edit_place_id = intval($_GET['edit_place']); $edit_place = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->prefix}sige_place WHERE id = %d", $edit_place_id)); } if (isset($_GET['delete_place'])) { $delete_place_id = intval($_GET['delete_place']); $wpdb->delete("{$wpdb->prefix}sige_place", ['id' => $delete_place_id]); echo '

Place deleted successfully.

'; } echo '

Places Options

'; echo '
Place
Comments
'; if (isset($edit_place)) { echo ''; } echo '
'; $places = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}sige_place"); if ($places) { echo '

Existing Places

'; echo ''; foreach ($places as $place) { echo ""; } echo '
Place Comments Actions
{$place->place} {$place->comments} Edit Delete
'; } echo ''; // Add separator line echo '
'; // Speakers Options if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['save_speaker'])) { $research_degree = sanitize_text_field($_POST['research_degree']); $full_name = sanitize_text_field($_POST['full_name']); $email = sanitize_email($_POST['email']); $institution = sanitize_text_field($_POST['institution']); $speaker_id = isset($_POST['speaker_id']) ? intval($_POST['speaker_id']) : 0; if ($speaker_id > 0) { $wpdb->update( "{$wpdb->prefix}sige_speakers", [ 'research_degree' => $research_degree, 'full_name' => $full_name, 'email' => $email, 'institution' => $institution ], ['id' => $speaker_id] ); $redirect_url = admin_url('admin.php?page=settings-submenu&tab=activity_options'); echo ''; exit; } else { $wpdb->insert( "{$wpdb->prefix}sige_speakers", [ 'research_degree' => $research_degree, 'full_name' => $full_name, 'email' => $email, 'institution' => $institution ] ); } echo '

Speaker saved successfully.

'; } if (isset($_GET['edit_speaker'])) { $edit_speaker_id = intval($_GET['edit_speaker']); $edit_speaker = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->prefix}sige_speakers WHERE id = %d", $edit_speaker_id)); } if (isset($_GET['delete_speaker'])) { $delete_speaker_id = intval($_GET['delete_speaker']); $wpdb->delete("{$wpdb->prefix}sige_speakers", ['id' => $delete_speaker_id]); echo '

Speaker deleted successfully.

'; } echo '

Register Speakers

'; echo '
Research Degree
Full Name
Email
Institution
'; if (isset($edit_speaker)) { echo ''; } echo '
'; $speakers = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}sige_speakers"); if ($speakers) { echo '

Existing Speakers

'; echo ''; foreach ($speakers as $speaker) { echo ""; } echo '
Research Degree Full Name Email Institution Actions
{$speaker->research_degree} {$speaker->full_name} {$speaker->email} {$speaker->institution} Edit Delete
'; } echo ''; // Add separator line echo '
'; // Major Event Options if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['save_major_event'])) { $acronym = sanitize_text_field($_POST['acronym']); $name = sanitize_text_field($_POST['name']); $responsible_for = sanitize_text_field($_POST['responsible_for']); $major_event_id = isset($_POST['major_event_id']) ? intval($_POST['major_event_id']) : 0; if ($major_event_id > 0) { $wpdb->update( "{$wpdb->prefix}sige_event_names", [ 'acronym' => $acronym, 'name' => $name, 'responsible_for' => $responsible_for ], ['id' => $major_event_id] ); $redirect_url = admin_url('admin.php?page=settings-submenu&tab=activity_options'); echo ''; exit; } else { $wpdb->insert( "{$wpdb->prefix}sige_event_names", [ 'acronym' => $acronym, 'name' => $name, 'responsible_for' => $responsible_for ] ); } echo '

Event Name saved successfully.

'; } if (isset($_GET['edit_major_event'])) { $edit_major_event_id = intval($_GET['edit_major_event']); $edit_major_event = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->prefix}sige_event_names WHERE id = %d", $edit_major_event_id)); } if (isset($_GET['delete_major_event'])) { $delete_major_event_id = intval($_GET['delete_major_event']); $wpdb->delete("{$wpdb->prefix}sige_event_names", ['id' => $delete_major_event_id]); echo '

Event Name deleted successfully.

'; } echo '

Register Event Name

'; echo '
Acronym
Name
Responsible For
'; if (isset($edit_major_event)) { echo ''; } echo '
'; $major_events = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}sige_event_names"); if ($major_events) { echo '

Existing Event Names

'; echo ''; foreach ($major_events as $major_event) { echo ""; } echo '
Acronym Name Responsible For Actions
{$major_event->acronym} {$major_event->name} {$major_event->responsible_for} Edit Delete
'; } echo ''; // End of unified div echo '
'; echo '
'; // End of Activity Options section } function displayEnrollmentOptions() { global $wpdb; echo '

Enrollment Options

'; // Wrap Display and Notice Options in a single div for unified scroll echo '
'; // Display Options if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['save_display_options'])) { // Set all display options to 0 first $wpdb->query("UPDATE {$wpdb->prefix}sige_display_options SET display = 0"); // Update only the checked options to 1 if (!empty($_POST['display_options'])) { foreach ($_POST['display_options'] as $field_name => $display) { $wpdb->update( "{$wpdb->prefix}sige_display_options", ['display' => intval($display)], ['field_name' => sanitize_text_field($field_name)] ); } } echo '

Display options saved successfully.

'; } $display_options = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}sige_display_options"); echo '

Display Options

'; echo '
Display Options
'; foreach ($display_options as $option) { echo '

'; } echo '
'; // Add separator line echo '
'; echo '
'; // Button Style Section if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['save_button_style'])) { $selected_button_action = sanitize_text_field($_POST['button_action']); $button_styles = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}sige_enrollment_button_style", ARRAY_A); foreach ($button_styles as $style) { $button_action = $style['button_action']; $button_label = sanitize_text_field($_POST['button_label'][$button_action]); $background_color = sanitize_text_field($_POST['background_color'][$button_action]); $font_size = sanitize_text_field($_POST['font_size'][$button_action]); $font_family = str_replace('"', '', sanitize_text_field($_POST['font_family'][$button_action])); $font_weight = sanitize_text_field($_POST['font_weight'][$button_action]); $wpdb->update( "{$wpdb->prefix}sige_enrollment_button_style", [ 'button_label' => $button_label, 'background_color' => $background_color, 'font_size' => $font_size, 'font_family' => $font_family, 'font_weight' => $font_weight ], ['button_action' => $button_action] ); } echo '

Button styles saved successfully.

'; } $button_styles = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}sige_enrollment_button_style", ARRAY_A); $selected_button_action = isset($_POST['button_action']) ? sanitize_text_field($_POST['button_action']) : $button_styles[0]['button_action']; $font_families = [ 'Arial, sans-serif' => 'Arial', 'Georgia, serif' => 'Georgia', 'Times New Roman, serif' => 'Times New Roman', 'Courier New, monospace' => 'Courier New', 'Tahoma, sans-serif' => 'Tahoma', 'Verdana, sans-serif' => 'Verdana', 'Lucida Sans, sans-serif' => 'Lucida Sans', 'Impact, sans-serif' => 'Impact', 'Calibri, sans-serif' => 'Calibri', 'Garamond, serif' => 'Garamond', 'Comic Sans MS, cursive, sans-serif' => 'Comic Sans MS', 'Trebuchet MS, sans-serif' => 'Trebuchet MS', 'Arial Black, sans-serif' => 'Arial Black', 'Palatino, serif' => 'Palatino', 'Gill Sans, sans-serif' => 'Gill Sans', 'Helvetica, sans-serif' => 'Helvetica', 'Lucida Bright, serif' => 'Lucida Bright', 'Futura, sans-serif' => 'Futura', 'Franklin Gothic Medium, sans-serif' => 'Franklin Gothic Medium', 'Candara, sans-serif' => 'Candara' ]; $font_sizes = range(8, 42); echo '
'; echo '

Button Style

'; echo '
'; echo ''; echo ''; echo ''; foreach ($button_styles as $style) { $display_style = $style['button_action'] === $selected_button_action ? 'display: table-row;' : 'display: none;'; echo ''; } echo '
Button Action
Button Label '; foreach ($button_styles as $style) { $display_style = $style['button_action'] === $selected_button_action ? 'display: block;' : 'display: none;'; echo ''; } echo '
Background Color
Font Size
Font Family
Font Weight
'; echo '
'; // Status Style Section if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['save_status_style'])) { $status_styles = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}sige_enrollment_status_style", ARRAY_A); foreach ($status_styles as $style) { $status_action = $style['status_action']; $status_label = sanitize_text_field($_POST['status_label'][$status_action]); $font_color = sanitize_text_field($_POST['font_color'][$status_action]); $font_size = sanitize_text_field($_POST['font_size'][$status_action]); $font_family = str_replace('"', '', sanitize_text_field($_POST['font_family'][$status_action])); $font_weight = sanitize_text_field($_POST['font_weight'][$status_action]); $wpdb->update( "{$wpdb->prefix}sige_enrollment_status_style", [ 'status_label' => $status_label, 'font_color' => $font_color, 'font_size' => $font_size, 'font_family' => $font_family, 'font_weight' => $font_weight ], ['status_action' => $status_action] ); } echo '

Status styles saved successfully.

'; } $status_styles = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}sige_enrollment_status_style", ARRAY_A); $selected_status_action = isset($_POST['status_action']) ? sanitize_text_field($_POST['status_action']) : $status_styles[0]['status_action']; echo '
'; echo '

Status Style

'; echo '
'; echo ''; echo ''; echo ''; foreach ($status_styles as $style) { $display_style = $style['status_action'] === $selected_status_action ? 'display: table-row;' : 'display: none;'; echo ''; } echo '
Status Action
Status Label '; foreach ($status_styles as $style) { $display_style = $style['status_action'] === $selected_status_action ? 'display: block;' : 'display: none;'; echo ''; } echo '
Font Color
Font Size
Font Family
Font Weight
'; echo '
'; echo '
'; // Close div for flex display // Add separator line echo '
'; // Notice Options if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['save_notice'])) { $type = sanitize_text_field($_POST['notice_type']); $notice = sanitize_textarea_field($_POST['notice']); $existing_notice = $wpdb->get_var($wpdb->prepare("SELECT id FROM {$wpdb->prefix}sige_activity_notices WHERE type = %s", $type)); if ($existing_notice) { $wpdb->update( "{$wpdb->prefix}sige_activity_notices", ['notice' => $notice], ['id' => $existing_notice] ); } else { $wpdb->insert( "{$wpdb->prefix}sige_activity_notices", ['type' => $type, 'notice' => $notice] ); } echo '

Notice saved successfully.

'; } $types = ['Presentation', 'Short-course', 'Lecture', 'Workshop', 'Others']; echo '

Register Activity Notices

'; echo '
Type
Notice
'; $notices = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}sige_activity_notices"); if ($notices) { echo '

Existing Notices

'; echo ''; foreach ($notices as $notice) { echo ""; } echo '
Type Notice
{$notice->type} {$notice->notice}
'; } echo ''; } function displayEmailOptions() { echo '

Email Options

Content for Email Options tab.

'; } function displayMiscellaneous() { global $wpdb; echo '

Miscellaneous

'; // Fetch all distinct meta keys from wp_usermeta $meta_keys = $wpdb->get_col("SELECT DISTINCT meta_key FROM {$wpdb->prefix}usermeta"); // Fetch the saved meta keys and their statuses $saved_meta_keys = $wpdb->get_results("SELECT meta_key, status FROM {$wpdb->prefix}sige_meta_keys", OBJECT_K); // Remove saved meta keys from the list of all meta keys $meta_keys = array_diff($meta_keys, array_keys($saved_meta_keys)); // Handle form submission for saving meta keys if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['save_meta_keys'])) { $selected_meta_key = sanitize_text_field($_POST['meta_key']); $meta_key_status = isset($_POST['meta_key_status']) ? 1 : 0; // Save or update the selected meta key status $existing_entry = $wpdb->get_var($wpdb->prepare(" SELECT COUNT(*) FROM {$wpdb->prefix}sige_meta_keys WHERE meta_key = %s ", $selected_meta_key)); if ($existing_entry) { $wpdb->update( "{$wpdb->prefix}sige_meta_keys", ['status' => $meta_key_status], ['meta_key' => $selected_meta_key] ); } else { $wpdb->insert( "{$wpdb->prefix}sige_meta_keys", ['meta_key' => $selected_meta_key, 'status' => $meta_key_status] ); } echo '

Meta Key status saved successfully.

'; echo ''; } // Handle delete request if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['delete_meta_key'])) { $meta_key_to_delete = sanitize_text_field($_POST['meta_key_to_delete']); $wpdb->delete( "{$wpdb->prefix}sige_meta_keys", ['meta_key' => $meta_key_to_delete] ); echo '

Meta Key deleted successfully.

'; echo ''; } echo '

Meta Key Options

'; echo '
Meta Key
Status
'; // Display the saved meta keys in a table if (!empty($saved_meta_keys)) { echo '

Saved Meta Keys

'; echo ''; foreach ($saved_meta_keys as $meta_key => $data) { echo ''; } echo '
Meta Key Status Action
' . esc_html($meta_key) . ' ' . ($data->status ? 'Enabled' : 'Disabled') . '
'; } echo ''; echo '
'; } // Update settingsSubmenuPage function to include emailSettingsSubmenuPage function settingsSubmenuPage() { $tab = isset($_GET['tab']) ? $_GET['tab'] : 'main_options'; echo '

Settings

'; if ($tab == 'main_options') { displayMainOptions(); } elseif ($tab == 'dashboard_options') { displayDashboardOptions(); } elseif ($tab == 'activity_options') { displayActivityOptions(); } elseif ($tab == 'enrollment_options') { displayEnrollmentOptions(); } elseif ($tab == 'email_options') { emailSettingsSubmenuPage(); } elseif ($tab == 'miscellaneous') { displayMiscellaneous(); } echo '
'; } // Shortcode for displaying enrollments on the front-end function frontendEnrollmentControl() { if (!is_user_logged_in()) { return '

You need to be logged in to view the registrations that have been made.

'; } // Check if the user has administrator or contributor role if (!current_user_can('administrator') && !current_user_can('contributor')) { return '

You do not have the required permissions to handle the attendance control.

'; } global $wpdb; $current_user = wp_get_current_user(); $user_id = $current_user->ID; // Define the additional meta keys $additional_meta_keys = [ 'forca', 'full_name', 'posto', 'militar', 'instituição', 'nacionalidade', 'efetivo_dcta', 'cidade', 'estado', 'areaatividadeprincipal', 'setordeatuacao', 'cargofuncao', 'ehativa', 'circulo_hierárquico', 'pais', 'formacao_academica', 'regiao_do_brasil' ]; // Handle saving additional features selection if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['additional_features'])) { $selected_meta_keys = array_intersect($additional_meta_keys, $_POST['additional_features']); update_user_meta($user_id, 'selected_additional_features_frontend', $selected_meta_keys); // Redirect to avoid resubmission wp_safe_redirect(add_query_arg([], wp_get_referer())); exit; } else { $selected_meta_keys = get_user_meta($user_id, 'selected_additional_features_frontend', true); if (!$selected_meta_keys) { $selected_meta_keys = []; } } // Handle form submission for updating enrollment status if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['apply_status']) && isset($_POST['selected_enrollments'])) { $new_status = sanitize_text_field($_POST['new_status']); $selected_enrollments = array_map('intval', $_POST['selected_enrollments']); if (!empty($selected_enrollments)) { foreach ($selected_enrollments as $enrollment_id) { $wpdb->update( "{$wpdb->prefix}sige_enrollments", ['status' => $new_status], ['id' => $enrollment_id] ); } // Redirect to the same page to clear POST data wp_safe_redirect(add_query_arg([], wp_get_referer())); exit; } else { echo '

Please select at least one enrollment.

'; } } // Fetch enrollments with additional meta data if selected $meta_selects = ''; $meta_joins = ''; foreach ($selected_meta_keys as $meta_key) { $meta_selects .= ", um_$meta_key.meta_value as $meta_key"; $meta_joins .= " LEFT JOIN {$wpdb->prefix}usermeta um_$meta_key ON um_$meta_key.user_id = u.ID AND um_$meta_key.meta_key = '$meta_key'"; } $query = " SELECT e.*, a.name as activity_name, u.user_email $meta_selects FROM {$wpdb->prefix}sige_enrollments e LEFT JOIN {$wpdb->prefix}sige_activities a ON e.activity_id = a.id LEFT JOIN {$wpdb->prefix}users u ON e.user_id = u.ID $meta_joins "; $enrollments = $wpdb->get_results($query); ob_start(); // Display additional features form echo '
'; echo '

Additional Features

'; echo ''; echo '
'; echo ''; // Display the enrollments table echo '

Existing Enrollments

'; echo '
'; echo '
'; echo ''; echo ''; echo ''; foreach ($selected_meta_keys as $meta_key) { echo ''; } echo ''; if ($enrollments) { foreach ($enrollments as $enrollment) { $row_style = ''; $checkbox_disabled = ''; if ($enrollment->status == 'Enrollment Canceled by User') { $row_style = 'style="background-color: #f38d8d;"'; $checkbox_disabled = 'disabled'; } elseif ($enrollment->status == 'Waiting List') { $row_style = 'style="background-color: #e3db69;"'; } elseif ($enrollment->status == 'Approved') { $row_style = 'style="background-color: green;"'; } elseif ($enrollment->status == 'Not Approved') { $row_style = 'style="background-color: #bc97cd;"'; } elseif ($enrollment->status == 'Under Analysis') { $row_style = 'style="background-color: #5ecac7;"'; } $formatted_date = date('d-m-Y', strtotime($enrollment->enrollment_date)); echo ""; foreach ($selected_meta_keys as $meta_key) { echo ''; } echo ''; } } else { echo ''; } echo '
Select All Activity Name User Email Enrollment Date Status' . ucfirst(str_replace('_', ' ', $meta_key)) . '
{$enrollment->activity_name} {$enrollment->user_email} $formatted_date {$enrollment->status}' . esc_html($enrollment->$meta_key) . '
No enrollments found
'; if ($enrollments) { echo '
'; echo '
'; } echo '
'; echo '
'; // Add the color legend echo '

Legend:

'; echo '
Enrollment Canceled by User Waiting List Approved Not Approved Under Analysis
'; echo ''; return ob_get_clean(); } add_shortcode('enrollments', 'frontendEnrollmentControl'); function attendanceControlSubmenuPage() { global $wpdb; $filtered_user_id = isset($_POST['filtered_user_id']) ? sanitize_text_field($_POST['filtered_user_id']) : ''; $qrScannerUsedInput = isset($_POST['qr_scanner_used']) ? sanitize_text_field($_POST['qr_scanner_used']) : ''; // Handle form submission to update attendance if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['update_attendance'])) { $enrollment_id = isset($_POST['enrollment_id']) ? intval($_POST['enrollment_id']) : 0; $attended = isset($_POST['attended']) ? sanitize_text_field($_POST['attended']) : ''; $user_id = isset($_POST['user_id']) ? intval($_POST['user_id']) : 0; if ($enrollment_id && $attended) { $existing_record = $wpdb->get_var($wpdb->prepare("SELECT id FROM {$wpdb->prefix}sige_enrollment_attendance_control WHERE enrollment_id = %d", $enrollment_id)); if ($existing_record) { $wpdb->update( "{$wpdb->prefix}sige_enrollment_attendance_control", ['attended' => $attended], ['id' => $existing_record] ); } else { $wpdb->insert( "{$wpdb->prefix}sige_enrollment_attendance_control", [ 'enrollment_id' => $enrollment_id, 'attended' => $attended ] ); } } } // Handle QR code verification if ($_SERVER['REQUEST_METHOD'] == 'POST' && $qrScannerUsedInput === 'true') { $hashed_user_id = sanitize_text_field($_POST['filtered_user_id']); $filtered_user_id = verifyUserBasedOnQRCode($hashed_user_id); } // Fetch enrollments with status "Approved" $query = " SELECT e.id as enrollment_id, e.activity_id, a.name as activity_name, e.user_id, u.user_email, um.meta_value as user_full_name, e.enrollment_date, e.status, ac.attended FROM {$wpdb->prefix}sige_enrollments e LEFT JOIN {$wpdb->prefix}sige_activities a ON e.activity_id = a.id LEFT JOIN {$wpdb->prefix}users u ON e.user_id = u.ID LEFT JOIN {$wpdb->prefix}usermeta um ON e.user_id = um.user_id AND um.meta_key = 'full_name' LEFT JOIN {$wpdb->prefix}sige_enrollment_attendance_control ac ON e.id = ac.enrollment_id WHERE e.status = 'Approved' "; if ($filtered_user_id) { $query .= $wpdb->prepare(" AND e.user_id = %d", $filtered_user_id); } $enrollments = $wpdb->get_results($query); echo '

Attendance Control

'; // QR Code Scanner container echo '
'; // Filter form echo '
'; echo ''; echo ''; if ($enrollments) { foreach ($enrollments as $enrollment) { echo ''; } } else { echo ''; } echo '
Activity Name User ID User Full Name Email Enrollment Date Status Attended Action
' . esc_html($enrollment->activity_name) . ' ' . esc_html($enrollment->user_id) . ' ' . esc_html($enrollment->user_full_name) . ' ' . esc_html($enrollment->user_email) . ' ' . esc_html($enrollment->enrollment_date) . ' ' . esc_html($enrollment->status) . ' ' . esc_html($enrollment->attended) . '
No approved enrollments found.
'; // Add custom JavaScript directly within the PHP file echo ''; } function frontendAttendanceControl() { ob_start(); if (!is_user_logged_in()) { return '

You must be logged in to handle the attendance control.

'; } // Check if the user has administrator or contributor role if (!current_user_can('administrator') && !current_user_can('contributor')) { return '

You do not have the required permissions to handle the attendance control.

'; } // Handle form submission to update attendance if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['update_attendance'])) { $enrollment_id = isset($_POST['enrollment_id']) ? intval($_POST['enrollment_id']) : 0; $attended = isset($_POST['attended']) ? sanitize_text_field($_POST['attended']) : ''; $user_id = isset($_POST['user_id']) ? intval($_POST['user_id']) : 0; if ($enrollment_id && $attended) { global $wpdb; $existing_record = $wpdb->get_var($wpdb->prepare("SELECT id FROM {$wpdb->prefix}sige_enrollment_attendance_control WHERE enrollment_id = %d", $enrollment_id)); if ($existing_record) { $wpdb->update( "{$wpdb->prefix}sige_enrollment_attendance_control", ['attended' => $attended], ['id' => $existing_record] ); } else { $wpdb->insert( "{$wpdb->prefix}sige_enrollment_attendance_control", [ 'enrollment_id' => $enrollment_id, 'attended' => $attended ] ); } } } // Handle QR code verification if ($_SERVER['REQUEST_METHOD'] == 'POST') { if (isset($_POST['qr_scanner_used']) && $_POST['qr_scanner_used'] == '1') { $hashed_user_id = sanitize_text_field($_POST['filtered_user_id']); $filtered_user_id = verifyUserBasedOnQRCode($hashed_user_id); } else { $filtered_user_id = isset($_POST['filtered_user_id']) ? intval($_POST['filtered_user_id']) : ''; } } else { $filtered_user_id = ''; } // Fetch enrollments with status "Approved" global $wpdb; $query = " SELECT e.id as enrollment_id, e.activity_id, a.name as activity_name, e.user_id, um1.meta_value as full_name, u.user_email, e.enrollment_date, e.status, ac.attended FROM {$wpdb->prefix}sige_enrollments e LEFT JOIN {$wpdb->prefix}sige_activities a ON e.activity_id = a.id LEFT JOIN {$wpdb->prefix}usermeta um1 ON e.user_id = um1.user_id AND um1.meta_key = 'full_name' LEFT JOIN {$wpdb->prefix}users u ON e.user_id = u.ID LEFT JOIN {$wpdb->prefix}sige_enrollment_attendance_control ac ON e.id = ac.enrollment_id WHERE e.status = 'Approved' "; if ($filtered_user_id) { $query .= $wpdb->prepare(" AND e.user_id = %d", $filtered_user_id); } $enrollments = $wpdb->get_results($query); ?>

Attendance Control

Activity Name User ID User Full Name Email Enrollment Date Status Attended Action
activity_name); ?> user_id); ?> full_name); ?> user_email); ?> enrollment_date); ?> status); ?> attended); ?>
No approved enrollments found.
You must be logged in to view your badge.

'; } global $wpdb; $current_user_id = get_current_user_id(); // Fetch full name from usermeta $full_name = get_user_meta($current_user_id, 'full_name', true); // Secret phrase $secret_phrase = 'mysecretyphrase'; // Generate MD5 hash of the user ID $hashed_user_id = md5($secret_phrase . $current_user_id); // Generate QR Code with the hashed user ID ob_start(); QRcode::png($hashed_user_id, null, QR_ECLEVEL_L, 10); $imageString = ob_get_contents(); ob_end_clean(); $qrCodeDataUri = 'data:image/png;base64,' . base64_encode($imageString); // Get activities for the current year $current_year = date('Y'); $activities = $wpdb->get_results($wpdb->prepare(" SELECT a.*, p.place, s.full_name as speaker, e.name as event_name, e.id as event_id FROM {$wpdb->prefix}sige_activities a LEFT JOIN {$wpdb->prefix}sige_place p ON a.place_id = p.id LEFT JOIN {$wpdb->prefix}sige_speakers s ON a.speaker_id = s.id LEFT JOIN {$wpdb->prefix}sige_event_names e ON a.event_name_id = e.id WHERE (a.status = 'Open' OR a.status = 'Closed') AND YEAR(a.start_date) = %d AND a.attendance_control = 'yes' ", $current_year)); // Organize activities by event name $events = []; foreach ($activities as $activity) { $enrollment_status_action = $wpdb->get_var($wpdb->prepare(" SELECT status FROM {$wpdb->prefix}sige_enrollments WHERE activity_id = %d AND user_id = %d ", $activity->id, $current_user_id)); if (!$enrollment_status_action) { $enrollment_status_action = 'Not Requested'; } $events[$activity->event_name][] = [ 'activity_name' => $activity->name, 'status' => $enrollment_status_action ]; } // Output the HTML ob_start(); ?>

XXVI SYMPOSIUM ON OPERATIONAL APPLICATIONS IN DEFENSE AREAS

Event Badge

QR Code

Dear ,

SIGE is an open event promoted by the Technological Institute of Aeronautics with the aim of creating an environment for the exchange of experiences between the academic, industrial and operational sectors of the Armed Forces, on issues of teaching, research and development in Defense areas.

The organizing team is made up of master’s and doctoral students from the Graduate Program in Operational Applications (PPGAO) at ITA.

Activities for

$activities) { ?>

  • - Status:

No activities available for this year.

Contact the event Organizing Committee for questions via email at sige@ita.br

get_results($wpdb->prepare(" SELECT a.*, p.place, s.full_name as speaker, e.name as event_name, e.id as event_id FROM {$wpdb->prefix}sige_activities a LEFT JOIN {$wpdb->prefix}sige_place p ON a.place_id = p.id LEFT JOIN {$wpdb->prefix}sige_speakers s ON a.speaker_id = s.id LEFT JOIN {$wpdb->prefix}sige_event_names e ON a.event_name_id = e.id WHERE (a.status = 'Open' OR a.status = 'Closed') AND YEAR(a.start_date) = %d AND a.attendance_control = 'yes' ", $current_year)); // Organize activities by event name $events = []; foreach ($activities as $activity) { $enrollment_status_action = $wpdb->get_var($wpdb->prepare(" SELECT status FROM {$wpdb->prefix}sige_enrollments WHERE activity_id = %d AND user_id = %d ", $activity->id, $current_user_id)); if (!$enrollment_status_action) { $enrollment_status_action = 'Not Requested'; } $events[$activity->event_name][] = [ 'activity_name' => $activity->name, 'status' => $enrollment_status_action ]; } // Create a new PDF document $pdf = new TCPDF(); $pdf->AddPage(); // Add custom styling $css = ' '; // Add logos (adjusted Y coordinate by 10 pixels) $pdf->Image(plugin_dir_path(__FILE__) . 'image/ita.png', 15, 15, 27.5); // Adjusted Y coordinate to 20 $pdf->Image(plugin_dir_path(__FILE__) . 'image/gladioalado.png', 145, 15, 40); // Adjusted Y coordinate to 20 // Add QR code image $pdf->Image('@' . $imgdata, 55, 70, 100, 100, 'PNG'); // Adjusted 100px down // Add text $pdf->SetXY(15, 55); // Adjusted 100px down $pdf->writeHTMLCell(0, 0, '', '', '

XXVI SYMPOSIUM ON OPERATIONAL APPLICATIONS IN DEFENSE AREAS

', 0, 1, 0, true, 'C', true); $pdf->SetXY(15, 65); // Adjusted 100px down $pdf->writeHTMLCell(0, 0, '', '', '

Event Badge

', 0, 1, 0, true, 'C', true); // Prepare the HTML content $html_content = '
'; $html_content .= '

Dear ' . esc_html($full_name) . ',

'; $html_content .= '

SIGE is an open event promoted by the Technological Institute of Aeronautics with the aim of creating an environment for the exchange of experiences between the academic, industrial and operational sectors of the Armed Forces, on issues of teaching, research and development in Defense areas.

'; $html_content .= '

The organizing team is made up of master’s and doctoral students from the Graduate Program in Operational Applications (PPGAO) at ITA.

'; $html_content .= '

Activities for ' . $current_year . '

'; if (!empty($events)) { foreach ($events as $event_name => $activities) { $html_content .= '

' . esc_html($event_name) . '

    '; foreach ($activities as $activity) { $html_content .= '
  • ' . esc_html($activity['activity_name']) . ' - Status: ' . esc_html($activity['status']) . '
  • '; } $html_content .= '

 

'; // Add

to separate content } } else { $html_content .= '

No activities available for this year.

'; } $html_content .= '

Contact the event Organizing Committee for questions via email at sige@ita.br

'; $html_content .= '

Generated on: ' . date('d-m-Y - H:i:s') . '

'; $html_content .= '
'; // Add HTML content $pdf->SetXY(15, 170); // Adjusted 100px down $pdf->writeHTMLCell(0, 0, '', '', $css . $html_content, 0, 1, 0, true, '', true); // Output PDF $pdf->Output('user_badge.pdf', 'D'); wp_die(); } function verifyUserBasedOnQRCode($hashed_user_id) { global $wpdb; // Define the secret phrase used for hashing $secret_phrase = 'mysecretyphrase'; // Loop through users to find the matching hash $users = get_users(); foreach ($users as $user) { if (md5($secret_phrase . $user->ID) === $hashed_user_id) { return $user->ID; } } // Return false if no match found return false; }