Commit 7cc0ac9c9f8b70973071901240002e1cd0542fc3

Authored by Zambom
1 parent c7feb7db

Adding category post crud

amadeus/static/js/mural.js
1 1 var new_posts = [];
2 2 var new_comments = {};
3   -// loadOnScroll handler
4   -var loadOnScroll = function() {
5   - // If the current scroll position is past out cutoff point...
6   - if ($(window).scrollTop() >= $(document).height() - $(window).height() - 10) {
7   - // temporarily unhook the scroll event watcher so we don't call a bunch of times in a row
8   - $(window).unbind();
9   - // execute the load function below that will visit the view and return the content
10   - loadPosts();
11   - }
12   -};
13   -
14   -var loadPosts = function() {
15   - var loadUrl = $('.mural').data('url'),
16   - pageNum = $('.mural').data('page'),
17   - numberPages = $('.mural').data('pages'),
18   - favorites = $('.mural').data('fav'),
19   - mine = $('.mural').data('mine'),
20   - showing = new_posts.join(',');
21   - // Check if page is equal to the number of pages
22   - if (pageNum == numberPages) {
23   - return false
24   - }
25   - // Update the page number
26   - pageNum = pageNum + 1;
27   -
28   - $("#loading_posts").show();
29   - // Configure the url we're about to hit
30   - setTimeout(function (){
31   - $.ajax({
32   - url: loadUrl,
33   - data: {'page': pageNum, "favorite": favorites, "mine": mine, "showing": showing},
34   - success: function(data) {
35   - $("#loading_posts").hide();
36   -
37   - $(".posts").append(data);
38   -
39   - $('.mural').data('page', pageNum);
40   -
41   - setTimeout(function () { postHeightLimits() }, 10);
42   - },
43   - complete: function(data, textStatus){
44   - // Turn the scroll monitor back on
45   - $(window).bind('scroll', loadOnScroll);
46   - }
47   - });
48   - }, 1000)
49   -};
50 3  
51 4 $(function () {
52   - $(window).bind('scroll', loadOnScroll);
53   -
54 5 $(".post-field").click(function () {
55 6 var url = $(this).find('h4').data('url');
56 7  
... ... @@ -66,15 +17,7 @@ $(function () {
66 17 });
67 18 });
68 19  
69   - $("#clear_filter").click(function () {
70   - var frm = $(this).parent();
71   -
72   - frm.find("input[type='checkbox']").prop('checked', false);
73   -
74   - frm.submit();
75   - });
76   -
77   - $(".comment-section").each(function () {
  20 + $(".comment-section:visible").each(function () {
78 21 var height = $(this)[0].scrollHeight;
79 22  
80 23 $(this).animate({scrollTop: height}, 0);
... ... @@ -127,11 +70,11 @@ function setPostFormSubmit(post = "") {
127 70  
128 71 old.remove();
129 72 } else {
130   - $('.posts').prepend(data.view);
  73 + $('.posts:visible').prepend(data.view);
131 74  
132 75 new_posts.push(data.new_id);
133 76  
134   - $('.no-subjects').attr('style', 'display:none');
  77 + $('.no-subjects:visible').attr('style', 'display:none');
135 78 }
136 79  
137 80 setTimeout(function () { postHeightLimits() }, 100);
... ...
amadeus/static/js/mural_category.js 0 → 100644
... ... @@ -0,0 +1,50 @@
  1 +$('.mural-category').on('shown.bs.collapse', function(e) {
  2 + if($(this).is(e.target)){
  3 + var li = $(".breadcrumb").find('li:last-child');
  4 + var li_text = $(li).html();
  5 + var url = $(".mural_url").val();
  6 + var new_li = $(li).clone();
  7 +
  8 + new_li.html($(this).parent().find('.panel-title span').text());
  9 +
  10 + $(li).html("<a href='" + url + "'>" + li_text + "</a>");
  11 + $(li).append("<span class='divider'>/</span>");
  12 +
  13 + new_li.appendTo('.breadcrumb');
  14 +
  15 + var post_section = $(this).find('.posts'),
  16 + without = $(this).find('.no-subjects'),
  17 + loading = $(this).find('.loading-posts');
  18 +
  19 + if (post_section.children().length == 0) {
  20 + var url = $(this).find('.mural').data('url');
  21 +
  22 + $.ajax({
  23 + url: url,
  24 + dataType: 'json',
  25 + success: function (data) {
  26 + loading.hide();
  27 +
  28 + if (data.count > 0) {
  29 + post_section.append(data.posts);
  30 +
  31 + without.hide();
  32 + } else {
  33 + without.show();
  34 + }
  35 + }
  36 + });
  37 + }
  38 + }
  39 +});
  40 +
  41 +$('.mural-category').on('hidden.bs.collapse', function(e) {
  42 + if($(this).is(e.target)){
  43 + $(".breadcrumb").find('li:last-child').remove();
  44 +
  45 + var li = $(".breadcrumb").find('li:last-child');
  46 + var text = $(li).find('a').text();
  47 +
  48 + $(li).html(text);
  49 + }
  50 +});
0 51 \ No newline at end of file
... ...
amadeus/static/js/mural_general.js 0 → 100644
... ... @@ -0,0 +1,59 @@
  1 +// loadOnScroll handler
  2 +var loadOnScroll = function() {
  3 + // If the current scroll position is past out cutoff point...
  4 + if ($(window).scrollTop() >= $(document).height() - $(window).height() - 10) {
  5 + // temporarily unhook the scroll event watcher so we don't call a bunch of times in a row
  6 + $(window).unbind();
  7 + // execute the load function below that will visit the view and return the content
  8 + loadPosts();
  9 + }
  10 +};
  11 +
  12 +var loadPosts = function() {
  13 + var loadUrl = $('.mural').data('url'),
  14 + pageNum = $('.mural').data('page'),
  15 + numberPages = $('.mural').data('pages'),
  16 + favorites = $('.mural').data('fav'),
  17 + mine = $('.mural').data('mine'),
  18 + showing = new_posts.join(',');
  19 + // Check if page is equal to the number of pages
  20 + if (pageNum == numberPages) {
  21 + return false
  22 + }
  23 + // Update the page number
  24 + pageNum = pageNum + 1;
  25 +
  26 + $("#loading_posts").show();
  27 + // Configure the url we're about to hit
  28 + setTimeout(function (){
  29 + $.ajax({
  30 + url: loadUrl,
  31 + data: {'page': pageNum, "favorite": favorites, "mine": mine, "showing": showing},
  32 + success: function(data) {
  33 + $("#loading_posts").hide();
  34 +
  35 + $(".posts").append(data);
  36 +
  37 + $('.mural').data('page', pageNum);
  38 +
  39 + setTimeout(function () { postHeightLimits() }, 10);
  40 + },
  41 + complete: function(data, textStatus){
  42 + // Turn the scroll monitor back on
  43 + $(window).bind('scroll', loadOnScroll);
  44 + }
  45 + });
  46 + }, 1000)
  47 +};
  48 +
  49 +$(function () {
  50 + $(window).bind('scroll', loadOnScroll);
  51 +
  52 + $("#clear_filter").click(function () {
  53 + var frm = $(this).parent();
  54 +
  55 + frm.find("input[type='checkbox']").prop('checked', false);
  56 +
  57 + frm.submit();
  58 + });
  59 +});
0 60 \ No newline at end of file
... ...
mural/forms.py
... ... @@ -3,7 +3,7 @@ from django import forms
3 3 from django.utils.translation import ugettext_lazy as _
4 4 from django.utils.html import strip_tags
5 5  
6   -from .models import GeneralPost, Comment
  6 +from .models import GeneralPost, CategoryPost, Comment
7 7  
8 8 class Validation(forms.ModelForm):
9 9 MAX_UPLOAD_SIZE = 5*1024*1024
... ... @@ -40,6 +40,15 @@ class GeneralPostForm(Validation):
40 40 'post': forms.Textarea
41 41 }
42 42  
  43 +class CategoryPostForm(Validation):
  44 + class Meta:
  45 + model = CategoryPost
  46 + fields = ['action', 'post', 'image']
  47 + widgets = {
  48 + 'action': forms.RadioSelect,
  49 + 'post': forms.Textarea
  50 + }
  51 +
43 52 class CommentForm(forms.ModelForm):
44 53 MAX_UPLOAD_SIZE = 5*1024*1024
45 54  
... ...
mural/models.py
... ... @@ -51,7 +51,7 @@ class GeneralPost(Mural):
51 51 return "mural:delete_general"
52 52  
53 53 class CategoryPost(Mural):
54   - space = models.ForeignKey(Category, verbose_name = ('Category'), related_name = 'post_category')
  54 + space = models.ForeignKey(Category, verbose_name = ('Category'), related_name = 'post_category', null = True)
55 55  
56 56 def get_id(self):
57 57 return self.id
... ... @@ -60,10 +60,10 @@ class CategoryPost(Mural):
60 60 return self.id
61 61  
62 62 def update_link(self):
63   - return ""
  63 + return "mural:update_category"
64 64  
65 65 def delete_link(self):
66   - return ""
  66 + return "mural:delete_category"
67 67  
68 68 class SubjectPost(Mural):
69 69 space = models.ForeignKey(Subject, verbose_name = _('Subject'), related_name = 'post_subject')
... ...
mural/templates/mural/list.html
... ... @@ -65,7 +65,7 @@
65 65 </label>
66 66 </div>
67 67 <button type="submit" class="btn btn-success btn-raised btn-block">{% trans 'Filter' %}</button>
68   - <button type="button" id="clear_filter" class="btn btn-default btn-raised btn-block">{% trans 'Clean Filters' %}</button>
  68 + <button type="button" id="clear_filter" class="btn btn-default btn-raised btn-block clear_filter">{% trans 'Clean Filters' %}</button>
69 69 </form>
70 70 </div>
71 71 </div>
... ... @@ -73,4 +73,5 @@
73 73 <div class="modal fade" id="post-modal-form" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"></div>
74 74  
75 75 <script type="text/javascript" src="{% static 'js/mural.js' %}"></script>
  76 + <script type="text/javascript" src="{% static 'js/mural_general.js' %}"></script>
76 77 {% endblock %}
77 78 \ No newline at end of file
... ...
mural/templates/mural/list_category.html
... ... @@ -12,6 +12,8 @@
12 12 {% endblock %}
13 13  
14 14 {% block content %}
  15 + <input type="hidden" value="{% url 'mural:manage_category' %}" class="mural_url" />
  16 +
15 17 <div id="core-subjects-options-div">
16 18 <ul class="core-subjects-options">
17 19 <a href="{% url 'mural:manage_general' %}"><li>{% trans "General" %} ({{ totals.general }})</li></a>
... ... @@ -38,7 +40,7 @@
38 40 <div class="col-md-12 category-header">
39 41 <h4 class="panel-title">
40 42 <a class="category-course-link pull-left" data-parent="#accordion" data-toggle="collapse" href="#{{category.slug}}">
41   - <button class="btn btn-default btn-xs text-center cat-selector"><i class="fa fa-angle-right fa-2x" aria-hidden="true"></i></button> {{ category.name }}
  43 + <button class="btn btn-default btn-xs text-center cat-selector"><i class="fa fa-angle-right fa-2x" aria-hidden="true"></i></button> <span>{{ category.name }}</span>
42 44  
43 45 ({{ category|unviewed:request.user }})
44 46 </a>
... ... @@ -63,7 +65,7 @@
63 65 </div>
64 66 </div>
65 67 <div id="{{category.slug}}" class="panel-collapse panel-body collapse mural-category">
66   - <div class="col-md-12 cards-content mural" data-url="{% url 'mural:manage_general' %}">
  68 + <div class="col-md-12 cards-content mural" data-url="{% url 'mural:load_category' category.id %}">
67 69 <div class="col-md-9 col-sm-9 col-xs-9 mural-list">
68 70 <div class="post_make panel panel-default">
69 71 <div class="panel-body">
... ... @@ -72,14 +74,19 @@
72 74 </div>
73 75 <div class="col-lg-11 col-md-11 col-sm-11 col-xs-11 post-field">
74 76 <div>
75   - <h4 data-url="{% url 'mural:create_general' %}">{% trans 'Wish to make a new post?' %}</h4>
  77 + <h4 data-url="{% url 'mural:create_category' category.slug %}">{% trans 'Wish to make a new post?' %}</h4>
76 78 </div>
77 79 </div>
78 80 </div>
79 81 </div>
80 82  
  83 + <button type="button" class="btn btn-block btn-default btn-sm loading-posts"><span class="fa fa-spin fa-circle-o-notch"></span></button>
81 84 <div class="posts">
82 85 </div>
  86 + <div class="text-center no-subjects" style="display:none">
  87 + <i class="fa fa-list"></i>
  88 + <h4>{% trans 'There are no posts in this mural yet.' %}</h4>
  89 + </div>
83 90 </div>
84 91 <div class="col-md-3 col-sm-3 col-xs-3 post-filter">
85 92 <h4>{% trans 'Filter' %}</h4>
... ... @@ -109,5 +116,9 @@
109 116 {% endif %}
110 117 </div>
111 118  
  119 + <div class="modal fade" id="post-modal-form" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"></div>
  120 +
112 121 <script type="text/javascript" src="{% static 'js/category.js' %}"></script>
  122 + <script type="text/javascript" src="{% static 'js/mural.js' %}"></script>
  123 + <script type="text/javascript" src="{% static 'js/mural_category.js' %}"></script>
113 124 {% endblock %}
114 125 \ No newline at end of file
... ...
mural/urls.py
... ... @@ -5,8 +5,12 @@ urlpatterns = [
5 5 url(r'^$', views.GeneralIndex.as_view(), name='manage_general'),
6 6 url(r'^categories/$', views.CategoryIndex.as_view(), name='manage_category'),
7 7 url(r'^create_gen/$', views.GeneralCreate.as_view(), name='create_general'),
  8 + url(r'^create_cat/(?P<slug>[\w_-]+)/$', views.CategoryCreate.as_view(), name='create_category'),
8 9 url(r'^update_gen/(?P<pk>[\w_-]+)/$', views.GeneralUpdate.as_view(), name='update_general'),
  10 + url(r'^update_cat/(?P<pk>[\w_-]+)/$', views.CategoryUpdate.as_view(), name='update_category'),
9 11 url(r'^delete_gen/(?P<pk>[\w_-]+)/$', views.GeneralDelete.as_view(), name='delete_general'),
  12 + url(r'^delete_cat/(?P<pk>[\w_-]+)/$', views.CategoryDelete.as_view(), name='delete_category'),
  13 + url(r'^load_category/([\w_-]+)/$', views.load_category_posts, name='load_category'),
10 14 url(r'^favorite/([\w_-]+)/$', views.favorite, name='favorite'),
11 15 url(r'^deleted/$', views.deleted_post, name='deleted_post'),
12 16 url(r'^comment/(?P<post>[\w_-]+)/$', views.CommentCreate.as_view(), name='create_comment'),
... ... @@ -14,7 +18,7 @@ urlpatterns = [
14 18 url(r'^delete_comment/(?P<pk>[\w_-]+)/$', views.CommentDelete.as_view(), name='delete_comment'),
15 19 url(r'^deleted_comment/$', views.deleted_comment, name='deleted_comment'),
16 20 url(r'^render_comment/([\w_-]+)/([\w_-]+)/$', views.render_comment, name='render_comment'),
17   - url(r'^render_post/([\w_-]+)/([\w_-]+)/$', views.render_gen_post, name='render_post_general'),
  21 + url(r'^render_post/([\w_-]+)/([\w_-]+)/([\w_-]+)/$', views.render_post, name='render_post'),
18 22 url(r'^load_comments/([\w_-]+)/([\w_-]+)/$', views.load_comments, name='load_comments'),
19 23 url(r'^suggest_users/$', views.suggest_users, name='suggest_users'),
20 24 ]
21 25 \ No newline at end of file
... ...
mural/views.py
... ... @@ -19,7 +19,7 @@ from subjects.models import Subject
19 19 from users.models import User
20 20  
21 21 from .models import Mural, GeneralPost, CategoryPost, SubjectPost, MuralVisualizations, MuralFavorites, Comment
22   -from .forms import GeneralPostForm, CommentForm
  22 +from .forms import GeneralPostForm, CategoryPostForm, CommentForm
23 23  
24 24 """
25 25 Section for GeneralPost classes
... ... @@ -140,7 +140,7 @@ class GeneralCreate(LoginRequiredMixin, generic.edit.CreateView):
140 140 return context
141 141  
142 142 def get_success_url(self):
143   - return reverse_lazy('mural:render_post_general', args = (self.object.id, 'create', ))
  143 + return reverse_lazy('mural:render_post', args = (self.object.id, 'create', 'gen', ))
144 144  
145 145 class GeneralUpdate(LoginRequiredMixin, generic.UpdateView):
146 146 login_url = reverse_lazy("users:login")
... ... @@ -182,7 +182,7 @@ class GeneralUpdate(LoginRequiredMixin, generic.UpdateView):
182 182 return context
183 183  
184 184 def get_success_url(self):
185   - return reverse_lazy('mural:render_post_general', args = (self.object.id, 'update', ))
  185 + return reverse_lazy('mural:render_post', args = (self.object.id, 'update', 'gen', ))
186 186  
187 187 class GeneralDelete(LoginRequiredMixin, generic.DeleteView):
188 188 login_url = reverse_lazy("users:login")
... ... @@ -213,6 +213,33 @@ class GeneralDelete(LoginRequiredMixin, generic.DeleteView):
213 213 """
214 214 Section for CategoryPost classes
215 215 """
  216 +def load_category_posts(request, category):
  217 + context = {
  218 + 'request': request,
  219 + }
  220 +
  221 + showing = request.GET.get('showing', '')
  222 +
  223 + posts = CategoryPost.objects.extra(select = {"most_recent": "greatest(last_update, (select max(mural_comment.last_update) from mural_comment where mural_comment.post_id = mural_categorypost.mural_ptr_id))"}).filter(space__id = category).order_by("-most_recent")
  224 +
  225 + paginator = Paginator(posts, 10)
  226 +
  227 + try:
  228 + page_number = int(request.GET.get('page', 1))
  229 + except ValueError:
  230 + raise Http404
  231 +
  232 + try:
  233 + page_obj = paginator.page(page_number)
  234 + except EmptyPage:
  235 + raise Http404
  236 +
  237 + context['posts'] = page_obj.object_list
  238 +
  239 + response = render_to_string("mural/_list_view.html", context, request)
  240 +
  241 + return JsonResponse({"posts": response, "count": posts.count(), "num_pages": paginator.num_pages, "num_page": page_obj.number})
  242 +
216 243 class CategoryIndex(LoginRequiredMixin, generic.ListView):
217 244 login_url = reverse_lazy("users:login")
218 245 redirect_field_name = 'next'
... ... @@ -235,8 +262,6 @@ class CategoryIndex(LoginRequiredMixin, generic.ListView):
235 262 self.totals['category'] = MuralVisualizations.objects.filter(Q(user = user) & Q(viewed = False) & (Q(post__categorypost__space__coordinators = user) | Q(comment__post__categorypost__space__coordinators = user) | Q(post__categorypost__space__subject_category__professor = user) | Q(post__categorypost__space__subject_category__students = user) | Q(comment__post__categorypost__space__subject_category__professor = user) | Q(comment__post__categorypost__space__subject_category__students = user))).distinct().count()
236 263 self.totals['subject'] = MuralVisualizations.objects.filter(Q(user = user) & Q(viewed = False) & (Q(post__subjectpost__space__professor = user) | Q(comment__post__subjectpost__space__professor = user) | Q(post__subjectpost__space__students = user) | Q(comment__post__subjectpost__space__students = user))).distinct().count()
237 264  
238   - print(categories)
239   -
240 265 return categories
241 266  
242 267 def get_context_data(self, **kwargs):
... ... @@ -248,22 +273,144 @@ class CategoryIndex(LoginRequiredMixin, generic.ListView):
248 273  
249 274 return context
250 275  
251   -def render_gen_post(request, post, msg):
252   - post = get_object_or_404(GeneralPost, id = post)
  276 +class CategoryCreate(LoginRequiredMixin, generic.edit.CreateView):
  277 + login_url = reverse_lazy("users:login")
  278 + redirect_field_name = 'next'
  279 +
  280 + template_name = 'mural/_form.html'
  281 + form_class = CategoryPostForm
  282 +
  283 + def form_invalid(self, form):
  284 + context = super(CategoryCreate, self).form_invalid(form)
  285 + context.status_code = 400
  286 +
  287 + return context
  288 +
  289 + def form_valid(self, form):
  290 + self.object = form.save(commit = False)
  291 +
  292 + slug = self.kwargs.get('slug', None)
  293 + cat = get_object_or_404(Category, slug = slug)
  294 +
  295 + self.object.space = cat
  296 + self.object.user = self.request.user
  297 +
  298 + self.object.save()
  299 +
  300 + users = User.objects.all().exclude(id = self.request.user.id)
  301 + entries = []
  302 +
  303 + notify_type = "mural"
  304 + user_icon = self.object.user.image_url
  305 + #_view = render_to_string("mural/_view.html", {"post": self.object}, self.request)
  306 + simple_notify = _("%s has made a post in General")%(str(self.object.user))
  307 + pathname = reverse("mural:manage_general")
  308 +
  309 + #for user in users:
  310 + # entries.append(MuralVisualizations(viewed = False, user = user, post = self.object))
  311 + # Group("user-%s" % user.id).send({'text': json.dumps({"type": notify_type, "subtype": "create", "user_icon": user_icon, "pathname": pathname, "simple": simple_notify, "complete": _view})})
  312 +
  313 + #MuralVisualizations.objects.bulk_create(entries)
  314 +
  315 + return super(CategoryCreate, self).form_valid(form)
  316 +
  317 + def get_context_data(self, *args, **kwargs):
  318 + context = super(CategoryCreate, self).get_context_data(*args, **kwargs)
  319 +
  320 + context['form_url'] = reverse_lazy("mural:create_category", args = (), kwargs = {'slug': self.kwargs.get('slug', None)})
  321 +
  322 + return context
  323 +
  324 + def get_success_url(self):
  325 + return reverse_lazy('mural:render_post', args = (self.object.id, 'create', 'cat', ))
  326 +
  327 +class CategoryUpdate(LoginRequiredMixin, generic.UpdateView):
  328 + login_url = reverse_lazy("users:login")
  329 + redirect_field_name = 'next'
  330 +
  331 + template_name = 'mural/_form.html'
  332 + model = CategoryPost
  333 + form_class = CategoryPostForm
  334 +
  335 + def form_invalid(self, form):
  336 + context = super(CategoryUpdate, self).form_invalid(form)
  337 + context.status_code = 400
  338 +
  339 + return context
  340 +
  341 + def form_valid(self, form):
  342 + self.object = form.save(commit = False)
  343 +
  344 + self.object.edited = True
  345 +
  346 + self.object.save()
  347 +
  348 + users = User.objects.all().exclude(id = self.request.user.id)
  349 +
  350 + notify_type = "mural"
  351 + #_view = render_to_string("mural/_view.html", {"post": self.object}, self.request)
  352 + pathname = reverse("mural:manage_general")
  353 +
  354 + #for user in users:
  355 + # Group("user-%s" % user.id).send({'text': json.dumps({"type": notify_type, "subtype": "update", "pathname": pathname, "complete": _view, "post_id": self.object.id})})
  356 +
  357 + return super(CategoryUpdate, self).form_valid(form)
  358 +
  359 + def get_context_data(self, *args, **kwargs):
  360 + context = super(CategoryUpdate, self).get_context_data(*args, **kwargs)
  361 +
  362 + context['form_url'] = reverse_lazy("mural:update_category", args = (), kwargs = {'pk': self.object.id})
  363 +
  364 + return context
  365 +
  366 + def get_success_url(self):
  367 + return reverse_lazy('mural:render_post', args = (self.object.id, 'update', 'cat', ))
  368 +
  369 +class CategoryDelete(LoginRequiredMixin, generic.DeleteView):
  370 + login_url = reverse_lazy("users:login")
  371 + redirect_field_name = 'next'
  372 +
  373 + template_name = 'mural/delete.html'
  374 + model = CategoryPost
  375 +
  376 + def get_context_data(self, *args, **kwargs):
  377 + context = super(CategoryDelete, self).get_context_data(*args, **kwargs)
  378 +
  379 + context['form_url'] = reverse_lazy("mural:delete_category", args = (), kwargs = {'pk': self.object.id})
  380 + context['message'] = _('Are you sure you want to delete this post?')
  381 +
  382 + return context
  383 +
  384 + def get_success_url(self):
  385 + users = User.objects.all().exclude(id = self.request.user.id)
  386 +
  387 + notify_type = "mural"
  388 + pathname = reverse("mural:manage_general")
  389 +
  390 + #for user in users:
  391 + # Group("user-%s" % user.id).send({'text': json.dumps({"type": notify_type, "subtype": "delete", "pathname": pathname, "post_id": self.object.id})})
  392 +
  393 + return reverse_lazy('mural:deleted_post')
  394 +
  395 +def render_post(request, post, msg, ptype):
  396 + if ptype == 'gen':
  397 + post = get_object_or_404(GeneralPost, id = post)
  398 + elif ptype == 'cat':
  399 + post = get_object_or_404(CategoryPost, id = post)
253 400  
254 401 context = {}
255 402 context['post'] = post
256 403  
257   - msg = ""
  404 + message = ""
258 405  
259 406 if msg == 'create':
260   - msg = _('Your post was published successfully!')
  407 + message = _('Your post was published successfully!')
261 408 else:
262   - msg = _('Your post was edited successfully!')
  409 + message = _('Your post was edited successfully!')
263 410  
264 411 html = render_to_string("mural/_view.html", context, request)
265 412  
266   - return JsonResponse({'message': msg, 'view': html, 'new_id': post.id})
  413 + return JsonResponse({'message': message, 'view': html, 'new_id': post.id})
267 414  
268 415 def deleted_post(request):
269 416 return JsonResponse({'msg': _('Post deleted successfully!')})
... ... @@ -282,6 +429,9 @@ def favorite(request, post):
282 429  
283 430 return JsonResponse({'label': _('Favorite')})
284 431  
  432 +"""
  433 + Section for comment functions
  434 +"""
285 435 class CommentCreate(LoginRequiredMixin, generic.edit.CreateView):
286 436 login_url = reverse_lazy("users:login")
287 437 redirect_field_name = 'next'
... ...