0 votes
in SoSci Survey (dt.) by s137404 (170 points)

Hallo!

Ich möchte eine komplexere PHP-Funktion programmieren. Es geht um eine Tagebuchstudie, wo über 12 Wochen hinweg jeden Tag eine kleine Frage per SMS an jeden Patienten geschickt wird, um zu fragen, ob sie ihr täglich durchzuführendes Yogaprogramm gemacht haben.

Einige Bedingungen für diese Frage:
1. Diese Frage soll optional sein, muss also nicht beantwortet werden.
2. Diese Frage soll tgl 12 Wochen lang geschickt werden
3.Wenn an 3 Tagen hintereinander diese Frage nicht beantwortet wurde, soll der Admin per email darüber informiert werden, weil dieser wissen soll, dass der Patient das Yogaprogramm evtl. schleifen lässt.
4. diese Frage soll immer 18 Uhr gesendet werden und nur 6Stunden aktiv sein und dann verfallen

Meine Lösungsideen:
zu 1.: kann man einfach bei den Optionen der Frage einstellen, dass sie nicht beantwortet werden muss

zu 2.: einfach zu programmieren mit mailSchedule (in einem Vorab-Fragebogen vor Beginn der 12 Wochen wird am Ende der PHP Code mit mailSchedule eingefügt);

zu 3.:hier würde ich eine mailResume Funktion einbauen, aber mir ist schleierhaft, wie ich die Bedingung programmieren soll, dass 3 Tage am Stück diese Frage nicht beantwortet wurde? Wie erkennt das Programm, dass die Tagesfrage 3x AM STÜCK nicht beantwortet wurde? Ich vermute man braucht eine datenbank-Funktion, korrekt? Wie sieht die PHP-Funktion bzw. array in mailResume dann aus? Hier ist auch die Frage, wo ich diesen PHP Code einfüge? Ich fürchte, ich muss für jede Tagesfrage einen einzelnen Fragebogen zusammenstellen, also 12x7= 84 Fragebögen, die ich in der Serienmail dann auch mit einer einzelnen ID versehe. Falls das sinnig ist, dann müsste ich den PHP Code mit den Bedingungen 3 und 4 in jedem einzelnen dieser 84 Fragebögen einfügen, korrekt?

zu4.: Uhrzeit der Sendung zu programmieren ist einfach, nämlich über mailschedule; zum Verfallen: da gibt es das "expire" array; leider geht aus der "expire-Array"-Beschreibung unter der Rubrik "mailResume" nicht hervor, wie ich dieses array von vorne bis hinten richtig schreibe, dass es funktioniert...

Leider kann ich nicht mal einen Ansatz eines eigenen PHP-Codes hier posten, weil ich es nicht Überreisse.

Ist es mgl, den PHP COde hier weitestgehend für mich zu programmieren?

Beste Grüße!

1 Answer

0 votes
by SoSci Survey (302k points)

Ist es mgl, den PHP COde hier weitestgehend für mich zu programmieren?

Wie bieten Ihnen auf www.soscisurvey.de bereits eine hervorragende Infrastruktur, eine Software mit riesiger Funktionalität und persönlichen Online-Support. Und das Ganze für wissenschaftliche Erhebungen vollkommen kostenlos. Wir können es wahrlich nicht leisten, dass wir auch noch jedes Projekt komplett implementieren ... aber wir geben hier gerne Hilfestellung, damit Sie es selbst meistern können. Ein wenig ins Werkzeug (in diesem Fall PHP) einarbeiten müssen Sie sich aber schon, wenn Sie ausgefallene Sonderwünsche haben :)

mir ist schleierhaft, wie ich die Bedingung programmieren soll, dass 3 Tage am Stück diese Frage nicht beantwortet wurde?

Das wird auf dem direkten Weg auch nicht funktionieren, denn der PHP-Code läuft nur dann, wenn der Fragebogen ausgeführt wird. Mit anderen Worten: Wenn der Link nicht angeklickt und der Fragebogen nicht aufgerufen wird, dann wird auch kein PHP-Code ausgeführt.

Nun gut, wenn es auf dem direkten Weg nicht läuft, muss man auf indirektem Wegen zum Ziel kommen. Sehen wir uns die Situation einmal genauer an, die wir da haben: An Tag X+0 wird der Fragebogen ausgefüllt, an Tag X+1, X+2 und X+3 nicht. Also muss der Code bereits an Tag X+0 laufen.

An diesem Tag kann man mittels mailSchedule() eine E-Mail vorbereiten, die am Tag X+3 verschickt wird - vorzugsweise abends, denn evtl. nimmt die Person ja um 22 Uhr doch noch teil. Oder an Tag X+4 gleich in der Früh, damit Sie die Nachricht morgens im Postfach haben.

