diff options
| author | rubenwardy <rw@rubenwardy.com> | 2018-05-25 18:28:24 +0100 |
|---|---|---|
| committer | rubenwardy <rw@rubenwardy.com> | 2018-05-25 18:28:24 +0100 |
| commit | 8cf5c7204f0ebb787eafb9ffa04c9e61a8d6d3af (patch) | |
| tree | 5ef4e040ed428a48319c325d93927508624c99c3 /app/views | |
| parent | f93394df753b7e2181f2a3eb3c1f3d45835ccc63 (diff) | |
| download | cheatdb-8cf5c7204f0ebb787eafb9ffa04c9e61a8d6d3af.tar.xz | |
Add package soft deletion
Diffstat (limited to 'app/views')
| -rw-r--r-- | app/views/__init__.py | 2 | ||||
| -rw-r--r-- | app/views/admin.py | 14 | ||||
| -rw-r--r-- | app/views/packages/__init__.py | 35 | ||||
| -rw-r--r-- | app/views/packages/todo.py | 2 |
4 files changed, 44 insertions, 9 deletions
diff --git a/app/views/__init__.py b/app/views/__init__.py index a296e5d..abaacd7 100644 --- a/app/views/__init__.py +++ b/app/views/__init__.py @@ -38,7 +38,7 @@ def send_upload(path): @app.route("/") @menu.register_menu(app, ".", "Home") def home_page(): - query = Package.query.filter_by(approved=True) + query = Package.query.filter_by(approved=True, soft_deleted=False) count = query.count() packages = query.order_by(db.desc(Package.created_at)).limit(15).all() return render_template("index.html", packages=packages, count=count) diff --git a/app/views/admin.py b/app/views/admin.py index d0dcf73..6c8c4ef 100644 --- a/app/views/admin.py +++ b/app/views/admin.py @@ -37,15 +37,25 @@ def admin_page(): elif action == "importscreenshots": packages = Package.query \ .outerjoin(PackageScreenshot, Package.id==PackageScreenshot.package_id) \ - .filter(PackageScreenshot.id==None).all() + .filter(PackageScreenshot.id==None) \ + .filter_by(soft_deleted=False).all() for package in packages: importRepoScreenshot.delay(package.id) return redirect(url_for("admin_page")) + elif action == "restore": + package = Package.query.get(request.form["package"]) + if package is None: + flash("Unknown package", "error") + else: + package.soft_deleted = False + db.session.commit() + return redirect(url_for("admin_page")) else: flash("Unknown action: " + action, "error") - return render_template("admin/list.html") + deleted_packages = Package.query.filter_by(soft_deleted=True).all() + return render_template("admin/list.html", deleted_packages=deleted_packages) class SwitchUserForm(FlaskForm): username = StringField("Username") diff --git a/app/views/packages/__init__.py b/app/views/packages/__init__.py index c280666..340dab7 100644 --- a/app/views/packages/__init__.py +++ b/app/views/packages/__init__.py @@ -43,7 +43,7 @@ def packages_page(): type = PackageType[type.upper()] title = "Packages" - query = Package.query + query = Package.query.filter_by(soft_deleted=False) if type is not None: title = type.value + "s" @@ -107,8 +107,8 @@ class PackageForm(FlaskForm): type = SelectField("Type", [InputRequired()], choices=PackageType.choices(), coerce=PackageType.coerce, default=PackageType.MOD) license = QuerySelectField("License", [InputRequired()], query_factory=lambda: License.query, get_pk=lambda a: a.id, get_label=lambda a: a.name) tags = QuerySelectMultipleField('Tags', query_factory=lambda: Tag.query.order_by(db.asc(Tag.name)), get_pk=lambda a: a.id, get_label=lambda a: a.title) - harddeps = QuerySelectMultipleField('Dependencies', query_factory=lambda: Package.query.join(User).order_by(db.asc(Package.title), db.asc(User.display_name)), get_pk=lambda a: a.id, get_label=lambda a: a.title + " by " + a.author.display_name) - softdeps = QuerySelectMultipleField('Soft Dependencies', query_factory=lambda: Package.query.join(User).order_by(db.asc(Package.title), db.asc(User.display_name)), get_pk=lambda a: a.id, get_label=lambda a: a.title + " by " + a.author.display_name) + harddeps = QuerySelectMultipleField('Dependencies', query_factory=lambda: Package.query.join(User).filter_by(soft_deleted=False,approved=True).order_by(db.asc(Package.title), db.asc(User.display_name)), get_pk=lambda a: a.id, get_label=lambda a: a.title + " by " + a.author.display_name) + softdeps = QuerySelectMultipleField('Soft Dependencies', query_factory=lambda: Package.query.join(User).filter_by(soft_deleted=False,approved=True).order_by(db.asc(Package.title), db.asc(User.display_name)), get_pk=lambda a: a.id, get_label=lambda a: a.title + " by " + a.author.display_name) repo = StringField("Repo URL", [Optional(), URL()]) website = StringField("Website URL", [Optional(), URL()]) issueTracker = StringField("Issue Tracker URL", [Optional(), URL()]) @@ -151,8 +151,11 @@ def create_edit_package_page(author=None, name=None): if not package: package = Package.query.filter_by(name=form["name"].data, author_id=author.id).first() if package is not None: - flash("Package already exists!", "error") - return redirect(url_for("create_edit_package_page")) + if package.soft_deleted: + package.delete() + else: + flash("Package already exists!", "error") + return redirect(url_for("create_edit_package_page")) package = Package() package.author = author @@ -198,4 +201,26 @@ def approve_package_page(package): return redirect(package.getDetailsURL()) + +@app.route("/packages/<author>/<name>/delete/", methods=["GET", "POST"]) +@login_required +@is_package_page +def delete_package_page(package): + if request.method == "GET": + return render_template("packages/delete.html", package=package) + + if not package.checkPerm(current_user, Permission.DELETE_PACKAGE): + flash("You don't have permission to do that.", "error") + + package.soft_deleted = True + + url = url_for("user_profile_page", username=package.author.username) + triggerNotif(package.author, current_user, + "{} deleted".format(package.title), url) + db.session.commit() + + flash("Deleted package", "success") + + return redirect(url) + from . import todo, screenshots, editrequests, releases diff --git a/app/views/packages/todo.py b/app/views/packages/todo.py index 53fec73..63f843b 100644 --- a/app/views/packages/todo.py +++ b/app/views/packages/todo.py @@ -29,7 +29,7 @@ def todo_page(): packages = None if canApproveNew: - packages = Package.query.filter_by(approved=False).all() + packages = Package.query.filter_by(approved=False, soft_deleted=False).all() releases = None if canApproveRel: |
