From 44eb990b475ca835b4720bf0521d4159b21b9508 Mon Sep 17 00:00:00 2001 From: Matthias Andreas Benkard Date: Wed, 2 Dec 2009 13:48:17 +0100 Subject: Add a button for sending the database as mail to all users. --- src/logikorr/servlet.clj | 46 +++++++++++++++++++++++++++++++++++++++++++++- war/logikorr.js | 15 +++++++++++++++ 2 files changed, 60 insertions(+), 1 deletion(-) diff --git a/src/logikorr/servlet.clj b/src/logikorr/servlet.clj index 10ef5d5..31b6ef7 100644 --- a/src/logikorr/servlet.clj +++ b/src/logikorr/servlet.clj @@ -4,7 +4,10 @@ (:require [appengine-clj.datastore :as ds] [org.danlarkin.json :as json]) (:import [com.google.appengine.api.datastore DatastoreServiceFactory Entity Query Query$FilterOperator Query$SortDirection KeyFactory EntityNotFoundException Key] - [com.google.appengine.api.users UserServiceFactory])) + [com.google.appengine.api.users UserServiceFactory] + [java.util Properties] + [javax.mail Message Message$RecipientType MessagingException Session Transport] + [javax.mail.internet AddressException InternetAddress MimeMessage MimeMultipart MimeUtility MimeBodyPart])) (defmacro with-ds-transaction [& body] `(call-with-ds-transaction (fn [] ~@body))) @@ -86,6 +89,8 @@ [:h2 "Neue Ergebnisse"] [:form [:button#make-revision {:type "button"} "Aktuelle Version sichern"] [:div#new-version-label {:style "display: inline; color: #070"}]] + [:form [:button#send-mail {:type "button"} "Datei an die Korrektoren schicken"] + [:div#mail-sent-label {:style "display: inline; color: #070"}]] [:table#ergebnisse] [:h2 "Bestehende Ergebnisse"] [:table @@ -186,6 +191,44 @@ (:key (current-revision)))) (recur (rest (rest lines))))))))) +(defn encode-database-file [] + (with-out-str + (let [students (find-students)] + (doseq [student students] + (printf "%s\n" (unsplit-name (:first-name student) (:last-name student))) + (printf "(") + (doseq [score (:score student)] + (printf "%-3s " (str score))) + (printf ")\n\n"))))) + +(defn send-mail [] + (let [props (Properties.) + session (Session/getDefaultInstance props nil) + message (MimeMessage. session) + users (ds/find-all (Query. "user"))] + (doseq [user users] + (.addRecipient message + Message$RecipientType/TO + (InternetAddress. (:email user) (:email user)))) + (doto message + (.setFrom (InternetAddress. "mulkiatsch@gmail.com" "Logikorr")) + (.setSubject "Logik-Korrekturergebnisse") + (.setContent + (doto (MimeMultipart.) + (.addBodyPart (doto (MimeBodyPart.) + (.setText "Anbei die jüngsten Korrekturergebnisse. + +Automatisch erzeugte Grüße, +Logikorr"))) + (.addBodyPart (doto (MimeBodyPart.) + ;;(.setText (encode-database-file)) + (.setContent (encode-database-file) "text/plain") + ;; (.setDataHandler (doto (DataSource.) + ;; ())) + (.setFileName "logik.txt") + (.setDisposition "attachment")))))) + (Transport/send message))) + (defmacro with-authentication [& body] `(call-with-authentication (fn [] ~@body))) @@ -196,6 +239,7 @@ (GET "/find-student" (with-authentication (find-student-json (:name params)))) (GET "/update-student-score" (with-authentication (update-student-score (:id params) (:score-number params) (:score params)))) (GET "/make-new-revision" (with-authentication (make-new-revision))) + (GET "/send-mail" (with-authentication (send-mail))) (POST "/import-score-file" (with-authentication (import-score-file (:file-data params)) (redirect-to "/"))) diff --git a/war/logikorr.js b/war/logikorr.js index 8ed6706..2e6158f 100644 --- a/war/logikorr.js +++ b/war/logikorr.js @@ -14,6 +14,21 @@ YUI().use('node', 'node-base', 'io-base', 'io-form', 'io-queue', 'json', functio }); } + function registerSendMailAction() { + var button = Y.one("#send-mail"); + button.on("click", function(e) { + Y.io("send-mail", + { 'on': { 'complete': function(id, o, args) { + Y.log("E-Mail verschickt: " + o.responseText); + if (o.responseText == "\"OK\"") { + Y.one("#mail-sent-label").set("innerText", "E-Mail verschickt."); + } else { + Y.one("#mail-sent-label").set("innerText", "Fehler: " + o.responseText); + } + } } }); + }); + } + function markAsChanged(input) { input.setAttribute("style", "background-color: #faa"); } -- cgit v1.2.3