mirror of
https://codeberg.org/PostERG/xamxam.git
synced 2026-06-25 16:19:19 +02:00
Admin mobile block: fix inline style beating media query
This commit is contained in:
75
app/migrations/applied/023b_rename_cc4r_to_cc2r.sql
Normal file
75
app/migrations/applied/023b_rename_cc4r_to_cc2r.sql
Normal file
@@ -0,0 +1,75 @@
|
||||
-- Rename cc4r column to cc2r (fix pre-existing naming inconsistency)
|
||||
-- Must run before 024_remove_duration_size_fields.sql which references cc2r
|
||||
|
||||
ALTER TABLE theses RENAME COLUMN cc4r TO cc2r;
|
||||
|
||||
-- Rebuild views with the new column name
|
||||
DROP VIEW IF EXISTS v_theses_public;
|
||||
DROP VIEW IF EXISTS v_theses_full;
|
||||
|
||||
CREATE VIEW IF NOT EXISTS v_theses_full AS
|
||||
SELECT
|
||||
t.id,
|
||||
t.identifier,
|
||||
t.title,
|
||||
t.subtitle,
|
||||
t.year,
|
||||
t.is_doctoral,
|
||||
t.objet,
|
||||
o.name as orientation,
|
||||
ap.name as ap_program,
|
||||
ft.name as finality_type,
|
||||
t.synopsis,
|
||||
t.context_note,
|
||||
t.duration_minutes,
|
||||
t.duration_pages,
|
||||
t.file_size_info,
|
||||
at.name as access_type,
|
||||
lt.name as license_type,
|
||||
t.license_id,
|
||||
t.access_type_id,
|
||||
t.jury_points,
|
||||
t.submitted_at,
|
||||
t.defense_date,
|
||||
t.published_at,
|
||||
t.is_published,
|
||||
t.baiu_link,
|
||||
t.banner_path,
|
||||
t.exemplaire_baiu,
|
||||
t.exemplaire_erg,
|
||||
t.cc2r,
|
||||
t.remarks,
|
||||
t.jury_note_added,
|
||||
GROUP_CONCAT(DISTINCT a.name ORDER BY a.name ASC) as authors,
|
||||
GROUP_CONCAT(DISTINCT s.name) as supervisors,
|
||||
GROUP_CONCAT(DISTINCT CASE WHEN ts.role = 'president' THEN s.name END) as jury_president,
|
||||
GROUP_CONCAT(DISTINCT CASE WHEN ts.role = 'promoteur' AND ts.is_ulb = 0 THEN s.name END) as jury_promoteurs,
|
||||
GROUP_CONCAT(DISTINCT CASE WHEN ts.role = 'promoteur' AND ts.is_ulb = 1 THEN s.name END) as jury_promoteurs_ulb,
|
||||
GROUP_CONCAT(DISTINCT CASE WHEN ts.role = 'lecteur' AND ts.is_external = 0 THEN s.name END) as jury_lecteurs_internes,
|
||||
GROUP_CONCAT(DISTINCT CASE WHEN ts.role = 'lecteur' AND ts.is_external = 1 THEN s.name END) as jury_lecteurs_externes,
|
||||
GROUP_CONCAT(DISTINCT l.name) as languages,
|
||||
GROUP_CONCAT(DISTINCT fmt.name) as formats,
|
||||
GROUP_CONCAT(DISTINCT tg.name) as keywords,
|
||||
(SELECT a2.email FROM authors a2 JOIN thesis_authors ta2 ON a2.id = ta2.author_id WHERE ta2.thesis_id = t.id ORDER BY ta2.author_order LIMIT 1) as author_email,
|
||||
(SELECT a2.show_contact FROM authors a2 JOIN thesis_authors ta2 ON a2.id = ta2.author_id WHERE ta2.thesis_id = t.id ORDER BY ta2.author_order LIMIT 1) as author_show_contact
|
||||
FROM theses t
|
||||
LEFT JOIN orientations o ON t.orientation_id = o.id
|
||||
LEFT JOIN ap_programs ap ON t.ap_program_id = ap.id
|
||||
LEFT JOIN finality_types ft ON t.finality_id = ft.id
|
||||
LEFT JOIN access_types at ON t.access_type_id = at.id
|
||||
LEFT JOIN license_types lt ON t.license_id = lt.id
|
||||
LEFT JOIN thesis_authors ta ON t.id = ta.thesis_id
|
||||
LEFT JOIN authors a ON ta.author_id = a.id
|
||||
LEFT JOIN thesis_supervisors ts ON t.id = ts.thesis_id
|
||||
LEFT JOIN supervisors s ON ts.supervisor_id = s.id
|
||||
LEFT JOIN thesis_languages tl ON t.id = tl.thesis_id
|
||||
LEFT JOIN languages l ON tl.language_id = l.id
|
||||
LEFT JOIN thesis_formats tf ON t.id = tf.thesis_id
|
||||
LEFT JOIN format_types fmt ON tf.format_id = fmt.id
|
||||
LEFT JOIN thesis_tags tt ON t.id = tt.thesis_id
|
||||
LEFT JOIN tags tg ON tt.tag_id = tg.id
|
||||
GROUP BY t.id;
|
||||
|
||||
CREATE VIEW IF NOT EXISTS v_theses_public AS
|
||||
SELECT * FROM v_theses_full
|
||||
WHERE is_published = 1;
|
||||
@@ -77,8 +77,9 @@ foreach ($files as $name => $file) {
|
||||
$pdo->exec($stmt . ';');
|
||||
} catch (PDOException $e) {
|
||||
$msg = $e->getMessage();
|
||||
if (stripos($msg, 'duplicate column name') !== false) {
|
||||
echo " Skipping (column exists): " . substr($stmt, 0, 60) . "...\n";
|
||||
if (stripos($msg, 'duplicate column name') !== false
|
||||
|| stripos($msg, 'no such column') !== false) {
|
||||
echo " Skipping (already applied): " . substr($stmt, 0, 60) . "...\n";
|
||||
continue;
|
||||
}
|
||||
$errors[] = $msg;
|
||||
|
||||
@@ -296,7 +296,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['csv_file'])) {
|
||||
synopsis, context_note, remarks,
|
||||
jury_points, baiu_link,
|
||||
access_type_id, is_published, submitted_at
|
||||
) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,1,CURRENT_TIMESTAMP)
|
||||
) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,0,CURRENT_TIMESTAMP)
|
||||
");
|
||||
$s->execute([
|
||||
!empty($identifier) ? $identifier : null, $title,
|
||||
|
||||
@@ -349,8 +349,8 @@
|
||||
padding: var(--space-3xs);
|
||||
}
|
||||
|
||||
.admin-body main > table td.admin-ap-col,
|
||||
.admin-body main > table th.admin-ap-col {
|
||||
td.admin-ap-col,
|
||||
th.admin-ap-col {
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
@@ -1898,3 +1898,48 @@
|
||||
.fhb-inline-form {
|
||||
margin-top: var(--space-xs);
|
||||
}
|
||||
|
||||
/* ── Mobile: admin unavailable ─────────────────────────────────────────── */
|
||||
.admin-mobile-block {
|
||||
display: none;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 640px) {
|
||||
.admin-body header {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.admin-body main {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.admin-mobile-block {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
height: 100vh;
|
||||
padding: var(--space-l);
|
||||
text-align: center;
|
||||
color: var(--text-secondary);
|
||||
}
|
||||
|
||||
.admin-mobile-block svg {
|
||||
width: 48px;
|
||||
height: 48px;
|
||||
fill: var(--text-tertiary);
|
||||
margin-bottom: var(--space-m);
|
||||
}
|
||||
|
||||
.admin-mobile-block h2 {
|
||||
font-size: var(--step-0);
|
||||
font-weight: 600;
|
||||
color: var(--text-primary);
|
||||
margin: 0 0 var(--space-xs);
|
||||
}
|
||||
|
||||
.admin-mobile-block p {
|
||||
font-size: var(--step--1);
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -196,9 +196,9 @@ class ThesisEditController
|
||||
'title' => trim($post['titre'] ?? ''),
|
||||
'subtitle' => trim($post['subtitle'] ?? ''),
|
||||
'year' => intval($post['année'] ?? 0),
|
||||
'orientation_id' => intval($post['orientation'] ?? 0),
|
||||
'ap_program_id' => intval($post['ap'] ?? 0),
|
||||
'finality_id' => intval($post['finality'] ?? 0),
|
||||
'orientation_id' => ($v = intval($post['orientation'] ?? 0)) > 0 ? $v : null,
|
||||
'ap_program_id' => ($v = intval($post['ap'] ?? 0)) > 0 ? $v : null,
|
||||
'finality_id' => ($v = intval($post['finality'] ?? 0)) > 0 ? $v : null,
|
||||
'synopsis' => trim($post['synopsis'] ?? ''),
|
||||
'context_note' => trim($post['context_note'] ?? ''),
|
||||
'baiu_link' => trim($post['lien'] ?? ''),
|
||||
|
||||
@@ -1744,9 +1744,9 @@ class Database
|
||||
$data['title'],
|
||||
!empty($data['subtitle']) ? $data['subtitle'] : null,
|
||||
(int)$data['year'],
|
||||
(int)$data['orientation_id'],
|
||||
(int)$data['ap_program_id'],
|
||||
(int)$data['finality_id'],
|
||||
($data['orientation_id'] ?? null) ? (int)$data['orientation_id'] : null,
|
||||
($data['ap_program_id'] ?? null) ? (int)$data['ap_program_id'] : null,
|
||||
($data['finality_id'] ?? null) ? (int)$data['finality_id'] : null,
|
||||
$data['synopsis'],
|
||||
!empty($data['context_note']) ? $data['context_note'] : null,
|
||||
!empty($data['baiu_link']) ? $data['baiu_link'] : null,
|
||||
|
||||
@@ -45,6 +45,10 @@
|
||||
$linkName = $link['name'] ?? '';
|
||||
$linkExpiresVal = $link['expires_at'] ? date('Y-m-d\TH:i', strtotime($link['expires_at'])) : '';
|
||||
$linkLockedYear = $link['locked_year'] ?? null;
|
||||
%%%%%%% diff from: somsyvxz 249f7943 "Bulk bar anti-shift, tags icons, AP no-wrap, credits reorder" (rebased revision)
|
||||
\\\\\\\ to: unnnvyqs 357a2fff "Admin mobile block: fix inline style beating media query" (rebased revision)
|
||||
+ $linkName = $link['name'] ?? '';
|
||||
+ $linkExpiresVal = $link['expires_at'] ? date('Y-m-d\TH:i', strtotime($link['expires_at'])) : '';
|
||||
?>
|
||||
<tr class="admin-table-row" onclick="event.stopPropagation(); window.open('/partage/<?= urlencode($link['slug']) ?>', '_blank')" style="cursor:pointer">
|
||||
<td><?= htmlspecialchars($linkName ?: '—') ?></td>
|
||||
|
||||
@@ -82,6 +82,14 @@ $_thesisId = $_GET['id'] ?? null;
|
||||
|
||||
</header>
|
||||
|
||||
<?php if ($_isAdmin): ?>
|
||||
<div class="admin-mobile-block">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 256" aria-hidden="true"><rect width="256" height="256" fill="none"/><rect x="24" y="56" width="208" height="144" rx="16" fill="none" stroke="currentColor" stroke-width="16" stroke-linecap="round" stroke-linejoin="round"/><line x1="24" y1="168" x2="104" y2="88" fill="none" stroke="currentColor" stroke-width="16" stroke-linecap="round" stroke-linejoin="round"/><line x1="152" y1="168" x2="232" y2="88" fill="none" stroke="currentColor" stroke-width="16" stroke-linecap="round" stroke-linejoin="round"/></svg>
|
||||
<h2>Section administrateur</h2>
|
||||
<p>L'administration n'est pas accessible sur mobile. Veuillez utiliser un ordinateur.</p>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if (!$_isAdmin): ?>
|
||||
<?php
|
||||
// Search bar — public section only (rendered below header for equal height)
|
||||
|
||||
Reference in New Issue
Block a user