def mark_read(content, user=None): """Mark the last tutorial note as read for the user. :param content: the content to mark """ from zds.tutorialv2.models.models_database import ContentRead if not user: user = get_current_user() if user and user.is_authenticated(): if content.last_note is not None: ContentRead.objects.filter(content__pk=content.pk, user__pk=user.pk).delete() a = ContentRead(note=content.last_note, content=content, user=user) a.save()
def test_last_participation_is_old(self): article = PublishedContentFactory(author_list=[self.user_author], type="ARTICLE") newUser = ProfileFactory().user reac = ContentReaction(author=self.user_author, position=1, related_content=article) reac.update_content("I will find you. And I Will Kill you.") reac.save() article.last_note = reac article.save() self.assertFalse(last_participation_is_old(article, newUser)) ContentRead(user=self.user_author, note=reac, content=article).save() reac = ContentReaction(author=newUser, position=2, related_content=article) reac.update_content("I will find you. And I Will Kill you.") reac.save() article.last_note = reac article.save() ContentRead(user=newUser, note=reac, content=article).save() self.assertFalse(last_participation_is_old(article, newUser)) self.assertTrue(last_participation_is_old(article, self.user_author))
def export_read_for_note(old_note, new_note, read_class): queryset = read_class.objects if read_class == ArticleRead: queryset = queryset.filter(reaction__pk=old_note.pk) else: queryset = queryset.filter(note__pk=old_note.pk) for read in queryset.all(): new_read = ContentRead() new_read.content = new_note.related_content new_read.note = new_note new_read.user = read.user new_read.save()
def mark_read(content, user=None): """Mark the last tutorial note as read for the user. :param content: the content to mark :param user: user that read the content, if ``None`` will use currrent user """ from zds.tutorialv2.models.models_database import ContentRead from zds.tutorialv2.models.models_database import ContentReaction if not user: user = get_current_user() if user and user.is_authenticated(): if content.last_note is not None: ContentRead.objects.filter(content__pk=content.pk, user__pk=user.pk).delete() a = ContentRead(note=content.last_note, content=content, user=user) a.save() signals.content_read.send(sender=content.__class__, instance=content, user=user, target=ContentReaction)
def form_valid(self, form): user = self.request.user validation = Validation.objects.filter(pk=self.kwargs['pk']).last() if not validation: raise PermissionDenied if validation.validator != user: raise PermissionDenied if validation.status != 'PENDING_V': raise PermissionDenied # get database representation and validated version db_object = validation.content versioned = db_object.load_version(sha=validation.version) self.success_url = versioned.get_absolute_url( version=validation.version) try: published = publish_content( db_object, versioned, is_major_update=form.cleaned_data['is_major']) except FailureDuringPublication as e: messages.error(self.request, e.message) else: # save in database is_update = db_object.sha_public and db_object.sha_public != '' db_object.sha_public = validation.version db_object.source = form.cleaned_data['source'] db_object.sha_validation = None db_object.public_version = published if form.cleaned_data[ 'is_major'] or not is_update or db_object.pubdate is None: db_object.pubdate = datetime.now() db_object.save() # save validation object validation.comment_validator = form.cleaned_data['text'] validation.status = "ACCEPT" validation.date_validation = datetime.now() validation.save() for user in db_object.authors.all(): read = ContentRead.objects.filter(content__pk=db_object.pk, user__pk=user.pk).first() if read is None: read = ContentRead() read.user = user read.content = db_object read.save() if is_update: msg = render_to_string( 'tutorialv2/messages/validation_accept_update.md', { 'content': versioned, 'url': published.get_absolute_url_online(), 'validator': validation.validator }) else: msg = render_to_string( 'tutorialv2/messages/validation_accept_content.md', { 'content': versioned, 'url': published.get_absolute_url_online(), 'validator': validation.validator }) bot = get_object_or_404( User, username=settings.ZDS_APP['member']['bot_account']) send_mp(bot, db_object.authors.all(), _(u"Publication acceptée"), versioned.title, msg, True, direct=False) messages.success(self.request, _(u'Le contenu a bien été validé.')) self.success_url = published.get_absolute_url_online() return super(AcceptValidation, self).form_valid(form)