示例#1
0
class EventEditView(BaseEventView, views.ObjectEdit):
    POST_BUTTON = ButtonAction("form",
                               "create",
                               btn_class="primary",
                               title=_l("Post this event"))

    title = _l("Edit event")
示例#2
0
class EventCreateView(BaseEventView, views.ObjectCreate):
    POST_BUTTON = ButtonAction(
        'form', 'create', btn_class='primary', title=_l('Post this event'))

    title = _l("New event")

    def after_populate_obj(self):
        if self.obj.community is None:
            self.obj.community = g.community._model

    def get_form_buttons(self, *args, **kwargs):
        return [self.POST_BUTTON, views.object.CANCEL_BUTTON]

    @property
    def activity_target(self):
        return self.obj.community
示例#3
0
bp = Blueprint('attachments', __name__, url_prefix='/attachments')


def _default_attachment_view(obj, obj_type, obj_id, **kwargs):
    entity = obj.entity
    return url_for(entity, _anchor='attachment-{}'.format(obj.id))


@bp.record_once
def register_default_view(state):
    state.app.default_view.register(Attachment, _default_attachment_view)


UPLOAD_BUTTON = ButtonAction('form',
                             'edit',
                             btn_class='primary',
                             title=_l(u'Send'))


class BaseAttachmentView(object):
    """
  Mixin for attachment views
  """
    Model = Attachment
    Form = AttachmentForm

    #: owning entity
    entity = None

    def init_object(self, args, kwargs):
        args, kwargs = super(BaseAttachmentView,
示例#4
0

def _default_attachment_view(obj, obj_type, obj_id, **kwargs):
    if not hasattr(obj, "entity"):
        return url_for("attachments.entity", object_id=obj_id)
    entity = obj.entity
    return url_for(entity, _anchor=f"attachment-{obj.id}")


@bp.record_once
def register_default_view(state: BlueprintSetupState) -> None:
    state.app.default_view.register(Attachment, _default_attachment_view)


UPLOAD_BUTTON = ButtonAction("form",
                             "edit",
                             btn_class="primary",
                             title=_l("Send"))


class BaseAttachmentView:
    """Mixin for attachment views."""

    Model = Attachment
    Form = AttachmentForm

    #: owning entity
    entity = None  # type: Optional[Entity]

    def init_object(self, args, kwargs):
        args, kwargs = super().init_object(args, kwargs)
        entity_id = kwargs.pop("entity_id", None)
示例#5
0
    pk = 'group_id'
    base_template = 'admin/_base.html'

    def index_url(self):
        return url_for('.groups')

    def view_url(self):
        return url_for('.groups_group', group_id=self.obj.id)


# those buttons are made to have valid edit actions, but will not be shown in
# edit forms: they must be availabe only during POST
ADD_USER_BUTTON = ButtonAction(
    'form',
    'add_user',
    condition=lambda v: request.method == 'POST',
    title=_l('Add'),
    btn_class='primary',
)

REMOVE_USER_BUTTON = ButtonAction(
    'form',
    'remove_user',
    condition=lambda v: request.method == 'POST',
    btn_class='danger',
    icon=FAIcon('times'),
    title="",
)


class GroupView(GroupBase, views.ObjectView):
示例#6
0
bp = Blueprint("comments", __name__, url_prefix="/comments")


def _default_comment_view(obj, obj_type, obj_id, **kwargs):
    entity = obj.entity
    return url_for(entity, _anchor="comment-{}".format(obj.id))


@bp.record_once
def register_default_view(state):
    state.app.default_view.register(Comment, _default_comment_view)


COMMENT_BUTTON = ButtonAction("form",
                              "edit",
                              btn_class="primary",
                              title=_l("Post"))


class BaseCommentView(object):
    Model = Comment
    Form = CommentForm

    #: commented entity
    entity = None  # type: Optional[Entity]

    def init_object(self, args, kwargs):
        args, kwargs = super(BaseCommentView, self).init_object(args, kwargs)
        entity_id = kwargs.pop("entity_id", None)
        if entity_id is not None:
            self.entity = Entity.query.get(entity_id)
示例#7
0
  ObjectEdit, ObjectCreate, ObjectDelete, CANCEL_BUTTON,
)
from .forms import CommentForm

bp = Blueprint('comments', __name__, url_prefix='/comments')

def _default_comment_view(obj, obj_type, obj_id, **kwargs):
  entity = obj.entity
  return url_for(entity, _anchor='comment-{}'.format(obj.id))


@bp.record_once
def register_default_view(state):
  state.app.default_view.register(Comment, _default_comment_view)

COMMENT_BUTTON = ButtonAction('form', 'edit', btn_class='primary',
                              title=_l(u'Post'))


class BaseCommentView(object):
  Model = Comment
  Form = CommentForm

  #: commented entity
  entity = None

  def init_object(self, args, kwargs):
    args, kwargs = super(BaseCommentView, self).init_object(args, kwargs)
    entity_id = kwargs.pop('entity_id', None)
    if entity_id is not None:
      self.entity = Entity.query.get(entity_id)
