Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Public Archive Improvements #1262

Merged
merged 11 commits into from
Apr 8, 2023
51 changes: 43 additions & 8 deletions cmd/archive.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import (
type campArchive struct {
UUID string `json:"uuid"`
Subject string `json:"subject"`
Content string `json:"content"`
CreatedAt null.Time `json:"created_at"`
SendAt null.Time `json:"send_at"`
URL string `json:"url"`
Expand All @@ -28,7 +29,7 @@ func handleGetCampaignArchives(c echo.Context) error {
pg = app.paginator.NewFromURL(c.Request().URL.Query())
)

camps, total, err := getCampaignArchives(pg.Offset, pg.Limit, app)
camps, total, err := getCampaignArchives(pg.Offset, pg.Limit, false, app)
if err != nil {
return err
}
Expand All @@ -51,11 +52,12 @@ func handleGetCampaignArchives(c echo.Context) error {
// handleGetCampaignArchivesFeed renders the public campaign archives RSS feed.
func handleGetCampaignArchivesFeed(c echo.Context) error {
var (
app = c.Get("app").(*App)
pg = app.paginator.NewFromURL(c.Request().URL.Query())
app = c.Get("app").(*App)
pg = app.paginator.NewFromURL(c.Request().URL.Query())
showFullContent = app.constants.EnablePublicArchiveRSSContent
)

camps, _, err := getCampaignArchives(pg.Offset, pg.Limit, app)
camps, _, err := getCampaignArchives(pg.Offset, pg.Limit, showFullContent, app)
if err != nil {
return err
}
Expand All @@ -71,6 +73,7 @@ func handleGetCampaignArchivesFeed(c echo.Context) error {
out = append(out, &feeds.Item{
Title: c.Subject,
Link: &feeds.Link{Href: c.URL},
Content: c.Content,
Created: pubDate,
})
}
Expand All @@ -97,7 +100,7 @@ func handleCampaignArchivesPage(c echo.Context) error {
pg = app.paginator.NewFromURL(c.Request().URL.Query())
)

out, total, err := getCampaignArchives(pg.Offset, pg.Limit, app)
out, total, err := getCampaignArchives(pg.Offset, pg.Limit, false, app)
if err != nil {
return err
}
Expand Down Expand Up @@ -158,7 +161,28 @@ func handleCampaignArchivePage(c echo.Context) error {
return c.HTML(http.StatusOK, string(msg.Body()))
}

func getCampaignArchives(offset, limit int, app *App) ([]campArchive, int, error) {
// handleCampaignArchivePageLatest renders the latest public campaign.
func handleCampaignArchivePageLatest(c echo.Context) error {
var (
app = c.Get("app").(*App)
)

camps, _, err := getCampaignArchives(0, 1, true, app)
if err != nil {
return err
}

if len(camps) == 0 {
return c.Render(http.StatusNotFound, tplMessage,
makeMsgTpl(app.i18n.T("public.notFoundTitle"), "", app.i18n.T("public.campaignNotFound")))
}

camp := camps[0]

return c.HTML(http.StatusOK, camp.Content)
}

func getCampaignArchives(offset, limit int, renderBody bool, app *App) ([]campArchive, int, error) {
pubCamps, total, err := app.core.GetArchivedCampaigns(offset, limit)
if err != nil {
return []campArchive{}, total, echo.NewHTTPError(http.StatusInternalServerError, app.i18n.T("public.errorFetchingCampaign"))
Expand All @@ -172,13 +196,24 @@ func getCampaignArchives(offset, limit int, app *App) ([]campArchive, int, error
out := make([]campArchive, 0, len(msgs))
for _, m := range msgs {
camp := m.Campaign
out = append(out, campArchive{

archive := campArchive{
UUID: camp.UUID,
Subject: camp.Subject,
CreatedAt: camp.CreatedAt,
SendAt: camp.SendAt,
URL: app.constants.ArchiveURL + "/" + camp.UUID,
})
}

if renderBody {
msg, err := app.manager.NewCampaignMessage(camp, m.Subscriber)
if err != nil {
return []campArchive{}, total, err
}
archive.Content = string(msg.Body())
}

out = append(out, archive)
}

return out, total, nil
Expand Down
1 change: 1 addition & 0 deletions cmd/handlers.go
Original file line number Diff line number Diff line change
Expand Up @@ -202,6 +202,7 @@ func initHTTPHandlers(e *echo.Echo, app *App) {
e.GET("/archive", handleCampaignArchivesPage)
e.GET("/archive.xml", handleGetCampaignArchivesFeed)
e.GET("/archive/:uuid", handleCampaignArchivePage)
e.GET("/archive/latest", handleCampaignArchivePageLatest)
}

e.GET("/public/custom.css", serveCustomApperance("public.custom_css"))
Expand Down
1 change: 1 addition & 0 deletions cmd/init.go
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ type constants struct {
NotifyEmails []string `koanf:"notify_emails"`
EnablePublicSubPage bool `koanf:"enable_public_subscription_page"`
EnablePublicArchive bool `koanf:"enable_public_archive"`
EnablePublicArchiveRSSContent bool `koanf:"enable_public_archive_rss_content"`
SendOptinConfirmation bool `koanf:"send_optin_confirmation"`
Lang string `koanf:"lang"`
DBBatchSize int `koanf:"batch_size"`
Expand Down
1 change: 1 addition & 0 deletions cmd/upgrade.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ var migList = []migFunc{
{"v2.2.0", migrations.V2_2_0},
{"v2.3.0", migrations.V2_3_0},
{"v2.4.0", migrations.V2_4_0},
{"v2.5.0", migrations.V2_5_0},
}

// upgrade upgrades the database to the current version by running SQL migration files
Expand Down
58 changes: 38 additions & 20 deletions frontend/src/views/settings/general.vue
Original file line number Diff line number Diff line change
Expand Up @@ -43,27 +43,45 @@
</b-field>

<hr />
<div class="columns">
<div class="column is-4">
<b-field :label="$t('settings.general.enablePublicSubPage')"
:message="$t('settings.general.enablePublicSubPageHelp')">
<b-switch v-model="data['app.enable_public_subscription_page']"
name="app.enable_public_subscription_page" />
</b-field>
</div>
<div class="column is-4">
<b-field :label="$t('settings.general.enablePublicArchive')"
:message="$t('settings.general.enablePublicArchiveHelp')">
<b-switch v-model="data['app.enable_public_archive']"
name="app.enable_public_archive" />
</b-field>

<div>
<h2 class="is-size-4 mb-5">{{ $tc('globals.terms.subscriptions', 2) }}</h2>
<div class="columns">
<div class="column is-4">
<b-field :label="$t('settings.general.enablePublicSubPage')"
:message="$t('settings.general.enablePublicSubPageHelp')">
<b-switch v-model="data['app.enable_public_subscription_page']"
name="app.enable_public_subscription_page" />
</b-field>
</div>
<div class="column is-4">
<b-field :label="$t('settings.general.sendOptinConfirm')"
:message="$t('settings.general.sendOptinConfirmHelp')">
<b-switch v-model="data['app.send_optin_confirmation']"
name="app.send_optin_confirmation" />
</b-field>
</div>
</div>
<div class="column is-4">
<b-field :label="$t('settings.general.sendOptinConfirm')"
:message="$t('settings.general.sendOptinConfirmHelp')">
<b-switch v-model="data['app.send_optin_confirmation']"
name="app.send_optin_confirmation" />
</b-field>
</div>
<hr />

<div>
<h2 class="is-size-4 mb-5">{{ $t('campaigns.archive') }}</h2>
<div class="columns">
<div class="column is-4">
<b-field :label="$t('settings.general.enablePublicArchive')"
:message="$t('settings.general.enablePublicArchiveHelp')">
<b-switch v-model="data['app.enable_public_archive']"
name="app.enable_public_archive" />
</b-field>
</div>
<div class="column is-4">
<b-field :label="$t('settings.general.enablePublicArchiveRSSContent')"
:message="$t('settings.general.enablePublicArchiveRSSContentHelp')">
<b-switch v-model="data['app.enable_public_archive_rss_content']"
name="app.enable_public_archive_rss_content" />
</b-field>
</div>
</div>
</div>

Expand Down
2 changes: 2 additions & 0 deletions i18n/ca.json
Original file line number Diff line number Diff line change
Expand Up @@ -378,6 +378,8 @@
"settings.general.enablePublicArchiveHelp": "Publica les campanyes on arxivar està habilitat en el lloc web públic.",
"settings.general.enablePublicSubPage": "Activa la pàgina de subscripció pública",
"settings.general.enablePublicSubPageHelp": "Mostra una pàgina de subscripció pública amb totes les llistes públiques perquè la gent es subscrigui.",
"settings.general.enablePublicArchiveRSSContent": "Enable full content in RSS feed",
"settings.general.enablePublicArchiveRSSContentHelp": "Include the full e-mail content in the RSS feed. If disabled, only the title and link elements will be included.",
"settings.general.faviconURL": "Favicon URL",
"settings.general.faviconURLHelp": "(Opcional) URL completa del favicon estàtic que serà visible a l'usuari, com ara la pàgina de cancel·lació de la subscripció.",
"settings.general.fromEmail": "Correu electrònic \"Remitent\" per defecte",
Expand Down
2 changes: 2 additions & 0 deletions i18n/cs-cz.json
Original file line number Diff line number Diff line change
Expand Up @@ -378,6 +378,8 @@
"settings.general.enablePublicArchiveHelp": "Zveřejnit kampaně, pro které je povolena archivace na veřejné web stránce.",
"settings.general.enablePublicSubPage": "Povolit veřejnou stránku odběru",
"settings.general.enablePublicSubPageHelp": "Zobrazit veřejnou stránku odběru se všemi veřejnými seznamy pro lidi k odběru.",
"settings.general.enablePublicArchiveRSSContent": "Enable full content in RSS feed",
"settings.general.enablePublicArchiveRSSContentHelp": "Include the full e-mail content in the RSS feed. If disabled, only the title and link elements will be included.",
"settings.general.faviconURL": "Adresa URL ikony favicon",
"settings.general.faviconURLHelp": "(Volitelné) Úplná adresa URL k zobrazení statické ikony favicon na pohledu zaměřeném na uživatele, jako je stránka pro zrušení odběru.",
"settings.general.fromEmail": "Výchozí e-mail `od`",
Expand Down
2 changes: 2 additions & 0 deletions i18n/cy.json
Original file line number Diff line number Diff line change
Expand Up @@ -378,6 +378,8 @@
"settings.general.enablePublicArchiveHelp": "Cyhoeddi ymgyrchoedd lle mae archifo wedi'i alluogi ar y wefan gyhoeddus.",
"settings.general.enablePublicSubPage": "Galluogi tudalen tanysgrifio gyhoeddus",
"settings.general.enablePublicSubPageHelp": "Dangos tudalen tanysgrifio gyhoeddus gyda'r holl restrau cyhoeddus y gall pobl danysgrifio iddynt.",
"settings.general.enablePublicArchiveRSSContent": "Enable full content in RSS feed",
"settings.general.enablePublicArchiveRSSContentHelp": "Include the full e-mail content in the RSS feed. If disabled, only the title and link elements will be included.",
"settings.general.faviconURL": "URL Favicon",
"settings.general.faviconURLHelp": "Dangos URL llawn (dewisol) i'r favicon statig ar y gwedd defnyddiwr",
"settings.general.fromEmail": "E-bost 'gan' diofyn",
Expand Down
2 changes: 2 additions & 0 deletions i18n/de.json
Original file line number Diff line number Diff line change
Expand Up @@ -378,6 +378,8 @@
"settings.general.enablePublicArchiveHelp": "Veröffentlichen Sie Kampagnen, für die die Archivierung aktiviert ist, auf der öffentlichen Website.",
"settings.general.enablePublicSubPage": "Aktiviere eine öffentliche Abonnement Seite",
"settings.general.enablePublicSubPageHelp": "Zeige eine öffentliche Abonnement Seite mit allen öffentlichen Listen, die Personen abonnieren können.",
"settings.general.enablePublicArchiveRSSContent": "Enable full content in RSS feed",
"settings.general.enablePublicArchiveRSSContentHelp": "Include the full e-mail content in the RSS feed. If disabled, only the title and link elements will be included.",
"settings.general.faviconURL": "Favicon URL",
"settings.general.faviconURLHelp": "(Optional) Vollständige URL zu einem statischen Favicon, welches für angezeigten Seiten wie Abmelden benutzt werden kann.",
"settings.general.fromEmail": "Standard Absender-E-Mail",
Expand Down
2 changes: 2 additions & 0 deletions i18n/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -378,6 +378,8 @@
"settings.general.enablePublicArchiveHelp": "Publish campaigns on which archiving is enabled on the public website.",
"settings.general.enablePublicSubPage": "Enable public subscription page",
"settings.general.enablePublicSubPageHelp": "Show a public subscription page with all the public lists for people to subscribe.",
"settings.general.enablePublicArchiveRSSContent": "Show full content in RSS feed",
"settings.general.enablePublicArchiveRSSContentHelp": "Show full full e-mail content in the RSS feed. If disabled, only the title and link elements are shown.",
"settings.general.faviconURL": "Favicon URL",
"settings.general.faviconURLHelp": "(Optional) full URL to the static favicon to be displayed on user facing view such as the unsubscription page.",
"settings.general.fromEmail": "Default `from` email",
Expand Down
2 changes: 2 additions & 0 deletions i18n/es.json
Original file line number Diff line number Diff line change
Expand Up @@ -379,6 +379,8 @@
"settings.general.enablePublicArchiveHelp": "Publish campaigns on which archiving is enabled on the public website.",
"settings.general.enablePublicSubPage": "Habilitar pagina publica de suscripción",
"settings.general.enablePublicSubPageHelp": "Muestra una página con todas las listas públicas para suscribirse.",
"settings.general.enablePublicArchiveRSSContent": "Enable full content in RSS feed",
"settings.general.enablePublicArchiveRSSContentHelp": "Include the full e-mail content in the RSS feed. If disabled, only the title and link elements will be included.",
"settings.general.faviconURL": "URL del Favicon",
"settings.general.faviconURLHelp": "(Opcional) URL completa del Favicon estático que debe mostrarse de cara a los usuarios en páginas como la página para darse de baja",
"settings.general.fromEmail": "Correo electrónico predeterminado del remitente",
Expand Down
2 changes: 2 additions & 0 deletions i18n/fi.json
Original file line number Diff line number Diff line change
Expand Up @@ -379,6 +379,8 @@
"settings.general.enablePublicArchiveHelp": "Publish campaigns on which archiving is enabled on the public website.",
"settings.general.enablePublicSubPage": "Enable public subscription page",
"settings.general.enablePublicSubPageHelp": "Show a public subscription page with all the public lists for people to subscribe.",
"settings.general.enablePublicArchiveRSSContent": "Enable full content in RSS feed",
"settings.general.enablePublicArchiveRSSContentHelp": "Include the full e-mail content in the RSS feed. If disabled, only the title and link elements will be included.",
"settings.general.faviconURL": "Favicon URL",
"settings.general.faviconURLHelp": "(Optional) full URL to the static favicon to be displayed on user facing view such as the unsubscription page.",
"settings.general.fromEmail": "Default `from` email",
Expand Down
2 changes: 2 additions & 0 deletions i18n/fr.json
Original file line number Diff line number Diff line change
Expand Up @@ -379,6 +379,8 @@
"settings.general.enablePublicArchiveHelp": "Publier les campagnes pour lesquelles l'archivage est activé sur le site web public.",
"settings.general.enablePublicSubPage": "Activer la page d'abonnement publique",
"settings.general.enablePublicSubPageHelp": "Afficher une page d'abonnement publique avec toutes les listes publiques auxquelles les personnes peuvent s'abonner.",
"settings.general.enablePublicArchiveRSSContent": "Enable full content in RSS feed",
"settings.general.enablePublicArchiveRSSContentHelp": "Include the full e-mail content in the RSS feed. If disabled, only the title and link elements will be included.",
"settings.general.faviconURL": "URL du favicon",
"settings.general.faviconURLHelp": "(Facultatif) URL complète du favicon statique visible par l'utilisateur, comme sur la page de désabonnement.",
"settings.general.fromEmail": "Adresse e-mail `De :` par défaut",
Expand Down
2 changes: 2 additions & 0 deletions i18n/hu.json
Original file line number Diff line number Diff line change
Expand Up @@ -378,6 +378,8 @@
"settings.general.enablePublicArchiveHelp": "Nyilvános archívum felület engedélyezése, melyen az archivált kampányok megtekinthetők.",
"settings.general.enablePublicSubPage": "Nyilvános feliratkozás",
"settings.general.enablePublicSubPageHelp": "Nyilvános feliratkozási felület engedélyezése, amelyen az összes nyilvános listára fel lehet iratkozni.",
"settings.general.enablePublicArchiveRSSContent": "Enable full content in RSS feed",
"settings.general.enablePublicArchiveRSSContentHelp": "Include the full e-mail content in the RSS feed. If disabled, only the title and link elements will be included.",
"settings.general.faviconURL": "Favicon URL",
"settings.general.faviconURLHelp": "(Opcionális) a böngészőben megjelenő favicon URL-je",
"settings.general.fromEmail": "Alapértelmezett `Feladó`",
Expand Down
2 changes: 2 additions & 0 deletions i18n/it.json
Original file line number Diff line number Diff line change
Expand Up @@ -379,6 +379,8 @@
"settings.general.enablePublicArchiveHelp": "Rendere pubbliche le campagne in qui l'archivio pubblico nella pagina web è stato abilitato.",
"settings.general.enablePublicSubPage": "Attiva la pagina di iscrizione pubblica",
"settings.general.enablePublicSubPageHelp": "Visualizza una pagina di iscrizione pubblica con tutte le liste pubbliche a cui è possibile iscriversi.",
"settings.general.enablePublicArchiveRSSContent": "Enable full content in RSS feed",
"settings.general.enablePublicArchiveRSSContentHelp": "Include the full e-mail content in the RSS feed. If disabled, only the title and link elements will be included.",
"settings.general.faviconURL": "URL della favicon",
"settings.general.faviconURLHelp": "(Facoltativo) URL completo della favicon statica visibile dall'utente, come sulla pagina per annullare l'iscrizione.",
"settings.general.fromEmail": "Indirizzo mail `Mittente` predefinito",
Expand Down
2 changes: 2 additions & 0 deletions i18n/jp.json
Original file line number Diff line number Diff line change
Expand Up @@ -379,6 +379,8 @@
"settings.general.enablePublicArchiveHelp": "公開ウエブサイトに公開アーカイブOK設定されたキャンペーンを発行する。",
"settings.general.enablePublicSubPage": "公開サブスクリプションページを有効にする。",
"settings.general.enablePublicSubPageHelp": "全ての公開リストを含む公開サブスクリプションページを表示し人々が加入できるようにする。",
"settings.general.enablePublicArchiveRSSContent": "Enable full content in RSS feed",
"settings.general.enablePublicArchiveRSSContentHelp": "Include the full e-mail content in the RSS feed. If disabled, only the title and link elements will be included.",
"settings.general.faviconURL": "ファビコンURL",
"settings.general.faviconURLHelp": "(任意) 登録解除ページなどのユーザー向けビューに表示される静的ファビコンの完全なURL",
"settings.general.fromEmail": "メールの`送り主`をデフォルトにする ",
Expand Down
2 changes: 2 additions & 0 deletions i18n/ml.json
Original file line number Diff line number Diff line change
Expand Up @@ -378,6 +378,8 @@
"settings.general.enablePublicArchiveHelp": "പൊതു വെബ്‌സൈറ്റിൽ ആർക്കൈവിംഗ് പ്രവർത്തനക്ഷമമാക്കിയ കാമ്പെയ്‌നുകൾ പ്രസിദ്ധീകരിക്കുക.",
"settings.general.enablePublicSubPage": "പൊതു സബ്‌സ്‌ക്രിപ്‌ഷൻ താൾ പ്രവർത്തനക്ഷമമാക്കുക",
"settings.general.enablePublicSubPageHelp": "ആളുകൾക്ക് വരിക്കാരാകാനുള്ള എല്ലാ പൊതു ലിസ്റ്റുകളുമുള്ള പൊതുവായ ഒരു താൾ കാണിക്കുക.",
"settings.general.enablePublicArchiveRSSContent": "Enable full content in RSS feed",
"settings.general.enablePublicArchiveRSSContentHelp": "Include the full e-mail content in the RSS feed. If disabled, only the title and link elements will be included.",
"settings.general.faviconURL": "ഫാവ് ഐക്കൺ യൂ. ആർ. എൽ",
"settings.general.faviconURLHelp": "(ഐച്ഛികം) വരിക്കാരനല്ലാതാകാനുള്ള പേജുപോലുള്ള പൊതുവായ പേജുകളിൽ കാണിക്കുന്നതിനുവേണ്ടിയുള്ള ഫാവ് ഐക്കണിന്റെ പൂർണ്ണ വെബ് വിലാസം.",
"settings.general.fromEmail": "സ്ഥിരസ്ഥിതി `from` ഇ-മെയിൽ",
Expand Down
2 changes: 2 additions & 0 deletions i18n/nl.json
Original file line number Diff line number Diff line change
Expand Up @@ -378,6 +378,8 @@
"settings.general.enablePublicArchiveHelp": "Publish campaigns on which archiving is enabled on the public website.",
"settings.general.enablePublicSubPage": "Publieke inschrijvingspagina inschakelen.",
"settings.general.enablePublicSubPageHelp": "Laat een publieke inschrijvingspagina zien met alle publieke lijsten waarmee mensen zich kunnen inschrijven.",
"settings.general.enablePublicArchiveRSSContent": "Enable full content in RSS feed",
"settings.general.enablePublicArchiveRSSContentHelp": "Include the full e-mail content in the RSS feed. If disabled, only the title and link elements will be included.",
"settings.general.faviconURL": "Favicon URL",
"settings.general.faviconURLHelp": "(Optional) volledige URL naar het favicon om te laten zien op user-facing pagina's zoals de uitschrijfpagina.",
"settings.general.fromEmail": "Standaard afzender e-mail",
Expand Down
Loading