Esempio n. 1
0
class UserRank(db.Model):
    id = db.Column(db.Integer(), primary_key=True)
    user_id = db.Column(db.ForeignKey("users.id"), nullable=False)
    rank_id = db.Column(db.ForeignKey("ranks.id"))
    user = db.relationship(
        User,
        backref=db.backref("user_rank",
                           uselist=False,
                           cascade="all, delete-orphan",
                           lazy="joined"),
        uselist=False,
        lazy="joined",
        foreign_keys=[user_id],
    )

    rank = db.relationship(
        Rank,
        backref=db.backref("user_ranks",
                           lazy="joined",
                           cascade="all, delete-orphan"),
        uselist=False,
        lazy="joined",
        foreign_keys=[rank_id],
    )

    name = association_proxy("rank", "rank_name")
    code = association_proxy("rank", "rank_code")

    def is_custom(self):
        return self.rank.is_custom()

    def __repr__(self):
        return "<UserRank user={} name={}>".format(self.user.username,
                                                   self.name)
Esempio n. 2
0
class Rank(db.Model):
    __tablename__ = "ranks"
    id = db.Column(db.Integer(), primary_key=True)
    rank_code = db.Column(db.String(255), nullable=False)
    rank_name = db.Column(db.String(255), default="")
    requirement = db.Column(db.Integer(), nullable=True, unique=True)

    users = association_proxy("user_ranks",
                              "user",
                              creator=lambda user: UserRank(user=user))

    def is_custom(self):
        return self.requirement is None

    @staticmethod
    def has_rank(user):
        if user.is_anonymous:
            return False

        return user.rank is not None

    @classmethod
    def has_custom_rank(cls, user):
        return cls.has_rank(user) and user.rank.is_custom()

    def __repr__(self):
        return "<Rank name={} requirement={}>".format(self.rank_name,
                                                      self.requirement)

    @classmethod
    def partition_ranks(cls, ranks):
        r = {"custom": [], "requirement": []}

        for rank in ranks:
            if cls.is_custom(rank):
                r["custom"].append(rank)
            else:
                r["requirement"].append(rank)

        return r
Esempio n. 3
0
"""
from datetime import timedelta

from flask import url_for, abort
from sqlalchemy.orm import aliased

from flaskbb.extensions import db
from flaskbb.utils.helpers import (slugify, get_categories_and_forums,
                                   get_forums, time_utcnow)
from flaskbb.utils.database import CRUDMixin, UTCDateTime
from flaskbb.utils.settings import flaskbb_config

moderators = db.Table(
    'moderators',
    db.Column('user_id',
              db.Integer(),
              db.ForeignKey('users.id'),
              nullable=False),
    db.Column('forum_id',
              db.Integer(),
              db.ForeignKey('forums.id', use_alter=True, name="fk_forum_id"),
              nullable=False))

topictracker = db.Table(
    'topictracker',
    db.Column('user_id',
              db.Integer(),
              db.ForeignKey('users.id'),
              nullable=False),
    db.Column('topic_id',
              db.Integer(),
Esempio n. 4
0
from werkzeug.security import generate_password_hash, check_password_hash
from flask import url_for
from flask_login import UserMixin, AnonymousUserMixin

from flaskbb._compat import max_integer
from flaskbb.extensions import db, cache
from flaskbb.exceptions import AuthenticationError
from flaskbb.utils.settings import flaskbb_config
from flaskbb.utils.database import CRUDMixin
from flaskbb.forum.models import (Post, Topic, topictracker, TopicsRead,
                                  ForumsRead)
from flaskbb.message.models import Conversation

groups_users = db.Table(
    'groups_users',
    db.Column('user_id', db.Integer(), db.ForeignKey('users.id')),
    db.Column('group_id', db.Integer(), db.ForeignKey('groups.id')))


class Group(db.Model, CRUDMixin):
    __tablename__ = "groups"

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(255), unique=True, nullable=False)
    description = db.Column(db.Text)

    # Group types
    admin = db.Column(db.Boolean, default=False, nullable=False)
    super_mod = db.Column(db.Boolean, default=False, nullable=False)
    mod = db.Column(db.Boolean, default=False, nullable=False)
    guest = db.Column(db.Boolean, default=False, nullable=False)
Esempio n. 5
0
"""
from datetime import timedelta

from flask import url_for, abort
from sqlalchemy.orm import aliased

from flaskbb.extensions import db
from flaskbb.utils.helpers import (slugify, get_categories_and_forums,
                                   get_forums, time_utcnow, topic_is_unread)
from flaskbb.utils.database import CRUDMixin, UTCDateTime
from flaskbb.utils.settings import flaskbb_config


moderators = db.Table(
    'moderators',
    db.Column('user_id', db.Integer(), db.ForeignKey('users.id'),
              nullable=False),
    db.Column('forum_id', db.Integer(),
              db.ForeignKey('forums.id', use_alter=True, name="fk_forum_id"),
              nullable=False))


topictracker = db.Table(
    'topictracker',
    db.Column('user_id', db.Integer(), db.ForeignKey('users.id'),
              nullable=False),
    db.Column('topic_id', db.Integer(),
              db.ForeignKey('topics.id',
                            use_alter=True, name="fk_tracker_topic_id"),
              nullable=False))
Esempio n. 6
0
from flask import abort, current_app, url_for
from sqlalchemy.orm import aliased

from flaskbb.extensions import db
from flaskbb.utils.database import (CRUDMixin, HideableCRUDMixin, UTCDateTime,
                                    make_comparable)
from flaskbb.utils.helpers import (get_categories_and_forums, get_forums,
                                   slugify, time_utcnow, topic_is_unread)
from flaskbb.utils.settings import flaskbb_config

logger = logging.getLogger(__name__)


moderators = db.Table(
    'moderators',
    db.Column('user_id', db.Integer(),
              db.ForeignKey('users.id', ondelete="CASCADE"),
              nullable=False),
    db.Column('forum_id', db.Integer(),
              db.ForeignKey('forums.id', ondelete="CASCADE"),
              nullable=False))


topictracker = db.Table(
    'topictracker',
    db.Column('user_id', db.Integer(),
              db.ForeignKey('users.id', ondelete="CASCADE"),
              nullable=False),
    db.Column('topic_id', db.Integer(),
              db.ForeignKey('topics.id', ondelete="CASCADE"),
              nullable=False))