mirror of
https://codeberg.org/PostERG/xamxam.git
synced 2026-08-10 15:21:22 +02:00
- Remove Mo option from duration, keep only pages and minutes - Redesign duration fieldset: separate Pages input + Durée h:m inputs, both can be set together - Fix minutes input visibility: wider inputs (6ch), proper CSS layout - Add has_annexes checkbox to fichiers fragment + DB column + controllers - Display duration on admin backoffice recap page - Display duration on public partage recap page - Update public TFE page for new combined duration format - Migration 041: add duration_pages, duration_minutes, has_annexes columns; migrate data; recreate views
89 lines
3.7 KiB
SQL
89 lines
3.7 KiB
SQL
-- 041_combined_duration.sql
|
|
-- Replace single duration_value/duration_unit with separate pages + minutes fields.
|
|
-- Allows a TFE to have both a page count and a time duration simultaneously.
|
|
|
|
-- Add new columns to theses table
|
|
ALTER TABLE theses ADD COLUMN duration_pages INTEGER;
|
|
ALTER TABLE theses ADD COLUMN duration_minutes INTEGER;
|
|
|
|
-- Add has_annexes flag for optional annexes checkbox
|
|
ALTER TABLE theses ADD COLUMN has_annexes INTEGER NOT NULL DEFAULT 0;
|
|
|
|
-- Migrate existing data:
|
|
-- duration_unit='pages' → duration_pages = duration_value
|
|
-- duration_unit='durée' → duration_minutes = ROUND(duration_value * 60)
|
|
UPDATE theses SET duration_pages = CAST(duration_value AS INTEGER) WHERE duration_unit = 'pages' AND duration_value IS NOT NULL;
|
|
UPDATE theses SET duration_minutes = CAST(ROUND(duration_value * 60) AS INTEGER) WHERE duration_unit = 'durée' AND duration_value IS NOT NULL;
|
|
|
|
-- Drop and recreate views to include the new columns
|
|
DROP VIEW IF EXISTS v_theses_full;
|
|
DROP VIEW IF EXISTS v_theses_public;
|
|
|
|
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_pages,
|
|
t.duration_minutes,
|
|
t.has_annexes,
|
|
at.name as access_type,
|
|
lt.name as license_type,
|
|
t.license_id,
|
|
t.license_custom,
|
|
t.access_type_id,
|
|
t.jury_points,
|
|
t.submitted_at,
|
|
t.defense_date,
|
|
t.published_at,
|
|
t.is_published,
|
|
t.baiu_link,
|
|
t.exemplaire_baiu,
|
|
t.exemplaire_erg,
|
|
t.cc2r,
|
|
t.remarks,
|
|
t.jury_note_added,
|
|
t.contact_visible,
|
|
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;
|