<?php
// Data fetching logic for plan responses
$activePlans = [];
if ($dbc && !mysqli_connect_errno()) {
$query = "SELECT pk_Plan, fromDate, weeks FROM CINE_Plan WHERE isActive = TRUE ORDER BY fromDate DESC";
$result = mysqli_query($dbc, $query);
if ($result) {
while ($plan = mysqli_fetch_assoc($result)) {
$planId = $plan['pk_Plan'];
$fromDate = $plan['fromDate'];
$weeks = $plan['weeks'];
// Calculate end date
$endDate = date('Y-m-d', strtotime($fromDate . ' + ' . $weeks . ' weeks'));
// Get plages for this plan
$plages = getPlanPlages($dbc, $fromDate, $endDate);
$plan['plages'] = $plages;
$plan['endDate'] = $endDate;
$activePlans[] = $plan;
}
mysqli_free_result($result);
}
}
/**
* Get plages for a specific date range
*/
function getPlanPlages($dbc, $fromDate, $endDate) {
$plageQuery = "
SELECT
p.pk_Plage,
p.date,
p.fromTime,
p.toTime,
p.extraTime,
f.name as film_name,
f.imagePath as film_image,
supervisor.firstName as supervisor_first,
supervisor.lastName as supervisor_last,
supervisor.pk_Person as supervisor_id,
e.name as extra_name
FROM CINE_Plage p
LEFT JOIN CINE_Film f ON p.fk_Film = f.pk_Film
LEFT JOIN CINE_Person supervisor ON p.fk_Person_supervises = supervisor.pk_Person
LEFT JOIN CINE_Extra e ON p.fk_Extra = e.pk_Extra
WHERE p.date >= ? AND p.date <= ?
ORDER BY p.date ASC, p.fromTime ASC
";
$plageStmt = mysqli_prepare($dbc, $plageQuery);
mysqli_stmt_bind_param($plageStmt, "ss", $fromDate, $endDate);
mysqli_stmt_execute($plageStmt);
$plageResult = mysqli_stmt_get_result($plageStmt);
$plages = [];
if ($plageResult) {
while ($plage = mysqli_fetch_assoc($plageResult)) {
$plageId = $plage['pk_Plage'];
// Get registrations for this plage
$registrations = getPlageRegistrations($dbc, $plageId);
$plage['registrations'] = $registrations;
$plages[] = $plage;
}
}
mysqli_stmt_close($plageStmt);
return $plages;
}
/**
* Get registrations for a specific plage
*/
function getPlageRegistrations($dbc, $plageId) {
$registrationQuery = "
SELECT
r.createdAt,
person.pk_Person,
person.firstName,
person.lastName,
person.email,
answer.label as answer_label,
(SELECT COUNT(*) FROM CINE_Plage WHERE fk_Person_supervises = person.pk_Person) as work_count
FROM CINE_Registers r
JOIN CINE_Person person ON r.fk_Person = person.pk_Person
LEFT JOIN CINE_Answer answer ON r.fk_Answer = answer.pk_Answer
WHERE r.fk_Plage = ?
ORDER BY work_count ASC, r.createdAt ASC
";
$regStmt = mysqli_prepare($dbc, $registrationQuery);
mysqli_stmt_bind_param($regStmt, "i", $plageId);
mysqli_stmt_execute($regStmt);
$regResult = mysqli_stmt_get_result($regStmt);
$registrations = [];
if ($regResult) {
while ($registration = mysqli_fetch_assoc($regResult)) {
$registrations[] = $registration;
}
}
mysqli_stmt_close($regStmt);
return $registrations;
}
/**
* Generate participant initials for avatar
*/
function generateParticipantInitials($firstName, $lastName) {
$firstName = trim($firstName);
$lastName = trim($lastName);
// Get first character of each name, handling edge cases
$firstInitial = !empty($firstName) ? strtoupper(substr($firstName, 0, 1)) : '';
$lastInitial = !empty($lastName) ? strtoupper(substr($lastName, 0, 1)) : '';
// Create initials - fallback to first name if no last name
$initials = $firstInitial . $lastInitial;
if (empty($initials)) {
$initials = !empty($firstName) ? strtoupper(substr($firstName, 0, 2)) : 'U';
} else if (strlen($initials) == 1) {
$initials = $firstInitial . (!empty($firstName) && strlen($firstName) > 1 ? strtoupper(substr($firstName, 1, 1)) : '');
}
// Ensure we have exactly 2 characters max
$initials = substr($initials, 0, 2);
return htmlspecialchars($initials);
}
?>