X-Git-Url: http://git.veekun.com/zzz-spline-forum.git/blobdiff_plain/dfc83133694768eb466d4a55bbb2c501ac508e92..34407a4a6052d7afa50caf0bcd6a8e6b55eb93a0:/splinext/forum/model/__init__.py?ds=sidebyside diff --git a/splinext/forum/model/__init__.py b/splinext/forum/model/__init__.py index a137866..37beb61 100644 --- a/splinext/forum/model/__init__.py +++ b/splinext/forum/model/__init__.py @@ -2,7 +2,7 @@ from datetime import datetime from sqlalchemy import and_, Column, ForeignKey, Index from sqlalchemy.orm import relation -from sqlalchemy.types import DateTime, Integer, Unicode +from sqlalchemy.types import DateTime, Enum, Integer, Unicode from spline.model.meta import TableBase from splinext.users import model as users_model @@ -14,6 +14,25 @@ class Forum(TableBase): __tablename__ = 'forums' id = Column(Integer, primary_key=True, autoincrement=True, nullable=False) name = Column(Unicode(133), nullable=False) + description = Column(Unicode(1024), nullable=False, default=u'', server_default=u'') + access_level = Column(Enum(u'normal', u'soapbox', u'archive', name='forums_access_level'), nullable=False, default=u'normal', server_default=u'normal') + + def can_create_thread(self, user): + """Returns True ifff the named user can make a new thread in this + forum. + """ + if not user.can('forum:create-thread'): + return False + + if self.access_level == u'soapbox' and \ + not user.can('forum:override-soapbox'): + return False + + if self.access_level == u'archive' and \ + not user.can('forum:override-archive'): + return False + + return True class Thread(TableBase): __tablename__ = 'threads' @@ -35,6 +54,18 @@ class Thread(TableBase): return self.posts.filter_by(position=position).one() + def can_create_post(self, user): + """Returns True ifff the named user can make a new post in this thread. + """ + if not user.can('forum:create-post'): + return False + + if self.forum.access_level == u'archive' and \ + not user.can('forum:override-archive'): + return False + + return True + class Post(TableBase): __tablename__ = 'posts' id = Column(Integer, primary_key=True, autoincrement=True, nullable=False)