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)
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
""" 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(),
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)
""" 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))
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))