diff options
Diffstat (limited to 'app')
-rw-r--r-- | app/models.py | 13 | ||||
-rw-r--r-- | app/templates/package_details.html | 11 | ||||
-rw-r--r-- | app/views/packages.py | 24 |
3 files changed, 45 insertions, 3 deletions
diff --git a/app/models.py b/app/models.py index d24c218..839bc49 100644 --- a/app/models.py +++ b/app/models.py @@ -35,6 +35,12 @@ class Permission(enum.Enum): APPROVE_NEW = "APPROVE_NEW" CHANGE_RELEASE_URL = "CHANGE_RELEASE_URL" + def check(self, user): + if self == Permission.APPROVE_NEW: + return user.rank.atLeast(UserRank.EDITOR) + else: + raise Exception("Non-global permission checked globally. Use Package.checkPerm or User.checkPerm instead.") + class User(db.Model, UserMixin): id = db.Column(db.Integer, primary_key=True) @@ -102,6 +108,8 @@ class Package(db.Model): desc = db.Column(db.Text, nullable=True) type = db.Column(db.Enum(PackageType)) + approved = db.Column(db.Boolean, nullable=False, default=False) + # Downloads repo = db.Column(db.String(200), nullable=True) website = db.Column(db.String(200), nullable=True) @@ -122,6 +130,11 @@ class Package(db.Model): type=self.type.toName(), author=self.author.username, name=self.name) + def getApproveURL(self): + return url_for("approve_package_page", + type=self.type.toName(), + author=self.author.username, name=self.name) + def getCreateReleaseURL(self): return url_for("create_release_page", type=self.type.toName(), diff --git a/app/templates/package_details.html b/app/templates/package_details.html index 58facbc..d0d13e1 100644 --- a/app/templates/package_details.html +++ b/app/templates/package_details.html @@ -5,6 +5,17 @@ {% endblock %} {% block content %} + {% if not package.approved %} + <div class="box box_grey alert alert-warning"> + <span class="icon_message"></span> + This package needs to be approved before it can be found. + {% if package.checkPerm(current_user, "APPROVE_NEW") %} + <a href="{{ package.getApproveURL() }}">Approve</a> + {% endif %} + <div style="clear: both;"></div> + </div> + {% endif %} + <h1>{{ package.title }} by {{ package.author.display_name }}</h1> <aside class="asideright box box_grey"> diff --git a/app/views/packages.py b/app/views/packages.py index 7474af1..60ba596 100644 --- a/app/views/packages.py +++ b/app/views/packages.py @@ -15,19 +15,19 @@ from wtforms.validators import * @app.route('/mods/') @menu.register_menu(app, '.mods', 'Mods', order=10) def mods_page(): - packages = Package.query.filter_by(type=PackageType.MOD).all() + packages = Package.query.filter_by(type=PackageType.MOD, approved=True).all() return render_template('packages.html', title="Mods", packages=packages) @app.route('/games/') @menu.register_menu(app, '.games', 'Games', order=11) def games_page(): - packages = Package.query.filter_by(type=PackageType.GAME).all() + packages = Package.query.filter_by(type=PackageType.GAME, approved=True).all() return render_template('packages.html', title="Games", packages=packages) @app.route('/texturepacks/') @menu.register_menu(app, '.txp', 'Texture Packs', order=12) def txp_page(): - packages = Package.query.filter_by(type=PackageType.TXP).all() + packages = Package.query.filter_by(type=PackageType.TXP, approved=True).all() return render_template('packages.html', title="Texture Packs", packages=packages) @@ -92,6 +92,7 @@ def create_edit_package_page(type=None, author=None, name=None): if not package: package = Package() package.author = current_user + # package.approved = package.checkPerm(current_user, Permission.APPROVE_NEW) form.populate_obj(package) # copy to row db.session.commit() # save @@ -99,6 +100,23 @@ def create_edit_package_page(type=None, author=None, name=None): return render_template('package_create_edit.html', package=package, form=form) +@app.route("/<type>s/<author>/<name>/approve/") +@login_required +def approve_package_page(type=None, author=None, name=None): + package = getPageByInfo(type, author, name) + + if not package.checkPerm(current_user, Permission.APPROVE_NEW): + flash("You don't have permission to do that.", "error") + + elif package.approved: + flash("Package has already been approved", "error") + + else: + package.approved = True + db.session.commit() + + + return redirect(package.getDetailsURL()) class CreatePackageReleaseForm(FlaskForm): name = StringField("Name") |