Exemple #1
0
    def __call__(self, include_items=True):
        content_url = self.context.__parent__.__parent__.absolute_url()
        comments_url = "{}/@comments".format(content_url)
        url = "{}/{}".format(comments_url, self.context.id)

        if self.context.in_reply_to:
            parent_url = "{}/{}".format(comments_url, self.context.in_reply_to)
            in_reply_to = str(self.context.in_reply_to)
        else:
            parent_url = None
            in_reply_to = None

        doc_allowed = delete_own_comment_allowed()
        delete_own = doc_allowed and can_delete_own(self.context)

        return {
            "@id": url,
            "@type": self.context.portal_type,
            "@parent": parent_url,
            "comment_id": str(self.context.id),
            "in_reply_to": in_reply_to,
            "text": {"data": self.context.text, "mime-type": self.context.mime_type},
            "user_notification": self.context.user_notification,
            "author_username": self.context.author_username,
            "author_name": self.context.author_name,
            "creation_date": IJsonCompatible(self.context.creation_date),
            "modification_date": IJsonCompatible(
                self.context.modification_date
            ),  # noqa
            "is_editable": edit_comment_allowed() and can_edit(self.context),
            "is_deletable": can_delete(self.context) or delete_own,
        }
Exemple #2
0
    def __call__(self):
        content_url = self.context.__parent__.__parent__.absolute_url()
        comments_url = '{}/@comments'.format(content_url)
        url = '{}/{}'.format(comments_url, self.context.id)

        if self.context.in_reply_to:
            parent_url = '{}/{}'.format(comments_url, self.context.in_reply_to)
            in_reply_to = str(self.context.in_reply_to)
        else:
            parent_url = None
            in_reply_to = None

        doc_allowed = delete_own_comment_allowed()
        delete_own = doc_allowed and can_delete_own(self.context)

        return {
            '@id': url,
            '@type': self.context.portal_type,
            '@parent': parent_url,
            'comment_id': str(self.context.id),
            'in_reply_to': in_reply_to,
            'text': {
                'data': self.context.text,
                'mime-type': self.context.mime_type
            },
            'user_notification': self.context.user_notification,
            'author_username': self.context.author_username,
            'author_name': self.context.author_name,
            'creation_date': IJsonCompatible(self.context.creation_date),
            'modification_date':
            IJsonCompatible(self.context.modification_date),  # noqa
            'is_editable': edit_comment_allowed() and can_edit(self.context),
            'is_deletable': can_delete(self.context) or delete_own
        }
Exemple #3
0
    def reply(self):
        if not self.comment_id:
            raise BadRequest("Comment id is a required part of the url")

        conversation = IConversation(self.context)
        if self.comment_id not in list(conversation):
            self.request.response.setStatus(404)
            return
        comment = conversation[self.comment_id]

        # Permission checks
        if not (edit_comment_allowed() and can_edit(comment)):
            raise Unauthorized()

        # Fake request data
        body = json_body(self.request)
        for key, value in body.items():
            self.request.form["form.widgets." + key] = value

        form = EditCommentForm(comment, self.request)
        form.__parent__ = form.context.__parent__.__parent__
        form.update()

        action = form.actions["comment"]
        data, errors = form.extractData()
        if errors:
            raise BadRequest({"errors": [err.error for err in errors]})

        comment.modification_date = datetime.utcnow()
        form.handleComment(form=form, action=action)

        fix_location_header(self.context, self.request)
        return self.reply_no_content()
Exemple #4
0
    def __call__(self, include_items=True):
        content_url = self.context.__parent__.__parent__.absolute_url()
        comments_url = f"{content_url}/@comments"
        url = f"{comments_url}/{self.context.id}"

        if self.context.in_reply_to:
            parent_url = f"{comments_url}/{self.context.in_reply_to}"
            in_reply_to = str(self.context.in_reply_to)
        else:
            parent_url = None
            in_reply_to = None

        doc_allowed = delete_own_comment_allowed()
        delete_own = doc_allowed and can_delete_own(self.context)

        if self.context.mime_type == "text/plain":
            text_data = self.context.text
            text_mime_type = self.context.mime_type
        else:
            text_data = self.context.getText()
            text_mime_type = "text/html"
        return {
            "@id": url,
            "@type": self.context.portal_type,
            "@parent": parent_url,
            "comment_id": str(self.context.id),
            "in_reply_to": in_reply_to,
            "text": {
                "data": text_data,
                "mime-type": text_mime_type
            },
            "user_notification": self.context.user_notification,
            "author_username": self.context.author_username,
            "author_name": self.context.author_name,
            "author_image":
            self.get_author_image(self.context.author_username),
            "creation_date": IJsonCompatible(self.context.creation_date),
            "modification_date":
            IJsonCompatible(self.context.modification_date),  # noqa
            "is_editable": edit_comment_allowed() and can_edit(self.context),
            "is_deletable": can_delete(self.context) or delete_own,
            "can_reply": can_reply(self.context),
        }