Пример #1
0
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()
Пример #2
0
    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))
Пример #3
0
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()
Пример #4
0
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)
Пример #5
0
    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)