72 lines
1.8 KiB
Go
72 lines
1.8 KiB
Go
package projects
|
|
|
|
import (
|
|
"cpone-dashboard/menu/auth"
|
|
"embed"
|
|
"html/template"
|
|
"log"
|
|
"net/http"
|
|
"strconv"
|
|
)
|
|
|
|
var tmplFS *embed.FS
|
|
var basePath string
|
|
|
|
func SetTemplateFS(fs *embed.FS) { tmplFS = fs }
|
|
func SetBasePath(p string) { basePath = p }
|
|
|
|
type pageData struct {
|
|
Username string
|
|
Projects []ProjectItem
|
|
CurrentProject *ProjectItem
|
|
}
|
|
|
|
func Index(w http.ResponseWriter, r *http.Request) {
|
|
username := auth.Username(r)
|
|
selectedID := auth.SelectedProjectID(r)
|
|
|
|
items, err := GetUserProjects(username)
|
|
if err != nil {
|
|
log.Printf("[projects] GetUserProjects error: %v", err)
|
|
http.Error(w, "query error", http.StatusInternalServerError)
|
|
return
|
|
}
|
|
|
|
b := func(path string) string { return basePath + path }
|
|
t := template.Must(template.New("").Funcs(template.FuncMap{"b": b}).ParseFS(tmplFS, "templates/projects/index.html"))
|
|
var current *ProjectItem
|
|
if selectedID > 0 {
|
|
if item, ok, _ := GetUserProject(username, selectedID); ok {
|
|
current = &item
|
|
}
|
|
}
|
|
if err := t.ExecuteTemplate(w, "projects", pageData{
|
|
Username: username,
|
|
Projects: items,
|
|
CurrentProject: current,
|
|
}); err != nil {
|
|
log.Printf("[projects] template error: %v", err)
|
|
}
|
|
}
|
|
|
|
func Select(w http.ResponseWriter, r *http.Request) {
|
|
username := auth.Username(r)
|
|
mcuID, _ := strconv.Atoi(r.URL.Query().Get("mcu_id"))
|
|
if mcuID <= 0 {
|
|
http.Redirect(w, r, basePath+"/projects", http.StatusSeeOther)
|
|
return
|
|
}
|
|
|
|
if _, ok, err := GetUserProject(username, mcuID); err != nil {
|
|
log.Printf("[projects] GetUserProject error: %v", err)
|
|
http.Error(w, "query error", http.StatusInternalServerError)
|
|
return
|
|
} else if !ok {
|
|
http.Redirect(w, r, basePath+"/projects", http.StatusSeeOther)
|
|
return
|
|
}
|
|
|
|
auth.SetSelectedProject(w, mcuID)
|
|
http.Redirect(w, r, basePath+"/dashboard", http.StatusSeeOther)
|
|
}
|