Ich habe ein Setup, bei dem eine Site interne Analysen zur Site-Nutzung generiert. Benutzer können einen Download ihrer persönlichen Analysen anfordern. Da diese Informationen vertraulich sind, erstelle ich keine Dateien. Ich generiere eine CSV-Datei in einer Variablen und "schiebe" sie dann an den Benutzer:
function _cex_download( $output, $filename )
{
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: private");
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=$filename");
header("Accept-Ranges: bytes");
echo $output;
exit;
}
Dies führt dazu, dass der Browser des Benutzers ein Dialogfeld "Datei speichern" öffnet und der Benutzer die Datei am Ende erstellt. Dies funktioniert einwandfrei, außer dass die Administratoren der Site "destruktive Exporte" auslösen können - und in dieser Situation habe ich ein sekundäres Bestätigungsformular, das der Administrator akzeptieren muss, bevor der destruktive Export ausgeführt wird.
Das Problem ist, dass diese "Push-Download" -Routine die Drupal-Seitenverarbeitung beendet. Es scheint keine Möglichkeit zu geben, den Administrator auf eine Seite umzuleiten, nachdem diese Push-Download-Routine aufgerufen wurde. Administratoren erhalten von ihrem Browser ein Dialogfeld zum Speichern von Dateien, das jedoch auf dem Bestätigungsformular verbleibt.
Ich habe versucht, den mehrstufigen Formularweg zu beschreiten, aber nach einem Tag voller seltsamer Weiterleitungen habe ich mich aus dieser Verwirrung zurückgezogen. Begann auch mit der mehrstufigen Formularlogik von ChaosTool. Aber irgendetwas sagt mir, dass das Problem wirklich darin besteht, dass dieses "Push-Download" ein Killer für geführte Prozesse ist.
Vielleicht ein jquery-Bestätigungsdialog, der den ersten Klick auf die Schaltfläche "Exportieren" abfängt, die Bestätigung vollständig in Javascript durchführt, ein PHP / FAPI-Bestätigungsformular vergisst und wenn der Benutzer in jquery bestätigt, sende ich programmgesteuert den Export, den ich abgefangen habe?