06ae20cb3e
* Forums are disowned on user account deletion (their owner_id=0) * A forum without an owner shows a notice at the bottom with a link to petition to adopt the forum. It goes to the Contact form with a special subject. * Note: there is no easy way to re-assign ownership yet other than a direct database query. * Code cleanup * Alphabetize the DB.AutoMigrate tables. * Delete more things on user deletion: forum_memberships, admin_group_users * Vacuum worker to clean up orphaned polls after the threads are removed
285 lines
11 KiB
HTML
285 lines
11 KiB
HTML
{{define "title"}}{{.Forum.Title}}{{end}}
|
|
{{define "content"}}
|
|
<div class="block">
|
|
<section class="hero is-light is-success">
|
|
<div class="hero-body">
|
|
<div class="container">
|
|
<div class="level">
|
|
<div class="level-left mb-4">
|
|
<h1 class="title">
|
|
<span class="icon mr-4"><i class="fa fa-comments"></i></span>
|
|
<span>{{.Forum.Title}}</span>
|
|
</h1>
|
|
</div>
|
|
|
|
{{if .FeatureUserForumsEnabled}}
|
|
<div class="level-right">
|
|
<!-- Follow/Unfollow This Forum -->
|
|
<form action="/forum/subscribe" method="POST" class="is-inline">
|
|
{{InputCSRF}}
|
|
<input type="hidden" name="fragment" value="{{.Forum.Fragment}}">
|
|
|
|
{{if .IsForumSubscribed}}
|
|
<button type="submit" class="button"
|
|
name="intent" value="unfollow"
|
|
onclick="return confirm('Do you want to remove this forum from your list?')">
|
|
<span class="icon"><i class="fa fa-bookmark"></i></span>
|
|
<span>Followed</span>
|
|
</button>
|
|
{{else}}
|
|
<button type="submit" class="button"
|
|
name="intent" value="follow">
|
|
<span class="icon"><i class="fa-regular fa-bookmark"></i></span>
|
|
<span>Follow</span>
|
|
</button>
|
|
{{end}}
|
|
</form>
|
|
</div>
|
|
{{end}}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
</div>
|
|
|
|
{{$Root := .}}
|
|
|
|
<div class="block p-4">
|
|
<div class="columns">
|
|
<div class="column">
|
|
<nav class="breadcrumb" aria-label="breadcrumbs">
|
|
<ul>
|
|
<li><a href="/forum">Forums</a></li>
|
|
<li class="is-active">
|
|
<a href="{{.Request.URL.Path}}" aria-current="page">{{.Forum.Title}}</a>
|
|
</li>
|
|
</ul>
|
|
</nav>
|
|
</div>
|
|
<div class="column is-narrow">
|
|
<!-- Edit button for forum's settings -->
|
|
{{if or (eq .Forum.OwnerID .CurrentUser.ID) (.CurrentUser.HasAdminScope "admin.forum.manage")}}
|
|
<a href="/forum/admin/edit?id={{.Forum.ID}}" class="button mr-2">
|
|
<span class="icon"><i class="fa fa-gear"></i></span>
|
|
</a>
|
|
{{end}}
|
|
|
|
{{if or .CurrentUser.IsAdmin (not .Forum.Privileged) (eq .Forum.OwnerID .CurrentUser.ID)}}
|
|
<a href="/forum/post?to={{.Forum.Fragment}}" class="button is-info">
|
|
<span class="icon"><i class="fa fa-plus"></i></span>
|
|
<span>New Thread</span>
|
|
</a>
|
|
{{end}}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<p class="block p-2">
|
|
Found <strong>{{.Pager.Total}}</strong> post{{Pluralize64 .Pager.Total}} on this forum
|
|
(page {{.Pager.Page}} of {{.Pager.Pages}}).
|
|
</p>
|
|
|
|
{{if .Forum.Privileged}}
|
|
<div class="block p-2 notification is-warning is-light">
|
|
<i class="fa fa-peace mr-1"></i>
|
|
Only moderators may create new threads on this forum. You may be able to reply to threads here.
|
|
</div>
|
|
{{end}}
|
|
|
|
<div class="block p-2">
|
|
{{SimplePager .Pager}}
|
|
</div>
|
|
|
|
<!-- If no posts at all? -->
|
|
{{if not .Threads}}
|
|
<div class="block p-2">
|
|
<div class="notification is-info is-light content">
|
|
<p>
|
|
There are no posts yet on this forum.
|
|
{{if not .Forum.Privileged}}
|
|
Why not <a href="/forum/post?to={{.Forum.Fragment}}">start the first thread?</a>
|
|
{{end}}
|
|
</p>
|
|
</div>
|
|
</div>
|
|
{{end}}
|
|
|
|
{{$Root := .}}
|
|
<div class="block p-2">
|
|
{{range .Threads}}
|
|
{{$Stats := $Root.ThreadMap.Get .ID}}
|
|
<div class="box has-background-success-light has-text-dark">
|
|
<div class="columns">
|
|
<div class="column is-2 has-text-centered pt-0 pb-1">
|
|
<div>
|
|
<a href="/u/{{.Comment.User.Username}}">
|
|
{{template "avatar-64x64" .Comment.User}}
|
|
</a>
|
|
</div>
|
|
<a href="/u/{{.Comment.User.Username}}">{{.Comment.User.NameOrUsername}}</a>
|
|
</div>
|
|
<div class="column content pt-1 pb-0">
|
|
<a href="/forum/thread/{{.ID}}">
|
|
<h2 class="is-size-4 pt-0 has-text-dark">
|
|
{{if .Pinned}}<sup class="fa fa-thumbtack has-text-success mr-2 is-size-6" title="Pinned"></sup>{{end}}
|
|
{{or .Title "Untitled"}}
|
|
</h2>
|
|
{{TrimEllipses .Comment.Message 256}}
|
|
</a>
|
|
|
|
<hr class="has-background-success my-2">
|
|
<div>
|
|
{{if .Pinned}}
|
|
<span class="tag is-success is-light mr-2">
|
|
<span class="icon"><i class="fa fa-thumbtack"></i></span>
|
|
<span>Pinned</span>
|
|
</span>
|
|
{{end}}
|
|
|
|
{{if .PollID}}
|
|
<span class="tag is-info is-light mr-2">
|
|
<span class="icon"><i class="fa fa-poll"></i></span>
|
|
<span>Poll</span>
|
|
</span>
|
|
{{end}}
|
|
|
|
{{if .Explicit}}
|
|
<span class="tag is-danger is-light mr-2">
|
|
<span class="icon"><i class="fa fa-fire"></i></span>
|
|
<span>NSFW</span>
|
|
</span>
|
|
{{end}}
|
|
|
|
{{if .NoReply}}
|
|
<span class="tag is-warning is-light mr-2" title="This thread can not be replied to.">
|
|
<span class="icon"><i class="fa fa-ban"></i></span>
|
|
<span>No Reply</span>
|
|
</span>
|
|
{{end}}
|
|
|
|
<em title="{{.UpdatedAt.Format "2006-01-02 15:04:05"}}">Updated {{SincePrettyCoarse .UpdatedAt}} ago</em>
|
|
</div>
|
|
</div>
|
|
<div class="column is-narrow pb-1 pt-0 px-1">
|
|
<div class="columns is-mobile">
|
|
<div class="column has-text-centered pr-1">
|
|
<div class="box p-2">
|
|
<p class="is-size-7">Replies</p>
|
|
{{if $Stats}}
|
|
{{$Stats.Replies}}
|
|
{{else}}
|
|
err
|
|
{{end}}
|
|
</div>
|
|
</div>
|
|
<div class="column has-text-centered pl-1">
|
|
<div class="box p-2">
|
|
<p class="is-size-7">Views</p>
|
|
{{if $Stats}}
|
|
{{$Stats.Views}}
|
|
{{else}}
|
|
err
|
|
{{end}}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{{end}}
|
|
</div>
|
|
|
|
<div class="block p-2">
|
|
{{SimplePager .Pager}}
|
|
</div>
|
|
|
|
<!-- Info box: owner, moderators -->
|
|
<div class="block p-2">
|
|
<div class="box">
|
|
|
|
<label class="label"><i class="fa fa-info-circle"></i> Forum Info</label>
|
|
<div class="mb-4">
|
|
Created on: <span title="{{.Forum.CreatedAt}}">{{.Forum.CreatedAt.Format "Jan _2 2006"}}</span>
|
|
<div class="mt-2">
|
|
{{if .Forum.Explicit}}
|
|
<span class="tag is-danger is-light">
|
|
<span class="icon"><i class="fa fa-fire"></i></span>
|
|
<span>Explicit</span>
|
|
</span>
|
|
{{end}}
|
|
|
|
{{if .Forum.Privileged}}
|
|
<span class="tag is-warning is-light">
|
|
<span class="icon"><i class="fa fa-peace"></i></span>
|
|
<span>Privileged</span>
|
|
</span>
|
|
{{end}}
|
|
|
|
{{if .Forum.PermitPhotos}}
|
|
<span class="tag is-grey">
|
|
<span class="icon"><i class="fa fa-camera"></i></span>
|
|
<span>Photos</span>
|
|
</span>
|
|
{{end}}
|
|
|
|
{{if .Forum.Private}}
|
|
<span class="tag is-private is-light">
|
|
<span class="icon"><i class="fa fa-lock"></i></span>
|
|
<span>Private</span>
|
|
</span>
|
|
{{end}}
|
|
</div>
|
|
</div>
|
|
|
|
<label class="label"><i class="fa fa-user-tie"></i> Forum Moderators</label>
|
|
|
|
<!-- The owner first -->
|
|
{{if .Forum.OwnerID}}
|
|
{{template "avatar-16x16" .Forum.Owner}}
|
|
<a href="/u/{{.Forum.Owner.Username}}">
|
|
{{.Forum.Owner.Username}}
|
|
</a>
|
|
<small class="has-text-grey pr-2">(owner)</small>
|
|
{{end}}
|
|
|
|
<!-- Additional moderators -->
|
|
{{range .ForumModerators}}
|
|
<span class="pr-2">
|
|
{{template "avatar-16x16" .}}
|
|
<a href="/u/{{.Username}}">
|
|
{{.Username}}
|
|
</a>
|
|
</span>
|
|
{{end}}
|
|
|
|
<!-- If there is no owner, show a petition notice. -->
|
|
{{if not .Forum.OwnerID}}
|
|
<div class="mt-4 is-size-7">
|
|
<i class="fa fa-info-circle has-text-success mr-1"></i>
|
|
This forum's owner has deleted their account, and this forum is in need of a new owner.
|
|
You may <a href="/contact?intent=contact&subject=forum.adopt&id={{.Forum.ID}}" class="has-text-success">petition to adopt</a>
|
|
this forum.
|
|
</div>
|
|
{{end}}
|
|
|
|
<div class="columns is-multiline is-mobile mt-4 is-size-7">
|
|
<!-- Adoption link -->
|
|
{{if not .Forum.OwnerID}}
|
|
<div class="column is-narrow">
|
|
<a href="/contact?intent=contact&subject=forum.adopt&id={{.Forum.ID}}" class="has-text-success">
|
|
<i class="fa fa-info-circle"></i> Adopt this forum
|
|
</a>
|
|
</div>
|
|
{{end}}
|
|
|
|
<div class="column is-narrow">
|
|
<a href="/contact?intent=report&subject=report.forum&id={{.Forum.ID}}" class="has-text-danger">
|
|
<i class="fa fa-flag"></i> Report this forum
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
{{end}}
|