/
projectedit.go
125 lines (110 loc) · 3.91 KB
/
projectedit.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
package cproject
import (
"fmt"
"net/http"
"github.com/pkg/errors"
"admini.dev/admini/app"
"admini.dev/admini/app/controller"
"admini.dev/admini/app/controller/cutil"
"admini.dev/admini/app/project"
"admini.dev/admini/views/vproject"
)
func ProjectNew(w http.ResponseWriter, r *http.Request) {
controller.Act("project.new", w, r, func(as *app.State, ps *cutil.PageState) (string, error) {
ps.Title = "New Project"
p := &project.Project{}
ps.Data = p
avail, err := as.Services.Sources.List(ps.Logger)
if err != nil {
return "", errors.Wrap(err, "unable to list sources")
}
return controller.Render(w, r, as, &vproject.New{Project: p, AvailableSources: avail}, ps, "projects", "New")
})
}
func ProjectInsert(w http.ResponseWriter, r *http.Request) {
controller.Act("project.insert", w, r, func(as *app.State, ps *cutil.PageState) (string, error) {
frm, err := cutil.ParseForm(r, ps.RequestBody)
if err != nil {
return "", errors.Wrap(err, "unable to parse form")
}
key, err := frm.GetString("key", false)
if err != nil {
return controller.FlashAndRedir(false, err.Error(), "/project/_new", w, ps)
}
title := frm.GetStringOpt("title")
icon := frm.GetStringOpt("icon")
description := frm.GetStringOpt("description")
sources, err := frm.GetStringArray("sources", true)
if err != nil {
return "", err
}
ret := &project.Project{Key: key, Title: title, Icon: icon, Description: description, Sources: sources}
err = as.Services.Projects.Save(ret, false, ps.Logger)
if err != nil {
return "", errors.Wrap(err, "unable to save project")
}
return controller.FlashAndRedir(true, "saved new project", fmt.Sprintf("/project/%s", key), w, ps)
})
}
func ProjectEdit(w http.ResponseWriter, r *http.Request) {
controller.Act("project.edit", w, r, func(as *app.State, ps *cutil.PageState) (string, error) {
key, err := cutil.PathString(r, "key", false)
if err != nil {
return "", err
}
prj, err := as.Services.Projects.LoadRequired(key, false, ps.Logger)
if err != nil {
return "", errors.Wrapf(err, "unable to load project [%s]", key)
}
ps.Title = fmt.Sprintf("Edit [%s]", prj.Name())
ps.Data = prj
avail, err := as.Services.Sources.List(ps.Logger)
if err != nil {
return "", errors.Wrap(err, "unable to list sources")
}
return controller.Render(w, r, as, &vproject.Edit{Project: prj, AvailableSources: avail}, ps, "projects", prj.Key, "Edit")
})
}
func ProjectSave(w http.ResponseWriter, r *http.Request) {
controller.Act("project.save", w, r, func(as *app.State, ps *cutil.PageState) (string, error) {
frm, err := cutil.ParseForm(r, ps.RequestBody)
if err != nil {
return "", errors.Wrap(err, "unable to parse form")
}
key, err := cutil.PathString(r, "key", false)
if err != nil {
return "", err
}
prj, err := as.Services.Projects.LoadRequired(key, false, ps.Logger)
if err != nil {
return "", errors.Wrapf(err, "unable to load project [%s]", key)
}
prj.Title = frm.GetStringOpt("title")
prj.Icon = frm.GetStringOpt("icon")
prj.Description = frm.GetStringOpt("description")
prj.Sources, err = frm.GetStringArray("sources", true)
if err != nil {
return "", err
}
err = as.Services.Projects.Save(prj, true, ps.Logger)
if err != nil {
return "", errors.Wrapf(err, "unable to save project [%s]", key)
}
msg := fmt.Sprintf(`saved project %q`, key)
return controller.FlashAndRedir(true, msg, fmt.Sprintf("/project/%s", key), w, ps)
})
}
func ProjectDelete(w http.ResponseWriter, r *http.Request) {
controller.Act("project.delete", w, r, func(as *app.State, ps *cutil.PageState) (string, error) {
key, err := cutil.PathString(r, "key", false)
if err != nil {
return "", err
}
err = as.Services.Projects.Delete(key, ps.Logger)
if err != nil {
return "", errors.Wrapf(err, "unable to delete project [%s]", key)
}
msg := fmt.Sprintf(`deleted project %q`, key)
return controller.FlashAndRedir(true, msg, "/project", w, ps)
})
}