Jetzt müssen wir also nur noch dafür sorgen, dass die Mail nicht verschickt wird, wenn die Person an Tag X+1, X+2 oder X+3 teilgenommen hat. Kein Problem, dafür rufen wir mailRevoke() auf. Und zwar an jedem der drei Tage.

Soweit so gut. Jetzt gibt es nur noch das Problem, dass wir an Tag X+2 ja auch die Mail von Tag X+1 abbrechen müssen. Das heißt (a) wir müssen an jedem Tag (ab Tag X+3) nicht nur einmal mailRevoke() aufrufen, sondern dreimal. Und (b) wir müssen für jeden der 12 x 7 (=84) minus 3 (am Ende brauchen wir das nicht mehr) Tage eine eigene Serienmail anlegen. Zusätzlich zu den 84 Serienmails, die wir für die eigentliche Tagebuch-Einladung benötigen.

Und wir müssen an jedem Tagebuch-Tag ermitteln, welche Tag gerade ist. Aber das sollte nicht weiter schwer sein - am einfachsten werde ich den Befehl panelData() da noch soweit ergänzen, dass man auch die ID der Serienmail abfragen kann.

Die Grundlage für den PHP-Code (um die Feinheiten wie die ersten und letzten 3 Tage kümmern Sie sich dann noch, s.o.) könnte dann also wie folgt aussehen:

$info = panelData();
if (!$info) {
  // TODO: Fehlermeldung, keine Daten
  pageStop();
}

// Die ID der Serienmail könnte dem Tag entsprechen, wenn man es entspr. anlegt
$tag = (int)$info['mailing'];

// Warnung vorbereiten an Tag X+4 - und zwar an den Forscher
// Die Warn-Mails haben die IDs 85, 86, ...
mailSchedule(false, $tag + 84, strtotime('+4 days 06:00:00'), [
  'to.email' => 'forscher@hochschule.de'
]);

// Frühere Warn-Mails nicht verschicken
for ($i=1; $i<=3; $i++) {
  if ($tag +84 -$i >= 85) {
    mailRevoke(false, $tag + 84 - $i);
  }
}

Wie gesagt: Das ist mal eine gute Basis. Testen Sie mal, wie gut das funktioniert (vor allem auch am Ende), damit das mailSchedule() da keine Fehlermeldung wirft, weil es die Warn-Mail für Tag 84 + 3 nicht gibt. Und dann können Sie sich mit Detailfragen gerne wieder melden.

Falls das sinnig ist, dann müsste ich den PHP Code mit den Bedingungen 3 und 4 in jedem einzelnen dieser 84 Fragebögen einfügen, korrekt?

Ich würde nur einen Fragebogen machen (s.o.) ... sonst wird das uferlos.

Sie brauchen ja schon 84 + 81 Serienmails.

Es gäbe übrigens auch noch die Option, dass Sie bei jeder erfolgreichen Teilnahme in der Datenbank für Inhalte einen Eintrag machen. Daraus könnte man dann mit einem separaten Fragebogen auch einfach abrufen, wer die letzten 3 Tage inaktiv war. Aber wenn man dann noch an die Namen kommen will, sind die Daten ganz schnell personenbezogen.

Übrigens müssen Sie sich noch überlegen, wie Sie den Namen des Teilnehmers in der Warn-Mail anzeigen möchten. Eine Möglichkeit wäre, dass Sie den Namen bei den Adresseinträgen zusätzlich noch in das Feld "Benuterdefiniert 1" schreiben und in den Warn-Mails den Platzhalter %custom1% verwenden.

Dass Sie aus den Warn-Mails in Verbindung mit den Daten dann wahrscheinlich erkennen können, welche Datensätze zu den säumigen Teilnehmern gehören - das könnte die Daten trotzdem personenbezogen machen. Klären Sie das bitte unbedingt mit dem Datenschutzbeauftragten der Hochschule. Spätestens wenn Sie es mit personenbezogenen Daten zu tun haben, müssen Sie dann nämlich doch auf dem kostenpflichtigen Server arbeiten.

by s137404 (170 points)
Hallo!
Erstmal herzlichen Dank für die ausführliche Hilfe! Ich möchte mich auch entschuldigen für die Ansprüche, die ich gestellt habe.

Die Hinweise bzgl Pseudonymisierung und pers.-bezogenen Daten war sehr wichtig. Anhanddessen fiel die Entscheidung, die Programmierung von Warnmails sein zu lassen, weil es datenschutztechnisch nicht geht.
Beste Grüße!

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

...