func GetKeysInfo(err_text string, qs *quests.QuestStorage) map[string]interface{} { var keys []quests.Step var e error result := map[string]interface{}{} keys, e = qs.GetAllSteps() if e != nil || err_text != "" { result["is_error"] = true if e != nil { result["error_text"] = e.Error() } else { result["error_text"] = err_text } } result["keys"] = keys return result }
func EnsureWorkWithKeys(r martini.Router, qs *quests.QuestStorage, db *d.MainDb) martini.Router { //todo add group and refactor normal r.Post("/load/up", w.LoginRequired, w.AutHandler.CheckIncludeAnyRole(MANAGER), func(render render.Render, request *http.Request) { xlsFileReg := regexp.MustCompile(".+\\.xlsx?") file, header, err := request.FormFile("file") if err != nil { render.HTML(200, "new_keys", w.AddCurrentUser(GetKeysInfo(fmt.Sprintf("Ошибка загрузки файлика: %v", err), qs), request, db)) return } log.Printf("Form file information: file: %+v \nheader:%v, %v\nerr:%v", file, header.Filename, header.Header, err) defer file.Close() data, err := ioutil.ReadAll(file) if err != nil { render.HTML(200, "new_keys", w.AddCurrentUser(GetKeysInfo(fmt.Sprintf("Ошибка загрузки файлика: %v", err), qs), request, db)) return } if xlsFileReg.MatchString(header.Filename) { xlFile, err := xlsx.OpenBinary(data) log.Printf("file: %+v, err: %v", xlFile, err) if err != nil || xlFile == nil { render.HTML(200, "quests/new_keys", w.AddCurrentUser(GetKeysInfo(fmt.Sprintf("Ошибка обработки файлика: %v", err), qs), request, db)) return } skip_rows, _ := strconv.Atoi(request.FormValue("skip-rows")) skip_cols, _ := strconv.Atoi(request.FormValue("skip-cols")) parse_res, _ := w.ParseExportXlsx(xlFile, skip_rows, skip_cols) for _, prel := range parse_res { qs.AddStep(prel[0], prel[1], prel[2]) } } else { render.HTML(200, "new_keys", w.AddCurrentUser(GetKeysInfo("Файл имеет не то расширение :(", qs), request, db)) } render.Redirect("/new_keys") }) r.Get("/new_keys", w.LoginRequired, w.AutHandler.CheckIncludeAnyRole(MANAGER), func(r render.Render, req *http.Request) { log.Printf("CONSOLE WEB will show keys") r.HTML(200, "new_keys", w.AddCurrentUser(GetKeysInfo("", qs), req, db), render.HTMLOptions{Layout: "base"}) }) r.Post("/add_key", w.LoginRequired, w.AutHandler.CheckIncludeAnyRole(MANAGER), func(user auth.User, render render.Render, request *http.Request) { start_key := request.FormValue("start-key") next_key := request.FormValue("next-key") description := request.FormValue("description") log.Printf("CONSOLE WEB add key %s -> %s -> %s", start_key, description, next_key) if start_key != "" && description != "" { key, err := qs.AddStep(start_key, description, next_key) log.Printf("QW is error? %v key: %v", err, key) render.Redirect("/new_keys") } else { render.HTML(200, "console/new_keys", w.AddCurrentUser(GetKeysInfo("Невалидные значения ключа или ответа", qs), request, db)) } }) r.Post("/delete_key/:key", w.LoginRequired, w.AutHandler.CheckIncludeAnyRole(MANAGER), func(params martini.Params, render render.Render) { key := params["key"] err := qs.DeleteStep(key) log.Printf("CONSOLE WEB will delete %v (%v)", key, err) render.Redirect("/new_keys") }) r.Post("/update_key/:key", w.LoginRequired, w.AutHandler.CheckIncludeAnyRole(MANAGER), func(params martini.Params, render render.Render, request *http.Request) { key_id := params["key"] start_key := request.FormValue("start-key") next_key := request.FormValue("next-key") description := request.FormValue("description") err := qs.UpdateStep(key_id, start_key, description, next_key) log.Printf("CONSOLE WEB was update key %s %s %s %s\n err? %v", key_id, start_key, description, next_key, err) render.Redirect("/new_keys") }) r.Get("/delete_key_all", w.LoginRequired, w.AutHandler.CheckIncludeAnyRole(MANAGER), func(render render.Render) { log.Printf("CONSOLE WEB was delete all keys") qs.Steps.RemoveAll(bson.M{}) render.Redirect("/new_keys") }) return r }