mirror of
https://gitlab.com/SIGBUS/nyaa.git
synced 2024-12-22 20:00:01 +00:00
Added comments
This commit is contained in:
parent
1e230584ab
commit
6d608ab2f4
|
@ -126,6 +126,13 @@ class DisabledSelectField(SelectField):
|
|||
raise ValueError(self.gettext('Not a valid choice'))
|
||||
|
||||
|
||||
class CommentForm(FlaskForm):
|
||||
comment = TextAreaField('Make a comment', [
|
||||
Length(max=255, message='Comment must be at most %(max)d characters long.'),
|
||||
Required()
|
||||
])
|
||||
|
||||
|
||||
class EditForm(FlaskForm):
|
||||
display_name = StringField('Torrent display name', [
|
||||
Length(min=3, max=255,
|
||||
|
|
|
@ -317,6 +317,22 @@ class SubCategory(db.Model):
|
|||
return cls.query.get((sub_cat_id, main_cat_id))
|
||||
|
||||
|
||||
class Comment(db.Model):
|
||||
__tablename__ = DB_TABLE_PREFIX + 'comments'
|
||||
|
||||
id = db.Column(db.Integer, primary_key=True)
|
||||
torrent = db.Column(db.Integer, db.ForeignKey(
|
||||
DB_TABLE_PREFIX + 'torrents.id'), primary_key=True)
|
||||
user_id = db.Column(db.Integer, db.ForeignKey(
|
||||
'users.id', ondelete='CASCADE'))
|
||||
text = db.Column(db.String(length=255), nullable=False)
|
||||
|
||||
user = db.relationship('User', uselist=False, back_populates='comments')
|
||||
|
||||
def __repr__(self):
|
||||
return '<Comment %r>' % self.id
|
||||
|
||||
|
||||
class UserLevelType(IntEnum):
|
||||
REGULAR = 0
|
||||
TRUSTED = 1
|
||||
|
@ -346,7 +362,8 @@ class User(db.Model):
|
|||
last_login_date = db.Column(db.DateTime(timezone=False), default=None, nullable=True)
|
||||
last_login_ip = db.Column(db.Binary(length=16), default=None, nullable=True)
|
||||
|
||||
torrents = db.relationship('Torrent', back_populates='user', lazy="dynamic")
|
||||
torrents = db.relationship('Torrent', back_populates='user', lazy='dynamic')
|
||||
comments = db.relationship('Comment', back_populates='user', lazy='dynamic')
|
||||
# session = db.relationship('Session', uselist=False, back_populates='user')
|
||||
|
||||
def __init__(self, username, email, password):
|
||||
|
|
|
@ -573,6 +573,7 @@ def upload():
|
|||
@app.route('/view/<int:torrent_id>')
|
||||
def view_torrent(torrent_id):
|
||||
torrent = models.Torrent.by_id(torrent_id)
|
||||
form = forms.CommentForm()
|
||||
|
||||
viewer = flask.g.user
|
||||
|
||||
|
@ -590,12 +591,43 @@ def view_torrent(torrent_id):
|
|||
if torrent.filelist:
|
||||
files = json.loads(torrent.filelist.filelist_blob.decode('utf-8'))
|
||||
|
||||
if flask.g.user is not None and flask.g.user.is_admin:
|
||||
comments = models.Comment.query.filter(models.Comment.torrent == torrent_id)
|
||||
else:
|
||||
comments = models.Comment.query.filter(models.Comment.torrent == torrent_id,
|
||||
models.Comment.deleted == False)
|
||||
|
||||
comment_count = comments.count()
|
||||
|
||||
return flask.render_template('view.html', torrent=torrent,
|
||||
files=files,
|
||||
viewer=viewer,
|
||||
form=form,
|
||||
comments=comments,
|
||||
comment_count=comment_count,
|
||||
can_edit=can_edit)
|
||||
|
||||
|
||||
@app.route('/view/<int:torrent_id>/submit_comment', methods=['POST'])
|
||||
def submit_comment(torrent_id):
|
||||
form = forms.CommentForm(flask.request.form)
|
||||
|
||||
if flask.request.method == 'POST' and form.validate():
|
||||
comment_text = (form.comment.data or '').strip()
|
||||
|
||||
# Null entry for User just means Anonymous
|
||||
current_user_id = flask.g.user.id if flask.g.user else None
|
||||
comment = models.Comment(
|
||||
torrent=torrent_id,
|
||||
user_id=current_user_id,
|
||||
text=comment_text)
|
||||
|
||||
db.session.add(comment)
|
||||
db.session.commit()
|
||||
|
||||
return flask.redirect(flask.url_for('view_torrent', torrent_id=torrent_id))
|
||||
|
||||
|
||||
@app.route('/view/<int:torrent_id>/edit', methods=['GET', 'POST'])
|
||||
def edit_torrent(torrent_id):
|
||||
torrent = models.Torrent.by_id(torrent_id)
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
{% extends "layout.html" %}
|
||||
{% block title %}{{ torrent.display_name }} :: {{ config.SITE_NAME }}{% endblock %}
|
||||
{% block body %}
|
||||
{% from "_formhelpers.html" import render_field %}
|
||||
<div class="panel panel-{% if torrent.deleted %}deleted{% elif torrent.remake %}danger{% elif torrent.trusted %}success{% else %}default{% endif %}">
|
||||
<div class="panel-heading"{% if torrent.hidden %} style="background-color: darkgray;"{% endif %}>
|
||||
<h3 class="panel-title">
|
||||
|
@ -129,6 +130,56 @@
|
|||
</div>
|
||||
{% endif %}
|
||||
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title">
|
||||
Comments - {{ comment_count }}
|
||||
</h3>
|
||||
</div>
|
||||
<div class="panel-collapse">
|
||||
<table class="table table-bordered table-striped">
|
||||
<thead>
|
||||
{% if g.user.is_admin %}
|
||||
<th style="width:auto;">Delete</th>
|
||||
{% endif %}
|
||||
<th style="width:auto;">User</th>
|
||||
<th style="width:100%;">Comment</th>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for comment in comments %}
|
||||
<tr>
|
||||
{% if g.user.is_admin %}
|
||||
<td class="col-md-1">
|
||||
{% if not comment.deleted %}
|
||||
<a href="/"><i class="fa fa-ban"></i></a>
|
||||
{% else %}
|
||||
<a href="/"><i class="fa fa-circle-o"></i></a>
|
||||
{% endif %}
|
||||
</td>
|
||||
{% endif %}
|
||||
<td class="col-md-1">
|
||||
{% if comment.user %}
|
||||
<a href="{{ url_for('view_user', user_name=comment.user.username) }}">
|
||||
{{ comment.user.username }}
|
||||
</a>
|
||||
{% else %}
|
||||
<span>Anonymous</span>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td class="col-md-10">{{ comment.text }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
<tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<form method="POST" action="{{ request.url }}/submit_comment">
|
||||
{{ form.csrf_token }}
|
||||
{{ render_field(form.comment, class_='form-control') }}
|
||||
<input type="submit" value="Submit" class="btn btn-primary">
|
||||
</form>
|
||||
|
||||
<script>
|
||||
var target = document.getElementById('torrent-description');
|
||||
var text = target.innerHTML;
|
||||
|
|
Loading…
Reference in a new issue