示例#8
0
class ThreadCreate(BaseThreadView, views.ObjectCreate):
    base_template = "community/_forumbase.html"
    template = "forum/thread_create.html"
    POST_BUTTON = ButtonAction("form",
                               "create",
                               btn_class="primary",
                               title=_l("Post this message"))

    title = _("New conversation")

    def init_object(self, args, kwargs):
        args, kwargs = super(ThreadCreate, self).init_object(args, kwargs)
        self.thread = self.obj
        return args, kwargs

    def before_populate_obj(self):
        del self.form["attachments"]
        self.message_body = self.form.message.data
        del self.form["message"]

        if "send_by_email" in self.form:
            self.send_by_email = (self.can_send_by_mail()
                                  and self.form.send_by_email.data)
            del self.form["send_by_email"]

    def after_populate_obj(self):
        if self.thread.community is None:
            self.thread.community = g.community._model

        self.post = self.thread.create_post(body_html=self.message_body)
        obj_meta = self.post.meta.setdefault("abilian.sbe.forum", {})
        obj_meta["origin"] = "web"
        obj_meta["send_by_email"] = self.send_by_email
        session = sa.orm.object_session(self.thread)
        uploads = current_app.extensions["uploads"]

        for handle in request.form.getlist("attachments"):
            fileobj = uploads.get_file(current_user, handle)
            if fileobj is None:
                continue

            meta = uploads.get_metadata(current_user, handle)
            name = meta.get("filename", handle)
            mimetype = meta.get("mimetype")

            if not isinstance(name, text_type):
                name = text_type(name, encoding="utf-8", errors="ignore")

            if not name:
                continue

            attachment = PostAttachment(name=name)
            attachment.post = self.post

            with fileobj.open("rb") as f:
                attachment.set_content(f.read(), mimetype)
            session.add(attachment)

    def commit_success(self):
        if self.send_by_email:
            task = send_post_by_email.delay(self.post.id)
            meta = self.post.meta.setdefault("abilian.sbe.forum", {})
            meta["send_post_by_email_task"] = task.id
            self.post.meta.changed()
            session = sa.orm.object_session(self.post)
            session.commit()

    @property
    def activity_target(self):
        return self.thread.community

    def get_form_buttons(self, *args, **kwargs):
        return [self.POST_BUTTON, views.object.CANCEL_BUTTON]
示例#9
0
    pk = "group_id"
    base_template = "admin/_base.html"

    def index_url(self):
        return url_for(".groups")

    def view_url(self):
        return url_for(".groups_group", group_id=self.obj.id)


# those buttons are made to have valid edit actions, but will not be shown in
# edit forms: they must be availabe only during POST
ADD_USER_BUTTON = ButtonAction(
    "form",
    "add_user",
    condition=lambda v: request.method == "POST",
    title=_l("Add"),
    btn_class="primary",
)

REMOVE_USER_BUTTON = ButtonAction(
    "form",
    "remove_user",
    condition=lambda v: request.method == "POST",
    btn_class="danger",
    icon=FAIcon("times"),
    title="",
)


class GroupView(GroupBase, views.ObjectView):
示例#10
0
class EventEditView(BaseEventView, views.ObjectEdit):
    POST_BUTTON = ButtonAction(
        'form', 'create', btn_class='primary', title=_l('Post this event'))

    title = _l("Edit event")
示例#11
0
class ThreadCreate(BaseThreadView, views.ObjectCreate):
    POST_BUTTON = ButtonAction('form',
                               'create',
                               btn_class='primary',
                               title=_l(u'Post this message'))

    title = _("New conversation")

    def init_object(self, args, kwargs):
        args, kwargs = super(ThreadCreate, self).init_object(args, kwargs)
        self.thread = self.obj
        return args, kwargs

    def before_populate_obj(self):
        del self.form['attachments']
        self.message_body = self.form.message.data
        del self.form['message']

        if 'send_by_email' in self.form:
            self.send_by_email = (self.can_send_by_mail()
                                  and self.form.send_by_email.data)
            del self.form['send_by_email']

    def after_populate_obj(self):
        if self.thread.community is None:
            self.thread.community = g.community._model

        self.post = self.thread.create_post(body_html=self.message_body)
        obj_meta = self.post.meta.setdefault('abilian.sbe.forum', {})
        obj_meta['origin'] = u'web'
        obj_meta['send_by_email'] = self.send_by_email

        session = sa.orm.object_session(self.thread)
        uploads = current_app.extensions['uploads']

        for handle in request.form.getlist('attachments'):
            fileobj = uploads.get_file(current_user, handle)
            if fileobj is None:
                continue

            meta = uploads.get_metadata(current_user, handle)
            name = meta.get('filename', handle)
            mimetype = meta.get('mimetype')

            if not isinstance(name, text_type):
                name = text_type(name, encoding='utf-8', errors='ignore')

            if not name:
                continue

            attachment = PostAttachment(name=name)
            attachment.post = self.post

            with fileobj.open('rb') as f:
                attachment.set_content(f.read(), mimetype)
            session.add(attachment)

    def commit_success(self):
        if self.send_by_email:
            task = send_post_by_email.delay(self.post.id)
            meta = self.post.meta.setdefault('abilian.sbe.forum', {})
            meta['send_post_by_email_task'] = task.id
            self.post.meta.changed()
            session = sa.orm.object_session(self.post)
            session.commit()

    @property
    def activity_target(self):
        return self.thread.community

    def get_form_buttons(self, *args, **kwargs):
        return [self.POST_BUTTON, views.object.CANCEL_BUTTON]