0 votes
in SoSci Survey (dt.) by s199762 (180 points)

Guten Abend,

ich soll der Kontrollgruppe, sofern diese Lust hat, nach dem Zeitraum meine Intervention zukommen lassen. Ich habe jetzt einfach auf S.1 die E-Mail-Adressen dann erhoben (Opt-In) und dann auf die neue Seite die Intervention gepackt (Seite 2). Darunter folgender PHP-Code:

$tomorrow = strtotime('tomorrow 17:00:00');
if (value('RA01') == 1) {
$person = value('KO01');
mailSchedule($person, 1, $tomorrow);
mailSchedule($person, 2, strtotime('+1 day', $tomorrow));
mailSchedule($person, 3, strtotime('+2 days', $tomorrow));
mailSchedule($person, 4, strtotime('+3 days', $tomorrow));
mailSchedule($person, 5, strtotime('+4 days', $tomorrow));
mailSchedule($person, 6, strtotime('+5 days', $tomorrow));
mailSchedule($person, 7, strtotime('+6 days', $tomorrow));
mailSchedule($person, 8, strtotime('+7 days', $tomorrow));
mailSchedule($person, 9, strtotime('+8 days', $tomorrow));
mailSchedule($person, 10, strtotime('+9 days', $tomorrow));
mailSchedule($person, 11, strtotime('+10 days', $tomorrow));
mailSchedule($person, 12, strtotime('+11 days', $tomorrow));
mailSchedule($person, 13, strtotime('+12 days', $tomorrow));
mailSchedule($person, 14, strtotime('+13 days', $tomorrow));
mailSchedule($person, 15, strtotime('+14 days', $tomorrow));
mailSchedule($person, 16, strtotime('+15 days', $tomorrow));
mailSchedule($person, 17, strtotime('+16 days', $tomorrow));
mailSchedule($person, 18, strtotime('+17 days', $tomorrow));
mailSchedule($person, 19, strtotime('+18 days', $tomorrow));
mailSchedule($person, 20, strtotime('+19 days', $tomorrow));
mailSchedule($person, 21, strtotime('+20 days', $tomorrow));
mailSchedule($person, 22, strtotime('+21 days', $tomorrow));
mailSchedule($person, 23, strtotime('+22 days', $tomorrow));
mailSchedule($person, 24, strtotime('+23 days', $tomorrow));
mailSchedule($person, 25, strtotime('+24 days', $tomorrow));
mailSchedule($person, 26, strtotime('+25 days', $tomorrow));
mailSchedule($person, 27, strtotime('+26 days', $tomorrow));
mailSchedule($person, 28, strtotime('+27 days', $tomorrow));
mailSchedule($person, 57, strtotime('+27 days + 15 hours', $tomorrow));
}

Wie muss ich diesen abändern, damit alle, die die Mail angeben, dann automatisch auch 21 Tage lang den Interventionsfragebogen zugesendet bekommen?
Gibt es eine leichtere Variante?
In diesem Fall brauche ich die Daten ja nicht mehr, sondern will einfach, dass die VP 21 Tage lang die eine Seite bekommen mit der Intervention (quasi eine normale Fragebogenseite, in der Stichworte angegeben werden). Danke!

1 Answer

0 votes
by SoSci Survey (365k points)

Wie muss ich diesen abändern, damit alle, die die Mail angeben, dann automatisch auch 21 Tage lang den Interventionsfragebogen zugesendet bekommen?

Wenn das zusätzliche E-Mails (abseits der 27 schon geplanten) sein soll, müssten sie noch 21 Serienmails erstellen und nochmal 21-mal mailSchedule() aufrufen.

Gibt es eine leichtere Variante?

Für das Erstellen der Serienmails nicht (natürlich kann man diese einfach duplizieren).

Für Ihre Code ja. Und zwar würden sie in einem Array die Serienmail-ID und den Zeitpunkt definieren und dann eine FOR-Schleife verwenden, um das zu terminieren.

$mails = [
  // MailID => Tage
  1 => '',
  2 => '+1 day',
  3 => '+2 days',
  4 => '+3 days',
  5 => '+4 days',
  ...
  57 => '+27 days + 15 hours'
];

$tomorrow = strtotime('tomorrow 17:00:00');
foreach ($mails as $id => $time) {
    mailSchedule($person, $id, strtotime($time, $tomorrow));
}

In diesem Fall brauche ich die Daten ja nicht mehr, sondern will einfach, dass die VP 21 Tage lang die eine Seite bekommen mit der Intervention (quasi eine normale Fragebogenseite, in der Stichworte angegeben werden). Danke!

Ob Sie Daten sammeln oder nicht, macht technisch keinen Unterschied, wenn Sie eine Fragebogen-Seite anzeigen.

