diff --git a/exam/migrations/0001_initial.py b/exam/migrations/0001_initial.py new file mode 100644 index 0000000..51dedc2 --- /dev/null +++ b/exam/migrations/0001_initial.py @@ -0,0 +1,48 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10 on 2016-10-06 18:54 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Answer', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('answer', models.CharField(max_length=200, verbose_name='Answer')), + ('order', models.PositiveSmallIntegerField(verbose_name='Order')), + ], + options={ + 'verbose_name_plural': 'Answers', + 'ordering': ('order',), + 'verbose_name': 'Answer', + }, + ), + migrations.CreateModel( + name='Exam', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=100, verbose_name='Name')), + ('beginDate', models.DateTimeField(auto_now_add=True, verbose_name='Start Date')), + ('endDate', models.DateTimeField(auto_now=True, verbose_name='Date of last update')), + ], + options={ + 'verbose_name_plural': 'Exams', + 'verbose_name': 'Exam', + }, + ), + migrations.AddField( + model_name='answer', + name='exam', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='answers', to='exam.Exam', verbose_name='Answers'), + ), + ] diff --git a/forum/static/js/forum.js b/forum/static/js/forum.js index 4e2c1d8..a9d394d 100644 --- a/forum/static/js/forum.js +++ b/forum/static/js/forum.js @@ -255,6 +255,49 @@ function answer(id, url) { /* * +* Function to load form to edit post answer +* +*/ +function edit_post_answer(url, answer_id) { + $.ajax({ + url: url, + success: function(data) { + $("#answer_"+answer_id).find(".post_answer_content").hide(); + $("#answer_"+answer_id).find(".post_answer_content").after(data); + + var frm = $("#answer_"+answer_id).find(".answer_post_form"); + frm.submit(function () { + $.ajax({ + type: frm.attr('method'), + url: frm.attr('action'), + data: frm.serialize(), + success: function (data) { + $("#answer_"+answer_id).parent().after(data); + frm.parent().parent().remove(); + }, + error: function(data) { + console.log(frm.serialize()); + console.log('Error'); + } + }); + return false; + }); + } + }); +} + +/* +* +* Function to cancel post answer edition +* +*/ +function cancelEditPostAnswer(answer_id) { + $("#answer_"+answer_id).find(".post_answer_content").show(); + $("#answer_"+answer_id).find(".answer_post_form").remove(); +} + +/* +* * Function to delete an answer * */ diff --git a/forum/templates/post/post_update_form.html b/forum/templates/post/post_update_form.html index f468d0d..db80133 100644 --- a/forum/templates/post/post_update_form.html +++ b/forum/templates/post/post_update_form.html @@ -1,7 +1,7 @@ {% load i18n permission_tags list_post %} {% load widget_tweaks %} -
+ {% csrf_token %} {% for field in form %} {% if field.field.widget.input_type == 'hidden' %} diff --git a/forum/templates/post_answers/post_answer_form.html b/forum/templates/post_answers/post_answer_form.html index a71ff7b..9e0b7ed 100644 --- a/forum/templates/post_answers/post_answer_form.html +++ b/forum/templates/post_answers/post_answer_form.html @@ -1,7 +1,7 @@ {% load static i18n %} {% load widget_tweaks %} - + {% csrf_token %} {% for field in form %} {% if field.field.widget.input_type == 'hidden' %} @@ -27,11 +27,18 @@ {% endif %} - - - + {% if answer %} +
+ + +
+ {% else %} + + + + {% endif %} {% endif %} diff --git a/forum/templates/post_answers/post_answer_list.html b/forum/templates/post_answers/post_answer_list.html index aeb80e7..b068305 100644 --- a/forum/templates/post_answers/post_answer_list.html +++ b/forum/templates/post_answers/post_answer_list.html @@ -2,28 +2,36 @@ {% if answers|length > 0 %} {% for answer in answers %} -
-
-

- {{ answer.user }} - {% if request.user|has_role:'system_admin' or request.user == answer.user %} -
-
- - +
+
+
+

+ {{ answer.user }} + {% if request.user|has_role:'system_admin' or request.user == answer.user %} + + {% endif %} +

+
+
+

{{ answer.answer_date|timesince }} {% trans 'ago' %} + {% if answer.answer_date != answer.modifiction_date %} + - {% trans 'Edited' %} + {% endif %} +

- {% endif %} -

-
-

{{ answer.answer_date|timesince }} {% trans 'ago' %}

+

{{ answer.message|linebreaks }}

+
-

{{ answer.message|linebreaks }}

{% endfor %} diff --git a/forum/templates/post_answers/post_answer_render.html b/forum/templates/post_answers/post_answer_render.html index 6981968..094b019 100644 --- a/forum/templates/post_answers/post_answer_render.html +++ b/forum/templates/post_answers/post_answer_render.html @@ -1,26 +1,34 @@ {% load i18n permission_tags %} -
-
-

- {{ answer.user }} - {% if request.user|has_role:'system_admin' or request.user == answer.user %} -
-
- - +
+
+
+

+ {{ answer.user }} + {% if request.user|has_role:'system_admin' or request.user == answer.user %} + + {% endif %} +

+
+
+

{{ answer.answer_date|timesince }} {% trans 'ago' %} + {% if answer.answer_date != answer.modifiction_date %} + - {% trans 'Edited' %} + {% endif %} +

- {% endif %} -

-
-

{{ answer.answer_date|timesince }} {% trans 'ago' %}

+

{{ answer.message|linebreaks }}

+
-

{{ answer.message|linebreaks }}

\ No newline at end of file diff --git a/forum/urls.py b/forum/urls.py index f5b07a6..0d29169 100644 --- a/forum/urls.py +++ b/forum/urls.py @@ -18,6 +18,7 @@ urlpatterns = [ url(r'^post_deleted/$', views.post_deleted, name='deleted_post'), url(r'^post_answers/$', views.PostAnswerIndex.as_view(), name='post_answers'), url(r'^reply_post/$', views.CreatePostAnswerView.as_view(), name='reply_post'), + url(r'^update_post_answer/(?P[\w_-]+)/$', views.PostAnswerUpdateView.as_view(), name='update_post_answer'), url(r'^render_post_answer/([\w_-]+)/$', views.render_post_answer, name='render_post_answer'), url(r'^delete_post_answer/(?P[\w_-]+)/$', views.PostAnswerDeleteView.as_view(), name='delete_answer'), url(r'^post_answer_deleted/$', views.answer_deleted, name='deleted_answer'), diff --git a/forum/views.py b/forum/views.py index 58c0ae1..a38dd42 100644 --- a/forum/views.py +++ b/forum/views.py @@ -210,6 +210,20 @@ def render_post_answer(request, answer): return render(request, "post_answers/post_answer_render.html", context) +class PostAnswerUpdateView(LoginRequiredMixin, generic.UpdateView): + login_url = reverse_lazy("core:home") + redirect_field_name = 'next' + + form_class = PostAnswerForm + model = PostAnswer + template_name = "post_answers/post_answer_form.html" + context_object_name = 'answer' + + def get_success_url(self): + self.success_url = reverse('course:forum:render_post_answer', args = (self.object.id, )) + + return self.success_url + class PostAnswerDeleteView(LoginRequiredMixin, generic.DeleteView): login_url = reverse_lazy("core:home") redirect_field_name = 'next' -- libgit2 0.21.2