Show update notification in admin nav bar

When a WriteFreely update is available, indicate this on the "Updates"
navigation item

Ref T572
admin-dashboard-redesign
Matt Baer 5 years ago
parent 389dc8b9db
commit c2ece926e0
  1. 25
      admin.go
  2. 6
      less/admin.less
  3. 2
      less/core.less
  4. 2
      templates/user/include/header.tmpl
  5. 6
      updates.go

@ -90,6 +90,16 @@ type instanceContent struct {
Updated time.Time Updated time.Time
} }
type AdminPage struct {
UpdateAvailable bool
}
func NewAdminPage(app *App) *AdminPage {
return &AdminPage{
UpdateAvailable: app.updates.AreAvailableNoCheck(),
}
}
func (c instanceContent) UpdatedFriendly() string { func (c instanceContent) UpdatedFriendly() string {
/* /*
// TODO: accept a locale in this method and use that for the format // TODO: accept a locale in this method and use that for the format
@ -102,11 +112,13 @@ func (c instanceContent) UpdatedFriendly() string {
func handleViewAdminDash(app *App, u *User, w http.ResponseWriter, r *http.Request) error { func handleViewAdminDash(app *App, u *User, w http.ResponseWriter, r *http.Request) error {
p := struct { p := struct {
*UserPage *UserPage
*AdminPage
Message string Message string
UsersCount, CollectionsCount, PostsCount int64 UsersCount, CollectionsCount, PostsCount int64
}{ }{
UserPage: NewUserPage(app, r, u, "Admin", nil), UserPage: NewUserPage(app, r, u, "Admin", nil),
AdminPage: NewAdminPage(app),
Message: r.FormValue("m"), Message: r.FormValue("m"),
} }
@ -130,12 +142,14 @@ func handleViewAdminMonitor(app *App, u *User, w http.ResponseWriter, r *http.Re
updateAppStats() updateAppStats()
p := struct { p := struct {
*UserPage *UserPage
*AdminPage
SysStatus systemStatus SysStatus systemStatus
Config config.AppCfg Config config.AppCfg
Message, ConfigMessage string Message, ConfigMessage string
}{ }{
UserPage: NewUserPage(app, r, u, "Admin", nil), UserPage: NewUserPage(app, r, u, "Admin", nil),
AdminPage: NewAdminPage(app),
SysStatus: sysStatus, SysStatus: sysStatus,
Config: app.cfg.App, Config: app.cfg.App,
@ -150,11 +164,13 @@ func handleViewAdminMonitor(app *App, u *User, w http.ResponseWriter, r *http.Re
func handleViewAdminSettings(app *App, u *User, w http.ResponseWriter, r *http.Request) error { func handleViewAdminSettings(app *App, u *User, w http.ResponseWriter, r *http.Request) error {
p := struct { p := struct {
*UserPage *UserPage
*AdminPage
Config config.AppCfg Config config.AppCfg
Message, ConfigMessage string Message, ConfigMessage string
}{ }{
UserPage: NewUserPage(app, r, u, "Admin", nil), UserPage: NewUserPage(app, r, u, "Admin", nil),
AdminPage: NewAdminPage(app),
Config: app.cfg.App, Config: app.cfg.App,
Message: r.FormValue("m"), Message: r.FormValue("m"),
@ -168,6 +184,7 @@ func handleViewAdminSettings(app *App, u *User, w http.ResponseWriter, r *http.R
func handleViewAdminUsers(app *App, u *User, w http.ResponseWriter, r *http.Request) error { func handleViewAdminUsers(app *App, u *User, w http.ResponseWriter, r *http.Request) error {
p := struct { p := struct {
*UserPage *UserPage
*AdminPage
Config config.AppCfg Config config.AppCfg
Message string Message string
@ -177,6 +194,7 @@ func handleViewAdminUsers(app *App, u *User, w http.ResponseWriter, r *http.Requ
TotalPages []int TotalPages []int
}{ }{
UserPage: NewUserPage(app, r, u, "Users", nil), UserPage: NewUserPage(app, r, u, "Users", nil),
AdminPage: NewAdminPage(app),
Config: app.cfg.App, Config: app.cfg.App,
Message: r.FormValue("m"), Message: r.FormValue("m"),
} }
@ -214,6 +232,7 @@ func handleViewAdminUser(app *App, u *User, w http.ResponseWriter, r *http.Reque
p := struct { p := struct {
*UserPage *UserPage
*AdminPage
Config config.AppCfg Config config.AppCfg
Message string Message string
@ -349,12 +368,14 @@ func handleAdminResetUserPass(app *App, u *User, w http.ResponseWriter, r *http.
func handleViewAdminPages(app *App, u *User, w http.ResponseWriter, r *http.Request) error { func handleViewAdminPages(app *App, u *User, w http.ResponseWriter, r *http.Request) error {
p := struct { p := struct {
*UserPage *UserPage
*AdminPage
Config config.AppCfg Config config.AppCfg
Message string Message string
Pages []*instanceContent Pages []*instanceContent
}{ }{
UserPage: NewUserPage(app, r, u, "Pages", nil), UserPage: NewUserPage(app, r, u, "Pages", nil),
AdminPage: NewAdminPage(app),
Config: app.cfg.App, Config: app.cfg.App,
Message: r.FormValue("m"), Message: r.FormValue("m"),
} }
@ -413,6 +434,7 @@ func handleViewAdminPage(app *App, u *User, w http.ResponseWriter, r *http.Reque
p := struct { p := struct {
*UserPage *UserPage
*AdminPage
Config config.AppCfg Config config.AppCfg
Message string Message string
@ -583,15 +605,16 @@ func handleViewAdminUpdates(app *App, u *User, w http.ResponseWriter, r *http.Re
p := struct { p := struct {
*UserPage *UserPage
*AdminPage
CurReleaseNotesURL string CurReleaseNotesURL string
LastChecked string LastChecked string
LastChecked8601 string LastChecked8601 string
LatestVersion string LatestVersion string
LatestReleaseURL string LatestReleaseURL string
LatestReleaseNotesURL string LatestReleaseNotesURL string
UpdateAvailable bool
}{ }{
UserPage: NewUserPage(app, r, u, "Updates", nil), UserPage: NewUserPage(app, r, u, "Updates", nil),
AdminPage: NewAdminPage(app),
} }
p.CurReleaseNotesURL = wfReleaseNotesURL(p.Version) p.CurReleaseNotesURL = wfReleaseNotesURL(p.Version)
if app.cfg.App.UpdateChecks { if app.cfg.App.UpdateChecks {

@ -19,8 +19,14 @@ nav#admin {
&.selected { &.selected {
background: #dedede; background: #dedede;
font-weight: bold; font-weight: bold;
.blip {
color: black;
} }
} }
}
.blip {
font-weight: bold;
}
} }
.pager { .pager {
display: flex; display: flex;

@ -1345,7 +1345,7 @@ div.row {
} }
} }
.check { .check, .blip {
font-size: 1.125em; font-size: 1.125em;
color: #71D571; color: #71D571;
} }

@ -103,7 +103,7 @@
{{if not .SingleUser}} {{if not .SingleUser}}
<a href="/admin/users" {{if eq .Path "/admin/users"}}class="selected"{{end}}>Users</a> <a href="/admin/users" {{if eq .Path "/admin/users"}}class="selected"{{end}}>Users</a>
<a href="/admin/pages" {{if eq .Path "/admin/pages"}}class="selected"{{end}}>Pages</a> <a href="/admin/pages" {{if eq .Path "/admin/pages"}}class="selected"{{end}}>Pages</a>
{{if .UpdateChecks}}<a href="/admin/updates" {{if eq .Path "/admin/updates"}}class="selected"{{end}}>Updates</a>{{end}} {{if .UpdateChecks}}<a href="/admin/updates" {{if eq .Path "/admin/updates"}}class="selected"{{end}}>Updates{{if .UpdateAvailable}}<span class="blip">!</span>{{end}}</a>{{end}}
{{end}} {{end}}
{{if not .Forest}} {{if not .Forest}}
<a href="/admin/monitor" {{if eq .Path "/admin/monitor"}}class="selected"{{end}}>Monitor</a> <a href="/admin/monitor" {{if eq .Path "/admin/monitor"}}class="selected"{{end}}>Monitor</a>

@ -58,6 +58,12 @@ func (uc updatesCache) AreAvailable() bool {
return CompareSemver(uc.latestVersion, uc.currentVersion) == 1 return CompareSemver(uc.latestVersion, uc.currentVersion) == 1
} }
// AreAvailableNoCheck returns if the latest release is newer than the current
// running version.
func (uc updatesCache) AreAvailableNoCheck() bool {
return CompareSemver(uc.latestVersion, uc.currentVersion) == 1
}
// LatestVersion returns the latest stored version available. // LatestVersion returns the latest stored version available.
func (uc updatesCache) LatestVersion() string { func (uc updatesCache) LatestVersion() string {
return uc.latestVersion return uc.latestVersion

Loading…
Cancel
Save