package controllers import ( "errors" "fmt" "git.readonly.ch/bouzoure/popvaud-people/helpers" "git.readonly.ch/bouzoure/popvaud-people/models" "github.com/gofiber/fiber/v2" "gorm.io/gorm" ) func Roles(c *fiber.Ctx) error { db, err := helpers.GetDatabase() if err != nil { return err } var roles []models.Role result := db.Order("name collate nocase asc").Find(&roles) if result.Error != nil && !errors.Is(result.Error, gorm.ErrRecordNotFound) { return err } return c.Render("roles", fiber.Map{ "PageTitle": "Rôles", "Roles": roles, }) } func RoleShow(c *fiber.Ctx) error { id := c.Params("id") db, err := helpers.GetDatabase() if err != nil { return err } var role models.Role result := db.Find(&role, "id = ?", id) if errors.Is(result.Error, gorm.ErrRecordNotFound) { return fiber.NewError(fiber.StatusNotFound, "Not found") } if result.Error != nil { return result.Error } title := fmt.Sprintf( "%s | Rôles", role.Name, ) return c.Render("role", fiber.Map{ "PageTitle": title, "Role": role, }) } func RoleAdd(c *fiber.Ctx) error { var role models.Role var errors []string db, err := helpers.GetDatabase() if err != nil { return err } if c.Method() == "POST" { // Role name role.Name = c.FormValue("name") if len(role.Name) > 100 || len(role.Name) < 1 { errors = append(errors, "Le nom doit contentir entre 1 et 100 caractères") } // Member permissions role.ShowMember = (c.FormValue("show_member") == "on") role.CreateMember = (c.FormValue("create_member") == "on") role.EditMember = (c.FormValue("edit_member") == "on") role.ShowArchivedMember = (c.FormValue("show_archived_member") == "on") role.ArchiveMember = (c.FormValue("archive_member") == "on") role.RestoreMember = (c.FormValue("restore_member") == "on") role.PurgeMember = (c.FormValue("purge_member") == "on") role.ConvertMemberToContact = (c.FormValue("convert_member_to_contact") == "on") role.ExportMember = (c.FormValue("export_member") == "on") // Contact permissions role.ShowContact = (c.FormValue("show_contact") == "on") role.CreateContact = (c.FormValue("create_contact") == "on") role.EditContact = (c.FormValue("edit_contact") == "on") role.ShowArchivedContact = (c.FormValue("show_archived_contact") == "on") role.ArchiveContact = (c.FormValue("archive_contact") == "on") role.RestoreContact = (c.FormValue("restore_contact") == "on") role.PurgeContact = (c.FormValue("purge_contact") == "on") role.ConvertContactToMember = (c.FormValue("convert_contact_to_member") == "on") role.ExportContact = (c.FormValue("export_contact") == "on") if len(errors) == 0 { result := db.Create(&role) if result.Error != nil { return result.Error } else { c.Redirect(fmt.Sprintf( "/admin/roles/%d", role.ID, )) } } } return c.Render("role_form", fiber.Map{ "PageTitle": "Ajouter un rôle", "role": role, "Errors": errors, }) } func RoleEdit(c *fiber.Ctx) error { id := c.Params("id") db, err := helpers.GetDatabase() if err != nil { return err } var role models.Role result := db.Find(&role, "id = ?", id) if errors.Is(result.Error, gorm.ErrRecordNotFound) { return fiber.NewError(fiber.StatusNotFound, "Not found") } if result.Error != nil { return result.Error } title := fmt.Sprintf( "%s | Modifier rôle", role.Name, ) var errors []string if c.Method() == "POST" { // Role name role.Name = c.FormValue("name") if len(role.Name) > 100 || len(role.Name) < 1 { errors = append(errors, "Le nom doit contentir entre 1 et 100 caractères") } // Member permissions role.ShowMember = (c.FormValue("show_member") == "on") role.CreateMember = (c.FormValue("create_member") == "on") role.EditMember = (c.FormValue("edit_member") == "on") role.ShowArchivedMember = (c.FormValue("show_archived_member") == "on") role.ArchiveMember = (c.FormValue("archive_member") == "on") role.RestoreMember = (c.FormValue("restore_member") == "on") role.PurgeMember = (c.FormValue("purge_member") == "on") role.ConvertMemberToContact = (c.FormValue("convert_member_to_contact") == "on") role.ExportMember = (c.FormValue("export_member") == "on") // Contact permissions role.ShowContact = (c.FormValue("show_contact") == "on") role.CreateContact = (c.FormValue("create_contact") == "on") role.EditContact = (c.FormValue("edit_contact") == "on") role.ShowArchivedContact = (c.FormValue("show_archived_contact") == "on") role.ArchiveContact = (c.FormValue("archive_contact") == "on") role.RestoreContact = (c.FormValue("restore_contact") == "on") role.PurgeContact = (c.FormValue("purge_contact") == "on") role.ConvertContactToMember = (c.FormValue("convert_contact_to_member") == "on") role.ExportContact = (c.FormValue("export_contact") == "on") if len(errors) == 0 { result := db.Save(&role) if result.Error != nil { return result.Error } else { c.Redirect(fmt.Sprintf( "/admin/roles/%d", role.ID, )) } } } return c.Render("role_form", fiber.Map{ "PageTitle": title, "Role": role, "Errors": errors, }) } func RoleDelete(c *fiber.Ctx) error { id := c.Params("id") db, err := helpers.GetDatabase() if err != nil { return err } result := db.Delete(&models.Role{}, id) if result.Error != nil { return result.Error } return c.Redirect("/admin/roles") }