diff --git a/TODO.md b/TODO.md index 48ed618..88b98a1 100644 --- a/TODO.md +++ b/TODO.md @@ -2,8 +2,10 @@ - [x] Fix #1: TFE publié se dépublie quand on modifie ses données (is_published missing from getThesisRawFields SELECT) - [x] Fix #2: Renommer "Note contextuelle" → "Note contextuelle relative à soutenance" -- [x] Fix #3: Impossible de mettre une majuscule au nom d'étudiant·e (findOrCreateAuthor n'update pas le name) +- [x] Fix #3: Impossible de mettre une majuscule au nom d'étudiant·e — la recherche par nom en SQLite est case-sensitive (BINARY), contournait le UPDATE et tombait dans le fallback email sans updater le nom. Ajout COLLATE NOCASE + UPDATE dans le chemin email. - [x] Fix #4: Décorréler contact interne et contact visible (ajouter colonne contact_visible sur theses) - [x] Fix #5: "Contact public : non" partout, non modifiable, sans impact -- [x] Fix #6: Investiguer "libre → interne" impossible — aucune restriction trouvée dans le code admin, probablement causé par Fix #1 (is_published reset) -- [ ] Commit + jj new +- [x] Fix #6: Investiguer "libre → interne" impossible — aucune restriction trouvée dans le code admin +- [x] Hotfix: contact_visible manquant dans le SQL de updateThesis (l'edit matchait createThesis à la place) +- [x] Fix #7: Options de licence non persistées en edit — HTMX load trigger perdait les valeurs (pas de hidden inputs pour license_id/license_custom/cc2r/want_license dans fieldset-licence-explanation.php) +- [x] Commit + jj new diff --git a/app/src/Database.php b/app/src/Database.php index 5192fdc..62515e2 100644 --- a/app/src/Database.php +++ b/app/src/Database.php @@ -1014,7 +1014,7 @@ class Database /** * Find or create an author */ - public function findOrCreateAuthor($name, $email = null, bool $showContact = false) + public function findOrCreateAuthor($name, $email = null, bool $showContact = false, ?int $idHint = null) { // Normalise CSV artefacts: OUI/NON strings in email column → null if ($email !== null && in_array(strtoupper(trim($email)), ['NON', 'OUI'], true)) { @@ -1023,8 +1023,19 @@ class Database $cleanEmail = ($email !== null && $email !== '') ? $email : null; - // Try to find by name first - $stmt = $this->pdo->prepare('SELECT id, email FROM authors WHERE name = ?'); + // 1. If we have a known ID (edit flow), update directly by ID + if ($idHint !== null) { + $stmt = $this->pdo->prepare('SELECT id FROM authors WHERE id = ?'); + $stmt->execute([$idHint]); + if ($stmt->fetch()) { + $updateStmt = $this->pdo->prepare('UPDATE authors SET name = ?, email = ?, show_contact = ? WHERE id = ?'); + $updateStmt->execute([$name, $cleanEmail, $showContact ? 1 : 0, $idHint]); + return $idHint; + } + } + + // 2. Try to find by name (case-insensitive — SQLite BINARY collation otherwise) + $stmt = $this->pdo->prepare('SELECT id, email FROM authors WHERE name = ? COLLATE NOCASE'); $stmt->execute([$name]); $author = $stmt->fetch(); @@ -1042,16 +1053,19 @@ class Database return $author['id']; } - // If an author with this email already exists (different name), reuse that record. + // 3. If an author with this email already exists (different name), reuse that record. if ($cleanEmail !== null) { - $byEmail = $this->pdo->prepare('SELECT id FROM authors WHERE email = ?'); + $byEmail = $this->pdo->prepare('SELECT id, name FROM authors WHERE email = ?'); $byEmail->execute([$cleanEmail]); $existing = $byEmail->fetch(); if ($existing) { + $updateStmt = $this->pdo->prepare('UPDATE authors SET name = ?, show_contact = ? WHERE id = ?'); + $updateStmt->execute([$name, $showContact ? 1 : 0, $existing['id']]); return $existing['id']; } } + // 4. Create new author $stmt = $this->pdo->prepare('INSERT INTO authors (name, email, show_contact) VALUES (?, ?, ?)'); $stmt->execute([$name, $cleanEmail, $showContact ? 1 : 0]); return $this->pdo->lastInsertId(); @@ -2194,6 +2208,11 @@ class Database */ public function setThesisAuthors(int $thesisId, array $authors): void { + // Fetch existing author IDs before deletion (preserves identity for edit) + $existingStmt = $this->pdo->prepare('SELECT author_id FROM thesis_authors WHERE thesis_id = ? ORDER BY author_order'); + $existingStmt->execute([$thesisId]); + $existingIds = $existingStmt->fetchAll(\PDO::FETCH_COLUMN); + $this->pdo->prepare('DELETE FROM thesis_authors WHERE thesis_id = ?')->execute([$thesisId]); $stmt = $this->pdo->prepare( 'INSERT INTO thesis_authors (thesis_id, author_id, author_order) VALUES (?, ?, ?)' @@ -2204,7 +2223,9 @@ class Database continue; } $showContact = !empty($author['show_contact']); - $authorId = $this->findOrCreateAuthor($name, $author['email'] ?? null, $showContact); + // Pass existing ID by position so findOrCreateAuthor can update directly + $hintId = isset($existingIds[$index]) ? (int)$existingIds[$index] : null; + $authorId = $this->findOrCreateAuthor($name, $author['email'] ?? null, $showContact, $hintId); $stmt->execute([$thesisId, $authorId, (int)$index + 1]); } } diff --git a/app/storage/cache/rate_limit/090552489dbfbc18a303723d31a4cc0b.json b/app/storage/cache/rate_limit/090552489dbfbc18a303723d31a4cc0b.json deleted file mode 100644 index 5005f15..0000000 --- a/app/storage/cache/rate_limit/090552489dbfbc18a303723d31a4cc0b.json +++ /dev/null @@ -1 +0,0 @@ -[1778581846] \ No newline at end of file diff --git a/app/storage/cache/rate_limit/2fc37caeef74db3acae4c9991622d96c.json b/app/storage/cache/rate_limit/2fc37caeef74db3acae4c9991622d96c.json deleted file mode 100644 index 9749a3e..0000000 --- a/app/storage/cache/rate_limit/2fc37caeef74db3acae4c9991622d96c.json +++ /dev/null @@ -1 +0,0 @@ -[1778588121,1778588125,1778588134,1778588162,1778588315] \ No newline at end of file diff --git a/app/storage/cache/rate_limit/88e35ce4c6948145e3b5db4f6373f152.json b/app/storage/cache/rate_limit/88e35ce4c6948145e3b5db4f6373f152.json deleted file mode 100644 index 512d575..0000000 --- a/app/storage/cache/rate_limit/88e35ce4c6948145e3b5db4f6373f152.json +++ /dev/null @@ -1 +0,0 @@ -[1778680536,1778680763] \ No newline at end of file diff --git a/app/storage/cache/rate_limit/ac5da541967d8b07bd0ede8543d30443.json b/app/storage/cache/rate_limit/ac5da541967d8b07bd0ede8543d30443.json deleted file mode 100644 index 5f2cbfa..0000000 --- a/app/storage/cache/rate_limit/ac5da541967d8b07bd0ede8543d30443.json +++ /dev/null @@ -1 +0,0 @@ -[1779201568] \ No newline at end of file diff --git a/app/storage/cache/rate_limit/ad921d60486366258809553a3db49a4a.json b/app/storage/cache/rate_limit/ad921d60486366258809553a3db49a4a.json deleted file mode 100644 index 85fa2e0..0000000 --- a/app/storage/cache/rate_limit/ad921d60486366258809553a3db49a4a.json +++ /dev/null @@ -1 +0,0 @@ -[1779234737] \ No newline at end of file diff --git a/app/storage/cache/rate_limit/d83bead1dc1bde721bbbd233b541b0d9.json b/app/storage/cache/rate_limit/d83bead1dc1bde721bbbd233b541b0d9.json deleted file mode 100644 index c91a4a4..0000000 --- a/app/storage/cache/rate_limit/d83bead1dc1bde721bbbd233b541b0d9.json +++ /dev/null @@ -1 +0,0 @@ -[1778588615] \ No newline at end of file diff --git a/app/storage/cache/rate_limit/e2435c4bba2e615095c145be93913f06.json b/app/storage/cache/rate_limit/e2435c4bba2e615095c145be93913f06.json deleted file mode 100644 index 0da1667..0000000 --- a/app/storage/cache/rate_limit/e2435c4bba2e615095c145be93913f06.json +++ /dev/null @@ -1 +0,0 @@ -[1778588955] \ No newline at end of file diff --git a/app/storage/logs/admin-2026-06-09.log b/app/storage/logs/admin-2026-06-09.log new file mode 100644 index 0000000..2b74a6b --- /dev/null +++ b/app/storage/logs/admin-2026-06-09.log @@ -0,0 +1,7 @@ +{"timestamp":"2026-06-09T10:23:00+00:00","ip":"127.0.0.1","user_agent":"Mozilla/5.0 (X11; Linux x86_64; rv:151.0) Gecko/20100101 Firefox/151.0","resource":"thesis","action":"edit","status":"success","context":{"thesis_id":26,"title":"DepNum"}} +{"timestamp":"2026-06-09T10:30:08+00:00","ip":"127.0.0.1","user_agent":"Mozilla/5.0 (X11; Linux x86_64; rv:151.0) Gecko/20100101 Firefox/151.0","resource":"thesis","action":"edit","status":"success","context":{"thesis_id":26,"title":"DepNum"}} +{"timestamp":"2026-06-09T10:32:39+00:00","ip":"127.0.0.1","user_agent":"Mozilla/5.0 (X11; Linux x86_64; rv:151.0) Gecko/20100101 Firefox/151.0","resource":"thesis","action":"edit","status":"success","context":{"thesis_id":26,"title":"DepNum"}} +{"timestamp":"2026-06-09T10:34:13+00:00","ip":"127.0.0.1","user_agent":"Mozilla/5.0 (X11; Linux x86_64; rv:151.0) Gecko/20100101 Firefox/151.0","resource":"thesis","action":"edit","status":"success","context":{"thesis_id":26,"title":"DepNum"}} +{"timestamp":"2026-06-09T10:34:25+00:00","ip":"127.0.0.1","user_agent":"Mozilla/5.0 (X11; Linux x86_64; rv:151.0) Gecko/20100101 Firefox/151.0","resource":"thesis","action":"edit","status":"success","context":{"thesis_id":26,"title":"DepNum"}} +{"timestamp":"2026-06-09T10:34:45+00:00","ip":"127.0.0.1","user_agent":"Mozilla/5.0 (X11; Linux x86_64; rv:151.0) Gecko/20100101 Firefox/151.0","resource":"thesis","action":"edit","status":"success","context":{"thesis_id":26,"title":"DepNum"}} +{"timestamp":"2026-06-09T10:34:52+00:00","ip":"127.0.0.1","user_agent":"Mozilla/5.0 (X11; Linux x86_64; rv:151.0) Gecko/20100101 Firefox/151.0","resource":"thesis","action":"edit","status":"success","context":{"thesis_id":26,"title":"DepNum"}} diff --git a/app/storage/logs/audit-2026-06-09.log b/app/storage/logs/audit-2026-06-09.log index d6a2da3..aa01c36 100644 --- a/app/storage/logs/audit-2026-06-09.log +++ b/app/storage/logs/audit-2026-06-09.log @@ -1,2 +1,16 @@ {"timestamp":"2026-06-09T10:12:58+00:00","ip":"127.0.0.1","user_agent":"Mozilla/5.0 (X11; Linux x86_64; rv:151.0) Gecko/20100101 Firefox/151.0","actor":"127.0.0.1","action":"UPDATE","table":"theses","record_id":143,"old_data":{"id":143,"identifier":"2025-072","title":"Pourquoi les artistes sont-ils encore sur Instagram alors que j’ai vu une story disant qu’il fallait quitter META","subtitle":null,"year":2025,"is_doctoral":0,"objet":"tfe","orientation_id":6,"ap_program_id":2,"finality_id":3,"synopsis":"Depuis une quinzaine d’années, Instagram s’est imposé comme un acteur central du monde de l’art visuel. Ce qui était un réseau social destiné au partage d’images personnelles est devenu, pour toute une génération d’artistes, un lieu incontournable de visibilité, de circulation symbolique, de reconnaissance professionnelle. En soi, un dispositif de légitimation culturelle. Il ne s’agit plus simplement d’un outil de diffusion parmi d’autres, mais d’un environnement structurant, un écosystème dans lequel les artistes évoluent, négocient leurs existences publiques, et « construisent » leurs carrières. À la différence des lieux d’exposition traditionnels (galeries, musées), Instagram est à la fois global, permanent, et massivement fréquenté. Il est devenu, pour reprendre les termes de la théorie critique, un milieu total, un espace dans lequel les frontières entre création, communication, autopromotion, performance de soi et marché sont brouillées, confondues, voire rendues indissociables.","context_note":null,"remarks":null,"access_type_id":2,"license_id":null,"jury_points":17.5,"jury_note_added":0,"submitted_at":"2026-06-08 08:33:14","defense_date":null,"published_at":null,"is_published":1,"baiu_link":null,"created_at":"2026-06-08 08:33:14","updated_at":"2026-06-08 08:33:36","exemplaire_baiu":0,"exemplaire_erg":0,"cc2r":0,"license_custom":null,"deleted_at":null,"contact_visible":null}} {"timestamp":"2026-06-09T10:13:23+00:00","ip":"127.0.0.1","user_agent":"Mozilla/5.0 (X11; Linux x86_64; rv:151.0) Gecko/20100101 Firefox/151.0","actor":"127.0.0.1","action":"UPDATE","table":"theses","record_id":143,"old_data":{"id":143,"identifier":"2025-072","title":"Pourquoi les artistes sont-ils encore sur Instagram alors que j’ai vu une story disant qu’il fallait quitter META","subtitle":null,"year":2025,"is_doctoral":0,"objet":"tfe","orientation_id":6,"ap_program_id":2,"finality_id":3,"synopsis":"Depuis une quinzaine d’années, Instagram s’est imposé comme un acteur central du monde de l’art visuel. Ce qui était un réseau social destiné au partage d’images personnelles est devenu, pour toute une génération d’artistes, un lieu incontournable de visibilité, de circulation symbolique, de reconnaissance professionnelle. En soi, un dispositif de légitimation culturelle. Il ne s’agit plus simplement d’un outil de diffusion parmi d’autres, mais d’un environnement structurant, un écosystème dans lequel les artistes évoluent, négocient leurs existences publiques, et « construisent » leurs carrières. À la différence des lieux d’exposition traditionnels (galeries, musées), Instagram est à la fois global, permanent, et massivement fréquenté. Il est devenu, pour reprendre les termes de la théorie critique, un milieu total, un espace dans lequel les frontières entre création, communication, autopromotion, performance de soi et marché sont brouillées, confondues, voire rendues indissociables.","context_note":null,"remarks":null,"access_type_id":2,"license_id":null,"jury_points":17.5,"jury_note_added":0,"submitted_at":"2026-06-08 08:33:14","defense_date":null,"published_at":null,"is_published":1,"baiu_link":null,"created_at":"2026-06-08 08:33:14","updated_at":"2026-06-08 08:33:36","exemplaire_baiu":0,"exemplaire_erg":0,"cc2r":0,"license_custom":null,"deleted_at":null,"contact_visible":null}} +{"timestamp":"2026-06-09T10:23:00+00:00","ip":"127.0.0.1","user_agent":"Mozilla/5.0 (X11; Linux x86_64; rv:151.0) Gecko/20100101 Firefox/151.0","actor":"127.0.0.1","action":"UPDATE","table":"theses","record_id":26,"old_data":{"id":26,"identifier":"2024-026","title":"DepNum","subtitle":null,"year":2024,"is_doctoral":0,"objet":"tfe","orientation_id":1,"ap_program_id":3,"finality_id":3,"synopsis":"Mon mémoire de Master à l'ERG est un blog autobiographique sur ma dépendance numérique. Chaque post mêle vécu personnel, questions et recherche. J'explore les dynamiques complexes de notre dépendance collective aux technologies numériques, en croisant expérience individuelle et réflexion systémique.","context_note":null,"remarks":null,"access_type_id":2,"license_id":4,"jury_points":17.5,"jury_note_added":0,"submitted_at":"2026-06-08 08:33:14","defense_date":null,"published_at":null,"is_published":1,"baiu_link":"https://ils.bib.uclouvain.be/global/documents/3830452","created_at":"2026-06-08 08:33:14","updated_at":"2026-06-08 10:04:50","exemplaire_baiu":0,"exemplaire_erg":0,"cc2r":1,"license_custom":"GPL-v3-LATER","deleted_at":null,"contact_visible":null}} +{"timestamp":"2026-06-09T10:23:00+00:00","ip":"127.0.0.1","user_agent":"Mozilla/5.0 (X11; Linux x86_64; rv:151.0) Gecko/20100101 Firefox/151.0","actor":"127.0.0.1","action":"DELETE","table":"thesis_files","record_id":1,"old_data":{"id":1,"thesis_id":26,"file_type":"website","file_path":"https://depnum.happyngreen.fr/","file_name":"depnum.happyngreen.fr","file_size":0,"mime_type":"text/html","description":null,"uploaded_at":"2026-06-08 10:04:25","sort_order":1,"display_label":null,"file_hash":null}} +{"timestamp":"2026-06-09T10:30:08+00:00","ip":"127.0.0.1","user_agent":"Mozilla/5.0 (X11; Linux x86_64; rv:151.0) Gecko/20100101 Firefox/151.0","actor":"127.0.0.1","action":"UPDATE","table":"theses","record_id":26,"old_data":{"id":26,"identifier":"2024-026","title":"DepNum","subtitle":null,"year":2024,"is_doctoral":0,"objet":"tfe","orientation_id":1,"ap_program_id":3,"finality_id":3,"synopsis":"Mon mémoire de Master à l'ERG est un blog autobiographique sur ma dépendance numérique. Chaque post mêle vécu personnel, questions et recherche. J'explore les dynamiques complexes de notre dépendance collective aux technologies numériques, en croisant expérience individuelle et réflexion systémique.","context_note":"blposqujdfmlkqshjd mfglkqjhzmdslkf qsdmlkfj mlqskjdf mqskdjf mlqksdjf mlqksdjf mlqksjd fmlkjqsd","remarks":null,"access_type_id":2,"license_id":null,"jury_points":17.5,"jury_note_added":0,"submitted_at":"2026-06-08 08:33:14","defense_date":null,"published_at":null,"is_published":1,"baiu_link":"https://ils.bib.uclouvain.be/global/documents/3830452","created_at":"2026-06-08 08:33:14","updated_at":"2026-06-09 10:23:00","exemplaire_baiu":0,"exemplaire_erg":0,"cc2r":0,"license_custom":null,"deleted_at":null,"contact_visible":null}} +{"timestamp":"2026-06-09T10:30:08+00:00","ip":"127.0.0.1","user_agent":"Mozilla/5.0 (X11; Linux x86_64; rv:151.0) Gecko/20100101 Firefox/151.0","actor":"127.0.0.1","action":"DELETE","table":"thesis_files","record_id":2,"old_data":{"id":2,"thesis_id":26,"file_type":"website","file_path":"https://depnum.happyngreen.fr/","file_name":"depnum.happyngreen.fr","file_size":0,"mime_type":"text/html","description":null,"uploaded_at":"2026-06-09 10:23:00","sort_order":1,"display_label":null,"file_hash":null}} +{"timestamp":"2026-06-09T10:32:39+00:00","ip":"127.0.0.1","user_agent":"Mozilla/5.0 (X11; Linux x86_64; rv:151.0) Gecko/20100101 Firefox/151.0","actor":"127.0.0.1","action":"UPDATE","table":"theses","record_id":26,"old_data":{"id":26,"identifier":"2024-026","title":"DepNum","subtitle":null,"year":2024,"is_doctoral":0,"objet":"tfe","orientation_id":1,"ap_program_id":3,"finality_id":3,"synopsis":"Mon mémoire de Master à l'ERG est un blog autobiographique sur ma dépendance numérique. Chaque post mêle vécu personnel, questions et recherche. J'explore les dynamiques complexes de notre dépendance collective aux technologies numériques, en croisant expérience individuelle et réflexion systémique.","context_note":"blposqujdfmlkqshjd mfglkqjhzmdslkf qsdmlkfj mlqskjdf mqskdjf mlqksdjf mlqksdjf mlqksjd fmlkjqsd","remarks":null,"access_type_id":2,"license_id":4,"jury_points":17.5,"jury_note_added":0,"submitted_at":"2026-06-08 08:33:14","defense_date":null,"published_at":null,"is_published":1,"baiu_link":"https://ils.bib.uclouvain.be/global/documents/3830452","created_at":"2026-06-08 08:33:14","updated_at":"2026-06-09 10:30:08","exemplaire_baiu":0,"exemplaire_erg":0,"cc2r":1,"license_custom":null,"deleted_at":null,"contact_visible":null}} +{"timestamp":"2026-06-09T10:32:39+00:00","ip":"127.0.0.1","user_agent":"Mozilla/5.0 (X11; Linux x86_64; rv:151.0) Gecko/20100101 Firefox/151.0","actor":"127.0.0.1","action":"DELETE","table":"thesis_files","record_id":3,"old_data":{"id":3,"thesis_id":26,"file_type":"website","file_path":"https://depnum.happyngreen.fr/","file_name":"depnum.happyngreen.fr","file_size":0,"mime_type":"text/html","description":null,"uploaded_at":"2026-06-09 10:30:08","sort_order":1,"display_label":null,"file_hash":null}} +{"timestamp":"2026-06-09T10:34:13+00:00","ip":"127.0.0.1","user_agent":"Mozilla/5.0 (X11; Linux x86_64; rv:151.0) Gecko/20100101 Firefox/151.0","actor":"127.0.0.1","action":"UPDATE","table":"theses","record_id":26,"old_data":{"id":26,"identifier":"2024-026","title":"DepNum","subtitle":null,"year":2024,"is_doctoral":0,"objet":"tfe","orientation_id":1,"ap_program_id":3,"finality_id":3,"synopsis":"Mon mémoire de Master à l'ERG est un blog autobiographique sur ma dépendance numérique. Chaque post mêle vécu personnel, questions et recherche. J'explore les dynamiques complexes de notre dépendance collective aux technologies numériques, en croisant expérience individuelle et réflexion systémique.","context_note":"blposqujdfmlkqshjd mfglkqjhzmdslkf qsdmlkfj mlqskjdf mqskdjf mlqksdjf mlqksdjf mlqksjd fmlkjqsd","remarks":null,"access_type_id":2,"license_id":null,"jury_points":17.5,"jury_note_added":0,"submitted_at":"2026-06-08 08:33:14","defense_date":null,"published_at":null,"is_published":1,"baiu_link":"https://ils.bib.uclouvain.be/global/documents/3830452","created_at":"2026-06-08 08:33:14","updated_at":"2026-06-09 10:32:39","exemplaire_baiu":0,"exemplaire_erg":0,"cc2r":0,"license_custom":null,"deleted_at":null,"contact_visible":null}} +{"timestamp":"2026-06-09T10:34:13+00:00","ip":"127.0.0.1","user_agent":"Mozilla/5.0 (X11; Linux x86_64; rv:151.0) Gecko/20100101 Firefox/151.0","actor":"127.0.0.1","action":"DELETE","table":"thesis_files","record_id":4,"old_data":{"id":4,"thesis_id":26,"file_type":"website","file_path":"https://depnum.happyngreen.fr/","file_name":"depnum.happyngreen.fr","file_size":0,"mime_type":"text/html","description":null,"uploaded_at":"2026-06-09 10:32:39","sort_order":1,"display_label":null,"file_hash":null}} +{"timestamp":"2026-06-09T10:34:25+00:00","ip":"127.0.0.1","user_agent":"Mozilla/5.0 (X11; Linux x86_64; rv:151.0) Gecko/20100101 Firefox/151.0","actor":"127.0.0.1","action":"UPDATE","table":"theses","record_id":26,"old_data":{"id":26,"identifier":"2024-026","title":"DepNum","subtitle":null,"year":2024,"is_doctoral":0,"objet":"tfe","orientation_id":1,"ap_program_id":3,"finality_id":3,"synopsis":"Mon mémoire de Master à l'ERG est un blog autobiographique sur ma dépendance numérique. Chaque post mêle vécu personnel, questions et recherche. J'explore les dynamiques complexes de notre dépendance collective aux technologies numériques, en croisant expérience individuelle et réflexion systémique. JLKJLKJLKJ","context_note":"blposqujdfmlkqshjd mfglkqjhzmdslkf qsdmlkfj mlqskjdf mqskdjf mlqksdjf mlqksdjf mlqksjd fmlkjqsd","remarks":null,"access_type_id":2,"license_id":null,"jury_points":17.5,"jury_note_added":0,"submitted_at":"2026-06-08 08:33:14","defense_date":null,"published_at":null,"is_published":1,"baiu_link":"https://ils.bib.uclouvain.be/global/documents/3830452","created_at":"2026-06-08 08:33:14","updated_at":"2026-06-09 10:34:13","exemplaire_baiu":0,"exemplaire_erg":0,"cc2r":0,"license_custom":null,"deleted_at":null,"contact_visible":null}} +{"timestamp":"2026-06-09T10:34:25+00:00","ip":"127.0.0.1","user_agent":"Mozilla/5.0 (X11; Linux x86_64; rv:151.0) Gecko/20100101 Firefox/151.0","actor":"127.0.0.1","action":"DELETE","table":"thesis_files","record_id":5,"old_data":{"id":5,"thesis_id":26,"file_type":"website","file_path":"https://depnum.happyngreen.fr/","file_name":"depnum.happyngreen.fr","file_size":0,"mime_type":"text/html","description":null,"uploaded_at":"2026-06-09 10:34:13","sort_order":1,"display_label":null,"file_hash":null}} +{"timestamp":"2026-06-09T10:34:45+00:00","ip":"127.0.0.1","user_agent":"Mozilla/5.0 (X11; Linux x86_64; rv:151.0) Gecko/20100101 Firefox/151.0","actor":"127.0.0.1","action":"UPDATE","table":"theses","record_id":26,"old_data":{"id":26,"identifier":"2024-026","title":"DepNum","subtitle":null,"year":2024,"is_doctoral":0,"objet":"tfe","orientation_id":1,"ap_program_id":3,"finality_id":3,"synopsis":"Mon mémoire de Master à l'ERG est un blog autobiographique sur ma dépendance numérique. Chaque post mêle vécu personnel, questions et recherche. J'explore les dynamiques complexes de notre dépendance collective aux technologies numériques, en croisant expérience individuelle et réflexion systémique. JLKJLKJLKJ","context_note":"blposqujdfmlkqshjd mfglkqjhzmdslkf qsdmlkfj mlqskjdf mqskdjf mlqksdjf mlqksdjf mlqksjd fmlkjqsd","remarks":null,"access_type_id":2,"license_id":null,"jury_points":17.5,"jury_note_added":0,"submitted_at":"2026-06-08 08:33:14","defense_date":null,"published_at":null,"is_published":1,"baiu_link":"https://ils.bib.uclouvain.be/global/documents/3830452","created_at":"2026-06-08 08:33:14","updated_at":"2026-06-09 10:34:25","exemplaire_baiu":0,"exemplaire_erg":0,"cc2r":0,"license_custom":null,"deleted_at":null,"contact_visible":null}} +{"timestamp":"2026-06-09T10:34:45+00:00","ip":"127.0.0.1","user_agent":"Mozilla/5.0 (X11; Linux x86_64; rv:151.0) Gecko/20100101 Firefox/151.0","actor":"127.0.0.1","action":"DELETE","table":"thesis_files","record_id":6,"old_data":{"id":6,"thesis_id":26,"file_type":"website","file_path":"https://depnum.happyngreen.fr/","file_name":"depnum.happyngreen.fr","file_size":0,"mime_type":"text/html","description":null,"uploaded_at":"2026-06-09 10:34:25","sort_order":1,"display_label":null,"file_hash":null}} +{"timestamp":"2026-06-09T10:34:52+00:00","ip":"127.0.0.1","user_agent":"Mozilla/5.0 (X11; Linux x86_64; rv:151.0) Gecko/20100101 Firefox/151.0","actor":"127.0.0.1","action":"UPDATE","table":"theses","record_id":26,"old_data":{"id":26,"identifier":"2024-026","title":"DepNum","subtitle":null,"year":2024,"is_doctoral":0,"objet":"tfe","orientation_id":1,"ap_program_id":3,"finality_id":3,"synopsis":"Mon mémoire de Master à l'ERG est un blog autobiographique sur ma dépendance numérique. Chaque post mêle vécu personnel, questions et recherche. J'explore les dynamiques complexes de notre dépendance collective aux technologies numériques, en croisant expérience individuelle et réflexion systémique. JLKJLKJLKJ","context_note":"blposqujdfmlkqshjd mfglkqjhzmdslkf qsdmlkfj mlqskjdf mqskdjf mlqksdjf mlqksdjf mlqksjd fmlkjqsd","remarks":null,"access_type_id":2,"license_id":3,"jury_points":17.5,"jury_note_added":0,"submitted_at":"2026-06-08 08:33:14","defense_date":null,"published_at":null,"is_published":1,"baiu_link":"https://ils.bib.uclouvain.be/global/documents/3830452","created_at":"2026-06-08 08:33:14","updated_at":"2026-06-09 10:34:45","exemplaire_baiu":0,"exemplaire_erg":0,"cc2r":1,"license_custom":null,"deleted_at":null,"contact_visible":null}} +{"timestamp":"2026-06-09T10:34:52+00:00","ip":"127.0.0.1","user_agent":"Mozilla/5.0 (X11; Linux x86_64; rv:151.0) Gecko/20100101 Firefox/151.0","actor":"127.0.0.1","action":"DELETE","table":"thesis_files","record_id":7,"old_data":{"id":7,"thesis_id":26,"file_type":"website","file_path":"https://depnum.happyngreen.fr/","file_name":"depnum.happyngreen.fr","file_size":0,"mime_type":"text/html","description":null,"uploaded_at":"2026-06-09 10:34:45","sort_order":1,"display_label":null,"file_hash":null}} diff --git a/app/templates/partials/form/fieldset-licence-explanation.php b/app/templates/partials/form/fieldset-licence-explanation.php index 5397f1e..bcc6dcd 100644 --- a/app/templates/partials/form/fieldset-licence-explanation.php +++ b/app/templates/partials/form/fieldset-licence-explanation.php @@ -119,6 +119,15 @@ $adminMode = $adminMode ?? false;
L'auteur·ice peut, à tout moment, décider de restreindre son propre choix. Iel ne peut par contre pas l'ouvrir.
+ + + + + + +