-- Test-User für V2-Plattform-Test (LOKAL). -- Idempotent: nutzt INSERT IGNORE und alte Inserts werden bei zweitem Lauf einfach übersprungen. -- -- Lehrperson: username "v2admin" email "v2admin@local" password "geheim" is_admin=1 -- Klasse: name "V2-Demo 1A" join_code "V2DEMO" -- Schüler*innen in V2-Demo 1A: -- lina / password "kind" / avatar fuchs-explorer -- yusuf / password "kind" / avatar eule-prof / easy_language=1 -- sofia / password "kind" / avatar astronaut / nachteilsausgleich=1 + voll-A11y -- -- Passwort-Hashes wurden mit PHP password_hash(..., PASSWORD_DEFAULT) generiert -- am 2026-05-18. Bcrypt — niemand sollte sie auf Prod kopieren. INSERT IGNORE INTO teachers (username, email, password, display_name, school_name, is_admin) VALUES ( 'v2admin', 'v2admin@local', '$2y$10$ilqIFLGZvvjQIi9Y8/lXIOuO6.AlucfOFOSCr.hosm0sb/qZ0kweG', 'V2 Admin', 'Lokale V2-Test-Schule', 1 ); INSERT IGNORE INTO classes (teacher_id, name, school_year, join_code) SELECT id, 'V2-Demo 1A', '2025/26', 'V2DEMO' FROM teachers WHERE username = 'v2admin'; -- Schüler*innen — gleicher Passwort-Hash für alle drei INSERT IGNORE INTO students (class_id, username, password, display_name, avatar_slug, easy_language) SELECT c.id, 'lina', '$2y$10$5zP6BcyoCDzXQBfjZ01WCOtfYIUh6TKeuz5Fe3Sl45xAEJYfjwuo.', 'Lina', 'fuchs-explorer', 0 FROM classes c WHERE c.join_code = 'V2DEMO'; INSERT IGNORE INTO students (class_id, username, password, display_name, avatar_slug, easy_language) SELECT c.id, 'yusuf', '$2y$10$5zP6BcyoCDzXQBfjZ01WCOtfYIUh6TKeuz5Fe3Sl45xAEJYfjwuo.', 'Yusuf', 'eule-prof', 1 FROM classes c WHERE c.join_code = 'V2DEMO'; INSERT IGNORE INTO students (class_id, username, password, display_name, avatar_slug, easy_language, high_contrast, reduced_motion, screen_reader, nachteilsausgleich, text_scale) SELECT c.id, 'sofia', '$2y$10$5zP6BcyoCDzXQBfjZ01WCOtfYIUh6TKeuz5Fe3Sl45xAEJYfjwuo.', 'Sofia', 'astronaut', 0, 1, 1, 1, 1, 'large' FROM classes c WHERE c.join_code = 'V2DEMO'; -- Beispiel-Modul-Registrierung (damit Cockpit nicht leer ist) INSERT IGNORE INTO module_info_v2 (slug, display_name, display_name_easy, version, spec_version, icon, short_description, short_description_easy, long_description, long_description_easy, estimated_duration_min, entry_url, maintainer_instance, status) VALUES ( 'hallo-welt', 'Hallo Welt', 'Erste Aufgabe', '1.0.0', '1.0', '👋', 'Beispiel-Modul: zeigt wie ein V2-Modul die Spec erfüllt.', 'Ein erstes Beispiel zum Anschauen.', 'Mini-Modul mit drei Schritten: Begrüßung, eine Multiple-Choice-Frage, Geschafft-Screen.', 'Eine kleine Aufgabe zum Schauen.', 2, '/v2beta/sims/hallo-welt/public/game.html', 'atlas', 'stable' ); INSERT IGNORE INTO module_levels_v2 (module_slug, level_id, label, label_easy, display_order) VALUES ('hallo-welt', 'L1', 'Einsteiger', 'Leicht', 0); INSERT IGNORE INTO module_milestones_v2 (module_slug, milestone_id, label, display_order) VALUES ('hallo-welt', 'welcome-shown', 'Begrüßung gesehen', 0), ('hallo-welt', 'question-answered', 'Frage beantwortet', 1), ('hallo-welt', 'module-completed', 'Modul abgeschlossen', 2); -- V1-Freigabe in class_modules: damit das Modul im freien Modus auftaucht. -- Wenn class_modules-Tabelle nicht existiert, ignoriert MySQL den Insert-Fehler nicht selber — -- deshalb in try/catch-Manier separat ausführen (siehe Skript-Aufruf). INSERT IGNORE INTO class_modules (class_id, module_id, enabled) SELECT c.id, 'hallo-welt', 1 FROM classes c WHERE c.join_code = 'V2DEMO';