Commit 3a6a41bd2ffbea2d61618f3997ea706b93f0a79e
1 parent
8847726a
Exists in
master
and in
5 other branches
Applying date limit [Issue: #259]
Showing
5 changed files
with
80 additions
and
65 deletions
Show diff stats
forum/models.py
@@ -6,6 +6,8 @@ from autoslug.fields import AutoSlugField | @@ -6,6 +6,8 @@ from autoslug.fields import AutoSlugField | ||
6 | from courses.models import Activity | 6 | from courses.models import Activity |
7 | from users.models import User | 7 | from users.models import User |
8 | 8 | ||
9 | +from datetime import date | ||
10 | + | ||
9 | """ | 11 | """ |
10 | It's one kind of activity available for a Topic. | 12 | It's one kind of activity available for a Topic. |
11 | It works like a 'topic' of forum, which users can post to it and answer posts of it. | 13 | It works like a 'topic' of forum, which users can post to it and answer posts of it. |
@@ -23,6 +25,11 @@ class Forum(Activity): | @@ -23,6 +25,11 @@ class Forum(Activity): | ||
23 | def __str__(self): | 25 | def __str__(self): |
24 | return self.name | 26 | return self.name |
25 | 27 | ||
28 | + def is_closed(self): | ||
29 | + today = date.today() | ||
30 | + | ||
31 | + return self.limit_date < today | ||
32 | + | ||
26 | 33 | ||
27 | """ | 34 | """ |
28 | It represents a post made in a forum (topic) | 35 | It represents a post made in a forum (topic) |
forum/static/js/forum.js
@@ -62,6 +62,7 @@ function createForum(url, topic) { | @@ -62,6 +62,7 @@ function createForum(url, topic) { | ||
62 | function setForumCreateFormSubmit(topic) { | 62 | function setForumCreateFormSubmit(topic) { |
63 | $('.date-picker').datepicker({ | 63 | $('.date-picker').datepicker({ |
64 | language: locale, | 64 | language: locale, |
65 | + startDate: "dateToday" | ||
65 | }); | 66 | }); |
66 | 67 | ||
67 | var frm = $('#forum_create'); | 68 | var frm = $('#forum_create'); |
@@ -114,6 +115,7 @@ function editForum(url, forum, success_message) { | @@ -114,6 +115,7 @@ function editForum(url, forum, success_message) { | ||
114 | function setForumUpdateFormSubmit(success_message) { | 115 | function setForumUpdateFormSubmit(success_message) { |
115 | $('.date-picker').datepicker({ | 116 | $('.date-picker').datepicker({ |
116 | language: locale, | 117 | language: locale, |
118 | + startDate: "dateToday" | ||
117 | }); | 119 | }); |
118 | 120 | ||
119 | var frm = $('#forum_create'); | 121 | var frm = $('#forum_create'); |
forum/templates/forum/forum_view.html
@@ -59,45 +59,47 @@ | @@ -59,45 +59,47 @@ | ||
59 | <h4><b>{% trans 'Opened in' %}:</b> {{ forum.create_date }}</h4> | 59 | <h4><b>{% trans 'Opened in' %}:</b> {{ forum.create_date }}</h4> |
60 | </div> | 60 | </div> |
61 | </div> | 61 | </div> |
62 | - <div class="form_post_block"> | ||
63 | - <hr /> | ||
64 | - <form id="form_post" method="post" action="{% url 'course:forum:create_post' %}" enctype="multipart/form-data"> | ||
65 | - {% csrf_token %} | ||
66 | - {% for field in form %} | ||
67 | - {% if field.field.widget.input_type == 'hidden' %} | ||
68 | - {% render_field field class='form-control' value=forum.id %} | ||
69 | - {% else %} | ||
70 | - <div class="form-group {% if form.has_error %} has-error {% endif %} is-fileinput"> | ||
71 | - <div class="input-group"> | ||
72 | - {% render_field field class='form-control' placeholder="Post a message" %} | ||
73 | - <span class="help-block">{{ field.help_text }}</span> | ||
74 | - {% if field.errors %} | ||
75 | - <div class="row"> | ||
76 | - <br /> | ||
77 | - <div class="alert alert-danger alert-dismissible" role="alert"> | ||
78 | - <button type="button" class="close" data-dismiss="alert" aria-label="Close"> | ||
79 | - <span aria-hidden="true">×</span> | ||
80 | - </button> | ||
81 | - <ul> | ||
82 | - {% for error in field.errors %} | ||
83 | - <li>{{ error }}</li> | ||
84 | - {% endfor %} | ||
85 | - </ul> | 62 | + {% if not forum.is_closed %} |
63 | + <div class="form_post_block"> | ||
64 | + <hr /> | ||
65 | + <form id="form_post" method="post" action="{% url 'course:forum:create_post' %}" enctype="multipart/form-data"> | ||
66 | + {% csrf_token %} | ||
67 | + {% for field in form %} | ||
68 | + {% if field.field.widget.input_type == 'hidden' %} | ||
69 | + {% render_field field class='form-control' value=forum.id %} | ||
70 | + {% else %} | ||
71 | + <div class="form-group {% if form.has_error %} has-error {% endif %} is-fileinput"> | ||
72 | + <div class="input-group"> | ||
73 | + {% render_field field class='form-control' placeholder="Post a message" %} | ||
74 | + <span class="help-block">{{ field.help_text }}</span> | ||
75 | + {% if field.errors %} | ||
76 | + <div class="row"> | ||
77 | + <br /> | ||
78 | + <div class="alert alert-danger alert-dismissible" role="alert"> | ||
79 | + <button type="button" class="close" data-dismiss="alert" aria-label="Close"> | ||
80 | + <span aria-hidden="true">×</span> | ||
81 | + </button> | ||
82 | + <ul> | ||
83 | + {% for error in field.errors %} | ||
84 | + <li>{{ error }}</li> | ||
85 | + {% endfor %} | ||
86 | + </ul> | ||
87 | + </div> | ||
86 | </div> | 88 | </div> |
87 | - </div> | ||
88 | - {% endif %} | ||
89 | - <span class="input-group-btn"> | ||
90 | - <button type="submit" class="btn btn-fab btn-fab-mini"> | ||
91 | - <i class="material-icons">{% trans 'send' %}</i> | ||
92 | - </button> | ||
93 | - </span> | 89 | + {% endif %} |
90 | + <span class="input-group-btn"> | ||
91 | + <button type="submit" class="btn btn-fab btn-fab-mini"> | ||
92 | + <i class="material-icons">{% trans 'send' %}</i> | ||
93 | + </button> | ||
94 | + </span> | ||
95 | + </div> | ||
94 | </div> | 96 | </div> |
95 | - </div> | ||
96 | - {% endif %} | ||
97 | - {% endfor %} | ||
98 | - </form> | ||
99 | - <hr /> | ||
100 | - </div> | 97 | + {% endif %} |
98 | + {% endfor %} | ||
99 | + </form> | ||
100 | + <hr /> | ||
101 | + </div> | ||
102 | + {% endif %} | ||
101 | <div id="posts_list"> | 103 | <div id="posts_list"> |
102 | {% list_posts request forum %} | 104 | {% list_posts request forum %} |
103 | </div> | 105 | </div> |
forum/templates/post/post_list.html
@@ -6,23 +6,25 @@ | @@ -6,23 +6,25 @@ | ||
6 | <div id="post_{{ post.id }}" class="col-sm-12 col-xs-12"> | 6 | <div id="post_{{ post.id }}" class="col-sm-12 col-xs-12"> |
7 | <h3 class="user-name"> | 7 | <h3 class="user-name"> |
8 | {{ post.user }} | 8 | {{ post.user }} |
9 | - <div class="pull-right"> | ||
10 | - <a href="javascript:answer('{{ post.id }}', '{% url 'course:forum:reply_post' %}');"> | ||
11 | - <i class="material-icons">{% trans 'reply' %}</i> | ||
12 | - </a> | ||
13 | - {% if request.user|has_role:'system_admin' or request.user == post.user %} | ||
14 | - {% csrf_token %} | ||
15 | - <div class="btn-group icon-more-horiz"> | ||
16 | - <a class="btn btn-default btn-xs dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> | ||
17 | - <i class="material-icons">more_horiz</i> | ||
18 | - </a> | ||
19 | - <ul class="dropdown-menu pull-right" aria-labelledby="dropdownMenu1"> | ||
20 | - <li><a href="javascript:edit_post('{% url 'course:forum:update_post' post.id %}', '{{ post.id }}', '{% trans 'Post edited successfully!' %}')"><i class="material-icons">create</i> {% trans 'Edit' %}</a></li> | ||
21 | - <li><a href="javascript:javascript:delete_post('{% url 'course:forum:delete_post' post.id %}', '{{ post.id }}')"><i class="material-icons">delete_sweep</i> {% trans 'Remove' %}</a></li> | ||
22 | - </ul> | ||
23 | - </div> | ||
24 | - {% endif %} | ||
25 | - </div> | 9 | + {% if not post.forum.is_closed %} |
10 | + <div class="pull-right"> | ||
11 | + <a href="javascript:answer('{{ post.id }}', '{% url 'course:forum:reply_post' %}');"> | ||
12 | + <i class="material-icons">{% trans 'reply' %}</i> | ||
13 | + </a> | ||
14 | + {% if request.user|has_role:'system_admin' or request.user == post.user %} | ||
15 | + {% csrf_token %} | ||
16 | + <div class="btn-group icon-more-horiz"> | ||
17 | + <a class="btn btn-default btn-xs dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> | ||
18 | + <i class="material-icons">more_horiz</i> | ||
19 | + </a> | ||
20 | + <ul class="dropdown-menu pull-right" aria-labelledby="dropdownMenu1"> | ||
21 | + <li><a href="javascript:edit_post('{% url 'course:forum:update_post' post.id %}', '{{ post.id }}', '{% trans 'Post edited successfully!' %}')"><i class="material-icons">create</i> {% trans 'Edit' %}</a></li> | ||
22 | + <li><a href="javascript:javascript:delete_post('{% url 'course:forum:delete_post' post.id %}', '{{ post.id }}')"><i class="material-icons">delete_sweep</i> {% trans 'Remove' %}</a></li> | ||
23 | + </ul> | ||
24 | + </div> | ||
25 | + {% endif %} | ||
26 | + </div> | ||
27 | + {% endif %} | ||
26 | </h3> | 28 | </h3> |
27 | <div class="post_content"> | 29 | <div class="post_content"> |
28 | <div class="card-data"> | 30 | <div class="card-data"> |
forum/templates/post_answers/post_answer_list.html
@@ -7,18 +7,20 @@ | @@ -7,18 +7,20 @@ | ||
7 | <div class="col-sm-12 col-xs-12"> | 7 | <div class="col-sm-12 col-xs-12"> |
8 | <h3 class="user-name"> | 8 | <h3 class="user-name"> |
9 | {{ answer.user }} | 9 | {{ answer.user }} |
10 | - {% if request.user|has_role:'system_admin' or request.user == answer.user %} | ||
11 | - <div class="pull-right"> | ||
12 | - <div class="btn-group icon-more-horiz"> | ||
13 | - <a class="btn btn-default btn-xs dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> | ||
14 | - <i class="material-icons">more_horiz</i> | ||
15 | - </a> | ||
16 | - <ul class="dropdown-menu pull-right" aria-labelledby="dropdownMenu1"> | ||
17 | - <li><a href="javascript:edit_post_answer('{% url 'course:forum:update_post_answer' answer.id %}', '{{ answer.id }}', '{% trans 'Answer edited sucessfully!' %}')"><i class="material-icons">create</i> {% trans 'Edit' %}</a></li> | ||
18 | - <li><a href="javascript:delete_answer('{% url 'course:forum:delete_answer' answer.id %}', '{{ answer.id }}', '{% trans "Are you sure you want to delete this answer?" %}')"><i class="material-icons">delete_sweep</i> {% trans 'Remove' %}</a></li> | ||
19 | - </ul> | 10 | + {% if not answer.post.forum.is_closed %} |
11 | + {% if request.user|has_role:'system_admin' or request.user == answer.user %} | ||
12 | + <div class="pull-right"> | ||
13 | + <div class="btn-group icon-more-horiz"> | ||
14 | + <a class="btn btn-default btn-xs dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> | ||
15 | + <i class="material-icons">more_horiz</i> | ||
16 | + </a> | ||
17 | + <ul class="dropdown-menu pull-right" aria-labelledby="dropdownMenu1"> | ||
18 | + <li><a href="javascript:edit_post_answer('{% url 'course:forum:update_post_answer' answer.id %}', '{{ answer.id }}', '{% trans 'Answer edited sucessfully!' %}')"><i class="material-icons">create</i> {% trans 'Edit' %}</a></li> | ||
19 | + <li><a href="javascript:delete_answer('{% url 'course:forum:delete_answer' answer.id %}', '{{ answer.id }}', '{% trans "Are you sure you want to delete this answer?" %}')"><i class="material-icons">delete_sweep</i> {% trans 'Remove' %}</a></li> | ||
20 | + </ul> | ||
21 | + </div> | ||
20 | </div> | 22 | </div> |
21 | - </div> | 23 | + {% endif %} |
22 | {% endif %} | 24 | {% endif %} |
23 | </h3> | 25 | </h3> |
24 | <div class="post_answer_content"> | 26 | <div class="post_answer_content"> |