Skip to content

Commit

Permalink
Comments save to DB now
Browse files Browse the repository at this point in the history
  • Loading branch information
gthole committed Jan 20, 2018
1 parent 16754df commit df2d635
Show file tree
Hide file tree
Showing 12 changed files with 117 additions and 46 deletions.
9 changes: 8 additions & 1 deletion gedgo/admin.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from gedgo.models import Gedcom, BlogPost, Document, Documentary
from gedgo.models import Gedcom, BlogPost, Comment, Document, Documentary
from django.contrib import admin


Expand All @@ -7,6 +7,12 @@ class GedcomAdmin(admin.ModelAdmin):
filter_horizontal = ('key_families',)


class CommentAdmin(admin.ModelAdmin):
list_display = ('noun', 'user', 'posted')
date_hierarchy = 'posted'
search_fields = ('text', )


class BlogPostAdmin(admin.ModelAdmin):
list_display = ("title", "created", "body")
search_fields = ["title"]
Expand All @@ -25,6 +31,7 @@ class DocumentaryAdmin(admin.ModelAdmin):


admin.site.register(Gedcom, GedcomAdmin)
admin.site.register(Comment, CommentAdmin)
admin.site.register(BlogPost, BlogPostAdmin)
admin.site.register(Document, DocumentAdmin)
admin.site.register(Documentary, DocumentaryAdmin)
27 changes: 18 additions & 9 deletions gedgo/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,22 +4,31 @@
from django.shortcuts import get_object_or_404
from django.contrib.auth.models import User

from gedgo.models import Gedcom
from gedgo.models import Gedcom, Comment


class CommentForm(forms.Form):
message = forms.CharField()
class CommentForm(forms.ModelForm):
class Meta:
model = Comment
fields = ('text', 'upload', 'gedcom', 'person', 'blogpost')

def email_comment(self, user, noun, file_names):
def email_comment(self, request):
cd = self.cleaned_data
message_body = '%s\n\n%s' % (cd['message'], '\n'.join(file_names))
content = '%s\n\n---------------\n\n%s' % (
'%s://%s/admin/gedgo/comment/%s' % (
'https' if request.is_secure() else 'http',
request.get_host(),
self.instance.id,
),
cd['text']
)
send_mail(
'Comment from %s %s about %s' % (
user.first_name,
user.last_name,
noun
request.user.first_name,
request.user.last_name,
self.instance.noun
),
message_body,
content,
'[email protected]',
settings.SERVER_EMAIL
)
Expand Down
31 changes: 31 additions & 0 deletions gedgo/migrations/0003_comment.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.2 on 2018-01-20 19:09
from __future__ import unicode_literals

from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('gedgo', '0002_auto_20180120_1030'),
]

operations = [
migrations.CreateModel(
name='Comment',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('text', models.TextField()),
('posted', models.DateTimeField(auto_now_add=True)),
('upload', models.FileField(blank=True, null=True, upload_to=b'uploads/comments')),
('blogpost', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='gedgo.BlogPost')),
('gedcom', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='gedgo.Gedcom')),
('person', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='gedgo.Person')),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
],
),
]
3 changes: 2 additions & 1 deletion gedgo/models/__init__.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
from gedcom import Gedcom
from comment import Comment
from person import Person
from family import Family
from event import Event
Expand All @@ -8,6 +9,6 @@
from blogpost import BlogPost

__all__ = [
'Gedcom', 'Person', 'Family', 'Event',
'Gedcom', 'Comment', 'Person', 'Family', 'Event',
'Note', 'Document', 'Documentary', 'BlogPost'
]
2 changes: 1 addition & 1 deletion gedgo/models/blogpost.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,4 +21,4 @@ class Meta:
)

def __unicode__(self):
return self.title
return 'Blogpost "%s"' % self.title
27 changes: 27 additions & 0 deletions gedgo/models/comment.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
from django.db import models
from django.contrib.auth.models import User


class Comment(models.Model):
class Meta:
app_label = 'gedgo'

user = models.ForeignKey(User)
text = models.TextField()
posted = models.DateTimeField(auto_now_add=True)
upload = models.FileField(upload_to='uploads/comments', null=True, blank=True)

gedcom = models.ForeignKey('Gedcom', null=True, blank=True)
person = models.ForeignKey('Person', null=True, blank=True)
blogpost = models.ForeignKey('BlogPost', null=True, blank=True)

@property
def noun(self):
if self.blogpost:
return self.blogpost
elif self.person:
return self.person
return self.gedcom

