Emailing management, administration improvement, Carpooling in multimodal search
This commit is contained in:
@@ -6,7 +6,7 @@ import (
|
||||
agendastorage "git.coopgo.io/coopgo-platform/agenda/storage"
|
||||
)
|
||||
|
||||
const agendaMenu = "events"
|
||||
const agendaMenu = "agenda"
|
||||
|
||||
func (renderer *Renderer) AgendaHome(w http.ResponseWriter, r *http.Request, events []agendastorage.Event, groups map[string]any) {
|
||||
files := renderer.ThemeConfig.GetStringSlice("views.agenda.list.files")
|
||||
|
||||
@@ -11,3 +11,14 @@ func (renderer *Renderer) AuthGroups(w http.ResponseWriter, r *http.Request, gro
|
||||
|
||||
renderer.RenderNoLayout("groups switch", w, r, files, state)
|
||||
}
|
||||
|
||||
func (renderer *Renderer) AuthOnboarding(w http.ResponseWriter, r *http.Request, key string, onboarding any) {
|
||||
files := renderer.ThemeConfig.GetStringSlice("views.auth.onboarding.files")
|
||||
state := NewState(r, renderer.ThemeConfig, "")
|
||||
state.ViewState = map[string]any{
|
||||
"key": key,
|
||||
"onboarding": onboarding,
|
||||
}
|
||||
|
||||
renderer.RenderNoLayout("onboarding", w, r, files, state)
|
||||
}
|
||||
|
||||
13
renderer/directory.go
Normal file
13
renderer/directory.go
Normal file
@@ -0,0 +1,13 @@
|
||||
package renderer
|
||||
|
||||
import "net/http"
|
||||
|
||||
const directoryMenu = "directory"
|
||||
|
||||
func (renderer *Renderer) DirectoryHome(w http.ResponseWriter, r *http.Request) {
|
||||
files := renderer.ThemeConfig.GetStringSlice("views.directory.home.files")
|
||||
state := NewState(r, renderer.ThemeConfig, directoryMenu)
|
||||
state.ViewState = map[string]any{}
|
||||
|
||||
renderer.Render("directory", w, r, files, state)
|
||||
}
|
||||
@@ -5,6 +5,8 @@ import (
|
||||
"fmt"
|
||||
"html/template"
|
||||
"time"
|
||||
|
||||
"gitlab.scity.coop/maas/navitia-golang/types"
|
||||
)
|
||||
|
||||
func TimeFrom(d any) *time.Time {
|
||||
@@ -68,6 +70,16 @@ func Dict(v ...interface{}) map[string]interface{} {
|
||||
return dict
|
||||
}
|
||||
|
||||
func WalkingLength(s types.Section) (l int) {
|
||||
l = 0
|
||||
if s.Mode == "walking" {
|
||||
for _, p := range s.Path {
|
||||
l = l + int(p.Length)
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func strval(v interface{}) string {
|
||||
switch v := v.(type) {
|
||||
case string:
|
||||
@@ -82,3 +94,7 @@ func strval(v interface{}) string {
|
||||
return fmt.Sprintf("%v", v)
|
||||
}
|
||||
}
|
||||
|
||||
func Divide[V int | float64](a, b V) V {
|
||||
return a / b
|
||||
}
|
||||
|
||||
17
renderer/group.go
Normal file
17
renderer/group.go
Normal file
@@ -0,0 +1,17 @@
|
||||
package renderer
|
||||
|
||||
import "net/http"
|
||||
|
||||
const groupsettingsMenu = "groupsettings"
|
||||
|
||||
func (renderer *Renderer) GroupSettingsDisplay(w http.ResponseWriter, r *http.Request, group any, groupmembers []any, admins []any) {
|
||||
files := renderer.ThemeConfig.GetStringSlice("views.group.settings.files")
|
||||
state := NewState(r, renderer.ThemeConfig, groupsettingsMenu)
|
||||
state.ViewState = map[string]any{
|
||||
"group": group,
|
||||
"members": groupmembers,
|
||||
"admins": admins,
|
||||
}
|
||||
|
||||
renderer.Render("group settings", w, r, files, state)
|
||||
}
|
||||
22
renderer/journeys.go
Normal file
22
renderer/journeys.go
Normal file
@@ -0,0 +1,22 @@
|
||||
package renderer
|
||||
|
||||
import "net/http"
|
||||
|
||||
const journeysMenu = "journeys"
|
||||
|
||||
func (renderer *Renderer) JourneysSearch(w http.ResponseWriter, r *http.Request, carpools any, transitjourneys any, vehicles []any, searched bool, departure any, destination any, departuredate string, departuretime string) {
|
||||
files := renderer.ThemeConfig.GetStringSlice("views.journeys.search.files")
|
||||
state := NewState(r, renderer.ThemeConfig, journeysMenu)
|
||||
state.ViewState = map[string]any{
|
||||
"searched": searched,
|
||||
"departuredate": departuredate,
|
||||
"departuretime": departuretime,
|
||||
"departure": departure,
|
||||
"destination": destination,
|
||||
"journeys": transitjourneys,
|
||||
"carpools": carpools,
|
||||
"vehicles": vehicles,
|
||||
}
|
||||
|
||||
renderer.Render("journeys", w, r, files, state)
|
||||
}
|
||||
22
renderer/mailer.go
Normal file
22
renderer/mailer.go
Normal file
@@ -0,0 +1,22 @@
|
||||
package renderer
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"git.coopgo.io/coopgo-platform/emailing"
|
||||
"github.com/spf13/viper"
|
||||
)
|
||||
|
||||
func NewEmailingHandler(cfg *viper.Viper) (*emailing.Mailer, error) {
|
||||
templates_dir := cfg.GetString("templates.root")
|
||||
|
||||
theme := viper.New()
|
||||
theme.SetConfigName("config")
|
||||
theme.AddConfigPath(templates_dir)
|
||||
err := theme.ReadInConfig()
|
||||
if err != nil {
|
||||
panic(fmt.Errorf("fatal error config file: %w", err))
|
||||
}
|
||||
|
||||
return emailing.NewMailer(templates_dir, theme.Sub("emails"), cfg.Sub("emailing.smtp"))
|
||||
}
|
||||
@@ -7,6 +7,7 @@ import (
|
||||
|
||||
"git.coopgo.io/coopgo-apps/parcoursmob/utils/icons"
|
||||
"git.coopgo.io/coopgo-apps/parcoursmob/utils/identification"
|
||||
"git.coopgo.io/coopgo-platform/emailing"
|
||||
"git.coopgo.io/coopgo-platform/groups-management/storage"
|
||||
"github.com/spf13/viper"
|
||||
)
|
||||
@@ -15,6 +16,7 @@ type Renderer struct {
|
||||
TemplatesDir string
|
||||
GlobalConfig *viper.Viper
|
||||
ThemeConfig *viper.Viper
|
||||
Mailer *emailing.Mailer
|
||||
}
|
||||
|
||||
func NewRenderer(global *viper.Viper, templates_dir string) *Renderer {
|
||||
@@ -50,6 +52,9 @@ func (renderer *Renderer) Render(name string, w http.ResponseWriter, r *http.Req
|
||||
"genderISO5218": GenderISO5218,
|
||||
"dict": Dict,
|
||||
"json": JSON,
|
||||
"walkingLength": WalkingLength,
|
||||
"divideFloat64": Divide[float64],
|
||||
"divideInt": Divide[int],
|
||||
},
|
||||
)
|
||||
t = template.Must(t.ParseFiles(prefixed_files...))
|
||||
@@ -72,6 +77,8 @@ func (renderer *Renderer) RenderNoLayout(name string, w http.ResponseWriter, r *
|
||||
"genderISO5218": GenderISO5218,
|
||||
"dict": Dict,
|
||||
"json": JSON,
|
||||
"divideFloat64": Divide[float64],
|
||||
"divideInt": Divide[int],
|
||||
},
|
||||
)
|
||||
|
||||
@@ -119,7 +126,7 @@ func NewState(r *http.Request, themeConfig *viper.Viper, menuState string) Rende
|
||||
|
||||
ls := LayoutState{
|
||||
AdministrationState: AdministrationState{
|
||||
Display: modules["administration"].(bool),
|
||||
Display: modules["administration"] != nil && modules["administration"].(bool),
|
||||
Active: menuState == administrationMenu,
|
||||
},
|
||||
|
||||
@@ -128,57 +135,66 @@ func NewState(r *http.Request, themeConfig *viper.Viper, menuState string) Rende
|
||||
{
|
||||
Title: "Tableau de bord",
|
||||
Link: "/app/",
|
||||
Active: menuState == "dashboard",
|
||||
Active: menuState == dashboardMenu,
|
||||
Icon: "hero:outline/home",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
if modules["beneficiaries"].(bool) {
|
||||
if modules["beneficiaries"] != nil && modules["beneficiaries"].(bool) {
|
||||
ls.MenuItems = append(ls.MenuItems, MenuItem{
|
||||
Title: "Bénéficiaires",
|
||||
Link: "/app/beneficiaries/",
|
||||
Active: menuState == "beneficiaries",
|
||||
Active: menuState == beneficiariesMenu,
|
||||
Icon: "hero:outline/user-group",
|
||||
})
|
||||
}
|
||||
|
||||
if modules["journeys"].(bool) {
|
||||
if modules["journeys"] != nil && modules["journeys"].(bool) {
|
||||
ls.MenuItems = append(ls.MenuItems, MenuItem{
|
||||
Title: "Déplacements",
|
||||
Link: "/app/journeys/",
|
||||
Active: menuState == "journeys",
|
||||
Active: menuState == journeysMenu,
|
||||
Icon: "hero:outline/map",
|
||||
})
|
||||
}
|
||||
|
||||
if modules["vehicles"].(bool) {
|
||||
if modules["vehicles"] != nil && modules["vehicles"].(bool) {
|
||||
ls.MenuItems = append(ls.MenuItems, MenuItem{
|
||||
Title: "Véhicules partagés",
|
||||
Link: "/app/vehicles/",
|
||||
Active: menuState == "vehicles",
|
||||
Active: menuState == vehiclesMenu,
|
||||
Icon: "tabler-icons:car",
|
||||
})
|
||||
}
|
||||
|
||||
if modules["vehicles_management"].(bool) {
|
||||
if modules["vehicles_management"] != nil && modules["vehicles_management"].(bool) {
|
||||
ls.MenuItems = append(ls.MenuItems, MenuItem{
|
||||
Title: "Gestion des véhicules",
|
||||
Link: "/app/vehicles-management/",
|
||||
Active: menuState == "vehicles_management",
|
||||
Active: menuState == vehiclesmanagementMenu,
|
||||
Icon: "hero:outline/briefcase",
|
||||
})
|
||||
}
|
||||
|
||||
if modules["agenda"].(bool) {
|
||||
if modules["agenda"] != nil && modules["agenda"].(bool) {
|
||||
ls.MenuItems = append(ls.MenuItems, MenuItem{
|
||||
Title: "Agenda dispositifs",
|
||||
Link: "/app/agenda/",
|
||||
Active: menuState == "agenda",
|
||||
Active: menuState == agendaMenu,
|
||||
Icon: "hero:outline/calendar",
|
||||
})
|
||||
}
|
||||
|
||||
if modules["directory"] != nil && modules["directory"].(bool) {
|
||||
ls.MenuItems = append(ls.MenuItems, MenuItem{
|
||||
Title: "Répertoire solutions",
|
||||
Link: "/app/directory/",
|
||||
Active: menuState == directoryMenu,
|
||||
Icon: "hero:outline/document-text",
|
||||
})
|
||||
}
|
||||
|
||||
return RenderState{
|
||||
IconSet: icons.NewIconSet(iconset),
|
||||
Group: group,
|
||||
|
||||
Reference in New Issue
Block a user