Improve feedback form

Signed-off-by: Michael Mayer <michael@lastzero.net>
This commit is contained in:
Michael Mayer 2020-10-05 07:40:11 +02:00
parent b87e860444
commit 4e172c450a
5 changed files with 35 additions and 18 deletions

View file

@ -5,7 +5,7 @@
<translate>Your message has been sent</translate>
</v-toolbar-title>
<v-toolbar-title v-else>
<translate>Whatever it is, we'd love to hear from you!</translate>
<translate>How can we help?</translate>
</v-toolbar-title>
<!-- v-spacer></v-spacer>
@ -44,15 +44,7 @@
<v-flex xs12 class="pa-2">
<v-textarea required auto-grow flat solo hide-details browser-autocomplete="off"
v-model="form.Message" rows="10" :rules="[v => !!v || $gettext('Required')]"
:label="$gettext('Your Message')"></v-textarea>
</v-flex>
<v-flex xs12 sm6 class="pa-2">
<v-text-field flat solo hide-details required browser-autocomplete="off"
color="secondary-dark" :rules="[v => !!v || $gettext('Required')]"
background-color="secondary-light"
:label="$gettext('E-Mail')" type="email" v-model="form.UserEmail">
</v-text-field>
:label="$gettext('Message')"></v-textarea>
</v-flex>
<v-flex xs12 sm6 class="pa-2">
@ -63,6 +55,14 @@
</v-text-field>
</v-flex>
<v-flex xs12 sm6 class="pa-2">
<v-text-field flat solo hide-details required browser-autocomplete="off"
color="secondary-dark" :rules="[v => !!v || $gettext('Required')]"
background-color="secondary-light"
:label="$gettext('E-Mail')" type="email" v-model="form.UserEmail">
</v-text-field>
</v-flex>
<v-flex xs12 grow class="px-2 py-1">
<v-btn color="secondary-dark"
class="white--text ml-0"

View file

@ -64,7 +64,7 @@ export default [
name: "feedback",
path: "/feedback",
component: Feedback,
meta: {title: c.name, auth: false},
meta: {title: c.name, auth: true},
},
{
name: "license",

View file

@ -14,6 +14,13 @@ import (
// POST /api/v1/feedback
func SendFeedback(router *gin.RouterGroup) {
router.POST("/feedback", func(c *gin.Context) {
conf := service.Config()
if conf.Public() {
Abort(c, http.StatusForbidden, i18n.ErrPublic)
return
}
s := Auth(SessionID(c), acl.ResourceFeedback, acl.ActionCreate)
if s.Invalid() {
@ -21,7 +28,6 @@ func SendFeedback(router *gin.RouterGroup) {
return
}
conf := service.Config()
conf.UpdatePro()
var f form.Feedback

View file

@ -5,6 +5,7 @@ import (
"encoding/json"
"fmt"
"github.com/photoprism/photoprism/internal/form"
"github.com/photoprism/photoprism/pkg/txt"
"net/http"
"runtime"
"time"
@ -13,16 +14,17 @@ import (
var FeedbackURL = ApiURL + "/%s/feedback"
type Feedback struct {
Key string `json:"ApiKey"`
ClientVersion string `json:"ClientVersion"`
ClientOS string `json:"ClientOS"`
ClientArch string `json:"ClientArch"`
ClientCPU int `json:"ClientCPU"`
Category string `json:"Category"`
Subject string `json:"Subject"`
Message string `json:"Message"`
UserName string `json:"UserName"`
UserEmail string `json:"UserEmail"`
UserAgent string `json:"UserAgent"`
ApiKey string `json:"ApiKey"`
ClientVersion string `json:"ClientVersion"`
ClientOS string `json:"ClientOS"`
ClientArch string `json:"ClientArch"`
ClientCPU int `json:"ClientCPU"`
}
// NewFeedback creates a new photoprism.pro key request instance.
@ -38,11 +40,12 @@ func NewFeedback(version string) *Feedback {
func (c *Config) SendFeedback(f form.Feedback) (err error) {
feedback := NewFeedback(c.Version)
feedback.Category = f.Category
feedback.Subject = txt.TrimLen(f.Message, 50)
feedback.Message = f.Message
feedback.UserName = f.UserName
feedback.UserEmail = f.UserEmail
feedback.UserAgent = f.UserAgent
feedback.Key = c.Key
feedback.ApiKey = c.Key
client := &http.Client{Timeout: 60 * time.Second}
url := fmt.Sprintf(FeedbackURL, c.Key)

View file

@ -24,3 +24,11 @@ func Clip(s string, size int) string {
return s
}
func TrimLen(s string, size int) string {
if len(s) < size || size < 4 {
return s
}
return Clip(s, size-3) + "..."
}