def __unicode__(self):
return 'Comment about %s by %s (%d)' % (self.noun, self.user, self.id)
10 changes: 6 additions & 4 deletions gedgo/templates/default/comment_form.html
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,15 @@
<form action="" method="post" class="form-horizontal" role="form" enctype="multipart/form-data">
<p class="help-block">Send us a comment about {{ comment_noun }}.</p>
{% csrf_token %}
<textarea name="message" class="comment-area form-control" rows="10" required>{{ message }}</textarea>
<textarea name="text" class="comment-area form-control" rows="10" required>{{ message }}</textarea>
<br />
<input type="hidden" name="gedcom" value="{{ gedcom.id }}" />
<input type="hidden" name="person" value="{{ person.pointer }}" />
<input type="hidden" name="blogpost" value="{{ post.id }}" />
{% if show_file_uploads %}
<input type="file" name="uploads" multiple>
<input type="hidden" name="MAX_FILE_SIZE" value="10485760" />
<input type="file" name="upload">
<p class="help-block">Send us photos or files too if you have any to share.
<span class="help glyphicon glyphicon-question-sign" id="help-popover" data-container="body" data-toggle="popover" data-placement="right" data-content="Select multiple files at once (with the shift button).<br />Upload max size is 10 megabytes."><span>
<span class="help glyphicon glyphicon-question-sign" id="help-popover" data-container="body" data-toggle="popover" data-placement="right" data-content="Upload max size is 10 megabytes."><span>
</p>
{% endif %}
<br>
Expand Down
9 changes: 5 additions & 4 deletions gedgo/views/blog.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,17 +48,18 @@ def blog_list(request):

@login_required
def blogpost(request, post_id):
"Single post."
"""
A single post.
"""

noun = "blog post"
form, redirect = process_comments(request, noun)
form, redirect = process_comments(request)
if redirect is not None:
return redirect

context = {
'post': get_object_or_404(BlogPost, id=post_id),
'form': form,
'comment_noun': noun
'comment_noun': 'this blog post'
}

return render(
Expand Down
1 change: 1 addition & 0 deletions gedgo/views/media.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@


STORAGES = {
'default': default_storage,
'research': research_storage,
'gedcom': gedcom_storage
}
Expand Down
10 changes: 4 additions & 6 deletions gedgo/views/model_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,7 @@ def gedcom(request, gedcom_id):
g = get_object_or_404(Gedcom, id=gedcom_id)
post = BlogPost.objects.all().order_by("-created").first()

noun = g.title or ("Gedcom #%d" % g.id)
form, redirect = process_comments(request, noun)
form, redirect = process_comments(request)
if redirect is not None:
return redirect

Expand All @@ -23,7 +22,7 @@ def gedcom(request, gedcom_id):
'gedcom': g,
'post': post,
'form': form,
'comment_noun': noun
'comment_noun': str(g)
}
)

Expand All @@ -33,8 +32,7 @@ def person(request, gedcom_id, person_id):
g = get_object_or_404(Gedcom, id=gedcom_id)
p = get_object_or_404(Person, gedcom=g, pointer=person_id)

noun = "%s (%s)" % (p.full_name, p.pointer)
form, redirect = process_comments(request, noun)
form, redirect = process_comments(request)
if redirect is not None:
return redirect

Expand All @@ -44,7 +42,7 @@ def person(request, gedcom_id, person_id):
'photos': [photo for photo in p.photos if not photo.id == p.key_photo.id],
'gedcom': g,
'form': form,
'comment_noun': noun
'comment_noun': str(p)
}

return render(request, 'person.html', context)
Expand Down
32 changes: 13 additions & 19 deletions gedgo/views/util.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,38 +9,32 @@
from gedgo.models import BlogPost, Documentary
from gedgo.forms import CommentForm

def process_comments(request, noun):

def process_comments(request):
"""
Returns a tuple of (form, redirect_response) depending on whether a
new comment has been posted or not.
"""
if not request.POST:
return CommentForm(), None

form = CommentForm(request.POST)
if form.is_valid():
# Store file uploads
file_names = []
if getattr(settings, 'GEDGO_ALLOW_FILE_UPLOADS', True) is True:
for file_ in request.FILES.getlist('uploads'):
upload_path = 'uploaded/%s/%s/%s' % (
request.user.username,
request.path.strip('/').replace('gedgo/', ''),
file_.name
)
default_storage.save(upload_path, file_)
file_names.append(upload_path)
form = CommentForm(request.POST, request.FILES)
try:
assert form.is_valid()
form.instance.user = request.user
form.save()

# Email the comment to the site owners.
form.email_comment(request.user, noun, file_names)
form.email_comment(request)
messages.success(
request,
'Your comment has ben sent. Thank you!'
'Your comment has been sent. Thank you!'
)
else:
# Shouldn't happen, since there's almost no server-side validation
except Exception as e:
print e
messages.error(
request,
"We're sorry, your comment was not sent."
"We're sorry, we couldn't process your comment."
)
return None, redirect(request.path)

Expand Down
2 changes: 1 addition & 1 deletion settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
USE_TZ = True

MEDIA_ROOT = '/app/files/default/'
MEDIA_URL = '/gedgo/media/'
MEDIA_URL = '/gedgo/media/default/'

STATIC_ROOT = ''
STATIC_URL = '/static/'
Expand Down

0 comments on commit df2d635

Please sign in to comment.