diff --git a/amadeus/settings.py b/amadeus/settings.py index 07e9a7b..34afcfe 100644 --- a/amadeus/settings.py +++ b/amadeus/settings.py @@ -47,7 +47,7 @@ INSTALLED_APPS = [ 'app', 'courses', 'users', - # 'forum', + 'forum', ] MIDDLEWARE_CLASSES = [ diff --git a/core/static/css/base/amadeus.css b/core/static/css/base/amadeus.css index 518d0a6..a5cf89e 100644 --- a/core/static/css/base/amadeus.css +++ b/core/static/css/base/amadeus.css @@ -271,3 +271,29 @@ a.alert_message:hover{color : grey} .accordion_list { background: #e0e0e0; } + +.forum_collapse { + color: #000; +} +.forum_collapse:hover, .forum_collapse:focus { + text-decoration: none; + color: #000; +} + +.timeline.post { + border-top-left-radius: 8px; + border-top-right-radius: 8px; + padding-bottom: 0px; + -webkit-padding-start: 0px !important; + width: 100%; +} +.timeline.post li { + padding: 10px; + border-bottom: 1px solid #fff; +} +.timeline.post li:last-child { + border: none; +} +.timeline.post h3 { + margin-top: 5px; +} \ No newline at end of file diff --git a/courses/templates/subject/form_view_teacher.html b/courses/templates/subject/form_view_teacher.html index 11ee35a..2bc067a 100644 --- a/courses/templates/subject/form_view_teacher.html +++ b/courses/templates/subject/form_view_teacher.html @@ -27,6 +27,25 @@ $(".forum_form").show(); } + + var postsUrl = '{% url "forum:posts" %}'; + var formPostsUrl = ''; + + function showPosts(forum) { + if ($("#collapse" + forum).hasClass('in')) { + $("#collapse" + forum).collapse('hide'); + } else { + $.ajax({ + url: postsUrl, + data: {'forum': forum}, + success: function(data) { + $("#collapse" + forum).find(".well").html(data); + } + }); + + $("#collapse" + forum).collapse('show'); + } + } {% endblock %} diff --git a/forum/admin.py b/forum/admin.py index 8c38f3f..bb2ace5 100644 --- a/forum/admin.py +++ b/forum/admin.py @@ -1,3 +1,19 @@ from django.contrib import admin -# Register your models here. +from .models import Forum, Post, PostAnswer + +class ForumAdmin(admin.ModelAdmin): + list_display = ['name', 'slug'] + search_fields = ['name', 'slug'] + +class PostAdmin(admin.ModelAdmin): + list_display = ['user', 'forum'] + search_fields = ['user', 'forum'] + +class PostAnswerAdmin(admin.ModelAdmin): + list_display = ['user', 'post', 'answer_date'] + search_fields = ['user'] + +admin.site.register(Forum, ForumAdmin) +admin.site.register(Post, PostAdmin) +admin.site.register(PostAnswer, PostAnswerAdmin) \ No newline at end of file diff --git a/forum/forms.py b/forum/forms.py index 945ea8a..ee108c8 100644 --- a/forum/forms.py +++ b/forum/forms.py @@ -6,13 +6,13 @@ class ForumForm(forms.ModelForm): class Meta: model = Forum - fields = ('title', 'description') + fields = ('name', 'description') labels = { - 'title': _('Title'), + 'name': _('Title'), 'description': _('Description') } help_texts = { - 'title': _('Forum title'), + 'name': _('Forum title'), 'description': _('What is this forum about?') } widgets = { diff --git a/forum/migrations/0001_initial.py b/forum/migrations/0001_initial.py new file mode 100644 index 0000000..8b1e26b --- /dev/null +++ b/forum/migrations/0001_initial.py @@ -0,0 +1,61 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10 on 2016-09-22 20:41 +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): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('courses', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='Forum', + fields=[ + ('activity_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='courses.Activity')), + ('title', models.CharField(max_length=100, verbose_name='Title')), + ('description', models.TextField(blank=True, verbose_name='Description')), + ], + options={ + 'verbose_name': 'Forum', + 'verbose_name_plural': 'Foruns', + }, + bases=('courses.activity',), + ), + migrations.CreateModel( + name='Post', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('message', models.TextField(verbose_name='Post message')), + ('post_date', models.DateTimeField(auto_now_add=True, verbose_name='Post Date')), + ('forum', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='forum.Forum', verbose_name='Forum')), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Autor')), + ], + options={ + 'verbose_name': 'Post', + 'verbose_name_plural': 'Posts', + }, + ), + migrations.CreateModel( + name='PostAnswer', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('message', models.TextField(verbose_name='Answer message')), + ('answer_date', models.DateTimeField(auto_now_add=True, verbose_name='Answer Date')), + ('post', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='forum.Post', verbose_name='Post')), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Autor')), + ], + options={ + 'verbose_name': 'Post Answer', + 'verbose_name_plural': 'Post Answers', + }, + ), + ] diff --git a/forum/migrations/0002_remove_forum_title.py b/forum/migrations/0002_remove_forum_title.py new file mode 100644 index 0000000..9194c4d --- /dev/null +++ b/forum/migrations/0002_remove_forum_title.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10 on 2016-09-22 20:43 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('forum', '0001_initial'), + ] + + operations = [ + migrations.RemoveField( + model_name='forum', + name='title', + ), + ] diff --git a/forum/migrations/__init__.py b/forum/migrations/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/forum/migrations/__init__.py diff --git a/forum/models.py b/forum/models.py index 93fa5ab..1d39781 100644 --- a/forum/models.py +++ b/forum/models.py @@ -34,7 +34,7 @@ class Post(models.Model): verbose_name_plural = _('Posts') def __str__(self): - return ''.join([self.user.name, " / ", self.post_date]) + return ''.join([self.user.name, " / ", str(self.post_date)]) """ It represents an answer to a forum's post diff --git a/forum/templates/forum_list.html b/forum/templates/forum_list.html index 873bbe3..ca50ee2 100644 --- a/forum/templates/forum_list.html +++ b/forum/templates/forum_list.html @@ -2,10 +2,16 @@ {% if foruns|length > 0 %} {% for forum in foruns %} - {% endif %} - \ No newline at end of file diff --git a/forum/templates/post_answer_list.html b/forum/templates/post_answer_list.html new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/forum/templates/post_answer_list.html diff --git a/forum/templates/post_list.html b/forum/templates/post_list.html new file mode 100644 index 0000000..e183a9a --- /dev/null +++ b/forum/templates/post_list.html @@ -0,0 +1,34 @@ +{% load i18n %} + +{% if posts|length > 0 %} + +{% else %} +

{% trans 'No posts were made yet.' %}

+{% endif %} \ No newline at end of file diff --git a/forum/urls.py b/forum/urls.py index c3e9dfd..b54d4c5 100644 --- a/forum/urls.py +++ b/forum/urls.py @@ -6,4 +6,5 @@ from . import views urlpatterns = [ url(r'^$', views.ForumIndex.as_view(), name='index'), url(r'^create$', views.CreateForumView.as_view(), name='create'), + url(r'^posts$', views.PostIndex.as_view(), name='posts'), ] diff --git a/forum/views.py b/forum/views.py index efe5055..801cb93 100644 --- a/forum/views.py +++ b/forum/views.py @@ -4,7 +4,7 @@ from django.utils.translation import ugettext_lazy as _ from django.views import generic from django.contrib.auth.mixins import LoginRequiredMixin -from .models import Forum +from .models import Forum, Post from courses.models import Topic from .forms import ForumForm @@ -27,4 +27,18 @@ class CreateForumView(LoginRequiredMixin, generic.edit.CreateView): template_name = 'forum_form.html' form_class = ForumForm - success_url = reverse_lazy('forum:index') \ No newline at end of file + success_url = reverse_lazy('forum:index') + +class PostIndex(LoginRequiredMixin, generic.ListView): + login_url = reverse_lazy("core:home") + redirect_field_name = 'next' + + template_name = "post_list.html" + context_object_name = 'posts' + + def get_queryset(self): + forum = get_object_or_404(Forum, slug = self.request.GET.get('forum', '')) + + context = Post.objects.filter(forum = forum) + + return context \ No newline at end of file -- libgit2 0.21.2