mirror of
https://codeberg.org/PostERG/xamxam.git
synced 2026-05-06 11:09:18 +02:00
Fixed multiple issues in admin panel: 1. CSS path: modern-normalize.css → modern-normalize.min.css (File is actually named .min.css) 2. Icon path: assets/icon.svg → /assets/admin_favicon.svg (Was relative, now absolute; correct filename) 3. Navigation: /admin/list.php → /admin/ (list.php was renamed to index.php) 4. Short PHP tags: <? → <?php (Better compatibility, some servers don't enable short_open_tag) 5. Quirks mode warning was due to CSS not loading, not DOCTYPE (DOCTYPE was already present) Files modified: - public/admin/inc/head.php (main fixes) - public/admin/index.php (short tags) - public/admin/add.php (short tags) - public/admin/import.php (short tags) Need to redeploy for production: just deploy
249 lines
14 KiB
PHP
249 lines
14 KiB
PHP
<?php
|
|
// Bootstrap application
|
|
require_once __DIR__ . "/../../config/bootstrap.php";
|
|
|
|
// Start session and generate CSRF token
|
|
session_start();
|
|
if (empty($_SESSION["csrf_token"])) {
|
|
$_SESSION["csrf_token"] = bin2hex(random_bytes(32));
|
|
}
|
|
|
|
$pageTitle = "Ajout de TFE";
|
|
|
|
// Load database helper
|
|
require_once __DIR__ . '/../../lib/Database.php';
|
|
|
|
try {
|
|
$db = new Database();
|
|
$orientations = $db->getAllOrientations();
|
|
$apPrograms = $db->getAllAPPrograms();
|
|
$finalityTypes = $db->getAllFinalityTypes();
|
|
$languages = $db->getAllLanguages();
|
|
$formatTypes = $db->getAllFormatTypes();
|
|
} catch (Exception $e) {
|
|
error_log("Failed to load form data: " . $e->getMessage());
|
|
die("Erreur lors du chargement du formulaire. Veuillez réessayer plus tard.");
|
|
}
|
|
|
|
// Get error message and preserved form data from session (if redirected back from error)
|
|
$error = isset($_SESSION["form_error"]) ? $_SESSION["form_error"] : null;
|
|
$formData = isset($_SESSION["form_data"]) ? $_SESSION["form_data"] : [];
|
|
|
|
// Clear session data after retrieving
|
|
unset($_SESSION["form_error"]);
|
|
unset($_SESSION["form_data"]);
|
|
|
|
// Helper function to get old form value
|
|
function old($key, $default = "")
|
|
{
|
|
global $formData;
|
|
return isset($formData[$key])
|
|
? htmlspecialchars($formData[$key])
|
|
: $default;
|
|
}
|
|
|
|
// Helper function to check if value was previously selected
|
|
function wasSelected($key, $value)
|
|
{
|
|
global $formData;
|
|
if (!isset($formData[$key])) {
|
|
return false;
|
|
}
|
|
if (is_array($formData[$key])) {
|
|
return in_array($value, $formData[$key]);
|
|
}
|
|
return $formData[$key] == $value;
|
|
}
|
|
?>
|
|
<?php include "inc/head.php"?>
|
|
<main>
|
|
<?php if ($error): ?>
|
|
<div class="error-message" style="background: #fee; border: 2px solid #c00; padding: 1rem; margin-bottom: 1rem; border-radius: 4px; color: #c00;">
|
|
<strong>⚠️ Erreur:</strong> <?php echo htmlspecialchars($error); ?>
|
|
</div>
|
|
<?php endif; ?>
|
|
|
|
<form action="formulaire.php" method="post" enctype="multipart/form-data">
|
|
<!-- CSRF Protection -->
|
|
<input type="hidden" name="csrf_token" value="<?php echo htmlspecialchars(
|
|
$_SESSION["csrf_token"],
|
|
); ?>">
|
|
|
|
|
|
<fieldset>
|
|
<legend>Informations de base</legend>
|
|
<label for="auteurice">Nom/Prénom/Pseudo *</label>
|
|
<input type="text" id="auteurice" name="auteurice" placeholder="Nom de l'auteur·ice" value="<?php echo old(
|
|
"auteurice",
|
|
); ?>" required>
|
|
|
|
<label for="mail">Contact (email, site web, insta, ...)</label>
|
|
<input type="text" id="mail" name="mail" placeholder="votre.email@example.com ou @instagram" value="<?php echo old(
|
|
"mail",
|
|
); ?>">
|
|
<label for="année">Année diplômante *</label>
|
|
<input type="number" id="année" name="année" min="2000" max="<?php echo date(
|
|
"Y",
|
|
) + 1; ?>" placeholder="<?php echo date(
|
|
"Y",
|
|
); ?>" value="<?php echo old("année"); ?>" required>
|
|
</fieldset>
|
|
|
|
|
|
<fieldset>
|
|
<legend>Informations académiques</legend>
|
|
<label for="orientation">Orientation principale *</label>
|
|
<select id="orientation" name="orientation" required>
|
|
<option value="">-- Sélectionner une orientation --</option>
|
|
<?php foreach ($orientations as $orientation): ?>
|
|
<option value="<?php echo htmlspecialchars(
|
|
$orientation["id"],
|
|
); ?>" <?php echo wasSelected(
|
|
"orientation",
|
|
$orientation["id"],
|
|
)
|
|
? "selected"
|
|
: ""; ?>>
|
|
<?php echo htmlspecialchars(
|
|
$orientation["name"],
|
|
); ?>
|
|
</option>
|
|
<?php endforeach; ?>
|
|
</select>
|
|
|
|
<label for="ap">Atelier Pratique (AP) *</label>
|
|
<select id="ap" name="ap" required>
|
|
<option value="">-- Sélectionner un AP --</option>
|
|
<?php foreach ($apPrograms as $ap): ?>
|
|
<option value="<?php echo htmlspecialchars(
|
|
$ap["id"],
|
|
); ?>" <?php echo wasSelected("ap", $ap["id"])
|
|
? "selected"
|
|
: ""; ?>>
|
|
<?php echo htmlspecialchars($ap["name"]); ?>
|
|
<?php if (
|
|
$ap["code"]
|
|
): ?> (<?php echo htmlspecialchars(
|
|
$ap["code"],
|
|
); ?>)<?php endif; ?>
|
|
</option>
|
|
<?php endforeach; ?>
|
|
</select>
|
|
|
|
<label for="finality">Finalité du master *</label>
|
|
<select id="finality" name="finality" required>
|
|
<option value="">-- Sélectionner une finalité --</option>
|
|
<?php foreach ($finalityTypes as $finality): ?>
|
|
<option value="<?php echo htmlspecialchars(
|
|
$finality["id"],
|
|
); ?>" <?php echo wasSelected(
|
|
"finality",
|
|
$finality["id"],
|
|
)
|
|
? "selected"
|
|
: ""; ?>>
|
|
<?php echo htmlspecialchars($finality["name"]); ?>
|
|
</option>
|
|
<?php endforeach; ?>
|
|
</select>
|
|
|
|
<label for="promoteurice">Promoteur·ice(s)</label>
|
|
<input type="text" id="promoteurice" name="promoteurice" placeholder="Nom du/de la promoteur·ice (si plusieurs, séparer par des virgules)" value="<?php echo old(
|
|
"promoteurice",
|
|
); ?>">
|
|
</fieldset>
|
|
|
|
|
|
|
|
<fieldset>
|
|
<legend>À propos du TFE</legend>
|
|
<label for="titre">Titre du mémoire *</label>
|
|
<input type="text" id="titre" name="titre" placeholder="Titre de votre TFE" value="<?php echo old(
|
|
"titre",
|
|
); ?>" required>
|
|
|
|
<label for="subtitle">Sous-titre (si applicable)</label>
|
|
<input type="text" id="subtitle" name="subtitle" placeholder="Sous-titre de votre TFE" value="<?php echo old(
|
|
"subtitle",
|
|
); ?>">
|
|
<label for="synopsis">Synopsis (environ 200 mots) *</label>
|
|
<textarea id="synopsis" name="synopsis" rows="8" placeholder="Décrivez votre TFE en quelques paragraphes..." required><?php echo old(
|
|
"synopsis",
|
|
); ?></textarea>
|
|
<label for="problématique">Problématique</label>
|
|
<textarea id="problématique" name="problématique" rows="4" placeholder="La problématique principale de votre mémoire..."><?php echo old(
|
|
"problématique",
|
|
); ?></textarea>
|
|
<label>Langue(s) du TFE * (sélection multiple possible)</label>
|
|
<ul style="list-style: none;">
|
|
<?php foreach ($languages as $language): ?>
|
|
<li>
|
|
<label class="checkbox-label">
|
|
<input type="checkbox" name="languages[]" value="<?php echo htmlspecialchars(
|
|
$language["id"],
|
|
); ?>" <?php echo wasSelected(
|
|
"languages",
|
|
$language["id"],
|
|
)
|
|
? "checked"
|
|
: ""; ?>>
|
|
<?php echo htmlspecialchars($language["name"]); ?>
|
|
</label>
|
|
</li>
|
|
<?php endforeach; ?>
|
|
</ul>
|
|
|
|
<label>Format(s) (sélection multiple possible)</label>
|
|
<ul style="list-style: none;">
|
|
<?php foreach ($formatTypes as $format): ?>
|
|
<li>
|
|
<label class="checkbox-label">
|
|
<input type="checkbox" name="formats[]" value="<?php echo htmlspecialchars(
|
|
$format["id"],
|
|
); ?>" <?php echo wasSelected(
|
|
"formats",
|
|
$format["id"],
|
|
)
|
|
? "checked"
|
|
: ""; ?>>
|
|
<?php echo htmlspecialchars($format["name"]); ?>
|
|
</label>
|
|
</li>
|
|
<?php endforeach; ?>
|
|
</ul>
|
|
|
|
<label for="tag">Mots-clés (max 10, séparés par des virgules)</label>
|
|
<input type="text" id="tag" name="tag" placeholder="typographie, photographie, outils libre, post-colonial..." value="<?php echo old(
|
|
"tag",
|
|
); ?>">
|
|
<small>Séparez les mots-clés par des virgules. Maximum 10 mots-clés.</small>
|
|
<label for="duration_info">Durée/Taille (si applicable)</label>
|
|
<input type="text" id="duration_info" name="duration_info" placeholder="Ex: 68 minutes, 128 pages, 78 pages + 15 minutes" value="<?php echo old(
|
|
"duration_info",
|
|
); ?>">
|
|
<small>Indiquez la durée (en minutes) ou le nombre de pages de votre TFE.</small>
|
|
<label for="lien">Lien vers un site web ou ressource en ligne</label>
|
|
<input type="url" id="lien" name="lien" placeholder="https://monmemoire.erg.be/..." value="<?php echo old(
|
|
"lien",
|
|
); ?>">
|
|
</fieldset>
|
|
|
|
|
|
<fieldset>
|
|
<legend>Fichiers</legend>
|
|
<label for="couverture">Importer une image de couverture</label>
|
|
<small>Formats acceptés : JPG, PNG. Taille max : 10MB.</small>
|
|
<input type="file" id="couverture" name="couverture" accept="image/jpeg,image/png">
|
|
|
|
<label for="files">Importer le TFE et les fichiers annexes</label>
|
|
<small>Formats acceptés : PDF, JPG, PNG, MP4, ZIP. Taille max par fichier : 50MB.</small>
|
|
<small>Si vous voulez importer un dossier, créez une archive ZIP.</small>
|
|
<input type="file" id="files" name="files[]" multiple accept=".pdf,.jpg,.jpeg,.png,.mp4,.zip">
|
|
</fieldset>
|
|
|
|
<br>
|
|
<input type="submit" name="go" value="Soumettre mon TFE">
|
|
</form>
|
|
</main>
|
|
|
|
<?php include "inc/footer.php"?>
|