]> git.lizzy.rs Git - cheatdb.git/blob - app/blueprints/packages/screenshots.py
40cf4d25fc2153cbc15e845b1db52706799057ab
[cheatdb.git] / app / blueprints / packages / screenshots.py
1 # Content DB
2 # Copyright (C) 2018  rubenwardy
3 #
4 # This program is free software: you can redistribute it and/or modify
5 # it under the terms of the GNU General Public License as published by
6 # the Free Software Foundation, either version 3 of the License, or
7 # (at your option) any later version.
8 #
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 # GNU General Public License for more details.
13 #
14 # You should have received a copy of the GNU General Public License
15 # along with this program.  If not, see <https://www.gnu.org/licenses/>.
16
17
18 from flask import *
19 from flask_user import *
20
21 from . import bp
22
23 from app.models import *
24 from app.utils import *
25
26 from flask_wtf import FlaskForm
27 from wtforms import *
28 from wtforms.validators import *
29
30
31 class CreateScreenshotForm(FlaskForm):
32         title      = StringField("Title/Caption", [Optional()])
33         fileUpload = FileField("File Upload", [InputRequired()])
34         submit     = SubmitField("Save")
35
36
37 class EditScreenshotForm(FlaskForm):
38         title    = StringField("Title/Caption", [Optional()])
39         approved = BooleanField("Is Approved")
40         delete   = BooleanField("Delete")
41         submit   = SubmitField("Save")
42
43 @bp.route("/packages/<author>/<name>/screenshots/new/", methods=["GET", "POST"])
44 @login_required
45 @is_package_page
46 def create_screenshot(package, id=None):
47         if not package.checkPerm(current_user, Permission.ADD_SCREENSHOTS):
48                 return redirect(package.getDetailsURL())
49
50         # Initial form class from post data and default data
51         form = CreateScreenshotForm()
52         if request.method == "POST" and form.validate():
53                 uploadedUrl, uploadedPath = doFileUpload(form.fileUpload.data, "image",
54                                 "a PNG or JPG image file")
55                 if uploadedUrl is not None:
56                         ss = PackageScreenshot()
57                         ss.package  = package
58                         ss.title    = form["title"].data or "Untitled"
59                         ss.url      = uploadedUrl
60                         ss.approved = package.checkPerm(current_user, Permission.APPROVE_SCREENSHOT)
61                         db.session.add(ss)
62
63                         msg = "Screenshot added {}" \
64                                         .format(ss.title)
65                         addNotification(package.maintainers, current_user, msg, package.getDetailsURL(), package)
66                         db.session.commit()
67                         return redirect(package.getDetailsURL())
68
69         return render_template("packages/screenshot_new.html", package=package, form=form)
70
71 @bp.route("/packages/<author>/<name>/screenshots/<id>/edit/", methods=["GET", "POST"])
72 @login_required
73 @is_package_page
74 def edit_screenshot(package, id):
75         screenshot = PackageScreenshot.query.get(id)
76         if screenshot is None or screenshot.package != package:
77                 abort(404)
78
79         canEdit = package.checkPerm(current_user, Permission.ADD_SCREENSHOTS)
80         canApprove = package.checkPerm(current_user, Permission.APPROVE_SCREENSHOT)
81         if not (canEdit or canApprove):
82                 return redirect(package.getDetailsURL())
83
84         # Initial form class from post data and default data
85         form = EditScreenshotForm(formdata=request.form, obj=screenshot)
86
87         if request.method == "GET":
88                 # HACK: fix bug in wtforms
89                 form.approved.data = screenshot.approved
90
91         if request.method == "POST" and form.validate():
92                 if canEdit and form["delete"].data:
93                         PackageScreenshot.query.filter_by(id=id).delete()
94
95                 else:
96                         wasApproved = screenshot.approved
97
98                         if canEdit:
99                                 screenshot.title = form["title"].data or "Untitled"
100
101                         if canApprove:
102                                 screenshot.approved = form["approved"].data
103                         else:
104                                 screenshot.approved = wasApproved
105
106                 db.session.commit()
107                 return redirect(package.getDetailsURL())
108
109         return render_template("packages/screenshot_edit.html", package=package, screenshot=screenshot, form=form)