Liebes SoSci Support Team,
für meinen Fragebogen möchte ich gerne eine Zeitbeschränkung für einen Aufgabenblock meines Fragebogens über mehrere Seiten einbauen.
Insgesamt sind 5 Seiten meines Fragebogens von der gewollten Zeitbeschränkung betroffen.
Nach Ablauf der Zeit hätte ich gerne, dass die Teilnehmer die Aufgaben nicht mehr weiterbearbeiten können, sondern automatisch auf eine andere Seite weitergeleitet werden, um den nächsten Aufgabenblock zu bearbeiten.
Dabei sollten sie allerdings die Möglichkeit haben auch schon vor Ablauf der Zeit zu dem besagten Aufgabenblock springen zu können, da ich die Zeitbeschränkung relativ großzügig angesetzt habe (der weiter Knopf sollte also nicht versteckt werden).
Orientiert habe ich mich dabei an folgendem Link:
https://www.soscisurvey.de/help/doku.php/de:create:timer-countdown
Deswegen habe ich zunächst wie dort beschrieben folgenden PHP Code auf die Seite eingefügt, auf der die Zeitbeschränkung starten soll:
// Ablauf der Zeit als Variable $timeout speichern
if (!isset($timeout)) {
$timeout = strtotime('+720 seconds');
registerVariable($timeout);
}
Abgeändert habe ich hier die Zeile von $timeout = strtotime('+30 seconds'); auf
$timeout = strtotime('+720 seconds');
da die Teilnehmer 12 Minuten haben sollen, um die Aufgaben zu bearbeiten.
Als nächstes habe ich wie auf der verlinkten Seite beschrieben folgenden PHP Code auf jeder Seite, auf der die Zeitbeschränkung ablaufen soll, eingefügt (auf der 1. Seite direkt unter den ersten PHP Code danach immer ganz oben):
// Filter: Zeit abgelaufen?
if (time() > $timeout) {
goToPage('partNext');
}
dabei habe ich die Seite, auf die die Teilnehmer nach Ablauf der Zeit weitergeleitet werden sollen, mit der Kennung partNext versehen.
Da ich mir noch nicht sicher bin, inwiefern die Zeitanzeige des ablaufenden Countdowns wirklich nötig ist, habe ich jetzt schon einmal versucht, ob sich in der Preview etwas tut, also ob die Teilnehmer nach Ablauf der Zeit schon auf die mit partNext versehene Seite weitergeleitet werden.
Das werden sie allerdings nicht. Ist das normal?
Danach habe ich wie auf dem obigen Link beschrieben unter Fragenkatalog → Rubrik erstellen eine Rubrik erstellt und unter → Text hinzufügen folgendes JavaSkript eingefügt:
<!-- HTML-Element zur Anzeige der Zeit -->
<div id="timeDisplay" style="font-size: 200%; margin: 16px 0; text-align: center">–</div>
<script type="text/javascript">
<!--
// Verbleibende Zeit initialisieren
var timeLeft = %timeLeft%;
var timeStart = new Date();
// Funkton zur Aktualisierung der Anzeige und Prüfung der Zeit
function updateCountdown() {
// Zeit berechnen
var now = new Date();
var timePage = Math.floor((now.getTime() - timeStart.getTime()) / 1000); // Vergangene Zeit [Sek.]
var remain = timeLeft - timePage;
// Zeit abgelaufen?
if (remain <= 0) {
remain = 0;
// Timer stoppen
window.clearInterval(timerInterval);
// Eine Meldung anzeigen (optional)
alert("Die Zeit ist vorbei.");
// Den Teilnehmer zur nächsten Seite weiterleiten (optional)
// SoSciTools.submitPage();
}
// Zeit anzeigen
var display = document.getElementById("timeDisplay");
if (!display) {
return;
}
while (display.lastChild) {
display.removeChild(display.lastChild);
}
var minutes = Math.floor(remain / 60);
var seconds = String(remain - 60 * minutes);
if (seconds.length < 2) {
seconds = "0" + seconds;
}
var displayText = String(minutes) + ":" + seconds;
var displayNode = document.createTextNode(displayText);
display.appendChild(displayNode);
}
// Initialisierung
var timerInterval = window.setInterval(updateCountdown, 250);
updateCountdown();
// -->
</script>
Dabei habe ich die Darstellung auf HTML Code gewählt.
Diesen Text habe ich dann auf die Seite eingefügt, auf der die Zeitbeschränkung beginnen soll.
Außerdem habe ich noch den PHP Code
// JavaScript zur Anzeige der verbleibenden Zeit
$timeLeft = $timeout - time();
// Statt JS01 muss hier die Kennung des Textes eingetragen werden
show('ZB01', array(
'%timeLeft%' => $timeLeft
));
hinzugefügt. JS01 habe ich hierfür abgeändert in ZB01, weil so die Beschreibung meines JavaSkripts lautet.
Den Php Code habe ich dann, anders als das JavaSkript, das ich nur auf die Startseite der Zeitbeschränkung eingefügt habe, auf allen, die Zeitbeschränkung betreffenden Seiten, eingefügt.
Danach wollte ich versuchen, ob die Zeitbeschränkung funktioniert und habe per Preview auf der Seite angefangen, die direkt vor der Seite ist, auf der die Zeitbeschränkung/ der Countdown losgeht.
Dabei ergibt sich folgendes Problem:
Sobald ich auf Weiter klicke startet zwar der Countdown, allerdings erscheint parallel folgende Fehlermeldung:
Warnung (Seite 2)
Für den Platzhalter %timeLeft% wurde weder ein Eingabefeld mit prepare_input() vorbereitet, noch ein Inhalt mit replace() festgelegt.
Außerdem ist direkt unter dem ablaufenden Countdown noch ein „-“ zu sehen, als ob ich hier im JavaSkript noch ein weiteres Feld für einen 2.? Countdown nicht ausgefüllt hätte.
Wenn ich mich dann durch die von der Zeitbeschränkung betroffenen Seite durchklicke, läuft der Countdown auf den betroffenen Seite korrekt weiter und die Fehlermeldung beschränkt sich auf die Countdownstartseite.
Allerdings wird man, anders als von mir gewünscht, nach Ablauf der Zeit nicht direkt auf die mit der Kennung partNext versehene Seite weitergeleitet, sondern kann theoretisch noch die Seite fertig bearbeiten, auf der man sich aktuell befindet. Erst das Klicken auf Weiter leitet auf die Seite mit partNext (Der Text „Die Zeit ist vorbei.“ bloppt allerdings korrekt auf.).
Wie kann ich deswegen
1. die Fehlerbehebung beheben (im pretest wird diese nicht angezeigt, nur bei der Preview)
2. das „-“ unter dem Countdown verschwinden lassen und
3. einstellen, dass die Teilnehmer nach Ablauf der Zeit automatisch zum nächsten Aufgabenblock weitergeleitet werden ohne die Möglichkeit zu haben, die Aufgaben auf der Seite zu Ende zu bearbeiten.
Ich hoffe das von mir beschriebene Problem und die Vorgehensweise ist einigermaßen verständlich und nachvollziehbar.
Vielen, vielen Dank schon einmal im Voraus
Tessa Freund