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 '
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 '
Activity Name
Enrollment Canceled by User
Waiting List
Approved
Not Approved
Under Analysis
Total Enrollment Requests
Enrollment Availables
Slots
';
if ($summary_counts) {
foreach ($summary_counts as $summary) {
echo '
' . 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) . '
';
}
} else {
echo '
No data found
';
}
echo '
';
// 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 '
';
echo '';
echo '
';
// Display the enrollments table
echo '
Existing Enrollments
';
echo '
';
echo '';
echo '
';
// Add the color legend
echo '
Legend:
';
echo '
Enrollment Canceled by UserApprovedWaiting ListNot ApprovedUnder 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.
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());")
?>