diff options
author | rubenwardy <rw@rubenwardy.com> | 2018-06-11 22:49:25 +0100 |
---|---|---|
committer | rubenwardy <rw@rubenwardy.com> | 2018-06-11 22:52:37 +0100 |
commit | b1c349cc3558b4642a700a489482ff95b038ce56 (patch) | |
tree | 1b8cda09e538d9c571050d26ecbb1d5455dea5c0 /app/models.py | |
parent | 40aac38d43c2d7c2220b10a1bef34ac85f960359 (diff) | |
download | cheatdb-b1c349cc3558b4642a700a489482ff95b038ce56.tar.xz |
Add comment system
Diffstat (limited to 'app/models.py')
-rw-r--r-- | app/models.py | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/app/models.py b/app/models.py index 7f0d8f3..c76cb25 100644 --- a/app/models.py +++ b/app/models.py @@ -76,6 +76,7 @@ class Permission(enum.Enum): CHANGE_RANK = "CHANGE_RANK" CHANGE_EMAIL = "CHANGE_EMAIL" EDIT_EDITREQUEST = "EDIT_EDITREQUEST" + SEE_THREAD = "SEE_THREAD" # Only return true if the permission is valid for *all* contexts # See Package.checkPerm for package-specific contexts @@ -120,6 +121,8 @@ class User(db.Model, UserMixin): # causednotifs = db.relationship("Notification", backref="causer", lazy="dynamic") packages = db.relationship("Package", backref="author", lazy="dynamic") requests = db.relationship("EditRequest", backref="author", lazy="dynamic") + threads = db.relationship("Thread", backref="author", lazy="dynamic") + replies = db.relationship("ThreadReply", backref="author", lazy="dynamic") def __init__(self, username, active=False, email=None, password=None): import datetime @@ -337,6 +340,9 @@ class Package(db.Model): approved = db.Column(db.Boolean, nullable=False, default=False) soft_deleted = db.Column(db.Boolean, nullable=False, default=False) + review_thread_id = db.Column(db.Integer, db.ForeignKey("thread.id"), nullable=True, default=None) + review_thread = db.relationship("Thread", foreign_keys=[review_thread_id]) + # Downloads repo = db.Column(db.String(200), nullable=True) website = db.Column(db.String(200), nullable=True) @@ -659,6 +665,49 @@ class EditRequestChange(db.Model): setattr(package, self.key.name, self.newValue) +class Thread(db.Model): + id = db.Column(db.Integer, primary_key=True) + + package_id = db.Column(db.Integer, db.ForeignKey("package.id"), nullable=True) + package = db.relationship("Package", foreign_keys=[package_id]) + + author_id = db.Column(db.Integer, db.ForeignKey("user.id"), nullable=False) + title = db.Column(db.String(100), nullable=False) + private = db.Column(db.Boolean, server_default="0") + + created_at = db.Column(db.DateTime, nullable=False, default=datetime.utcnow) + + replies = db.relationship("ThreadReply", backref="thread", lazy="dynamic") + + def checkPerm(self, user, perm): + if not user.is_authenticated: + return not self.private + + if type(perm) == str: + perm = Permission[perm] + elif type(perm) != Permission: + raise Exception("Unknown permission given to Thread.checkPerm()") + + isOwner = user == self.author + + if perm == Permission.SEE_THREAD: + return not self.private or isOwner or user.rank.atLeast(UserRank.EDITOR) + + else: + raise Exception("Permission {} is not related to threads".format(perm.name)) + +class ThreadReply(db.Model): + id = db.Column(db.Integer, primary_key=True) + thread_id = db.Column(db.Integer, db.ForeignKey("thread.id"), nullable=False) + comment = db.Column(db.String(500), nullable=False) + author_id = db.Column(db.Integer, db.ForeignKey("user.id"), nullable=False) + created_at = db.Column(db.DateTime, nullable=False, default=datetime.utcnow) + + + + + + REPO_BLACKLIST = [".zip", "mediafire.com", "dropbox.com", "weebly.com", \ "minetest.net", "dropboxusercontent.com", "4shared.com", \ "digitalaudioconcepts.com", "hg.intevation.org", "www.wtfpl.net", \ |