diff --git a/go.mod b/go.mod index ddbcdb4..e37eb9e 100755 --- a/go.mod +++ b/go.mod @@ -2,13 +2,13 @@ module git.coopgo.io/coopgo-apps/parcoursmob go 1.18 -// replace git.coopgo.io/coopgo-platform/mobility-accounts => ../../coopgo-platform/mobility-accounts/ +replace git.coopgo.io/coopgo-platform/mobility-accounts => ../../coopgo-platform/mobility-accounts/ -// replace git.coopgo.io/coopgo-platform/groups-management => ../../coopgo-platform/groups-management/ +replace git.coopgo.io/coopgo-platform/groups-management => ../../coopgo-platform/groups-management/ -// replace git.coopgo.io/coopgo-platform/fleets => ../../coopgo-platform/fleets/ +replace git.coopgo.io/coopgo-platform/fleets => ../../coopgo-platform/fleets/ -// replace git.coopgo.io/coopgo-platform/agenda => ../../coopgo-platform/agenda/ +replace git.coopgo.io/coopgo-platform/agenda => ../../coopgo-platform/agenda/ // replace git.coopgo.io/coopgo-platform/emailing => ../../coopgo-platform/emailing/ diff --git a/handlers/application/agenda.go b/handlers/application/agenda.go index 70a1095..7b9c321 100755 --- a/handlers/application/agenda.go +++ b/handlers/application/agenda.go @@ -4,6 +4,7 @@ import ( "context" "encoding/json" "fmt" + "io" "net/http" "sort" "strconv" @@ -13,11 +14,13 @@ import ( formvalidators "git.coopgo.io/coopgo-apps/parcoursmob/utils/form-validators" "git.coopgo.io/coopgo-apps/parcoursmob/utils/identification" "git.coopgo.io/coopgo-apps/parcoursmob/utils/sorting" + filestorage "git.coopgo.io/coopgo-apps/parcoursmob/utils/storage" agenda "git.coopgo.io/coopgo-platform/agenda/grpcapi" agendastorage "git.coopgo.io/coopgo-platform/agenda/storage" groupsmanagement "git.coopgo.io/coopgo-platform/groups-management/grpcapi" "git.coopgo.io/coopgo-platform/groups-management/storage" mobilityaccounts "git.coopgo.io/coopgo-platform/mobility-accounts/grpcapi" + "github.com/google/uuid" "github.com/gorilla/mux" "google.golang.org/protobuf/types/known/structpb" "google.golang.org/protobuf/types/known/timestamppb" @@ -237,7 +240,18 @@ func (h *ApplicationHandler) AgendaDisplayEvent(w http.ResponseWriter, r *http.R } } - h.Renderer.AgendaDisplayEvent(w, r, resp.Event.ToStorageType(), groupresp.Group.ToStorageType(), subscribers, accounts) + documents:= []filestorage.FileInfo{} + files := h.filestorage.List(filestorage.PREFIX_AGENDA + "/" + eventid) + for _, f := range files { + if strings.HasPrefix(f.Key, eventid) { + documents = append(documents, f) + } + } + + events_file_types := h.config.GetStringSlice("modules.agenda.documents_types") + file_types_map := h.config.GetStringMapString("storage.files.file_types") + + h.Renderer.AgendaDisplayEvent(w, r, resp.Event.ToStorageType(), groupresp.Group.ToStorageType(), events_file_types, file_types_map, documents, subscribers, accounts) } func (h *ApplicationHandler) AgendaSubscribeEvent(w http.ResponseWriter, r *http.Request) { @@ -685,3 +699,70 @@ func (h *ApplicationHandler) AgendaHistoryEvent(w http.ResponseWriter, r *http.R h.Renderer.AgendaHistoryEvent(w, r, resp.Event.ToStorageType(), groupresp.Group.ToStorageType(), subscribers, accounts) } +////// ADD DOCUMENTS ////// +func (h *ApplicationHandler) EventDocuments(w http.ResponseWriter, r *http.Request) { + vars := mux.Vars(r) + eventID := vars["eventid"] + + //r.ParseForm() + r.ParseMultipartForm(100 * 1024 * 1024) + + document_type := r.FormValue("type") + document_name := r.FormValue("name") + + file, header, err := r.FormFile("file-upload") + if err != nil { + fmt.Println(err) + return + } + defer file.Close() + + fileid := uuid.NewString() + + metadata := map[string]string{ + "type": document_type, + "name": document_name, + } + + fmt.Println("metadata", metadata) + fmt.Println(filestorage.PREFIX_AGENDA) + + // if err := h.filestorage.Put(file, filestorage.PREFIX_AGENDA, fmt.Sprintf("%s/%s_%s", eventID, fileid, header.Filename), header.Size, metadata); err != nil { + // fmt.Println(err) + // w.WriteHeader(http.StatusInternalServerError) + // return + // } + + // if err := h.filestorage.Put(file, filestorage.PREFIX_BENEFICIARIES, fmt.Sprintf("%s/%s_%s", eventID, fileid, header.Filename), header.Size, metadata); err != nil { + // fmt.Println(err) + // w.WriteHeader(http.StatusInternalServerError) + // return + // } + + http.Redirect(w, r, fmt.Sprintf("/app/agenda/%s", eventID), http.StatusFound) + +} + + +func (h *ApplicationHandler) EventDocumentDownload(w http.ResponseWriter, r *http.Request) { + vars := mux.Vars(r) + eventID := vars["eventid"] + document := vars["document"] + + file, info, err := h.filestorage.Get(filestorage.PREFIX_AGENDA, fmt.Sprintf("%s/%s", eventID, document)) + if err != nil { + fmt.Println(err) + w.WriteHeader(http.StatusInternalServerError) + return + } + + w.Header().Set("Content-Type", info.ContentType) + if _, err = io.Copy(w, file); err != nil { + fmt.Println(err) + w.WriteHeader(http.StatusInternalServerError) + return + } + + http.Redirect(w, r, fmt.Sprintf("/app/agenda/%s", eventID), http.StatusFound) + +} \ No newline at end of file diff --git a/handlers/application/beneficiaries.go b/handlers/application/beneficiaries.go index ad4f22a..ed11432 100755 --- a/handlers/application/beneficiaries.go +++ b/handlers/application/beneficiaries.go @@ -446,6 +446,8 @@ func (h *ApplicationHandler) BeneficiaryDocuments(w http.ResponseWriter, r *http "name": document_name, } + fmt.Println("metadata", metadata) + if err := h.filestorage.Put(file, filestorage.PREFIX_BENEFICIARIES, fmt.Sprintf("%s/%s_%s", beneficiaryID, fileid, header.Filename), header.Size, metadata); err != nil { fmt.Println(err) w.WriteHeader(http.StatusInternalServerError) diff --git a/main.go b/main.go index 1a4f88f..5edbd42 100755 --- a/main.go +++ b/main.go @@ -162,6 +162,9 @@ func main() { application.HandleFunc("/agenda/{eventid}/{subscribeid}/delete", applicationHandler.AgendaDeleteSubscribeEvent) application.HandleFunc("/agenda/{eventid}/history", applicationHandler.AgendaHistoryEvent) ///////////////////////////////////////////////////////////////////////////////////////////////////// + //////////////////Add documents in event//////////////////////// + application.HandleFunc("/agenda/{eventid}/documents", applicationHandler.EventDocuments) + application.HandleFunc("/agenda/{eventid}/documents/{document}", applicationHandler.EventDocumentDownload) export := r.PathPrefix("/exports").Subrouter() export.HandleFunc("/fleets/bookings", exportsHandler.Bookings) diff --git a/renderer/agenda.go b/renderer/agenda.go index 09f41f3..5beee6e 100755 --- a/renderer/agenda.go +++ b/renderer/agenda.go @@ -37,15 +37,18 @@ func (renderer *Renderer) AgendaCreateEvent(w http.ResponseWriter, r *http.Reque renderer.Render("agenda create event", w, r, files, state) } -func (renderer *Renderer) AgendaDisplayEvent(w http.ResponseWriter, r *http.Request, event any, group any, subscribers map[string]any, beneficiaries any) { +func (renderer *Renderer) AgendaDisplayEvent(w http.ResponseWriter, r *http.Request, event any, group any, events_file_types []string, file_types_map map[string]string, documents any, subscribers map[string]any, beneficiaries any) { files := renderer.ThemeConfig.GetStringSlice("views.agenda.display_event.files") state := NewState(r, renderer.ThemeConfig, agendaMenu) state.ViewState = map[string]any{ - "event": event, - "group": group, - "subscribers": subscribers, - "beneficiaries": beneficiaries, + "event": event, + "group": group, + "events_file_types": events_file_types, + "file_types_map": file_types_map, + "documents": documents, + "subscribers": subscribers, + "beneficiaries": beneficiaries, } renderer.Render("agenda create event", w, r, files, state) @@ -100,3 +103,18 @@ func (renderer *Renderer) AgendaDeleteEvent(w http.ResponseWriter, r *http.Reque renderer.Render("event_deleteEvent", w, r, files, state) } + +////////Event documents//////////////////////// +// func (renderer *Renderer) EventDocuments(w http.ResponseWriter, r *http.Request, event any, documents []any) { +// files := renderer.ThemeConfig.GetStringSlice("views.agenda.event_files.files") +// state := NewState(r, renderer.ThemeConfig, agendaMenu) + +// state.ViewState = map[string]any{ +// "event": event, +// "documents": documents, +// "eventid": event.(map[string]any)["id"], +// "eventtitle": event.(map[string]any)["title"], +// } + +// renderer.Render("event_files", w, r, files, state) +// } \ No newline at end of file diff --git a/utils/storage/files.go b/utils/storage/files.go index aad384d..b976bdc 100755 --- a/utils/storage/files.go +++ b/utils/storage/files.go @@ -10,6 +10,7 @@ import ( const ( PREFIX_BENEFICIARIES = "beneficiaries" PREFIX_BOOKINGS = "fleets_bookings" + PREFIX_AGENDA = "event_files" ) type FileInfo struct {