0 votes
in SoSci Survey (dt.) by s109993 (9.7k points)

Ich benutze die Navigationsleiste (https://www.soscisurvey.de/help/doku.php/de:create:navigation?s[]=*checkqst*) und das funktioniert auch wunderbar mit normalen Auswahlfragen und Textfeldern. Jetzt gibt es allerdings einige Mehrfachskalen- wie kann ich hier den Check programmieren?
Das ist die normale vorgehensweise die ich benutze,- wie würde das für den oben genannten Fragetyp aussehen?

function navigation() {
    
    // Completion check
        $cGeneral = (count(array_merge(
        checkQst('A002', [1]),
        checkQst('A003', [1]),
				checkQst('A004', [1]),
				checkItem('A005', 'A005_01'),
				checkQst('A006', [1]),
				checkQst('A007', [1]),
				checkQst('A008', [1]),
				checkItem('A009', 'A009_01'),
 				checkItem('A011', 'A011_01'), 
 				checkQst('A014', [1]), 
 				checkQst('A015', [1]),     
        checkQst('A017', [1,2,3,4,5,6]),
        checkItem('A018', 'A018_01'),
        checkQst('A019', [1]),
        checkQst('A021', [1,2]),
        checkItem('A023', 'A023_01'),
        checkQst('A024', [1]),
        checkItem('A026', 'A026_01'),
        checkItem('A029', 'A029_01'),
        checkItem('A034', 'A034_01')
   )) === 0	);
by SoSci Survey (302k points)
> wie kann ich hier den Check programmieren?

Wie ist denn Ihre Kriterium, dass eine Mehrfachauswahl vollständig beantwortet wurde?
by s109993 (9.7k points)
Gute Frage, hätte ich natürlich dazuschreiben müssen. Mindestens 1 Kreuz pro Zeile (Item) gesetzt. Wenn ich eine Idee habe, wie das funktioniert, kann ich das denke ich selber später ändern. Nur stehe ich da leider gerade etwas auf dem Schlauch.

1 Answer

0 votes
by SoSci Survey (302k points)

Mindestens 1 Kreuz pro Zeile (Item) gesetzt.

Da können wir gut mit getItems() arbeiten, z.B.

function checkQstMC($qID) {
  $selected = getItems($qID, '==', 2);
  $fail = [];
  if (count($selected) < 1) {
    $fail[] = getItemtext($qID, 'question');
  }
  return $fail;
}
by s109993 (9.7k points)
Nur um sicher zu gehen: die Funktion hat ja nur einen Parameter, dann müsste ja ein  checkQstMC('A032'),  // MCM theoretisch ausreichen, richtig? Etwas funktioniert noch nicht ganz, und alle anderen Variablen habe ich schon doppelt überprüft- deswegen noch einmal meine Nachfrage (Die Funktion habe ich unter php-Funktionen ganz nach unten gesetzt).
by SoSci Survey (302k points)
> die Funktion hat ja nur einen Parameter

Ja, das ist korrekt.

> Etwas funktioniert noch nicht ganz

Ich habe die Funktion nicht getestet. Fügen Sie folgende Ergänzungen um debug() ein, um eventuelle Fehler zu suchen:

$selected = getItems($qID, '==', 2);
debug($qID);
debug($selected);

... und berichten Sie gerne, wie sich der Fehler äußert. Ich könnte mir z.B. vorstellen, dass die Funktion aktuell noch anschlägt, wenn eine Frage bisher noch gar nicht angezeigt wurde. In dem Fall könnte man auf die nicht ausgewählten Optionen (1) wechseln:

function checkQstMC($qID) {
  $unselected = getItems($qID, '==', 1);
  $allItems  = getItems($qID, 'all');
  $fail = [];
  if (count($unselected) == count($allItems)) {
    $fail[] = getItemtext($qID, 'question');
  }
  return $fail;
}


Oder eine Mischung:

function checkQstMC($qID) {
  $selected = getItems($qID, '==', 2);
  $unselected = getItems($qID, '==', 1);
  $fail = [];
  if ((count($selected) < 1) && (count($unselected) > 0)) {
    $fail[] = getItemtext($qID, 'question');
  }
  return $fail;
}
by s109993 (9.7k points)
edited by s109993
debug()    Content: ??? = A032 (string)
debug()    Content: Array (no elements at all)

Ich bekomme keinen Fehler in dem Sinne. Ich habe einen grünen Haken eingebaut, welcher erscheint, wenn alle Fragen einer Sektion beantwortet wurden. Der erscheint aber nicht bei der Sektion, wo die MCM-Skalen sind (bei anderen Sektionen funktioniert es). Ich probiere gleich einmal die beiden anderen Vorschläge aus.

Edit:
Ich habe alle drei Versionen getestet, mit gleichem Ausgang. Nur um sicher zu sein, habe ich die MCM Varis aus dem Test entfernt- dann wird der Haken grün, wenn alle Fragen beantwortet sind.
by SoSci Survey (302k points)
> Content: Array (no elements at all)

Das ist ein bisschen zu wenig. Könnten Sie bitte zusätzlich noch die Debug-Information posten, die angezeigt wird, wenn Sie die Seite mit A032 beantwortet haben?
by s109993 (9.7k points)
Information]    Answer to A032_01_1 = 1
[Information]    Answer to A032_01_2 = 1
[Information]    Answer to A032_01_CN = 0
[Information]    Answer to A032_02_1 = 1
[Information]    Answer to A032_02_2 = 1
[Information]    Answer to A032_02_CN = 0
[Information]    Answer to A032_03_1 = 2
[Information]    Answer to A032_03_2 = 1
[Information]    Answer to A032_03_CN = 1
[Information]    Answer to A032_04_1 = 2
[Information]    Answer to A032_04_2 = 1
[Information]    Answer to A032_04_CN = 1
[Information]    Answer missing for A033_01

debug()    Content: ??? = A032 (string)
debug()    Content: 03, 14

Das kommt mit dem folgenden Code:

function checkQstMC($qID) {
  $unselected = getItems($qID, '==', 1);
    debug($qID);
debug($unselected);
  $allItems  = getItems($qID, 'all');
  $fail = [];
  if (count($unselected) == count($allItems)) {
    $fail[] = getItemtext($qID, 'question');
  }
  return $fail;
}
by SoSci Survey (302k points)
Welchen Fragetyp haben Sie denn für A032 verwendet? Die _CN-Variablen deuten darauf hin, dass es sich nicht (!) um eine klassische "Mehrfachauswahl" handelt. Eher eine Mehrfachauswahlmatrix?!
by s109993 (9.7k points)
richtig- es ist eine Mehrfachauswahlmatrix. Ich habe in meiner Frage von "Mehrfachskalen" gesprochen, ich dachte damit wäre das ausreichend definiert, habe aber wohl den falschen Wortlaut gewählt. Entschuldigen Sie die Verwirrung!
by SoSci Survey (302k points)
Okay ... und wann gilt eine Mehrfachauswahlmatrix als vollständig ausgefüllt? Ein Kreuzchen pro Zeile oder pro Spalte?
by s109993 (9.7k points)
hm, nach erneutem anschauen der Matrix ganz nicht so einfach zu beantworten (Aufgrund der Fragestellung). Ich denke am besten wäre es, wenn ein Kästchen in der Mehrfachauswahlmatrix ausgewählt wurde, dann gilt es schon als vollständig ausgefüllt (also egal wo in der Mehrfachmatrix). Es geht ja nur darum Teilnehmer ein Indikator zu geben, ob eine Frage vergessen wurde.

Wäre das überhaupt möglich?
by SoSci Survey (302k points)
> Wäre das überhaupt möglich?

Im "schlimmsten" Falls muss man mit zwei FOR-Schleifen die Zeilen und Spalten durchsuchen, solange, bis man ein Kreuzchen gefunden hat (oder eben bis zum Ende). Wobei es schon dadurch einfacher wird, dass SoSci in den _CN-Variablen die Anzahl der Kreuzchen pro Zeile abzählt.

Ich muss nochmal kurz prüfen, wie sich die Mehrfachauswahlmatrix mit den Funktionen getItems() und id() verträgt, und melde mich nochmal, wie das aussehen könnte.
by SoSci Survey (302k points)
Okay, wir können einfach getItems() verwenden - die Funktion verwendet direkt die Anzahl der Kreuzchen pro Zeile.

function checkQstMatrix($qID) {
  $anySelected = getItems($qID, '>', 0);
  $fail = [];
  if (count($anySelected) == 0) {
    $fail[] = getItemtext($qID, 'question');
  }
  return $fail;
}
by s109993 (9.7k points)
Ja, das funktioniert, vielen Dank und Entschuldigen Sie die Verwirrung am Anfang! Jetzt hoffe ich mal, dass sich der Kunde damit zufrieden gibt :)

Willkommen im Online-Support von SoSci Survey.

Hier bekommen Sie schnelle und fundierte Antworten von anderen Projektleitern und direkt von SoSci Survey.

→ Eine Frage stellen


Welcome to the SoSci Survey online support.

Simply ask a question to quickly get answers from other professionals, and directly from SoSci Survey.

→ Ask a Question

...