Commit 4263a9ac9e621b81dd4ee53cb2e577b92bfb8a11
1 parent
51fcb6875f
Exists in
master
send is_authored_by, send feed events when a card is edited
Showing 4 changed files with 21 additions and 6 deletions Side-by-side Diff
flashcards/models.py
View file @
4263a9a
... | ... | @@ -20,6 +20,9 @@ |
20 | 20 | |
21 | 21 | |
22 | 22 | |
23 | + | |
24 | + | |
25 | + | |
23 | 26 | # Hack to fix AbstractUser before subclassing it |
24 | 27 | |
25 | 28 | AbstractUser._meta.get_field('email')._unique = True |
... | ... | @@ -347,7 +350,10 @@ |
347 | 350 | self.pk = None |
348 | 351 | self.mask = new_data.get('mask', self.mask) |
349 | 352 | self.save() |
350 | - self.hide_by_user(user) | |
353 | + Flashcard.objects.get(pk=self.previous_id).hide_by_user(user) | |
354 | + import flashcards.pushes | |
355 | + | |
356 | + flashcards.pushes.push_feed_event('new_card', self) | |
351 | 357 | user.pull(self) |
352 | 358 | else: |
353 | 359 | user_card, created = UserFlashcard.objects.get_or_create(user=user, flashcard=self) |
354 | 360 | |
355 | 361 | |
... | ... | @@ -361,13 +367,15 @@ |
361 | 367 | return self |
362 | 368 | |
363 | 369 | def hide_by_user(self, user, reason=None): |
364 | - import flashcards.pushes | |
365 | 370 | |
366 | - flashcards.pushes.push_deck_event('card_hidden', self, user) | |
367 | 371 | if self.is_in_deck(user): user.unpull(self) |
368 | 372 | hide, created = FlashcardHide.objects.get_or_create(user=user, flashcard=self) |
369 | 373 | hide.reason = reason |
370 | 374 | hide.save() |
375 | + if not created: return | |
376 | + import flashcards.pushes | |
377 | + | |
378 | + flashcards.pushes.push_deck_event('card_hidden', self, user) | |
371 | 379 | |
372 | 380 | def unhide_by_user(self, user, reason=None): |
373 | 381 | import flashcards.pushes |
flashcards/pushes.py
View file @
4263a9a
... | ... | @@ -14,6 +14,7 @@ |
14 | 14 | def push_deck_event(event_type, flashcard, user): |
15 | 15 | redis_publisher = RedisPublisher(facility='deck/%d' % flashcard.section_id, users=[user]) |
16 | 16 | redis_publisher.publish_message(RedisMessage(JSONRenderer().render( |
17 | - {'event_type': event_type, 'flashcard': serializers.FlashcardSerializer(flashcard).data} | |
17 | + {'event_type': event_type, | |
18 | + 'flashcard': serializers.FlashcardSerializer(flashcard, context={'user': user}).data} | |
18 | 19 | ))) |
flashcards/serializers.py
View file @
4263a9a
... | ... | @@ -141,6 +141,7 @@ |
141 | 141 | class FlashcardSerializer(ModelSerializer): |
142 | 142 | is_hidden = SerializerMethodField() |
143 | 143 | is_in_deck = SerializerMethodField() |
144 | + is_authored_by_user = SerializerMethodField() | |
144 | 145 | material_week_num = IntegerField(read_only=True) |
145 | 146 | material_date = DateTimeField(default=now) |
146 | 147 | mask = MaskFieldSerializer(allow_null=True) |
... | ... | @@ -172,6 +173,11 @@ |
172 | 173 | def get_is_in_deck(self, obj): |
173 | 174 | if 'user' not in self.context: return False |
174 | 175 | return obj.is_in_deck(self.context['user']) |
176 | + | |
177 | + def get_is_authored_by_user(self, obj): | |
178 | + if 'user' not in self.context: return False | |
179 | + return obj.author == self.context['user'] | |
180 | + | |
175 | 181 | |
176 | 182 | class Meta: |
177 | 183 | model = Flashcard |
flashcards/views.py
View file @
4263a9a
... | ... | @@ -118,7 +118,7 @@ |
118 | 118 | Gets the contents of a user's deck for a given section. |
119 | 119 | """ |
120 | 120 | qs = request.user.get_deck(self.get_object()) |
121 | - serializer = FlashcardSerializer(qs, many=True) | |
121 | + serializer = FlashcardSerializer(qs, context={'user': request.user}, many=True) | |
122 | 122 | log_event(request, str(self.get_object())) |
123 | 123 | return Response(serializer.data) |
124 | 124 | |
... | ... | @@ -349,7 +349,7 @@ |
349 | 349 | raise PermissionDenied('The user is not enrolled in that section') |
350 | 350 | data['author'] = request.user |
351 | 351 | flashcard = Flashcard.push(**data) |
352 | - response_data = FlashcardSerializer(flashcard).data | |
352 | + response_data = FlashcardSerializer(flashcard, context={'user': request.user}).data | |
353 | 353 | log_event(request, response_data) |
354 | 354 | headers = self.get_success_headers(data) |
355 | 355 | return Response(response_data, status=HTTP_201_CREATED, headers=headers) |