diff --git a/app/models.py b/app/models.py index 113a1cba..01340bd2 100644 --- a/app/models.py +++ b/app/models.py @@ -49,6 +49,7 @@ class Permission(enum.Enum): APPROVE_NEW = "APPROVE_NEW" CHANGE_RELEASE_URL = "CHANGE_RELEASE_URL" CHANGE_RANK = "CHANGE_RANK" + EDIT_EDITREQUEST = "EDIT_EDITREQUEST" # Only return true if the permission is valid for *all* contexts # See Package.checkPerm for package-specific contexts @@ -248,7 +249,7 @@ class Package(db.Model): author=self.author.username, name=self.name) def getCreateEditRequestURL(self): - return url_for("create_editrequest_page", + return url_for("create_edit_editrequest_page", ptype=self.type.toName(), author=self.author.username, name=self.name) @@ -353,6 +354,9 @@ class EditRequest(db.Model): title = db.Column(db.String(100), nullable=False) desc = db.Column(db.String(1000), nullable=True) + # 0 - open + # 1 - merged + # 2 - rejected status = db.Column(db.Integer, nullable=False, default=0) changes = db.relationship("EditRequestChange", backref="request", @@ -379,11 +383,38 @@ class EditRequest(db.Model): name=self.package.name, id=self.id) + def getEditURL(self): + return url_for("create_edit_editrequest_page", + ptype=self.package.type.toName(), + author=self.package.author.username, + name=self.package.name, + id=self.id) + def applyAll(self, package): for change in self.changes: change.apply(package) + def checkPerm(self, user, perm): + if not user.is_authenticated: + return False + + if type(perm) == str: + perm = Permission[perm] + elif type(perm) != Permission: + raise Exception("Unknown permission given to EditRequest.checkPerm()") + + isOwner = user == self.author + + # Members can edit their own packages, and editors can edit any packages + if perm == Permission.EDIT_EDITREQUEST: + return isOwner or user.rank.atLeast(UserRank.EDITOR) + + else: + raise Exception("Permission {} is not related to packages".format(perm.name)) + + + class EditRequestChange(db.Model): id = db.Column(db.Integer, primary_key=True) diff --git a/app/templates/packages/editrequest_create.html b/app/templates/packages/editrequest_create_edit.html similarity index 94% rename from app/templates/packages/editrequest_create.html rename to app/templates/packages/editrequest_create_edit.html index dbeba24c..db3beb2e 100644 --- a/app/templates/packages/editrequest_create.html +++ b/app/templates/packages/editrequest_create_edit.html @@ -1,7 +1,7 @@ {% extends "base.html" %} {% block title %} - {{ package.title or "Create Package" }} + {{ package.title or "Edit Request" }} {% endblock %} {% block content %} diff --git a/app/templates/packages/editrequest_view.html b/app/templates/packages/editrequest_view.html index 22b60ae2..ce8f70ec 100644 --- a/app/templates/packages/editrequest_view.html +++ b/app/templates/packages/editrequest_view.html @@ -7,6 +7,9 @@ {% block content %}
+ {% if request.status != 1 and request.status != 2 and request.checkPerm(current_user, 'EDIT_EDITREQUEST') %} + Edit | + {% endif %} Package: {{ package.title }}
diff --git a/app/views/packages.py b/app/views/packages.py
index c39cc8e9..9dde6746 100644
--- a/app/views/packages.py
+++ b/app/views/packages.py
@@ -249,19 +249,43 @@ class EditRequestForm(PackageForm):
edit_desc = TextField("Edit Description", [Optional()])
@app.route("/