Browse Source

Reports templates done. #35

Ralfp 12 years ago
parent
commit
4e73be8850

+ 30 - 0
misago/apps/reports/forms.py

@@ -0,0 +1,30 @@
+from django import forms
+from django.utils.translation import ugettext_lazy as _
+from misago.apps.threadtype.posting.forms import (EditThreadForm as EditThreadBaseForm,
+                                                  NewReplyForm as NewReplyBaseForm,
+                                                  EditReplyForm as EditReplyBaseForm)
+from misago.forms import Form
+
+class ReportFormMixin(object):
+    def type_fields(self):
+        self.thread.original_weight = self.thread.weight
+
+        thread_weight = []
+        if self.thread.weight == 2:
+            thread_weight.append((2, _("Unresolved")))
+        thread_weight.append((1, _("Resolved")))
+        thread_weight.append((0, _("Bogus")))
+
+        self.fields['thread_weight'].choices = thread_weight
+
+
+class EditThreadForm(ReportFormMixin, EditThreadBaseForm):
+    pass
+
+
+class NewReplyForm(ReportFormMixin, NewReplyBaseForm):
+    pass
+
+
+class EditReplyForm(ReportFormMixin, EditReplyBaseForm):
+    pass

+ 5 - 6
misago/apps/reports/list.py

@@ -38,9 +38,11 @@ class ThreadsListView(ThreadsListBaseView, ThreadsListModeration, TypeMixin):
         tracker_forum = ThreadsTracker(self.request, self.forum)
         unresolved_count = 0
         for thread in list(chain(qs_announcements, qs_threads[self.pagination['start']:self.pagination['stop']])):
+            thread.original_weight = thread.weight
             if thread.weight == 2:
                 unresolved_count += 1
             thread.is_read = tracker_forum.is_read(thread)
+            thread.report_forum = Forum.objects.forums_tree.get(thread.report_for.forum_id)
             self.threads.append(thread)
 
         if int(self.request.monitor['reported_posts']) != unresolved_count:
@@ -64,18 +66,15 @@ class ThreadsListView(ThreadsListBaseView, ThreadsListModeration, TypeMixin):
     def mass_resolve(self, ids):
         reported_posts = []
         reported_threads = []
-        second_pass = []
         for thread in self.threads:
             if thread.pk in ids:
-                 reported_posts.append(thread.report_for.pk)
-                 reported_threads.append(thread.report_for.thread_id)
-                 if thread.weight == 2:
+                if thread.original_weight == 2:
+                    reported_posts.append(thread.report_for.pk)
+                    reported_threads.append(thread.report_for.thread_id)
                     second_pass.append(thread.pk)
         if reported_threads:
             Thread.objects.filter(id__in=reported_threads).update(replies_reported=F('replies_reported') - 1)
             Post.objects.filter(id__in=reported_posts).update(reported=False)
-        if second_pass:
-            Thread.objects.filter(id__in=second_pass).update(weight=1)
 
     def action_sticky(self, ids):
         if self._action_sticky(ids):

+ 9 - 2
misago/apps/reports/posting.py

@@ -1,24 +1,31 @@
 from django.core.urlresolvers import reverse
 from django.shortcuts import redirect
 from django.utils.translation import ugettext as _
-from misago.apps.threadtype.posting import NewThreadBaseView, EditThreadBaseView, NewReplyBaseView, EditReplyBaseView
+from misago.apps.threadtype.posting import EditThreadBaseView, NewReplyBaseView, EditReplyBaseView
 from misago.messages import Message
 from misago.models import Forum, Thread, Post
 from misago.apps.reports.mixins import TypeMixin
+from misago.apps.reports.forms import EditThreadForm, NewReplyForm, EditReplyForm
 
 class EditThreadView(EditThreadBaseView, TypeMixin):
+    form_type = EditThreadForm
+
     def response(self):
         self.request.messages.set_flash(Message(_("Report has been edited.")), 'success', 'threads_%s' % self.post.pk)
-        return redirect(reverse('thread', kwargs={'thread': self.thread.pk, 'slug': self.thread.slug}) + ('#post-%s' % self.post.pk))
+        return redirect(reverse('report', kwargs={'thread': self.thread.pk, 'slug': self.thread.slug}) + ('#post-%s' % self.post.pk))
 
 
 class NewReplyView(NewReplyBaseView, TypeMixin):
+    form_type = NewReplyForm
+
     def response(self):
         self.request.messages.set_flash(Message(_("Your reply has been posted.")), 'success', 'threads_%s' % self.post.pk)
         return self.redirect_to_post(self.post)
 
 
 class EditReplyView(EditReplyBaseView, TypeMixin):
+    form_type = EditReplyForm
+    
     def response(self):
         self.request.messages.set_flash(Message(_("Your reply has been changed.")), 'success', 'threads_%s' % self.post.pk)
         return self.redirect_to_post(self.post)

+ 2 - 10
misago/apps/threadtype/jumps.py

@@ -272,19 +272,11 @@ class ReportPostBaseView(JumpView):
             if not report:
                 # File up new report
                 now = timezone.now()
-                report_name = _('#%(post)s by %(author)s in "%(thread)s"')
-                report_name = report_name % {
-                                             'post': self.post.pk,
-                                             'thread': self.thread.name,
-                                             'author': self.post.user_name
-                                            }
-                report_name = short_string(report_name, request.settings['thread_name_max'])
 
                 reason_post = _('''
 Member @%(reporter)s has reported following post by @%(reported)s:
 
 %(quote)s
-
 **Post link:** <%(post)s>
 ''')
 
