Courseware: Export des TestBlocks nicht möglich
Beschreibung
Ich bin nicht sicher, ob das hier ein BIEST oder TIC ist, jedenfalls ist der TestBlock aktuell nicht sinnvoll exportierbar - er exportiert nur die interne assignment_id
und nichts anderes. Und in der API für die Plugins finde ich auch nichts, was das ermöglichen würde - der Code dafür liegt komplett im Kern (im vuejs-Teil).
Es müßte irgendwie - analog zur Courseware 4 - möglich sein, Inhalte zu exportieren und importieren, die nicht Teil der Payload des Block und auch keine für den Dateibereich gedachten Dateien sind.
Aktuell packt der Export die Payload ein, ohne das Plugin überhaupt irgendwie einzubeziehen. Dito beim Import, da werden dann per preg_replace()
noch die file_ids
im JSON ersetzt - auch das kann das Plugin nicht beeinflussen. Und auch nicht, wo importierte Dateien landen, die sind nach dem Import immer in einem für alle sichtbaren Ordner im Dateibereich der Veranstaltung. Vips verwaltet seine Dateien intern (bei den Aufgaben), und diese dürfen natürlich nicht einfach so sichtbar sein. Außerdem gibt es in Vips bereits eine API, um komplette Aufgabenblätter für den Export als XML zu rendern und wieder zu importieren. In der neuen Courseware kann man sich nur leider nirgendwo in den Export/Import einhängen.
Ideen:
- Ein Weg könnte sein, den
BlockType
zu fragen, was exportiert werden sollte, statt automatisch immer die Payload zu verwenden. Dann müßte der Import aber natürlich auch über denBlockType
geschleust werden. Da beides aber meines Wissens in vue implementiert ist, ist das vermutlich nicht so einfach, es müßte dann auch über die JsonApi ansprechbar sein. - Eigentlich halte ich sowieso für besser, wenn Export und Import nicht in vue passiert, weil das zu sehr vielen Aufrufen (z.T. tausenden) und langen Laufzeiten führt - Jens kann davon berichten. Falls man da dran geht, müßte man aber den gesamten Export und Import noch mal in PHP (neu) schreiben. Beim Kopieren ist das ja z.B. so: Es gibt
copyPayload()
imBlockType
, das man entsprechend überschreiben kann. Dort kopiert Vips z.B. das Aufgabenblatt und liefert dann die Payload mit der neuenassignment_id
zurück. - Eine Alternative wäre, den blockspezifischen Code in der vue-Komponente für den TestBlock unterzubringen. Dann müßte ich die APIs zum Exportieren und Importieren direkt in Vips als REST-API herausreichen (was möglich wäre). Und der vuejs-Code für den Export und Import müßte jeweils über die vue-Komponenten der Blöcke laufen.
Eine weitere Frage, die man dabei im Hinterkopf haben sollte, ist der Umgang mit mehrfach eingebundenen Aufgabenblättern. Falls man diese im Export dupliziert, würden wahrscheinlich auch beim Import mehrere Kopien des gleichen Aufgabenblatts angelegt. Das ist der analoge Fall zu #336 (closed), aber beim Export/Import statt beim Kopieren.
Reproduzierbarkeit
- TestBlock anlegen
- Aufgabenblatt auswählen
- Seite exportieren
Im Export fehlt das Aufgabenblatt komplett.