Commit 9adef025cc808bb5bee1104e6695da17bbf0fac6
1 parent
a3cce8df
Exists in
master
and in
3 other branches
Adding mural category notifications
Showing
11 changed files
with
129 additions
and
328 deletions
Show diff stats
amadeus/static/css/.sass-cache/a7f87b90919294b62ab4f8079e31dcda8f485534/black.sassc
0 → 100644
No preview for this file type
amadeus/static/css/.sass-cache/a7f87b90919294b62ab4f8079e31dcda8f485534/green.sassc
0 → 100644
No preview for this file type
amadeus/static/css/.sass-cache/a7f87b90919294b62ab4f8079e31dcda8f485534/red.sassc
0 → 100644
No preview for this file type
amadeus/static/css/themes/black.css
| 1 | -body .container .jumbotron-inverse, body .container .well-inverse, body .container-fluid .jumbotron-inverse, body .container-fluid .well-inverse { | |
| 2 | - background-color: white; | |
| 3 | -} | |
| 4 | 1 | |
| 5 | -a, a:focus, a:hover { | |
| 6 | - color: #444444; | |
| 7 | -} | |
| 8 | 2 | |
| 9 | -.radio input[type=radio]:checked~.check, label.radio-inline input[type=radio]:checked~.check { | |
| 10 | - background-color: #444444; | |
| 11 | -} | |
| 12 | - | |
| 13 | -.radio input[type=radio]:checked~.circle, label.radio-inline input[type=radio]:checked~.circle { | |
| 14 | - border-color: #444444; | |
| 15 | -} | |
| 16 | - | |
| 17 | -.pagination > .active > a, .pagination > .active > span, .pagination > .active > a:hover, .pagination > .active > span:hover, .pagination > .active > a:focus, .pagination > .active > span:focus { | |
| 18 | - color: #fff; | |
| 19 | - background-color: #337ab7; | |
| 20 | - border-color: #337ab7; | |
| 21 | -} | |
| 22 | - | |
| 23 | -.navbar, .navbar.navbar-default { | |
| 24 | - background-color: #444444; | |
| 25 | - color: rgba(255,255,255,.84); | |
| 26 | -} | |
| 27 | - | |
| 28 | -.my-subjects-title { | |
| 29 | - color: #555555; | |
| 30 | -} | |
| 31 | - | |
| 32 | -#sidebar-menu .item { | |
| 33 | - background-color: #555555; | |
| 34 | - color: white; | |
| 35 | -} | |
| 36 | - | |
| 37 | -#sidebar-menu .item a{ | |
| 38 | - color: white; | |
| 39 | -} | |
| 40 | - | |
| 41 | -#sidebar-menu > .subjects_menu_active { | |
| 42 | - background-color: #333333; | |
| 43 | -} | |
| 44 | - | |
| 45 | -#sidebar-menu > .item:hover{ | |
| 46 | - background-color: #333333; | |
| 47 | -} | |
| 48 | - | |
| 49 | -.panel-invisible{ | |
| 50 | - background-color: #BDBDBD !important; | |
| 51 | - color: #F5F5F5; | |
| 52 | -} | |
| 53 | - | |
| 54 | -.category-panel > .panel-heading { | |
| 55 | - background-color: #666666 !important; | |
| 56 | -} | |
| 57 | - | |
| 58 | -.subject-panel > .panel-heading { | |
| 59 | - background-color: #777777 !important; | |
| 60 | -} | |
| 61 | - | |
| 62 | -.category-header i { | |
| 63 | - color: white; | |
| 64 | -} | |
| 65 | - | |
| 66 | -.category-header i:hover{ | |
| 67 | - color: #90CAF9; | |
| 68 | -} | |
| 69 | - | |
| 70 | -.category-header .dropdown-menu i { | |
| 71 | - color: inherit; | |
| 72 | -} | |
| 73 | - | |
| 74 | -#create-category { | |
| 75 | - background-color: #66BB6A; | |
| 76 | - color: #FFFFFF; | |
| 77 | -} | |
| 78 | - | |
| 79 | -.category-panel-content { | |
| 80 | - background: #F5F5F5; | |
| 81 | -} | |
| 82 | - | |
| 83 | -.core-subjects-options li { | |
| 84 | - background-color: #FFFFFF; | |
| 85 | - border-bottom-color: #D2D2D2; | |
| 86 | - color: #A0A0A0; | |
| 87 | -} | |
| 88 | - | |
| 89 | -.core-subjects-options li.active { | |
| 90 | - color: inherit; | |
| 91 | - border-bottom-color: #333333; | |
| 92 | -} | |
| 93 | - | |
| 94 | -.create-subject-btn { | |
| 95 | - background-color: #000000; | |
| 96 | - color: white; | |
| 97 | -} | |
| 98 | - | |
| 99 | -#coordinators_accordion .panel-heading, #professors_accordion .panel-heading { | |
| 100 | - background: #FFFFFF; | |
| 101 | -} | |
| 102 | - | |
| 103 | -.navbar-brand:hover { | |
| 104 | - background: #333333 !important; | |
| 105 | -} | |
| 106 | - | |
| 107 | -.navbar .project_name { | |
| 108 | - color: white; | |
| 109 | -} | |
| 110 | - | |
| 111 | -.navbar-nav li.open { | |
| 112 | - background: #333333; | |
| 113 | -} | |
| 114 | - | |
| 115 | -.navbar-nav li > a:hover { | |
| 116 | - background: #333333 !important; | |
| 117 | -} | |
| 118 | - | |
| 119 | -.navbar-nav li.settings_menu_active { | |
| 120 | - background: #333333 | |
| 121 | -} | |
| 122 | - | |
| 123 | -.top-search { | |
| 124 | - color: #F5F5F5; | |
| 125 | -} | |
| 126 | - | |
| 127 | -#btn-search:hover { | |
| 128 | - background: #333333; | |
| 129 | -} | |
| 130 | - | |
| 131 | -.dropdown-menu { | |
| 132 | - background: #F5F5F5; | |
| 133 | -} | |
| 134 | - | |
| 135 | -.dropdown-menu li > a { | |
| 136 | - background: #F5F5F5; | |
| 137 | - color: #333333; | |
| 138 | -} | |
| 139 | - | |
| 140 | -.dropdown-menu li > a:hover { | |
| 141 | - background: #EEEEEE !important; | |
| 142 | -} | |
| 143 | - | |
| 144 | -#system_accordion > .panel > .panel-heading { | |
| 145 | - background: #F5F5F5; | |
| 146 | -} | |
| 147 | - | |
| 148 | -#system_accordion > .panel > .panel-heading:hover { | |
| 149 | - background: #EEEEEE; | |
| 150 | -} | |
| 151 | - | |
| 152 | -#system_accordion > .panel > .panel-heading > a > .panel-title { | |
| 153 | - color: #333333; | |
| 154 | -} | |
| 155 | - | |
| 156 | -#system_accordion > .panel > .panel-heading > a > .panel-title:hover { | |
| 157 | - color: #444444; | |
| 158 | -} | |
| 159 | - | |
| 160 | -#system_accordion > .panel > .panel-heading > a:hover { | |
| 161 | - color: #444444; | |
| 162 | -} | |
| 163 | - | |
| 164 | -#system_menu { | |
| 165 | - background: #F5F5F5; | |
| 166 | -} | |
| 167 | - | |
| 168 | -.modal-header { | |
| 169 | - border-bottom: 1px solid #E6E7E8 !important; | |
| 170 | -} | |
| 171 | - | |
| 172 | -.modal-footer { | |
| 173 | - border-top: 1px solid #E6E7E8 !important; | |
| 174 | -} | |
| 175 | - | |
| 176 | -#horizontal-line{ | |
| 177 | - background-color: black; | |
| 178 | -} | |
| 179 | - | |
| 180 | -.breadcrumb > li > span.divider { | |
| 181 | - color: #000000; | |
| 182 | -} | |
| 183 | - | |
| 184 | -.breadcrumb > li > a{ | |
| 185 | - color: #000000; | |
| 186 | -} | |
| 187 | - | |
| 188 | -.breadcrumb > li { | |
| 189 | - color: #BDBDBD; | |
| 190 | -} | |
| 191 | - | |
| 192 | -.panel-title{ /*Because we use an outer a tag*/ | |
| 193 | - color: rgba(255,255,255,.84); | |
| 194 | -} | |
| 195 | - | |
| 196 | -.accordion { | |
| 197 | - background: white; | |
| 198 | -} | |
| 199 | - | |
| 200 | -.accordion_list { | |
| 201 | - background: #F5F5F5; | |
| 202 | -} | |
| 203 | - | |
| 204 | -.outside-title { | |
| 205 | - color: #43a251; | |
| 206 | -} | |
| 207 | - | |
| 208 | -.titleTopic a h4, .titleTopic h4 { | |
| 209 | - color: white; | |
| 210 | -} | |
| 211 | - | |
| 212 | -.Topic-detail a h4{ | |
| 213 | - color: black; | |
| 214 | -} | |
| 215 | - | |
| 216 | -.cards-detail .panel .panel-heading h4 { | |
| 217 | - color:black; | |
| 218 | -} | |
| 219 | - | |
| 220 | -.data_register_course p { | |
| 221 | - color: grey; | |
| 222 | -} | |
| 223 | - | |
| 224 | -.category-course-link { | |
| 225 | - color: #FFFFFF !important; | |
| 226 | -} | |
| 227 | - | |
| 228 | -.profile_function { | |
| 229 | - border-bottom: 1px solid #D2D2D2; | |
| 230 | -} | |
| 231 | - | |
| 232 | -.bottom-menu { | |
| 233 | - background: #000000; | |
| 234 | -} | |
| 235 | - | |
| 236 | -.mobile-menu .item { | |
| 237 | - color: #FFFFFF; | |
| 238 | - background: #000000; | |
| 239 | -} | |
| 240 | - | |
| 241 | -.mobile-menu .item a { | |
| 242 | - color: white; | |
| 243 | -} | |
| 244 | - | |
| 245 | -.mobile-menu > .subjects_menu_active { | |
| 246 | - background-color: #333333; | |
| 247 | -} | |
| 248 | - | |
| 249 | -.mobile-menu > .item:hover{ | |
| 250 | - background-color: #333333; | |
| 251 | -} | |
| 252 | - | |
| 253 | -.access-subject { | |
| 254 | - background-color: #2eb82e !important; | |
| 255 | - color: white; | |
| 256 | -} | |
| 257 | - | |
| 258 | -.page_selector h4 { | |
| 259 | - border-bottom: 1px solid #e5e5e5; | |
| 260 | -} | |
| 261 | - | |
| 262 | -.subscribe-subject { | |
| 263 | - background-color: #33cc33 !important; | |
| 264 | - color:white; | |
| 265 | -} | |
| 266 | - | |
| 267 | -.filedrag { | |
| 268 | - color: #555; | |
| 269 | - border: 2px dashed #555; | |
| 270 | -} | |
| 271 | - | |
| 272 | -.footer { | |
| 273 | - color: #FFFFFF; | |
| 274 | - background: #26A69A; | |
| 275 | -} | |
| 276 | - | |
| 277 | -.no-subjects { | |
| 278 | - color: #999999; | |
| 279 | -} | |
| 280 | - | |
| 281 | -.holder a.jp-disabled, a.jp-disabled:hover { | |
| 282 | - background: none !important; | |
| 283 | - color: #bbb !important; | |
| 284 | -} | |
| 285 | - | |
| 286 | -.holder a.jp-current, a.jp-current:hover { | |
| 287 | - background: none; | |
| 288 | -} | |
| 289 | - | |
| 290 | -.holder a, .holder span { | |
| 291 | - border: 1px solid #ddd; | |
| 292 | - color: #337ab7; | |
| 293 | -} | |
| 294 | - | |
| 295 | -.holder a:hover { | |
| 296 | - color: #23527c; | |
| 297 | - background-color: #eee; | |
| 298 | - border-color: #ddd; | |
| 299 | -} | |
| 300 | - | |
| 301 | -.holder a.jp-current, a.jp-current:hover { | |
| 302 | - background: #337ab7; | |
| 303 | - color: #FFFFFF; | |
| 304 | - border-color: #337ab7; | |
| 305 | -} | |
| 306 | 3 | \ No newline at end of file |
| 4 | +/*# sourceMappingURL=black.css.map */ | ... | ... |
amadeus/static/js/socket.js
| ... | ... | @@ -22,6 +22,12 @@ socket.onmessage = function(e) { |
| 22 | 22 | muralNotificationCommentUpdate(content); |
| 23 | 23 | } else if (content.subtype == "delete_comment") { |
| 24 | 24 | muralNotificationCommentDelete(content); |
| 25 | + } else if (content.subtype == "create_cat") { | |
| 26 | + muralNotificationCategory(content); | |
| 27 | + } else if (content.subtype == "update_cat") { | |
| 28 | + muralNotificationCategoryUpdate(content); | |
| 29 | + } else if (content.subtype == "delete_cat") { | |
| 30 | + muralNotificationCategoryDelete(content); | |
| 25 | 31 | } |
| 26 | 32 | } |
| 27 | 33 | } |
| ... | ... | @@ -146,4 +152,66 @@ function muralNotificationCommentDelete(content) { |
| 146 | 152 | comment.remove(); |
| 147 | 153 | } |
| 148 | 154 | } |
| 155 | +} | |
| 156 | + | |
| 157 | +function muralNotificationCategory(content) { | |
| 158 | + var cat_section = $("#" + content.cat); | |
| 159 | + | |
| 160 | + if (window.location.pathname == content.pathname && cat_section.is(':visible')) { | |
| 161 | + | |
| 162 | + cat_section.find('.posts').prepend(content.complete); | |
| 163 | + | |
| 164 | + cat_section.find('.no-subjects').hide(); | |
| 165 | + } else { | |
| 166 | + $('.mural_badge').each(function () { | |
| 167 | + var actual = $(this).text(); | |
| 168 | + | |
| 169 | + if (actual != "+99") { | |
| 170 | + actual = parseInt(actual, 10) + 1; | |
| 171 | + | |
| 172 | + if (actual > 99) { | |
| 173 | + actual = "+99"; | |
| 174 | + } | |
| 175 | + | |
| 176 | + $(this).text(actual); | |
| 177 | + } | |
| 178 | + | |
| 179 | + $(this).show(); | |
| 180 | + }); | |
| 181 | + } | |
| 182 | + | |
| 183 | + if (("Notification" in window)) { | |
| 184 | + var options = { | |
| 185 | + icon: content.user_icon, | |
| 186 | + body: content.simple | |
| 187 | + } | |
| 188 | + | |
| 189 | + if (Notification.permission === "granted") { | |
| 190 | + var notification = new Notification("", options); | |
| 191 | + | |
| 192 | + setTimeout(notification.close.bind(notification), 3000); | |
| 193 | + } | |
| 194 | + } | |
| 195 | +} | |
| 196 | + | |
| 197 | +function muralNotificationCategoryUpdate(content) { | |
| 198 | + if (window.location.pathname == content.pathname) { | |
| 199 | + var post = $("#post-" + content.post_id); | |
| 200 | + | |
| 201 | + if (post.is(":visible") || post.is(":hidden")) { | |
| 202 | + post.before(content.complete); | |
| 203 | + | |
| 204 | + post.remove(); | |
| 205 | + } | |
| 206 | + } | |
| 207 | +} | |
| 208 | + | |
| 209 | +function muralNotificationCategoryDelete(content) { | |
| 210 | + if (window.location.pathname == content.pathname) { | |
| 211 | + var post = $("#post-" + content.post_id); | |
| 212 | + | |
| 213 | + if (post.is(":visible") || post.is(":hidden")) { | |
| 214 | + post.remove(); | |
| 215 | + } | |
| 216 | + } | |
| 149 | 217 | } |
| 150 | 218 | \ No newline at end of file | ... | ... |
categories/models.py
| ... | ... | @@ -10,7 +10,7 @@ class Category(models.Model): |
| 10 | 10 | slug = AutoSlugField(_("Slug"), populate_from = 'name', unique = True) |
| 11 | 11 | description = models.CharField(_("description"), max_length = 300) |
| 12 | 12 | visible = models.BooleanField(_("visible"), default = True) |
| 13 | - coordinators = models.ManyToManyField(User, related_name = _("coordinators"), blank = True) | |
| 13 | + coordinators = models.ManyToManyField(User, related_name = "coordinators", blank = True) | |
| 14 | 14 | create_date = models.DateTimeField(_('Creation Date'), auto_now_add = True) |
| 15 | 15 | modified_date = models.DateTimeField(_('Modified Date'), auto_now_add = True) |
| 16 | 16 | ... | ... |
mural/models.py
| ... | ... | @@ -28,6 +28,10 @@ class Mural(KnowsChild): |
| 28 | 28 | |
| 29 | 29 | @always_as_child |
| 30 | 30 | def get_id(self): |
| 31 | + pass | |
| 32 | + | |
| 33 | + @always_as_child | |
| 34 | + def get_space(self): | |
| 31 | 35 | pass |
| 32 | 36 | |
| 33 | 37 | @always_as_child |
| ... | ... | @@ -44,6 +48,9 @@ class GeneralPost(Mural): |
| 44 | 48 | def get_id(self): |
| 45 | 49 | return self.id |
| 46 | 50 | |
| 51 | + def get_space(self): | |
| 52 | + return self.space | |
| 53 | + | |
| 47 | 54 | def update_link(self): |
| 48 | 55 | return "mural:update_general" |
| 49 | 56 | |
| ... | ... | @@ -56,8 +63,8 @@ class CategoryPost(Mural): |
| 56 | 63 | def get_id(self): |
| 57 | 64 | return self.id |
| 58 | 65 | |
| 59 | - def get_id(self): | |
| 60 | - return self.id | |
| 66 | + def get_space(self): | |
| 67 | + return self.space.id | |
| 61 | 68 | |
| 62 | 69 | def update_link(self): |
| 63 | 70 | return "mural:update_category" |
| ... | ... | @@ -69,6 +76,12 @@ class SubjectPost(Mural): |
| 69 | 76 | space = models.ForeignKey(Subject, verbose_name = _('Subject'), related_name = 'post_subject') |
| 70 | 77 | resource = models.ForeignKey(Resource, verbose_name = _('Resource'), related_name = 'post_resource', null = True) |
| 71 | 78 | |
| 79 | + def get_id(self): | |
| 80 | + return self.id | |
| 81 | + | |
| 82 | + def get_space(self): | |
| 83 | + return self.space.id | |
| 84 | + | |
| 72 | 85 | def update_link(self): |
| 73 | 86 | return "" |
| 74 | 87 | ... | ... |
mural/templatetags/mural_filters.py
| 1 | 1 | from django import template |
| 2 | +from django.db.models import Q | |
| 2 | 3 | from django.utils.translation import ugettext_lazy as _ |
| 3 | 4 | |
| 4 | 5 | from mural.models import MuralFavorites, MuralVisualizations |
| ... | ... | @@ -46,6 +47,6 @@ def fav_class(post, user): |
| 46 | 47 | |
| 47 | 48 | @register.filter(name = 'unviewed') |
| 48 | 49 | def unviewed(category, user): |
| 49 | - count = MuralVisualizations.objects.filter(user = user, viewed = False, post__categorypost__space = category).count() | |
| 50 | + count = MuralVisualizations.objects.filter(Q(user = user) & Q(viewed = False) & (Q(post__categorypost__space = category) | Q(comment__post__categorypost__space = category))).count() | |
| 50 | 51 | |
| 51 | 52 | return count |
| 52 | 53 | \ No newline at end of file | ... | ... |
| ... | ... | @@ -0,0 +1,13 @@ |
| 1 | +from django.db.models import Q | |
| 2 | + | |
| 3 | +from users.models import User | |
| 4 | + | |
| 5 | +def getSpaceUsers(user, post): | |
| 6 | + if post._my_subclass == "generalpost": | |
| 7 | + return User.objects.all().exclude(id = user) | |
| 8 | + elif post._my_subclass == "categorypost": | |
| 9 | + space = post.get_space() | |
| 10 | + | |
| 11 | + return User.objects.filter(Q(is_staff = True) | Q(coordinators__id = space) | Q(professors__category__id = space) | Q(subject_student__category__id = space)).exclude(id = user) | |
| 12 | + | |
| 13 | + return None | |
| 0 | 14 | \ No newline at end of file | ... | ... |
mural/views.py
| ... | ... | @@ -20,6 +20,7 @@ from users.models import User |
| 20 | 20 | |
| 21 | 21 | from .models import Mural, GeneralPost, CategoryPost, SubjectPost, MuralVisualizations, MuralFavorites, Comment |
| 22 | 22 | from .forms import GeneralPostForm, CategoryPostForm, CommentForm |
| 23 | +from .utils import getSpaceUsers | |
| 23 | 24 | |
| 24 | 25 | """ |
| 25 | 26 | Section for GeneralPost classes |
| ... | ... | @@ -60,7 +61,7 @@ class GeneralIndex(LoginRequiredMixin, generic.ListView): |
| 60 | 61 | general_visualizations = MuralVisualizations.objects.filter(Q(user = user) & Q(viewed = False) & (Q(post__generalpost__isnull = False) | Q(comment__post__generalpost__isnull = False))).distinct() |
| 61 | 62 | |
| 62 | 63 | self.totals['general'] = general_visualizations.count() |
| 63 | - 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() | |
| 64 | + self.totals['category'] = MuralVisualizations.objects.filter(Q(user = user) & Q(viewed = False) & (Q(user__is_staff = True) | Q(post__categorypost__space__coordinators = user) | Q(comment__post__categorypost__space__coordinators = user) | Q(post__categorypost__space__subject_category__students = user) | Q(comment__post__categorypost__space__subject_category__students = user) | Q(post__categorypost__space__subject_category__professor = user) | Q(comment__post__categorypost__space__subject_category__professor = user))).distinct().count() | |
| 64 | 65 | 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() |
| 65 | 66 | |
| 66 | 67 | general_visualizations.update(viewed = True) |
| ... | ... | @@ -259,7 +260,7 @@ class CategoryIndex(LoginRequiredMixin, generic.ListView): |
| 259 | 260 | categories = Category.objects.filter(Q(coordinators__pk = user.pk) | Q(subject_category__professor__pk = user.pk) | Q(subject_category__students__pk = user.pk, visible = True)).distinct() |
| 260 | 261 | |
| 261 | 262 | self.totals['general'] = MuralVisualizations.objects.filter(Q(user = user) & Q(viewed = False) & (Q(post__generalpost__isnull = False) | Q(comment__post__generalpost__isnull = False))).distinct().count() |
| 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() | |
| 263 | + self.totals['category'] = MuralVisualizations.objects.filter(Q(user = user) & Q(viewed = False) & (Q(user__is_staff = True) | Q(post__categorypost__space__coordinators = user) | Q(comment__post__categorypost__space__coordinators = user) | Q(post__categorypost__space__subject_category__students = user) | Q(comment__post__categorypost__space__subject_category__students = user) | Q(post__categorypost__space__subject_category__professor = user) | Q(comment__post__categorypost__space__subject_category__professor = user))).distinct().count() | |
| 263 | 264 | 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() |
| 264 | 265 | |
| 265 | 266 | return categories |
| ... | ... | @@ -297,20 +298,20 @@ class CategoryCreate(LoginRequiredMixin, generic.edit.CreateView): |
| 297 | 298 | |
| 298 | 299 | self.object.save() |
| 299 | 300 | |
| 300 | - users = User.objects.all().exclude(id = self.request.user.id) | |
| 301 | + users = User.objects.filter(Q(is_staff = True) | Q(coordinators = cat) | Q(professors__category = cat) | Q(subject_student__category = cat)).exclude(id = self.request.user.id) | |
| 301 | 302 | entries = [] |
| 302 | 303 | |
| 303 | 304 | notify_type = "mural" |
| 304 | 305 | 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") | |
| 306 | + _view = render_to_string("mural/_view.html", {"post": self.object}, self.request) | |
| 307 | + simple_notify = _("%s has made a post in %s")%(str(self.object.user), str(self.object.space)) | |
| 308 | + pathname = reverse("mural:manage_category") | |
| 308 | 309 | |
| 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})}) | |
| 310 | + for user in users: | |
| 311 | + entries.append(MuralVisualizations(viewed = False, user = user, post = self.object)) | |
| 312 | + Group("user-%s" % user.id).send({'text': json.dumps({"type": notify_type, "subtype": "create_cat", "user_icon": user_icon, "pathname": pathname, "simple": simple_notify, "complete": _view, "cat": slug})}) | |
| 312 | 313 | |
| 313 | - #MuralVisualizations.objects.bulk_create(entries) | |
| 314 | + MuralVisualizations.objects.bulk_create(entries) | |
| 314 | 315 | |
| 315 | 316 | return super(CategoryCreate, self).form_valid(form) |
| 316 | 317 | |
| ... | ... | @@ -348,11 +349,11 @@ class CategoryUpdate(LoginRequiredMixin, generic.UpdateView): |
| 348 | 349 | users = User.objects.all().exclude(id = self.request.user.id) |
| 349 | 350 | |
| 350 | 351 | notify_type = "mural" |
| 351 | - #_view = render_to_string("mural/_view.html", {"post": self.object}, self.request) | |
| 352 | - pathname = reverse("mural:manage_general") | |
| 352 | + _view = render_to_string("mural/_view.html", {"post": self.object}, self.request) | |
| 353 | + pathname = reverse("mural:manage_category") | |
| 353 | 354 | |
| 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})}) | |
| 355 | + for user in users: | |
| 356 | + Group("user-%s" % user.id).send({'text': json.dumps({"type": notify_type, "subtype": "update_cat", "pathname": pathname, "complete": _view, "post_id": self.object.id})}) | |
| 356 | 357 | |
| 357 | 358 | return super(CategoryUpdate, self).form_valid(form) |
| 358 | 359 | |
| ... | ... | @@ -385,10 +386,10 @@ class CategoryDelete(LoginRequiredMixin, generic.DeleteView): |
| 385 | 386 | users = User.objects.all().exclude(id = self.request.user.id) |
| 386 | 387 | |
| 387 | 388 | notify_type = "mural" |
| 388 | - pathname = reverse("mural:manage_general") | |
| 389 | + pathname = reverse("mural:manage_category") | |
| 389 | 390 | |
| 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})}) | |
| 391 | + for user in users: | |
| 392 | + Group("user-%s" % user.id).send({'text': json.dumps({"type": notify_type, "subtype": "delete_cat", "pathname": pathname, "post_id": self.object.id})}) | |
| 392 | 393 | |
| 393 | 394 | return reverse_lazy('mural:deleted_post') |
| 394 | 395 | |
| ... | ... | @@ -456,13 +457,13 @@ class CommentCreate(LoginRequiredMixin, generic.edit.CreateView): |
| 456 | 457 | |
| 457 | 458 | self.object.save() |
| 458 | 459 | |
| 459 | - users = User.objects.all().exclude(id = self.request.user.id) | |
| 460 | + users = getSpaceUsers(self.request.user.id, post) | |
| 460 | 461 | entries = [] |
| 461 | 462 | |
| 462 | 463 | notify_type = "mural" |
| 463 | 464 | user_icon = self.object.user.image_url |
| 464 | 465 | _view = render_to_string("mural/_view_comment.html", {"comment": self.object}, self.request) |
| 465 | - simple_notify = _("%s has commented in a post in General")%(str(self.object.user)) | |
| 466 | + simple_notify = _("%s has commented in a post")%(str(self.object.user)) | |
| 466 | 467 | pathname = reverse("mural:manage_general") |
| 467 | 468 | |
| 468 | 469 | for user in users: |
| ... | ... | @@ -506,7 +507,7 @@ class CommentUpdate(LoginRequiredMixin, generic.UpdateView): |
| 506 | 507 | |
| 507 | 508 | self.object.save() |
| 508 | 509 | |
| 509 | - users = User.objects.all().exclude(id = self.request.user.id) | |
| 510 | + users = getSpaceUsers(self.request.user.id, self.object.post) | |
| 510 | 511 | |
| 511 | 512 | notify_type = "mural" |
| 512 | 513 | _view = render_to_string("mural/_view_comment.html", {"comment": self.object}, self.request) |
| ... | ... | @@ -543,7 +544,7 @@ class CommentDelete(LoginRequiredMixin, generic.DeleteView): |
| 543 | 544 | return context |
| 544 | 545 | |
| 545 | 546 | def get_success_url(self): |
| 546 | - users = User.objects.all().exclude(id = self.request.user.id) | |
| 547 | + users = getSpaceUsers(self.request.user.id, self.object.post) | |
| 547 | 548 | |
| 548 | 549 | notify_type = "mural" |
| 549 | 550 | pathname = reverse("mural:manage_general") | ... | ... |