if (performance.navigation.type === performance.navigation.TYPE_BACK_FORWARD) { window.location.reload(); } '; if (!is_user_logged_in()) { // Add the style to the head section of the page return '

You need to be logged in to view this page.

'; } $user = wp_get_current_user(); $roles = $user->roles; $args = shortcode_atts(array('activity_id' => 'none', 'allowed_role' => 'none'), $attributes); $allowed_role = $args['allowed_role']; $has_access = array($allowed_role, 'administrator'); $user_allowed_roles = array_intersect($roles, $has_access); if (empty($user_allowed_roles)) { // Add the style for the restricted message return '

Sorry, you don\'t have permission to view this content.

'; } else { global $wpdb; //$current_user = wp_get_current_user(); $user_id = $user->ID; $activity_id = intval($args['activity_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_hierarquico', 'pais', 'formacao_academica', 'regiao_do_brasil', 'genero' ]; // Handle saving additional features selection if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['additional_features_applied'])) { $selected_meta_keys = isset($_POST['additional_features']) ? 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 = ['full_name', 'militar', 'posto', 'instituição', 'nacionalidade', 'efetivo_dcta']; } } // 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] ); $enrollment_data = $wpdb->get_row( $wpdb->prepare(" SELECT user_id, activity_id FROM {$wpdb->prefix}sige_enrollments WHERE id = %d", $enrollment_id) ); send_email_notification($enrollment_data->user_id, $new_status, $enrollment_data->activity_id); usleep(100_000); } // 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 summary counts $summary_counts = $wpdb->get_results(" SELECT a.name as activity_name, a.slots, COUNT(e.id) as total_requests, SUM(CASE WHEN e.status = 'Enrollment Canceled by User' THEN 1 ELSE 0 END) as canceled_by_user, SUM(CASE WHEN e.status = 'Waiting List' THEN 1 ELSE 0 END) as waiting_list, SUM(CASE WHEN e.status = 'Approved' THEN 1 ELSE 0 END) as approved, SUM(CASE WHEN e.status = 'Not Approved' THEN 1 ELSE 0 END) as not_approved, SUM(CASE WHEN e.status = 'Under Analysis' THEN 1 ELSE 0 END) as under_analysis, a.slots - SUM(CASE WHEN e.status = 'Approved' THEN 1 ELSE 0 END) as available_slots FROM {$wpdb->prefix}sige_enrollments e LEFT JOIN {$wpdb->prefix}sige_activities a ON e.activity_id = a.id WHERE a.id = $activity_id GROUP BY a.name, a.slots "); ob_start(); $unique_id = uniqid('sige_'); //sige_enqueue_export_csv_script($unique_id); // Display summary counts table echo '

Enrollment Summary

