text attachments for cosora and shadow
reduce bytes and boilerplate
This commit is contained in:
parent
8be3f79abb
commit
5073c78364
|
@ -8,8 +8,8 @@ import (
|
|||
c "github.com/Azareal/Gosora/common"
|
||||
)
|
||||
|
||||
func Users(w http.ResponseWriter, r *http.Request, user *c.User) c.RouteError {
|
||||
basePage, ferr := buildBasePage(w, r, user, "users", "users")
|
||||
func Users(w http.ResponseWriter, r *http.Request, u *c.User) c.RouteError {
|
||||
basePage, ferr := buildBasePage(w, r, u, "users", "users")
|
||||
if ferr != nil {
|
||||
return ferr
|
||||
}
|
||||
|
@ -27,27 +27,27 @@ func Users(w http.ResponseWriter, r *http.Request, user *c.User) c.RouteError {
|
|||
return renderTemplate("panel", w, r, basePage.Header, c.Panel{basePage, "", "", "panel_users", &pi})
|
||||
}
|
||||
|
||||
func UsersEdit(w http.ResponseWriter, r *http.Request, user *c.User, suid string) c.RouteError {
|
||||
basePage, ferr := buildBasePage(w, r, user, "edit_user", "users")
|
||||
func UsersEdit(w http.ResponseWriter, r *http.Request, u *c.User, suid string) c.RouteError {
|
||||
basePage, ferr := buildBasePage(w, r, u, "edit_user", "users")
|
||||
if ferr != nil {
|
||||
return ferr
|
||||
}
|
||||
if !user.Perms.EditUser {
|
||||
return c.NoPermissions(w, r, user)
|
||||
if !u.Perms.EditUser {
|
||||
return c.NoPermissions(w, r, u)
|
||||
}
|
||||
|
||||
uid, err := strconv.Atoi(suid)
|
||||
if err != nil {
|
||||
return c.LocalError("The provided UserID is not a valid number.", w, r, user)
|
||||
return c.LocalError("The provided UserID is not a valid number.", w, r, u)
|
||||
}
|
||||
targetUser, err := c.Users.Get(uid)
|
||||
if err == sql.ErrNoRows {
|
||||
return c.LocalError("The user you're trying to edit doesn't exist.", w, r, user)
|
||||
return c.LocalError("The user you're trying to edit doesn't exist.", w, r, u)
|
||||
} else if err != nil {
|
||||
return c.InternalError(err, w, r)
|
||||
}
|
||||
if targetUser.IsAdmin && !user.IsAdmin {
|
||||
return c.LocalError("Only administrators can edit the account of an administrator.", w, r, user)
|
||||
if targetUser.IsAdmin && !u.IsAdmin {
|
||||
return c.LocalError("Only administrators can edit the account of an administrator.", w, r, u)
|
||||
}
|
||||
|
||||
// ? - Should we stop admins from deleting all the groups? Maybe, protect the group they're currently using?
|
||||
|
@ -58,10 +58,10 @@ func UsersEdit(w http.ResponseWriter, r *http.Request, user *c.User, suid string
|
|||
|
||||
var groupList []*c.Group
|
||||
for _, group := range groups {
|
||||
if !user.Perms.EditUserGroupAdmin && group.IsAdmin {
|
||||
if !u.Perms.EditUserGroupAdmin && group.IsAdmin {
|
||||
continue
|
||||
}
|
||||
if !user.Perms.EditUserGroupSuperMod && group.IsMod {
|
||||
if !u.Perms.EditUserGroupSuperMod && group.IsMod {
|
||||
continue
|
||||
}
|
||||
groupList = append(groupList, group)
|
||||
|
@ -183,31 +183,31 @@ func UsersEditSubmit(w http.ResponseWriter, r *http.Request, user *c.User, suid
|
|||
return nil
|
||||
}
|
||||
|
||||
func UsersAvatarSubmit(w http.ResponseWriter, r *http.Request, user *c.User, suid string) c.RouteError {
|
||||
_, ferr := c.SimplePanelUserCheck(w, r, user)
|
||||
func UsersAvatarSubmit(w http.ResponseWriter, r *http.Request, u *c.User, suid string) c.RouteError {
|
||||
_, ferr := c.SimplePanelUserCheck(w, r, u)
|
||||
if ferr != nil {
|
||||
return ferr
|
||||
}
|
||||
// TODO: Check the UploadAvatars permission too?
|
||||
if !user.Perms.EditUser {
|
||||
return c.NoPermissions(w, r, user)
|
||||
if !u.Perms.EditUser {
|
||||
return c.NoPermissions(w, r, u)
|
||||
}
|
||||
|
||||
uid, err := strconv.Atoi(suid)
|
||||
if err != nil {
|
||||
return c.LocalError("The provided UserID is not a valid number.", w, r, user)
|
||||
return c.LocalError("The provided UserID is not a valid number.", w, r, u)
|
||||
}
|
||||
targetUser, err := c.Users.Get(uid)
|
||||
if err == sql.ErrNoRows {
|
||||
return c.LocalError("The user you're trying to edit doesn't exist.", w, r, user)
|
||||
return c.LocalError("The user you're trying to edit doesn't exist.", w, r, u)
|
||||
} else if err != nil {
|
||||
return c.InternalError(err, w, r)
|
||||
}
|
||||
if targetUser.IsAdmin && !user.IsAdmin {
|
||||
return c.LocalError("Only administrators can edit the account of other administrators.", w, r, user)
|
||||
if targetUser.IsAdmin && !u.IsAdmin {
|
||||
return c.LocalError("Only administrators can edit the account of other administrators.", w, r, u)
|
||||
}
|
||||
|
||||
ext, ferr := c.UploadAvatar(w, r, user, targetUser.ID)
|
||||
ext, ferr := c.UploadAvatar(w, r, u, targetUser.ID)
|
||||
if ferr != nil {
|
||||
return ferr
|
||||
}
|
||||
|
@ -221,7 +221,7 @@ func UsersAvatarSubmit(w http.ResponseWriter, r *http.Request, user *c.User, sui
|
|||
return c.InternalError(err, w, r)
|
||||
}
|
||||
|
||||
err = c.AdminLogs.Create("edit", targetUser.ID, "user", user.GetIP(), user.ID)
|
||||
err = c.AdminLogs.Create("edit", targetUser.ID, "user", u.GetIP(), u.ID)
|
||||
if err != nil {
|
||||
return c.InternalError(err, w, r)
|
||||
}
|
||||
|
@ -234,34 +234,34 @@ func UsersAvatarSubmit(w http.ResponseWriter, r *http.Request, user *c.User, sui
|
|||
return nil
|
||||
}
|
||||
|
||||
func UsersAvatarRemoveSubmit(w http.ResponseWriter, r *http.Request, user *c.User, suid string) c.RouteError {
|
||||
_, ferr := c.SimplePanelUserCheck(w, r, user)
|
||||
func UsersAvatarRemoveSubmit(w http.ResponseWriter, r *http.Request, u *c.User, suid string) c.RouteError {
|
||||
_, ferr := c.SimplePanelUserCheck(w, r, u)
|
||||
if ferr != nil {
|
||||
return ferr
|
||||
}
|
||||
if !user.Perms.EditUser {
|
||||
return c.NoPermissions(w, r, user)
|
||||
if !u.Perms.EditUser {
|
||||
return c.NoPermissions(w, r, u)
|
||||
}
|
||||
|
||||
uid, err := strconv.Atoi(suid)
|
||||
if err != nil {
|
||||
return c.LocalError("The provided UserID is not a valid number.", w, r, user)
|
||||
return c.LocalError("The provided UserID is not a valid number.", w, r, u)
|
||||
}
|
||||
targetUser, err := c.Users.Get(uid)
|
||||
if err == sql.ErrNoRows {
|
||||
return c.LocalError("The user you're trying to edit doesn't exist.", w, r, user)
|
||||
return c.LocalError("The user you're trying to edit doesn't exist.", w, r, u)
|
||||
} else if err != nil {
|
||||
return c.InternalError(err, w, r)
|
||||
}
|
||||
if targetUser.IsAdmin && !user.IsAdmin {
|
||||
return c.LocalError("Only administrators can edit the account of other administrators.", w, r, user)
|
||||
if targetUser.IsAdmin && !u.IsAdmin {
|
||||
return c.LocalError("Only administrators can edit the account of other administrators.", w, r, u)
|
||||
}
|
||||
ferr = c.ChangeAvatar("", w, r, targetUser)
|
||||
if ferr != nil {
|
||||
return ferr
|
||||
}
|
||||
|
||||
err = c.AdminLogs.Create("edit", targetUser.ID, "user", user.GetIP(), user.ID)
|
||||
err = c.AdminLogs.Create("edit", targetUser.ID, "user", u.GetIP(), u.ID)
|
||||
if err != nil {
|
||||
return c.InternalError(err, w, r)
|
||||
}
|
||||
|
|
|
@ -86,8 +86,8 @@ func PollResults(w http.ResponseWriter, r *http.Request, user *c.User, sPollID s
|
|||
defer rows.Close()
|
||||
|
||||
optionList := ""
|
||||
var votes int
|
||||
for rows.Next() {
|
||||
var votes int
|
||||
err := rows.Scan(&votes)
|
||||
if err != nil {
|
||||
return c.InternalError(err, w, r)
|
||||
|
|
|
@ -4,8 +4,8 @@
|
|||
{{template "panel_analytics_time_range.html" . }}
|
||||
</div>
|
||||
</div>
|
||||
<form id="timeRangeForm" name="timeRangeForm" action="/panel/analytics/agent/{{.Agent}}" method="get"></form>
|
||||
<div id="panel_analytics_views" class="colstack_graph_holder">
|
||||
<form id="timeRangeForm"name="timeRangeForm"action="/panel/analytics/agent/{{.Agent}}"method="get"></form>
|
||||
<div id="panel_analytics_views"class="colstack_graph_holder">
|
||||
<div class="ct_chart"></div>
|
||||
</div>
|
||||
{{template "panel_analytics_script.html" . }}
|
|
@ -4,14 +4,14 @@
|
|||
{{template "panel_analytics_time_range.html" . }}
|
||||
</div>
|
||||
</div>
|
||||
<form id="timeRangeForm" name="timeRangeForm" action="/panel/analytics/agents/" method="get"></form>
|
||||
<div id="panel_analytics_agents_chart" class="colstack_graph_holder">
|
||||
<form id="timeRangeForm"name="timeRangeForm"action="/panel/analytics/agents/"method="get"></form>
|
||||
<div id="panel_analytics_agents_chart"class="colstack_graph_holder">
|
||||
<div class="ct_chart"></div>
|
||||
</div>
|
||||
<div id="panel_analytics_agents" class="colstack_item rowlist">
|
||||
<div id="panel_analytics_agents"class="colstack_item rowlist">
|
||||
{{range .ItemList}}
|
||||
<div class="rowitem panel_compactrow editable_parent">
|
||||
<a href="/panel/analytics/agent/{{.Agent}}" class="panel_upshift">{{.FriendlyAgent}}</a>
|
||||
<a href="/panel/analytics/agent/{{.Agent}}"class="panel_upshift">{{.FriendlyAgent}}</a>
|
||||
<span class="panel_compacttext to_right">{{.Count}}{{lang "panel_stats_views_suffix"}}</span>
|
||||
</div>
|
||||
{{else}}<div class="rowitem passive rowmsg">{{lang "panel_stats_user_agents_no_user_agents"}}</div>{{end}}
|
||||
|
|
|
@ -4,8 +4,8 @@
|
|||
{{template "panel_analytics_time_range.html" . }}
|
||||
</div>
|
||||
</div>
|
||||
<form id="timeRangeForm" name="timeRangeForm" action="/panel/analytics/forum/{{.Agent}}" method="get"></form>
|
||||
<div id="panel_analytics_views" class="colstack_graph_holder">
|
||||
<form id="timeRangeForm"name="timeRangeForm"action="/panel/analytics/forum/{{.Agent}}"method="get"></form>
|
||||
<div id="panel_analytics_views"class="colstack_graph_holder">
|
||||
<div class="ct_chart"></div>
|
||||
</div>
|
||||
{{template "panel_analytics_script.html" . }}
|
|
@ -4,14 +4,14 @@
|
|||
{{template "panel_analytics_time_range.html" . }}
|
||||
</div>
|
||||
</div>
|
||||
<form id="timeRangeForm" name="timeRangeForm" action="/panel/analytics/forums/" method="get"></form>
|
||||
<div id="panel_analytics_forums_chart" class="colstack_graph_holder">
|
||||
<form id="timeRangeForm"name="timeRangeForm"action="/panel/analytics/forums/"method="get"></form>
|
||||
<div id="panel_analytics_forums_chart"class="colstack_graph_holder">
|
||||
<div class="ct_chart"></div>
|
||||
</div>
|
||||
<div id="panel_analytics_routes" class="colstack_item rowlist">
|
||||
<div id="panel_analytics_routes"class="colstack_item rowlist">
|
||||
{{range .ItemList}}
|
||||
<div class="rowitem panel_compactrow editable_parent">
|
||||
<a href="/panel/analytics/forum/{{.Agent}}" class="panel_upshift">{{.FriendlyAgent}}</a>
|
||||
<a href="/panel/analytics/forum/{{.Agent}}"class="panel_upshift">{{.FriendlyAgent}}</a>
|
||||
<span class="panel_compacttext to_right">{{.Count}}{{lang "panel_stats_views_suffix"}}</span>
|
||||
</div>
|
||||
{{else}}<div class="rowitem passive rowmsg">{{lang "panel_stats_forums_no_forums"}}</div>{{end}}
|
||||
|
|
|
@ -4,8 +4,8 @@
|
|||
{{template "panel_analytics_time_range.html" . }}
|
||||
</div>
|
||||
</div>
|
||||
<form id="timeRangeForm" name="timeRangeForm" action="/panel/analytics/lang/{{.Agent}}" method="get"></form>
|
||||
<div id="panel_analytics_langs" class="colstack_graph_holder">
|
||||
<form id="timeRangeForm"name="timeRangeForm"action="/panel/analytics/lang/{{.Agent}}"method="get"></form>
|
||||
<div id="panel_analytics_langs"class="colstack_graph_holder">
|
||||
<div class="ct_chart"></div>
|
||||
</div>
|
||||
{{template "panel_analytics_script.html" . }}
|
|
@ -4,14 +4,14 @@
|
|||
{{template "panel_analytics_time_range.html" . }}
|
||||
</div>
|
||||
</div>
|
||||
<form id="timeRangeForm" name="timeRangeForm" action="/panel/analytics/langs/" method="get"></form>
|
||||
<div id="panel_analytics_langs_chart" class="colstack_graph_holder">
|
||||
<form id="timeRangeForm"name="timeRangeForm"action="/panel/analytics/langs/"method="get"></form>
|
||||
<div id="panel_analytics_langs_chart"class="colstack_graph_holder">
|
||||
<div class="ct_chart"></div>
|
||||
</div>
|
||||
<div id="panel_analytics_langs" class="colstack_item rowlist">
|
||||
<div id="panel_analytics_langs"class="colstack_item rowlist">
|
||||
{{range .ItemList}}
|
||||
<div class="rowitem panel_compactrow editable_parent">
|
||||
<a href="/panel/analytics/lang/{{.Agent}}" class="panel_upshift">{{.FriendlyAgent}}</a>
|
||||
<a href="/panel/analytics/lang/{{.Agent}}"class="panel_upshift">{{.FriendlyAgent}}</a>
|
||||
<span class="panel_compacttext to_right">{{.Count}}{{lang "panel_stats_views_suffix"}}</span>
|
||||
</div>
|
||||
{{else}}<div class="rowitem passive rowmsg">{{lang "panel_stats_languages_no_languages"}}</div>{{end}}
|
||||
|
|
|
@ -1266,6 +1266,13 @@ red {
|
|||
.hide_spoil img {
|
||||
content: " ";
|
||||
}
|
||||
.attach_box {
|
||||
background-color: #5a5555;
|
||||
background-color: #EFEEEE;
|
||||
border-radius: 3px;
|
||||
padding: 16px;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
#ip_search_container .rowlist:not(.has_items) {
|
||||
display: block;
|
||||
|
|
|
@ -377,6 +377,12 @@ red {
|
|||
.hide_spoil img {
|
||||
content: " ";
|
||||
}
|
||||
.attach_box {
|
||||
background-color: #5a5555;
|
||||
background-color: rgb(71,71,76);
|
||||
border-radius: 3px;
|
||||
padding: 16px;
|
||||
}
|
||||
|
||||
.formrow.real_first_child, .formrow:first-child {
|
||||
margin-top: 8px;
|
||||
|
|
Loading…
Reference in New Issue