by s199762 (180 points)
Vielen Dank. Ich habe es angepasst, da nur die 21 Interventionsbögen versendet werden sollen dann. Es findet sich auf der Seite davor die Seite mit Angabe der Mailadresse und auf der Seite der Interventionsfragebogen mit folgendem PHP-Code:

$mails = [
  // MailID => Tage
  1 => '',
  2 => '+1 day',
  3 => '+2 days',
  4 => '+3 days',
  5 => '+4 days',
  ...
  21 => '+20 days'
];

$tomorrow = strtotime('tomorrow 17:00:00');
foreach ($mails as $id => $time) {
    mailSchedule($person, $id, strtotime($time, $tomorrow));
}

Passt das so, dass jeder, der auf der Seite davor eine Mal angegeben hat, diese 21 FB bekommt?

Außerdem kam folgender Fehler:

Warnung: Unerwartetes Element: 21 - fehlt hier vielleicht ein Semikolon (;) oder Anführungszeichen?
$mails = [
  
  1 => '',
  2 => '+1 day',
  3 => '+2 days',
  4 => '+3 days',
  5 => '+4 days',
  ...
  21

Was soll ich tun?
by SoSci Survey (365k points)
Die drei Punkte aus meinem Beispiel müssen Sie bitte durch die korrekte Zuordnung ersetzen, welche Serienmail zu welchem Zeitpunkt ersetzt werden soll.

Ob die korrekte Terminierung der Serienmails funktioniert, sehen Sie z.B. in den Debug-Informationen: https://www.soscisurvey.de/help/doku.php/de:create:debugging
ago by s199762 (180 points)
Danke! Ich habe jetzt alles abgeändert. Sieht es so richtig aus?

$mails = [
  // MailID => Tage
  1 => '',
  2 => '+1 day',
  3 => '+2 days',
  4 => '+3 days',
  5 => '+4 days',
  6 => '+5 days',
  7 => '+6 days',
  8 => '+7 days',
  9 => '+8 days',
  10 => '+9 days',
  11 => '+10 days',
  12 => '+11 days',
  13 => '+12 days',
  14 => '+13 days',
  15 => '+14 days',
  16 => '+15 days',
  17 => '+16 days',
  18 => '+17 days',
  19 => '+18 days',
  20 => '+19 days',
  21 => '+20 days'
];

$tomorrow = strtotime('tomorrow 17:00:00');
foreach ($mails as $id => $time) {
    mailSchedule($person, $id, strtotime($time, $tomorrow));
}
ago by SoSci Survey (365k points)
Ja, dies ist nun eine übersichtlichere Version des Codes.
ago by s199762 (180 points)
Vielen Dank! Ich habe den Code genauso genutzt. Auf der Seite davor wurde die Mailadresse erhoben.
Was auch geklappt hat, dass die Mail dann bei den Adressen aufgeführt wird. Was jedoch leider nicht funktioniert hat ist dann der automatisierte Mailversand mit den 21 Serienmails, worüber jeweils die Intervention aufgerufen werden kann. Das sieht man hieran:


ID ↓    Beschreibung ↓     
    ID 1
E-Mail    → Erinnerungsmail 1 (Fragebogen: inter1)
Studie Sport & Stimmung - kurze Reflexion    duplizieren✉    X
    ID 2
E-Mail    → Erinnerungsmail 1 (Fragebogen: inter1)
Studie Sport & Stimmung - kurze Reflexion    duplizieren✉    X
11.02.2026, 17:00    Versand an 1 Empfänger

Mail 1 mit ID 1 müsste ja auch versendet werden. Der 1 Empfänger bezieht sich nicht auf diesen FB hat also auch nichts damit zu tun. Muss noch was beim Code abgeändert werden?

Mein Wunsch wäre, dass die erste Mail (ID1) dann einen Tag danach um 17 Uhr kommt, nachdem der erste FB ausgefüllt wurde und alle anderen Mails jeweils 24 h später (1 Tag danach, 2 Tage, ...).

Bsp.:
11.02 13 Uhr FB-Bearbeitung
12.02 17 Uhr erste Serienmail (ID 1)
13.02 17 Uhr zweite Serienmail (ID 2) usw.
ago by SoSci Survey (365k points)
Bitte posten Sie doch mal die Debug-Information, welche auf der Seite mit dem PHP-Code angezeigt wird. Danke.
ago by s199762 (180 points)
Klar gerne:

[Information]    Interview gestartet (neue Nummer 165)
[Information]    Der Fragebogen qnr5 im Projekt sportstudiemainz wird verwendet
[Verarbeitung]    Erstelle Seite 2 in Fragebogen qnr5
[Inhalt]    Erstelle Frage DI01
[Information]    Speicherbedarf RAM 8.8 MB (Seiteninhalt 0.0 MB)

Hilft das weiter?

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

...