'; echo ''; if ($summary_counts) { foreach ($summary_counts as $summary) { echo ''; } } else { echo ''; } echo '
Activity Name Enrollment Canceled by User Waiting List Approved Not Approved Under Analysis Total Enrollment Requests Enrollment Availables Slots
' . esc_html($summary->activity_name) . ' ' . esc_html($summary->canceled_by_user) . ' ' . esc_html($summary->waiting_list) . ' ' . esc_html($summary->approved) . ' ' . esc_html($summary->not_approved) . ' ' . esc_html($summary->under_analysis) . ' ' . esc_html($summary->total_requests) . ' ' . esc_html($summary->available_slots) . ' ' . esc_html($summary->slots) . '
No data found
'; // 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 = $wpdb->prepare(" 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 WHERE a.id = %d ORDER BY e.enrollment_date ASC ", $activity_id); $enrollments = $wpdb->get_results($query); // 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: #33ff7a;"'; } 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 { $colspan = 6 + count($selected_meta_keys); // 6 base columns + dynamic meta columns echo ''; } echo '
Select All Activity Name User ID User Email Enrollment Date Status' . ucfirst(str_replace('_', ' ', $meta_key)) . '
{$enrollment->activity_name} {$enrollment->user_id} {$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 Approved Waiting List Not Approved Under Analysis
'; echo ''; return ob_get_clean(); } } add_shortcode('genericEnrollmentControl', 'frontendEnrollmentControlGeneric'); /** * Handles user enrollment for a specific activity via shortcode. * * @param array $attributes Shortcode attributes, expects 'activity_id'. * @return string HTML output for enrollment status and form. */ function get_enrollment($attributes) { global $wpdb; $user = wp_get_current_user(); $user_id = $user->ID; $args = shortcode_atts(array('activity_id' => 'none', 'open' => 'yes'), $attributes); $activity_id = $args['activity_id']; $open_enrollment = $args['open']; // Handle form submission if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['activity_id']) && $_POST['activity_id'] == $activity_id) { if (isset($_POST['enrollment_action'])) { if ($_POST['enrollment_action'] === 'add') { // Add or update enrollment to "Under Analysis" $existing = $wpdb->get_var($wpdb->prepare( "SELECT id FROM {$wpdb->prefix}sige_enrollments WHERE activity_id = %d AND user_id = %d", $activity_id, $user_id )); if ($existing) { $wpdb->update( "{$wpdb->prefix}sige_enrollments", ['status' => 'Under Analysis'], ['activity_id' => $activity_id, 'user_id' => $user_id] ); send_email_notification($user_id, 'Under Analysis', $activity_id); } else { $wpdb->insert( "{$wpdb->prefix}sige_enrollments", [ 'activity_id' => $activity_id, 'user_id' => $user_id, 'enrollment_date' => current_time('mysql'), 'status' => 'Under Analysis' ] ); send_email_notification($user_id, 'Under Analysis', $activity_id); } } elseif ($_POST['enrollment_action'] === 'cancel') { // Cancel enrollment $wpdb->update( "{$wpdb->prefix}sige_enrollments", ['status' => 'Enrollment Canceled by User'], ['activity_id' => $activity_id, 'user_id' => $user_id] ); send_email_notification($user_id, 'Enrollment Canceled by User', $activity_id); } $referer = wp_get_referer(); $safe_referer = wp_validate_redirect($referer, home_url()); wp_safe_redirect(home_url('/inscricoes/')); exit; } } // Fetch current status only if user is logged in if (!$user_id) { return ''; } $enrollment = $wpdb->get_var($wpdb->prepare(" SELECT status FROM {$wpdb->prefix}sige_enrollments WHERE activity_id = %d AND user_id = %d ", $activity_id, $user_id)); $headline = '

Você ainda não se inscreveu nesta atividade!


'; $button = ''; if ($enrollment) { $headline = '

Status da sua inscrição: ' . esc_html($enrollment) . '


'; if ($enrollment !== 'Enrollment Canceled by User' && $enrollment !== 'Not Approved') { $button = '
'; } } else if ($open_enrollment !== 'yes') { $headline = '

Inscrições encerradas


'; } if ($open_enrollment === 'yes' && (empty($enrollment) || $enrollment === 'Enrollment Canceled by User')) $button = '
'; return $headline . ' ' . $button; } add_shortcode('get_enroll', 'get_enrollment'); function frontendAttendanceControl() { ob_start(); nocache_headers(); // Append nocache query parameter to bust cache if (!isset($_GET['nocache'])) { // Append a unique timestamp-based parameter to the URL $permalink = get_permalink(); if (!$permalink) { $permalink = home_url(); } $new_url = add_query_arg('nocache', time(), $permalink); wp_redirect($new_url); exit; exit(); } 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('comissao_secretaria') || current_user_can('comissao_suporte')) && !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'])) { //error_log('******************************************'); //error_log('Form submitted with update_attendance'); $enrollment_id = isset($_POST['enrollment_id']) ? intval($_POST['enrollment_id']) : 0; //error_log('enrollment_id: ' . $enrollment_id); $attended = isset($_POST['attended']) ? sanitize_text_field($_POST['attended']) : ''; //error_log('attended: ' . $attended); $user_id = isset($_POST['user_id']) ? intval($_POST['user_id']) : 0; //error_log('user_id: ' . $user_id); //$selected_activity = isset($_POST['selected_activity']) ? sanitize_text_field($_POST['selected_activity']) : 'All'; $selected_activity = sanitize_text_field($_POST['selected_activity']); if ($enrollment_id && $attended) { //error_log('Valid enrollment_id and attended values'); global $wpdb; // Fetch the activity_id from the sige_enrollments table $activity_id = $wpdb->get_var($wpdb->prepare("SELECT activity_id FROM {$wpdb->prefix}sige_enrollments WHERE id = %d", $enrollment_id)); //error_log('activity_id: ' . $activity_id); $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 ] ); } } if ($activity_id !== null) { // error_log('Sending email notification'); send_email_notification($user_id, $attended, $activity_id); } else { //error_log('Activity ID not found for enrollment ID ' . $enrollment_id); } } else { $selected_activity = isset($_POST['selected_activity']) ? sanitize_text_field($_POST['selected_activity']) : 'SIGE XXVII'; //$selected_activity = sanitize_text_field($_POST['selected_activity']); } // 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/Waiting List" and modality "In-person or Hybrid" 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' OR e.status = 'Waiting List') AND (a.modality = 'In-person' OR a.modality = 'Hybrid') "; if ($selected_activity !== 'All') { $query .= $wpdb->prepare(" AND a.id = %d", $selected_activity); } if ($filtered_user_id) { $query .= $wpdb->prepare(" AND e.user_id = %d", $filtered_user_id); } $enrollments = $wpdb->get_results($query); $activities = $wpdb->get_results("SELECT id, name FROM {$wpdb->prefix}sige_activities WHERE modality IN ('In-person', 'Hybrid') AND YEAR(start_date) = YEAR(CURDATE());"); ?>

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 handle the attendance control.

'; } if (!(current_user_can('administrator') || current_user_can('comissao_secretaria') || current_user_can('comissao_suporte')) && !current_user_can('contributor')) { return '

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

'; } global $wpdb; $success_message = ''; $selected_activity = isset($_POST['selected_activity']) ? intval($_POST['selected_activity']) : (isset($_GET['selected_activity']) ? intval($_GET['selected_activity']) : 0); $selected_status = isset($_POST['statusFilter']) ? sanitize_text_field($_POST['statusFilter']) : (isset($_GET['statusFilter']) ? sanitize_text_field($_GET['statusFilter']) : 'Approved'); if ($_SERVER['REQUEST_METHOD'] == 'POST') { if (isset($_POST['qr_scanner_used']) && $_POST['qr_scanner_used'] == '1') { $hashed_user_id = sanitize_text_field($_POST['qr_code_message']); $filtered_user_id = verifyUserBasedOnQRCode($hashed_user_id); if ($selected_activity === -1 || $selected_activity > 0) { $status_condition = $selected_status === 'Not Requested' ? 'Not Requested' : $selected_status; $query = $wpdb->prepare(" SELECT e.id as enrollment_id, e.user_id, e.status, u.user_email, um1.meta_value as full_name, a.name as activity_name, a.id as activity_id FROM {$wpdb->prefix}sige_enrollments e LEFT JOIN {$wpdb->prefix}users u ON e.user_id = u.ID LEFT JOIN {$wpdb->prefix}usermeta um1 ON e.user_id = um1.user_id AND um1.meta_key = 'full_name' LEFT JOIN {$wpdb->prefix}sige_activities a ON e.activity_id = a.id WHERE e.user_id = %d AND e.status = %s ", $filtered_user_id, $status_condition); if ($selected_activity === -1) { $query .= " AND a.type = 'Main Event' AND (a.modality = 'In-person' OR a.modality = 'Hybrid')"; } else { $query .= $wpdb->prepare(" AND e.activity_id = %d", $selected_activity); } $enrollments = $wpdb->get_results($query); if ($enrollments) { foreach ($enrollments as $enrollment) { $existing_attendance = $wpdb->get_var($wpdb->prepare(" SELECT attended FROM {$wpdb->prefix}sige_enrollment_attendance_control WHERE enrollment_id = %d ", $enrollment->enrollment_id)); if ($existing_attendance === 'yes') { $success_message .= '

Mr./Mrs. ' . esc_html($enrollment->full_name) . '

Email: ' . esc_html($enrollment->user_email) . '

You have already attended the ' . esc_html($enrollment->activity_name) . '

'; } else { if ($existing_attendance) { $wpdb->update( "{$wpdb->prefix}sige_enrollment_attendance_control", ['attended' => 'yes'], ['enrollment_id' => $enrollment->enrollment_id] ); } else { $wpdb->insert( "{$wpdb->prefix}sige_enrollment_attendance_control", [ 'enrollment_id' => $enrollment->enrollment_id, 'attended' => 'yes' ] ); } send_email_notification($enrollment->user_id, 'yes', $enrollment->activity_id); $enrollment_date = isset($enrollment->enrollment_date) ? esc_html(date('d-m-Y', strtotime($enrollment->enrollment_date))) : 'N/A'; $success_message .= '

Mr./Mrs. ' . esc_html($enrollment->full_name) . '

Email: ' . esc_html($enrollment->user_email) . '

Thank you for attending the ' . esc_html($enrollment->activity_name) . '

Date of the Activity: ' . $enrollment_date . '

You will soon receive an email confirming your participation.

'; } } } else { if ($selected_status === 'Not Requested') { $new_enrollment_data = [ 'activity_id' => $selected_activity === -1 ? $wpdb->get_var("SELECT id FROM {$wpdb->prefix}sige_activities WHERE modality = 'Hybrid' AND type = 'Main Event' LIMIT 1") : $selected_activity, 'user_id' => $filtered_user_id, 'enrollment_date' => current_time('mysql'), 'status' => 'Not Requested' ]; $wpdb->insert("{$wpdb->prefix}sige_enrollments", $new_enrollment_data); $new_enrollment_id = $wpdb->insert_id; if ($new_enrollment_id) { $wpdb->insert("{$wpdb->prefix}sige_enrollment_attendance_control", [ 'enrollment_id' => $new_enrollment_id, 'attended' => 'yes' ]); // Fetch new user's email and full name for the email $new_enrollment_user = $wpdb->get_row($wpdb->prepare(" SELECT u.user_email, um1.meta_value as full_name FROM {$wpdb->prefix}users u LEFT JOIN {$wpdb->prefix}usermeta um1 ON u.ID = um1.user_id AND um1.meta_key = 'full_name' WHERE u.ID = %d ", $filtered_user_id)); // Send email for the new enrollment and attendance if ($new_enrollment_user) { $to = $new_enrollment_user->user_email; $subject = 'Your Enrollment and Attendance Have Been Recorded'; $message = 'Dear ' . esc_html($new_enrollment_user->full_name) . ',

' . 'You have been successfully enrolled in the activity, and your attendance has been recorded.
' . 'Thank you for your participation!

' . 'Best regards,
The Event Team'; $headers = ['Content-Type: text/html; charset=UTF-8']; // Send the email wp_mail($to, $subject, $message, $headers); } // Log the email variables for debugging //error_log("New enrollment email sent to: " . esc_html($new_enrollment_user->user_email)); //error_log("New enrollment user full name: " . esc_html($new_enrollment_user->full_name)); $success_message .= '

A new enrollment has been added and attendance has been recorded.

'; } } else { $success_message .= '

No enrollments found for the user with the selected status.

'; } } // Store success message in session and reload the page with the selected_activity and statusFilter in the URL $_SESSION['success_message'] = $success_message; wp_safe_redirect(add_query_arg(['selected_activity' => $selected_activity, 'statusFilter' => $selected_status])); exit; } } } // Display the success message if it exists if (isset($_SESSION['success_message'])) { echo $_SESSION['success_message']; unset($_SESSION['success_message']); // Clear the message after displaying it } // Fetch enrollments with the selected status $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 = %s "; $status_condition = $selected_status === 'Not Requested' ? 'Not Requested' : $selected_status; $query = $wpdb->prepare($query, $status_condition); if ($selected_activity === -1) { $query .= " AND a.type = 'Main Event' AND (a.modality = 'In-person' OR a.modality = 'Hybrid')"; } elseif ($selected_activity > 0) { $query .= $wpdb->prepare(" AND a.id = %d", $selected_activity); } $enrollments = $wpdb->get_results($query); $activities = $wpdb->get_results("SELECT id, name FROM {$wpdb->prefix}sige_activities WHERE modality IN ('In-person', 'Hybrid') AND YEAR(start_date) = YEAR(CURDATE());") ?>

Attendance Control

Activity Name User ID User Full Name Email Enrollment Date Status Attended
activity_name); ?> user_id); ?> full_name); ?> user_email); ?> enrollment_date); ?> status); ?> attended); ?>
No enrollments found for the selected status.