summaryrefslogtreecommitdiff
path: root/jobs.go
diff options
context:
space:
mode:
Diffstat (limited to 'jobs.go')
-rw-r--r--jobs.go81
1 files changed, 81 insertions, 0 deletions
diff --git a/jobs.go b/jobs.go
new file mode 100644
index 0000000..d4787fa
--- /dev/null
+++ b/jobs.go
@@ -0,0 +1,81 @@
+package main
+
+import (
+ "github.com/gorilla/sessions"
+ "kch42.de/gostuff/mailremind/model"
+ "net/http"
+)
+
+type jobTpldata struct {
+ ID, Subject, Excerpt, Next string
+}
+
+func jobToTpldata(job model.Job, user model.User) *jobTpldata {
+ excerpt := string(job.Content())
+ if len(excerpt) > 100 {
+ excerpt = string([]rune(excerpt)[0:100]) + " (...)"
+ }
+
+ return &jobTpldata{
+ ID: job.ID().String(),
+ Subject: job.Subject(),
+ Excerpt: excerpt,
+ Next: job.Next().In(user.Location()).Format("2006-Jan-02 15:04:05"),
+ }
+}
+
+type jobsTpldata struct {
+ Error, Success string
+ Jobs []*jobTpldata
+ Fatal bool
+}
+
+func jobs(user model.User, sess *sessions.Session, req *http.Request) interface{} {
+ if user == nil {
+ return &jobsTpldata{Error: "You need to be logged in to do that.", Fatal: true}
+ }
+
+ outdata := new(jobsTpldata)
+
+ if req.Method == "POST" {
+ if err := req.ParseForm(); err != nil {
+ outdata.Error = "Could not understand form data."
+ goto listjobs
+ }
+
+ if req.FormValue("Delconfirm") != "yes" {
+ goto listjobs
+ }
+
+ for _, _id := range req.Form["Jobs"] {
+ id, err := db.ParseDBID(_id)
+ if err != nil {
+ outdata.Error = "Not all jobs could be deleted."
+ continue
+ }
+
+ job, err := user.JobByID(id)
+ if err != nil {
+ outdata.Error = "Not all jobs could be deleted."
+ continue
+ }
+
+ if job.Delete() != nil {
+ outdata.Error = "Not all jobs could be deleted."
+ continue
+ }
+
+ outdata.Success = "Jobs deleted."
+ }
+ }
+
+listjobs:
+ jobs := user.Jobs()
+ outdata.Jobs = make([]*jobTpldata, len(jobs))
+
+ for i, job := range jobs {
+ outdata.Jobs[i] = jobToTpldata(job, user)
+ }
+
+ return outdata
+}