@@ -301,8 +293,8 @@ Member @%(reporter)s has reported following post by @%(reported)s:
                 report = Thread.objects.create(
                                                forum=reports,
                                                weight=2,
-                                               name=report_name,
-                                               slug=slugify(report_name),
+                                               name=self.thread.name,
+                                               slug=slugify(self.thread.slug),
                                                start=now,
                                                start_poster=request.user,
                                                start_poster_name=request.user.username,

+ 8 - 0
misago/models/forummodel.py

@@ -4,6 +4,7 @@ from mptt.managers import TreeManager
 from mptt.models import MPTTModel, TreeForeignKey
 from django.conf import settings
 from django.core.cache import cache
+from django.core.urlresolvers import reverse
 from django.db import models
 from django.utils.translation import ugettext_lazy as _
 from misago.signals import delete_forum_content, move_forum_content, rename_forum, rename_user
@@ -191,6 +192,13 @@ class Forum(MPTTModel):
            return unicode(_('Root Category'))
         return unicode(self.name)
 
+    def forum_url(self):
+        if self.special == 'private_threads':
+           reverse('private-threads')
+        if self.special == 'reports':
+           reverse('reports')
+        return reverse('forum', kwargs={'forum': self.pk, 'slug': self.slug})
+
     def set_description(self, description):
         self.description = description.strip()
         self.description_preparsed = ''

+ 8 - 0
static/cranefly/css/cranefly.css

@@ -1191,6 +1191,14 @@ a.btn-link:hover,a.btn-link:active,a.btn-link:focus{opacity:0.9;filter:alpha(opa
 .post-diff .post-diff-details table td.added{background-color:#dff1df;color:#285d28;font-weight:bold;}.post-diff .post-diff-details table td.added.even{background-color:#cdeacd;}
 .post-diff .post-diff-details table td.removed{background-color:#faeae8;color:#7c261b;font-weight:bold;}.post-diff .post-diff-details table td.removed.even{background-color:#f5d7d4;}
 .post-diff .post-diff-details table td.stag{color:#555555;}
+.report-view .report-wrapper{background-color:#eeeeee;background-image:-webkit-gradient(linear, 0 0, 100% 100%, color-stop(0.25, rgba(255, 255, 255, 0.2)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.2)), color-stop(0.75, rgba(255, 255, 255, 0.2)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent);background-image:-ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(-45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent);background-image:linear-gradient(-45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent);-webkit-background-size:10px 10px;-moz-background-size:10px 10px;background-size:10px 10px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;padding:8px;margin-bottom:8px;}.report-view .report-wrapper .post-body{margin-bottom:0px;}
+.reports-list .thread-label{overflow:visible;}.reports-list .thread-label .report-label{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;float:right;padding:3px 8px;position:relative;right:-32px;bottom:2px;color:#ffffff;font-weight:bold;}.reports-list .thread-label .report-label i{background-image:url("../img/glyphicons-halflings-white.png");}
+.reports-list .thread-label .report-label.report-open{background-color:#f89406;text-shadow:0px 1px 0px #945904;}
+.reports-list .thread-label .report-label.report-resolved{background-color:#46a546;text-shadow:0px 1px 0px #285d28;}
+.reports-list .thread-label .report-label.report-bogus{background-color:#555555;text-shadow:0px 1px 0px #222222;}
+.reports-list .thread-name .report-id{color:#999999 !important;}
+.reports-list .thread-name,.reports-list .thread-details{margin-left:0px !important;}
+.reports-list .thread-icon{display:none !important;float:none;}
 .index-rank-team ul li .label{background-color:#cf402e;color:#ffffff;text-shadow:0px 1px 0px #3d130e;}
 .post-label-team{background-color:#cf402e;}
 .index-rank-mvp ul li .label{background-color:#049cdb;color:#ffffff;text-shadow:0px 1px 0px #011f2c;}

+ 2 - 0
static/cranefly/css/cranefly.less

@@ -89,6 +89,8 @@
 @import "cranefly/thread.less";
 @import "cranefly/karmas.less";
 @import "cranefly/changelog.less";
+@import "cranefly/report.less";
+@import "cranefly/reports.less";
 
 // Keep ranks last for easy overrides!
 @import "ranks.less";

+ 38 - 0
static/cranefly/css/cranefly/report.less

@@ -0,0 +1,38 @@
+// Report view
+// ------------------------
+
+.report-view {
+  .report-wrapper {
+    background-color: @grayLighter;
+    background-image: -webkit-gradient(linear, 0 0, 100% 100%,
+                color-stop(.25, rgba(255, 255, 255, .2)), color-stop(.25, transparent),
+                color-stop(.5, transparent), color-stop(.5, rgba(255, 255, 255, .2)),
+                color-stop(.75, rgba(255, 255, 255, .2)), color-stop(.75, transparent),
+                to(transparent));
+    background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, .2) 25%, transparent 25%,
+              transparent 50%, rgba(255, 255, 255, .2) 50%, rgba(255, 255, 255, .2) 75%,
+              transparent 75%, transparent);
+    background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, .2) 25%, transparent 25%,
+              transparent 50%, rgba(255, 255, 255, .2) 50%, rgba(255, 255, 255, .2) 75%,
+              transparent 75%, transparent);
+    background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, .2) 25%, transparent 25%,
+              transparent 50%, rgba(255, 255, 255, .2) 50%, rgba(255, 255, 255, .2) 75%,
+              transparent 75%, transparent);
+    background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, .2) 25%, transparent 25%,
+              transparent 50%, rgba(255, 255, 255, .2) 50%, rgba(255, 255, 255, .2) 75%,
+              transparent 75%, transparent);
+    background-image: linear-gradient(-45deg, rgba(255, 255, 255, .2) 25%, transparent 25%,
+              transparent 50%, rgba(255, 255, 255, .2) 50%, rgba(255, 255, 255, .2) 75%,
+              transparent 75%, transparent);
+    -webkit-background-size: 10px 10px;
+    -moz-background-size: 10px 10px;
+    background-size: 10px 10px;
+    .border-radius(6px);
+    padding: 8px;
+    margin-bottom: 8px;
+
+    .post-body {
+      margin-bottom: 0px;
+    }
+  }
+}

+ 54 - 0
static/cranefly/css/cranefly/reports.less

@@ -0,0 +1,54 @@
+// Reports list
+// ------------------------
+
+.reports-list {
+  .thread-label {
+    overflow: visible;
+
+    .report-label {
+      .border-radius(3px);
+      float: right;
+      padding: 3px 8px;
+      position: relative;
+      right: -32px;
+      bottom: 2px;
+
+      color: @white;
+      font-weight: bold;
+
+      i {
+        background-image: url("@{iconWhiteSpritePath}");
+      }
+
+      &.report-open {
+        background-color: @orange;
+        text-shadow: 0px 1px 0px darken(@orange, 20%);
+      }
+
+      &.report-resolved {
+        background-color: @green;
+        text-shadow: 0px 1px 0px darken(@green, 20%);
+      }
+
+      &.report-bogus {
+        background-color: @gray;
+        text-shadow: 0px 1px 0px darken(@gray, 20%);
+      }
+    }
+  }
+
+  .thread-name {
+    .report-id {
+      color: @grayLight !important;
+    }
+  }
+
+  .thread-name, .thread-details {
+    margin-left: 0px !important;
+  }
+
+  .thread-icon {
+    display: none !important;
+    float: none;
+  }
+}

+ 35 - 27
templates/cranefly/reports/list.html

@@ -31,13 +31,13 @@
     {{ pager() }}
   </div>
 
-  <div class="forum-threads-list">
+  <div class="forum-threads-list reports-list">
     <div class="header">
       <div class="row-fluid">
-        <div class="span7">{% trans %}Report{% endtrans %}</div>
-        <div class="span5 thread-activity">
+        <div class="span6 offset2">{% trans %}Report{% endtrans %}</div>
+        <div class="span4 thread-activity">
           <div class="thread-replies">{% trans %}Activity{% endtrans %}</div>
-          {% if user.is_authenticated() and list_form %}
+          {% if list_form %}
           <div class="pull-right check-cell">
             <label class="checkbox"><input type="checkbox" class="checkbox-master"></label>
           </div>
@@ -48,40 +48,44 @@
     {% for thread in threads %}
     <div class="thread-row{% if not thread.is_read %} thread-new{% endif %}{% if loop.last %} thread-last{% endif %}">
       <div class="row-fluid">
-        <div class="span7">
-          {% if thread.is_read %}
-          <a href="{% url 'report_new' thread=thread.pk, slug=thread.slug %}" class="thread-icon thread-icon-last tooltip-top" title="{% trans %}Click to see last post{% endtrans %}"><i class="icon-asterisk"></i></a>
+        <div class="span2 thread-label">
+          {% if thread.weight == 2 %}
+          <span class="report-label report-open"><i class="icon-time"></i> {% trans %}Open{% endtrans %}</span>
+          {% elif thread.weight == 1 %}
+          <span class="report-label report-resolved"><i class="icon-ok"></i> {% trans %}Resolved{% endtrans %}</span>
           {% else %}
-          <a href="{% url 'report_new' thread=thread.pk, slug=thread.slug %}" class="thread-icon thread-icon-new tooltip-top" title="{% trans %}Click to see first unread post{% endtrans %}"><i class="icon-fire"></i></a>
+          <span class="report-label report-bogus"><i class="icon-remove"></i> {% trans %}Bogus{% endtrans %}</span>
           {% endif %}
+        </div>
+        <div class="span6">
 
-          {{ macros.thread_flags(thread) }}
+          {% if thread.deleted %}
+          <ul class="unstyled thread-flags">
+            <li class="flag-deleted"><i class="icon-trash tooltip-top" title="{% trans %}This thread is deleted{% endtrans %}"></i></li>
+          </ul>
+          {% endif %}
           
-          <a href="{% url 'report' thread=thread.pk, slug=thread.slug %}" class="thread-name">{{ thread.name }}</a>
+          <a href="{% url 'report' thread=thread.pk, slug=thread.slug %}" class="thread-name"><span class="report-id">#892431</span> {{ thread.name }}</a>
           
+          {% if thread.is_read %}
+          <a href="{% url 'report_new' thread=thread.pk, slug=thread.slug %}" class="thread-icon thread-icon-last tooltip-top" title="{% trans %}Click to see last comment{% endtrans %}"><i class="icon-asterisk"></i></a>
+          {% else %}
+          <a href="{% url 'report_new' thread=thread.pk, slug=thread.slug %}" class="thread-icon thread-icon-new tooltip-top" title="{% trans %}Click to see first unread comment{% endtrans %}"><i class="icon-fire"></i></a>
+          {% endif %}
+
           <div class="thread-details">
-            {% trans user=thread_starter(thread), start=thread.start|reldate|low %}by {{ user }}, {{ start }}{% endtrans %}
+            {% trans user=thread_starter(thread), start=thread.start|reldate|low, forum=report_forum(thread) %}Reported by {{ user }} {{ start }} in forum {{ forum }}{% endtrans %}
           </div>
 
         </div>
-        <div class="span5 thread-activity">
-
-          {% if settings.avatars_on_threads_list %}
-          <div class="thread-last-avatar">
-            {% if thread.last_poster_id %}
-            <a href="{% url 'user' user=thread.last_poster.pk, username=thread.last_poster.username_slug %}"><img src="{{ thread.last_poster.get_avatar(40) }}" alt=""></a>
-            {% else %}
-            <img src="{{ macros.avatar_guest(40) }}" alt="" class="user-avatar">
-            {% endif %}
-          </div>
-          {% endif %}
+        <div class="span4 thread-activity">
 
           <div class="thread-replies">
             <strong class="lead">{{ thread_reply(thread) }}, {{ thread.last|reldate|low }}</strong><br>
-            {{ replies(thread.replies) }}, <span{% if (thread.upvotes-thread.downvotes) > 0 %} class="text-success"{% elif (thread.upvotes-thread.downvotes) < 0 %} class="text-error"{% endif %}><strong>{% if (thread.upvotes-thread.downvotes) > 0 %}+{% elif (thread.upvotes-thread.downvotes) < 0 %}-{% endif %}</strong>{% trans rating=(thread.upvotes-thread.downvotes)|abs|intcomma %}{{ rating }} thread rating{% endtrans %}</span>
+            {{ replies(thread.replies) }}
           </div>
 
-          {% if user.is_authenticated() and list_form %}
+          {% if list_form %}
           <label class="thread-select checkbox"><input form="threads_form" name="{{ list_form['list_items']['html_name'] }}" type="checkbox" class="checkbox-member" value="{{ thread.pk }}"{% if list_form['list_items']['has_value'] and ('' ~ thread.pk) in list_form['list_items']['value'] %} checked="checked"{% endif %}></label>
           {% endif %}
         </div>
@@ -89,11 +93,11 @@
     </div>
     {% else %}
     <div class="thread-row threads-list-empty">
-      {% trans %}There are no threads in this forum.{% endtrans %}
+      {% trans %}There are no reports currently. Whef!{% endtrans %}
     </div>
     {% endfor %}
 
-    {% if user.is_authenticated() and list_form %}
+    {% if list_form %}
     <div class="threads-actions">
       <form id="threads_form" class="form-inline pull-right" action="{{ request_path }}" method="POST">
         <input type="hidden" name="{{ csrf_id }}" value="{{ csrf_token }}">
@@ -127,6 +131,10 @@
 {% if thread.last_poster_id %}<a href="{% url 'user' user=thread.last_poster_id, username=thread.last_poster_slug %}" class="user-link">{{ thread.last_poster_name }}</a>{% else %}{{ thread.last_poster_name }}{% endif %}
 {%- endmacro %}
 
+{% macro report_forum(thread) -%}
+{% if thread.report_forum %}<a href="{{ thread.report_forum.forum_url() }}" class="forum-link">{{ thread.report_forum }}</a>{% else %}<em>{% trans %}Deleted{% endtrans %}</em>{% endif %}
+{%- endmacro %}
+
 {% macro pager() %}
 {% if pagination['total'] > 0 %}
 <div class="pagination pull-left">
@@ -154,7 +162,7 @@
           title: populateForumTooltip({{ subforum.id }})
         });
       {% endfor %}
-      {%- if user.is_authenticated() and list_form %}
+      {%- if list_form %}
       $('#threads_form').submit(function() {
         if ($('.thread-select[]:checked').length == 0) {
           alert("{% trans %}You have to select at least one thread.{% endtrans %}");

+ 19 - 25
templates/cranefly/reports/posting.html

@@ -7,7 +7,7 @@
 
 {% block breadcrumb %}{{ super() }} <span class="divider"><i class="icon-chevron-right"></i></span></li>
 <li><a href="{% url 'reports' %}">{% trans %}Reported Posts{% endtrans %}</a> <span class="divider"><i class="icon-chevron-right"></i></span></li>
-{% if thread %}<li><a href="{% url 'report' thread=thread.pk, slug=thread.slug %}">{{ thread.name }}</a> <span class="divider"><i class="icon-chevron-right"></i></span></li>{% endif %}
+<li><a href="{% url 'report' thread=thread.pk, slug=thread.slug %}">{{ thread.name }}</a> <span class="divider"><i class="icon-chevron-right"></i></span></li>
 <li class="active">{{ get_title() }}
 {%- endblock %}
 
@@ -18,12 +18,17 @@
     <ul class="breadcrumb">
       {{ self.breadcrumb() }}</li>
     </ul>
-    <h1>{{ get_title() }} <small>{% if thread %}{{ thread.name }}{% else %}{{ forum.name }}{% endif %}</small></h1>
-    {% if thread %}
+    <h1>{{ get_title() }} <small>{{ thread.name }}</small></h1>
     <ul class="unstyled header-stats">
+      <li><i class="icon-tag"></i> {% if thread.weight == 2 -%}
+        {% trans %}Open{% endtrans %}
+        {%- elif thread.weight == 1 -%}
+        Resolved
+        {%- else -%}
+        Bogus
+        {%- endif %}</li>
       {{ get_info() }}
     </ul>
-    {% endif %}
   </div>
 </div>
 <div class="container container-primary">
@@ -66,16 +71,11 @@
             {{ form_theme.row_widget(form.fields.edit_reason, width=8) }}
             {% endif %}
 
-            {% if intersect(form.fields, ('thread_weight', 'close_thread')) %}
+            {% if 'thread_weight' in form.fields %}
             <div class="control-group">
-              <label class="control-label">{% trans %}Thread Status{% endtrans %}:</label>
+              <label class="control-label">{% trans %}Set Report Status{% endtrans %}:</label>
               <div class="controls">
-                {% if 'thread_weight' in form.fields %}
                 {{ form_theme.input_radio_select(form.fields.thread_weight, width=8) }}
-                {% endif %}
-                {% if 'close_thread' in form.fields %}
-                {{ form_theme.input_checkbox(form.fields.close_thread, width=8) }}
-                {% endif %}
               </div>
             </div>
             {% endif %}
@@ -127,21 +127,18 @@
 
 
 {% macro get_title() -%}
-{% if action == 'new_thread' -%}
-{% trans %}Post New Thread{% endtrans %}
-{%- elif action == 'edit_thread' -%}
-{% trans %}Edit Thread{% endtrans %}
+{%- if action == 'edit_thread' -%}
+{% trans %}Edit Report{% endtrans %}
 {%- elif action == 'new_reply' -%}
-{% trans %}Post New Reply{% endtrans %}
+{% trans %}Post New Comment{% endtrans %}
 {%- elif action == 'edit_reply' -%}
-{% trans %}Edit Reply{% endtrans %}
+{% trans %}Edit Comment{% endtrans %}
 {%- endif %}
 {%- endmacro %}
 
 
 {% macro get_info() -%}
 {% if action == 'edit_reply' -%}
-    {% if post.moderated %}<li><i class="icon-eye-close"></i> {% trans %}Not Reviewed{% endtrans %}</li>{% endif %}
     <li><i class="icon-time"></i> <a href="{% url 'report_find' thread=thread.pk, slug=thread.slug, post=post.pk %}">{{ post.date|reltimesince }}</a></li>
     <li><i class="icon-user"></i> {% if post.user %}<a href="{% url 'user' user=post.user.pk, username=post.user.username_slug %}">{{ post.user.username }}</a>{% else %}{{ post.user_name }}{% endif %}</li>
     <li><i class="icon-pencil"></i> {% if post.edits > 0 -%}
@@ -150,7 +147,6 @@
       {% trans %}First edit{% endtrans %}
     {%- endif %}</li>
 {%- else -%}
-    {% if thread.moderated %}<li><i class="icon-eye-close"></i> {% trans %}Not Reviewed{% endtrans %}</li>{% endif %}
     {% if action == 'edit_thread' %}
     <li><i class="icon-time"></i> <a href="{% url 'report_find' thread=thread.pk, slug=thread.slug, post=thread.start_post_id %}">{{ thread.start|reltimesince }}</a></li>
     {% else %}
@@ -158,9 +154,9 @@
     {% endif %}
     <li><i class="icon-user"></i> {% if thread.start_poster_id %}<a href="{% url 'user' user=thread.start_poster_id, username=thread.start_poster_slug %}">{{ thread.start_poster_name }}</a>{% else %}{{ thread.start_poster_name }}{% endif %}</li>
     <li><i class="icon-comment"></i> {% if thread.replies > 0 -%}
-      {% trans count=thread.replies, replies=thread.replies|intcomma %}One reply{% pluralize %}{{ replies }} replies{% endtrans %}
+      {% trans count=thread.replies, replies=thread.replies|intcomma %}One comment{% pluralize %}{{ replies }} comments{% endtrans %}
     {%- else -%}
-      {% trans %}No replies{% endtrans %}
+      {% trans %}No comments{% endtrans %}
     {%- endif %}</li>
 {%- endif %}
     {% if thread.closed %}<li><i class="icon-lock"></i> {% trans %}Locked{% endtrans %}</li>{% endif %}
@@ -168,10 +164,8 @@
 
 
 {% macro get_button() -%}
-{% if action == 'new_thread' -%}
-{% trans %}Post Thread{% endtrans %}
-{%- elif action == 'new_reply' -%}
-{% trans %}Post Reply{% endtrans %}
+{% if action == 'new_reply' -%}
+{% trans %}Post Comment{% endtrans %}
 {%- else -%}
 {% trans %}Save Changes{% endtrans %}
 {%- endif %}

+ 29 - 173
templates/cranefly/reports/thread.html

@@ -19,20 +19,25 @@
     </ul>
     <h1>{{ thread.name }}</h1>
     <ul class="unstyled header-stats">
-      {% if thread.moderated %}<li><i class="icon-eye-close"></i> {% trans %}Not Reviewed{% endtrans %}</li>{% endif %}
+      <li><i class="icon-tag"></i> {% if thread.weight == 2 -%}
+        {% trans %}Open{% endtrans %}
+        {%- elif thread.weight == 1 -%}
+        Resolved
+        {%- else -%}
+        Bogus
+        {%- endif %}</li>
       <li><i class="icon-time"></i> {{ thread.last|reltimesince }}</li>
       <li><i class="icon-user"></i> {% if thread.start_poster_id %}<a href="{% url 'user' user=thread.start_poster_id, username=thread.start_poster_slug %}">{{ thread.start_poster_name }}</a>{% else %}{{ thread.start_poster_name }}{% endif %}</li>
       <li><i class="icon-comment"></i> {% if thread.replies > 0 -%}
-        {% trans count=thread.replies, replies=thread.replies|intcomma %}One reply{% pluralize %}{{ replies }} replies{% endtrans %}
+        {% trans count=thread.replies, replies=thread.replies|intcomma %}One comment{% pluralize %}{{ replies }} comments{% endtrans %}
       {%- else -%}
-        {% trans %}No replies{% endtrans %}
+        {% trans %}No comments{% endtrans %}
       {%- endif %}</li>
-      {% if thread.closed %}<li><i class="icon-lock"></i> {% trans %}Locked{% endtrans %}</li>{% endif %}
     </ul>
   </div>
 </div>
 
-<div class="container container-primary">
+<div class="container container-primary report-view">
   {% if message %}
   <div class="messages-list">
     {{ macros.draw_message(message) }}
@@ -41,10 +46,7 @@
 
   <div class="thread-buttons">
     {{ pager() }}
-    {% if user.is_authenticated() %}    
-    {% if acl.threads.can_reply(forum, thread) %}
-    <a href="{% url 'report_reply' thread=thread.pk, slug=thread.slug %}" class="btn btn-inverse pull-right"><i class="icon-pencil"></i> {% trans %}Reply{% endtrans %}</a>
-    {% endif %}
+    <a href="{% url 'report_reply' thread=thread.pk, slug=thread.slug %}" class="btn btn-inverse pull-right"><i class="icon-pencil"></i> {% trans %}Comment{% endtrans %}</a>
     {% if watcher %}
     <form action="{% url 'report_unwatch' thread=thread.pk, slug=thread.slug %}" class="form-inline pull-right" method="post"><input type="hidden" name="{{ csrf_id }}" value="{{ csrf_token }}"><input type="hidden" name="retreat" value="{{ request_path }}"><button type="submit" class="btn btn-success tooltip-top" title="{% trans %}Remove thread from watched list{% endtrans %}"><i class="icon-bookmark"></i></button></form>
     {% if watcher.email %}
@@ -56,90 +58,20 @@
     <form action="{% url 'report_watch' thread=thread.pk, slug=thread.slug %}" class="form-inline pull-right" method="post"><input type="hidden" name="{{ csrf_id }}" value="{{ csrf_token }}"><input type="hidden" name="retreat" value="{{ request_path }}"><button type="submit" class="btn tooltip-top" title="{% trans %}Add thread to watched list{% endtrans %}"><i class="icon-bookmark"></i></button></form>
     <form action="{% url 'report_watch_email' thread=thread.pk, slug=thread.slug %}" class="form-inline pull-right" method="post"><input type="hidden" name="{{ csrf_id }}" value="{{ csrf_token }}"><input type="hidden" name="retreat" value="{{ request_path }}"><button type="submit" class="btn tooltip-top" title="{% trans %}Add thread to watched list and e-mail me if anyone replies{% endtrans %}"><i class="icon-envelope"></i></button></form>
     {% endif %}
-    {% if ignored_posts %}
-    <form action="{% url 'report_show_hidden' thread=thread.pk, slug=thread.slug %}" class="form-inline pull-right" method="post"><input type="hidden" name="{{ csrf_id }}" value="{{ csrf_token }}"><button type="submit" class="btn"><i class="icon-eye-open"></i> {% trans %}Show Hidden Replies{% endtrans %}</button></form>
-    {% endif %}
-    {% endif %}
   </div>
 
   <div class="thread-body">
+    {% if thread.start_post_id != posts[0].pk %}
+    {% set posts = (posts|list) %}
+    {% do posts.insert(0, thread.start_post) %}
+    {% endif %}
     {% for post in posts %}
-    <div id="post-{{ post.pk }}" class="post-wrapper">
+    <div id="post-{{ post.pk }}" class="post-wrapper{% if post.pk == thread.start_post_id %} report-wrapper{% endif %}">
       {% if post.message %}
       <div class="messages-list">
         {{ macros.draw_message(post.message) }}
       </div>
       {% endif %}
-      {% if post.deleted and not acl.threads.can_see_deleted_posts(forum) %}
-      <div class="post-body post-muted">
-        {% if post.user_id %}
-        <a href="{% url 'user' user=post.user.pk, username=post.user.username_slug %}"><img src="{{ post.user.get_avatar(50) }}" alt="" class="user-avatar"></a>
-        {% else %}
-        <img src="{{ macros.avatar_guest(60) }}" alt="" class="user-avatar">
-        {% endif %}
-        <div class="post-content">
-          <div class="post-header">
-            <div class="post-header-compact">
-              {% if post.user_id %}
-              <a href="{% url 'user' user=post.user.pk, username=post.user.username_slug %}" class="post-author">{{ post.user.username }}</a>{% if post.user.get_title() %} {{ user_label(post.user) }}{% endif %}
-              {% else %}
-              <span class="post-author">{{ post.user_name }}</span> <span class="label post-author-label post-label-guest">{% trans %}Unregistered{% endtrans %}</span>
-              {% endif %}
-              <span class="separator">&ndash;</span>
-              <a href="{% url 'report_find' thread=thread.pk, slug=thread.slug, post=post.pk %}" class="post-date">{{ post.date|reltimesince }}</a>
-              {% if post.edits %}
-              <span class="separator">&ndash;</span>
-              {% if acl.threads.can_see_changelog(user, forum, post) %}
-              <a href="{% url 'report_changelog' thread=thread.pk, slug=thread.slug, post=post.pk %}" class="post-changelog tooltip-bottom" title="{% trans %}Show changelog{% endtrans %}">{% trans edits=post.edits %}One edit{% pluralize %}{{ edits }} edits{% endtrans %}</a>
-              {% else %}
-              <span class="post-changelog">{% trans edits=post.edits %}One edit{% pluralize %}{{ edits }} edits{% endtrans %}</span>
-              {% endif %}
-              {% endif %}
-            </div>
-
-            <a href="{% url 'report_find' thread=thread.pk, slug=thread.slug, post=post.pk %}" class="post-perma tooltip-left" title="{% trans %}Direct link to this post{% endtrans %}">#{{ pagination['start'] + loop.index }}</a>
-
-            {% if not post.is_read %}
-            <div class="post-extra">
-              <span class="label label-warning">
-                {% trans %}New{% endtrans %}
-              </span>
-            </div>
-            {% endif %}
-
-          </div>
-          <div class="post-message">
-            {% trans user=edit_user(post), date=post.edit_date|reltimesince|low %}{{ user }} has deleted this reply {{ date }}{% endtrans %}
-          </div>
-        </dv>
-      </div>
-      {% elif post.ignored %}
-      <div class="post-body post-muted">
-        <img src="{{ macros.avatar_guest(60) }}" alt="" class="user-avatar">
-        <div class="post-arrow"></div>
-        <div class="post-content">
-          <div class="post-header">
-            <div class="post-header-compact">
-              <a href="{% url 'report_find' thread=thread.pk, slug=thread.slug, post=post.pk %}" class="post-date">{{ post.date|reltimesince }}</a>
-            </div>
-
-            <a href="{% url 'report_find' thread=thread.pk, slug=thread.slug, post=post.pk %}" class="post-perma tooltip-left" title="{% trans %}Direct link to this post{% endtrans %}">#{{ pagination['start'] + loop.index }}</a>
-
-            {% if not post.is_read %}
-            <div class="post-extra">
-              <span class="label label-warning">
-                {% trans %}New{% endtrans %}
-              </span>
-            </div>
-            {% endif %}
-
-          </div>
-          <div class="post-message">
-            {% trans %}This reply was posted by user that is on your ignored list.{% endtrans %}
-          </div>
-        </dv>
-      </div>
-      {% else %}
       <div class="post-body">
         {% if post.user_id %}
         <a href="{% url 'user' user=post.user.pk, username=post.user.username_slug %}"><img src="{{ post.user.get_avatar(100) }}" alt="" class="user-avatar"></a>
@@ -165,11 +97,15 @@
             {% endif %}
             {% endif %}
 
-            {% if user.is_authenticated() and posts_form %}
+            {% if posts_form and thread.start_post_id != post.pk %}
             <label class="checkbox post-checkbox"><input form="posts_form" name="{{ posts_form['list_items']['html_name'] }}" type="checkbox" class="checkbox-member" value="{{ post.pk }}"{% if posts_form['list_items']['has_value'] and ('' ~ post.pk) in posts_form['list_items']['value'] %} checked="checked"{% endif %}></label>
             {% endif %}
 
-            <a href="{% url 'report_find' thread=thread.pk, slug=thread.slug, post=post.pk %}" class="post-perma tooltip-left" title="{% trans %}Direct link to this post{% endtrans %}">#{{ pagination['start'] + loop.index }}</a>
+            {% if posts_form and thread.start_post_id == post.pk %}
+            <a href="{% url 'report_find' thread=thread.pk, slug=thread.slug, post=post.pk %}" class="post-perma tooltip-left" title="{% trans %}Direct link to this post{% endtrans %}"><i class="icon-">#1</i></a>
+            {% else %}
+            <a href="{% url 'report_find' thread=thread.pk, slug=thread.slug, post=post.pk %}" class="post-perma tooltip-left" title="{% trans %}Direct link to this post{% endtrans %}">#{{ pagination['start'] + loop.index0 }}</a>
+            {% endif %}
 
             <div class="post-extra">
               {% if post.protected and acl.threads.can_protect(forum) %}
@@ -184,18 +120,6 @@
               </span>
               {% endif %}
 
-              {% if post.moderated %}
-              <span class="label label-purple">
-                {% trans %}Unreviewed{% endtrans %}
-              </span>
-              {% endif %}
-
-              {% if acl.threads.can_mod_posts(forum) and post.reported %}
-              <span class="label label-important">
-                {% trans %}Reported{% endtrans %}
-              </span>
-              {% endif %}
-
               {% if not post.is_read %}
               <span class="label label-warning">
                 {% trans %}New{% endtrans %}
@@ -209,54 +133,8 @@
                 {{ post.post_preparsed|markdown_final|safe }}
               </article>
             </div>
-            {% if post.user.signature %}
-            <div class="post-signature">
-              <div class="markdown">
-                {{ post.user.signature_preparsed|markdown_final|safe }}
-              </div>
-            </div>
-            {% endif %}
           </div>
           <div class="post-footer">{% filter trim %}
-            {% if acl.threads.can_see_post_score(forum) %}
-            <div{% if user.is_authenticated() and user.pk != post.user_id %} class="post-rating-actions"{% endif %}>
-              <div class="post-rating">
-                {% if acl.threads.can_see_post_score(forum) == 1 %}
-                <span class="post-score post-score-total{% if (post.upvotes - post.downvotes) > 0 %} post-score-good{% elif (post.upvotes - post.downvotes) < 0 %} post-score-bad{% endif %}">{{ post.upvotes - post.downvotes }}</span>
-                {% elif acl.threads.can_see_post_score(forum) == 2%}
-                <span class="post-score post-score-upvotes{% if post.upvotes %} post-score-good{% endif %}">{{ post.upvotes }}</span>
-                {% endif %}
-                {% if user.is_authenticated() and user.pk != post.user_id and acl.threads.can_upvote_posts(forum) %}
-                <form action="{% url 'post_upvote' thread=thread.pk, slug=thread.slug, post=post.pk %}" class="form-inline form-upvote" method="post">
-                  <input type="hidden" name="{{ csrf_id }}" value="{{ csrf_token }}">
-                  <button type="submit" class="btn btn-link post-like"{% if post.karma_vote and post.karma_vote.score > 0 %} disabled="disabled"{% endif %}>{% trans %}Like{% endtrans %}</button>
-                </form>
-                {% else %}
-                <span class="post-{% if post.upvotes %}like{% else %}neutral{% endif %}">{% trans %}Likes{% endtrans %}</span>
-                {% endif %}
-              {% if acl.threads.can_see_post_score(forum) == 2 %}
-              </div>
-              <div class="post-rating">
-                <span class="post-score post-score-downvotes{% if post.downvotes %} post-score-bad{% endif %}">{{ post.downvotes }}</span>
-              {% endif %}
-                {% if user.is_authenticated() and user.pk != post.user_id and acl.threads.can_downvote_posts(forum) %}
-                <form action="{% url 'post_downvote' thread=thread.pk, slug=thread.slug, post=post.pk %}" class="form-inline form-downvote" method="post">
-                  <input type="hidden" name="{{ csrf_id }}" value="{{ csrf_token }}">
-                  <button type="submit" class="btn btn-link post-hate"{% if post.karma_vote and post.karma_vote.score < 0 %} disabled="disabled"{% endif %}>{% trans %}Dislike{% endtrans %}</button>
-                </form>
-                {% elif acl.threads.can_see_post_score(forum) == 2 %}
-                <span class="post-{% if post.downvotes %}hate{% else %}neutral{% endif %}">{% trans %}Dislikes{% endtrans %}</span>
-                {% endif %}
-              </div>
-              {% if acl.threads.can_see_post_votes(forum) %}
-              <div class="post-rating">
-                <a href="{% url 'post_votes' thread=thread.pk, slug=thread.slug, post=post.pk %}">{% trans %}Show Votes{% endtrans %}</a>
-              </div>
-              {% endif %}
-            </div>
-            {% endif %}
-
-            {% if user.is_authenticated() %}
             <div class="post-actions">
               {% if acl.users.can_see_users_trails() -%}
               <a href="{% url 'post_info' thread=thread.pk, slug=thread.slug, post=post.pk %}" class="post-trail">{% trans %}Info{% endtrans %}</a>
@@ -266,7 +144,7 @@
               {% elif acl.threads.can_edit_reply(user, forum, thread, post) %}
               <a href="{% url 'post_edit' thread=thread.pk, slug=thread.slug, post=post.pk %}" class="post-edit">{% trans %}Edit{% endtrans %}</a>
               {%- endif %}
-              {% if acl.threads.can_reply(forum, thread) %}<a href="{% url 'report_reply' thread=thread.pk, slug=thread.slug, quote=post.pk %}" class="post-reply">{% trans %}Reply{% endtrans %}</a>{% endif %}
+              <a href="{% url 'report_reply' thread=thread.pk, slug=thread.slug, quote=post.pk %}" class="post-reply">{% trans %}Reply{% endtrans %}</a>
             </div>
             {% if post.pk == thread.start_post_id %}
             <div class="post-actions">
@@ -313,11 +191,9 @@
               {% endif %}
             </div>
             {% endif %}
-            {% endif %}
           {% endfilter %}</div>
         </div>
       </div>
-      {% endif %}
     </div>
 
     {% if post.checkpoints_visible %}
@@ -328,20 +204,13 @@
         <span>
           {%- if checkpoint.action == 'limit' -%}
           <i class="icon-lock"></i> {% trans  %}This thread has reached its post limit and has been closed.{% endtrans %}
-          {%- elif checkpoint.action == 'accepted' -%}
-          <i class="icon-ok"></i> {% trans user=checkpoint_user(checkpoint), date=checkpoint.date|reltimesince|low %}{{ user }} accepted this thread {{ date }}{% endtrans %}
-          {%- elif checkpoint.action == 'closed' -%}
-          <i class="icon-lock"></i> {% trans user=checkpoint_user(checkpoint), date=checkpoint.date|reltimesince|low %}{{ user }} closed this thread {{ date }}{% endtrans %}
-          {%- elif checkpoint.action == 'opened' -%}
-          <i class="icon-lock"></i> {% trans user=checkpoint_user(checkpoint), date=checkpoint.date|reltimesince|low %}{{ user }} opened this thread {{ date }}{% endtrans %}
           {%- elif checkpoint.action == 'deleted' -%}
           <i class="icon-trash"></i> {% trans user=checkpoint_user(checkpoint), date=checkpoint.date|reltimesince|low %}{{ user }} deleted this thread {{ date }}{% endtrans %}
           {%- elif checkpoint.action == 'undeleted' -%}
           <i class="icon-trash"></i> {% trans user=checkpoint_user(checkpoint), date=checkpoint.date|reltimesince|low %}{{ user }} restored this thread {{ date }}{% endtrans %}
-          {%- elif checkpoint.action == 'moved' and acl.forums.can_see(checkpoint.old_forum_id) -%}
-          <i class="icon-arrow-right"></i> {% trans user=checkpoint_user(checkpoint), forum=checkpoint_forum(checkpoint), date=checkpoint.date|reltimesince|low %}{{ user }} moved this thread from {{ forum }} {{ date }}{% endtrans %}
+          {%- elif checkpoint.action == 'reported' -%}
+          <i class="icon-fire"></i> {% trans user=checkpoint_user(checkpoint), date=checkpoint.date|reltimesince|low %}{{ user }} has also reported this post {{ date }}{% endtrans %}
           {%- endif -%}
-          {% if user.is_authenticated() %}
           {% if acl.threads.can_delete_checkpoint(forum) %}
           {% if checkpoint.deleted %}
           <form action="{% url 'post_checkpoint_show' slug=thread.slug, thread=thread.pk, post=post.pk, checkpoint=checkpoint.pk %}" method="post" class="form-inline">
@@ -361,7 +230,6 @@
             <button type="submit" class="btn btn-link btn-delete">{% trans %}Delete{% endtrans %}</button>
           </form>
           {% endif %}
-          {% endif %}
         </span>
       </div>
       {% endfor %}
@@ -370,7 +238,7 @@
     {% endfor %}
   </div>
 
-  {% if user.is_authenticated() and (thread_form or posts_form) %}
+  {% if thread_form or posts_form %}
   <div class="thread-moderation">
     {% if thread_form%}
     <form id="thread_form" class="form-inline pull-left" action="{{ request_path }}" method="POST">
@@ -393,23 +261,17 @@
 
   <div class="thread-buttons">
     {{ pager(false) }}
-    {% if user.is_authenticated() and acl.threads.can_reply(forum, thread) %}
-    <a href="{% url 'report_reply' thread=thread.pk, slug=thread.slug %}" class="btn btn-inverse pull-right"><i class="icon-pencil"></i> {% trans %}Reply{% endtrans %}</a>
-    {% elif not user.is_authenticated() and not user.is_crawler() %}
-    <p class="lead thread-signin-message"><a href="{% url 'sign_in' %}">{% trans %}Sign in or register to reply.{% endtrans %}</a></p>
-    {% endif %}
+    <a href="{% url 'report_reply' thread=thread.pk, slug=thread.slug %}" class="btn btn-inverse pull-right"><i class="icon-pencil"></i> {% trans %}Comment{% endtrans %}</a>
   </div>
 
-  {% if user.is_authenticated() and acl.threads.can_reply(forum, thread) %}
   <div class="thread-quick-reply">
     <form action="{% url 'report_reply' thread=thread.pk, slug=thread.slug %}" method="post">
       <input type="hidden" name="{{ csrf_id }}" value="{{ csrf_token }}">
       <input type="hidden" name="quick_reply" value="1">
       <img src="{{ user.get_avatar(100) }}" alt="{% trans %}Your Avatar{% endtrans %}" class="user-avatar">
-      {{ editor.editor(quick_reply.post, _('Post Reply'), extra=editor_extra()) }}
+      {{ editor.editor(quick_reply.post, _('Post Comment'), extra=editor_extra()) }}
     </form>
   </div>
-  {% endif %}
 
 </div>
 {% endblock %}
@@ -424,7 +286,6 @@
     hljs.tabReplace = '    ';
     hljs.initHighlightingOnLoad();
     EnhancePostsMD();
-    {%- if user.is_authenticated() %}
     $(function () {
       $('#thread_form').submit(function() {
         if ($('#id_thread_action').val() == 'hard') {
@@ -457,11 +318,8 @@
           return decision;
       });
     });
-    {% endif %}
   </script>
-  {% if user.is_authenticated() and acl.threads.can_reply(forum, thread) %}
   {{ editor.js() }}
-  {% endif %}
 {%- endblock %}
 
 
@@ -480,10 +338,8 @@
     {%- if pagination['next'] > 0 %}<li><a href="{% url 'report' slug=thread.slug, thread=thread.id, page=pagination['next'] %}" class="tooltip-top" title="{% trans %}Newest Posts{% endtrans %}"><i class="icon-chevron-right"></i></a></li>{% endif -%}
     {%- if pagination['next'] > 0 and pagination['next'] < pagination['total'] %}<li><a href="{% url 'report' slug=thread.slug, thread=thread.id, page=pagination['total'] %}" class="tooltip-top" title="{% trans %}Go to last page{% endtrans %}">{% trans %}Last{% endtrans %} <i class="icon-chevron-right"></i></a></li>{% endif -%}
     {% endif %}
-    {% if extra and user.is_authenticated() %}
+    {% if extra %}
     {% if not is_read %}<li><a href="{% url 'report_new' slug=thread.slug, thread=thread.id %}" class="tooltip-top" title="{% trans %}Go to first unread{% endtrans %}"><i class="icon-star"></i> {% trans %}First Unread{% endtrans %}</a></li>{% endif %}
-    {% if thread.replies_moderated > 0 and acl.threads.can_approve(forum) %}<li><a href="{% url 'report_moderated' slug=thread.slug, thread=thread.id %}" class="tooltip-top" title="{% trans %}Go to first post awaiting review{% endtrans %}"><i class="icon-eye-close"></i> {% trans %}First Unreviewed{% endtrans %}</a></li>{% endif %}
-    {% if thread.replies_reported > 0 and acl.threads.can_mod_posts(thread) %}<li><a href="{% url 'report_reported' slug=thread.slug, thread=thread.id %}" class="tooltip-top" title="{% trans %}Go to first reported post{% endtrans %}"><i class="icon-fire"></i> {% trans %}First Reported{% endtrans %}</a></li>{% endif %}
     {% endif %}
   </ul>
 </div>