Refactor "unsubscribe from all" (self-blacklist) behaviour.
- Add an option to toggle allowing subscribers to blacklist themselves. - Move the "unsubscribe from all" to the subscription management page
This commit is contained in:
parent
3b7902802e
commit
3fddd78ebf
|
@ -45,6 +45,10 @@ max_send_errors = 1000
|
|||
|
||||
|
||||
[privacy]
|
||||
# Allow subscribers to unsubscribe from all mailing lists and mark themselves
|
||||
# as blacklisted?
|
||||
allow_blacklist = false
|
||||
|
||||
# Allow subscribers to export data recorded on them?
|
||||
allow_export = false
|
||||
|
||||
|
|
7
main.go
7
main.go
|
@ -37,9 +37,10 @@ type constants struct {
|
|||
}
|
||||
|
||||
type privacyOptions struct {
|
||||
AllowExport bool `koanf:"allow_export"`
|
||||
AllowWipe bool `koanf:"allow_wipe"`
|
||||
Exportable map[string]bool `koanf:"-"`
|
||||
AllowBlacklist bool `koanf:"allow_blacklist"`
|
||||
AllowExport bool `koanf:"allow_export"`
|
||||
AllowWipe bool `koanf:"allow_wipe"`
|
||||
Exportable map[string]bool `koanf:"-"`
|
||||
}
|
||||
|
||||
// App contains the "global" components that are
|
||||
|
|
33
public.go
33
public.go
|
@ -39,11 +39,10 @@ type publicTpl struct {
|
|||
|
||||
type unsubTpl struct {
|
||||
publicTpl
|
||||
SubUUID string
|
||||
Unsubscribe bool
|
||||
Blacklist bool
|
||||
AllowExport bool
|
||||
AllowWipe bool
|
||||
SubUUID string
|
||||
AllowBlacklist bool
|
||||
AllowExport bool
|
||||
AllowWipe bool
|
||||
}
|
||||
|
||||
type msgTpl struct {
|
||||
|
@ -78,10 +77,9 @@ func handleSubscriptionPage(c echo.Context) error {
|
|||
blacklist, _ = strconv.ParseBool(c.FormValue("blacklist"))
|
||||
out = unsubTpl{}
|
||||
)
|
||||
out.Unsubscribe = unsub
|
||||
out.SubUUID = subUUID
|
||||
out.Blacklist = blacklist
|
||||
out.Title = "Unsubscribe from mailing list"
|
||||
out.AllowBlacklist = app.Constants.Privacy.AllowBlacklist
|
||||
out.AllowExport = app.Constants.Privacy.AllowExport
|
||||
out.AllowWipe = app.Constants.Privacy.AllowWipe
|
||||
|
||||
|
@ -95,22 +93,19 @@ func handleSubscriptionPage(c echo.Context) error {
|
|||
|
||||
// Unsubscribe.
|
||||
if unsub {
|
||||
res, err := app.Queries.Unsubscribe.Exec(campUUID, subUUID, blacklist)
|
||||
if err != nil {
|
||||
// Is blacklisting allowed?
|
||||
if !app.Constants.Privacy.AllowBlacklist {
|
||||
blacklist = false
|
||||
}
|
||||
|
||||
if _, err := app.Queries.Unsubscribe.Exec(campUUID, subUUID, blacklist); err != nil {
|
||||
app.Logger.Printf("Error unsubscribing : %v", err)
|
||||
return echo.NewHTTPError(http.StatusBadRequest,
|
||||
"There was an internal error while unsubscribing you.")
|
||||
}
|
||||
|
||||
if !blacklist {
|
||||
num, _ := res.RowsAffected()
|
||||
if num == 0 {
|
||||
return c.Render(http.StatusBadRequest, "message",
|
||||
makeMsgTpl("Already unsubscribed", "",
|
||||
`You are not subscribed to this mailing list.
|
||||
You may have already unsubscribed.`))
|
||||
}
|
||||
}
|
||||
return c.Render(http.StatusOK, "message",
|
||||
makeMsgTpl("Unsubscribed", "",
|
||||
`You have been successfully unsubscribed.`))
|
||||
}
|
||||
|
||||
return c.Render(http.StatusOK, "subscription", out)
|
||||
|
|
|
@ -1,34 +1,23 @@
|
|||
{{ define "subscription" }}
|
||||
{{ template "header" .}}
|
||||
<section>
|
||||
{{ if not .Data.Unsubscribe }}
|
||||
<h2>Unsubscribe</h2>
|
||||
<p>Do you wish to unsubscribe from this mailing list?</p>
|
||||
<form method="post">
|
||||
<div>
|
||||
<input type="hidden" name="unsubscribe" value="true" />
|
||||
<button type="submit" class="button" id="btn-unsub">Unsubscribe</button>
|
||||
</div>
|
||||
</form>
|
||||
{{ else }}
|
||||
<h2>You have been unsubscribed</h2>
|
||||
{{ if not .Data.Blacklist }}
|
||||
<div class="unsub-all">
|
||||
<p>Unsubscribe from all future communications?</p>
|
||||
<form method="post">
|
||||
<div>
|
||||
<input type="hidden" name="unsubscribe" value="true" />
|
||||
<input type="hidden" name="blacklist" value="true" />
|
||||
<button type="submit" class="button button-inline" id="btn-unsuball">
|
||||
Unsubscribe all
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
{{ else }}
|
||||
<p>You've been unsubscribed from all future communications.</p>
|
||||
<h2>Unsubscribe</h2>
|
||||
<p>Do you wish to unsubscribe from this mailing list?</p>
|
||||
<form method="post">
|
||||
<p>
|
||||
<input type="hidden" name="unsubscribe" value="true" />
|
||||
</p>
|
||||
|
||||
{{ if .Data.AllowBlacklist }}
|
||||
<p>
|
||||
<input id="privacy-blacklist" type="checkbox" name="blacklist" value="true" /> <label for="privacy-blacklist">Also unsubscribe from all future e-mails.</label>
|
||||
</p>
|
||||
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
<p>
|
||||
<button type="submit" class="button" id="btn-unsub">Unsubscribe</button>
|
||||
</p>
|
||||
</form>
|
||||
</section>
|
||||
|
||||
{{ if or .Data.AllowExport .Data.AllowWipe }}
|
||||
|
|
Loading…
Reference in New Issue